Pagini recente » Cod sursa (job #2105950) | Cod sursa (job #534) | Cod sursa (job #889494) | Cod sursa (job #363804) | Cod sursa (job #2509347)
#define MMAX 500005
#define NMAX 100005
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct muchie{
int x, y;
bool viz = false;
}mu[MMAX];
int n, m;
int gr[NMAX], viz[NMAX], conex, nrg0;
vector<int> graph[NMAX];
stack<int> ciclu;
void read()
{
f>>n>>m;
for(int i=1; i<=m; ++i)
{
f>>mu[i].x>>mu[i].y;
graph[mu[i].x].push_back(i);
graph[mu[i].y].push_back(i);
gr[mu[i].x] ++;
gr[mu[i].y] ++;
}
}
bool grPar()
{
bool ok = 1;
for(int i=1; i<=n; ++i)
{
if(gr[i]%2 == 1)
ok = 0;
if(gr[i] == 0)
nrg0 ++;
}
return ok;
}
void parc(int nod)
{
viz[nod] = 1;
conex++;
for(auto &v:graph[nod])
{
int capat = (mu[v].x == nod)?mu[v].y:mu[v].x;
if(viz[capat] == 0)
parc(capat);
}
}
void solve()
{
parc(1);
if(!(grPar() == true && conex + nrg0 == n))
{
g<<"-1";
return;
}
g<<1<<" ";
ciclu.push(1);
while(!ciclu.empty())
{
int from = ciclu.top();
if(!graph[from].empty())
{
int last = graph[from].back();
graph[from].pop_back();
if(mu[last].viz == false)
{
mu[last].viz = true;
int capat = (mu[last].x == from)?mu[last].y:mu[last].x;
ciclu.push(capat);
}
}
else{
if(from != 1)
g<<from<<" ";
ciclu.pop();
}
}
}
int main()
{
read();
solve();
return 0;
}