Pagini recente » Cod sursa (job #2189030) | Cod sursa (job #1504450) | Cod sursa (job #47192) | Cod sursa (job #2682484) | Cod sursa (job #1735736)
#include <cstdio>
#include <vector>
using namespace std;
struct punct
{
int x,y;
};
punct edge[500010];
int vaz[100010],vaz1[100010],sol[100010],n,nr;
vector<int> v[500010];
vector<int> q;
void euler(int nod)
{
while(v[nod].size()>0)
if(vaz[v[nod].back()]) v[nod].pop_back();
else
{
int vec;
if(edge[v[nod].back()].x==nod) vec=edge[v[nod].back()].y;
else vec=edge[v[nod].back()].x;
vaz[v[nod].back()]=1;
v[nod].pop_back();
q.push_back(vec);
euler(vec);
}
}
void dfs(int nod)
{
vaz1[nod]=1;
for(int i=0;i<v[nod].size();i++)
{
int vec;
if(edge[v[nod][i]].x==nod) vec=edge[v[nod][i]].y;
else vec=edge[v[nod][i]].x;
if(vaz1[vec]==0) dfs(vec);
}
}
int solve()
{
dfs(1);
for(int i=1;i<=n;i++)
if(v[i].size()%2==1 or vaz1[i]==0) return 0;
while(q.size()>0)
{
int nod=q.back();
q.pop_back();
sol[++nr]=nod;
euler(nod);
}
return 1;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
int m;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&edge[i].x,&edge[i].y);
v[edge[i].x].push_back(i);
v[edge[i].y].push_back(i);
}
q.push_back(1);
if(solve()==0) printf("-1");
else for(int i=2;i<=nr;i++) printf("%d ",sol[i]);
return 0;
}