가장 긴 증가하는 부분 수열 4

수열 A에서 가장 긴 증가하는 부분 수열을 구하고, 길이가 최대인 것들 중 사전순으로 가장 작은 것을 길이와 함께 출력한다.

보통7동적 계획법이분 탐색그리디배열면접 대비아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

수열 AA가 주어진다. AA에서 원소를 몇 개 골라 원래 순서를 유지한 채 이어 붙인 수열을 AA의 부분 수열이라고 하고, 그 부분 수열의 값이 앞에서 뒤로 갈수록 항상 커지면 증가하는 부분 수열이라고 한다.

AA의 증가하는 부분 수열 중 길이가 가장 긴 것을 찾아 길이와 원소를 출력하는 프로그램을 작성하시오.

예를 들어 A={10,20,10,30,20,50}A = \{10, 20, 10, 30, 20, 50\}이면 가장 긴 증가하는 부분 수열은 첫째, 둘째, 넷째, 여섯째 원소를 고른 {10,20,30,50}\{10, 20, 30, 50\}이고 길이는 44이다.

길이가 가장 긴 증가하는 부분 수열은 여러 개일 수 있다. 그런 경우에는 사전순으로 가장 앞서는 것 하나만 답으로 인정한다. 길이가 같은 두 수열은 앞에서부터 값을 차례로 비교해서 처음으로 다른 자리의 값이 더 작은 쪽이 사전순으로 앞선다.

입력

첫째 줄에 수열 AA의 길이 NN이 주어진다. (1N1,0001 \le N \le 1{,}000)

둘째 줄에 AA의 원소 A1,A2,,ANA_1, A_2, \dots, A_N이 공백으로 구분되어 주어진다. (1Ai1,0001 \le A_i \le 1{,}000)

출력

첫째 줄에 가장 긴 증가하는 부분 수열의 길이를 출력한다.

둘째 줄에 그 부분 수열의 원소를 앞에서부터 공백으로 구분해 출력한다. 길이가 가장 긴 증가하는 부분 수열이 여러 개면 그중 사전순으로 가장 앞서는 것을 출력한다.