#include<stdio.h>

int strlen(char *s){
	int i=0;
	while(s[i]!='\0'){i++;}
	return i;
}

int convert(char s){
	switch (s) {
		case 'I':
		return 1;
		case 'V':
		return 5;
		case 'X':
		return 10;
		case 'L':
		return 50;
		case 'C':
		return 100;
		case 'D':
		return 500;
		case 'M':
		return 1000;
	}
	return 0;
}

void construct(int a,char m1,char m2,char m3){
	char s[5];
	int i=0;
	switch(a){
		case 3:
		s[i]=m1;
		i++;
		case 2:
		s[i]=m1;
		i++;
		case 1:
		s[i]=m1;
		s[i+1]='\0';
		printf("%s",s);
		return;
		case 4:
		printf("%c%c",m1,m2);
		return;
		case 5:
		case 6:
		case 7:
		case 8:
		s[0]=m2;
		for(i=0;i<a-5;i++){
			s[i+1]=m1;
		}
		s[a-4]='\0';
		printf("%s",s);
		return;
		case 9:
		printf("%c%c",m1,m3);
		return;
		case 0:
		return;
	}
}

int main(int argc, char const *argv[]){
	char r[22];
	int n,a=0,c,i,p,l,d,b[4];
	scanf("%d",&n);
	getchar();
	while(n>0){
		i=0;
		r[0]=getchar();
		while(r[i]!=' ' && r[i]!='\n'){
			i++;
			r[i]=getchar();
		}
		l=i;
		p=0;
		c=0;
		for(i=l-1;i>=0;i--){
			c=convert(r[i]);
			d=0;
			while(i-d-1>=0 && r[i]==r[i-d-1]){
				d++;
			}
			if(p!=0 && p>c){
				a-=c*(d+1);
			}else{
				a+=c*(d+1);
			}
			p=c;
			i-=d;
		}
		if(a>3999){
			printf("ERROR\n");
			return 0;
		}
		n--;
	}
	for(i=0;i<4;i++){
		b[i]=a%10;
		a/=10;
	}
	construct(b[3],'M','?','?');
	construct(b[2],'C','D','M');
	construct(b[1],'X','L','C');
	construct(b[0],'I','V','X');
	printf("\n");
	return 0;
}