program RecursiveRoman (input, output); var k: integer; function Translation (romanDigit: char): integer; begin case romanDigit of 'i': Translation := 1; 'v': Translation := 5; 'x': Translation := 10; 'l': Translation := 50; 'c': Translation := 100; 'd': Translation := 500; 'm': Translation := 1000; end; end; procedure ReadRoman (var valToReturn: integer; var lastRoman: char); var romanDigit: char; romanInt: integer; begin read (romanDigit); romanInt := Translation (romanDigit); if eoln then begin lastRoman := romanDigit; valToReturn := romanInt; end else begin ReadRoman (valToReturn, lastRoman); if romanInt < Translation (lastRoman) then begin valToReturn := valToReturn - romanInt; end else begin valToReturn := valToReturn + romanInt; end; end; end; procedure ReadlnRoman (var valToReturn: integer); var lastRoman: char; begin if eoln then begin valToReturn := 0; end else begin ReadRoman (valToReturn, lastRoman); end; readln; end; begin while not eof do begin ReadlnRoman (k); writeln (k); end; end.