마법의 비트열

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

요약
소수 p가 주어질 때, 모듈러 인덱스 행렬의 각 행이 원래 문자열이나 그 보수와 같아야 하는 마법 비트열 중 사전순으로 가장 작은 비트열을 구한다.
난이도

어려움10점 중 8점

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

문제

길이가 어떤 소수보다 정확히 11 작은 비트열은 매직(magic) 일 수 있다. 예를 들어 1001은 그러한 문자열인데, 길이 44가 소수 55보다 11 작기 때문이다.

어떤 비트열이 매직인지 확인하려면, 비트가 아닌 자리표시 기호 x를 문자열 끝에 하나 붙인 뒤 그 결과를 길이 pp의 순환(cyclic) 문자열로 본다. 그런 다음 p−1p-1개의 행으로 이루어진 정사각 비트 행렬을 만든다. mm번째 행(1≤m≤p−11 \le m \le p-1)은 순환 문자열의 매 mm번째 비트를 mm번째 비트부터 차례로 나열한 것이다. 즉, mm번째 행의 kk번째 원소는 순환 위치 (k⋅m) mod p(k \cdot m) \bmod p에 있는 비트이다.

문자열 1001(p=5p = 5)의 경우 행렬은 다음과 같다.

행비트
매 1번째 비트1001
매 2번째 비트0110
매 3번째 비트0110
매 4번째 비트1001

행렬의 행 수는 원래 비트열의 길이와 같다. 확장된 문자열의 길이 pp가 소수이므로, 덧붙인 x는 결코 선택되지 않는다.

행렬의 모든 행이 원래 비트열이거나 그 비트 반전(complement)과 같으면, 그 비트열은 매직이다. 위 예에서는 모든 행이 1001 또는 그 반전 0110이므로 1001은 매직이다.

입력

마지막 줄을 제외한 각 줄에는 소수 p≤100000p \le 100000가 하나씩 주어진다. 마지막 줄에는 0이 하나 주어지며, 이 줄은 처리하지 않는다.

출력

입력의 각 소수 pp에 대해, 길이 p−1p-1인 상수가 아닌(non-constant) 매직 비트열 중 사전순으로 가장 작은 것을 한 줄에 출력한다. 그러한 문자열이 없으면 Impossible을 출력한다.

예제3

  1. 예제 1

    입력
    5
    3
    17
    47
    2
    79
    0
    
    예상 출력
    0110
    01
    0010111001110100
    0000100001101010001101100100111010100111101111
    Impossible
    001001100001011010000001001111001110101010100011000011011111101001011110011011
    
  2. 예제 2

    입력
    2
    0
    
    예상 출력
    Impossible
    
  3. 예제 3

    입력
    3
    0
    
    예상 출력
    01