Pagini recente » Cod sursa (job #1702863) | Cod sursa (job #308732) | Cod sursa (job #308633) | Cod sursa (job #1168005) | Cod sursa (job #3333618)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n;
vector<pair<int, int>> graf[100005];
bitset<500005> ap;
stack<int> stiva;
vector<int> ciclu;
void euler()
{
stiva.push(1);
while(!stiva.empty())
{
int x = stiva.top();
if(!graf[x].empty())
{
pair<int, int> y = graf[x].back();
graf[x].pop_back();
if(!ap[y.second])
{
ap[y.second]=1;
stiva.push(y.first);
}
}
else
{
stiva.pop();
ciclu.push_back(x);
}
}
}
int main()
{
int m;
fin >> n >> m;
for(int i=1; i <= m; i++)
{
int a, b;
fin >> a >> b;
graf[a].push_back({b, i});
graf[b].push_back({a, i});
}
for(int i=1; i <= n; i++)
{
if(graf[i].size()%2==1)
{
fout << -1;
return 0;
}
}
euler();
reverse(ciclu.begin(), ciclu.end());
ciclu.pop_back();
for(auto I : ciclu)
fout << I << " ";
return 0;
}