피보나치 수는 1로 시작한다. 0번째 피보나치 수는 1이고, 1번째 피보나치 수는 1이다. 2번째 피보나치 수부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 표현하면 F_n=F_n−2+F_n−1 (n≥2)이 된다.
n번째 피보나치 수 하나는 쉽게 구할 수 있지만, 이번 문제는 호락호락하지 않다. 모든 값이 0인 길이 N의 수열이 주어진다. 이때, 다음 쿼리를 주어진 순서대로 수행한 후의 결과를 출력하는 프로그램을 작성해보자.
l r : 수열의 l번째 위치부터 r번째 위치까지의 값들을 각각 F_1,F_2,⋯,F_r−l+1로 바꾼다.첫째 줄에 수열의 크기 N이 주어진다. (1≤N≤1 000 000)
둘째 줄에 쿼리의 개수 Q가 주어진다. (1≤Q≤1 000 000)
셋째 줄부터 Q개 줄에 걸쳐 쿼리에 대한 정보 l, r이 주어진다. (1≤l≤r≤N)
입력으로 주어지는 모든 수는 정수이다.
모든 쿼리를 순서대로 적용한 후, 수열의 모든 수를 공백으로 구분해 출력한다. 단, 수가 너무 커질 수 있으니 각각의 수를 109+7으로 나눈 나머지를 출력한다.