Pagini recente » Cod sursa (job #2975221) | Cod sursa (job #909146) | Cod sursa (job #2999292) | Cod sursa (job #2931102) | Cod sursa (job #495101)
Cod sursa(job #495101)
#include <cstdio>
#include <list>
#include <stack>
#include <bitset>
#include <queue>
using namespace std;
int n,m,x,y,nod,i,grad[100005];
list<int> graf[100005];
list<int>::iterator u;
stack<int> s;
queue<int> q;
bitset<100005> viz;
bool k;
void ciclu(int nod)
{
int vecin;
while (grad[nod])
{
s.push(nod);
vecin=graf[nod].front();
graf[nod].pop_front();
--grad[nod];
--grad[vecin];
for (u=graf[vecin].begin();u!=graf[vecin].end();++u)
if (*u==nod)
{
graf[vecin].erase(u);
break;
}
nod=vecin;
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
while (m--)
{
scanf("%d %d",&x,&y);
graf[x].push_back(y);
graf[y].push_back(x);
++grad[x];
++grad[y];
}
k=true;
for (i=1;i<=n;++i)
if (grad[i] & 1)
{
k=false;
break;
}
if (k)
{
q.push(x);
while (!q.empty())
{
for (u=graf[q.front()].begin();u!=graf[q.front()].end();++u)
if (!viz.test(*u))
{
viz.flip(*u);
q.push(*u);
}
q.pop();
}
for (i=1;i<=n;++i)
if (!grad[i] && !viz.test(i))
{
k=false;
break;
}
}
if (!k)
{
printf("-1");
return 0;
}
nod=1;
do
{
printf("%d ",nod);
ciclu(nod);
nod=s.top();
s.pop();
}
while (!s.empty());
return 0;
}