Pagini recente » Cod sursa (job #1580421) | Cod sursa (job #2080851) | Cod sursa (job #2814528) | Cod sursa (job #2063045) | Cod sursa (job #2220288)
#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <cstring>
#define DIM 1000002
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
queue < int > Q;
vector <pair <int, int> > v[DIM];
bitset <DIM/2> seen;
int n, m, i, j, x, y;
bool ok= true;
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( 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();
}
return 0;
}