Pagini recente » Cod sursa (job #1281260) | Cod sursa (job #2910018) | Cod sursa (job #1109845) | Cod sursa (job #526879) | Cod sursa (job #1936446)
#include<fstream>
#include<stack>
#include<bitset>
#include<vector>
#define DIM 100005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int g[DIM], n, m, s, ok, x, y;
int f[DIM * 5];
int w[DIM];
vector< pair<int,int> > v[DIM];
stack<int> st;
void dfs( int nod ){
w[nod] = 1;
for( int i = 0; i < v[nod].size(); i++ ){
int vecin = v[nod][i].first;
if( w[vecin] == 0 ){
dfs( vecin );
}
}
return;
}
int main(){
fin >> n >> m;
for( int i = 1; i <= m; i++ ){
fin >> x >> y;
g[x]++;
g[y]++;
v[x].push_back( make_pair( y, i ) );
v[y].push_back( make_pair( x, i ) );
}
for( int i = 1; i <= n; i++ ){
if( g[i] != 0 ){
dfs( i );
break;
}
}
for( int i = 1; i <= n; i++ ){
if( g[i] % 2 == 1 ){
fout << "-1\n";
return 0;
}
if( g[i] != 0 && w[i] == 0 ){
fout << "-1\n";
return 0;
}
s = i;
}
st.push( s );
ok = 1;
while( !st.empty() ){
int nod = st.top();
if( g[nod] == 0 ){
if( ok == 0 ){
fout << nod << " ";
}
ok = 0;
st.pop();
continue;
}
while( !v[nod].empty() && f[ v[nod].back().second ] == 1 ){
v[nod].pop_back();
}
f[ v[nod].back().second ] = 1;
int vecin = v[nod].back().first;
g[nod]--;
g[vecin]--;
st.push( vecin );
}
return 0;
}