#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#define MAX 20
using namespace std;
vector<int> G[MAX];
int visited[MAX];
int visit[MAX];
void dfs(int i)
{
visited[i]=1;
printf("%d ",i);
sort(G[i].begin(),G[i].end());
for(int j=0;j<G[i].size();j++)
{
if(!visited[G[i][j]])
dfs(G[i][j]);
}
}
void bfs(int i)
{
queue<int> q;
q.push(i);
while(!q.empty())
{
int k=q.front();
q.pop();
if(!visit[k])
{
visit[k]=true;
cout<<k<<" ";
}
else
continue;
sort(G[k].begin(),G[k].end());
for(int i=0;i<G[k].size();i++)
q.push(G[k][i]);
}
}
int main()
{
int n,e;
cin>>n>>e;
while(e--)
{
int a,b;
cin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
memset(visited, 0, sizeof(visited));
memset(visited, 0, sizeof(visit));
for(int i=0;i<n;i++)
{
if(!visited[i])
{
cout<<"{ ";
dfs(i);
cout<<"}\n";
}
}
for(int i=0;i<n;i++)
{
if(!visit[i])
{
cout<<"{ ";
bfs(i);
cout<<"}\n";
}
}
return 0;
}