rt.
/bx /bx /bx
#include <bits/stdc++.h>
using namespace std;
const int N = 30;
int n, dp[N][N], p[N][N], t, a[N], b[N], inf;
int DP(int l, int r) {
if (l == r) {
dp[l][r] = 0;
return 0;
}
if (dp[l][r] != inf) {
return dp[l][r];
}
for (int k = l; k < r; k++) {
if (dp[l][r] > DP(l, k) + DP(k + 1, r) + a[l] * b[k] * b[r]) {
dp[l][r] = DP(l, k) + DP(k + 1, r) + a[l] * b[k] * b[r];
p[l][r] = k;
}
}
}
void solve(int l, int r) {
if (l == r) {
cout << "A" << r;
return ;
}
cout << "(";
solve(l, p[l][r]);
cout << " x ";
solve(p[l][r] + 1, r);
cout << ")";
}
int main() {
while (cin >> n && n) {
memset(p, 0, sizeof(p));
memset(dp, 63, sizeof(dp));
inf = dp[1][1];
for (int i = 1; i <= n; i++) {
cin >> a[i] >> b[i];
}
DP(1, n);
cout << "Case " << ++t << ": ";
solve(1, n);
cout << '\n';
}
return 0;
}