Pagini recente » Cod sursa (job #1970279) | Cod sursa (job #892939) | Cod sursa (job #2379361) | Cod sursa (job #809402) | Cod sursa (job #2209821)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#define Nmax 1000004
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <pair <int, int> > v[Nmax];
bitset <Nmax/2> seen;
queue <int> Q;
bool ok=true;
int n, m, x, y;
void read()
{
f >> n >> m;
for ( int i = 1; i <= m; i ++ )
{
f >> x >> y;
v[x].push_back(make_pair(y,i));
v[y].push_back(make_pair(x,i));
}
}
void check()
{
for ( int i = 1; i <= n; i ++ )
if(v[i].size()%2 == 1 )
ok=false;
}
void euler(int node)
{
while(v[node].size())
{
int muchie=v[node].back().second;
int vecin=v[node].back().first;
v[node].pop_back();
if(seen[muchie] == 1) continue;
seen[muchie]=1;
euler(vecin);
}
Q.push(node);
}
void print()
{
while(Q.size()>1)
{
g << Q.front() << " ";
Q.pop();
}
}
int main()
{
read();
check();
if(ok==false) g << "-1";
else
{
euler(1);
print();
}
}