#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int l,max,b[40],asc[40];
char bing[510];
void turn(int end)
{
int i;
char tmp;
if(end==1)
{
tmp=b[0];
b[0]=b[1];
b[1]=tmp;
return;
}
for(i=0;i<=end/2;i++)
{
tmp=b[i];
b[i]=b[end-i];
b[end-i]=tmp;
}
}
int main()
{
int i,j,k,m,n,end;
memset(b,0,sizeof(b));
while(gets(bing)!=NULL) //gets读入EOF时返回NULL
{
if(bing[0]==0)
continue;
puts(bing);
memset(asc,0,sizeof(asc));
max=strlen(bing);
int c=0;
for(i=0;i<max;i=i+1)
{
if(bing[i]==32)
{
c++;
}
else
{
b[c]=b[c]*10+bing[i]-48;
}
}
end=c;l=c+1;
memcpy(asc,b,sizeof(b));
qsort(asc,l,sizeof(int),cmp);
m=l-1;//m是最大值的位置,即翻转后最大值应在的位置,每次先把最大值翻转到0位置,在翻转到m
while(end>0)
{
max=asc[m];
int e=0;
for(k=0;k<l;k++)
{
if(b[k]!=asc[k])
{
e=1;
break;
}
}
if(!e)
break;
for(i=0;i<=end;i++)
{
if(b[i]==max)
{
if(i==m)
{
m--;
end--;
}
else if(i==0)
{
turn(m);
printf("%d ",l-m);
m--;
end--;
}
else
{
turn(i);
turn(m);
printf("%d %d ",l-i,l-m);
m--;
end--;
}
break;
}
}
}
printf("0\n");
memset(b,0,sizeof(b));
}
return 0;
}
// 8 4 6 7 5 2
//2 2 3 3 3 2 2 3 2