Pagini recente » Cod sursa (job #2098912) | Cod sursa (job #478145) | Cod sursa (job #1224271) | Cod sursa (job #2066261) | Cod sursa (job #1180732)
#include<fstream>
#include<vector>
#define maxn 100005
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
vector <int> a[maxn];
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 nod){
int i,vecin;
while(a[nod].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();
euler(vecin);
}
nr++;
if(nr<=m) fo<<nod<<" ";
}
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(1);
fi.close();
fo.close();
return 0;
}