program puiss;
function puiss_naive_rec(x : integer;n:integer):integer;
begin
if n=0 then puiss_naive_rec:=1
else if n=1 then puiss_naive_rec:=x
else puiss_naive_rec:=puiss_naive_rec(x,n-1)*x
end;
function puiss_naive_iter(x : integer;n:integer):integer;
var k,tmp : integer;
begin
if n=0 then puiss_naive_iter:=1
else begin
tmp:=x;
for k:=2 to n do
tmp:=x*tmp;
puiss_naive_iter:=tmp;
end;
end;
function pair(n : integer):boolean;
begin
if (n mod 2=0) then pair:=true else pair:=false
end;
function puiss_dicho_rec(x : integer;n:integer):integer;
begin
if n=0 then puiss_dicho_rec:=1
else if n=1 then puiss_dicho_rec:=x
else
if pair(n) then puiss_dicho_rec:= sqr(puiss_dicho_rec(x,n div 2))
else puiss_dicho_rec:= x*sqr((puiss_dicho_rec(x,(n-1) div 2)))
end;
function puiss_dicho_iter(x : integer;n:integer):integer;
var k,puiss,res : integer;
begin
if n=0 then puiss_dicho_iter:=1
else if n=1 then puiss_dicho_iter:=x
else
begin
res:=1;
puiss:=x;
k:=n;
while (k>1) do
begin
if not pair(k) then res:=res*puiss;
puiss:=sqr(puiss);
k:=k div 2;
end;
puiss_dicho_iter:=res*puiss;
end;
end;
BEGIN
readln;
writeln(pair(7));
writeln(puiss_dicho_iter(2,7));
readln;
END.