furnica

Time limit: 0.35s Memory limit: 256MB Input: furnica.in Output: furnica.out

Se consideră un arbore binar complet cu TT niveluri. Nodurile sunt numerotate cu numere naturale începând de la 11, astfel încât nodul XX are doi fii: 2X2 \cdot X și 2X+12 \cdot X + 1. Astfel, avem următoarea structură:

O furnică aflată în nodul XX poate face un pas folosind una dintre următoarele 44 reguli:

  1. Dacă X>1X > 1, furnica poate urca în părintele lui XX (egal cu X/2\lfloor X / 2 \rfloor).
  2. Dacă X<2T1X < 2^{T-1}, furnica poate coborî în fiul stâng al lui XX (egal cu 2X2 \cdot X, par).
  3. Dacă X<2T1X < 2^{T-1}, furnica poate coborî în fiul drept al lui XX (egal cu 2X+12 \cdot X + 1, impar).
  4. Dacă X>1X > 1, furnica poate trece la fratele lui XX (egal cu X1X \oplus 1).

Notă: prin \oplus se înțelege operația sau-exclusiv (XOR) pe biți, reprezentată în C/C++ prin operatorul ^.

Se dau QQ întrebări, fiecare reprezentată prin două numere NN și KK, cu semnificația: „Câte drumuri distincte formate din exact KK pași de furnică există de la nodul 11 la nodul NN?”

Un drum este reprezentat printr-un șir de lungime KK cu valori între 11 și 44, î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ă T3T \geq 3, un drum valid de la nodul 11 la nodul 22 de lungime 44 poate fi reprezentat de șirul [2,3,4,1][2, 3, 4, 1], iar nodurile parcurse sunt 125421 \to 2 \to 5 \to 4 \to 2.

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 998244353998244353.

Date de intrare

Pe prima linie a fișierului de intrare furnica.in se află numerele naturale TT și QQ, în această ordine. Pe fiecare dintre următoarele QQ linii se află câte două numere naturale NN și KK, în această ordine, descriind o întrebare.

Date de ieșire

În fișierul de ieșire furnica.out se vor afișa QQ linii; pe linia ii se va găsi răspunsul la întrebarea ii (modulo 998244353998244353), în ordinea în care întrebările au fost citite.

Restricții și precizări

  • 1T601 \leq T \leq 60
  • 1Q1 0001 \leq Q \leq 1 \ 000
  • 1N2T11 \leq N \leq 2^T - 1
  • 1K10181 \leq K \leq 10^{18}
# Punctaj Restricții
11 33 Q=1Q = 1, K12K \leq 12
22 55 Q=1Q = 1, K18K \leq 18
33 77 Q=1Q = 1, K106K \leq 10^6, T6T \leq 6
44 1010 Q=1Q = 1, K106K \leq 10^6
55 88 K106K \leq 10^6, N=1N = 1 pentru toate întrebările
66 88 K106K \leq 10^6, toate valorile KK din întrebări sunt egale
77 1212 K106K \leq 10^6
88 1414 Q20Q \leq 20
99 1313 Toate valorile KK din întrebări sunt egale
1010 2020 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 T=3T = 3 niveluri, deci nodurile sunt 11, 22, \dots, 77, iar frunzele sunt {4,5,6,7}\{4, 5, 6, 7\}.

  • N=2N = 2, K=1K = 1: singurul drum de un pas de la 11 la 22 este [2][2] (coborârea pe fiul stâng), deci răspunsul este 11.
  • N=1N = 1, K=2K = 2: pentru a reveni în rădăcină în doi pași, furnica trebuie să coboare la un fiu și apoi să urce înapoi: [2,1][2, 1] (1211 \to 2 \to 1) și [3,1][3, 1] (1311 \to 3 \to 1), deci răspunsul este 22.
  • N=4N = 4, K=2K = 2: singura posibilitate este [2,2][2, 2] (1241 \to 2 \to 4), deci răspunsul este 11.
  • N=2N = 2, K=4K = 4: există 1111 drumuri distincte de lungime 44 care pornesc din nodul 11 și se termină în nodul 22 (unul dintre ele fiind [2,3,4,1][2, 3, 4, 1] din exemplul de mai sus).

Log in or sign up to be able to send submissions!