Pagini recente » Istoria paginii runda/test_sdasjdkasdasjk/clasament | Diferente pentru calibrare-limite-de-timp intre reviziile 131 si 221 | Istoria paginii runda/justtesting/clasament | Istoria paginii runda/pregatire-monthly8-ziua2/clasament | Cod sursa (job #2017456)
#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[100005],z[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();
for(auto i:x[nod])
if(!y[i.second])
{
y[i.second]=1;
s.push(i.first);
break;
}
else
nr++;
if(nr==x[nod].size())
{
s.pop();
if(!s.empty())
fout<<nod<<' ';
}
}
}