Pagini recente » Cod sursa (job #2061072) | Cod sursa (job #2106896) | Cod sursa (job #936215) | Cod sursa (job #589967) | Cod sursa (job #692480)
Cod sursa(job #692480)
#include<stdio.h>
#include<vector>
#define dim1 500001
#define dim2 100001
using namespace std;
FILE*f=fopen("ciclueuler.in","r");
FILE*g=fopen("ciclueuler.out","w");
int stv[dim1],n,m,r[dim2],x,y;
char viz[dim1];
vector <pair<int,int> > v[dim2],aux;
void dfs(int nod)
{
viz[nod]=1;
for(int i=0;i<v[nod].size();++i)
if(!viz[v[nod][i].first])
dfs(v[nod][i].first);
}
void euler()
{
int k=1;
stv[1]=1;
aux.push_back (make_pair(0,0));
while(k)
{
if(v[stv[k]].empty())
fprintf(g,"%d ",stv[k--]);
else
{
aux[0]=v[stv[k]][v[stv[k]].size()-1];
if(viz[aux[0].second])
v[stv[k]].pop_back();
else
{
stv[++k]=aux[0].first;
viz[aux[0].second]=1;
}
}
}
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d%d",&x,&y);
v[x].push_back (make_pair(y,i));
v[y].push_back (make_pair(x,i));
++r[x];
++r[y];
}
dfs(1);
int ok=0;
for(int i=1;i<=n;++i)
if(r[i]%2||(!viz[i]&&r[i]))
{
ok=1;
break;
}
if(ok)
fprintf(g,"-1");
else
{
for(int i=1;i<=n;++i)
viz[i]=0;
euler();
}
fclose(g);
fclose(f);
return 0;
}