#include #include #include using namespace std; int n, a[1001], dp[1001], ans = 1, pred[1001]; void in() { scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); } void printPath(int i) { if (i == -1) return; printPath(pred[i]); printf("%d ", a[i]); } void make() { for (int i = 0; i < n; i++) dp[i] = 1; for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) if (a[j] < a[i] && dp[j] + 1 > dp[i]) { dp[i] = dp[j] + 1; pred[i] = j; } if (dp[i] > ans) ans = dp[i]; } printf("Longest increasing subsequence is with length %d.\n", ans); for (int i = 0; i < n; i++) { printPath(i); printf("\n"); } } int main() { in(); memset(pred, -1, sizeof(pred)); make(); return 0; }