Pagini recente » Cod sursa (job #2587823) | Cod sursa (job #1641968) | Cod sursa (job #2699251) | Cod sursa (job #2699225)
#include <bits/stdc++.h>
#define ll unsigned long long
#define sz(v) (int)v.size()
#define fin cin
#define readFast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int NMAX = 1e5 + 5;
vector<set<int>> graf(NMAX);
vector<int> ciclu[NMAX];
int n, m;
bool ok = false;
void dfs(int nod, int p) {
if(nod == 1) {
ok = true;
return;
}
if(sz(graf[nod]) != 2) {
return;
}
for (int to : graf[nod]) {
if(to == p)
continue;
dfs(to, nod);
}
}
void afis(int nod, int p) {
fout << nod << " ";
for (int aux : ciclu[nod]) {
if(aux == nod)
fout << aux << " ";
else
fout << aux << " " << nod << " ";
}
if(nod == 1)
return;
for (int to : graf[nod]) {
if(to == p)
continue;
afis(to, nod);
}
}
int main() {
//ifstream fin("date.in.txt");
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out")
fin >> n >> m;
for (int i = 1; i <= m; ++i) {
int a, b;
fin >> a >> b;
if(a == b) {
ciclu[a].push_back(b);
continue;
}
if(graf[a].find(b) != graf[a].end()) {
graf[a].erase(b);
graf[b].erase(a);
ciclu[a].push_back(b);
ciclu[b].push_back(a);
continue;
}
if(graf[b].find(a) != graf[b].end()) {
graf[a].erase(b);
graf[b].erase(a);
ciclu[b].push_back(a);
ciclu[a].push_back(b);
continue;
}
graf[a].insert(b);
graf[b].insert(a);
}
if(graf[1].empty()) {
for (int nr : ciclu[1]) {
if(nr == 1)
fout << nr << " ";
else
fout << 1 << " " << nr << " ";
}
return 0;
}
else
dfs(*graf[1].begin(), 1);
if(ok)
afis(*graf[1].begin(), 1);
else
fout << -1;
return 0;
}