#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void checkmin(T& a, T b) {
  if (b < a) a = b;
}
template <class T>
inline void checkmax(T& a, T b) {
  if (b > a) a = b;
}
template <class T>
T Abs(T x) {
  return x > 0 ? x : -x;
}
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline bool isPrime(T n) {
  if (n <= 1) return false;
  for (T i = 2; i * i <= n; i++)
    if (n % i == 0) return false;
  return true;
}
template <class T>
inline T Mod(T n, T m) {
  return (n % m + m) % m;
}
template <class T>
void debug(const T& e) {
  cout << e << endl;
}
template <class T1, class T2>
void debug(const T1& e1, const T2& e2) {
  cout << e1 << "\t" << e2 << endl;
}
template <class T1, class T2, class T3>
void debug(const T1& e1, const T2& e2, const T3& e3) {
  cout << e1 << "\t" << e2 << "\t" << e3 << endl;
}
template <class T1, class T2, class T3, class T4>
void debug(const T1& e1, const T2& e2, const T3& e3, const T4& e4) {
  cout << e1 << "\t" << e2 << "\t" << e3 << "\t" << e4 << endl;
}
template <class T1, class T2, class T3, class T4, class T5>
void debug(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
           const T5& e5) {
  cout << e1 << "\t" << e2 << "\t" << e3 << "\t" << e4 << "\t" << e5 << endl;
}
template <class T>
void debug(vector<T>& e) {
  int i;
  for (i = 0; i < (int)e.size(); i++) cout << e[i] << " ";
  cout << endl;
}
template <class T>
void debug(vector<basic_string<T> >& e) {
  int i, j;
  for (i = 0; i < (int)e.size(); i++) {
    for (j = 0; j < (int)e[i].size(); j++) cout << e[i][j];
    cout << endl;
  }
  cout << endl;
}
template <class T>
void debug(vector<vector<T> >& e, int row, int col) {
  int i, j;
  for (i = 0; i < row; i++) {
    for (j = 0; j < col; j++) cout << e[i][j] << "\t";
    cout << endl;
  }
  cout << endl;
}
template <class T>
void debug(T e[100][100], int row, int col) {
  int i, j;
  for (i = 0; i < row; i++) {
    for (j = 0; j < col; j++) cout << e[i][j] << " ";
    cout << endl;
  }
}
template <class T>
void debug(T e[], int row) {
  int i;
  for (i = 0; i < row; i++) cout << e[i] << " ";
  cout << endl;
}
template <class T>
string toString(T n) {
  ostringstream oss;
  oss << n;
  oss.flush();
  return oss.str();
}
int toInt(string s) {
  int r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
long long toLl(string s) {
  long long r = 0;
  istringstream sin(s);
  sin >> r;
  return r;
}
bool IsVowel(char ch) {
  ch = tolower(ch);
  if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
    return true;
  return false;
}
long long Pow(long long B, long long P) {
  long long R = 1;
  while (P > 0) {
    if (P % 2 == 1) R = (R * B);
    P /= 2;
    B = (B * B);
  }
  return R;
}
int BigMod(long long B, long long P, long long M) {
  long long R = 1;
  while (P > 0) {
    if (P % 2 == 1) {
      R = (R * B) % M;
    }
    P /= 2;
    B = (B * B) % M;
  }
  return (int)R;
}
long long mulmod(long long a, long long b, long long c) {
  long long x = 0, y = a % c;
  while (b > 0) {
    if (b % 2 == 1) {
      x = (x + y) % c;
    }
    y = (y * 2) % c;
    b /= 2;
  }
  return x % c;
}
void binprint(long long mask, long long n) {
  long long i;
  string s = "";
  do {
    s += (mask % 2 + '0');
    mask /= 2;
  } while (mask);
  reverse(s.begin(), s.end());
  s = string(max(n - (int)s.size(), 0LL), '0') + s;
  for (i = (int)s.size() - n; i < (int)s.size(); i++) printf("%c", s[i]);
  printf("\n");
}
void ASCII_Chart() {
  int i, j, k;
  printf("ASCII Chart:(30-129)\n");
  for (i = 30; i < 50; i++) {
    for (j = 0; j < 5; j++) {
      k = i + j * 20;
      printf("%3d---> '%c'   ", k, k);
    }
    printf("\n");
  }
}
vector<string> SubstringGenerate(string str) {
  int i, j, len;
  vector<string> store;
  len = (int)str.size();
  for (i = 0; i < len; i++)
    for (j = i; j < len; j++) store.push_back(str.substr(i, j - i + 1));
  return store;
}
string BaseConversion(string xstr, int xbase, int ybase) {
  string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  long long store[128], i, multi, sum;
  string ystr;
  for (i = sum = 0; i < str.size(); i++) store[str[i]] = i;
  multi = 1;
  for (i = xstr.size() - 1; i >= 0; i--) {
    sum += (store[xstr[i]] * multi);
    multi *= xbase;
  }
  while (true) {
    ystr.push_back(str[sum % ybase]);
    sum /= ybase;
    if (sum == 0) break;
  }
  reverse(ystr.begin(), ystr.end());
  return ystr;
}
void roman(int e) {
  int a, b, c, d;
  a = (e / 1000) * 1000;
  b = ((e / 100) % 10) * 100;
  c = ((e / 10) % 10) * 10;
  d = ((e / 1) % 10) * 1;
  if (a == 1000)
    printf("M");
  else if (a == 2000)
    printf("MM");
  else if (a == 3000)
    printf("MMM");
  if (b == 100)
    printf("C");
  else if (b == 200)
    printf("CC");
  else if (b == 300)
    printf("CCC");
  else if (b == 400)
    printf("CD");
  else if (b == 500)
    printf("D");
  else if (b == 600)
    printf("DC");
  else if (b == 700)
    printf("DCC");
  else if (b == 800)
    printf("DCCC");
  else if (b == 900)
    printf("CM");
  if (c == 10)
    printf("X");
  else if (c == 20)
    printf("XX");
  else if (c == 30)
    printf("XXX");
  else if (c == 40)
    printf("XL");
  else if (c == 50)
    printf("L");
  else if (c == 60)
    printf("LX");
  else if (c == 70)
    printf("LXX");
  else if (c == 80)
    printf("LXXX");
  else if (c == 90)
    printf("XC");
  if (d == 1)
    printf("I");
  else if (d == 2)
    printf("II");
  else if (d == 3)
    printf("III");
  else if (d == 4)
    printf("IV");
  else if (d == 5)
    printf("V");
  else if (d == 6)
    printf("VI");
  else if (d == 7)
    printf("VII");
  else if (d == 8)
    printf("VIII");
  else if (d == 9)
    printf("IX");
  printf("\n");
}
string str, m, ans;
int main() {
  int i, j, test, Case = 1, check, n, val, t;
  while (scanf("%d", &n) == 1) {
    cin >> str >> m;
    if (str[0] == 'R') {
      ans = BaseConversion(m, n, 10);
      val = toInt(ans);
      roman(val);
    } else {
      if (isalpha(str[0])) {
        t = str[0] - 'A' + 10;
      } else
        t = toInt(str);
      ans = BaseConversion(m, n, t);
      cout << ans << endl;
    }
  }
  return 0;
}
