#include using namespace std; using ll = long long; using VI = vector; using VL = vector; using PII = std::pair; using PLL = std::pair; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep2(i, s, n) for (int i = (s); i < (int)(n); i++) #define allpt(v) (v).begin(), (v).end() const int mod = 1e9 + 7; const string wsp = " "; const string tb = "\t"; const string rt = "\n"; template void show1dvec(vector v) { int n = v.size() - 1; rep(i, n) cout << v[i] << wsp; cout << v[n] << rt; return; } int rometoint(string s) { int iflag, xflag, cflag; iflag = xflag = cflag = false; int n = s.length(); int r = 0; rep(i, n) { if (s[n - 1 - i] == 'V' || s[n - 1 - i] == 'X') iflag = true; if (s[n - 1 - i] == 'L' || s[n - 1 - i] == 'C') xflag = true; if (s[n - 1 - i] == 'D' || s[n - 1 - i] == 'M') cflag = true; if (s[n - 1 - i] == 'I' && iflag) r -= 1; if (s[n - 1 - i] == 'I' && !iflag) r += 1; if (s[n - 1 - i] == 'V') r += 5; if (s[n - 1 - i] == 'X' && xflag) r -= 10; if (s[n - 1 - i] == 'X' && !xflag) r += 10; if (s[n - 1 - i] == 'L') r += 50; if (s[n - 1 - i] == 'C' && cflag) r -= 100; if (s[n - 1 - i] == 'C' && !cflag) r += 100; if (s[n - 1 - i] == 'D') r += 500; if (s[n - 1 - i] == 'M') r += 1000; } return r; } string inttorome(int x) { int y; string ret; vector charlist = {"M", " ", "C", "D", "X", "L", "I", "V"}; rep(i, 4) { y = (x / 1000) % 10; x *= 10; if (y % 5 == 4) { ret += charlist[2 * i]; if (y == 9) ret += charlist[2 * i - 2]; else ret += charlist[2 * i + 1]; } else { if (y >= 5) { ret += charlist[2 * i + 1]; y -= 5; } rep(j, y) ret += charlist[2 * i]; } } return ret; } int main() { #ifdef DEBUG cout << "DEBUG MODE" << endl; ifstream in("input.txt"); //for debug cin.rdbuf(in.rdbuf()); //for debug #endif int n, total; string s; total = 0; cin >> n; rep(i, n) { cin >> s; total += rometoint(s); } if (total >= 4000) cout << "ERROR" << rt; else cout << inttorome(total) << rt; return 0; }