수열의 가치

아직 제출이 없습니다시간 제한2초메모리 제한1024 MB

문제

어떤 정수 수열 XX의 가치는 다음과 같이 정의된다:

  • XX에서 감소하지 않는 부분 수열 PP와 증가하지 않는 부분 수열 QQ를 임의로 선택했을 때, (PP의 모든 원소의 합) + (QQ의 모든 원소의 합)의 최댓값

길이가 NN인 정수 수열 AA가 주어진다. AA를 원하는 대로 재배열하여 수열의 가치를 최대화하고 싶다. 재배열하여 만들 수 있는 수열의 가치의 최댓값과 이 때의 수열을 찾아보자.

감소/증가하지 않는 부분 수열이 무엇인지 잘 모르는 친구들은 친절한 정휘가 준비한 아래 정의를 읽어보도록 하자.

  • 부분 수열이란 주어진 수열에서 1개 이상의 원소를 골라 원래 순서대로 나열하여 얻은 수열을 말한다.
  • 감소하지 않는 부분 수열은 맨 처음 원소를 제외한 모든 원소가 바로 이전 원소보다 크거나 같은 부분 수열을 말한다.
  • 증가하지 않는 부분 수열은 맨 처음 원소를 제외한 모든 원소가 바로 이전 원소보다 작거나 같은 부분 수열을 말한다.

어떤 수가 두 부분 수열 PPQQ 모두에 포함되도록 PPQQ를 선택할 수 있으며, 둘 모두에 포함된 수는 PP의 원소의 합을 구할 때와 QQ의 원소의 합을 구할 때 모두 더해진다.

입력

첫째 줄에 NN이 주어진다. (1N1,000)(1 \le N \le 1\\,000)

둘째 줄에 정수 A_1,A_2,,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (1A_iN)(1 \le A\_i \le N)

출력

AA를 재배열하여 만들 수 있는 수열의 가치의 최댓값을 첫 번째 줄에 출력한다.

그 때의 수열 B_1,B_2,,B_NB\_1, B\_2, \cdots, B\_N을 두 번째 줄에 공백으로 구분하여 출력한다. 가능한 수열이 여러 가지라면 그 중 아무거나 출력한다.