#include <map>
#include <set>
#include <list>
#include <cmath>
#include<cctype>
#include <ctime>
#include <deque>
#include <stack>
#include <queue>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define PI 3.1415926535897932626
using namespace std;
int gcd(int a, int b)
{
return a % b == 0 ? b : gcd(b, a % b);
}
#define MAXN 15
int L[MAXN],R[MAXN];
LL dp[MAXN][MAXN];
int path[MAXN][MAXN];
int N,ans;
void print(int a,int b)
{
if (a==b) {printf("A%d",a+1);return ;}
printf("(");
print(a,path[a][b]);
printf(" x ");
print(path[a][b]+1,b);
printf(")");
}
int main()
{
int kase=1;
//freopen("sample.txt","r",stdin);
while (scanf("%d",&N)==1)
{
if (N==0) break;
for (int i=0;i<N;i++)
scanf("%d%d",&L[i],&R[i]);
memset(path,0,sizeof(path));
for (int i=0;i<N;i++) for (int j=i;j<N;j++) if (i==j) dp[i][j]=0;else dp[i][j]=1e10;
for (int k=1;k<N;k++)
{
for (int i=0;i+k<N;i++)
for (int j=i;j<i+k;j++)
{
LL tmp=dp[i][j]+dp[j+1][i+k]+L[i]*R[j]*R[i+k];
if (tmp<dp[i][i+k])
{
dp[i][i+k]=tmp;
path[i][i+k]=j;
}
}
}
printf("Case %d: ",kase++);
print(0,N-1);
putchar('\n');
}
return 0;
}