Pagini recente » Monitorul de evaluare | Cod sursa (job #3361927) | Cod sursa (job #3361926) | Cod sursa (job #3361906) | Cod sursa (job #3361256)
#include <iostream>
#pragma GCC optimize("O3,unroll-loops")
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <climits>
#include <iomanip>
#include <numeric>
#include <cstdio>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#define int long long
//#define int short
using namespace std;
const int nmax = 1e5;
const int mmax = 5e5;
int n, m;
vector<pair<int, int>> adj[nmax + 5];
vector<bool> vis(mmax + 1, 0);
vector<int> euleriancycle(){
stack<int> path;
vector<int> cycle;
path.push(1);
while (!path.empty()){
int currnode = path.top();
while (!adj[currnode].empty() && vis[adj[currnode].back().second]){
adj[currnode].pop_back();
}
if (!adj[currnode].empty()){
int node = adj[currnode].back().first;
vis[adj[currnode].back().second] = 1;
adj[currnode].pop_back();
path.push(node);
}
else{
cycle.push_back(currnode);
path.pop();
}
}
reverse(cycle.begin(), cycle.end());
cycle.pop_back();
return cycle;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
cin>>n>>m;
for (int i = 1; i <= m; i++){
int u, v;
cin>>u>>v;
adj[u].push_back({v, i});
adj[v].push_back({u, i});
}
for (int i = 1; i <= n; i++){
if (adj[i].size() & 1){
cout<<-1;
return 0;
}
}
vector<int> cycle = euleriancycle();
for (auto& node : cycle){
cout<<node<<" ";
}
}