Pagini recente » Cod sursa (job #910646) | Cod sursa (job #1182729) | Cod sursa (job #1491835) | Cod sursa (job #475959) | Cod sursa (job #1180738)
#include<fstream>
#include<vector>
#include<stack>
#define maxn 100005
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
vector <int> a[maxn];
stack <int> st;
int i,n,m,x,y,nr;
bool viz[maxn];
bool par(int n){
int i;
for(i=1;i<=n;i++)
if(a[i].size()%2) return 0;
return 1;
}
void dfs(int nod){
int i;
viz[nod]=1;
for(i=0;i<(int)a[nod].size();i++)
if(!viz[a[nod][i]]) dfs(a[nod][i]);
}
bool conex(int n){
int i;
dfs(1);
for(i=1;i<=n;i++)
if(!viz[i]) return 0;
return 1;
}
void euler(){
int i,nod,vecin;
st.push(1);
while(st.size())
{
nod=st.top();
if(a[st.top()].size()){
vecin=a[nod].back();
a[nod].pop_back();
i=(int)a[vecin].size()-1;
while(i>=0 && a[vecin][i]!=nod) i--;
a[vecin][i]=a[vecin].back();
a[vecin].pop_back();
st.push(vecin);
}
else{
nr++;
if(nr<=m) fo<<nod<<" ";
st.pop();
}
}
}
int main(){
fi>>n>>m;
for(i=1;i<=m;i++){
fi>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
if((!conex(n)) || (!par(n))) fo<<"-1";
else euler();
fi.close();
fo.close();
return 0;
}