program ex(input,output); var i,j,k,m,n:integer; a:array[1..100] of integer; r:array[1..100] of integer; procedure out; var i:integer; begin for i:=n downto 1 do write(a[i]:2); writeln end; procedure gray(n:integer; d:integer); var i:integer; begin if n>=1 then begin if d>0 then for i:=0 to r[n] do begin a[n]:=i; gray(n-1, d); d:=-d; end else for i:=r[n] downto 0 do begin a[n]:=i; gray(n-1, -d); d:=-d end end else out end; begin readln(n); r[1]:=2; r[2]:=2; r[3]:=1; r[4]:=1; gray(n,1) end.