Karl is an aspiring C programmer, and is excited by the risks and rewards of low-level manual memory management. In the program he currently develops, he stores a string containing $$$N$$$ non-zero bytes into a buffer named "buf". By mistake he accidentally made the buffer $$$2 N$$$ bytes in size. The last $$$N$$$ bytes of the buffer consists of only zero-bytes.
Now Karl needs to know the value $$$N$$$, the size of the string, in a separate part of the program. Traditionally you would recover the length of a string using the strlen-function, which reports the position of the first zero-byte in the provided buffer using a linear scan. However, Karl finds that this is much too slow, and that it defeats the advantage of using C in the first place. Can you help Karl efficiently recover $$$N$$$ without crashing his program?
The contents of the buffer in sample interaction 3 are shown here.
This is an interactive problem where interaction proceeds in rounds. In each round your program can attempt to read a byte from the buffer or report the answer (the value of $$$N$$$):
A maximum of $$$2 \lceil{\log_2 N\rceil}$$$ reads can be made. If your program attempts to read from the buffer after reaching the limit, it will get the response "Too many reads" and your program should then exit.
It is guaranteed that $$$2 \leq N \leq 10^{18}$$$.
65 0
buf[1] buf[2] strlen(buf) = 2
50 0 Segmentation fault (core dumped)
buf[1] buf[5] buf[7]
78 67 80 67 Too many reads
buf[0] buf[1] buf[2] buf[3] buf[4]