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.