1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #define N 1005
5 using namespace std;
6
7 int StrToNum(char t)//字符--->>数字
8 {
9 if(t>='0'&&t<='9')return t-'0';//数字
10 if(t>='A'&&t<='Z')return t-'A'+10;//大写字母
11 else return t-'a'+36;//小写字母
12 }
13
14 char NumToStr(int t)//数字-->>>字符
15 {
16 if(t>=0&&t<=9)return (t+'0');
17 if(t>=10&&t<=35)return (t-10+'A');
18 else return (t-36+'a');
19 }
20
21 void conversion(int old_base,int new_base,char t[],int len)
22 {
23 int div[N];//被除数
24 int ans[N];//商
25 int res[N];//余数
26 int i,j,temp_len=len,temp,k=0,m;
27 memset(div,0,sizeof(div));
28 memset(ans,0,sizeof(ans));
29 memset(res,0,sizeof(res));
30 for(i=0;i<len;i++)
31 div[i]=StrToNum(t[i]);
32 while(temp_len>=1)//只要被除数不等于(长度>=1),就继续
33 {
34 temp=0;//余数
35 j=0;
36 while(j<temp_len)
37 {
38 temp=temp*old_base+div[j];
39 ans[j]=temp/new_base;
40 temp%=new_base;
41 j++;
42 }
43 res[k++]=temp;
44 j=0;
45 while(j<temp_len&&ans[j]==0) j++; //去除前导零
46 memset(div,0,sizeof(div));
47 for(i=j,m=0;i<temp_len;i++) //商变成新的被除数
48 div[m++]=ans[i];
49 temp_len=m;
50 memset(ans,0,sizeof(ans));//清空商
51 }
52 for(i=k-1;i>=0;i--)
53 cout<<NumToStr(res[i]);
54 cout<<endl;
55 }
56 int main()
57 {
58 int i,test,base_a,base_b,len;
59 char temp[N];
60 cin>>test;
61 while(test--)
62 {
63 memset(temp,0,sizeof(temp));
64 scanf("%d%d%s",&base_a,&base_b,temp);
65 len=strlen(temp);
66 cout<<base_a<<" ";
67 for(i=0;i<len;i++)
68 cout<<temp[i];
69 cout<<endl;
70 cout<<base_b<<" ";
71 conversion(base_a,base_b,temp,len);
72 }
73 return 0;
74 }