Pagini recente » Cod sursa (job #1795417) | Cod sursa (job #1865332) | Cod sursa (job #2349941) | Cod sursa (job #930501) | Cod sursa (job #1793996)
#include <stdio.h>
#include <vector>
using namespace std;
struct _muchie{
int a, b;
} muchie[500001]={0};
vector<int> v[100001], stack;
bool folosit[500001]={0};
int sol[500001]={0}, lg, w;
char buff[200000];int pos=0;
FILE*f=freopen("ciclueuler.in","r",stdin);
FILE*g=freopen("ciclueuler.out","w",stdout);
inline void read(int &nr){
while(buff[pos] < '0' || buff[pos] > '9')if(++pos == 200000) fread(buff, 1, 200000, stdin), pos = 0;
nr = 0;
while('0' <= buff[pos] && buff[pos] <= '9') {nr = nr * 10 + buff[pos] - '0';if(++pos == 200000) fread(buff, 1, 200000, stdin), pos = 0;}
}
int main()
{
int i, j, n, m, nod, w, a, b, _m;
read(n);read(m);
for(i=1; i<=m; i++){
read(a);read(b);
v[a].push_back(i);
v[b].push_back(i);
muchie[i].a = a;
muchie[i].b = b;
}
for(i=1; i<=n; i++)
if(v[i].size() & 1){
printf("-1\n");
return 0;
}
stack.push_back(1);
while(!stack.empty()){
nod = stack.back();
if(!v[nod].empty()){
w = v[nod].back();
v[nod].pop_back();
if(!folosit[w]){
folosit[w] = true;
_m = muchie[w].a ^ muchie[w].b ^ nod;
stack.push_back(_m);
}
}
else{
sol[++lg] = nod;
stack.pop_back();
}
}
for(i=1; i<lg; i++)
printf("%d ", sol[i]);
printf("\n");
}