#include <string>
#include <iostream>
using namespace std;
void mul(int int1[], int num2, int cur[], int n1) {
int inc = 0;
for (int i = 0; i < n1; i ++) {
inc += int1[i] * num2;
cur[i] = inc % 10;
inc /= 10;
}
cur[n1] = inc;
}
void add(int ret[], int cur[], int n1, int shift) {
int inc = 0;
for (int i = 0; i < n1+1; i ++) {
inc += ret[i+shift] + cur[i];
ret[i+shift] = inc % 10;
inc /= 10;
}
}
string multiply(string num1, string num2) {
int n1 = num1.length();
int n2 = num2.length();
int int1[n1];
int cur[n1+1];
int ret[n1+n2];
for (int i = 0; i < n1; i ++) {
int1[i] = num1[n1-i-1]-'0';
}
cur[n1] = 0;
for (int i = 0; i < n1+n2; i ++) {
ret[i] = 0;
}
for (int i = 0; i < n2; i ++) {
mul(int1, num2[n2-i-1]-'0', cur, n1);
add(ret, cur, n1, i);
}
int len = 0;
for (int i = n1+n2-1; i >= 0; i --) {
if (ret[i] != 0) {
len = i;
break;
}
}
char chars[len+1];
for (int i = 0; i < len+1; i ++) {
chars[len-i] = ret[i] + '0';
}
return string(chars, len+1);
}
int main (int argc, char* argv[]) {
cout << multiply("10", "10") << endl;
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiAgICB2b2lkIG11bChpbnQgaW50MVtdLCBpbnQgbnVtMiwgaW50IGN1cltdLCBpbnQgbjEpIHsKICAgICAgICBpbnQgaW5jID0gMDsKICAgICAgICAKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG4xOyBpICsrKSB7CiAgICAgICAgICAgIGluYyArPSBpbnQxW2ldICogbnVtMjsKICAgICAgICAgICAgY3VyW2ldID0gaW5jICUgMTA7CiAgICAgICAgICAgIGluYyAvPSAxMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY3VyW24xXSA9IGluYzsKICAgIH0KICAgIAogICAgdm9pZCBhZGQoaW50IHJldFtdLCBpbnQgY3VyW10sIGludCBuMSwgaW50IHNoaWZ0KSB7CiAgICAgICAgaW50IGluYyA9IDA7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuMSsxOyBpICsrKSB7CiAgICAgICAgICAgIGluYyArPSByZXRbaStzaGlmdF0gKyBjdXJbaV07CiAgICAgICAgICAgIHJldFtpK3NoaWZ0XSA9IGluYyAlIDEwOwogICAgICAgICAgICBpbmMgLz0gMTA7CiAgICAgICAgfQogICAgfQoKICAgIHN0cmluZyBtdWx0aXBseShzdHJpbmcgbnVtMSwgc3RyaW5nIG51bTIpIHsKICAgICAgICBpbnQgbjEgPSBudW0xLmxlbmd0aCgpOwogICAgICAgIGludCBuMiA9IG51bTIubGVuZ3RoKCk7CiAgICAgICAgCiAgICAgICAgaW50IGludDFbbjFdOwogICAgICAgIGludCBjdXJbbjErMV07CiAgICAgICAgaW50IHJldFtuMStuMl07CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuMTsgaSArKykgewogICAgICAgICAgICBpbnQxW2ldID0gbnVtMVtuMS1pLTFdLScwJzsKICAgICAgICB9CiAgICAgICAgY3VyW24xXSA9IDA7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuMStuMjsgaSArKykgewogICAgICAgICAgICByZXRbaV0gPSAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG4yOyBpICsrKSB7CiAgICAgICAgICAgIG11bChpbnQxLCBudW0yW24yLWktMV0tJzAnLCBjdXIsIG4xKTsKICAgICAgICAgICAgYWRkKHJldCwgY3VyLCBuMSwgaSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGludCBsZW4gPSAwOwogICAgICAgIAogICAgICAgIGZvciAoaW50IGkgPSBuMStuMi0xOyBpID49IDA7IGkgLS0pIHsKICAgICAgICAgICAgaWYgKHJldFtpXSAhPSAwKSB7CiAgICAgICAgICAgICAgICBsZW4gPSBpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgY2hhciBjaGFyc1tsZW4rMV07CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW4rMTsgaSArKykgewogICAgICAgICAgICBjaGFyc1tsZW4taV0gPSByZXRbaV0gKyAnMCc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBzdHJpbmcoY2hhcnMsIGxlbisxKTsKICAgIH0KICAgIAoKaW50IG1haW4gKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKCiAgICBjb3V0IDw8IG11bHRpcGx5KCIxMCIsICIxMCIpIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0=