m:ansistring;
a,b:array[0..1000] of integer;
k:boolean;
n,i,t,j,d:integer;
begin
readln(n);
readln(m);
a[0]:=length(m);
for i:=1 to a[0] do
case m[i] of
’A’:a[i]:=10;
’B’:a[i]:=11;
’C’:a[i]:=12;
’D’:a[i]:=13;
’E’:a[i]:=14;
’F’:a[i]:=15;
’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’:a[i]:=ord(m[i])-ord(’0’);
end;
t:=0;
repeat
k:=true;
for i:=1 to a[0] do if a[i]<>a[a[0]-i+1] then begin k:=false end;
if k=false then begin
for i:=1 to a[0] do begin
b[i]:=a[a[0]-i+1];
end;
for j:=1 to a[0] do a[j]:=a[j]+b[j];
if a[1]>=n then begin
for j:=a[0] downto 1 do
a[j+1]:=a[j];
a[1]:=a[2] div n;
a[2]:=a[2] mod n;
a[0]:=a[0]+1;
end;
for d:=1 to a[0] do
if a[d]>=n then begin
a[d-1]:=a[d-1]+a[d] div n;
a[d]:=a[d] mod n;
end;
t:=t+1;
end;
until (k=true) or (t>30);
if t>30 then writeln(’Impossible’) else writeln(t);
end.