#include <stdio.h>
#include <string.h>

#define MAX    90

short abMatrix[MAX][MAX];
short abVisited[MAX], abSolution[MAX];
long i,j,iM,iN,iCount,iStart,iEnd;

void visit(long iVertex, long *iSize) {
   long i;
   
   abVisited[iVertex]= abSolution[iVertex]= 1;
   for (i= 0; i< *iSize; i++)
      if ((!abVisited[i]) && (abMatrix[i][iVertex]))
         visit(i, iSize);
}

int main(void) {
   scanf("%ld %ld", &iN, &iM);
   memset(abMatrix, 0, sizeof(abMatrix));
   for (i= 0; i< iM; i++) {
      scanf("%ld %ld", &iStart, &iEnd);
      abMatrix[iStart-1][iEnd-1]= abMatrix[iEnd-1][iStart-1]= 1;
   }
   iCount= 0;
   memset(abVisited, 0, sizeof(abVisited));
   for (i= 0; i< iN; i++)
      if (!abVisited[i]) {
         iCount++;
         memset(abSolution, 0, sizeof(abSolution));
         visit(i,&iN);
         for (j= 0; j< iN; j++)
            if (abSolution[j])
               printf("%ld ",j+1);
         printf("\n");
      }
   printf("%ld\n",iCount-1);

   return(0);
}