Pagini recente » Cod sursa (job #2813212) | Cod sursa (job #682256) | Cod sursa (job #2497986) | Cod sursa (job #924885) | Cod sursa (job #2491526)
#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 pb;
void inc()
{
pb++;
if(pb==32000)
{
pb=0;
fread(buff,32000,1,stdin);
}
}
void read(int &x)
{
while(buff[pb]<'0'||buff[pb]>'9')inc();
x=0;
while(buff[pb]>='0'&&buff[pb]<='9'){x=10*x+buff[pb]-'0';inc();}
}
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);
read(n);read(m);//scanf("%d%d",&n,&m);//f>>n>>m;
for(int i=1; i<=m; i++)
{
int x,y;
read(x);read(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(m)
{
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();m--;
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--;
}
}
}