Pagini recente » Cod sursa (job #3219541) | Cod sursa (job #810063) | Cod sursa (job #2529757) | Cod sursa (job #2669468) | Cod sursa (job #2837953)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define nmax 100000
#define mmax 500000
using namespace std;
ifstream f("ciclueuler.in",ios::in);
ofstream g("ciclueuler.out",ios::out);
vector<int> V[nmax+10];
stack<int> stiva;
int e1[mmax+10],e2[mmax+10],n,m,a,b;
bool viz[mmax+10],pus;
void read()
{
f>>n>>m;
for(int i=1;i<=m;i++)
{
f>>a>>b;
V[a].push_back(i);
V[b].push_back(i);
e1[i]=a;
e2[i]=b;
}
f.close();
return;
}
bool ok()
{
for(int i=1;i<=n;i++)
if(V[i].size()%2)
return false;
return true;
}
void euler()
{
stiva.push(1);
int sursa,vecin;
while(!stiva.empty())
{
sursa=stiva.top();
if(V[sursa].size())
{
int muchie=V[sursa].back();
V[sursa].pop_back();
if(!viz[muchie])
{
viz[muchie]=true;
if(e1[muchie]==e2[muchie])
vecin=e1[muchie];
else{
if(e1[muchie]==sursa)
vecin=e2[muchie];
else if(e2[muchie]==sursa)
vecin=e1[muchie];
}
stiva.push(vecin);
}
}
else{
if(stiva.top()==1)
{
if(!pus)
{
pus=true;
g<<1<<" ";
}
}
else{
g<<stiva.top()<<" ";
}
stiva.pop();
}
}
}
int main()
{
read();
if(ok())
{
euler();
}
else g<<-1;
return 0;
}