Pagini recente » Monitorul de evaluare | Cod sursa (job #246595) | Monitorul de evaluare | Cod sursa (job #246336) | Cod sursa (job #1378352)
#include <fstream>
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
#define foor(it,v) for(__typeof(v.begin()) it=v.begin();it!=v.end();++it)
#define cout g
int n,m,i;
struct eee
{
int a,b;
};
vector<eee> muc;
vector<vector<int> >G;
vector<bool> on;
vector<int> grad;
stack<int> stiva;
int gi();
void euler(int nod)
{
stiva.push(nod);
while (!stiva.empty())
{
inc:;
nod=stiva.top();
foor(it,G[nod]) if(on[*it])
{
on[*it]=false;
stiva.push(muc[*it].a==nod ? muc[*it].b:muc[*it].a);
goto inc;
}
stiva.pop();
cout<<nod<<' ';
}
}
int main()
{
n=gi();
m=gi();
muc.resize(m+1);
G.resize(n+1);
on.resize(m+1,true);
grad.resize(n+1);
for(i=1; i<=m; ++i)
{
muc[i].a=gi();
muc[i].b=gi();
++grad[muc[i].a];
++grad[muc[i].b];
G[muc[i].a].push_back(i);
G[muc[i].b].push_back(i);
}
for(i=1; i<=n; ++i) if(grad[i]&1)
{
cout<<"-1";
return 0;
}
euler(1);
return 0;
}
#define maxb 2
int pos(maxb);
char buf[maxb];
int gi()
{
int nr=0;
while(buf[pos]<'0' || buf[pos]>'9') if(++pos>=maxb) f.read(buf,maxb),pos=0;
while(buf[pos]>='0' && buf[pos]<='9')
{
nr=nr*10+buf[pos]-'0';
if(++pos>=maxb) f.read(buf,maxb),pos=0;
}
return nr;
}