Pagini recente » Cod sursa (job #291196) | Cod sursa (job #208740) | Istoria paginii runda/cnrv.1 | Cod sursa (job #2331614) | Cod sursa (job #393506)
Cod sursa(job #393506)
#include<stdio.h>
#include<vector>
#define Nmax 100010
#define Mmax 500010
using namespace std;
int n,m,i,j,a,b,S[Mmax],viz[Nmax],grad[Nmax],k,M[Mmax];
vector< pair <int,int > > V[Nmax];
void dfs(int nod)
{
viz[nod]=1;
int i,N=V[nod].size();
for(i=0;i<N;i++)
if(!viz[V[nod][i].first])
dfs(V[nod][i].first);
}
void euler()
{
int nod;
while(k)
{
nod=S[k];
if(!V[nod].empty())
{
if(!M[V[nod].back().second])
{
S[++k]=V[nod].back().first;
M[V[nod].back().second]=1;
}
V[nod].pop_back();
}
else printf("%d ",S[k--]);
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
grad[a]++;
grad[b]++;
V[a].push_back(make_pair(b,i));
V[b].push_back(make_pair(a,i));
}
dfs(1);
for(i=1;i<=n;i++)
{
if(grad[i]&1) {printf("-1");return 0;}
if(!viz[i]) {printf("-1");return 0;}
}
S[++k]=1;
euler();
return 0;
}