Pagini recente » Cod sursa (job #2716086) | Cod sursa (job #296846) | Cod sursa (job #1293890) | Cod sursa (job #1569776) | Cod sursa (job #1380166)
#include <fstream>
#include <bitset>
#include <vector>
using namespace std;
#define Nmax 100009
#define Mmax 500009
ifstream is("cicluleuler.in");
ofstream os("cicluleuler.out");
struct Edge{
int x, y;
};
int n, m;
vector<vector<int>> G;
vector<int> Cycle;
Edge E[Mmax];
bitset <Mmax> viz;
int IsEulerian()
{
for(int i = 1; i<= n; ++i)
if(G[i].size() & 1) return 0;
return 1;
}
inline void Dfs(int node)
{
while(G[node].size())
{
if(viz[G[node].back()])
{
G[node].pop_back();
continue;
}
viz[G[node].back()] = 1;
Dfs(E[G[node].back()].x + E[G[node].back()].y - node);
}
Cycle.push_back(node);
}
int main()
{
is >> n >> m;
int x, y;
G = vector<vector<int>>(n+1);
for(int i = 1;i <= m; ++i)
{
is >> x >> y;
G[x].push_back(i);
G[y].push_back(i);
E[i] = {x, y};
}
if(IsEulerian())
{
Dfs(1);
for(int i = 0; i < Cycle.size() - 1; ++i)
{
os << Cycle[i] << ' ';
}
os << '\n';
}
else
os << -1 << '\n';
is.close();
os.close();
return 0;
}