1 #include<stdio.h>
2 #include<string.h>
3 struct stack
4 {
5 int top;
6 int node[100];
7 }s;
8 int n,map[100][100];
9 void dfs(int x)
10 {
11 int i,j;
12 s.top++;
13 s.node[s.top]=x;
14 for(i=0;i<n;i++)
15 {
16 if(map[i][x])
17 {
18 map[i][x]=map[x][i]=0;
19 dfs(i);
20 break;
21 }
22 }
23 }
24 void fleury(int start)
25 {
26 int i,j;
27 s.top=0;s.node[s.top]=start;
28 while(s.top>=0)
29 {
30 int flag=0;
31 for(i=0;i<n;i++)
32 {
33 if(map[s.node[s.top]][i])
34 {
35 flag=1;break;
36 }
37 }
38 if(!flag)
39 {
40 printf("%d ",s.node[s.top]+1);
41 s.top--;
42 }
43 else
44 {
45 s.top--;
46 dfs(s.node[s.top+1]);
47 }
48 }
49 }
50 int main()
51 {
52 int i,j,m,dgree;
53 while(scanf("%d%d",&n,&m)!=EOF)
54 {
55 memset(map,0,sizeof(map));
56 for(i=0;i<m;i++)
57 {
58 int s,t;
59 scanf("%d%d",&s,&t);
60 map[s-1][t-1]=map[t-1][s-1]=1;
61 }
62 int num=0,start=0;
63 for(i=0;i<n;i++)
64 {
65 dgree=0;
66 for(j=0;j<n;j++)
67 {
68 if(map[i][j])
69 dgree++;
70 }
71 if(dgree%2)
72 {
73 num++;
74 start=i;
75 }
76 }
77 if(num==0||num==2)
78 fleury(start);
79 else printf("NO\n");
80 }
81 return 0;
82 }
83 /*
84 9 14
85 1 2
86 1 8
87 2 3
88 2 8
89 2 9
90 3 4
91 4 5
92 4 6
93 4 9
94 5 6
95 6 7
96 6 9
97 7 8
98 8 9
99 */