#include int r[1000]; char p[10][10]={{"MCXI"},{"DLV"}}; int rtoi(){ int vysl=0; if(r[0]==-1) return 0; for(int i=0;r[i]>=0;i++){ if((r[i]==1 || r[i]==10 || r[i]==100) && (r[i+1]>=0) && ((r[i+1]==5*r[i]) || (r[i+1]==10*r[i]))) {vysl+=r[i+1]-r[i]; i++;} else vysl+=r[i]; } return vysl; } void itor(int l,int c){ int kl; //printf("%d\n",l); if(l>10000) {printf("Error\n"); return;} else printf("%d=",c); while(l>=1000) {l-=1000; putchar('M');} for(int i=100,j=0;i;i/=10,j++){ switch((l/i)%10){ case 4: {printf("%c%c",p[0][j+1],p[1][j]); break;} case 9: {printf("%c%c",p[0][j+1],p[0][j]); break;} default: { kl=((l/i)%10); if(kl>5) {printf("%c",p[1][j]); kl-=5;} while(kl--) putchar(p[0][j+1]); } }} return; } int main(){ bool ple[10],err,znam; int reg[10]; char c,d; int j,vy; for(int i=0;i<10;i++) {ple[i]=0;reg[i]=0;} for(;;){ c=getchar(); switch (c){ case 'R': { printf("Ready\n"); for(int i=0;i<10;i++) {ple[i]=0;reg[i]=0;} while((d=getchar())!='\n'); break; } case 'Q': {printf("Bye\n"); return 0;} default : { d=getchar(); j=0; vy=0; err=0; znam=0; while((d=getchar())!='\n'){ switch(d){ case 'O': {r[j]=0; j++; break;} case 'I': {r[j]=1; j++; break;} case 'V': {r[j]=5; j++; break;} case 'X': {r[j]=10; j++; break;} case 'L': {r[j]=50; j++; break;} case 'C': {r[j]=100; j++; break;} case 'D': {r[j]=500; j++; break;} case 'M': {r[j]=1000; j++; break;} case ' ': {break;} case '+': {r[j]=-1; if (!znam) vy+=rtoi(); else vy-=rtoi(); znam=0; j=0; break;} case '-': {r[j]=-1; if (!znam) vy+=rtoi(); else vy-=rtoi(); znam=1; j=0; break;} default : {if((d-'0')<0 || (d-'0')>9) printf("lol"); if (!znam) vy+=reg[c-'0']; else vy-=reg[c-'0']; znam=0; if(!ple[c-'0']) err=1; j=0; break;} }} ple[c-'0']=1; if(j>0){ r[j]=-1; if (!znam) vy+=rtoi(); else vy-=rtoi(); } if(err) printf("Error\n"); else { // printf("%d",vy);putchar(p[2][0]); itor(vy,c-'0'); reg[c-'0']=vy; putchar('\n'); } //c=getchar(); //printf("%d",rtoi()); } } }}