#include<stdio.h>
#include<string.h>
struct bignum
{
int digit[1000];
int size;
void init()
{
size = 0;
for (int i = 0; i < 1000; i++)
digit[i] = 0;
}
void set(int x)
{
init();
do
{
digit[size++] = x % 100;
x = x / 100;
} while (x != 0);
}
void output()
{
for (int i = size - 1; i >= 0; i--)
{
if (i = size - 1)
printf("%d", digit[i]);
else
printf("%02d", digit[i]);
}
printf("\n");
}
bignum operator * (int x) const
{
bignum c;
c.init();
int carry = 0;
for (int i = 0; i < size; i++)
{
int temp = digit[i] * x + carry;
carry = temp / 100;
temp = temp % 100;
c.digit[c.size++] = temp;
}
if (carry!=0)
c.digit[c.size++] = carry;
return c;
}
bignum operator + (const bignum &a) const
{
bignum c;
c.init();
int carry = 0;
for (int i = 0; i < size||i<a.size; i++)
{
int temp = digit[i] + a.digit[i] + carry;
carry = temp / 100;
temp = temp % 100;
c.digit[c.size++] = temp;
}
if (carry != 0)
c.digit[c.size++] = carry;
return c;
}
bignum operator / (int x) const
{
bignum c;
c.init();
int r = 0;
for (int i = size - 1; i >= 0; i--)
{
int temp = (digit[i] + r * 100) / x;
int rtemp = (digit[i] + r * 100) % x;
r = rtemp;
c.digit[i] = temp;
}
for (int i = 0; i < 1000; i++)
{
if (c.digit[i] != 0)
c.size = i;
}
c.size++;
return c;
}
int operator % (int x) const
{
int r = 0;
for (int i = 0; i < size; i++)
{
int rtemp = (r * 100 + digit[i]) % x;
r = rtemp;
}
return r;
}
}a, b, c;
char str[1000];
char ans[1000];
int main()
{
int n, m;
while (scanf("%d%d", &m, &n) != EOF)
{
scanf("%s", str);
int L = strlen(str);
a.set(0);
b.set(1);
for (int i = L - 1; i >= 0; i--)
{
int t;
if ('0'<=str[i]&&str[i]<='9')
t = str[i] - '0';
else
t = str[i] - 'A' + 10;
a = a + b * t;
b = b * m;
}
int size = 0;
do
{
int t = a % n;
if (t < 10)
ans[size++] = t + '0';
else
ans[size++] = t - 10 + 'a';
a = a / n;
} while (a.digit[0] != 0 || a.size != 1);
for (int i = size - 1; i >= 0; i--)
printf("%c", ans[i]);
printf("\n");
}
return 0;
}