Pagini recente » Cod sursa (job #76100) | Cod sursa (job #2231004) | Cod sursa (job #1622519) | Istoria paginii runda/pre102/clasament | Cod sursa (job #1518222)
#include <fstream>
#include <vector>
#include <bitset>
#include <stack>
#define N 100010
#define M 200010
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<int> v[N];
int n,m,x,y,i,k,gr[N],a[M],b[M];
bitset<M> viz;
void df(int),DF(int);
stack<int> s;
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a[i]>>b[i];
v[a[i]].push_back(i);
v[b[i]].push_back(i);
gr[a[i]]++;gr[b[i]]++;
}
for(i=1;i<=n;i++)
if(gr[i]%2)
{
g<<"-1\n";
return 0;
}
k=n;
df(1);
if(k)
{
g<<"-1\n";
return 0;
}
s.push(1);viz.reset();
while(s.size()>1||m)
{
x=s.top();
if(gr[x]==0){g<<x<<' ';m--;s.pop();continue;}
if(viz[v[x].back()]){v[x].pop_back();continue;}
k=v[x].back();viz[k]=1;y=a[k]+b[k]-x;s.push(y);gr[x]--;gr[y]--;
}
return 0;
}
void df(int nod)
{
viz[nod]=1;k--;
for(auto it:v[nod])
if(!viz[a[it]+b[it]-nod])
df(a[it]+b[it]-nod);
}