/*
Online Java - IDE, Code Editor, Compiler

Online Java is a quick and easy tool that helps you to build, compile, test your programs online.
*/

import java.util.*;

public class Solution 
{
    public static void main (String []args)
    {
        System.out.println("Welcome to Online IDE!! Happy Coding :)");
        System.out.println("DECIMAL to ROMAN NUMERAL CONVERSION. REFRAIN FROM SETTING ABOVE 3999 DUE TO CHANGE IN CONVENTION");
        
        for (int i=1; i<4000; i++)
        {
            System.out.println("Decimal: " + i + " => " + decimalToRoman(i));
        }
    }
    
    public static String decimalToRoman(int num) 
    {
        String [][] numeralsCorrection = new String[][]
                                                {
                                                    
                                                {"MIIII","MIV"},{"DIIII","DIV"},{"CIIII","CIV"},{"LIIII","LIV"},{"XIIII","XIV"},{"VIIII","IX"},{"IIII","IV"},           
                                                {"MXXXX","MXL"},{"DXXXX","DXL"},{"CXXXX","CXL"},{"LXXXX","XC"},{"XXXX","XL"},           
                                                {"MCCCC","MCD"},{"DCCCC","CM"},{"CCCC","CD"}        
            
                                                };
        String incorrectNumeral="";
        String adjustedNumeral="";
        int counter=0;
        String beyondIncorrectNumeral="";
        String beforeIncorrectNumeral="";
        String conversion="";
        int currentNumeral=0;
        
        if (num==0)
        {
            return conversion;
        }
        else
        {
            do
            {
                if (num >= 1000) 
                {
                    currentNumeral++;
                    conversion = conversion + "M";
                    num=num-1000;
                } 
                else if (num>=500) 
                {
                    currentNumeral++;
                    conversion = conversion + "D";
                    num=num-500;
                }
                else if (num>=100) 
                {
                    currentNumeral++;
                    conversion = conversion + "C";
                    num=num-100;
                }
                else if (num>=50) 
                {
                    currentNumeral++;
                    conversion = conversion + "L";
                    num = num - 50;
                }
                else if (num>=10) 
                {
                    currentNumeral++;
                    conversion = conversion + "X";
                    num = num -10;
                }
                else if (num>=5) 
                {
                    currentNumeral++;
                    conversion = conversion + "V";
                    num = num - 5;
                }
                else if (num>=1)
                {
                    currentNumeral++;
                    conversion = conversion + "I";
                    num = num - 1;
                }
                else
                {
                    System.out.println("Unknown error, code will terminate");
                    System.exit(0);
                }
            }while (num>0);
        
            System.out.println(conversion);
            
            for (String a[]:numeralsCorrection)
            {
                for (String str: a)
                {   
                    counter++;
                    
                    if (counter==1)
                    {
                        incorrectNumeral = str;
                    }
                    
                    if (counter==2)
                    {
                        adjustedNumeral = str;
                    }
                    
                    if (counter==2)
                    {
                        if (conversion.indexOf(incorrectNumeral)!=-1)
                        {
                            beyondIncorrectNumeral = conversion.substring(conversion.indexOf(incorrectNumeral)+incorrectNumeral.length());
                            beforeIncorrectNumeral = conversion.substring(0,conversion.indexOf(incorrectNumeral));
                            conversion = beforeIncorrectNumeral + adjustedNumeral + beyondIncorrectNumeral;
                            beyondIncorrectNumeral="";
                            beforeIncorrectNumeral="";
                        }
                    }
                }
                counter=0;
            }
        }
        return conversion;  
    }
}