#include <iostream>
#include <map>
#include <cmath>
using namespace std;
// 函數:將羅馬數字轉換為阿拉伯數字
int rm2int(string s)
{
// 建立一個 map,將羅馬數字字符映射到對應的阿拉伯數字
map<char, int> rm = {
{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50},
{'C', 100}, {'D', 500}, {'M', 1000}
};
int result = 0; // 初始化結果變數,用來儲存最終的阿拉伯數字
// 遍歷輸入的羅馬數字字串
for (int i = 0; i < s.size(); i++)
{
// 如果當前字符的值比下一個字符小,進行減法(特殊規則,如 IV 表示 4)
if (i + 1 < s.size() && rm[s[i]] < rm[s[i + 1]]) {
result -= rm[s[i]]; // 減去當前字符的值
}
// 否則進行加法
else {
result += rm[s[i]]; // 加上當前字符的值
}
}
return result; // 返回最終的阿拉伯數字
}
// 函數:將阿拉伯數字轉換為羅馬數字
string int2rm(int num) {
// 建立一個 pair 陣列,將阿拉伯數字和羅馬數字配對
pair<int, string> rm[] = {
{1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"},
{100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"},
{10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"}
};
string result = ""; // 初始化結果字串
// 從最大的數字開始,逐一匹配
for (int i = 0; i < 13; i++)
{
// 只要當前數字大於等於 rm[i].first,就減去對應的阿拉伯數字,並將羅馬數字加到結果中
while (num >= rm[i].first) {
result += rm[i].second; // 加上對應的羅馬數字
num -= rm[i].first; // 減去對應的阿拉伯數字
}
}
return result; // 返回最終的羅馬數字
}
int main()
{
string num1, num2;
// 持續讀取輸入直到輸入包含 #
while (cin >> num1 >> num2 && num1 != "#" && num2 != "#") {
// 將兩個羅馬數字轉換為阿拉伯數字
int v1 = rm2int(num1);
int v2 = rm2int(num2);
// 計算兩個數字的絕對差值
int diff = abs(v1 - v2);
// 如果差值為 0,輸出 "ZERO"
if (diff == 0)
{
cout << "ZERO" << endl;
}
else
{
cout << int2rm(diff) << endl;
}
}
return 0;
}