Pagini recente » Cod sursa (job #1282317) | Cod sursa (job #2746834) | Cod sursa (job #2021622) | Cod sursa (job #677537) | Cod sursa (job #1361519)
#include<fstream>
#include<vector>
#include<stack>
#include<bitset>
using namespace std;
#define NMAX 100005
#define MMAX 500005
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector < pair <int,int> > v[NMAX];
vector < pair <int,int> >::reverse_iterator it;
stack <int> st;
bitset <MMAX> viz;
bitset <NMAX> L;
int n,m,x,y,D[NMAX];
bool ok;
void dfs(int nod)
{
int i;
L[nod]=1;
for (i=0;i<v[nod].size();++i)
if (!L[v[nod][i].first])
dfs(v[nod][i].first);
}
int main()
{
int i;
fin>>n>>m;
for (i=1;i<=m;++i)
{
fin>>x>>y;
v[x].push_back(make_pair(y,i));
v[y].push_back(make_pair(x,i));
++D[x], ++D[y];
}
dfs(1);
for (i=1;i<=n;++i)
if (!L[i] || D[i]&1)
{
fout<<"-1\n";
return 0;
}
st.push(1);
while (!st.empty())
{
x=st.top();
for (it=v[x].rbegin();it!=v[x].rend();++it)
if (viz[it->second])
v[x].pop_back();
else
break;
if (it!=v[x].rend())
{
viz[it->second]=1;
st.push(it->first);
v[x].pop_back();
}
else
{
if (ok)
fout<<x<<" ";
else
ok=true;
st.pop();
}
}
fout<<"\n";
return 0;
}