FIBOSUM - Fibonacci Sum

The Fibonacci sequence is defined by the following relation:

  • F(0) = 0
  • F(1) = 1
  • F(N) = F(N - 1) + F(N - 2), N >= 2

Your task is very simple. Given two non-negative integers N and M, you have to calculate the sum (F(N) + F(N + 1) + ... + F(M)) mod 1000000007.

Input

The first line contains an integer T (the number of test cases). Then, T lines follow. Each test case consists of a single line with two non-negative integers N and M.

Output

For each test case you have to output a single line containing the answer for the task.

Example

Input:
3
0 3
3 5
10 19

Output:
4
10
10857

Constraints

  • T <= 1000
  • 0 <= N <= M <= 109

Added by:David Gómez
Date:2010-12-04
Time limit:1s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:All except: ASM64
Resource:My Own

hide comments
2013-09-11 15:50:43 Ouditchya Sinha
@Rafael Perrella : Thank you for answering my question & congratulations for solving this problem in 0.00s. :)

Yes, I solved this using matrix exponentiation. O(__builtin_popcount(N)) is definitely better than O( log(N) ). Can you please provide any link where this type of algorithm is discussed? Or maybe we can start a thread on forum?

@Rafael Perrella : Thank You for sharing your Algorithm!! I'll try to understand it. :)

Last edit: 2013-09-12 12:09:37
2013-09-11 12:05:03 Rafael Perrella
@Mayank 999975531
@Ouditchya Did you calculate F(N) using matrix exponentiation? It's not fast enough to get 0.00, I guess. My algorithm, for a given N, calculates F(N) in O(__builtin_popcount(N)) time, with a really small constant. I wrote this algorithm based on the following property:
F(n+k) = F(k)F(n+1) + F(k-1)F(n)
2013-09-07 04:37:52 YoungMoon KO
Excellent problem. I've learned a lot of things about Fibonacci sequence.
Refers http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibFormula.html#exact

Last edit: 2013-09-07 04:38:51
2013-09-06 20:40:18 hiddenman
gud 1
learn a lot abt fibo series....... :)
2013-08-26 20:04:43 Ouditchya Sinha
How is 0.00s possible? I can only get 0.01s.
2013-08-25 09:33:06 Anubhav Balodhi
got ac in 3rd try, learnt a lot about fibonacci numbers :D
2013-08-19 13:06:10 Amitayush Thakur
good question to learn application of Divide and conquer :)
2013-07-10 17:57:08 Vijay Jain
after that u may try solving this question:
http://www.spoj.com/problems/BUILDTOW/
2013-07-09 09:26:47 Joey Tribbiani
How do you store the fibonacci number?
As in how to store F(1000000000).
Cant use long long int, overflows.
2013-06-20 20:51:55 No_words
Nice Question. Learned a lot ! :)
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.