rt
#include<bits/stdc++.h>
using namespace std;
int n;
string m;
string addm;//翻转的字符串
int step=0;
int k[505],b[505],c[505];//k是s1转的数字,b是s2转的数字
string add(string s1,string s2){
memset(k,0,sizeof k);
memset(b,0,sizeof b);
memset(c,0,sizeof c);//求和数组
int l1=s1.size();
int l2=s2.size();
int l3=max(l1,l2);//和数组c的长度
for(int i=l1,j=0;i>=0;i--,j++){//反存
if(s1[i]>='0'&&s1[i]<='9'){
k[j]=s1[i]-'0';
}else{
k[j]=s1[i]-55;
}
}
for(int i=l2,j=0;i>=0;i--,j++){//反存
if(s2[i]>='0'&&s2[i]<='9'){
b[j]=s2[i]-'0';
}else{
b[j]=s2[i]-55;
}
}
int t=0;
for(int i=0;i<l3;i++){
c[i]=k[i]+b[i]+t;
t=c[i]/n;
c[i]=c[i]%n;
}
if(t){
c[l3]=1;
l3++;
}
string s3="";
for(int i=l3;i>=0;i--){
if(c[i]>='0'&&c[i]<='9'){
s3+=c[i]+'0';
}else{
s3+=char(c[i]+55);
}
}
return s3;
}
int main(){
cin>>n;
cin>>m;
string m2=m;
reverse(m.begin(),m.end());//颠倒字符串
if(m==m2){
cout<<"STEP"<<"="<<0;
}
while(1){//无限循环
addm=add(m,m2);//存一下结果
step++;//步数增加
string addm2=addm;//存数字
reverse(addm.begin(),addm.end());//颠倒
if(step>30||addm==addm2){//看是不是回文数
break;
}
m=addm;//继续加
m2=addm2;//改变一下
}
if(step>30)puts("Impossible!");
else cout<<"STEP="<<step;
return 0;
}