Pagini recente » Cod sursa (job #1281184) | Cod sursa (job #1784876) | Cod sursa (job #1201421) | Cod sursa (job #1504125) | Cod sursa (job #1025495)
#include <fstream>
#include <vector>
#define nmax 100000+5
#define mmax 400000+5
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct muchie
{
int dest;
int indx;
};
bool mask[mmax];
int n, m;
int grad[nmax];
vector<muchie> u[nmax];
vector<int> s;
int grad_par()
{
FOR(i, 1, n)
if (grad[i] % 2 == 1)
return 0;
return 1;
}
int ciclu(int i, int muchii_ramase)
{
if (muchii_ramase == 0)
return 1;
s.push_back(i);
if (!u[i].empty())
FOR(j, 0, u[i].size()-1)
if (mask[u[i][j].indx])
{
mask[u[i][j].indx] = 0;
int x = ciclu(u[i][j].dest, muchii_ramase-1);
if (x)
return 1;
mask[u[i][j].indx] = 1;
}
s.pop_back();
return 0;
}
int main()
{
int x, y;
int indx = 0;
muchie a, b;
fin >> n >> m;
FOR(i, 1, m)
{
fin >> x >> y;
a.dest = y;
a.indx = indx;
u[x].push_back(a);
b.dest = x;
b.indx = indx;
u[y].push_back(b);
grad[x]++;
grad[y]++;
mask[indx] = 1;
indx++;
}
if (grad_par() && ciclu(1, m))
FOR(i, 0, m-1)
fout << s[i] << ' ';
else
fout << "-1 ";
fout << '\n';
return 0;
}