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



Sample input:
3
1 2 3


Sample output:
11

Submission status: Accepted

Solution code:
# compiled by pythran
"""
#pythran export main2()
import numpy as np
i4 = np.int32
i8 = np.int64
MOD = 1000000007


def mod_inv(mod, a):

    old_s, s = 1, 0
    old_t, t = 0, 1
    old_r, r = mod, a

    while r != 0:
        quotient = old_r // r

        old_r, r = r, old_r - quotient * r
        old_s, s = s, old_s - quotient * s
        old_t, t = t, old_t - quotient * t

    return old_t % mod


def main(in_file):
    stdin = open(in_file)
    stdin.readline()
    A = np.array([int(x) for x in stdin.readline().split()])
    s1 = (np.sum(A) % MOD) ** 2 % MOD
    s2 = sum(A ** 2 % MOD) % MOD
    ans = (s1 - s2) % MOD * mod_inv(MOD, 2) % MOD
    print(ans)


def main2():
    main('/dev/stdin')
"""
import os, sys
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
if len(sys.argv) == 1:
    import subprocess
    if p == "":
        pymain = "./" + pymain
    subprocess.call(pymain)
else:
    import gzip, base64, stat
    gz = b'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'
    bin = gzip.decompress(base64.b64decode(gz))
    with open(pymain, "wb") as f:
        f.write(bin)
    os.chmod(pymain, 0o775)

Submission status: Accepted

Solution code:
n = int(input())
a = list(map(int, input().split()))
sum = 0
ans = 0
mod = 1000000007
for i in range(n):
    sum+=a[i]
for i in range(n):
    sum-=a[i]
    ans+=(a[i]*(sum%mod))
    ans%=mod
print(int(ans))

Submission status: Accepted

Solution code:
n = int(input())
lst = list(map(int,input().split()))
mod = 10 ** 9 + 7

ans = 0
S = sum(lst)

for i in range(n-1):
    S = S - lst[i]
    tmp = lst[i] * S
    ans = (ans + tmp) % mod

print(ans)

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int,input().split()))
MOD = 10**9 + 7
S = [0]*N
S[0] = A[0]
for k in range(1,N):
    S[k] = S[k-1] + A[k]
ans = 0
for k in range(N-1,0,-1):
    ans += A[k]*S[k-1]
    ans %= MOD
print(ans)

Submission status: Accepted

Solution code:
MOD = 1000000007

N=int(input())
A = list(map(int, input().split())) 

answer = 0
s = sum(A)

for a in A:
    s -=a
    answer += (a * s)
print(answer%MOD)

Submission status: Accepted

Solution code:
#!/usr/bin/env python3


def solve(N, A):
    MOD = 10**9 + 7
    total = sum(A)
    ans = 0

    for i in range(N - 1):
        total -= A[i]
        ans += A[i] * total
        ans %= MOD

    return ans


def main():
    N = int(input())
    A = list(map(int, input().split()))

    ans = solve(N, A)

    print(ans)


if __name__ == "__main__":
    main()

Submission status: Accepted

Solution code:
N,*A = map(int,open(0).read().split())

S_all = sum(A)**2
diag = sum([a**2 for a in A])

S = S_all-diag
S %= 1000000007
S = (S*pow(2,-1,1000000007))%1000000007

print(S)

Submission status: Accepted

Solution code:
N,*A = map(int,open(0).read().split())

s = sum(A)
CS = [0 for i in range(N+1)]
CS[0] = s
for i in range(len(A)):
  CS[i+1] = CS[i] - A[i]
CS.pop(0)

S = 0
for i,a in enumerate(A):
  S+=CS[i]*a
  S = (S%1000000007)
print(S)

Submission status: Accepted

Solution code:
from sys import stdin
inp = lambda : stdin.readline().strip()

n = int(inp())
mod = 10**9 + 7
a =[int(x) for x in inp().split()]
s = [a[0]]
for i in range(1,n):
    s.append(s[i-1]+a[i])
ans = 0
for i in range(n):
    ans +=  ((a[i]%mod) * (s[-1] - s[i])%mod)%mod
    ans %= mod
print(ans)

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int,input().split()))

S = sum(A)
S2 = sum(map(lambda x:x*x,A))

