program puiss;

{uses crt;}

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; {arriv'e ici, k=1}
      puiss_dicho_iter:=res*puiss; 
   end;
end;

BEGIN
   readln;
   writeln(pair(7));
   writeln(puiss_dicho_iter(2,7));
   readln;
END.