Pagini recente » Cod sursa (job #1959828) | Cod sursa (job #1919362) | Cod sursa (job #712272) | Cod sursa (job #2550654) | Cod sursa (job #1882614)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> G[100005];
stack <int> s;
int n,m,ttl;
bool viz[100005];
bool dfs1(int poz)
{
vector <int>::iterator it;
viz[poz]=1;
ttl++;
if(G[poz].size()%2==1)
return 0;
for(it=G[poz].begin();it!=G[poz].end();it++)
if(!viz[*it])
{
bool ok=dfs1(*it);
if(ok==0)
return 0;
}
return 1;
}
void dfs(int i)
{
vector <int>::iterator it,it1;
while(m)
{
m--;
i=s.top();
it=G[i].begin();
s.push(*it);
int x=*it;
G[i].erase(it);
for(it1=G[x].begin();it1!=G[x].end();it1++)
if(*it1==i)
{
G[x].erase(it1);
break;
}
while(s.size()>1&&G[s.top()].size()==0)
{
fout<<s.top()<<" ";
s.pop();
}
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
bool ok=dfs1(1);
if(ttl<n||!ok)
{
fout<<"-1";
return 0;
}
s.push(1);
dfs(1);
return 0;
}