Pagini recente » Cod sursa (job #2812197) | Cod sursa (job #2254503) | Cod sursa (job #2463549) | Cod sursa (job #1983538) | Cod sursa (job #690541)
Cod sursa(job #690541)
#include<fstream>
#include<bitset>
#include<vector>
#define dim 500002
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,Grad[dim],i,x,y,vc,V[dim];
vector<pair <int,int> >L[dim];
bool False;
bitset<dim>Mark;
bitset<dim>viz;
void euler(int nod){
int nd;
int k=0;
V[++k]=nod;
for(; k;){
if(L[V[k]].size()==0){
fout<<V[k]<<" ";
--k;
continue;
}
if(Mark[ L[V[k]][L[V[k]].size()-1].second]==1){
L[V[k]].pop_back();
}
else{
++k;
V[k]=L[V[k-1]][L[V[k-1]].size()-1].first;
Mark[ L[V[k-1]][L[V[k-1]].size()-1].second]=1;
}
}
}
void dfs(int nod){
viz[nod]=1;
for(int i=0;i<L[nod].size();++i)
if(!viz[L[nod][i].first])
dfs(L[nod][i].first);
}
int main (){
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y;
L[x].push_back(make_pair(y,i));
L[y].push_back(make_pair(x,i));
Grad[x]++;
Grad[y]++;
}
dfs(1);
False=0;
for(i=1;i<=n;i++)
if(Grad[x]%2 || !viz[x] )
False=1;
if(!False)
euler(1);
else
fout<<"-1\n";
return 0;
}