만드는 중입니다

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

금고 부수기

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

요약
A 버튼(전체 수에 1을 더함, mod B^N)과 B 버튼(각 자릿수에 1을 더함, mod B)을 모두 한 번 이상 눌러 표시된 수를 S로 되돌리는 최소 횟수를 구합니다.
난이도

보통10점 중 7점

유형
수학, 정수론
정답자
아직 제출이 없습니다

문제

유틸은 MatKor 임원인 세준이의 초대를 받아 MatKor 임원진의 방에 들어갈 수 있게 되었다. 세준이의 Codeforces 핸들이 SafeSpot인 만큼 임원진의 방에는 금고가 있다.

이 금고의 비밀번호는 NN자리의 BB진수로 표시되며, 00으로 시작할 수 있다. 현재 금고의 모니터에는 NN자리의 BB진수 S=SN−1SN−2⋯S1S0‾(B)S=\overline{S_{N-1}S_{N-2}\cdots S_1S_0}_{(B)}가 표시되어 있다. 모니터에 표시된 수는 두 종류의 버튼을 눌러서 조작할 수 있다. 버튼은 한 번에 하나씩만 누를 수 있고, 각 버튼을 눌렀을 때 다음과 같이 동작한다.

  • 버튼 A. 현재 표시된 수에 11을 더한다. 결과가 NN자리를 넘어가면 마지막 NN자리만 표시된다. 즉, S←(S+1) mod BNS\leftarrow (S+1)\bmod B^N으로 바꾼다.
  • 버튼 B. 현재 표시된 수의 각 자리 수에 11을 더한다. 결과가 BB가 되면 00이 된다. 즉, 모든 ii에 대해 Si←(Si+1) mod BS_i\leftarrow (S_i+1)\bmod B로 바꾼다.

세준이가 잠시 자리를 비운 사이 호기심이 많은 유틸은 금고의 버튼을 눌러 보기로 했다. 한 가지 버튼만 계속 누르는 것은 재미없기 때문에 버튼 A와 B를 모두 최소한 한 번은 눌러 볼 것이다. 하지만 초기 상태에서 값이 바뀌어 있다면 세준이에게 금고를 조작한 것을 들킬 수 있으므로, 조작이 끝났을 때 모니터에 표시된 수가 다시 SS가 되게 하려고 한다. 세준이가 언제 돌아올지 모르는 유틸은 버튼을 누르는 횟수를 최소화하고자 한다.

유틸을 도와 금고의 버튼을 최소한으로 눌러 수가 다시 SS가 되도록 해보자. 단, 두 버튼 모두 최소 한 번 이상은 눌러야 한다.

NN자리의 BB진수 S=SN−1SN−2⋯S1S0‾(B)S=\overline{S_{N-1}S_{N-2}\cdots S_1S_0}_{(B)}는 아래의 수를 의미한다.

S=SN−1SN−2⋯S1S0‾(B)=∑i=0N−1SiBiS=\overline{S_{N-1}S_{N-2}\cdots S_1S_0}_{(B)}=\sum_{i=0}^{N-1}{S_iB^i}

입력

첫 번째 줄에 비밀번호의 자릿수를 나타내는 정수 NN (1≤N≤100 0001 \le N \le 100\,000)과 진법을 나타내는 정수 BB (2≤B≤100 0002 \le B \le 100\,000)가 공백으로 구분되어 주어진다.

두 번째 줄에 SS의 각 자리를 나타내는 NN개의 정수 SN−1,SN−2,⋯ ,S1,S0S_{N-1}, S_{N-2}, \cdots, S_1, S_0 (0≤Si<B0 \le S_i < B)가 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 버튼을 누르는 횟수의 최솟값 VV를 출력한다. VV가 4 000 0004\,000\,000을 초과하는 경우 -1을 대신 출력한다.

VV가 4 000 0004\,000\,000 이하인 경우, 두 번째 줄에 길이 VV의 문자열을 출력한다. 문자열의 각 문자는 A 또는 B이며 버튼을 누르는 순서를 의미한다.

횟수를 최소로 만드는 시행이 여러 개인 경우 아무거나 하나를 출력한다.

힌트

세준이의 Codeforces 핸들은 SafeSpot이다.

예제1

  1. 예제 1

    입력
    3 3
    2 0 1
    
    예상 출력
    6
    BBAAAA