Pagini recente » Cod sursa (job #2346453) | Cod sursa (job #2396022) | Cod sursa (job #2731477) | Cod sursa (job #2781209) | Cod sursa (job #2141813)
#include <fstream>
#include <bitset>
#include <vector>
#define Nmax 100008
#define Nmax2 500000
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
typedef pair <int,int> edge;
int n,m,x,y;
bitset <Nmax2> viz;
bitset <Nmax> used;
vector <int> G[Nmax],sol;
edge E[Nmax2];
void DFS(int node) {
used[node]=1;
for (auto x: G[node])
if (!viz[x]) {
viz[x]=1;
DFS(E[x].first+E[x].second-node);
}
sol.push_back(node);
}
bool AdmiteCiclu() {
for (int i=1; i<=n; ++i)
if (G[i].size()%2) return 0;
return 1;
}
void ReadInput() {
f>>n>>m;
for (int i=1; i<=m; ++i) {
f>>x>>y;
G[x].push_back(i);
G[y].push_back(i);
E[i].first=x;
E[i].second=y;
}
}
void Solve() {
if (!AdmiteCiclu()) {
g<<-1<<'\n';
return;
}
DFS(1);
for (int i=1; i<=n; ++i)
if (!used[i]) {
g<<-1<<'\n';
return;
}
for (auto x: sol) g<<x<<' ';
g<<'\n';
}
int main() {
ReadInput();
Solve();
f.close(); g.close();
return 0;
}