Pagini recente » Cod sursa (job #3257652) | Cod sursa (job #352264) | Cod sursa (job #1281747) | Cod sursa (job #653652) | Cod sursa (job #2141545)
#include <fstream>
#include <vector>
#define nmax 100010
#include <list>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> v[nmax];
list <int> q;
struct muchie
{
int st,dr,use;
} mu[5*nmax];
int viz[nmax],gr[nmax],ok,nr,n,m;
void euler(int i)
{
int nod,vec,j,ind;
q.push_back(i);
while(!q.empty())
{
nod=q.front();
if(v[nod].empty())
{
q.pop_front();
if(nod!=i) g<<nod<<' ';
}
else
{
ind=v[nod].back();
v[nod].pop_back();
if(!mu[ind].use)
{
mu[ind].use=1;
if(mu[ind].st==nod) vec=mu[ind].dr;
else vec=mu[ind].st;
q.push_front(vec);
}
}
}
}
int main()
{
int i,x,y;
f>>n>>m;
for(i=1; i<=m; i++)
{
f>> mu[i].st>>mu[i].dr;
v[mu[i].st].push_back(i);
v[mu[i].dr].push_back(i);
gr[mu[i].st]++;
gr[mu[i].dr]++;
}
ok=1;
for(i=1; i<=n&&ok; i++)
if(gr[i]%2) ok=0;
if(ok) {g<<1<<' ';euler(1);}
else g<<-1;
return 0;
}