Pagini recente » Cod sursa (job #1074507) | Cod sursa (job #877630) | Cod sursa (job #2211988) | Cod sursa (job #215823) | Cod sursa (job #1978333)
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
struct Edge
{
int from;
int to;
bool del;
};
int const edgemax = 500000;
int const nmax = 100000;
Edge edge[1 + edgemax];
vector<int> gr[1 + nmax];
queue <int> q;
stack <int> st;
int viz[1 + nmax];
bool bfs(int n)
{
q.push(1);
viz[1] = 1;
while(!q.empty())
{
for(int i = 0; i < gr[q.front()].size(); ++ i)
{
int from = edge[gr[q.front()][i]].from;
int to = edge[gr[q.front()][i]].to;
if(from == q.front())
{
if(viz[to] == 0)
{
viz[to] = 1;
q.push(to);
}
}
else
{
if(viz[from] == 0)
{
viz[from] = 1;
q.push(from);
}
}
}
q.pop();
}
for(int i = 1; i <= n; ++ i)
{
if(0 < gr[i].size() && viz[i] == 0)
return 1;
}
return 0;
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; ++ i)
{
int u, v;
scanf("%d%d", &u, &v);
edge[i] = {u, v, 0};
gr[u].push_back(i);
gr[v].push_back(i);
}
if(bfs(n) == 1)
{
printf("-1");
return 0;
}
for(int i = 1; i <= n; ++ i)
{
if(gr[i].size() % 2 != 0)
{
printf("-1");
return 0;
}
}
st.push(1);
while(!st.empty())
{
int nod = st.top();
bool vecini = 0;
for(int i = 0; i < gr[nod].size(); ++ i)
{
if(edge[gr[nod][i]].del == 0)
{
edge[gr[nod][i]].del = 1;
int from = edge[gr[nod][i]].from;
int to = edge[gr[nod][i]].to;
if(nod == from)
{
st.push(to);
}
else
{
st.push(from);
}
vecini = 1;
break;
}
}
if(vecini == 0)
{
if(1 < st.size())
printf("%d ", nod);
st.pop();
}
}
return 0;
}