Pagini recente » Cod sursa (job #912487) | Cod sursa (job #766280) | Cod sursa (job #2961046) | Cod sursa (job #3281247) | Cod sursa (job #1263976)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#define N 100004
using namespace std;
vector <int> a[N];
queue <int> q;
stack <int> st;
int gr[N],v[N];
int n,m,top;
int poz;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void R()
{
fin>>n>>m;
int i,x,y;
for(i=1; i<=m; i++)
{
fin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
gr[x]++;
gr[y]++;
}
}
void DFS(int k)
{
v[k]=1;
for(int i=0; i<a[k].size(); i++)
if(!v[a[k][i]])
DFS(a[k][i]);
}
bool IsConex()
{
int i;
DFS(1);
for(i=1; i<=n; i++)
if(v[i]==0) return 0;
return 1;
}
bool Grad()
{
int i;
for(i=1; i<=n; i++)
if(gr[i]%2==1) return 0;
return 1;
}
void Euler()
{
int i,j,k;
top=1;
st.push(1);
while(!st.empty())
{
k=st.top();
while(a[k].size()>0)
{
i=a[k][0];
swap(a[k][0],a[k][a[k].size()-1]);
a[k].pop_back();
for(j=0; j<a[i].size() && a[i][j]!=k; j++) ;
swap(a[i][j],a[i][a[i].size()-1]);
a[i].pop_back();
st.push(i);
k=st.top();
}
//if(k==2) cout<<"Dsadsa";
if(a[k].size()<=0)
st.pop();
q.push(k);
}
}
int main()
{
R();
int x;
if(IsConex() && Grad())
{
Euler();
int i;
while(!q.empty())
{
x=q.front();
fout<<x<<" ";
q.pop();
}
}
else
cout<<"-1";
return 0;
}