Pagini recente » Cod sursa (job #2786459) | Cod sursa (job #563464) | Cod sursa (job #1727170) | Cod sursa (job #2214632) | Cod sursa (job #2122445)
#include <iostream>
#include <fstream>
#include <cassert>
#include <vector>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n , m;
vector<vector<int>> G;
vector<int> L;
vector<pair<int,int>> M;
vector<bool> elim;
int d[100001];
void Euler(int k)
{
for(auto x : G[k])
{
//x = indicele muchiei
//M[x].first = k
//M[x].second = cealalta extremitate
if(!elim[x])
{
elim[x] = 1;
int p = M[x].second;
if(p == k)
p = M[x].first;
Euler(p);
}
}
L.push_back(k);
}
int main()
{
int i , j;
fin >> n >> m;
G.resize(n + 1);
M.resize(m);
elim.resize(m, false);
for(int k = 0 ; k < m ; k ++)
{
fin >> i >> j;
d[i] ++, d[j] ++;
M[k] = {i,j};
G[i].push_back(k);
G[j].push_back(k);
}
bool ok = true;
for(int i =1 ; i <= n ; i ++)
if(d[i] % 2 == 1)
ok = false;
if(!ok)
fout << -1;
else
{
Euler(1);
for(int i = 0 ; i < L.size() -1 ; i ++)
fout << L[i] << " ";
}
return 0;
}