#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
int findmax(int a[],int n)//找到最大数
{
int i,max=0,pos=0;
for(i=0;i<n;i++)
{
if(a[i]>max)
{
max=a[i];
pos=n-i;
}
}
return pos;
}
int change(int a[],int n,int pos)//FLIP交换元素位置
{
int t,gap,i;
if(pos==0)
{
gap=n;
for(i=0;i<gap/2;i++)
{
t=a[i];
a[i]=a[gap-i-1];
a[gap-i-1]=t;
}
return 0;
}
gap=n-pos;
for(i=0;i<gap/2+1;i++)
{
t=a[i];
a[i]=a[gap-i];
a[gap-i]=t;
}
return 0;
}
void Panflip(int pan[],int n,int count)//递归函数,count为递归记录数
{
if(n<=1){printf("0");}//小于2时不用FLIP了,直接输出0
else if(n>1)
{
int pos;
pos=findmax(pan,n);
if(pos==1){n--;count++;}//最低端就是最大的,n减小,递归数加1;
else if(pos==n)
{
change(pan,n,0);
printf("%d ",count+1);
n--;count++;//最顶端最大,交换到最低下,n减小,递归数加1;
}
else//最大的在中间,交换后,n和count不变(只有最大的到最下面才开始递归下一层)
{
change(pan,n,pos);
printf("%d ",count+pos);
}
Panflip(pan,n,count);//递归
}
}
int main()
{
char c,number[4];
int Pancake[40],i,j,k=0,tag=0;
while ((c=getchar())!=EOF)//读取数字
{
if(c!='\n')
{
if(isdigit(c))
{
number[tag++]=c;
}
if(c==' ')
{
Pancake[k++]=atoi(number);
memset(number,0,sizeof(number));
tag=0;
}
}
else if(c=='\n')
{
if(strlen(number)>0)Pancake[k++]=atoi(number);
for(i=0;i<k-1;i++)printf("%d ",Pancake[i]);
printf("%d\n",Pancake[i]);
Panflip(Pancake,k,0);
for(i=0;i<k;i++)Pancake[i]=0;
memset(number,0,sizeof(number));
k=0;
tag=0;
printf("\n");
}
}
return 0;
}