Pagini recente » Cod sursa (job #925751) | Cod sursa (job #91244) | Cod sursa (job #2245884) | Cod sursa (job #1261791) | Cod sursa (job #1970725)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
using VI = vector<int>;
vector<VI> G;
VI to, from;
int N, M;
VI ans;
void Read();
void Euler();
void Write();
int main()
{
Read();
Euler();
Write();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> N >> M;
G = vector<VI>(N + 1);
to = from = VI(M + 1);
int x, y;
for ( int i = 1; i <= M; ++i )
{
fin >> x >> y;
G[x].push_back(i);
G[y].push_back(i);
to[i] = y, from[i] = x;
}
}
void Euler()
{
stack<int> st;
for ( int i = 1; i <= N; ++i )
if ( G[i].size() & 1 )
{
fout << "-1" << '\n';
return;
}
vector<bool> used(M + 1);
st.push(1);
while ( !st.empty() )
{
int x = st.top();
if ( !G[x].empty() )
{
int ind = G[x].back();
G[x].pop_back();
if ( !used[ind] )
{
used[ind] = true;
int y = from[ind] ^ to[ind] ^ x;
st.push(y);
}
}
else
{
ans.push_back(x);
st.pop();
}
}
}
void Write()
{
for ( const int& x : ans )
fout << x << ' ';
}