Pagini recente » Cod sursa (job #1320221) | Cod sursa (job #351361) | Cod sursa (job #1993037) | Cod sursa (job #2929854) | Cod sursa (job #431501)
Cod sursa(job #431501)
#include<stdio.h>
#include<stdlib.h>
#include<list>
#include<stack>
#include<queue>
#include<bitset>
using namespace std;
#define N 100010
#define pb push_back
int n,m;
int deg[N];
bitset<N> viz;
list<int> a[N],r;
queue<int> q;
stack<int> st;
inline void citire()
{
scanf("%d%d",&n,&m);
int x,y;
for(int i=0; i<m; ++i)
{
scanf("%d%d",&x,&y);
++deg[x];
++deg[y];
a[x].pb(y);
a[y].pb(x);
}
}
inline void bfs()
{
viz[1]=1;
q.push(1);
while(!q.empty())
{
int nod=q.front();
q.pop();
for(list<int>::iterator it=a[nod].begin(); it!=a[nod].end(); ++it)
{
if(viz[*it])
continue;
viz[*it]=1;
q.push(*it);
}
}
}
inline void sansa()
{
for(int i=1; i<=n; ++i)
{
if(deg[i]&1)
{
fputs("-1\n",stdout);
exit(0);
}
}
bfs();
for(int i=1; i<=n; ++i)
{
if(!viz[i])
{
fputs("-1\n",stdout);
exit(0);
}
}
}
inline void sterge(int nod,int nod1)
{
a[nod].pop_front();
for(list<int>::iterator it=a[nod1].begin(); it!=a[nod1].end(); ++it)
{
if(*it==nod)
{
a[nod1].erase(it);
return;
}
}
}
inline void euler(int nod)
{
while(!a[nod].empty())
{
int nod1=a[nod].front();
sterge(nod,nod1);
st.push(nod);
nod=nod1;
}
}
inline void rezolva()
{
int nod=1;
do
{
euler(nod);
nod=st.top();
st.pop();
r.pb(nod);
}while(!st.empty());
}
inline void scrie()
{
printf("%d",r.front());
list<int>::iterator it=r.begin();
for(++it; it!=r.end(); ++it)
printf(" %d",*it);
fputc('\n',stdout);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
sansa();
rezolva();
scrie();
return 0;
}