Hipersir

Time limit: 0.4s Memory limit: 256MB Input: hipersir.in Output: hipersir.out

Să considerăm un şir de cifre ss, si să fie S(s)S(s) mulţimea subşirurilor nevide ale lui ss (de exemplu, dacă s=123s = 123 atunci S(s)={1,2,3,12,13,23,123}S(s) = \{1, 2, 3, 12, 13, 23, 123\}). Fie hipervaloarea h(s)h(s) a lui ss suma elementelor lui S(s)S(s), considerate ca numere in baza 10 (de exemplu, h(123)=1+2+3+12+13+23+123=177h(123) = 1 + 2 + 3 + 12 + 13 + 23 + 123 = 177).

Cerință

Se dă un şir de cifre c1,c2,,cNc_1, c_2, \dots, c_N, şi QQ operaţii de două tipuri:

  • 1 a x1 \ a \ x, prin care cac_a ia valoarea xx.
  • 2 a b2 \ a \ b, prin care se cere h(ca,ca+1,,cb)h(c_a, c_{a+1}, \dots, c_b) modulo 1 000 000 0071 \ 000 \ 000 \ 007.

Să se efectueze toate aceste operaţii.

Date de intrare

Fişierul de intrare hipersir.in conţine, pe prima linie de input, numerele NN si QQ.

Pe a doua linie se găseşte şirul de cifre cc.

Pe următoarele QQ linii se găsesc operaţiile efectuate.

Date de ieșire

În fişierul de ieşire hipersir.out se vor afişa rezultatele operaţiilor, pe linii diferite.

Restricții și precizări

  • 1N300 0001 \leq N \leq 300 \ 000
  • 1Q300 0001 \leq Q \leq 300 \ 000
  • Pentru teste in valoare de 2020 de puncte: 1N151 \leq N \leq 15, 1Q1001 \leq Q \leq 100.
  • Pentru alte teste in valoare de 2020 de puncte: 1N1 0001 \leq N \leq 1 \ 000, 1Q1 0001 \leq Q \leq 1 \ 000.

Exemplul 1

hipersir.in

3 4
000
1 1 1
1 2 2
1 3 3
2 1 3

hipersir.out

177

Exemplul 2

hipersir.in

10 10
1373429614
1 7 1
2 7 8
1 8 8
1 3 0
1 5 3
1 2 8
2 1 9
2 5 8
1 1 2
1 3 8

hipersir.out

23
530826057
4585

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