만드는 중입니다

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

셀룰러 오토마타

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

요약
w와 길이 2^(2w+1)의 이진 문자열 s가 주어질 때, s 이상이면서 어떤 초기 상태에서도 1의 개수가 변하지 않는 가장 작은 규칙 문자열 p를 구합니다.
난이도

어려움10점 중 8점

유형
비트 연산, 백트래킹, 완전 탐색
정답자
아직 제출이 없습니다

문제

w를 양의 정수, p를 길이가 22w+12^{2w+1}인 문자열이라 하자. (w,p)(w, p)-셀 오토마타는 다음과 같이 정의된다.

  • 셀은 무한히 긴 1차원 직선 위에 놓여 있다.
  • 각 셀은 0 또는 1 중 하나의 상태를 가질 수 있다.
  • 시각 0에 Snuke가 유한 개의 셀을 골라 상태를 1로 설정한다. 나머지 모든 셀의 상태는 0이다.
  • 시각 t>0t > 0에서 셀 xx의 상태 f(t,x)f(t, x)는 시각 t−1t-1의 셀 x−w,…,x+wx-w, \dots, x+w의 상태로부터 다음 규칙으로 정해진다.

f(t,x)=p[∑i=−ww2w+if(t−1,x+i)]f(t,x) = p\left[\sum_{i=-w}^{w} 2^{w+i} f(t-1,x+i)\right]

Snuke는 시각 0의 상태를 어떻게 고르든 1의 개수가 영원히 변하지 않으면 그 셀 오토마타를 좋아한다. 정수 w와 문자열 s가 주어진다. s ≤ p이고 Snuke가 (w,p)(w, p)-셀 오토마타를 좋아하는 p 중 사전순으로 가장 작은 p를 구하라.

입력

첫째 줄에 정수 w (1 ≤ w ≤ 3)가 주어진다. 둘째 줄에 길이가 22w+12^{2w+1}이고 '0'과 '1'로만 이루어진 문자열 s가 주어진다.

출력

가능한 가장 작은 p를 출력한다. 그런 문자열이 없으면 "no"를 출력한다.

예제2

  1. 예제 1

    입력
    1
    00011000
    
    예상 출력
    00011101
    
  2. 예제 2

    입력
    1
    11111111
    
    예상 출력
    no