Pagini recente » Cod sursa (job #1630979) | Cod sursa (job #2574952) | Cod sursa (job #1644210) | Cod sursa (job #1673400) | Cod sursa (job #610187)
Cod sursa(job #610187)
#include<cstdio>
#include<vector>
#include<deque>
using namespace std;
int n,m,i,x,y,e,g[100001],a[1000001],b[1000001],u[1000001],st[2000001],top;
vector<int> v[100001];
deque<int> Q;
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){scanf("%d%d",&a[i],&b[i]);v[a[i]].push_back(i);v[b[i]].push_back(i);g[a[i]]++;g[b[i]]++;}
for(i=1;i<=n;i++)if(g[i]&1){printf("-1\n");return 0;}
x=n;Q.push_back(1);x--;st[1]=1;
for(;Q.size()&&x;)
{
y=Q.front();
for(vector<int>::iterator it=v[y].begin();it!=v[y].end();it++)
if(!st[a[*it]+b[*it]-y])
{
Q.push_back(a[*it]+b[*it]-y);
x--;
st[a[*it]+b[*it]-y]=1;
}
Q.pop_front();
}
if(x){printf("-1\n");return 0;}
top=1;st[top]=1;
for(;top>1||m;)
{
x=st[top];
if(!g[x]){printf("%d ",st[top]);top--;m--;continue;}
if(u[v[x].back()]){v[x].pop_back();continue;}
e=v[x].back();u[e]=1;y=a[e]+b[e]-x;g[x]--;g[y]--;st[++top]=y;
}
return 0;
}