#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 10005
typedef struct edge{
int adjtex;
int weight;
struct edge *next;
}Elink;
typedef struct node{
int vertex;
Elink *link;
}Vlink;
Vlink G[MAXNUM];
int visited[MAXNUM]={0};
int n,m;
void traveldfs();
void dfs(int u);
void travelbfs();
void bfs(int u);
int main()
{
int u,v;
int i;
Elink *p,*q;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d",&u,&v);
G[u].vertex=u;
G[v].vertex=v;
Elink *e;
e=(Elink*)malloc(sizeof(Elink));
e->adjtex=v;
e->next=NULL;
if(G[u].link==NULL) G[u].link=e;
else
{
for(p=q=G[u].link;p!=NULL;q=p,p=p->next);
q->next=e;
}
e=(Elink*)malloc(sizeof(Elink));
e->adjtex=u;
e->next=NULL;
if(G[v].link==NULL) G[v].link=e;
else
{
for(p=q=G[v].link;p!=NULL;q=p,p=p->next);
q->next=e;
}
}
travelbfs();
}
void traveldfs()
{
int i;
for(i=1;i<=n;i++)
if(visited[i]==0)
dfs(i);
}
void dfs(int u)
{
printf("%d",u);
visited[u]=1;
Elink *p;
for(p=G[u].link;p!=NULL;p=p->next)
if(visited[p->adjtex]==0)
dfs(p->adjtex);
}
int queue[MAXNUM];
int front=0,rear=-1,count=0;
void travelbfs()
{
int i;
for(i=1;i<=n;i++)
if(visited[i]==0)
bfs(i);
}
void bfs(int u)
{
int i,v;
Elink *p;
printf("%d",u);
visited[u]=1;
rear++;
queue[rear]=u;
count++;
while(count!=0)
{
v=queue[front];
front++;
count--;
for(p=G[v].link;p!=NULL;p=p->next)
{
if(visited[p->adjtex]==0)
{
printf("%d",p->adjtex);
visited[p->adjtex]=1;
rear++;
queue[rear]=p->adjtex;
count++;
}
}
}
}