피보나치 기계
시간 제한2초메모리 제한512 MB
구간 증가 연산과, 각 레지스터 값을 피보나치 수의 첨자로 본 합을 구간마다 질의하는 문제를 10^9+7로 나눈 값으로 답한다.
문제
피보나치 수는 다음과 같이 정의된다.
- 일 때
피보나치 기계는 정수 레지스터 개로 이루어진 수열 을 관리하며, 처음에는 모든 레지스터가 이다. 이 기계는 두 가지 연산을 제공한다.
- 더하기: 구간 에 속한 모든 레지스터에 을 더한다. 즉 를 각각 씩 증가시킨다.
- 합: 구간 에 속한 레지스터 값을 색인으로 하는 피보나치 수들의 합, 즉 를 구한다.
피보나치 기계를 시뮬레이션하는 프로그램을 작성하라.
입력
첫 번째 줄에 레지스터의 개수 과 연산의 개수 가 공백으로 구분되어 주어진다 (). 이어지는 개의 줄에는 각각 하나의 연산이 주어지며, 문자 하나와 두 정수 , ()로 구성된다.
D a b는 구간 에 더하기 연산을 수행한다.S a b는 구간 에 합 연산을 수행한다.
합 연산 S 는 적어도 한 번 이상 주어진다.
출력
각 S 연산마다 구한 피보나치 수들의 합을 로 나눈 나머지를 한 줄에 하나씩 출력한다.
참고
예시에서 마지막 질의를 수행하는 시점의 레지스터는 이므로, S 2 3 의 결과는 이다.