print(((S*S-S2)//2)%(10**9+7))

Submission status: Accepted

Solution code:
def main():
    mod = 10**9+7
    #n,a = get_input()
    n = int(input())
    a = [int(x) for x in input().split()]
    aa = [x**2 % mod for x in a]
    ans = 0
    asum = sum(a) 
    p = asum ** 2 % mod
    q = sum(aa) % mod
    ans = (p - q) % mod
    if ans < 0:
      ans += mod
    if ans % 2 == 1:
      ans += mod
    ans = ans // 2
    print(ans)
    
if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:
def main():
    mod = 10**9+7
    #n,a = get_input()
    n = int(input())
    a = [int(x) for x in input().split()]
    ans = 0
    asum = sum(a) 
    for i in range(n):
        asum = asum - a[i]
        ans = ( ans + ((a[i] * asum) % mod)) % mod
    
    print(ans)
    
if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:
n = int(input())
arr = list(map(int, input().strip().split(" ")))

mod = int(1e9)+7
ans = [0]*n
sm = arr[-1]
for i in range(n-2,-1,-1):
    ans[i] = sm
    sm += arr[i]
    sm = sm%mod

fa = 0
for i in range(n):
    fa += ans[i]*arr[i]
    fa = fa%mod
    
print(fa)

Submission status: Accepted

Solution code:
n=int(input())
a=list(map(int,input().split()))
mod=10**9+7
s=sum(a)
ans=0
for i in range(n):
	s-=a[i]
	ans=(ans+a[i]*s%mod)%mod
print(ans)

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int, input().split()))

mod = 10**9 + 7

s = sum(A)
key = 0
for i in range(N):
    s -= A[i]
    key += s*A[i]
print(key % mod)

Submission status: Accepted

Solution code:
N = int(input())
A = [int(x) for x in input().split()]
sup = 10**9 + 7 
sumA = 0
total = 0

for i in range(0,N-1):
    sumA += A[i]
    if sumA > sup:
        sumA %= sup
    total += sumA*A[i+1]
    if total > sup:
        total %= sup

print(total)

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int, input().split()))
mod = 10**9 + 7
s = sum(A)
ans = 0
for i in range(N):
    s -= A[i]
    ans += A[i] * s
    ans %= mod
print(ans)

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int, input().split()))
mod = 10**9 + 7
s = sum(A) % mod
ans = 0
for i in range(N):
    s -= A[i]
    if 0 > s:
        s += mod
    ans += A[i] * s
    ans %= mod
print(ans)

Submission status: Accepted

Solution code:
# -*- using:utf-8 -*-

class main:
  def function(n, a):
    mod = 10 **9 +7
    S = [0] * (n + 1)
    for i in range(n):
      S[i + 1] = S[i] + a[i]
    SN = S[-1]
    ans = 0
    for i in range(n - 1):
      cnt = a[i] * (SN - S[i + 1])
      ans += cnt
    print(ans % mod)



if __name__ == "__main__":
  n = int(input())
  a = list(map(int, input().split()))
  main.function(n,a)

Submission status: Accepted

Solution code:
#C - Sum of product of pairs
N = int(input())
A = list(map(int,input().split()))
SUM = 0
jsum= 0
MOD = 1000000007
for j in range(N):
    jsum = (jsum + A[j]) % MOD

for i in range(N-1):
    jsum = (jsum - A[i]) % MOD
    SUM = ( SUM + (jsum * A[i] % MOD ) ) % MOD

# 出力
print(SUM)

Submission status: Accepted

Solution code:
#import 
#=input()
n=int(input())
#=map(int,input().split())
a=list(map(int,input().split()))
#=[list(map(int,input().split())) for _ in range()]
mod = 10 ** 9 + 7

sum = 0
for i in range(n):
    sum += a[i]

s = 0
for i in range(n-1):
    sum -= a[i]
    s = (s + a[i] * sum) % mod
print(s)

Submission status: Accepted

Solution code:
import itertools
N = int(input())
a = list(map(int,input().split()))
a2 = itertools.accumulate(a)
b = [0]
b += list(a2)
s = 0
for i in range(N):
    s += (a[i] * (b[-1] - b[i+1]))
print(s % (10**9+7))

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int, input().split()))

sum_A = 0
S = []

for i in range(1,N):
    sum_A += A[-1*i]
    S.append(sum_A)

ans = 0

for i in range(N-1):
    tmp = A[N-2-i] * S[i]
    ans += tmp

ans = ans % (10 ** 9 + 7)
print(ans)

Submission status: Accepted

Solution code:
import sys
import re
from math import ceil, floor, sqrt, pi, factorial, gcd
from copy import deepcopy
from collections import Counter, deque
from heapq import heapify, heappop, heappush
from itertools import accumulate, product, combinations, combinations_with_replacement
from bisect import bisect, bisect_left, bisect_right
from functools import reduce
from decimal import Decimal, getcontext
# input = sys.stdin.readline
def i_input(): return int(input())
def i_map(): return map(int, input().split())
def i_list(): return list(i_map())
def i_row(N): return [i_input() for _ in range(N)]
def i_row_list(N): return [i_list() for _ in range(N)]
def s_input(): return input()
def s_map(): return input().split()
def s_list(): return list(s_map())
def s_row(N): return [s_input for _ in range(N)]
def s_row_str(N): return [s_list() for _ in range(N)]
def s_row_list(N): return [list(s_input()) for _ in range(N)]
def lcm(a, b): return a * b // gcd(a, b)
sys.setrecursionlimit(10 ** 6)
INF = float('inf')
MOD = 10 ** 9 + 7
num_list = []
str_list = []


