Pagini recente » Cod sursa (job #1964630) | Cod sursa (job #371692) | Cod sursa (job #160460) | Cod sursa (job #3238168) | Cod sursa (job #2298022)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <bitset>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#define INF (1<<28)
#define Nmax 1000005
using namespace std;
string file="ciclueuler";
//string file="1";
ifstream f( (file + ".in").c_str() );
ofstream g( (file + ".out").c_str() );
int n, m;
vector <pair <int, int> > v[Nmax], sol;
queue <int> Q;
bitset <Nmax> seen;
bool check()
{
for (int i = 1; i <= n; i++)
if(v[i].size()%2 == 1) return 0;
return 1;
}
void euler(int x)
{
while(v[x].size())
{
int y =v[x].back().first;
int mc=v[x].back().second;
v[x].pop_back();
if(seen[mc] == 1) continue;
seen[mc]=1;
euler(y);
}
Q.push(x);
}
void print()
{
while(Q.size()>1)
{
g << Q.front() << " ";
Q.pop();
}
}
int main()
{
f >> n >> m;
for (int i = 1, x, y; i <= m; i++)
{
f >> x >> y;
v[x].push_back({y, i});
v[y].push_back({x, i});
}
if(check() == 0)
{
g << "-1";
return 0;
}
euler(1);
print();
return 0;
}