Pagini recente » Cod sursa (job #698405) | Cod sursa (job #2311147) | Cod sursa (job #3182987) | Cod sursa (job #3282047) | Cod sursa (job #1880317)
#include <fstream>
#include <bitset>
#include <vector>
#define Nmax 100020
#define Mmax 500020
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;
edge M[Mmax];
void ReadInput()
{
f>>n>>m;
for (int i=1; i<=m; ++i)
{
f>>x>>y;
M[i]=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;
}