#include <iostream>
#include <string>
#include <math.h>
#include <vector>
#include <Windows.h>
#define max(a,b) (a > b ? a : b)
int main()
{
int proc_counter = 0;
int count;
std::cin >> count;
int* numbers = new int[count+1];
int* numbers_indices = new int[count + 1];
int* numbers_indices_ro = new int[count + 1];
int* klist = new int[count*4];
int klist_top = 0;
DWORD t = timeGetTime();
for(int i = 1;i <= count;i++)
{
std::cin >> numbers[i];
//numbers[i] = count - i + 1;
numbers_indices[numbers[i]] = i;
numbers_indices_ro[i] = numbers[i];
}
for(int n = count;n >= 1;n--) //<=2n siirtoa ratkaisuun
{
/*if(n == count)
{
klist[klist_top] = (numbers_indices[n]);
klist_top++;
}
else
{
int fa_index = numbers_indices[n];
klist[klist_top] = fa_index;
klist_top++;
}*/
klist[klist_top] = numbers_indices[n];
klist_top++;
klist[klist_top] = n;
klist_top++;
klist[klist_top] = max(n-1,1);
klist_top++;
klist[klist_top] = max(numbers_indices[n]-1,1);
klist_top++;
proc_counter++;
//update indices for i > numbers_indices[n]
for(int i = numbers_indices[n] + 1;i < n+1;i++)
{
numbers_indices[numbers_indices_ro[i]]--;
numbers_indices_ro[i-1] = numbers_indices_ro[i];
}
/*for(int i = 1;i < n;i++)
{
if(numbers_indices[i] <= numbers_indices[n])
{
numbers_indices[i] = numbers_indices[n] - numbers_indices[i] + 1;
}
numbers_indices[i] = n - numbers_indices[i] + 1;
}*/
}
std::cout << klist_top << '\n';
//std::cout << "proc_counter = " << 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;
}