#include <iostream>
#include <cstdlib>
#include <string>
#include <math.h>
#include <vector>
#include <Windows.h>
#include <ctime>
int rand(int i)
{
return std::rand()%i + 1;
}
#define max(a,b) (a > b ? a : b)
int main()
{
srand (unsigned(time(NULL)));
int count;
std::cin >> count;
int* numbers = new int[count+1];
int* numbers_indices = new int[count + 1];
int* klist = new int[count*4];
int klist_top = 0;
long long proc_counter = 0;
for(int i = 1;i <= count;i++)
{
std::cin >> numbers[i];
//numbers[i] = count - i + 1;
numbers_indices[numbers[i]] = i;
}
DWORD t = timeGetTime();
for(int n = 1;n <= count;n++) //<=2n siirtoa ratkaisuun
{
klist[klist_top++] = max(1,numbers_indices[n]-1);
klist[klist_top++] = numbers_indices[n];
for(int i = numbers_indices[n]-1;i >= n;i--)
{
numbers_indices[numbers[i]]++;
numbers[i+1] = numbers[i];
}
}
klist[klist_top++] = count;
std::cout << klist_top << '\n';
//std::cout << "pc: " << proc_counter << " ,time: " << timeGetTime() - t << "ms";
for(int i = 0;i < klist_top;i++)
{
std::cout << klist[i] << ' ';
}
/*std::cin.clear();
std::cin.sync();
std::cin.get();*/
return 0;
}