#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <iostream>
#define N 25
using namespace std;
struct xulie
{
int s, pre, dp = 1;
} ans[N];
int main()
{
int k = 0;
int a;
while(cin >> a)
{
ans[k].s = a;
k++;
// char b = getchar();
// if(b == '\n' )
// break;
}
cout << k << '\n';
int maxx = 1, pos;
for(int i = 1; i < k; ++i)
{
for(int j = 0; j < i; ++j)
{
if(ans[i].s > ans[j].s && ans[j].dp + 1 > ans[i].dp)
{
ans[i].dp = ans[j].dp + 1;
ans[i].pre = j;
cout << i << " " << ans[i].pre << '\n';
if(maxx < ans[i].dp)
{
maxx = ans[i].dp;
cout << "序列加长" << '\n';
cout << "当前最长为" << " " << maxx << '\n';
pos = i;
}
}
}
}
// cout << pos << ans[pos].s << '\n';
// pos = ans[pos].pre;
// cout << pos << ans[pos].s << '\n';
// pos = ans[pos].pre;
// cout << pos << ans[pos].s << '\n';
// pos = ans[pos].pre;
// cout << pos << ans[pos].s << '\n';
// pos = ans[pos].pre;
// cout << pos << ans[pos].s << '\n';
// pos = ans[pos].pre;
// cout << pos << ans[pos].s << '\n';
for(int i = 0; i < maxx; ++i)
{
cout << ans[pos].s << " ";
pos = ans[pos].pre;
}
return 0;
}