Pagini recente » Cod sursa (job #2818445) | Cod sursa (job #422612) | Cod sursa (job #2460092) | Cod sursa (job #2271635) | Cod sursa (job #2818047)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int N,M,i,x,y;
vector<int> G[100001],ANS;
pair<int,int> Edge[500001];
int visited[5000001];
void ciclueuler()
{
int x, edge = 1;
stack<int> Stack;
Stack.push(1);
while (!Stack.empty())
{
edge=Stack.top();
if (G[edge].empty())
{
ANS.push_back(edge);
Stack.pop();
}
else
{
x=G[edge].back();
G[edge].pop_back();
if (visited[x] == 0)
{
visited[x] = 1;
Stack.push(Edge[x].first^Edge[x].second^edge);
}
}
}
}
int main()
{
in>>N>>M;
for (int i=1; i<=M; i++)
{
in>>x>>y;
G[x].push_back(i);
G[y].push_back(i);
Edge[i] = make_pair(x,y);
}
for (int i=1; i<=N; i++)
if (G[i].size()%2 == 1)
{
out<<"-1\n";
return 0;
}
ciclueuler();
ANS.pop_back();
for (i = 0; i < ANS.size(); i++)
out<<ANS[i]<<' ';
return 0;
}