나누기

아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

NN개의 정수 수열 A_1,A_2,,A_NA\_1, A\_2, \dots , A\_N이 주어진다. 수열을 각각이 연속된 네 부분으로 나누려고 한다. 단, 각 부분은 최소 하나의 수를 포함해야 한다. 또, 각 부분의 합은 모두 같아야 한다. 즉, 어떤 i,j,ki, j, k (1i<j<k<N1 \le i < j < k < N)에 대해서 \[A_1,, A_i],\[A_i+1,,A_j],\[A_j+1,,A_k],\[A_k+1,,A_N]\[A\_1, \dots, A\_i], \[A\_{i+1}, \dots, A\_j], \[A\_{j+1}, \dots, A\_k], \[A\_{k+1}, \dots, A\_N]으로 나눈다.

예를 들어 주어진 수열이 4,1,2,1,3,1,2,2,1,34, −1, 2, 1, −3, 1, 2, 2, 1, 3이라고 하자. 이 수열을 아래와 같이 나누면 각 부분의 합이 달라서 허용되는 형태가 아니다.

\[4,1,2],\[1,3,1,2],\[2,1],\[3]\[4, −1, 2], \[1, −3, 1, 2], \[2, 1], \[3]

아래과 같이 나눈 경우 각 부분의 합이 모두 같다.

\[4,1],\[2,1],\[3,1,2,2,1],\[3]\[4, −1], \[2, 1], \[−3, 1, 2, 2, 1], \[3]

아래와 같이 나눈 경우들도 각 부분의 합이 모두 같다.

\[4,1],\[2,1,3,1,2],\[2,1],\[3]\[4, −1], \[2, 1, −3, 1, 2], \[2, 1], \[3] 혹은 \[4,1,2,1,3],\[1,2],\[2,1],\[3]\[4, −1, 2, 1, −3], \[1, 2], \[2, 1], \[3]

수열을 입력 받아 위와 같이 나눌 수 있는 가능한 방법의 개수를 계산하는 프로그램을 작성하라.

입력

첫 번째 줄에 수열의 길이 NN이 주어진다.

두 번째 줄에 NN개의 정수 A_1,A_2,,A_NA\_1, A\_2, \dots , A\_N이 공백 하나씩을 사이로 두고 주어진다.

출력

첫 번째 줄에 가능한 방법의 개수를 출력한다.

출력 값이 매우 클 수 있으므로 C, C++ 언어에서는 long long 형의 변수를, Java에서는 long 형의 변수를 사용해야 한다.

제한

  • 4N1000˜004 \le N \le 100\~000
  • 모든 1iN1 \le i \le N에 대해 10˜00A_i10˜00-1\~000 \le A\_i \le 1\~000