def main():
    N = i_input()
    A = i_list()

    cumulative_sum = list(accumulate(map(lambda x:x%MOD,A)))

    sum = 0

    for i in range(1,N):
        sum = (sum + A[i-1] * (cumulative_sum[N-1]-cumulative_sum[i-1]))%MOD

    print(sum)
    return

if __name__ == '__main__':
    main()

Submission status: Accepted

Solution code:

md=10**9+7
t=1
# t=int(input())

for some_num in range(0,t):
    n=int(input())
    vals=[int(i) for i in input().split(" ")]

    s=0
    for i in range(0,n):
        s=(s+vals[i])%md

    csum=0

    for i in range(0,n-1):
        s-=vals[i]

        csum= (csum+vals[i]*s)%md

    print(csum)

Submission status: Accepted

Solution code:
from sys import stdin
nii=lambda:map(int,stdin.readline().split())
lnii=lambda:list(map(int,stdin.readline().split()))

n=int(input())
a=lnii()

mod=10**9+7

total=sum(a)

ans=0
for i in range(n-1):
  total-=a[i]
  ans+=a[i]*total
  ans%=mod

print(ans)

Submission status: Accepted

Solution code:
#!/usr/bin/env python3

n=int(input())  #->n=5
a=list(map(int,input().split()))  #->nl=[1,2,-,n]
mod=int(1e9+7)

# Accumulate
pre=[0]*n
pre[0]=a[0]
for i in range(1,n):  pre[i]=pre[i-1]+a[i]
ans=0
for i in range(1,n):  ans=(ans+(a[i-1]*(pre[n-1]-pre[i-1]))%mod)%mod
print(ans)

Submission status: Accepted

Solution code:
import numpy as np


def main():
    n = int(input())
    As = list(map(int, input().split()))
    mod = 10 ** 9 + 7

    As_sum = sum(As)
    ans = 0

    for i in range(n):
        As_sum -= As[i]
        ans += As_sum * As[i]
        ans %= mod
    ans %= mod
    print(ans)



if __name__ == "__main__":
    main()

Submission status: Accepted

Solution code:
n = int(input())
a = list(map(int, input().split()))
mod = 10**9+7
x = [sum(a)]
for i in a:
    x.append((x[-1]-i)%mod)
r = 0
for i in range(len(a)-1):
    r = (r+a[i]*x[i+1])%mod
print(r)

Submission status: Accepted

Solution code:
import numpy as np


def main():
    n = int(input())
    As = list(map(int, input().split()))
    mod = 10**9 + 7

    As_sum = np.sum(As) % mod
    ans = 0
    for i in range(n):
        As_sum -= As[i]
        As_sum %= mod
        ans += As_sum * As[i]
        ans %= mod
    ans %= mod
    print(ans)


if __name__ == "__main__":
    main()

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int, input().split())) 
 
goukei = 0

sumA = sum(A)
for i in range(N):
    a = A[i]
    sumA = sumA - a
    goukei = goukei + sumA*a

k = 10**9 + 7
print(goukei%k)

Submission status: Accepted

Solution code:
N = int(input())
A = list(map(int, input().split()))
sum_a = 0
sum = 0

for i in range(N):
  sum_a += A[i] 

for i in range(N):
  sum_a -= A[i]
  sum += A[i] * sum_a
  ans = sum % (10**9 + 7)

print(ans)

Submission status: Accepted

Solution code:
import sys; input = sys.stdin.readline
mod = int(1e9)+7
n = int(input())
lis = list(map(int, input().split()))
pre = [0]*n
pre[0] = lis[0]
for i in range(1, n): pre[i] = pre[i-1] + lis[i]
ans = 0
for i in range(1, n): ans = (ans + (lis[i-1]*(pre[n-1] - pre[i-1]))%mod)%mod
print(ans)

Submission status: Accepted

Solution code:
n = int(input())
arr = [int(x) for x in input().split()]
arr.insert(0,0)
prefix = [0 for x in range(n+1)]
for i in range(1,n+1):
    prefix[i] = prefix[i-1]+arr[i];

ans = 0
mod = int(1e9+7)
for i in range(1,n):
    ans += arr[i]*(prefix[n]-prefix[i])
print(ans%mod)

Submission status: Accepted

Solution code:
n=int(input())
A=list(map(int,input().split()))
a=sum(A)
a=a**2
b=0

for j in range(n):
  b+=A[j]**2
if a-b<0:
  c=a-b
  while c<=0:
    c+=mod
  
  ans=c//2
  ans=ans%(10**9+7)
 
else:
  ans=(a-b)//2
  ans=ans%(10**9+7)
 
print(ans)