만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

비밀번호

시간 제한1초메모리 제한1024 MB

요약
1부터 M까지의 수 N개의 이진수 1비트 개수가 주어집니다. 인접한 두 수의 차가 1인 쌍이 가장 많은 수열을 찾고, 같으면 사전순으로 가장 앞선 수열을 출력합니다.
난이도

보통10점 중 5점

유형
동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

우람이는 11과 MM 사이의 수 NN개로 이루어진 비밀번호를 가지고 있다. 우람이는 비밀번호를 기억하기 쉽도록 각 수를 2진법으로 나타냈을 때 1의 개수를 적어 두었다. 그 후 우람이는 비밀번호를 잊어버렸다.

우람이는 이웃한 두 수의 차이가 1인 수를 쓰는 것을 좋아한다. 각 수를 2진법으로 나타냈을 때 1의 개수가 주어졌을 때, 이웃한 수 중 차이가 1인 쌍이 가장 많은 비밀번호 수열을 찾아 우람이를 도와주자. 개수가 같은 수열이 여럿 있으면 사전순으로 가장 작은 수열을 출력한다.

입력

첫째 줄에 NN과 MM이 주어진다.

둘째 줄에 우람이 비밀번호의 각 수를 2진법으로 나타냈을 때 1의 개수인 길이 NN의 수열 a_1,⋯ ,a_Na\_1, \cdots, a\_N이 공백을 사이에 두고 주어진다.

출력

첫째 줄에 차이가 1인 이웃한 수의 쌍의 개수의 최댓값을 출력한다.

둘째 줄에 문제의 조건을 만족하면서 차이가 1인 이웃한 수의 쌍이 가장 많은 수열을 출력한다. 그런 수열이 여럿이면 사전순으로 가장 작은 수열을 출력한다.

가능한 수열이 없으면 -1을 출력한다.

제한

  • 2≤N≤20002 \leq N \leq 2000
  • 3≤M≤10233 \leq M \leq 1023
  • 1≤a_i≤101 \leq a\_i \leq 10

힌트

수열 a_1,...,a_na\_1, ..., a\_n과 수열 b_1,...b_nb\_1, ... b\_n에 대해 앞의 수열이 사전순으로 더 작다는 것은 다음과 같다.

어떤 ii가 존재해서 모든 j\<ij\<i에 대해 a_j=b_ja\_j = b\_j이고 a_i<b_ia\_i < b\_i이다.

예제3

  1. 예제 1

    입력
    5 7
    1 3 2 2 3
    
    예상 출력
    2
    1 7 5 6 7
    
  2. 예제 2

    입력
    7 7
    1 1 2 1 2 2 3
    
    예상 출력
    6
    1 2 3 4 5 6 7
    
  3. 예제 3

    입력
    3 3
    3 3 3
    
    예상 출력
    -1