#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#definemaxn2001usingnamespace std;int g[maxn][maxn];//用邻接矩阵存储,g[i][j]表示点i到点j共有多少条栅栏(边) int du[maxn];//记录每个点的度,也就是有多少条边与其连接int circuit[maxn];//记录欧拉路径int n, m, tot, x, y, start;/*
start记录欧拉路径的起点,
n记录点数 (编号最大的点),
tot记录欧拉路径的总点数
*/voidfind(int i){for(int j =1; j <= n;++ j ){if(g[i][j]){//如果有边还没走,就走这条边
g[i][j]--;
g[j][i]--;//删去这条边,避免重复find(j);}}
circuit[++ tot]= i;//记录走过的路径 }intmain(){memset(g,0,sizeof(g));scanf("%d",&m);for(int i =1; i <= m;++ i ){scanf("%d%d",&x,&y);
g[x][y]++;//邻接矩阵存图
g[y][x]++;//由于两点之间可能有多条边连接,所以要用++
du[x]++;//记录入度
du[y]++;
n =max(n,max(x, y));//纪录嘴大的编号 }
start =1;for(int i =1; i <= n;++ i ){if(du[i]%2){//如果图中有奇点,也就是度为奇数
start = i;break;//以编号小的为起点,break }}
tot =0;find(start);//从起点开始for(int i = tot; i >=1;-- i ){//因为我使用的是深搜,先搜再记,所以答案的顺序是反的 printf("%d\n", circuit[i]);}return0;}