CSES - Fibonacci
  • Time limit: 4.00 s
  • Memory limit: 512 MB

Fibonaccin lukujono (Fn)n=0(F_n)_{n=0}^\infty määritellään siten, että F0=0F_0 = 0, F1=1F_1 = 1 ja Fn=Fn1+Fn2F_n = F_{n-1} + F_{n-2} kaikille n2n\geq 2. Ensimmäiset lukujonon alkiot ovat siis (0,1,1,2,3,5,8,13,)(0, 1, 1, 2, 3, 5, 8, 13, \ldots).

Taulukossa on nn epänegatiivista lukua T[1],T[2],,T[n]T[1], T[2], \ldots, T[n]. Aluksi kaikki luvut ovat 00. Tehtäväsi on toteuttaa seuraavat operaatiot:

  1. kasvata lukuja T[a],T[a+1],T[a+2],,T[b]T[a], T[a+1], T[a+2], \ldots, T{[}{b}{]} arvolla xx
  2. laske summa FT[a]+FT[a+1]+FT[a+2]++FT[b]F_{T[a]} + F_{T[a+1]} + F_{T[a+2]} + \ldots + F_{T{[}{b}{]}} modulo 109+710^9+7

Syöte

Syötteen ensimmäisellä rivillä on kaksi lukua nn ja qq, taulukon koko ja kyselyjen määrä. Tämän jälkeen syötteessä on qq riviä, joista jokainen kuvaa yhden kyselyn.

Jos kysely on tyyppiä 1, rivi on muotoa "1 aa bb xx". Tämä tarkoittaa, että välin [a,b][a,b] lukuja tulee kasvattaa xx:llä.

Jos kysely on tyyppiä 2, rivi on muotoa "2 aa bb". Tämä tarkoittaa, että tulee laskea välin [a,b][a,b] lukuja vastaavien Fibonaccin lukujen summa modulo 109+710^9+7.

Tuloste

Tulosta jokaisesta tyypin 2 kyselystä lukujen summa omalle rivilleen.

Rajat

  • 1n31051 \le n \le 3\cdot 10^5
  • 1q31051 \le q \le 3\cdot 10^5
  • 1abn1 \le a \le b \le n
  • 1x1091 \le x \le 10^9

Esimerkki

Syöte:

5 5
2 2 4
1 3 4 2
2 2 4
1 1 3 3
2 1 5

Tuloste:

0
2
10