var n:byte;
a:array[1..9] of byte;
duyet:array[1..9] of boolean;
f:text;
procedure xuat;
var j:byte;
begin
for j:=1 to n do write(f,a[j],' ');writeln(f);
end;
procedure try(i:byte);
var ii:byte;
begin
if i<=n then
begin
for ii:=1 to n do
if duyet[ii]=true then
begin
a[i]:=ii;
duyet[ii]:=false;
try(i+1);
duyet[ii]:=true;
end;
end
else xuat;
end;
begin
assign(f,'HOANVI.INP');reset(f);
readln(f,n);
close(f);
assign(f,'HOANVI.OUT');rewrite(f);
fillchar(duyet,sizeof(duyet),true);
try(1);
close(f);
end.