Pagini recente » Cod sursa (job #1898891) | Cod sursa (job #154447) | Cod sursa (job #2013122) | Monitorul de evaluare | Cod sursa (job #2343145)
#include <fstream>
#include <stack>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
const int NMAX=100000;
vector<int>v[NMAX+5];
stack <int> st;
string s[NMAX+5];
int viz[NMAX+5];
void dfs(int u)
{
int l,j;
viz[u]=1;
for(j=0;j<v[u].size();j++)
{
l=v[u][j];
if(viz[l]==0)
dfs(l);
}
}
void Eu(int node)
{
int other;
while(!v[node].empty())
{
st.push(node);
other=v[node].back();
v[node].pop_back();
v[other].erase(find(v[other].begin(),v[other].end(),node));
node=other;
}
}
int main()
{
int node,i,j,n,m,u,l,conex=1;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>u>>l;
v[u].push_back(l);
v[l].push_back(u);
}
conex=1;
dfs(1);
for(i=1;i<=n;i++)
if(viz[i]==0 || v[i].size()%2!=0)
{
conex=0;
break;
}
if(conex==1)
{
node=1;
do
{
Eu(node);
node=st.top();
cout<<node<<" ";
st.pop();
}while(!st.empty());
}
else
cout<<-1;
return 0;
}