Pagini recente » Cod sursa (job #114729) | Cod sursa (job #3159892) | Cod sursa (job #353438) | Cod sursa (job #1269914) | Cod sursa (job #2142133)
#include <cstdio>
#include <vector>
#include <stack>
#include <bitset>
using namespace std;
const int MMAX = 500005;
const int NMAX = 100005;
int n,m;
bitset <MMAX> viz;
stack <int> stiva;
vector <int> graf[NMAX];
struct muchie{
int a,b;
}listamuchi[MMAX];
void algoritm()
{
stiva.push(1);
while(!stiva.empty())
{
int nod = stiva.top();
if(!graf[nod].empty())
{
int vecin = graf[nod].back();
graf[nod].pop_back();
if(viz[vecin] == true)
continue;
viz[vecin] = true;
if(listamuchi[vecin].a == nod)
{
stiva.push(listamuchi[vecin].b);
}
else
{
stiva.push(listamuchi[vecin].a);
}
}
else
{
printf("%d ",nod);
stiva.pop();
}
}
}
void read()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
int a,b;
for(int i = 0 ; i < m ; i++)
{
scanf("%d %d",&a,&b);
listamuchi[i].a = a;
listamuchi[i].b = b;
graf[a].push_back(i);
graf[b].push_back(i);
}
for(int i = 0 ; i< n ; i++)
if(graf[i].size()%2 == 1)
{
printf("-1");
return;
}
algoritm();
}
int main()
{
read();
return 0;
}