#include <stdio.h>

#define TRUE  1
#define FALSE 0
 
void flip (int v[], int n, int k){
  int temp, i;
  for (i = n; i > k; k++, i--) {
    temp = v[i];
    v[i] = v[k];
    v[k] = temp;
  }
  for (i=1; i <=n; i++) 
    printf("%d ", v[i]);
  printf("\n");
}

int estaordenado (int v[], int n, int k){
  int i;
  for (i = n; i > k ; i++) 
    if (v[i-1] < v[i]) 
      return FALSE;
  return TRUE;
}

void ordena(int v[], int n, int k, FILE *saida) {
  
  if (estaordenado(v,n,k) || k==n) /* o estaordena .. pode ser removido */ 
    fprintf(saida,"0 \n");
  else {
    /* acha menor */
    int i, max;
    max = k;
    for (i=k+1; i <= n; i++) 
      if (v[i] > v[max])
	max = i;
	
    if (max == n) {
      flip (v, n, k);
      fprintf(saida, "%d ", k);
    }
    else if (max != k) {
      flip(v,n,max);
      flip(v,n,k);
      fprintf(saida,"%d %d ", max, k); 
    }
    
    ordena(v,n,k+1,saida);
  }
}


main(void) {
  FILE *entrada, *saida;
  int i, n, pilha[31];
  
  entrada = fopen("pank.in","r");
  if (entrada == NULL) {
    fprintf(stderr, "pank: pank.in: no input file\n");
    exit (1);
  } 

  saida   = fopen("pank.out","w");

  while (!feof(entrada)) {
    fscanf(entrada," %d", &n);
    for (i = 1; i <= n; i++){ 
      fscanf(entrada," %d", &pilha[i]);
      fprintf(saida,"%d ", pilha[i]);
    }
    fprintf(saida,"\n");
    ordena (pilha,n,1,saida);
  }
  return 0;
}
