니콜라가 수학 시간에 질문을 끝없이 던지자, 선생님은 반 전체에 다음 과제를 냈다.
길이가 N인 이진 문자열은 모두 2N개다. 이 2N개를 한 줄에 하나씩, 각 문자열이 정확히 한 번씩만 나오도록 나열한다. 이때 이웃한 두 줄의 거리가 항상 1이어야 한다.
두 이진 문자열의 거리는 같은 위치의 값이 서로 다른 자리의 개수다. 예를 들면 다음과 같다.
- 거리(111, 000) = 3 (첫째, 둘째, 셋째 자리가 다르다)
- 거리(111100, 101010) = 3 (둘째, 넷째, 다섯째 자리가 다르다)
- 거리(110011, 110011) = 0
조건을 만족하는 나열은 여러 가지다. 이 문제에서는 그중 하나만 정답으로 인정한다. 줄 번호를 0부터 세어, i번째 줄에는 i⊕⌊i/2⌋를 N자리 이진수로 쓴다. 여기서 ⊕는 비트 단위 배타적 논리합이고, 자리가 모자라면 앞을 '0'으로 채운다. 이 나열이 반사 이진 그레이 코드이며, 이웃한 두 줄은 정확히 한 자리에서만 다르다.