Pagini recente » Cod sursa (job #311647) | Cod sursa (job #2155916) | Cod sursa (job #1325615) | Cod sursa (job #3183063) | Cod sursa (job #3260378)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 1e5 + 1,
MMAX = 5e5 + 1;
int n, m, st[MMAX], dr[MMAX], ap[MMAX];
bool viz[MMAX];
vector<int> sol, G[NMAX];
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
void citire()
{
fin >> n >> m;
for(int i = 1; i <= m; ++i)
{
fin >> st[i] >> dr[i];
G[st[i]].push_back(i);
G[dr[i]].push_back(i);
}
}
bool esteEulerian()
{
for(int i = 1; i <= n; ++i)
if(G[i].size() & 1) return 0;
return 1;
}
void dfs(int k)
{
while(ap[k] < G[k].size())
{
int i = G[k][ap[k]++];
if(!viz[i])
{
viz[i] = 1;
dfs(st[i] + dr[i] - k);
}
}
sol.push_back(k);
}
void solutie()
{
if(!esteEulerian())
{
fout << "-1";
return;
}
dfs(1);
for(const auto &x : sol)
fout << x << ' ';
}
int main()
{
citire();
solutie();
return 0;
}