/*
TASK: fsort
LANG: C++
*/

#include <cstdio>
#include <algorithm>
using namespace std;

#define INFINITY -4294967294

int cache[ 1024 ], N;
int size = 0, stack[ 32768 ], memSize = 0, mem[ 32768 ];

bool isSorted() {
    
    for( int i = 1; i < N; ++i ) 
        if( cache[i] < cache[i-1] ) return false;
    return true;
}

void input() {
     
    scanf( "%d", &N );
    for( int i = 0; i < N; ++i ) scanf( "%d", &cache[i] );
    
}

void solve() {
    
    int most, index, sorted = 0;
    
    while( ! isSorted() ) {
        
        most = INFINITY;
        
        for( int i = 0; i < N - sorted; ++i ) {
             
            if( cache[i] > most ) { most = cache[i]; index = i; }
            
        }
        //printf( "CHOSEN MAXIMUM: %d.", cache[index] );
        
        if( index != 0 ) {
        
            reverse( cache, cache + index + 1 );
            
            //printf( "NEW CHANGE( TYPE 1 ) : [%d]\n", index + 1 );
            //for( int m = 0; m < N; ++m ) printf( "%d ", cache[m] );
            //printf( "\n" );
            stack[size++] = index + 1;
        }
        
        reverse( cache, cache + N - sorted );
        
            
        
        //printf( "NEW CHANGE( TYPE 2 ) : [%d].\n", N - sorted );
        //for( int m = 0; m < N; ++m ) printf( "%d ", cache[m] );
        //printf( "\n" );
        
        stack[size++] = N - sorted;
            
        sorted++;     
    }
    
    for( int i = 1; i < size; ++i ) {
        if( stack[i-1] == stack[i] ) stack[i] = stack[i-1] = 0;
    }
    
    for( int i = 0; i < size; ++i )
        if( stack[i] ) mem[memSize++] = stack[i];
    
    //printf( "READY!\n" );
    for( int i = 0; i < memSize-1; ++i ) printf( "%d ", mem[i] );
    if( memSize != 0 ) printf( "%d", mem[memSize-1] );
    printf( "\n" );
}

int main() {
    
    input();
    solve();
    
    return 0;
}
