Var
   a,b,c,i,j,m,n: longint;
   vis,s: array [1..90] of boolean;
   d: array [1..90,1..90] of boolean;

Procedure visita(p: longint);
          var i: longint;
          begin
          s[p]:= true;
          vis[p]:= true;
          for i:= 1 to n do
              if (not vis[i]) and (d[i,p]) then
                 visita(i);
          end;

Begin
     readln(input,n,m);
     fillchar(d, sizeof(d), false);
     for i:= 1 to m do
         begin
         read(input,a,b);
         d[a,b]:= true;
         d[b,a]:= true;
         end;
     c:= 0;
     fillchar(vis, sizeof(vis), false);
     for i:= 1 to n do
         if (not vis[i]) then
            begin
            Inc(c);
            fillchar(s, sizeof(s), false);
            visita(i);
            for j:= 1 to n do
                if (s[j]) then write(output,j,' ');
            writeln(output);
            end;
     writeln(output,c-1);
End.