Pagini recente » Cod sursa (job #2294555) | Cod sursa (job #2600952) | Cod sursa (job #2860359) | Cod sursa (job #3178117) | Cod sursa (job #2767667)
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
int n, m, a, b;
vector<int> ans;
vector<pair<int,int>> g[100001];
vector<int> stack;
int grad[100001], use[500001];
void dfs()
{
/*for (auto i : g[nod])
{
if (use[i.second]) continue;
use[i.second] = 1;
dfs(i.first);
ans.push_back(i.first);
}*/
stack.push_back(1);
while (!stack.empty())
{
int nod = stack.back();
if (g[nod].empty())
{
stack.pop_back();
ans.push_back(nod);
continue;
}
auto vec = g[nod].back();
g[nod].pop_back();
if (use[vec.second]) continue;
use[vec.second] = 1;
stack.push_back(vec.first);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
cin >> a >> b;
g[a].push_back({ b, i });
g[b].push_back({ a, i });
grad[a]++;
grad[b]++;
}
for (int i = 1; i <= n; i++)
{
if (grad[i] % 2)
{
cout << "-1\n";
return 0;
}
}
ans.reserve(m);
dfs();
ans.pop_back();
for (auto i : ans)
cout << i << ' ';
return 0;
}