Pagini recente » Cod sursa (job #2904756) | Cod sursa (job #1421936) | Cod sursa (job #2610282) | Cod sursa (job #1488169) | Cod sursa (job #2988087)
#include <fstream>
#include <vector>
#include <stack>
#include <bitset>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
const int MAX = 1e5 + 1;
struct muchie{
int y , i;
};
vector <muchie> g[MAX];
int n , x , y , m , last[MAX] , sizes[MAX];
bitset<MAX> marcat;
bitset<MAX*5> b;
vector <int> ans;
void read(){
cin >> n >> m;
while(m){
cin >> x >> y;
g[x].push_back({y,m});
g[y].push_back({x,m});
sizes[x]++;
sizes[y]++;
m--;
}
}
void dfs( int x ){
marcat[x] = 1;
for(auto it : g[x]){
if(!marcat[it.y]) dfs(it.y);
}
}
int check(){
int to_be_remembered;
for(int i = 1 ; i <= n ; i++){
if(sizes[i]){
dfs(i);
break;
}
}
for(int i = 1 ; i <= n ; i++){
int x = sizes[i];
if(x%2){
cout << -1;
exit(0);
}
if(!x) continue;
if(!marcat[i]){
cout << -1;
exit(0);
}
to_be_remembered = i;
}
return to_be_remembered;
}
void euler( int x ){
for(int i = last[x] ; i < sizes[x] ; i++){
muchie it = g[x][i];
last[x]++;
if(!b[it.i]){
b[it.i] = 1;
euler(it.y);
}
}
ans.push_back(x);
}
void afis(){
ans.pop_back();
for(auto it : ans){
cout << it << ' ';
}
}
int main()
{
read();
int x = check();
euler(x);
afis();
return 0;
}