Pagini recente » Cod sursa (job #643802) | Cod sursa (job #1381610) | Cod sursa (job #1214476) | Cod sursa (job #3033278) | Cod sursa (job #2696741)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n, m;
vector <int> G[1000001];
vector <int> sol;
int a[500001], b[500001];
bool viz[500001];
int ok;
void citire()
{
f >> n >> m;
for(int i = 1; i <= m; i++)
{
f >> a[i] >> b[i];
G[a[i]].push_back(i);
G[b[i]].push_back(i);
}
}
void euler(int poz)
{
while(G[poz].size())
{
int x = G[poz].back(); ///muchia curenta
G[poz].pop_back();
if(viz[x] != 0)
continue;
viz[x] = 1;
int vecin;
if(a[x] == poz)
vecin = b[x];
else
vecin = a[x];
euler(vecin);
}
sol.push_back(poz);
}
int main()
{
citire();
//
for(int i = 1; i <= n; i++)
{
if(G[i].size() % 2 == 1)
{
g << "-1";
return 0;
}
}
euler(1);
for(int i = 0; i < sol.size(); i++)
g << sol[i] << ' ';
return 0;
}