Pagini recente » Cod sursa (job #1307075) | Cod sursa (job #1911933) | Cod sursa (job #1797219) | Cod sursa (job #2822425) | Cod sursa (job #1877196)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
#define MAXN 100010
vector <int> G[MAXN],ans;
stack <int> st;
int viz[MAXN],n,m,gr[MAXN],x,y,nrimp,w,urm;
void dfs(int nod)
{
viz[nod]=1;
for(auto it:G[nod])
if(!viz[it])
dfs(it);
}
int main()
{
f>>n>>m;
while(m--)
{
f>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
++gr[x];
++gr[y];
}
for(int i=1; i<=n; ++i)
{
if(gr[i]%2)
++nrimp;
if(nrimp>2)
{
g<<-1;
return 0;
}
}
dfs(1);
for(int i=1; i<=n; i++)
if(!viz[i]&&gr[i]>0)
{
g<<-1;
return 0;
}
st.push(1);
while(st.size())
{
w=st.top();
if(!G[w].empty())
{
urm=G[w][G[w].size()-1];
G[w].pop_back();
st.push(urm);
for(auto &it:G[urm])
if(it==w)
{
swap(it,G[urm][G[urm].size()-1]);
G[urm].pop_back();
break;
}
}
else
{
ans.push_back(w);
st.pop();
}
}
for(int i=0;i<ans.size()-1;i++)
g<<ans[i]<<' ';
return 0;
}