가장 작은 LNR 수열

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

nn비트 시프트 레지스터는 nn개의 비트를 저장하는 장치이고, 저장된 내용을 바꾸는 방법은 두 가지뿐이다. 내용을 왼쪽으로 한 칸 밀어낸 다음, 비어 있는 가장 오른쪽 자리에 0이나 1을 넣는다. 이렇게 한 번 바꾸는 것을 이동이라고 부른다. 예를 들어 4비트 시프트 레지스터의 내용이 0001일 때 이동을 한 번 하면 내용은 0010(오른쪽 끝에 0을 넣은 경우)이나 0011(1을 넣은 경우)이 된다.

내용이 모두 0인 nn비트 시프트 레지스터에서 시작한다. 이동할 때마다 레지스터의 내용이 지금까지 나온 모든 내용과 달라지도록 이동을 이어 나가야 한다. nn비트 시프트 레지스터가 가질 수 있는 내용은 2n2^n가지이므로 이런 이동 열의 길이는 최대 2n2^n이다. 어떤 nn에 대해서도 길이가 2n2^n인 열이 하나 이상 존재한다는 사실이 알려져 있다. n=3n = 3일 때는 길이가 23=82^3 = 8인 열이 두 개 있다.

AA = 000 001 010 101 011 111 110 100

BB = 000 001 011 111 110 101 010 100

LNR(Longest Non-Repeating) 수열

양의 정수 nn에 대해 다음 다섯 조건을 모두 만족하는 수열을 생각하자.

  1. 수열의 각 원소는 길이가 nn인 비트 문자열이다.
  2. 수열의 원소는 2n2^n개이다.
  3. 같은 원소가 두 번 나오지 않는다.
  4. 첫 번째 원소의 nn개 비트는 모두 0이다.
  5. 첫 번째를 제외한 각 원소는 바로 앞 원소에서 위에서 설명한 이동 한 번으로 얻는다.

이런 수열을 Longest-Non-Repeating 수열, 줄여서 LNR 수열이라고 부른다. 양의 정수 nn에 대해 위 다섯 조건을 만족하는 LNR 수열 전체의 집합을 S(n)S(n)으로 쓴다.

가장 작은 LNR 수열

LNR 수열 sS(n)s \in S(n)에는 다음과 같이 값 value(s)value(s)를 정한다. ss의 비트 문자열 2n2^n개를 순서대로 이어 붙여 하나의 비트 문자열을 만들고, 이 문자열을 이진수로 읽은 값이 value(s)value(s)이다. 위에서 본 LNR 수열 AA에 대해서는 다음과 같다.

value(A)value(A) = 000001010101011111110100

가장 작은 LNR 수열 ssmall(n)s_{small}(n)S(n)S(n)에 속한 수열 중 value(s)value(s)가 가장 작은 수열이다. n=3n = 3일 때 LNR 수열은 앞에서 본 AABB 두 개뿐이고 value(A)<value(B)value(A) < value(B)이므로 ssmall(3)=As_{small}(3) = A이다. AA에서 비트 문자열 000, 001, 010, 101, 011, 111, 110, 100의 위치는 차례로 1, 2, 3, 4, 5, 6, 7, 8이다.

해야 할 일

양의 정수 n10n \le 10과 길이가 nn인 비트 문자열 ss가 주어지면 ssmall(n)s_{small}(n)을 구해서 그 안에서 ss가 몇 번째 원소인지 출력하라. ssssmall(n)s_{small}(n)의 첫 번째 원소이면 1을, 두 번째 원소이면 2를 출력한다.

입력

입력은 두 줄이다. 첫째 줄에 양의 정수 n10n \le 10이 주어진다. 둘째 줄에 길이가 nn인 비트 문자열 ss가 주어진다.

출력

ssmall(n)s_{small}(n)에서 ss의 위치를 나타내는 양의 정수 하나를 출력한다.

힌트

LNR 수열을 모두 만든 다음 그중에서 가장 작은 것을 고르려고 하지 마라. 이동을 고를 때 0을 밀어 넣는 이동을 1을 밀어 넣는 이동보다 먼저 시도하면 가장 작은 LNR 수열을 찾을 수 있다.