//#define Local
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define MAX 1000
struct Array
{
int num[MAX];
int len;
};
void Change (Array *flap, Array *sorted, char s[])
{
int j = 0, k = 0;
char temp[MAX];
for (int i = 0; i <= strlen(s); i++) //这地方用了 <= 要注意,因为要取到‘\0’
{
if (s[i] == ' ' || s[i] == '\0')//等于空格,转化前边储存的temp。字符串最后是\0,写成了\n,所以最后一个数转换不了
{
(*flap).num[k] = atoi(temp);
(*sorted).num[k] = atoi(temp);
k++;
memset(temp, '\0', sizeof(temp));
j = 0;
}
else
temp[j++] = s[i];
}
(*flap).len = (*sorted).len = k; //长度写错过,改了以后是等于k,不是j
}
int Search (Array flap, int a)
{
for (int i = 0; i < flap.len; i++)
if (flap.num[i] == a)
return i;
return 0;
}
int cmp(const void *a, const void *b)
{
return *(int*)a - *(int*)b;
}
void swap (int *a, int *b)
{
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
void fips (Array *flap, int pos)
{
int head = 0;
for (int i = pos; i >= pos - pos/2; i--)
swap(&(*flap).num[i], &(*flap).num[head++]);
}
int main()
{
#ifdef Local
freopen("a.in", "r", stdin);
freopen("a.out", "w", stdout);
#endif
Array flap = {0, 0}, sorted = {0, 0};
int i = 0, pos = 0;
char s[MAX];
while (gets(s) != NULL)
{
puts(s);
Change(&flap, &sorted, s); //转换输入
qsort(sorted.num, sorted.len, sizeof(int), cmp);//快速排序, qsort应该写sorted.len,写了个len
for (i = sorted.len-1; i >= 0; i--)
{
if (flap.num[i] != sorted.num[i]) //不在应该在的位置上,要进行翻转
{
pos = Search(flap, sorted.num[i]);//在flap中查找sorted[i]的位置
if (pos != 0) //不在顶上,在顶上上的话不用翻到顶上了
{
fips(&flap, pos);//把要找的元素翻到最顶上
cout << sorted.len-pos << ' ';
}
fips(&flap, i);//在把它翻到应该的位置上。
cout << sorted.len-i << ' ';
}
}
cout << '0' << endl;
}
}