#include <iostream>
#include <vector>
using namespace std;
void allConnected1(int** edges, int n, int sv, bool* visited, vector<int>* smallOutput) {
visited[sv]=true;
smallOutput->push_back(sv);
//vector<int>* smallOutput1=new vector<int>();
for ( int i=0; i<n; i++ ) {
if ( i==sv ) {
continue;
}
if ( edges[sv][i]==1 && !visited[i] ) {
allConnected1(edges, i, sv, visited, smallOutput);
}
}
}
vector<vector<int>*>* allConnected(int** edges, int n, int sv, bool* visited, vector<vector<int>*>* output) {
for ( int i=0; i<n; i++ ) {
if ( visited[i] != false ) {
vector<int>* smallOutput=new vector<int> ();
allConnected1(edges, n, i, visited, smallOutput);
output->push_back(smallOutput);
}
}
return output;
}
int main()
{
int V, E, tempX, tempY;
cin >> V >> E;
int**edges=new int*[V];
for ( int i=0; i<V; i++ ) {
edges[i]=new int[V];
for ( int j=0; j<V; j++ ) {
edges[i][j]=0;
}
}
for ( int i=0; i<E; i++ ) {
int f,s;
cin>>f>>s;
edges[f][s]=1;
edges[s][f]=1;
}
bool* visited=new bool[V];
for ( int i=0; i<V; i++ ) {
visited[i]=false;
}
vector<vector<int>*>* output=new vector <vector<int>*> ();
vector<vector<int>*>* result=allConnected(edges, V, 0, visited, output);
for ( int i=0; i<result->size(); i++ ) {
vector<int>* result1=result->at(i);
for ( int j=0; j<result1->size(); j++ ) {
cout<<result1->at(j)<<" ";
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBhbGxDb25uZWN0ZWQxKGludCoqIGVkZ2VzLCBpbnQgbiwgaW50IHN2LCBib29sKiB2aXNpdGVkLCB2ZWN0b3I8aW50Piogc21hbGxPdXRwdXQpIHsKICAgICAgIAogICAgICB2aXNpdGVkW3N2XT10cnVlOwogICAgICBzbWFsbE91dHB1dC0+cHVzaF9iYWNrKHN2KTsKICAgICAgLy92ZWN0b3I8aW50Piogc21hbGxPdXRwdXQxPW5ldyB2ZWN0b3I8aW50PigpOwogICAgICBmb3IgKCBpbnQgaT0wOyBpPG47IGkrKyApIHsKICAgICAgICAgICAgaWYgKCBpPT1zdiApIHsKICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICggZWRnZXNbc3ZdW2ldPT0xICYmICF2aXNpdGVkW2ldICkgewogICAgICAgICAgICAgICAgICAgIGFsbENvbm5lY3RlZDEoZWRnZXMsIGksIHN2LCB2aXNpdGVkLCBzbWFsbE91dHB1dCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgIH0KfQoKdmVjdG9yPHZlY3RvcjxpbnQ+Kj4qIGFsbENvbm5lY3RlZChpbnQqKiBlZGdlcywgaW50IG4sIGludCBzdiwgYm9vbCogdmlzaXRlZCwgdmVjdG9yPHZlY3RvcjxpbnQ+Kj4qIG91dHB1dCkgewogICAgICAgCiAgICAgIGZvciAoIGludCBpPTA7IGk8bjsgaSsrICkgewogICAgICAgICAgICBpZiAoIHZpc2l0ZWRbaV0gIT0gZmFsc2UgKSB7CiAgICAgICAgICAgICAgICB2ZWN0b3I8aW50Piogc21hbGxPdXRwdXQ9bmV3IHZlY3RvcjxpbnQ+ICgpOwogICAgICAgICAgICAgICAgYWxsQ29ubmVjdGVkMShlZGdlcywgbiwgaSwgdmlzaXRlZCwgc21hbGxPdXRwdXQpOwogICAgICAgICAgICAgICAgb3V0cHV0LT5wdXNoX2JhY2soc21hbGxPdXRwdXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICByZXR1cm4gb3V0cHV0Owp9CgppbnQgbWFpbigpCnsKICAgICAgaW50IFYsIEUsIHRlbXBYLCB0ZW1wWTsKICAgICAgY2luID4+IFYgPj4gRTsKICAgIAogICAgICBpbnQqKmVkZ2VzPW5ldyBpbnQqW1ZdOwogICAgICBmb3IgKCBpbnQgaT0wOyBpPFY7IGkrKyApIHsKICAgICAgICAgICAgZWRnZXNbaV09bmV3IGludFtWXTsKICAgICAgICAgICAgZm9yICggaW50IGo9MDsgajxWOyBqKysgKSB7CiAgICAgICAgICAgICAgICAgIGVkZ2VzW2ldW2pdPTA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAKICAgICAgZm9yICggaW50IGk9MDsgaTxFOyBpKysgKSB7CiAgICAgICAgICAgIGludCBmLHM7CiAgICAgICAgICAgIGNpbj4+Zj4+czsKICAgICAgICAgICAgZWRnZXNbZl1bc109MTsKICAgICAgICAgICAgZWRnZXNbc11bZl09MTsKICAgICAgICAgIH0KICAgICAgIAogICAgICBib29sKiB2aXNpdGVkPW5ldyBib29sW1ZdOwogICAgICBmb3IgKCBpbnQgaT0wOyBpPFY7IGkrKyApIHsKICAgICAgICAgICAgdmlzaXRlZFtpXT1mYWxzZTsKICAgICAgICAgIH0gCiAgICAgICAKICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+Kj4qIG91dHB1dD1uZXcgdmVjdG9yIDx2ZWN0b3I8aW50Pio+ICgpOyAKICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+Kj4qIHJlc3VsdD1hbGxDb25uZWN0ZWQoZWRnZXMsIFYsIDAsIHZpc2l0ZWQsIG91dHB1dCk7IAogICAgICBmb3IgKCBpbnQgaT0wOyBpPHJlc3VsdC0+c2l6ZSgpOyBpKysgKSB7IAogICAgICAgICAgICB2ZWN0b3I8aW50PiogcmVzdWx0MT1yZXN1bHQtPmF0KGkpOyAKICAgICAgICAgICAgZm9yICggaW50IGo9MDsgajxyZXN1bHQxLT5zaXplKCk7IGorKyApIHsgCiAgICAgICAgICAgICAgICAgIGNvdXQ8PHJlc3VsdDEtPmF0KGopPDwiICI7IAogICAgfSAKICAgIGNvdXQ8PGVuZGw7IAogICAgIAogIH0gCiAgIAoKICByZXR1cm4gMDsgCn0g