var i,j,k,l,n,b:longint;
m,c,a:longint;
r:double;
ans:array[1..1000,1..2] of longint;
begin
readln(M);
r:=(sqrt(1+8*M)-1)/2;
n:=round(r)+1;
i:=1;
for b := n downto 1 do
begin
c:=b*b;
if ((2*M-c-b) mod (2*(b+1)) =0) then
begin
a:=(2*M-c-b) div (2*(b+1));
if (a>0) and (a+b<m) then
writeln(a,' ',a+b);
end;
end;
end.
m,c,a:longint;
r:double;
ans:array[1..1000,1..2] of longint;
begin
readln(M);
r:=(sqrt(1+8*M)-1)/2;
n:=round(r)+1;
i:=1;
for b := n downto 1 do
begin
c:=b*b;
if ((2*M-c-b) mod (2*(b+1)) =0) then
begin
a:=(2*M-c-b) div (2*(b+1));
if (a>0) and (a+b<m) then
writeln(a,' ',a+b);
end;
end;
end.