Pagini recente » Cod sursa (job #2625319) | Cod sursa (job #2470764) | Cod sursa (job #489928) | Cod sursa (job #2055973) | Cod sursa (job #486413)
Cod sursa(job #486413)
// infoarena: problema/ciclueuler //
#include <fstream>
#include <vector>
#define MAXN 100010
#define MAXM 500010
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector<int> g[MAXN];
int i,j,n,m,a,b;
struct stack_item {int nod, next;};
stack_item empty, c;
vector<stack_item> stack;
vector<int> sol;
int main()
{
in>>n>>m;
for(i=1; i<=m; i++)
{
in>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
for(i=1; i<=n; i++)
if(g[i].size() % 2)
{out<<-1; return 0;}
stack.push_back(empty);
stack.back().nod = 1;
while(!stack.empty())
{
c = stack.back();
while(!g[c.nod].empty() && g[c.nod].back() == -1)
g[c.nod].pop_back();
if(!g[c.nod].empty())
{
c.next = g[c.nod].back();
g[c.nod].pop_back();
for(i=0; i<g[c.next].size(); ++ i)
if(g[c.next][i] == c.nod)
{g[c.next][i] = -1; break;}
stack.push_back(empty);
stack.back().nod = c.next;
}
else
{
sol.push_back(c.nod);
stack.pop_back();
}
}
if(sol.size() != m+1)
{
out<<-1;
return 0;
}
for(i=0; i<sol.size() - 1; i ++)
{
out<<sol[i]<<' ';
}
return 0;
}