Pagini recente » Cod sursa (job #3224380) | Cod sursa (job #1880855) | Cod sursa (job #1977165) | Cod sursa (job #2892107) | Cod sursa (job #2173692)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define nmax 100005
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<pair<int,int>>Q[nmax];
vector<int>stk,result;
int n,m,grad[nmax];
bool instk[nmax];
void read()
{
f>>n>>m;
for (int i=1; i<=m; ++i)
{
int e1,e2;
f>>e1>>e2;
Q[e1].push_back({e2,i});
Q[e2].push_back({e1,i});
++grad[e1];
++grad[e2];
}
}
void euler(int nod)
{
while (Q[nod].size()&&instk[Q[nod].back().second])
{
Q[nod].pop_back();
}
if (Q[nod].empty())
return;
instk[Q[nod].back().second]=true;
stk.push_back(Q[nod].back().first);
euler(Q[nod].back().first);
}
void solve()
{
for (int i=1; i<=n; ++i)
if (grad[i]&1)
{
g<<-1;
return;
}
euler(1);
reverse(stk.begin(),stk.end());
for (auto w:stk)
g<<w<<' ';
}
int main()
{
read();
solve();
return 0;
}