Pagini recente » Cod sursa (job #320880) | Cod sursa (job #634322) | Cod sursa (job #463601) | Cod sursa (job #2782529) | Cod sursa (job #555647)
Cod sursa(job #555647)
#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<deque>
#include<list>
#include<queue>
#include<set>
#include<stack>
#include<vector>
using namespace std;
const char IN[] = {"ciclueuler.in"};
const char OUT[] = {"ciclueuler.out"};
const int INF = 1000000005;
const double PI = 3.14159265;
const int NMAX = 100005;
const int MMAX = 500005;
#define II inline
#define LL long long
#define PII pair<int, int>
#define PDD pair<double, double>
#define fs first
#define sc second
#define mp make_pair
#define pb push_back
#define FOR(i, a, b) for(int i = a ; i <= b ; i++)
#define IFOR(i, a, b) for(int i = a ; i >= b ; i--)
#define FORITL(it, V) for(list<int> :: iterator it = V.begin() ; it != V.end() ; it++)
#define FORIT(it, V) for(vector<int> :: iterator it = V.begin() ; it != V.end() ; it++)
#define all(a) a, a +
int N, M;
list<int> Graf[NMAX];
vector<int> euler;
bitset<NMAX> viz;//int viz[NMAX];
int grad[NMAX];
void citi()
{
scanf("%d%d", &N, &M);
FOR(i, 1, M)
{
int x, y;
scanf("%d%d", &x, &y);
Graf[x].pb(y);
Graf[y].pb(x);
grad[x]++;
grad[y]++;
}
}
void dfs(int nod)
{
viz[nod] = 1;
FORITL(it, Graf[nod])
if(!viz[*it])
dfs(*it);
}
bool ok()
{
//viz.reset();
dfs(1);
FOR(i, 1, N)
if(!viz[i] || grad[i]%2 != 0)
return 0;
return 1;
}
void parcurg()
{
stack<int> st;
st.push(1);
while(st.size())
{
if(Graf[st.top()].size())
{
int x = st.top();
st.push(Graf[x].front());
Graf[x].pop_front();
FORITL(it, Graf[st.top()])
if(*it == x)
{
Graf[st.top()].erase(it);
break;
}
}
else
{
euler.pb(st.top());
st.pop();
}
}
}
void scrie()
{
if(!ok())
{
printf("-1\n");
return;
}
parcurg();
euler.pop_back();
FORIT(it, euler)
printf("%d ", *it);
printf("\n");
}
int main()
{
freopen(IN, "r", stdin);
freopen(OUT, "w", stdout);
citi();
scrie();
return 0;
}