import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int N=in.nextInt();
int S=in.nextInt();
int i,j;
int[][]list = new int[N][N];
boolean[] v = new boolean[N];
for(int k=1;k<=S;k++) {/*建立一维数组*/
i=in.nextInt();
j=in.nextInt();
list[i][j]=1;
list[j][i]=1;
}
Graph g = new Graph(N,v,list);
}
}
class Graph {
private Node head;
private Node temp;
private Node rear;
class Node{
protected int data;
protected Node next;
public Node() {
}
public Node(int i) {
this.data=i;
}
}
public Graph(int N,boolean[] v, int[][] list){
Node n = new Node(N);
head=n;
listcomp(N,v,list);
}
public void enqueue(int i) {
Node n = new Node(i);
if(head.next==null) {
head.next=n;
rear=n;
}
else {
rear.next=n;
rear=n;
}
}
public int dequeue() {
temp=head.next;
head.next=temp.next;
temp.next=null;
return temp.data;
}
public boolean IsEmpty() {
if(head.next==null) {
return true;
}
return false;
}
public void BFS(int i,boolean[] v,int[][] list) {
v[i]=true;
enqueue(i);
while(!IsEmpty()) {
i=dequeue();
System.out.print(" "+i);
for(int j=0;j<v.length;j++) {
if(list[i][j]==1&&v[j]==false) {/*i与j节点有链接 且 该j点没有被visit过*/
v[j]=true;
enqueue(j);
}
}
}
}
public void DFS(int i,boolean[] v,int[][] list) {
v[i]=true;
System.out.print(" "+i);
for(int j=0;j<v.length;j++) {
if(list[i][j]==1&&v[j]==false) {/*与j节点有链接 且 该点没有被visit过*/
DFS(j,v,list);
}
}
}
public void listcomp(int N,boolean[] v,int[][] list){
for(int i=0;i<N;i++) {
if(!v[i]) {
System.out.print("{");
DFS(i,v,list);
System.out.print(" }");
System.out.println("");
}
}
for(int i=0;i<N;i++) {/*reset v[]*/
v[i]=false;
}
for(int i=0;i<N;i++) {
if(!v[i]) {
System.out.print("{");
BFS(i,v,list);
System.out.print(" }");
System.out.println("");
}
}
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int N=in.nextInt();
int S=in.nextInt();
int i,j;
int[][]list = new int[N][N];
boolean[] v = new boolean[N];
for(int k=1;k<=S;k++) {/*建立一维数组*/
i=in.nextInt();
j=in.nextInt();
list[i][j]=1;
list[j][i]=1;
}
Graph g = new Graph(N,v,list);
}
}
class Graph {
private Node head;
private Node temp;
class Node{
protected int data;
protected Node next;
public Node() {
}
public Node(int i) {
this.data=i;
}
}
public Graph(int N,boolean[] v, int[][] list){
Node n = new Node(N);
head=n;
listcomp(N,v,list);
}
public void enqueue(int i) {
Node n = new Node(i);
if(head!=null) {
temp=head.next;
}
head.next=n;
n.next=temp;
}
public int dequeue() {
temp=head.next;
head.next=temp.next;
temp.next=null;
return temp.data;
}
public boolean IsEmpty() {
if(head.next==null) {
return true;
}
return false;
}
public void BFS(int i,boolean[] v,int[][] list) {
v[i]=true;
System.out.print(" "+i);
enqueue(i);
while(!IsEmpty()) {
i=dequeue();
for(int j=0;j<v.length;j++) {
if(list[i][j]==1&&v[j]==false) {/*i与j节点有链接 且 该j点没有被visit过*/
v[j]=true;
System.out.print(" "+j);
enqueue(j);
}
}
}
}
public void DFS(int i,boolean[] v,int[][] list) {
v[i]=true;
System.out.print(" "+i);
for(int j=0;j<v.length;j++) {
if(list[i][j]==1&&v[j]==false) {/*与j节点有链接 且 该点没有被visit过*/
DFS(j,v,list);
}
}
}
public void listcomp(int N,boolean[] v,int[][] list){
for(int i=0;i<N;i++) {
if(!v[i]) {
System.out.print("{");
DFS(i,v,list);
System.out.print(" }");
System.out.println("");
}
}
for(int i=0;i<N;i++) {/*reset v[]*/
v[i]=false;
}
for(int i=0;i<N;i++) {
if(!v[i]) {
System.out.print("{");
BFS(i,v,list);
System.out.print(" }");
System.out.println("");
}
}
}
}