#include int reg[10], i, sign; char z, c[100]; int conv(char *s, int len) { int ret = 0, i; if (s[0] == 'O') return ret; for (i = 0; i < len; i++) { switch (s[i]) { case 'I': if (i + 1 < len) { if (s[i + 1] == 'V') {i++; ret += 4;} else if (s[i + 1] == 'X') {i++; ret += 9;} else ret += 1; } else ret += 1; break; case 'V': ret += 5; break; case 'X': if (i + 1 < len) { if (s[i+1] == 'L') {i++; ret += 40;} else if (s[i+1] == 'C') {i++; ret+=90;} else ret += 10; } else ret += 10; break; case 'L': ret += 50; break; case 'C': if (i + 1 < len) { if (s[i+1] == 'D') {i++; ret += 400;} else if (s[i+1] == 'M') {i++; ret += 900;} else ret += 100; } else ret += 100; break; case 'D': ret += 500; break; case 'M': ret += 1000; break; } } return ret; } void conv2(int c) { if (c == 0) { printf("O"); return; } while (c >= 1000) { putchar('M'); c -= 1000; } if (c >= 900) { putchar('C'); putchar('M'); c -= 900;} if (c >= 500) { putchar('D'); c -= 500;} if (c >= 400) { putchar('C'); putchar('D'); c -= 400;} while (c >= 100) { putchar('C'); c -= 100; } if (c >= 90) { putchar('X'); putchar('C'); c -= 90; } if (c >= 50) { putchar('L'); c -= 50; } if (c >= 40) { putchar('X'); putchar('L'); c -= 40; } while (c >= 10) { putchar('X'); c -= 10; } if (c >= 9) { putchar('I'); putchar('X'); c -= 9; } if (c >= 5) { putchar('V'); c -= 5; } if (c >= 4) { putchar('I'); putchar('V'); c -= 4; } while (c >= 1) { putchar('I'); c--; } } int main() { for (i = 0; i < 10; i++) reg[i] = -1; while (true) { next: z = getchar(); if (z == 'R') { while ((z = getchar()) != '\n'); for (i = 0; i < 10; i++) reg[i] = -1; printf("Ready\n"); } else if (z == 'Q') { printf("Bye\n"); return 0; } else { int r = z - '0'; z = getchar(); // = sign = 1; int vysl = 0; while (z != '\n') { z = getchar(); if (z >= '0' && z <= '9') { if (reg[z-'0'] < 0 || reg[z-'0'] > 10000) { printf("Error\n"); while ((z = getchar()) != '\n'); goto next; } else vysl += sign * reg[z-'0']; z = getchar(); } else { i = 0; while (z != '+' && z != '-' && z != '\n') { c[i++] = z; z = getchar(); } vysl += sign * conv(c, i); } if (z == '+') sign = 1; if (z == '-') sign = -1; } if (vysl < 0 || vysl > 10000) { printf("Error\n"); } else { reg[r] = vysl; printf("%d=", r); conv2(vysl); printf("\n"); } } } return 0; }