Pagini recente » Cod sursa (job #2237517) | Cod sursa (job #2848910) | Cod sursa (job #276655) | Cod sursa (job #1620684) | Cod sursa (job #3163770)
#include <bits/stdc++.h>
#define NN 100005
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
struct Nustiu
{
int nod, cor;
};
int n, m;
Nustiu a, b, aux;
bool ok = false;
vector <Nustiu> v[NN];
stack <int> s;
void euler(int nod)
{
for(int i = 0 ; i < v[nod].size() ; i++)
{
aux = v[nod][i];
if(v[nod][i].nod > 0)
{
v[nod][i].nod *= -1;
v[aux.nod][aux.cor].nod *= -1;
euler(aux.nod);
}
}
s.push(nod);
}
void afisv()
{
for(int i = 1 ; i <= n ; i++)
{
fout << i << " : ";
for(int j = 0 ; j < v[i].size() ; j++)
{
fout << v[i][j].nod << " ";
}
fout << '\n';
}
}
int main()
{
fin >> n >> m;
for(int i = 1 ; i <= m ; i++)
{
fin >> a.nod >> b.nod;
if(a.nod == b.nod)
{
a.cor = v[a.nod].size() + 1;
b.cor = v[b.nod].size();
}
else
{
a.cor = v[a.nod].size();
b.cor = v[b.nod].size();
}
v[b.nod].push_back(a);
v[a.nod].push_back(b);
}
//afisv();
euler(1);
int ss = s.size();
if(ss != m + 1)
fout << -1;
else
{
//fout << s.size() << '\n';
while(s.size() > 1)
{
fout << s.top() << " ";
s.pop();
}
}
return 0;
}