Pagini recente » Cod sursa (job #111494) | Cod sursa (job #326699) | Cod sursa (job #1071850) | Cod sursa (job #3242133) | Cod sursa (job #238998)
Cod sursa(job #238998)
using namespace std;
#include <cstdio>
#include <cstdlib>
#include <string>
#include <vector>
#define N 100001
#define dim 8192
#define pb push_back
char ax[dim];
int pz;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz == dim) fread(ax,1,dim,stdin),pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz == dim)fread(ax,1,dim,stdin),pz=0;
}
}
typedef vector<int> vi;
typedef vector<int>:: iterator vit;
typedef vector<pair<int, int> > vip;
typedef vector<pair<int, int> > ::iterator vipit;
vi a[N];
const int maxh=66777;
vip H[maxh];
inline void insert(int x, int y)
{
int h=((x%maxh)*17+(y%maxh))%maxh;
H[h].pb(make_pair(x,y));
}
inline void sterge(int x, int y)
{
int h=((x%maxh)*17+(y%maxh))%maxh;
for(vipit i=H[h].begin(); i!=H[h].end(); )
if((i->first == x && i->second == y) || (i->first == y && i->second == x))
{
i=H[h].erase(i);
break;
}
else ++i;
}
inline int find(int x, int y)
{
int h=((x%maxh)*17+(y%maxh))%maxh;
for(vipit i=H[h].begin(); i != H[h].end(); ++i)
if((i->first == x && i->second == y) || (i->first == y && i->second == x))
return 1;
return 0;
}
int n, m;
int st[500001];
int ns;
inline void dfs(int n)
{
for(vit i=a[n].begin(); i!=a[n].end(); ++i)
if(find(n, *i))
{
sterge(n,*i);
sterge(*i, n);
dfs(*i);
}
st[++ns]=n;
}
int g[N];
void solve()
{
dfs(1);
int i;
for(i=1;i<=ns;++i)printf("%d ",st[i]);
printf("\n");
}
bool use[N];
void df(int n)
{
use[n]=1;
for(vit i=a[n].begin(); i!=a[n].end(); ++i)
if(!use[*i])
df(*i);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
cit(n); cit(m);
int i,p,q;
for(i=1;i<=m;++i)
{
cit(p);cit(q);
g[p]++;
g[q]++;
a[p].pb(q);
insert(p, q);
insert(q, p);
a[q].pb(p);
}
int ok=1;
for(i=1;i<=n;++i)
if(g[i]%2) { ok=0;break;}
df(1);
for(i=1;i<=n;++i)
if(use[i]==0) { ok=0;break;}
if(!ok) printf("-1\n");
else solve();
return 0;
}