Problem:
Score : 300 points

Problem Statement

Given are N integers A_1,\ldots,A_N.

Find the sum of A_i \times A_j over all pairs (i,j) such that 1\leq i < j \leq N, modulo (10^9+7).

Constraints

2 \leq N \leq 2\times 10^5

0 \leq A_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 \ldots A_N

Output

Print \sum_{i=1}^{N-1}\sum_{j=i+1}^{N} A_i A_j, modulo (10^9+7).

Sample Input 1

3
1 2 3

Sample Output 1

11

We have 1 \times 2 + 1 \times 3 + 2 \times 3 = 11.

Sample Input 2

4
141421356 17320508 22360679 244949

Sample Output 2

437235829

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

/*
	---------O7Oo7oO7O-------------
*/

#include <bits/stdc++.h>

#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
using namespace std;
#define all(v) v.begin(),v.end()

const int mod = 1000*1000*1000 +7;
int Bin_expo(int n, int b)
{
	int res = 1;
	while (b > 0)
	{
		if (b & 1)
		{
			res = (res * n) % mod;

		}
		n = (n * n)  % mod;


		b /= 2;

	}
	return res % mod;
}


int32_t main()
{
	IOS


	

	int n;
	cin>>n;
	vector<int> v(n);
	vector<int> suf(n,0),pref(n);
	int p = 0;
	for(int i=0;i<n;i++)
	{
		cin>>v[i];
		
		if(i==0)
			pref[i] = v[i];
		else
			pref[i] = pref[i-1] +v[i];
		

	}

	suf[n-1] = v[n-1];
	for(int i=n-2;i>=0;i--)
	{
		suf[i] = (suf[i+1] + v[i]) % mod;
	}

	for(int i=0;i<n-1;i++)
	{
		p += (v[i] * suf[i+1]) % mod;
		p%=mod;
		if(p<0)
			p+=mod;
	}

	cout<<p<<"\n";
}