#include <bits/stdc++.h>
using namespace std;
char c[100005];
char in[7];
char num[100005];
template <class T>
void Swap(T &x, T &y) {
  T tmp = x;
  x = y;
  y = tmp;
};
char *itob(long long unsigned n, long long unsigned b = 10) {
  long long unsigned j, sign;
  register long long unsigned i = 0;
  do {
    if ((sign = n) < 0) n = -n;
    {
      j = n % b;
      num[i++] = (j < 10) ? (j + '0') : ('A' + j - 10);
    }
  } while ((n /= b) != 0);
  if (sign < 0) num[i++] = '-';
  num[i] = '\0';
  reverse(num, num + i);
  return num;
}
string fill(char c, int n) {
  string s;
  while (n--) s += c;
  return s;
}
string toRoman(int n) {
  if (n < 4) return fill('i', n);
  if (n < 6) return fill('i', 5 - n) + "v";
  if (n < 9) return string("v") + fill('i', n - 5);
  if (n < 11) return fill('i', 10 - n) + "x";
  if (n < 40) return fill('x', n / 10) + toRoman(n % 10);
  if (n < 60) return fill('x', 5 - n / 10) + 'l' + toRoman(n % 10);
  if (n < 90) return string("l") + fill('x', n / 10 - 5) + toRoman(n % 10);
  if (n < 110) return fill('x', 10 - n / 10) + "c" + toRoman(n % 10);
  if (n < 400) return fill('c', n / 100) + toRoman(n % 100);
  if (n < 600) return fill('c', 5 - n / 100) + 'd' + toRoman(n % 100);
  if (n < 900) return string("d") + fill('c', n / 100 - 5) + toRoman(n % 100);
  if (n < 1100) return fill('c', 10 - n / 100) + "m" + toRoman(n % 100);
  if (n < 4000) return fill('m', n / 1000) + toRoman(n % 1000);
  return "?";
}
int main() {
  long long unsigned a, N, b, x;
  int i, l;
  while (cin >> a && scanf("%s%s", in, c) == 2) {
    N = 0;
    l = strlen(c);
    for (i = l - 1, x = 1; i >= 0; i--) {
      if (isdigit(c[i]))
        N += (c[i] - '0') * x;
      else
        N += (c[i] - 'A' + 10) * x;
      x *= a;
    }
    if (in[0] == 'R') {
      string ans = toRoman((int)N);
      for (i = 0; i < ((int)ans.size()); i++) ans[i] = toupper(ans[i]);
      cout << ans;
    } else {
      b = atoi(in);
      printf("%s", itob(N, b));
    }
    puts("");
  }
  return 0;
}
