Pagini recente » Cod sursa (job #1591305) | Cod sursa (job #1817295) | Cod sursa (job #982860) | Cod sursa (job #2549764) | Cod sursa (job #1890885)
#include <fstream>
#include <stack>
#include <vector>
#include <cstdlib>
using namespace std;
#define f first
#define s second
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int a,b,c,n,m,x,y,ok,use[100010],muchii[500010],grad[100010],nrnoduri,i,top;
vector < pair<int,int> > G[100010];
vector < pair<int,int> > ::iterator stick[ 100010 ];
int stk[ 1000010 ],ans[1000010];
void DF( int nod )
{
++nrnoduri;
if( grad[ nod ] % 2 )
{
fout<<-1;
exit( 0 );
}
use[ nod ] = 1;
for( auto it : G[ nod ] )
if( !use[ it.f ] )
DF( it.f );
}
int main()
{
fin>>n>>m;
for( i = 1 ; i <= m ; i++ )
{
fin>>x>>y;
G[ x ].push_back( {y,i} );
G[ y ].push_back( {x,i} );
grad[ x ]++;
grad[ y ]++;
}
DF( 1 );
if( nrnoduri < n )
{
fout<<-1;
return 0;
}
for( i = 0 ; i <= n ; i++ )
{
stick[ i ] = G[ i ].begin();
}
stk[ 1 ] = 1;
top = 1;
while( top >= 1 )
{
while( stick[ stk[ top ] ] == G[ stk[ top ] ].end() )
{
fout<<stk[ top ]<<' ';
--top;
}
for( ; stick[ stk[ top ] ] != G[ stk[ top ] ].end() ; stick[ stk[ top ] ]++ )
{
if( muchii[ ( *stick[ stk[ top ] ] ).s ] == 1 )
continue;
muchii[ ( *stick[ stk[ top ] ] ).s ] = 1;
stk[ top + 1 ] = ( *stick[ stk[ top ] ] ).f;
top++;
break;
}
}
return 0;
}