Pagini recente » Cod sursa (job #2832380) | Cod sursa (job #1162122) | Cod sursa (job #1426805) | Cod sursa (job #1852859) | Cod sursa (job #2869427)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define MAXN 100001
#define MAXM 500001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m,x,y,to[MAXM],nr,from[MAXM],muchiesused[MAXM],afis[MAXM*2];
vector <vector <int>> v(MAXN);
void dfs (int start)
{
stack <int> st;
st.push(start);
while (!st.empty())
{
int a=st.top();
if (!v[a].empty())
{
//if (viz[a]==0)
//{
//viz[a]=1;
int nextnod=v[a].back(),next=0;
v[a].pop_back();
if (muchiesused[nextnod]==0)
{
muchiesused[nextnod]=1;
if (from[nextnod]==a)
{
next=to[nextnod];
}
else next=from[nextnod];
st.push(next);
}
//}
}
else
{
st.pop();
nr++;
afis[nr]=a;
}
}
}
int main()
{
f>>n>>m;
for (int i=1; i<=m; i++)
{
f>>x>>y;
v[x].push_back(i);
if (x!=y)
{
v[y].push_back(i);
}
from[i]=x;
to[i]=y;
}
dfs(1);
// cout<<nr;
if (afis[1]!=afis[nr])
g<<-1;
else
{
for (int i=1; i<nr; i++)
g<<afis[i]<<' ';
}
return 0;
}