Pagini recente » Cod sursa (job #62334) | Cod sursa (job #533551) | Cod sursa (job #489799) | Cod sursa (job #2408467) | Cod sursa (job #2723273)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int lvl=1e5+4,lel=5e5+4;
vector<pair<int,int> > vec[lvl];
bool used[lel];
bool tip[lel];
bool ok[lvl];
int n,m,x,y;
void df(int nod)
{
ok[nod]=true;
for(pair<int,int> p:vec[nod])
if(!ok[p.first])
{
tip[p.second]=true;
df(p.first);
}
}
bool mycmp(pair<int,int> p1,pair<int,int> p2)
{
return tip[p1.second]>tip[p2.second];
}
int main()
{
in>>n>>m;
for(int i=1;i<=m;++i)
{
in>>x>>y;
vec[x].push_back({y,i});
vec[y].push_back({x,i});
}
df(1);
for(int i=1;i<=n;++i)
{
if(!ok[i] or vec[i].size()%2!=0)
{
out<<-1<<'\n';
return 0;
}
sort(vec[i].begin(),vec[i].end(),mycmp);
}
int nod=1,aux;
for(int i=1;i<=m;++i)
{
out<<nod<<' ';
while(used[vec[nod].back().second])
vec[nod].pop_back();
used[vec[nod].back().second]=true;
aux=vec[nod].back().first;
vec[nod].pop_back();
nod=aux;
}
return 0;
}