Se consideră un arbore binar complet cu niveluri. Nodurile sunt numerotate cu numere naturale începând de la , astfel încât nodul are doi fii: și . Astfel, avem următoarea structură:

O furnică aflată în nodul poate face un pas folosind una dintre următoarele reguli:
- Dacă , furnica poate urca în părintele lui (egal cu ).
- Dacă , furnica poate coborî în fiul stâng al lui (egal cu , par).
- Dacă , furnica poate coborî în fiul drept al lui (egal cu , impar).
- Dacă , furnica poate trece la fratele lui (egal cu ).
Notă: prin se înțelege operația sau-exclusiv (XOR) pe biți, reprezentată în C/C++ prin operatorul ^.
Se dau întrebări, fiecare reprezentată prin două numere și , cu semnificația: „Câte drumuri distincte formate din exact pași de furnică există de la nodul la nodul ?”
Un drum este reprezentat printr-un șir de lungime cu valori între și , în care fiecare valoare indică tipul pasului făcut, în ordine. Toți pașii trebuie să fie legali în momentul efectuării lor (de exemplu, din rădăcină nu se poate urca la părinte, iar dintr-o frunză nu se poate coborî la fii). De exemplu, dacă , un drum valid de la nodul la nodul de lungime poate fi reprezentat de șirul , iar nodurile parcurse sunt .
Două drumuri sunt considerate distincte dacă șirurile care le reprezintă diferă în cel puțin o poziție (sau, echivalent, dacă șirurile de noduri parcurse, în ordine, diferă în cel puțin o poziție).
Cerință
Se cere să se afișeze răspunsul pentru fiecare întrebare, în ordinea în care acestea au fost date. Deoarece acestea pot fi foarte mari, se vor afișa modulo .
Date de intrare
Pe prima linie a fișierului de intrare furnica.in se află numerele naturale și , în această ordine. Pe fiecare dintre următoarele linii se află câte două numere naturale și , în această ordine, descriind o întrebare.
Date de ieșire
În fișierul de ieșire furnica.out se vor afișa linii; pe linia se va găsi răspunsul la întrebarea (modulo ), în ordinea în care întrebările au fost citite.
Restricții și precizări
| # | Punctaj | Restricții |
|---|---|---|
| , | ||
| , | ||
| , , | ||
| , | ||
| , pentru toate întrebările | ||
| , toate valorile din întrebări sunt egale | ||
| Toate valorile din întrebări sunt egale | ||
| Fără restricții suplimentare |
Exemplu
furnica.in
3 4
2 1
1 2
4 2
2 4
furnica.out
1
2
1
11
Explicație
Arborele are niveluri, deci nodurile sunt , , , , iar frunzele sunt .
- , : singurul drum de un pas de la la este (coborârea pe fiul stâng), deci răspunsul este .
- , : pentru a reveni în rădăcină în doi pași, furnica trebuie să coboare la un fiu și apoi să urce înapoi: () și (), deci răspunsul este .
- , : singura posibilitate este (), deci răspunsul este .
- , : există drumuri distincte de lungime care pornesc din nodul și se termină în nodul (unul dintre ele fiind din exemplul de mai sus).