#include #include int main (void) { for (;;) { unsigned num_d, num_c, num_xc, num_l, num_x, got_x, num_ix, num_v, num_i, got_i; unsigned long long val; char buf[10240], *p; if (gets (buf) == NULL) break; if (*buf == 0) break; num_d = num_c = num_xc = num_l = num_x = num_ix = num_v = num_i = got_x = got_i = 0; val = 0; for (p = buf; *p != 0; p++) { switch (*p) { case 'm': val = val + 1000 - (val % 1000); num_d = num_c = num_xc = num_l = num_x = num_ix = num_v = num_i = got_x = got_i = 0; break; case 'd': if (num_d < 1) { val = val + 500 - (val % 500); num_c = num_xc = num_l = num_x = num_ix = num_v = num_i = got_x = got_i = 0; num_d++; } break; case 'c': if (num_c < 3) { val = val + 100 - (val % 100); num_l = num_x = num_ix = num_v = num_i = got_x = got_i = 0; num_c++; } else if (num_xc == 0 && got_x != 0) { val = val + 90 - (val % 100); num_l = 1; num_x = 3; num_ix = num_v = num_i = got_i = 0; num_xc = 1; } break; case 'l': if (num_l < 1) { val = val + 50 - (val % 50); num_x = num_ix = num_v = num_i = got_i = 0; /* xc > lc */ num_l++; } break; case 'x': got_x = 1; if (num_x < 3) { val = val + 10 - (val % 10); num_v = num_i = got_i = 0; num_x++; } else if (num_ix == 0 && got_i != 0) { val = val + 9 - (val % 10); num_v = 1; num_i = 3; num_ix = 1; } break; case 'v': if (num_v < 1) { val = val + 5 - (val % 5); num_i = 0; num_v++; } break; case 'i': got_i = 1; if (num_i < 3) { val++; num_i++; } break; default: break; } } printf ("%llu\n", val); } return EXIT_SUCCESS; }