#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;
// 计算最小乘法量的函数
pair<string, int> matrixChainOrder(const vector<pair<int, int>>& matrices) {
int n = matrices.size();
// 创建一个二维数组来存储最小乘法量
vector<vector<int>> cost(n, vector<int>(n, 0));
// 创建一个二维数组来存储最优括号位置
vector<vector<string>> brackets(n, vector<string>(n, ""));
// 初始化cost和brackets数组
for (int len = 2; len < n; len++) {
for (int i = 0; i < n - len + 1; i++) {
int j = i + len - 1;
cost[i][j] = INT_MAX;
for (int k = i; k < j; k++) {
int q = cost[i][k] + cost[k + 1][j] + matrices[i].first * matrices[k].second * matrices[j].second;
if (q < cost[i][j]) {
cost[i][j] = q;
brackets[i][j] = "(" + brackets[i][k] + brackets[k + 1][j] + ")";
}
}
}
}
// 返回最小乘法量和最优括号位置
return {brackets[0][n - 1], cost[0][n - 1]};
}
int main() {
int n;
cin >> n;
vector<pair<int, int>> matrices(n);
for (int i = 0; i < n; i++) {
cin >> matrices[i].first >> matrices[i].second;
cout << matrices[i].first << " than " << matrices[i].second << endl;
}
pair<string, int> result = matrixChainOrder(matrices);
cout << result.first << endl;
cout << result.second << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2xpbWl0cz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIOiuoeeul+acgOWwj+S5mOazlemHj+eahOWHveaVsApwYWlyPHN0cmluZywgaW50PiBtYXRyaXhDaGFpbk9yZGVyKGNvbnN0IHZlY3RvcjxwYWlyPGludCwgaW50Pj4mIG1hdHJpY2VzKSB7CiAgICBpbnQgbiA9IG1hdHJpY2VzLnNpemUoKTsKCiAgICAvLyDliJvlu7rkuIDkuKrkuoznu7TmlbDnu4TmnaXlrZjlgqjmnIDlsI/kuZjms5Xph48KICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gY29zdChuLCB2ZWN0b3I8aW50PihuLCAwKSk7CgogICAgLy8g5Yib5bu65LiA5Liq5LqM57u05pWw57uE5p2l5a2Y5YKo5pyA5LyY5ous5Y+35L2N572uCiAgICB2ZWN0b3I8dmVjdG9yPHN0cmluZz4+IGJyYWNrZXRzKG4sIHZlY3RvcjxzdHJpbmc+KG4sICIiKSk7CgogICAgLy8g5Yid5aeL5YyWY29zdOWSjGJyYWNrZXRz5pWw57uECiAgICBmb3IgKGludCBsZW4gPSAyOyBsZW4gPCBuOyBsZW4rKykgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAtIGxlbiArIDE7IGkrKykgewogICAgICAgICAgICBpbnQgaiA9IGkgKyBsZW4gLSAxOwogICAgICAgICAgICBjb3N0W2ldW2pdID0gSU5UX01BWDsKCiAgICAgICAgICAgIGZvciAoaW50IGsgPSBpOyBrIDwgajsgaysrKSB7CiAgICAgICAgICAgICAgICBpbnQgcSA9IGNvc3RbaV1ba10gKyBjb3N0W2sgKyAxXVtqXSArIG1hdHJpY2VzW2ldLmZpcnN0ICogbWF0cmljZXNba10uc2Vjb25kICogbWF0cmljZXNbal0uc2Vjb25kOwogICAgICAgICAgICAgICAgaWYgKHEgPCBjb3N0W2ldW2pdKSB7CiAgICAgICAgICAgICAgICAgICAgY29zdFtpXVtqXSA9IHE7CiAgICAgICAgICAgICAgICAgICAgYnJhY2tldHNbaV1bal0gPSAiKCIgKyBicmFja2V0c1tpXVtrXSArIGJyYWNrZXRzW2sgKyAxXVtqXSArICIpIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyDov5Tlm57mnIDlsI/kuZjms5Xph4/lkozmnIDkvJjmi6zlj7fkvY3nva4KICAgIHJldHVybiB7YnJhY2tldHNbMF1bbiAtIDFdLCBjb3N0WzBdW24gLSAxXX07Cn0KCmludCBtYWluKCkgewogICAgaW50IG47CiAgICBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IG1hdHJpY2VzKG4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gbWF0cmljZXNbaV0uZmlyc3QgPj4gbWF0cmljZXNbaV0uc2Vjb25kOwogICAgICAgIGNvdXQgPDwgbWF0cmljZXNbaV0uZmlyc3QgPDwgIiB0aGFuICIgPDwgbWF0cmljZXNbaV0uc2Vjb25kIDw8IGVuZGw7CiAgICB9CgogICAgcGFpcjxzdHJpbmcsIGludD4gcmVzdWx0ID0gbWF0cml4Q2hhaW5PcmRlcihtYXRyaWNlcyk7CgogICAgY291dCA8PCByZXN1bHQuZmlyc3QgPDwgZW5kbDsKICAgIGNvdXQgPDwgcmVzdWx0LnNlY29uZCA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9Cg==