var n:string;
meen,realk:integer;
num1,ans,need:use;
procedure init;
var inite,k:string;
space,error,for1:integer;
begin
readln(inite);
space:=pos(' ',inite);
n:=copy(inite,1,space-1);
k:=inite; delete(k,1,space);
val(k,realk,error);
if length(n)>=for1 then delete(n,1,length(n)-realk);
for for1:=realk downto 1 do if length(n)>=for1 then
num1[realk-for1+1]:=ord(n[for1])-48 else num1[realk-for1+1]:=0;
end;
procedure mult(var a:use;b:use;k1,k2:integer);
var for1,for2,x,y,m:integer;
c:array[1..100] of integer;
begin
fillchar(c,Sizeof(c),0);
if k1>k2 then m:=k1 else m:=k2;
for for1:=1 to k1 do
for for2:=1 to k2 do begin
x:=a[for1]*b[for2];
y:=c[for1+for2-1];
if for1+for2-1<=m then c[for1+for2-1]:=(x+y) mod 10;
if for1+for2<=m then c[for1+for2]:=c[for1+for2]+(x+y) div 10;
end;
for for1:=1 to m do a[for1]:=c[for1];
end;
procedure TheWrongWay;
begin
writeln(-1);
readln;
halt;
end;
procedure working;
var for1,for2,for3,box,new:integer;
num2,num3,rp:use;
find:array[0..9] of boolean;
Yes:boolean;
begin
fillchar(need,Sizeof(need),0);
for for1:=1 to realk do begin
if for1=1 then begin
ans[1]:=1;
new:=1;
fillchar(num3,Sizeof(num3),0);
for for2:=1 to realk do num3[for2]:=num1[for2];
end;
fillchar(num2,Sizeof(num2),0);
for for2:=1 to realk do num2[for2]:=num3[for2];
if for1>1 then for for2:=1 to (need[for1-1])-1 do mult(num3,num2,realk,realk);
for for2:=1 to for1 do num2[for2]:=num1[for2];
new:=0; fillchar(find,Sizeof(find),false);
box:=num2[for1];find[box]:=true;Yes:=false;
repeat
inc(new);
mult(num2,num3,for1,for1);
if not find[num2[for1]] then find[num2[for1]]:=true else begin
if num2[for1]<>box then TheWrongWay else Yes:=true;
end;
until Yes;
need[for1]:=new;
fillchar(rp,Sizeof(rp),0);
if new=10 then begin
rp[2]:=1;
rp[1]:=0;
end else rp[1]:=new;
mult(ans,rp,100,2);
end;
end;
procedure print;
var for1,for2:integer;
begin
for1:=100;
while ans[for1]=0 do dec(for1);
for for2:=for1 downto 1 do write(ans[for2]);
writeln;
readln;
end;
begin
init;
working;
print;
end.