그레이 코드

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

문제

이진수는 밑이 22인 수이고, 각 자리(비트)의 자릿값은 22의 거듭제곱이다. 예를 들어 십진수 2323은 이진수로 1011110111인데, 다음이 성립하기 때문이다.

(1×24)+(0×23)+(1×22)+(1×21)+(1×20)=16+4+2+1=23(1 \times 2^4) + (0 \times 2^3) + (1 \times 2^2) + (1 \times 2^1) + (1 \times 2^0) = 16 + 4 + 2 + 1 = 23

그레이 코드 수열은 이진값을 나열한 것으로, 각 값이 바로 앞 값과 정확히 한 비트만 다르다. 아래 표는 3비트 이진수의 표준 그레이 코드 수열이다.

이진수 수열000001010011100101110111
표준 그레이 코드 수열000001011010110111101100

이진수를 대응하는 표준 그레이 코드 값으로 바꾸는 방법은 아주 간단하다. 이진값 011011을 바꾼다고 하자. 먼저 첫 비트를 그대로 옮겨 적는다.

0 1 1
v
0

둘째 비트는 주어진 이진수의 첫째 비트와 둘째 비트를 더해서 얻는다. 합은 0+1=10 + 1 = 1이다.

0 + 1 1
    v
0   1

셋째 비트는 주어진 이진수의 둘째 비트와 셋째 비트를 더해서 얻는다. 합은 이진수로 1+1=101 + 1 = 10이지만 올림은 버리므로 오른쪽 끝 비트인 00만 취한다.

0 1 + 1
      v
0 1   0

따라서 답은 010010이다.

일반적으로 첫 비트를 빼면, 표준 그레이 코드의 kk번째 비트는 주어진 이진수의 k1k-1번째 비트와 kk번째 비트를 더한 뒤 올림을 버려서 얻는다. 올림을 버리는 덧셈은 다음 네 가지가 전부다.

  0    0    1    1
+ 0  + 1  + 0  + 1
---  ---  ---  ---
  0    1    1    0

nn비트 이진값을 대응하는 nn비트 표준 그레이 코드 값으로 바꾸는 프로그램을 작성하시오. 1n201 \le n \le 20이다.

입력

입력은 두 줄이다.

  1. 첫째 줄에 비트 수 nn이 주어진다. 1n201 \le n \le 20이다.
  2. 둘째 줄에 nn비트 이진수를 나타내는, 길이가 nn인 비트 문자열이 주어진다.

출력

주어진 nn비트 이진수에 대응하는 표준 그레이 코드를 길이 nn인 비트 문자열로 출력한다.