Pagini recente » Cod sursa (job #1936633) | Cod sursa (job #82487) | Cod sursa (job #1575464) | Cod sursa (job #84766) | Cod sursa (job #1604491)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> Graf[100010],ans;
int n,m,i,j,k,INT[100010],EXT[100010],x,y,use[100010],it;
void euler( int nod )
{
vector< int >::iterator it;
int k;
while( Graf[ nod ].size() )
{
it = Graf[ nod ].begin();
k = *it;
Graf[ nod ].erase( it );
for( vector<int>::iterator itB = Graf[ k ].begin() ; itB != Graf[ k ].end() ; itB++ )
{
if( *itB == nod )
{
Graf[ k ].erase( itB );
break;
}
}
euler( k );
}
ans.push_back( nod );
}
void dfs( int nod )
{
use[ nod ] = 1;
for( auto it : Graf[ nod ] )
if( !use[ it ] )
dfs( it );
}
int main()
{
fin>>n>>m;
for( i = 1 ; i <= m ; i++ )
{
fin>>x>>y;
Graf[ x ].push_back( y );
Graf[ y ].push_back( x );
if( x != y )
{
EXT[ x ]++;
INT[ y ]++;
}
}
dfs( 1 );
for( i = 1; i <= n ; i++ )
if( ( INT[ i ] + EXT[ i ] ) % 2 || !use[ i ] )
{
fout<<-1;
return 0;
}
euler( 1 );
for( vector< int >::iterator it = ans.begin() ; it != ans.end() ; it++ )
{
fout<<(*it)<<' ';
}
return 0;
}