Pagini recente » Cod sursa (job #3155394) | Cod sursa (job #3174861) | Cod sursa (job #935750) | Cod sursa (job #25310) | Cod sursa (job #797503)
Cod sursa(job #797503)
#include <cstdio>
#include <vector>
using namespace std;
#define pb push_back
#define max_n 100005
#define max_m 500005
#define fi first
#define se second
pair<int,int> Mu[max_m];
vector <int> T[max_n];
bool V[max_m];
int n,m,i,j,a,b,ok;
int Sta;
int Stiva[max_n+max_m];
int It[max_n];
int aux_nod,aux_it;
int Rez[max_m],rez;
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 );
Mu[i].fi=a;
Mu[i].se=b;
T[a].pb(i);
T[b].pb(i);
}
for ( i=1; i<=n; i++ )
if ( T[i].size()&1 )
{
printf("-1\n");
return 0;
}
Stiva [Sta]=1;
while ( Sta >=0 )
{
#define it It[nod]
#define nod Stiva[Sta]
ok=1;
for ( ; it<T[nod].size(); )
{
aux_it=it;
aux_nod=nod;
if ( !V[ T[nod][it] ] )
{
V[ T[nod][it] ]=1;
it++;
Sta++;
Stiva [ Sta ]= Mu[ T[aux_nod][aux_it] ].se + Mu[ T[aux_nod][aux_it] ].fi - aux_nod;
ok=0;
break;
}
else{
it++;
}
}
if ( ok )
{
Rez[++rez]=nod;
Sta--;
}
}
for ( i=1; i<rez; i++ )
printf("%d ", Rez[i] );
return 0;
}