#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#define MAXSIZE 200
typedef int ElemType;
// 计算字符串长度:
int Length(char a[]) {
int n = 0;
for (int i = 0; a[i] != '\0'; i++) {
n++;
}
return n;
}
typedef struct {
ElemType data[MAXSIZE];
int top;
} Stack_int;
// 初始化一个数字栈:
void InitStack(Stack_int* S) {
S->top = -1;
}
// 进栈:
bool Push(Stack_int* S, ElemType x) {
if (S->top == MAXSIZE - 1)
return false;
else {
S->data[++S->top] = x;
return true;
}
}
// 出栈:
bool Pop(Stack_int* S, ElemType* x) {
if (S->top != -1) {
*x = S->data[S->top--];
return true;
} else
return false;
}
int main() {
int a, b;
char c[10] = "";
scanf("%d %s %d", &a, c, &b);
int len = Length(c);
long n = 0;
int k = 0;
for (int i = len - 1; i >= 0; i--) {
if (c[i] >= 'a' && c[i] <= 'f') {
int num = c[i] - 'a' + 10;
n += num * pow(a, k);
k++;
} else if (c[i] >= 'A' && c[i] <= 'F') {
int num = c[i] - 'A' + 10;
n += num * pow(a, k);
k++;
} else {
int num = c[i] - '0';
n += num * pow(a, k);
k++;
}
}
Stack_int S;
InitStack(&S);
while (n != 0) {
int x = n % b;
n /= b;
Push(&S, x);
}
while (S.top != -1) {
int y;
Pop(&S, &y);
if (y >= 10)
printf("%c", 'A' + (y - 10));
else
printf("%c", '0' + y);
}
printf("\n");
return 0;
}