Revenge of Segment Tree

Time Limit: 2000ms
Memory Limit: 32768KB
This problem will be judged on HDU. Original ID: 5086
64-bit integer IO format: %I64d      Java class name: Main

Description

In computer science, a segment tree is a tree data structure for storing intervals, or segments. It allows querying which of the stored segments contain a given point. It is, in principle, a static structure; that is, its content cannot be modified once the structure is built. A similar data structure is the interval tree.
A segment tree for a set I of n intervals uses O(n log n) storage and can be built in O(n log n) time. Segment trees support searching for all the intervals that contain a query point in O(log n + k), k being the number of retrieved intervals or segments.
---Wikipedia

Today, Segment Tree takes revenge on you. As Segment Tree can answer the sum query of a interval sequence easily, your task is calculating the sum of the sum of all continuous sub-sequences of a given number sequence.

Input

The first line contains a single integer T, indicating the number of test cases.

Each test case begins with an integer N, indicating the length of the sequence. Then N integer Ai follows, indicating the sequence.

[Technical Specification]
1. 1 <= T <= 10
2. 1 <= N <= 447 000
3. 0 <= Ai <= 1 000 000 000

Output

For each test case, output the answer mod 1 000 000 007.

Sample Input

2
1
2
3
1 2 3

Sample Output

2
20

Source

Language: 
Theme: 
Share Code? 

Powered by NB231 | Current Style: .