행렬 곱셈 순서

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

문제

크기가 N×MN \times M인 행렬 AA와 크기가 M×KM \times K인 행렬 BB를 곱할 때 필요한 곱셈 연산은 모두 N×M×KN \times M \times K번이다. 행렬 여러 개를 곱할 때 필요한 곱셈 연산의 수는 곱하는 순서에 따라 달라진다.

AA의 크기가 5×35 \times 3, BB의 크기가 3×23 \times 2, CC의 크기가 2×62 \times 6인 경우에 곱 ABCABC를 구하는 두 가지 순서를 보자.

  • ABAB를 먼저 곱한 다음 CC를 곱하면, (AB)C(AB)C에 필요한 곱셈 연산은 5×3×2+5×2×6=30+60=905 \times 3 \times 2 + 5 \times 2 \times 6 = 30 + 60 = 90번이다.
  • BCBC를 먼저 곱한 다음 앞에 AA를 곱하면, A(BC)A(BC)에 필요한 곱셈 연산은 3×2×6+5×3×6=36+90=1263 \times 2 \times 6 + 5 \times 3 \times 6 = 36 + 90 = 126번이다.

결과 행렬은 같지만 곱하는 순서에 따라 연산 횟수가 달라진다.

행렬 NN개의 크기가 주어졌을 때, 모든 행렬을 곱하는 데 필요한 곱셈 연산 횟수의 최솟값을 구하는 프로그램을 작성하시오. 입력으로 주어진 행렬의 순서를 바꾸면 안 된다.

입력

첫째 줄에 행렬의 개수 NN이 주어진다. (1N5001 \le N \le 500)

둘째 줄부터 NN개 줄에 행렬의 크기 rrcc가 곱하는 순서대로 한 줄에 하나씩 주어진다. (1r,c5001 \le r, c \le 500)

주어진 순서 그대로 곱셈을 할 수 있는 크기만 입력으로 주어진다. 즉, ii번째 행렬의 열 개수는 i+1i+1번째 행렬의 행 개수와 같다.

출력

첫째 줄에 입력으로 주어진 행렬을 모두 곱하는 데 필요한 곱셈 연산의 최솟값을 출력한다. 정답은 23112^{31}-1보다 작거나 같다. 최악의 순서로 곱해도 연산 횟수는 23112^{31}-1보다 작거나 같다.