// Задача AT6 — ПЪТУВАНЕ ВЪВ ВРЕМЕТО
// Решение с кодови думи от 13 бита (максимално h = 13, частичен резултат ~75%).
//
// Същата идея като пълното решение (виж него за обяснението), но с по-дълги кодови
// думи: 13-битови думи с точно седем единици. Такива има C(13, 7) = 1716 >= 920,
// колкото ни трябват, а подвиканата позиция е най-много 13.



namespace {

const int ALPHABET_BITS = 13;
const int SET_BITS = 7;

int codeword[2000];
int codewordCount = 0;

void prepareCodewords() {
    if (codewordCount > 0) {
        return;
    }
    codewordCount = 1;   // индекс 0 не се ползва
    for (int value = 0; value < (1 << ALPHABET_BITS); value++) {
        if (__builtin_popcount(value) == SET_BITS) {
            codeword[codewordCount++] = value;
        }
    }
}

}  // namespace

int encode(int N, int x, int y) {
    prepareCodewords();
    int distinguishing = codeword[x] & ~codeword[y];
    return __builtin_ctz(distinguishing) + 1;
}

bool answer(int N, int q, int h) {
    prepareCodewords();
    return (codeword[q] >> (h - 1)) & 1;
}
