uses crt;
type bigNum = string;
var n:bigNum;
function tong(a,b:bigNum):bigNum;
var kq:bigNum; i,s,carry:longint;
begin carry:=0; kq:='';
while length(a)< length(b) do a:='0'+a;
while length(b)< length(a) do b:='0'+b;
for i:=length(a) downto 1 do
begin
s:=ord(a[i])+ord(b[i])-96+carry;
carry:= s div 10;
kq:=chr(s mod 10 + 48)+ kq;
end;
if carry > 0 then kq:='1'+kq; exit(kq);
end;
function tich(a,b:bigNum):bigNum;
var m,i,j:longint; sum,tmp:bigNum;
begin
m:=-1; sum:='';
for i:=length(b) downto 1 do
begin
inc(m);
tmp:='';
for j:=1 to ord(b[i])-48 do tmp:=tong(tmp,a);
for j:=1 to m do tmp:=tmp+'0';
sum:=tong(tmp,sum);
end; exit(sum);
end;
function bigDiv(a:bigNum;b:longint):bigNum;
var hold,i,s:longint; kq:bigNum;
begin hold:=0; kq:='';
for i:=1 to length(a) do
begin
hold:=hold*10 + ord(a[i])-48;
s:=hold div b;
hold:=hold mod b;
kq:=kq+chr(s + 48);
end;
while(length(kq)> 1) and (kq[1] = '0') do delete(kq,1,1);
exit(kq);
end;
function bigMod(a:bigNum;b:longint):longint;
var hold,i:longint;
begin hold:=0;
for i:=1 to length(a) do
hold:=(hold*10 + ord(a[i])- 48) mod b;
exit(hold);
end;