注意处理10+进制数。。。
#include <cstdio>
#include <cstring>
int const N=150;
int n;
char s[N];
inline int max(int x,int y){return x>y?x:y;}
struct bigint{
int a[N];
int len;
bigint(){
memset(a,0,sizeof(a));len=0;
}
bigint operator+(bigint b){
bigint re;
for(int i=0;i<len||i<b.len;++i){
re.a[i]+=a[i]+b.a[i];
if(re.a[i]>=n){re.a[i]-=n;re.a[i+1]++;}
re.len=max(len,b.len);
if(re.a[re.len]) re.len++;
}
return re;
}
}x,y;
inline void reverse(){
for(int i=0;i<x.len;++i)
y.a[i]=x.a[x.len-i-1];
y.len=x.len;
}
inline bool issame(){
for(int i=0;i<x.len;++i)
if(x.a[i]!=y.a[i]) return false;
return true;
}
int main(){
// freopen("a.in","r",stdin);
scanf("%d%s",&n,s);
x.len=strlen(s);
for(int i=0;i<x.len;++i){
if(s[i]>='0'&&s[i]<='9') x.a[x.len-i-1]=s[i]-'0';
else x.a[x.len-i-1]=s[i]-'A'+10;
}
int cnt=0;
while(1){
reverse();
if(issame()){
printf("STEP=%d",cnt);return 0;
}
if(cnt==30){
printf("Impossible!");return 0;
}
x=x+y;cnt++;
}
}