Pagini recente » Cod sursa (job #1150082) | Cod sursa (job #307622) | Cod sursa (job #1151005) | Cod sursa (job #1824054) | Cod sursa (job #2841855)
#include <iostream>
#include<stack>
#include<vector>
#include<fstream>
using namespace std;
vector<vector<pair<int,int>>>mu;
int n,x,y,i,j,ans[500005],cnt,fr[50005],m,unde[50005];
stack<int>st;
void DFS(int nod){
for(unsigned int z=unde[nod];z<mu[nod].size();++z)
{
int nxt=mu[nod][z].first;
int nr=mu[nod][z].second;
if(fr[nr]==0){
unde[nod]=z+1;
fr[nr]=1;
st.push(nxt);
nod=nxt;
z=unde[nod]-1;
}
}
}
int main()
{
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
cin>>n>>m;
mu.resize(n+2);
for(i=1;i<=m;i++)
{
cin>>x>>y;
mu[x].push_back({y,i});
mu[y].push_back({x,i});
}
for(i=1;i<=n;i++)
if((mu[i].size()&1) or mu[i].size()==0)
{
cout<<-1;
return 0;
}
st.push(1);
while(st.empty()!=1){
int x=st.top();
DFS(x);
ans[++cnt]=st.top();
st.pop();
}
if(cnt-1!=m)
{
cout<<-1;
return 0;
}
for(i=1;i<cnt;i++)
cout<<ans[i]<<" ";
}