Pagini recente » Cod sursa (job #1126669) | Cod sursa (job #2577040) | Cod sursa (job #2923945) | Cod sursa (job #2283076) | Cod sursa (job #1570454)
#include <cstdio>
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <set>
#include <vector>
#include <queue>
#include <iomanip>
#include <cstring>
#include <stack>
#define INF 0x3f3f3f3f
#define NMax 100005
using namespace std;
vector<int> vecini[NMax];
stack<int> s;
int n,m,x,y;
int grad[NMax];
void elimina(int v,int u){
for(int i = 0; i < vecini[v].size(); ++i){
if(vecini[v][i] == u){
vecini[v].erase(vecini[v].begin() + i);
return;
}
}
}
void euler(){
s.push(1);
int k = 0;
while(!s.empty()){
int nod = s.top();
if(k >= m)
break;
if(!vecini[nod].size()){
printf("%d ",nod);
k++;
s.pop();
}else{
int v = vecini[nod].back();
vecini[nod].pop_back();
elimina(v,nod);
s.push(v);
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i = 0; i < m; ++i){
scanf("%d%d",&x,&y);
vecini[x].push_back(y);
vecini[y].push_back(x);
grad[x] ++;
grad[y] ++;
}
for(int i = 1; i <= n; ++i){
if(grad[i] % 2){
printf("-1");
return 0;
}
}
euler();
return 0;
}