import
java.io.*;
import
java.util.*;
class
GFG {
public
static
String findSum(String str1, String str2) {
if
(str1.length() > str2.length()) {
String temp = str1;
str1 = str2;
str2 = temp;
}
String str =
""
;
int
n1 = str1.length();
int
n2 = str2.length();
str1 =
new
StringBuilder(str1).reverse().toString();
str2 =
new
StringBuilder(str2).reverse().toString();
int
carry =
0
;
for
(
int
i =
0
; i < n1; i++) {
int
sum = ((str1.charAt(i) -
'0'
) + (str2.charAt(i) -
'0'
) + carry);
str += (
char
)(sum %
10
+
'0'
);
carry = sum /
10
;
}
for
(
int
i = n1; i < n2; i++) {
int
sum = ((str2.charAt(i) -
'0'
) + carry);
str += (
char
)(sum %
10
+
'0'
);
carry = sum /
10
;
}
if
(carry !=
0
)
str += (
char
)(carry +
'0'
);
str =
new
StringBuilder(str).reverse().toString();
return
str;
}
static
String findDiff(String str1, String str2) {
String str =
""
;
int
n1 = str1.length(), n2 = str2.length();
StringBuilder sb1 =
new
StringBuilder(str1);
StringBuilder sb2 =
new
StringBuilder(str2);
sb1 = sb1.reverse();
sb2 = sb2.reverse();
str1 = sb1.toString();
str2 = sb2.toString();
int
carry =
0
;
for
(
int
i =
0
; i < n2; i++) {
int
sub = ((str1.charAt(i) -
'0'
) - (str2.charAt(i) -
'0'
) - carry);
if
(sub <
0
) {
sub = sub +
10
;
carry =
1
;
}
else
carry =
0
;
str += sub;
}
for
(
int
i = n2; i < n1; i++) {
int
sub = ((str1.charAt(i) -
'0'
) - carry);
if
(sub <
0
) {
sub = sub +
10
;
carry =
1
;
}
else
carry =
0
;
str += sub;
}
str =
new
StringBuilder(str).reverse().toString();
return
str;
}
public
static
String removeLeadingZeros(String str) {
String pattern =
"^0+(?!$)"
;
str = str.replaceAll(pattern,
""
);
return
str;
}
public
static
String multiply(String A, String B) {
if
(A.length() > B.length()) {
String temp = A;
A = B;
B = temp;
}
int
n1 = A.length(), n2 = B.length();
while
(n2 > n1) {
A =
"0"
+ A;
n1++;
}
if
(n1 ==
1
) {
int
ans = Integer.parseInt(A) * Integer.parseInt(B);
return
Integer.toString(ans);
}
if
(n1 %
2
==
1
) {
n1++;
A =
"0"
+ A;
B =
"0"
+ B;
}
String Al =
""
, Ar =
""
, Bl =
""
, Br =
""
;
for
(
int
i =
0
; i < n1 /
2
; ++i) {
Al += A.charAt(i);
Bl += B.charAt(i);
Ar += A.charAt(n1 /
2
+ i);
Br += B.charAt(n1 /
2
+ i);
}
String p = multiply(Al, Bl);
String q = multiply(Ar, Br);
String r = findDiff( multiply(findSum(Al, Ar), findSum(Bl, Br)), findSum(p, q));
for
(
int
i =
0
; i < n1; ++i)
p = p +
"0"
;
for
(
int
i =
0
; i < n1 /
2
; ++i)
r = r +
"0"
;
String ans = findSum(p, findSum(q, r));
ans = removeLeadingZeros(ans);
return
ans;
}
public
static
void
main(String[] args) {
String A =
"74638463789"
;
String B =
"35284567382"
;
System.out.println(multiply(A, B));
}
}