/*
Two big integer multiplied
eg.
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
* 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111 =
1234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234
320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654321
*/
#include<stdio.h>
#include<string.h>
char s1[10000]; // num1
char s2[10000]; // num2
int a1[10000]; // i of s1 * s2
int a2[10000]; // last ans
int ans[10000]; // current ans
void mulBigData(char *s1, char *s2){
int i1, i2; // for s1, s2 traversal
int len1, len2; // length of s1, s2
int la1, la2, lan; // length of a1, a2, ans
int ai, ani; // for a1, a2, ans traversal
// eg. 123 * 12 -> 12 * 123
// make s1 is short and s2 is long
len1 = strlen(s1);
len2 = strlen(s2);
if(len1 > len2){
char *tmps = s1;
s1 = s2;
s2 = tmps;
len1 = strlen(s1);
len2 = strlen(s2);
}
//printf("s1 = %s, s2 = %s\n", s1, s2);
// init a1, a2, ans
for(ai=0; ai<100; ai++){
a1[ai] = 0;
a2[ai] = 0;
ans[ai] = 0;
}
la1 = 0;
la2 = 0;
lan = 0;
// s1 * s2
int v1, v2;
int j = 0;
int z = 0;
// eg. 12 * 123
for(i1 = len1 - 1; i1 >= 0; i1--){
// i of s1 * s2
v1 = s1[i1] - '0';
z = 0;
for(ai=0; ai<j; ai++){ // carry bit
a1[ai] = 0;
}
j++;
// eg. 2 * 123 10 * 123
for(i2 = len2 - 1; i2 >=0 ;i2--){
v2 = s2[i2] - '0';
int vv = v1 * v2;
a1[ai++] = (vv % 10) + z;
z = vv / 10;
}
if(z != 0){
a1[ai++] = z;
}
la1 = ai;
// ans += i of s1 * s2
la2 = lan;
for(ani = 0; ani < lan; ani++){
a2[ani] = ans[ani]; // copy ans to a2
}
// show a1 and a2
// printf("a1 = ");
// for(ai=la1-1; ai>=0; ai--){
// printf("%d", a1[ai]);
// }printf("\n");
// printf("a2 = ");
// for(ai=la2-1; ai>=0; ai--){
// printf("%d", a2[ai]);
// }printf("\n");
int az = 0;
int asum = 0;
for(ani=0; ani<la1 || ani<la2; ani++){
asum = 0;
if(ani < la1){
asum += a1[ani];
}
if(ani < la2){
asum += a2[ani];
}
asum += az;
ans[ani] = asum % 10;
az = asum / 10;
}
if(az != 0){
ans[ani++] = az;
}
lan = ani;
// show current ans
// printf("ans = ");
// for(ai=ani-1; ai>=0; ai--){
// printf("%d", ans[ai]);
// }printf("\n\n");
}
// output the final answer!
printf("\n%s * %s =\n", s1, s2);
while(ans[--ani] == 0) ani--;
if(ani < 0)printf("0");
for(ai=ani; ai>=0; ai--){
printf("%d", ans[ai]);
}printf("\n\n");
}// end of mulBigData()
int main(){
while(scanf("%s %s", s1, s2)){
mulBigData(s1, s2);
}
return 0;
}
/*
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
* 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
111 =
1234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234567901234
320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654320987654321
*/