Brincadeira

N이 최대 30인 LFSR이 생성하는 수열에서 길이가 Y 이상이고 합이 X로 나누어떨어지는 연속 부분수열을 찾아, 끝 인덱스와 시작 인덱스 순서로 최소가 되는 것을 구한다.

어려움8누적 합해시맵시뮬레이션아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

시프트 레지스터는 비트 벡터의 원소를 한 자리씩 밀어내는 회로다. 입력 비트 하나와 출력 비트 하나가 있고 클록 펄스로 동작한다. 펄스가 들어오면 입력 비트가 벡터의 최상위 비트가 되고, 최하위 비트는 레지스터 출력으로 빠져나가며, 나머지 비트는 모두 최하위 비트 쪽으로 한 자리씩 밀린다.

선형 되먹임 시프트 레지스터(LFSR)는 입력 비트를 펄스 직전 레지스터에 들어 있던 일부 비트의 배타적 논리합으로 정하는 시프트 레지스터다. 되먹임에 쓰이는 비트를 탭이라고 부른다. 아래 그림은 탭이 세 개(비트 0, 3, 5)인 8비트 LFSR이다.

초기 상태펄스 한 번 뒤의 상태
펄스 두 번 뒤의 상태펄스 세 번 뒤의 상태

히카르두와 클라우지우는 프로그래밍 대회 최종 결과 발표를 기다리면서 대회장에 있던 LFSR로 논다.

두 사람은 LFSR로 무한 수열을 만든다. 클록 펄스가 울리기 직전마다 레지스터의 비트를 십진수로 바꾼 값이 수열의 원소다. 그림과 같은 LFSR이라면 수열의 앞부분은 A0=169A_0 = 169 (10101001), A1=212A_1 = 212 (11010100), A2=106A_2 = 106 (01101010), A3=53A_3 = 53 (00110101), A4=26A_4 = 26 (00011010)이다. 첫 펄스 전의 비트 값이 수열의 첫 원소라는 점에 주의하라.

한 판마다 한 사람이 정수 XXYY를 말한다. 그러면 다른 사람은 LFSR이 만든 수열에서 길이가 YY 이상이고 원소의 합이 XX로 나누어떨어지는 연속 부분수열을 찾아야 한다.

두 사람은 컴퓨터 없이도 답을 척척 찾아내며 이 놀이를 즐긴다. LFSR의 명세와 정수 XX, YY가 주어질 때 조건을 만족하는 연속 부분수열을 찾아라. 없으면 없다고 답하라.

입력

첫째 줄에 정수 다섯 개 NN, TT, A0A_0, XX, YY가 공백을 두고 주어진다. NN은 레지스터의 비트 수 (2N302 \le N \le 30), TT는 탭의 개수 (1TN1 \le T \le N), A0A_0는 LFSR 초기 상태를 십진수로 나타낸 값 (0A0<2N0 \le A_0 < 2^N), XX는 연속 부분수열의 합을 나누어떨어뜨려야 하는 수 (1X1061 \le X \le 10^6), YY는 연속 부분수열에 들어가야 하는 최소 원소 개수다 (1Y1061 \le Y \le 10^6). 비트는 최하위 비트인 00번부터 최상위 비트인 N1N-1번까지 번호를 매긴다.

둘째 줄에 탭인 비트의 번호 TT개가 증가하는 순서로 공백을 두고 주어진다. 00번 비트는 항상 탭이다.

출력

첫째 줄에 고른 연속 부분수열의 첫 원소 인덱스 II와 마지막 원소 인덱스 FF를 공백을 두고 출력한다. 수열의 인덱스는 00부터 시작한다. 조건을 만족하는 연속 부분수열이 없으면 impossivel을 출력한다.

답이 여러 개면 FF가 가장 작은 것을 고르고, 그래도 여러 개면 II가 가장 작은 것을 고른다.