#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define MAXN 10
int G[MAXN][MAXN]={0},n;
int vis[MAXN]={0};
void DFS(int v){
vis[v]=1;
cout<<v<<" ";
for(int i=0;i<n;i++){
if(vis[i]==0&&G[v][i]==1){
DFS(i);
}
}
}
void BFS(int v){
int queue[MAXN],front=0,rear=-1;
vis[v]=1;
cout<<v<<" ";
queue[++rear]=v;
while(front<=rear){
v=queue[front++];
for(int i=0;i<n;i++){
if(vis[i]==0&&G[v][i]==1){
vis[i]=1;
cout<<i<<" ";
queue[++rear]=i;
}
}
}
}
int main(){
int e,a,b;
cin>>n>>e;
for(int i=0;i<e;i++){
cin>>a>>b;
G[a][b]=G[b][a]=1;
}
for(int i=0;i<n;i++){
if(vis[i]==0){
cout<<"{ ";
DFS(i);
cout<<"}"<<endl;
}
}
memset(vis,0,sizeof vis);
for(int i=0;i<n;i++){
if(vis[i]==0){
cout<<"{ ";
BFS(i);
cout<<"}"<<endl;
}
}
return 0;
}