Pagini recente » Rating Mate Bucs (BucsMate) | Istoria paginii utilizator/alexcrc | Cod sursa (job #2851946) | Triburi | Cod sursa (job #833338)
Cod sursa(job #833338)
#include<fstream>
#include<vector>
#include<bitset>
#define Mmax 900000
#define Nmax 900000
using namespace std;
ifstream fin("ciclueuler.in"); ofstream fout("ciclueuler.out");
int n, m, nr, x[Mmax], y[Mmax], sol[Mmax];
vector<int> g[Nmax];
bool viz[Mmax];
void euler(int nod)
{
vector<int>::iterator it = g[nod].begin(), sf = g[nod].end();
for( ; it != sf; ++it)
{
if(!viz[*it])
{
viz[*it] = true;
euler(x[*it] + y[*it] - nod);
}
}
sol[++nr] = nod;
}
inline int cont()
{
for(int i = 1; i <= n; ++i)
if(g[i].size() % 2) return 0;
return 1;
}
int main()
{
fin>>n>>m;
for(int i = 1; i <= m; ++i)
{
fin>>x[i]>>y[i];
g[x[i]].push_back(i);
g[y[i]].push_back(i);
}
if(cont())
{
euler(1);
for(int i = 1; i <= nr; ++i) fout<<sol[i]<<' ';
}
else
fout<<-1;
fout<<'\n';
return 0;
}