半夜划水=_=
//HDU-1002.cpp
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <climits>
#include <cctype>
#include <algorithm>
#include <iostream>
#include <string>
#include <stack>
#include <map>
#include <set>
#include <queue>
#include <utility>
#include <vector>
#include <bitset>
#include <functional>
using namespace std;
//const double pai = acos(-1.0);
const double pai = 3.14159265358979323846;
const int INF = 0x3f3f3f3f;
typedef long long love_live;
char arr1[1117], arr2[1117], tmpr[1117];
int narr1[1117], narr2[1117];
void init(){
memset(arr1, 0, sizeof(arr1));
memset(arr2, 0, sizeof(arr2));
memset(tmpr, 0, sizeof(tmpr));
memset(narr1, 0, sizeof(narr1));
memset(narr2, 0, sizeof(narr2));
return ;
}
int main(int argc, char const *argv[]) {
#ifndef ONLINE_JUDGE
// freopen("output", "w", stdout);
freopen("input", "r", stdin);
#endif
int n, m, i, j, k, cse, flag;
while(scanf("%d", &n) != EOF){
cse = 1;
while(n--){
if(cse != 1){
printf("\n");
}
flag = 0;
init();
scanf("%s%*c%s", arr1, arr2);
// cout << arr1 << endl;
// cout << arr2 << endl;
int len1 = strlen(arr1), len2 = strlen(arr2);
if(len1 < len2){
len1 ^= len2;
len2 ^= len1;
len1 ^= len2;
strcpy(tmpr, arr1);
strcpy(arr1, arr2);
strcpy(arr2, tmpr);
flag = 1;
}
for(i = 0; i < len1; ++i){
narr1[len1 - i - 1] = arr1[i] - '0';
}
for(i = 0; i < len2; ++i){
narr2[len2 - i - 1] = arr2[i] - '0';
}
// for(i = 0; i < len1; ++i){
// cout << narr1[i];
// }
// cout << endl;
// for(i = 0; i < len2; ++i){
// cout << narr2[i];
// }
// cout << endl;
for(i = 0; i < len2; ++i){
narr1[i] += narr2[i];
}
int d = 0;
for(i = 0; i < len1; ++i){
d = narr1[i] / 10;
narr1[i] %= 10;
narr1[i + 1] += d;
}
if(narr1[len1] > 0){
j = len1;
}
else{
j = len1 - 1;
}
printf("Case %d:\n", cse++);
if(flag == 1){
printf("%s + %s = ", arr2, arr1);
}
else{
printf("%s + %s = ", arr1, arr2);
}
for(i = j; i >= 0; --i){
printf("%d", narr1[i]);
}
printf("\n");
}
}
return 0;
}