Pagini recente » Cod sursa (job #2878422) | Cod sursa (job #2322878) | Cod sursa (job #530688) | Cod sursa (job #2607319) | Cod sursa (job #2544183)
#include <fstream>
#include <vector>
#define pb push_back
const int MAXN = 100000;
const int MAXM = 500000;
using namespace std;
ifstream cin( "ciclueuler.in" );
ofstream cout( "ciclueuler.out" );
int n, m;
vector<int> g[MAXN+1];
vector<int> q;
vector<int> sol;
bool viz[MAXM+1];
int from[MAXM+1];
int to[MAXM+1];
int legitcheck( )
{
for( int i=1;i<=n;i++ )
if( g[i].size()%2 )
return 0;
return 1;
}
int main()
{
cin>>n>>m;
for( int i=1;i<=m;i++ )
{
int x, y; cin>>x>>y;
g[x].pb(i);
g[y].pb(i);
from[i]=x;
to[i]=y;
}
if( legitcheck() )
{
q.pb(1);
while( !q.empty() )
{
int node=q.back();
if( !g[node].empty() )
{
int edge=g[node].back(); g[node].pop_back();
if( !viz[edge] )
{
viz[edge]=true;
int nextnode=from[edge]^to[edge]^node;
q.pb(nextnode);
}
}
else
{
q.pop_back();
sol.pb(node);
}
}
int ans=sol.size();
for( int i=0;i<ans-1;i++ )
cout<<sol[i]<<" ";
}
else
cout<<"-1";
return 0;
}