Pagini recente » Cod sursa (job #136883) | Cod sursa (job #491258) | Cod sursa (job #58056) | Cod sursa (job #1237656) | Cod sursa (job #2066912)
#include<iostream>
#include<fstream>
#include<vector>
#include<stack>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n, m, i, j, ok, x, y, nod, vecin;
int d[100005], viz[100005], f[500005];
vector< pair<int, int > > v[100005];
stack<int> s;
void citire()
{
int x, y;
in >> n >> m;
for(i = 1; i <= m; i++){
in >> x >> y;
d[x]++;
d[y]++;
v[x].push_back( make_pair(y, i) );
v[y].push_back( make_pair(x, i) );
}
}
void dfs(int nod)
{
viz[nod] = 1;
for(int i = 0; i < v[nod].size(); i++)
{
int vecin = v[nod][i].first;
if(viz[vecin] == 0)
dfs(vecin);
}
}
int main()
{
citire();
for(i = 1; i <= n; i++){
if(d[i] != 0)
{
x = i;
dfs(i);
break;
}
}
for(i = 1; i <= n; i++)
{
if(d[i] != 0)
{
if(viz[i] == 0 || d[i] % 2 == 1)
{
out<<"-1\n";
return 0;
}
}
}
s.push(x);
while(!s.empty())
{
nod = s.top();
if(d[nod] == 0)
{
if(ok == 0)
ok = 1;
else
out<< nod <<" ";
s.pop();
}
else
{
i = v[nod].size() - 1;
while(f[v[nod][i].second] == 1)
{
v[nod].pop_back();
i--;
}
vecin = v[nod][i].first;
d[nod]--;
d[vecin]--;
f[v[nod][i].second] = 1;
v[nod].pop_back();
s.push(vecin);
}
}
return 0;
}