/* 算法竞赛入门经典 例题 9-7 最优三角剖分
* f(i,j)定义为:从顶点i到顶点j所构成的子多边形的最大三角剖分权和
* 三角形权值为三个顶点权值之和
* f(i,j) = max{f(i,k) + f(k,j) + w(i,j,k)} i<j
* */
import java.util.Scanner;
public class WeightTriangulation {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] v = new int[n + 1];
int[][] f = new int[n + 1][n + 1];
int[][] s = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
v[i] = scanner.nextInt();
f[i][i] = 0;
}
for (int l = 1; l <= n - 1; l++) {
for (int i = 1; i <= n - l; i++) {
int j = l + i;
if (l == 1) {
f[i][j] = 0;
continue;
}
f[i][j] = Integer.MIN_VALUE;
for (int k = i + 1; k < j; k++) {
int t = f[i][k] + f[k][j] + v[i] * v[k] * v[j];
if (f[i][j] < t) {
f[i][j] = t;
s[i][j] = k;
}
}
}
}
System.out.println("the max weight: " + f[1][n]);
WeightTriangulation wt = new WeightTriangulation();
wt.print(s, 1, n);
}
private void print(int[][] s, int i, int j) {
if (i == j - 1)
return;
int k = s[i][j];
print(s, i, k);
System.out.printf("%d %d %d \n", i, k, j);
print(s, k, j);
}
}