Pagini recente » Cod sursa (job #1848542) | Cod sursa (job #1360351) | Cod sursa (job #729792) | Cod sursa (job #2168965) | Cod sursa (job #1361121)
#include <vector>
#include <fstream>
#include <algorithm>
#include <stack>
#define x first
#define y second
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector<int> v[100001];
pair<int,int> mu[500001];
int i,j,n,m,it[100001],mark[500001],deg[100001],fv[100001],x,y;
int getnode(int muchie,int in)
{
return (mu[muchie].x+mu[muchie].y-in);
}
void dfs(int nod)
{
++fv[nod];
for(int i=0;i<v[nod].size();++i)
{
int newnode=getnode(v[nod][i],nod);
if (!fv[newnode])
dfs(newnode);
}
}
void iseuler()
{
for (int i=1;i<=n;++i)
if ((deg[i]&1)||fv[i]==0)
{
g<<-1;
exit(0);
}
}
stack<int> S;
vector<int> rasp;
int main()
{
f>>n>>m;
for (i=1;i<=m;++i)
{
f>>x>>y;
v[x].push_back(i);
v[y].push_back(i);
mu[i]=make_pair(x,y);
deg[x]++,deg[y]++;
}
dfs(1);
iseuler();
S.push(1);
int now;
while(S.size())
{
int ok=0;
now=S.top();
for (;it[now]<v[now].size();++it[now])
{
if (mark[v[now][it[now]]])continue;
mark[v[now][it[now]]]=1;
S.push(getnode(v[now][it[now]],now));
++it[now];
ok=1;
break;
}
if (!ok)
{
S.pop();
rasp.push_back(now);
}
}
for(i=1;i<rasp.size();++i)
g<<rasp[i]<<" ";
return 0;
}