#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int solve(int n, vector<int> & dims){
    int dp[100][101] = {{0}};
    for (int span = 2; span != n + 1; ++span){
        for (int first = 0; first + span != n + 1; ++first){
            for (int last = first + span; last != n + 1; ++last){
                int record = 2000000000;
                for (int mid = first + 1; mid != last; ++mid){
                    record = min(record, dp[first][mid] + dp[mid][last] + dims[first] * dims[last] * dims[mid]);
                }
                dp[first][last] = record;
            }
        }
    }
    return dp[0][n];
}


int main()
{
    int n = 0;
    cin >> n;
    vector<int> dims(n + 1);
    int r = 0;
    int c = 0;
    for (int i = 0; i != n; ++i){
        cin >> r >> c;
        dims[i] = r;
    }
    dims[n] = c;
    cout << solve(n, dims) << endl;
    return 0;
}
#include <cstdio>
#include <algorithm>

using namespace std;

const int kMax = 100 + 5;

int n;
int num[kMax], dp[kMax][kMax];

int main() {
    scanf("%d", &n);
    for(int i = 1;i <= n;++ i) scanf("%d%d", &num[i-1], &num[i]);
    for(int l = 2;l <= n;++ l) {
        for(int i = 1;i <= n - l + 1;++ i) {
            int j = i + l - 1;
            dp[i][j] = (1 << 30);
            for(int k = i;k < j;++ k) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + num[i-1] * num[k] * num[j]);
        }
    }
    printf("%d\n", dp[1][n]);
    return 0;
}