const rom:array [1..7] of char =('M','D','C','L','X','V','I');
      arab:array [1..7] of integer=(1000,500,100,50,10,5,1);

function val_rom(f:char):integer;
var i:byte;
begin
 for i:=1 to 7 do if f=rom[i] then begin val_rom:=arab[i];exit;end;
 val_rom:=0;
end;

function rom2arab(r:string):integer;
begin
 if length(r)=0 then rom2arab:=0 else
 if length(r)=1 then rom2arab:=val_rom(r[1])
 else begin
  if val_rom(r[1])<val_rom(r[2]) then
   rom2arab:=val_rom(r[2])-val_rom(r[1])+rom2arab(copy(r,3,length(r)-2))
  else
   rom2arab:=val_rom(r[1])+rom2arab(copy(r,2,length(r)-1))
 end;
end;

function arab2rom(a:integer):string;
var s:string;
    i,n:byte;
begin
 s:='';i:=1;
 while a>1000 do begin dec(a,1000);s:=s+rom[i];end;
 while a>0 do begin
  while a<arab[i] do inc(i);
  n:=(a*10) div arab[i];
  if odd(i) and (n>=40) then begin
   s:=s+rom[i]+rom[i-1];a:=a-(arab[i-1]-arab[i]);
  end
  else if not odd(i) and (n>=18) then begin
   s:=s+rom[i+1]+rom[i-1];a:=a-(arab[i-1]-arab[i+1]);
  end
  else
  while a>=arab[i] do
  begin
   s:=s+rom[i];dec(a,arab[i]);
  end;
 end;
 arab2rom:=s;
end;

var r:string;a:integer;
begin
repeat
 readln(a);r:=arab2rom(a);
 writeln(r,'  ',rom2arab(r));
until a=0;
end.
