Pagini recente » Cod sursa (job #2414184) | Istoria paginii winter-challenge-2008/runda-1 | Profil tudgal1001 | Mihnea Andreescu | Cod sursa (job #2491520)
#include <bits/stdc++.h>
using namespace std;
//ifstream f("ciclueuler.in");
//ofstream g("ciclueuler.out");
const int N=100010;
const int M=500010;
char buff[32010];
int n,m,k,cnt,viz[M],a[M],b[M];
vector<int>v[N];
bitset<N>used;
void dfs(int),sorteaza(vector<int>&);//,solve(int);
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);//f>>n>>m;
for(; m; m--)
{
int x,y;
scanf("%d%d",&y,&x);//f>>x>>y;
a[++k]=x;
b[k]=y;
v[x].push_back(k);
v[y].push_back(k);
}
for(int i=1; i<=n; i++)
if(v[i].size()%2)
{
printf("-1\n");//g<<"-1";
return 0;
}
dfs(1);
if(cnt<n)
{
printf("-1\n");//g<<"-1";
return 0;
}
for(int i=1; i<=n; i++)
sorteaza(v[i]);
int nod=1;
while(1)
{
while(v[nod].size()&&viz[v[nod].back()]==2)
v[nod].pop_back();
if(v[nod].size()==0)
return 0;
printf("%d ",nod);//g<<nod<<' ';
int e=v[nod].back();
viz[e]=2;
nod=a[e]+b[e]-nod;
}
return 0;
}
void dfs(int nod)
{
used[nod]=1;
cnt++;
for(auto it:v[nod])
{
int vec=a[it]+b[it]-nod;
if(!used[vec])
{
dfs(vec);
viz[it]=1;
}
}
}
//void solve(int nod)
//{
// while(v[nod].size()&&viz[v[nod].back()]==2)
// v[nod].pop_back();
// if(v[nod].size()==0)
// exit(0);
// printf("%d ",nod);//g<<nod<<' ';
// int e=v[nod].back();
// viz[e]=2;
// nod=a[e]+b[e]-nod;
// solve(nod);
//}
void sorteaza(vector<int> &u)
{
int st=0;
int dr=u.size()-1;
while(st<dr)
{
if(viz[u[st]]==1)
st++;
else if(viz[u[dr]]==0)
dr--;
else
{
swap(u[st],u[dr]);
st++;
dr--;
}
}
}