#include<bits/stdc++.h>
using namespace std;
int main()
{
int n; // size declare
cin>>n; // size input
int List[n]; // array declare with that size
for(int i = 0; i < n; i++) // array input using for loop
{
cin>>List[i];
}
// 11111111-11111111-11111111-11111111
// 00000000-00000000-00000000-00000000
// 00000001-00000001-00000001-00000001 = 16843009
//
// 32 ( 4 byte) 8 bit 255 0->128
//
// +1 = 00000001
// 1's = 11111110
// 2's = 1
// -1 = 11111111 (-1)
int LIS[n];
memset(LIS, 1, sizeof(LIS));
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]);
}
}
}
for(int i = 0; i < n; i++)
{
cout<<LIS[i]<<" ";
}
cout<<endl;
int mx = INT_MIN;
for(int i = 0; i < n; i++)
{
if(mx < LIS[i])mx = LIS[i];
}
cout<<"LIS Length = "<<mx<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkKewogICAgaW50IG47IC8vIHNpemUgZGVjbGFyZQogICAgY2luPj5uOyAvLyBzaXplIGlucHV0CiAgICBpbnQgTGlzdFtuXTsgLy8gYXJyYXkgZGVjbGFyZSB3aXRoIHRoYXQgc2l6ZQogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgLy8gYXJyYXkgaW5wdXQgdXNpbmcgZm9yIGxvb3AKICAgIHsKICAgICAgICBjaW4+Pkxpc3RbaV07CiAgICB9CgovLyAgICAxMTExMTExMS0xMTExMTExMS0xMTExMTExMS0xMTExMTExMQovLyAgICAwMDAwMDAwMC0wMDAwMDAwMC0wMDAwMDAwMC0wMDAwMDAwMAovLyAgICAwMDAwMDAwMS0wMDAwMDAwMS0wMDAwMDAwMS0wMDAwMDAwMSA9IDE2ODQzMDA5Ci8vCi8vICAgIDMyICggNCBieXRlKSA4IGJpdCAyNTUgMC0+MTI4Ci8vCi8vICAgICsxID0gICAgMDAwMDAwMDEKLy8gICAgMSdzICA9ICAxMTExMTExMAovLyAgICAyJ3MgID0gICAgICAgICAxCi8vICAgICAgLTEgICA9IDExMTExMTExICgtMSkKCgoKCiAgICBpbnQgTElTW25dOwogICAgbWVtc2V0KExJUywgMSwgc2l6ZW9mKExJUykpOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBMSVNbaV0gPSAxOwogICAgfQoKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGk7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKExpc3Rbal0gPCBMaXN0W2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBMSVNbaV0gPSBtYXgoTElTW2ldLCAxKyBMSVNbal0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBjb3V0PDxMSVNbaV08PCIgIjsKICAgIH0KICAgIGNvdXQ8PGVuZGw7CiAgICBpbnQgbXggPSBJTlRfTUlOOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBpZihteCA8IExJU1tpXSlteCA9IExJU1tpXTsKICAgIH0KICAgIGNvdXQ8PCJMSVMgTGVuZ3RoID0gIjw8bXg8PGVuZGw7CgoKCgoKCgoKfQo=