#include <stdio.h>
#define N 20int m[N][N], s[N][N], p[N+1];
int dp(int n)
{
int i, j, k, r, tmp;
for(i = 0; i <= n; i++) m[i][i] = 0;
for(r = 2; r <= n; r++) {
for(i = 1; i <= n-r+1; i++) {
j = i + r - 1;
s[i][j] = i;
m[i][j] = m[i][i] + m[i+1][j] + p[i-1]*p[i]*p[j];
for(k = i+1; k < j; k++) {
tmp = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j];
if(tmp < m[i][j]) {
m[i][j] = tmp;
s[i][j] = k;
}
}
}
}
return m[1][n];
}
void traceback(int i, int j)
{
if(i == j) return;
traceback(i, s[i][j]);
traceback(s[i][j]+1, j);
printf("Multiply A%d,%d and A%d,%d\n", i, s[i][j], s[i][j]+1,j);
}
int main()
{
int i, n;
while(scanf("%d", &n) != EOF) {
for(i = 0; i <= n; i++)
scanf("%d", &p[i]);
printf("result:%d\n", dp(n));
printf("trace is following:\n");
traceback(1, n);
}
return 0;
}