만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

피자 쌓기

시간 제한1초메모리 제한1024 MB

요약
크기 i인 피자가 a_i개씩 있을 때, 모든 쌓는 순서에서 위에서 보이는 피자 개수의 총합을 1000000007로 나눈 나머지를 구합니다.
난이도

보통10점 중 6점

유형
조합론, 확률, 수학
정답자
아직 제출이 없습니다

문제

크기가 11, 22, ⋯\cdots, NN인 피자가 각각 a1a_1, a2a_2, ⋯\cdots, aNa_N개씩 있다. 이 피자들을 중심이 서로 겹치도록 쌓으려고 한다.

가능한 모든 순서에 대해, 위에서 내려다봤을 때 보이는 피자 개수의 합을 구한다. 어떤 피자가 보인다는 것은, 그 위에 쌓인 모든 피자보다 크다는 뜻이다.

크기가 같은 피자끼리는 구분하지 않는다. 따라서 크기가 같은 피자끼리의 순서는 고려하지 않는다.

입력

첫째 줄에 가장 큰 피자의 크기 NN이 주어진다.

다음 줄에는 크기가 ii인 피자의 개수 aia_i가 공백으로 구분되어 주어진다.

출력

가능한 모든 순서에 대해, 보이는 피자 개수의 합을 1 000 000 0071\,000\,000\,007으로 나눈 나머지를 출력한다.

제한

  • 1≤N≤300 0001 \leq N \leq 300\,000
  • 1≤ai≤500 0001 \leq a_i \leq 500\,000
  • ∑ai≤500 000\sum a_i \leq 500\,000

힌트

첫 번째 예제에서 가능한 모든 순서와 각 경우에 보이는 피자 수는 다음과 같다. 위에 있는 피자부터 순서대로 적었다.

  • (1, 2, 2): 2개
  • (2, 1, 2): 1개
  • (2, 2, 1): 1개

보이는 피자 개수의 합은 2+1+1=42+1+1=4개이다.

예제2

  1. 예제 1

    입력
    2
    1 2
    
    예상 출력
    4
    
  2. 예제 2

    입력
    3
    1 1 1
    
    예상 출력
    11