Pagini recente » Cod sursa (job #2683182) | Cod sursa (job #2491102) | Cod sursa (job #130530) | Cod sursa (job #1787308) | Cod sursa (job #2082061)
#include <cstdio>
#include <vector>
#include <stack>
const int nmax=100010;
const int mmax=500010;
using namespace std;
vector <int> G[nmax];
stack <int> ST;
int n,m;
struct
{
int nod1,nod2;
bool sters=false;
}v[mmax];
void citire()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&v[i].nod1,&v[i].nod2);
G[v[i].nod1].push_back(i);
G[v[i].nod2].push_back(i);
}
}
bool gradpar()
{
for(int i=1;i<=n;i++)
{
if(G[i].size()%2==0)
return true;
}
return false;
}
void euler()
{
ST.push(1);
while(!ST.empty())
{
int nod=ST.top();
if(G[nod].size())
{
int vecin=G[nod].back();
G[nod].pop_back();
if(v[vecin].sters==true)
continue;
v[vecin].sters=true;
if(v[vecin].nod1==nod)
{
ST.push(v[vecin].nod2);
}
else
ST.push(v[vecin].nod1);
}
else
{
printf("%d ",ST.top());
ST.pop();
}
}
}
int main()
{
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
citire();
if(gradpar()==false)
{
printf("-1\n");
return 0;
}
euler();
return 0;
}