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

یک آرایه از اعداد صحیح مثل \(a_1, a_2, \dots, a_n\,\) داریم. در \(q\) مرحله یک عملیات مثل زیر روی آن انجام می‌دهیم.

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

  • \(a_{\ell} = a_{\ell} + fib_1\)
  • \(a_{\ell + 1} = a_{\ell + 1} + fib_2\)
  • \(\dots\)
  • \(a_r = a_r + fib_{r-\ell + 1}\)

می‌شود که منظور از \(fib_i\) جمله‌ی \(i\)ام دنباله فیبوناچی است. دنباله فیبوناچی به صورت زیر تعریف می‌شود:

\[ fib_n = \begin{cases} 1 & n = 1 \\ 1 & n = 2 \\ fib_{n - 1} + fib_{n - 2} & n > 2 \end{cases} \]

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

ورودی

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

در سطر دوم ورودی، \(n\) عدد صحیح \(a_1, a_2, \dots, a_n\,\) که با یک فاصله از هم جدا شده‌اند داده می‌شود. \[1 \leq a_i \leq 10^9\]

در \(q\) سطر بعدی، در هر سطر دو عدد صحیح \(\ell\) و \(r\) داده می‌شود که نشان‌دهنده‌ی بازه‌ی عملیات است. \[1 \leq \ell \leq r \leq n\]

خروجی

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

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

مثال‌ها

ورودی نمونه ۱

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

خروجی نمونه ۱

2 4 6 6 6

ورودی نمونه ۲

3 2
2 4 1
1 3
2 3

خروجی نمونه ۲

3 6 4
ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.