PROGRAM Power_Long;
var
i:byte; // счетчик
si, so:string; // числа в виде строк
power:byte; //показатель степени
function readFile(filename:string):string;
var f:text;
s:string;
begin
assign(f,filename); Reset(f);
readln(f,s);
readln(f,power);
close(f);
readFile := Trim(s);
end;
function multiplyLong(s1:string; s2:string):string;
var
i,j,k,l:byte; //счетчики
z:boolean; //
A,B,T,R:array [0..100] of byte; //массивы
carry:byte; //перенос при умножении и суммировании
rt:string;//результат
begin
// первая строка чисел в массив
l:=Length(s1);
// A := new byte[l+1];
A[0]:=l; //количество
for i:=l downto 1 do
A[l-i+1]:=ord(s1[i]) - 48;
// вторая строка чисел в массив
k:=Length(s2);
// B := new byte[k+1];
B[0]:=k; //количество
for i:=k downto 1 do
B[k-i+1]:=ord(s2[i]) - 48;
i:=l+k; // 999*9999=9989001, т.е. максимум 7знаков
// R := new byte[i+1]; //массив с результатом
R[0]:=i;//количество
// T := new byte[i+1];//temp - произведение A на один знак из B
for i:=1 to A[0] do begin
//T := умножение A на один знак из B
carry:=0;
for j:=1 to B[0] do begin
k:= A[i] * B[j] + carry;
carry := k div 10;
T[j]:= k mod 10;
end;
j:=j+1;
T[j]:=carry;
T[0]:=j;
// прибавление T к результату R
carry:=0;
for j:=1 to T[0] do begin
k := T[j] + R[j+i-1] + carry;
carry := k div 10;//перенос
R[j+i-1] := k mod 10;
end;
end;
rt:='';
z:=false;//проверка на ведущие нули
for i:= R[0] downto 1 do begin
if (R[i]>0) then begin
rt := rt + R[i];
z:=true;//все последущие нули надо добавить в число
end else
if (R[i]=0) and z then
rt := rt + R[i];
end;
multiplyLong := rt;
end;
BEGIN
si := readFile('input.txt');
so := multiplyLong(si, si); //возвели во вторую степень
// возведение в степень от 3 и выше умножением
for i:=3 to power do begin
so := multiplyLong(si, so);
end;
writeln( si, '^',power,' = ',so );
END.