import java.util.*;
public class Main {
public static void main
(String[] args
) { int arr[]={10,22,9,33,21,50,41,40,60,55};
int lis[]=new int[arr.length];
for(int i=0;i<arr.length;i++){
lis[i]=1;
}
for(int i=1;i<arr.length;i++){
for(int j=0;j<i;j++){
if(arr[i]>arr[j]&&lis[i]<lis[j]+1){
lis[i]=lis[j]+1;
}
}
}
int max=0;
for(int i=0;i<arr.length;i++){
if(max<lis[i])
max=lis[i];
}
//**************Recursive Print LIS****************
int rIndex=-1;
for(int i=arr.length-1;i>=0;i--){
if(lis[i]==max){
rIndex=i;
break;
}
}
int res[]=new int[max];
printLISRecursive(arr,rIndex,lis,res,max,max);
}
private static void printLISRecursive(int[] arr, int maxIndex, int[] lis, int[] res, int i, int max) {
if(maxIndex<0)return;
if(max==1&&lis[maxIndex]==1&&i==1){
res[i-1]=arr[maxIndex];
// System.out.println("Using Print Recursion:");
for(int j=0;j<res.length;j++){
}
return;
}
if(lis[maxIndex]==max){
res[i-1]=arr[maxIndex];
printLISRecursive(arr, maxIndex-1, lis, res, i-1, max-1);
}
printLISRecursive(arr, maxIndex-1, lis, res, i, max);
}
}
aW1wb3J0IGphdmEudXRpbC4qOwpwdWJsaWMgY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgaW50IGFycltdPXsxMCwyMiw5LDMzLDIxLDUwLDQxLDQwLDYwLDU1fTsKICAgICAgICBpbnQgbGlzW109bmV3IGludFthcnIubGVuZ3RoXTsKICAgICAgICBmb3IoaW50IGk9MDtpPGFyci5sZW5ndGg7aSsrKXsKICAgICAgICAgICAgbGlzW2ldPTE7CiAgICAgICAgfQogICAgICAgIGZvcihpbnQgaT0xO2k8YXJyLmxlbmd0aDtpKyspewogICAgICAgICAgICBmb3IoaW50IGo9MDtqPGk7aisrKXsKICAgICAgICAgICAgICAgIGlmKGFycltpXT5hcnJbal0mJmxpc1tpXTxsaXNbal0rMSl7CiAgICAgICAgICAgICAgICAgICAgbGlzW2ldPWxpc1tqXSsxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGludCBtYXg9MDsKICAgICAgICBmb3IoaW50IGk9MDtpPGFyci5sZW5ndGg7aSsrKXsKICAgICAgICAgICAgaWYobWF4PGxpc1tpXSkKICAgICAgICAgICAgICAgIG1heD1saXNbaV07CiAgICAgICAgfQogICAgICAgIC8vKioqKioqKioqKioqKipSZWN1cnNpdmUgUHJpbnQgTElTKioqKioqKioqKioqKioqKgogICAgICAgIGludCBySW5kZXg9LTE7CiAgICAgICAgZm9yKGludCBpPWFyci5sZW5ndGgtMTtpPj0wO2ktLSl7CiAgICAgICAgICAgIGlmKGxpc1tpXT09bWF4KXsKICAgICAgICAgICAgICAgICBySW5kZXg9aTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnQgcmVzW109bmV3IGludFttYXhdOwogICAgICAgIHByaW50TElTUmVjdXJzaXZlKGFycixySW5kZXgsbGlzLHJlcyxtYXgsbWF4KTsKICAgIH0KICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50TElTUmVjdXJzaXZlKGludFtdIGFyciwgaW50IG1heEluZGV4LCBpbnRbXSBsaXMsIGludFtdIHJlcywgaW50IGksIGludCBtYXgpIHsKICAgICAgICBpZihtYXhJbmRleDwwKXJldHVybjsKICAgICAgICBpZihtYXg9PTEmJmxpc1ttYXhJbmRleF09PTEmJmk9PTEpewogICAgICAgICAgICByZXNbaS0xXT1hcnJbbWF4SW5kZXhdOwovLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNpbmcgUHJpbnQgUmVjdXJzaW9uOiIpOwogICAgICAgICAgICBmb3IoaW50IGo9MDtqPHJlcy5sZW5ndGg7aisrKXsKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQocmVzW2pdKyIgIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYobGlzW21heEluZGV4XT09bWF4KXsKICAgICAgICAgICAgcmVzW2ktMV09YXJyW21heEluZGV4XTsKICAgICAgICAgICAgcHJpbnRMSVNSZWN1cnNpdmUoYXJyLCBtYXhJbmRleC0xLCBsaXMsIHJlcywgaS0xLCBtYXgtMSk7CiAgICAgICAgfQogICAgICAgIHByaW50TElTUmVjdXJzaXZlKGFyciwgbWF4SW5kZXgtMSwgbGlzLCByZXMsIGksIG1heCk7CiAgICB9Cgp9