Pagini recente » Cod sursa (job #2703613) | Cod sursa (job #3175470) | Cod sursa (job #1435029) | Cod sursa (job #657177) | Cod sursa (job #1398157)
#include<fstream>
#include<vector>
#include<stack>
using namespace std;
typedef int var;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct Edge {
var n, i;
Edge(var a, var b) {
n = a;
i = b;
}
};
#define MAXN 200001
#define MAXM 500001
vector<Edge> G[MAXN];
vector<bool> TAKEN(1);
var n, m;
bool VIZ[MAXN];
var D[MAXN];
var dfs(var node) {
VIZ[node] = 1;
var t = 1;
for(auto e : G[node]) {
if(!VIZ[e.n]) {
t += dfs(e.n);
}
}
return t;
}
int main() {
var a, b;
fin>>n>>m;
for(var i=1; i<=m; i++) {
fin>>a>>b;
TAKEN.push_back(0);
G[a].push_back(Edge(b, i));
G[b].push_back(Edge(a, i));
D[a] ++;
D[b] ++;
}
if(dfs(1) != n) {
fout<<"-1";
return 0;
}
for(var i=1; i<=n; i++) {
if(D[i]%2) {
fout<<"-1";
return 0;
}
}
stack<var> ST;
ST.push(1);
while(!ST.empty()) {
var node = ST.top();
while(!G[node].empty() && TAKEN[G[node].back().i])
G[node].pop_back();
if(G[node].empty()) {
fout<<node<<" ";
ST.pop();
} else {
ST.push(G[node].back().n);
TAKEN[G[node].back().i] = 1;
G[node].pop_back();
}
}
fout.seekp(fout.tellp() - 2);
fout<<"\n";
return 0;
}