Problem A
Hamiltonian Hypercube
Hypercube graphs are fascinatingly regular, hence you have devoted a lot of time studying the mathematics related to them. The vertices of a hypercube graph of dimension $n$ are all binary strings of length $n$, and two vertices are connected if they differ in a single position. There are many interesting relationships between hypercube graphs and error-correcting code.
One such relationship concerns the $n$-bit Gray Code, which is an ordering of the binary strings of length $n$, defined recursively as follows. The sequence of words in the $n$-bit code first consists of the words of the $(n-1)$-bit code, each prepended by a $0$, followed by the same words in reverse order, each prepended by a $1$. The $1$-bit Gray Code just consists of a $0$ and a $1$. For example the $3$-bit Gray Code is the following sequence:
\[ 000,001,011,010,110,111,101,100 \]Now, the $n$-bit Gray Code forms a Hamiltonian path in the $n$-dimensional hypercube, i.e., a path that visits every vertex exactly once (see Figure 1).
You wonder how many vertices there are between the vertices $0^ n$ ($n$ zeros) and $1^ n$ ($n$ ones) on that path. Obviously it will be somewhere between $2^{n-1}-1$ and $2^ n-2$, since in general $0^ n$ is the first vertex, and $1^ n$ is somewhere in the second half of the path. After finding an elegant answer to this question you ask yourself whether you can generalise the answer by writing a program that can determine the number of vertices between two arbitrary vertices of the hypercube, in the path corresponding to the Gray Code.
Input
The input consists of a single line, containing:
-
one integer $n$ ($1 \leq n \leq 60$), the dimension of the hypercube
-
two binary strings $a$ and $b$, both of length $n$, where $a$ appears before $b$ in the $n$-bit Gray Code.
Output
Output the number of code words between $a$ and $b$ in the $n$-bit Gray Code.
Sample Input 1 | Sample Output 1 |
---|---|
3 001 111 |
3 |
Sample Input 2 | Sample Output 2 |
---|---|
3 110 100 |
2 |