Pagini recente » pregtire_oji2012_1 | Istoria paginii runda/probatest/clasament | Diferente pentru runda/noaptea_burlacilor intre reviziile 2 si 1 | Diferente pentru calibrare-limite-de-timp intre reviziile 58 si 221 | Cod sursa (job #2017480)
#include<fstream>
#include<iostream>
#include<cstring>
#include<vector>
#include<stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,a,b,y[500005],z[100005],c[100005];
vector<pair<int,int> >x[100005];
stack<int>s;
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>a>>b;
x[a].push_back(make_pair(b,i));
x[b].push_back(make_pair(a,i));
z[a]++;
z[b]++;
}
for(int i=1;i<=n;i++)
if(z[i]==0||z[i]%2)
{
fout<<-1;
return 0;
}
s.push(1);
int nod,nr;
while(!s.empty())
{
nod=s.top();
nr=0;
// s.pop();
while(c[nod]<x[nod].size())
{
if(!y[x[nod][c[nod]].second])
{
y[x[nod][c[nod]].second]=1;
s.push(x[nod][c[nod]].first);
break;
}
else
c[nod]++;
}
if(c[nod]==x[nod].size()&&!s.empty())
{
s.pop();
if(!s.empty())
fout<<nod<<' ';
}
}
}