#includeint w[20], d[20], l[20], R[20],L[20], F[20], n,p,N=1; init() { int i; printf("donnez n"); scanf("%d",&n); p=n; for(i=1;i<=n;i++) { w[i]=1; d[i]=1; l[i]=i-1; } l[n+1]=n; /* L */ for(i=1;i<=n;i++) L[i]=0; /* R */ for(i=1;i<=n+1;i++) R[i]=i+1; R[n]=0; /* F */ F[1]=0; for(i=2;i<=n;i++)F[i]=i-1; } type() { int i; printf("%d\t",N); for(i=1;i<=n;i++) printf("%d ",w[i]); printf("\n"); } inc(int pos,int dir) { int u,v; if(dir==1) { /*w[pos]++;*/ v=pos; u=F[v]; w[pos]=w[pos]+w[pos-w[pos]]; /******/ if( L[F[u]]==u ) L[F[u]]=v; else R[F[u]]=v; F[v]=F[u]; /******/ R[u]=L[v]; F[L[v]]=u; /******/ F[u]=v; L[v]=u; } else { w[pos]=w[pos]-w[L[pos]]; v=pos; u=L[v]; /******/ if( L[F[v]]==v) L[F[v]]=u; else R[F[v]]=u; F[u]=F[v]; /******/ L[v]=R[u]; F[R[u]]=v; /******/ F[v]=u; R[u]=v; } } succ() { l[n+1]=n; inc(p,d[p]); if(w[p]==1 || w[p]==p ) { d[p]=-d[p]; l[p+1]=l[p]; l[p]=p-1; } p=l[n+1]; } main() { init(); while(p>=2) { type(); N++; succ(); } type(); }