//
//
//
//memset(ara, -1, sizeof(ara));
//00000001-00000001-00000001-00000001
//00000000-00000000-00000000-00000001
//11111111-11111111-11111111-11111111
//
//+1 = 00000001
// = 11111110
// = 1
// ------------
// 11111111 (-1)
//
//
//
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int List[n];
for(int i = 0; i < n; i++)
{
cin>>List[i];
}
int LIS[n], Track[n];
memset(Track, -1, sizeof(Track));
for(int i = 0; i < n; i++)
{
LIS[i] = 1;
}
for(int i = 1; i < n; i++)
{
for(int j = 0; j < i; j++)
{
if(List[j] < List[i])
{
LIS[i] = max(LIS[i], 1+LIS[j]);
if (LIS[i] == 1 + LIS[j])
{
Track[i] = j;
}
}
}
}
for(int i = 0; i < n; i++)
{
cout<<LIS[i]<<" ";
}
cout<<endl;
int mx = INT_MIN, ind;
for(int i = 0; i< n; i++)
{
if(mx < LIS[i])
{
mx = LIS[i];
ind = i;
}
}
cout<<"LIS Length = "<<mx<<endl;
for(int i = 0; i < n; i++)
{
cout<<Track[i]<<" ";
}
cout<<endl;
vector<int>ans;
for(int i = ind; i >= 0; )
{
ans.push_back(List[i]);
i = Track[i];
}
for(int i = ans.size()-1; i >= 0; i--)
{
cout<<ans[i]<<" ";
}
}
Ly8KLy8KLy8KLy9tZW1zZXQoYXJhLCAtMSwgc2l6ZW9mKGFyYSkpOwovLzAwMDAwMDAxLTAwMDAwMDAxLTAwMDAwMDAxLTAwMDAwMDAxCi8vMDAwMDAwMDAtMDAwMDAwMDAtMDAwMDAwMDAtMDAwMDAwMDEKLy8xMTExMTExMS0xMTExMTExMS0xMTExMTExMS0xMTExMTExMQovLwovLysxID0gMDAwMDAwMDEKLy8gICA9IDExMTExMTEwCi8vICAgPSAgICAgICAgMQovLyAgIC0tLS0tLS0tLS0tLQovLyAgICAgMTExMTExMTEgKC0xKQovLwovLwovLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKQp7CiAgICBpbnQgbjsKICAgIGNpbj4+bjsKICAgIGludCBMaXN0W25dOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBjaW4+Pkxpc3RbaV07CiAgICB9CgogICAgaW50IExJU1tuXSwgVHJhY2tbbl07CiAgICBtZW1zZXQoVHJhY2ssIC0xLCBzaXplb2YoVHJhY2spKTsKICAgIGZvcihpbnQgaSAgPSAwOyBpIDwgbjsgaSsrKQogICAgewogICAgICAgIExJU1tpXSA9IDE7CiAgICB9CgoKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKExpc3Rbal0gPCBMaXN0W2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMSVNbaV0gPSBtYXgoTElTW2ldLCAxK0xJU1tqXSk7CiAgICAgICAgICAgICAgICBpZiAoTElTW2ldID09IDEgKyBMSVNbal0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHJhY2tbaV0gPSBqOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgY291dDw8TElTW2ldPDwiICI7CiAgICB9CiAgICBjb3V0PDxlbmRsOwoKICAgIGludCBteCA9IElOVF9NSU4sIGluZDsKICAgIGZvcihpbnQgaSA9IDA7IGk8IG47IGkrKykKICAgIHsKICAgICAgICBpZihteCA8IExJU1tpXSkKICAgICAgICB7CiAgICAgICAgICAgIG14ID0gTElTW2ldOwogICAgICAgICAgICBpbmQgPSBpOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQ8PCJMSVMgTGVuZ3RoID0gIjw8bXg8PGVuZGw7CgogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBjb3V0PDxUcmFja1tpXTw8IiAiOwogICAgfQogICAgY291dDw8ZW5kbDsKICAgIHZlY3RvcjxpbnQ+YW5zOwogICAgZm9yKGludCBpID0gaW5kOyBpID49IDA7ICkKICAgIHsKICAgICAgICBhbnMucHVzaF9iYWNrKExpc3RbaV0pOwogICAgICAgIGkgPSBUcmFja1tpXTsKICAgIH0KICAgIGZvcihpbnQgaSA9IGFucy5zaXplKCktMTsgaSA+PSAwOyBpLS0pCiAgICB7CiAgICAgICAgY291dDw8YW5zW2ldPDwiICI7CiAgICB9CgoKfQoKCgoKCgoKCgoKCgoKCg==