Pagini recente » Cod sursa (job #1878264) | Cod sursa (job #2200350) | Cod sursa (job #1845508) | Cod sursa (job #1133731) | Cod sursa (job #1880313)
#include <fstream>
#include <bitset>
#include <vector>
#define Nmax 100006
#define Mmax 500008
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
typedef pair <int,int> edge;
int n,m,x,y;
bitset <Mmax> viz;
bitset <Nmax> used;
vector <int> cicle;
vector <int> G[Nmax];
vector <edge> M;
void ReadInput()
{
f>>n>>m;
for (int i=0; i<m; ++i)
{
f>>x>>y;
M.push_back(edge(x,y));
G[x].push_back(i);
G[y].push_back(i);
}
}
void Dfs(int node)
{
used[node]=1;
for (auto i : G[node])
if (!viz[i])
{
viz[i]=1;
Dfs(M[i].first+M[i].second-node);
}
cicle.push_back(node);
}
bool AdmiteCiclu()
{
for (int i=1; i<=n; ++i)
if (G[i].size()%2==1) return 0;
return 1;
}
void Solve()
{
if (!AdmiteCiclu())
{
g<<-1<<'\n';
return;
}
Dfs(1);
for (int i=1; i<=n; ++i)
if (!used[i])
{
g<<-1<<'\n';
return;
}
for (auto x : cicle) g<<x<<' ';
g<<'\n';
}
int main()
{
ReadInput();
Solve();
f.close();
g.close();
return 0;
}