فیبوجمع


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

یک آرایه از اعداد صحیح مثل a1,a2,,ana_1, a_2, \dots, a_n\, داریم. در qq مرحله یک عملیات مثل زیر روی آن انجام می‌دهیم.

دو عدد صحیح مثل \ell و rr انتخاب می‌کنیم که 1rn1 \leq \ell \leq r \leq n باشد و سپس مقدار

  • a=a+fib1a_{\ell} = a_{\ell} + fib_1
  • a+1=a+1+fib2a_{\ell + 1} = a_{\ell + 1} + fib_2
  • \dots
  • ar=ar+fibr+1a_r = a_r + fib_{r-\ell + 1}

می‌شود که منظور از fibifib_i جمله‌ی iiام دنباله فیبوناچی است. دنباله فیبوناچی به صورت زیر تعریف می‌شود:

fibn={1n=11n=2fibn1+fibn2n>2 fib_n = \begin{cases} 1 & n = 1 \\ 1 & n = 2 \\ fib_{n - 1} + fib_{n - 2} & n > 2 \end{cases}

از شما می‌خواهیم بعد از پایان این عملیات‌ها، مقدار نهایی اعضای آرایه را چاپ کنید. چون این مقدار می‌تواند خیلی بزرگ باشد. صرفاً باقی‌مانده هر عدد آرایه را بر 109+710^9 + 7 چاپ کنید.

ورودی🔗

در سطر اول ورودی، دو عدد صحیح و مثبت nn و qq که با یک فاصله از هم جدا شده‌اند، داده می‌شود. 1n,q1000001 \leq n, q \leq 100 \, 000

در سطر دوم ورودی، nn عدد صحیح a1,a2,,ana_1, a_2, \dots, a_n\, که با یک فاصله از هم جدا شده‌اند داده می‌شود. 1ai1091 \leq a_i \leq 10^9

در qq سطر بعدی، در هر سطر دو عدد صحیح \ell و rr داده می‌شود که نشان‌دهنده‌ی بازه‌ی عملیات است. 1rn1 \leq \ell \leq r \leq n

خروجی🔗

در تنها سطر خروجی، nn عدد صحیح که با یک فاصله از هم جدا شده‌اند را چاپ کنید که وضعیت نهایی آرایه‌ی aa را نشان می‌دهد.

چون ممکن است مقدار اعداد آرایه خیلی بزرگ شود، باقی‌مانده‌ی این اعداد را بر 109+710^9 + 7 چاپ کنید.

مثال‌ها🔗

ورودی نمونه ۱🔗

5 3
1 2 3 4 5
2 4
1 3
5 5
Plain text

خروجی نمونه ۱🔗

2 4 6 6 6
Plain text

ورودی نمونه ۲🔗

3 2
2 4 1
1 3
2 3
Plain text

خروجی نمونه ۲🔗

3 6 4
Plain text