/*
TASK:zala
LANG:C++
*/

#include <iostream>

using namespace std;

char A[11500][11500];
char B[50000];
long n;
char used [50000] = {0};
long answ;

void DFS (long k)
{
	cout << k << " ";
	used[k] = 1;
	int i;
	for (i = 0; i < n; i++)
		if (A[k][i]) 
			if (!used[i])
				DFS (i);
}

void be (long k)
{
	int i;
	for (i = 0; i < n; i++)
	{
		B[i] = A[k][i];
		A[k][i] = A[i][k] = 0;
	}
}

void re (long k)
{
	int i;
	for (i = 0; i < n; i++)
	{
		A[i][k] = A[k][i] = B[i];
		B[i] = 0;
		used[i] = 0;
	}
}

char all_used ()
{
	int i;
	for (i = 0; i < n; i++) 
		if (!used[i])
		{
			cout << '.' << i << '.';
			return 0;
		}
	return 1;
}

int main ()
{
	long m, answ = 0;
	cin >> n >> m;
	int i,p,q;

	for (i = 0; i < m; i++)
	{
		cin >> p >> q;
		A[p][q] = A[q][p] = 1;
	}
	for (i = 0; i < n; i++)
	{
		used[i] = 1;
		be (i);
		DFS ((i+1)%n);
		cout << '\n';
		if (!all_used()) answ++;
		re (i);
	}
	cout << answ;
	return 0;
}
