Pagini recente » Cod sursa (job #313755) | Cod sursa (job #407708) | Cod sursa (job #1403521) | Cod sursa (job #463657) | Cod sursa (job #1793178)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct Muchie
{
int a, b;
bool viz;
inline int other(int c)
{
return a == c ? b : a;
}
} mc[500005];
int gr[100005] = {0};
vector<int> v[100005];
int n, m;
vector<int> r, st;
bool viz[100005] = {0};
void dfs(int i)
{
if(viz[i] == true)
return;
viz[i] = true;
for(int j = 0; j < v[i].size(); j++)
dfs(mc[v[i][j]].other(i));
}
int main()
{
int i, a, b;
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 0; i < m; i++)
{
scanf("%d%d", &a, &b);
a--; b--;
mc[i].a = a;
mc[i].b = b;
mc[i].viz = false;
v[a].push_back(i);
v[b].push_back(i);
if(a != b)
{
gr[a]++;
gr[b]++;
}
}
dfs(0);
for(i = 0; i < n; i++)
{
if(gr[i] == 0 || gr[i] % 2 != 0 || viz[i] == false)
{
printf("-1");
return 0;
}
}
st.push_back(0);
while(!st.empty())
{
a = st.back();
if(!v[a].empty())
{
if(!mc[v[a].back()].viz)
{
mc[v[a].back()].viz = true;
b = mc[v[a].back()].other(a);
st.push_back(b);
}
else v[a].pop_back();
}
else
{
st.pop_back();
r.push_back(a);
}
}
for(i = 0; i < r.size() - 1; i++)
printf("%d ", r[i] + 1);
return 0;
}