이진 복원
앞 문제 이진 암호에서는 0과 1로 이루어진 문자열을 다음 규칙에 따라 압축했다.
- 현재 구간의 모든 문자가 같으면 해당 문자 하나를 기록한다.
- 현재 구간에
0과1이 모두 존재하면-를 기록한 뒤, 왼쪽 절반과 오른쪽 절반을 차례대로 압축한다.
이번에는 이 규칙으로 만들어진 암호문과 압축하기 전 문자열의 길이가 주어진다. 암호문을 해석하여 원래의 이진 문자열을 복원하는 프로그램을 작성하시오.
예를 들어 길이가 4인 문자열을 압축한 결과가 -1-01이라면 다음과 같이 복원한다.
- 첫 번째
-는 길이 4인 구간이 두 부분으로 나뉘었다는 뜻이다. - 다음
1은 왼쪽 절반의 모든 문자가1이라는 뜻이므로11로 복원한다. - 다음
-는 오른쪽 절반이 다시 두 부분으로 나뉘었다는 뜻이다. - 이어지는
0과1을 각각 복원한다.
따라서 원래 문자열은 1101이다.
입력
첫째 줄에 원래 이진 문자열의 길이 \(N\)이 주어진다.
둘째 줄에 이진 암호의 규칙으로 만들어진 암호문 \(C\)가 주어진다.
출력
암호문을 복원하여 얻은 길이 \(N\)의 이진 문자열을 출력한다.
제한 사항
- \(1 \le N \le 2^{18}\)
- \(N\)은 2의 거듭제곱이다. 즉, 어떤 음이 아닌 정수 \(k\)에 대해 \(N=2^k\)이다.
- \(1 \le |C| \le 2N-1\)
- \(C\)는
0,1,-로만 이루어져 있다. - \(C\)는 길이가 \(N\)인 이진 문자열을 이진 암호의 규칙으로 압축하여 얻은 올바른 암호문이다.
예제 입력 1
4
-1-01
예제 출력 1
1101
예제 설명 1
첫 번째 -에 따라 전체 구간을 절반으로 나눈다. 왼쪽 절반은 1이므로 11로 복원하고, 오른쪽 절반은 -01이므로 01로 복원한다. 따라서 원래 문자열은 1101이다.
예제 입력 2
8
-01
예제 출력 2
00001111
예제 설명 2
첫 번째 -에 따라 길이 8인 구간을 절반으로 나눈다. 왼쪽 절반은 모두 0, 오른쪽 절반은 모두 1이므로 00001111로 복원된다.
코멘트