Pagini recente » Cod sursa (job #294678) | Cod sursa (job #2470969) | Cod sursa (job #1835940) | Cod sursa (job #849836) | Cod sursa (job #1336397)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector< vector<int> > a;
vector<bool> v;
vector<int> s;
stack<int> st;
int n,m;
void euler(int x)
{
st.push(x);
while(!st.empty())
{
int k=st.top();
if(a[k].size())
{
int y=a[k].back();
a[k].pop_back();
a[y].erase(find(a[y].begin(),a[y].end(),k));
st.push(y);
}
else{
st.pop();
s.push_back(k);
}
}
}
void dfs(int x)
{
v[x]=true;
for(auto i: a[x])
if(!v[i])
dfs(i);
}
int main()
{
int x,y;
in>>n>>m;
a=vector< vector<int> >(n+1);
v=vector<bool>(n+1);
for(int i=1;i<=m;i++)
{
in>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
dfs(1);
for(int i=1;i<=n;i++)
if(v[i]==false || a[i].size()%2)
{
out<<-1;
return 0;
}
euler(1);
for(int i=0;i<m;i++)out<<s[i]<<' ';
return 0;
}