#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
int n;
int m;
int getInt(char c) {
  if (isdigit(c))
    return c - 48;
  else
    return c - 55;
}
char getChar(int x) {
  if (x < 10)
    return (char)(x + 48);
  else
    return (char)(x + 55);
}
long long parse(string s, int mod) {
  long long ans = 0;
  for (int i = 0; i < (((int)(s).size())); i++) ans = ans * mod + getInt(s[i]);
  return ans;
}
char getC(int x, int o) {
  if (x == 0 && o == 1) return 'I';
  if (x == 0 && o == 5) return 'V';
  if (x == 1 && o == 1) return 'X';
  if (x == 1 && o == 5) return 'L';
  if (x == 2 && o == 1) return 'C';
  if (x == 2 && o == 5) return 'D';
  return 'M';
}
string getAns(int x, int p) {
  char c1 = getC(p, 5);
  char c2 = getC(p + 1, 1);
  char c0 = getC(p, 1);
  string ans = "";
  if (x <= 3) {
    for (int i = 0; i < (x); i++) ans += c0;
    return ans;
  }
  if (x == 4) {
    ans += c0;
    ans += c1;
    return ans;
  }
  if (x <= 8) {
    ans += c1;
    for (int i = 0; i < (x - 5); i++) ans += c0;
    return ans;
  }
  if (x == 9) {
    ans += c0;
    ans += c2;
    return ans;
  }
}
int main() {
  int a;
  cin >> a;
  string s, c;
  cin >> s >> c;
  long long z = parse(c, a);
  if (s == "R") {
    string ans = "";
    vector<string> tmp;
    int p = 0;
    while (z) {
      tmp.push_back(getAns(z % 10, p));
      z /= 10;
      p++;
    }
    reverse((tmp).begin(), (tmp).end());
    for (int i = 0; i < (((int)(tmp).size())); i++) ans += tmp[i];
    cout << ans << endl;
  } else {
    if (z == 0) {
      cout << 0 << endl;
      return 0;
    }
    long long m = parse(s, 10);
    string ans = "";
    while (z) {
      int x = z % m;
      ans += getChar(x);
      z /= m;
    }
    reverse((ans).begin(), (ans).end());
    cout << ans << endl;
  }
  return 0;
}
