이진 암호


답안 제출

Points: 6
시간 제한: 2.0s
메모리 제한: 1G

문제 유형

01로 이루어진 문자열을 다음 규칙에 따라 압축하려고 한다.

현재 살펴보는 문자열의 모든 문자가 같다면 그 문자 하나를 압축 결과에 기록한다.

현재 문자열에 01이 모두 존재한다면 다음 순서로 처리한다.

  1. 압축 결과에 -를 기록한다.
  2. 현재 문자열을 길이가 같은 왼쪽 절반과 오른쪽 절반으로 나눈다.
  3. 왼쪽 절반을 압축한 결과와 오른쪽 절반을 압축한 결과를 차례대로 기록한다.

예를 들어 1101은 다음과 같이 압축된다.

  • 1101에는 서로 다른 문자가 있으므로 -를 기록하고 1101로 나눈다.
  • 11은 모든 문자가 같으므로 1을 기록한다.
  • 01에는 서로 다른 문자가 있으므로 -를 기록하고 01로 나눈다.
  • 나누어진 두 문자열에서 각각 01을 기록한다.

따라서 1101을 압축한 결과는 -1-01이다.

이진 문자열이 주어졌을 때, 위 규칙으로 압축한 결과를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문자열의 길이 \(N\)이 주어진다.

둘째 줄에 길이가 \(N\)인 이진 문자열 \(S\)가 주어진다.

출력

\(S\)를 주어진 규칙에 따라 압축한 결과를 출력한다.

제한 사항

  • \(1 \le N \le 2^{18}\)
  • \(N\)은 2의 거듭제곱이다. 즉, 어떤 음이 아닌 정수 \(k\)에 대해 \(N=2^k\)이다.
  • \(S\)는 01로만 이루어져 있다.

예제 입력 1

4
0000

예제 출력 1

0

예제 설명 1

문자열의 모든 문자가 0으로 같으므로 0 하나만 기록한다.

예제 입력 2

4
1101

예제 출력 2

-1-01

예제 설명 2

전체 문자열을 나눈 뒤 왼쪽 11에서는 1을 기록한다. 오른쪽 01은 다시 나누어 -01을 기록하므로 전체 압축 결과는 -1-01이다.


코멘트

현재 작성된 코멘트가 없습니다.