Pagini recente » Cod sursa (job #3231669) | Cod sursa (job #3174582) | Cod sursa (job #514711) | Cod sursa (job #399051) | Cod sursa (job #2375234)
#include <bits/stdc++.h>
#define N 100001
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector<int> v[N],sol;
stack<int> s;
bool viz[N];
int n;
void dfs(int vf)
{
viz[vf]=true;
for(auto s:v[vf])
if(!viz[s])
dfs(s);
}
void sterge_muchie(int a,int b)
{
int i;
for(i=0;i<v[a].size();i++)
if(v[a][i]==b)
v[a].erase(v[a].begin()+i);
for(i=0;i<v[b].size();i++)
if(v[b][i]==a)
v[b].erase(v[b].begin()+i);
}
void euler(int nod)
{
int u,vf,i;
bool ok;
s.push(nod);
while(!s.empty())
{
u=s.top();
ok=true;
if(v[u].size()!=0)
{
vf=v[u][0];
sterge_muchie(u,vf);
s.push(vf);
}
else
{
s.pop();
sol.push_back(u);
}
}
}
int main()
{
int i,a,b,m;
fin>>n>>m;
while(fin>>a>>b)
{
v[a].push_back(b);
v[b].push_back(a);
}
bool ok=true;
for(i=1;i<=n;i++)
if(v[i].size()%2==1)
ok=false;
dfs(1);
for(i=1;i<=n;i++)
if(!viz[i])
ok=false;
if(ok)
{
euler(1);
for(i=0;i<sol.size()-1;i++)
fout<<sol[i]<<" ";
}
else
fout<<-1;
return 0;
}