Pagini recente » Cod sursa (job #3258102) | Cod sursa (job #2962268) | Cod sursa (job #2624231) | Cod sursa (job #290533) | Cod sursa (job #2722717)
#include <iostream>
#include <fstream>
#include <vector>
const int MAXN = 1e5 + 1,MAXM = 5e5 + 1;
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector<int>graf[MAXN];
bool viz[MAXM];
int n,m,from[MAXN],to[MAXM];
vector<int>ans;
void dfs(int nod){
for(auto label : graf[nod]){
/// am label-ul muchiilor
if(!viz[label]){
/// from -> to | nod;
int vecin;
if(nod == from[label])
vecin = to[label];
else
vecin = from[label];
viz[label] = true;
dfs(vecin);
ans.push_back(nod);
}
}
}
int main()
{
in>>n>>m;
for(int i = 1; i <= m; i++){
int x,y;
in>>x>>y;
graf[x].push_back(i);
graf[y].push_back(i);
from[i] = x;
to[i] = y;
}
for(int i = 1; i <= n; i++){
if(graf[i].size() & 1){
out<<-1;
return 0;
}
}
ans.push_back(1);
dfs(1);
for(int i = 1; i <= m; i++){
if(!viz[i]){
out<<-1;
return 0;
}
}
for(int i = 0; i < ans.size() - 1; i++)
out<<ans[i]<<" ";
return 0;
}