Pagini recente » Cod sursa (job #2019233) | Cod sursa (job #3290864) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 183 | Cod sursa (job #2985008) | Cod sursa (job #3286257)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int const MAX=5e5+5;
bool sters[MAX];
vector<pair<int,int>>adj[MAX];
int n,m;
int ind[MAX];
vector<int>rasp;
int grad[MAX];
void read(){
fin>>n>>m;
int i;
for(i=1;i<=m;++i){
int u,v;
fin>>u>>v;
adj[u].push_back({v,i});
adj[v].push_back({u,i});
++grad[u];
++grad[v];
}
}
void euler(int nod){
while(ind[nod]<(int)adj[nod].size()){
auto [vec,ed]=adj[nod][ind[nod]];
++ind[nod];
if(!sters[ed]){
sters[ed]=1;
euler(vec);
}
}
rasp.push_back(nod);
}
int main()
{
read();
euler(1);
int i;
for(i=1;i<=n;++i)
if(grad[i]%2==1){
fout<<-1;
return 0;
}
for(i=1;i<=m;++i)
if(!sters[i]){
fout<<-1;
return 0;
}
rasp.pop_back();
for(auto x : rasp)
fout<<x<<' ';
return 0;
}