#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> A;
vector<int> lis,back;
int main() {
int n;
scanf("%d",&n);
A.resize(n); lis.resize(n,1); back.resize(n,-1);
for(int i=0; i<n; i++) scanf("%d",&A[i]);
//compute values lis and back
for(int i=0; i<n; i++)
for(int j=0; j<i; j++) {
if(A[j]>=A[i]) continue;
if(A[j]+1>lis[i]) {lis[i]=A[j]+1; back[i]=j;} //I found better subsequence
}
//find last element of LIS
int end=0;
for(int i=0; i<n; i++)
if(lis[i]>lis[end]) end=i;
//go after back links
vector<int> LIS;
while(end!=-1) {
LIS.push_back(A[end]);
end=back[end];
}
//we've got reversed subsequence
reverse(LIS.begin(),LIS.end());
for(int i=0; i<LIS.size(); i++) printf("%d ",LIS[i]); printf("\n");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdmVjdG9yPGludD4gQTsKdmVjdG9yPGludD4gbGlzLGJhY2s7CgppbnQgbWFpbigpIHsKCWludCBuOwoJc2NhbmYoIiVkIiwmbik7CglBLnJlc2l6ZShuKTsgbGlzLnJlc2l6ZShuLDEpOyBiYWNrLnJlc2l6ZShuLC0xKTsKCWZvcihpbnQgaT0wOyBpPG47IGkrKykgc2NhbmYoIiVkIiwmQVtpXSk7CgkvL2NvbXB1dGUgdmFsdWVzIGxpcyBhbmQgYmFjawoJZm9yKGludCBpPTA7IGk8bjsgaSsrKQoJCWZvcihpbnQgaj0wOyBqPGk7IGorKykgewoJCQlpZihBW2pdPj1BW2ldKSBjb250aW51ZTsKCQkJaWYoQVtqXSsxPmxpc1tpXSkge2xpc1tpXT1BW2pdKzE7IGJhY2tbaV09ajt9IC8vSSBmb3VuZCBiZXR0ZXIgc3Vic2VxdWVuY2UKCQl9CgkvL2ZpbmQgbGFzdCBlbGVtZW50IG9mIExJUwoJaW50IGVuZD0wOwoJZm9yKGludCBpPTA7IGk8bjsgaSsrKQoJCWlmKGxpc1tpXT5saXNbZW5kXSkgZW5kPWk7CgkvL2dvIGFmdGVyIGJhY2sgbGlua3MKCXZlY3RvcjxpbnQ+IExJUzsKCXdoaWxlKGVuZCE9LTEpIHsKCQlMSVMucHVzaF9iYWNrKEFbZW5kXSk7CgkJZW5kPWJhY2tbZW5kXTsKCX0KCS8vd2UndmUgZ290IHJldmVyc2VkIHN1YnNlcXVlbmNlCglyZXZlcnNlKExJUy5iZWdpbigpLExJUy5lbmQoKSk7Cglmb3IoaW50IGk9MDsgaTxMSVMuc2l6ZSgpOyBpKyspIHByaW50ZigiJWQgIixMSVNbaV0pOyBwcmludGYoIlxuIik7CglyZXR1cm4gMDsKfQ==