Multiplication of Big Integers

Given two integers $A$ and $B$, compute the product, $A \times B$.

Input

Two integers $A$ and $B$ separated by a space character are given in a line.

Output

Print the product in a line.

Constraints

* $-1 \times 10^{1000} \leq A, B \leq 10^{1000}$



Sample Input 1


5 8


Sample Output 1


40


Sample Input 2


100 25


Sample Output 2


2500


Sample Input 3


-1 0


Sample Output 3


0


Sample Input 4


12 -3


Sample Output 4


-36






Example

Input

5 8


Output

40
#include<bits/stdc++.h>
using namespace std;

vector<complex<double>> fft(vector<complex<double>> a, bool inverse = false) {
    int n = a.size();
    int h = 0;
    for (int i = 0; 1 << i < n; i++) h++;
    for (int i = 0; i < n; i++) {
        int j = 0;
        for (int k = 0; k < h; k++) j |= (i >> k & 1) << (h - 1 - k);
        if (i < j) swap(a[i], a[j]);
    }
    for (int b = 1; b < n; b *= 2) {
        for (int j = 0; j < b; j++) {
            complex<double> w =
                polar(1.0, (2 * M_PI) / (2 * b) * j * (inverse ? 1 : -1));
            for (int k = 0; k < n; k += b * 2) {
                complex<double> s = a[j + k];
                complex<double> t = a[j + k + b] * w;
                a[j + k] = s + t;
                a[j + k + b] = s - t;
            }
        }
    }
    if (inverse)
        for (int i = 0; i < n; i++) a[i] /= n;
    return a;
}

vector<complex<double>> fft(vector<double> a, bool inverse = false) {
    vector<complex<double>> a_complex(a.size());
    for (int i = 0; i < a.size(); i++) a_complex[i] = complex<double>(a[i], 0);
    return fft(a_complex, inverse);
}

vector<double> convolve(vector<double> a, vector<double> b) {
    int s = a.size() + b.size() - 1;
    int t = 1;
    while (t < s) t *= 2;
    a.resize(t);
    b.resize(t);
    vector<complex<double>> A = fft(a);
    vector<complex<double>> B = fft(b);
    for (int i = 0; i < t; i++) {
        A[i] *= B[i];
    }
    A = fft(A, true);
    a.resize(s);
    for (int i = 0; i < s; i++) a[i] = A[i].real();
    return a;
}

int main(){
    
    string A, B;
    vector<double> a, b, c;
    vector<long> d, ans;
    int sgn = 1;
    cin >> A >> B;
    
    if(A[0] == '0' || B[0] == '0'){
        cout << 0 << endl;
        return 0;
    }
    
    for(int i = 0; i < A.length(); i++){
        if(A[i] == '-'){
            sgn *= -1;
            continue;
        }
        a.push_back((double)(A[i] - '0'));
    }
    
    for(int i = 0; i < B.length(); i++){
        if(B[i] == '-'){
            sgn *= -1;
            continue;
        }
        b.push_back((double)(B[i] - '0'));
    }
    
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    
    c = convolve(a, b);
    for(int i = 0; i < c.size(); i++)
        d.push_back((long)(c[i] + 0.5));
        
    long x;
        
    for(int i = 0; i < d.size(); i++){
        x = d[i];
        ans.push_back(x % 10);
        if(i < d.size() - 1) d[i + 1] += x / 10;
        else if(x / 10 > 0) ans.push_back(x / 10);
    }
    
    if(sgn == -1) cout << '-';
    for(int i = ans.size() - 1; i >= 0; i--)
        cout << ans[i];
    cout << endl;
    
    return 0;
}
