{ genereerib n-bitise Gray koodi esimese elemendi }
procedure init(var s : string; n : integer);
var i : integer;
begin
   s := '';
   for i := 1 to n do begin
      s := s + '0';
   end;
end;

{ leiab n-bitise Gray koodi antud elemendile järgneva }
{ tagastab true, kui leidis, false, kui ei }
function next(var s : string; n : integer) : boolean;
var i : integer; u, x : boolean;
begin
   u := true; { kas jooksvas positsioonis on kasvav või kahanev järjestus }
   for i := 1 to n do begin
      if s[i] = '1' then begin
         u := not u;
      end;
   end;
   x := false; { kas muutus on juba tehtud }
   for i := n downto 1 do begin
      if s[i] = '1' then begin
         u := not u;
      end;
      if (s[i] = '0') and u and not x then begin
         s[i] := '1';
         x := true;
      end;
      if (s[i] = '1') and not u and not x then begin
         s[i] := '0';
         x := true;
      end;
   end;
   next := x;
end;

var n : integer; s : string;
begin
   readln(n);
   init(s, n);
   repeat
      writeln(s);
   until not next(s, n);
end.
