Pagini recente » Cod sursa (job #2461014) | Cod sursa (job #1130227) | Cod sursa (job #2188606) | Cod sursa (job #3036708) | Cod sursa (job #3003370)
#include <bits/stdc++.h>
#define nMax 100005
#define mMax 500005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> v[nMax];
vector <int> sol;
int n, m;
int st[mMax], dr[mMax], poz[mMax];
bool viz[mMax];
inline void Citire()
{
fin >> n >> m;
for(int i = 1; i <= m; i ++)
{
int x, y;
fin >> x >> y;
st[i] = x;
dr[i] = y;
v[x].push_back(i);
v[y].push_back(i);
}
}
inline bool euler()
{
for(int i = 1; i <= n; i ++)
if(v[i].size() % 2 == 1)
return false;
return true;
}
inline void dfs(int nod)
{
int k;
while(poz[nod] < v[nod].size())
{
k = v[nod][poz[nod] ++];
if(!viz[k])
{
viz[k] = 1;
dfs(st[k] + dr[k] - nod);
}
}
sol.push_back(nod);
}
inline void Solve()
{
dfs(1);
for(auto it : sol)
fout << it << ' ';
}
int main()
{
Citire();
if(euler() == false)
fout << -1;
else
Solve();
return 0;
}