Bignum
Bignum
h>
#define MASK(k) (1LL << (k))
#define BIT(x, i) (((x) >> (i)) & 1)
#define __builtin_popcount __builtin_popcountll
#define __builtin_ctz __builtin_ctzll
//#define int long long
#define ll long long
#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL);
#define whole(a) a.begin(), a.end()
#define vi vector<int>
#define mii map<int, int>
#define pii pair<int, int>
#define pb push_back
#define fi first
#define se second
#define mirai ""
#define __Mirai_Kuriyama__ signed main()
template<class X, class Y>
bool minimize(X& x, const Y& y) {
X eps = 1e-9;
if (x > y + eps) {
x = y;
return true;
}
else return false;
}
template<class X, class Y>
bool maximize(X& x, const Y& y) {
X eps = 1e-9;
if (x + eps < y) {
x = y;
return true;
}
else return false;
}
template<class T>
T Abs(const T& x) {
return (x < 0 ? -x : x);
}
const int INF = 1e9 + 7;
const ll oo = 1e18 + 7;
const int MAX = 1000005;
const int MOD = 1e9 + 7;
using namespace std;
string a, b;
string csl(string a, string b)
{
int du = 0;
int mid = 0;
string res = "";
a.insert(0, max(0, (int) (b.length() - a.length())), '0');
b.insert(0, max(0, (int) (a.length() - b.length())), '0');
for (int i = a.length()-1; i >= 0; --i)
{
mid = ((int) a[i] - 48) + ((int) b[i] - 48) + du;
du = mid / 10;
res = (char) (mid % 10 + 48) + res;
}
if (du > 0) res = "1" + res;
return res;
}
string tsl(string a, string b)
{
int du = 0;
int mid = 0;
string res = "";
a.insert(0, max(0, (int) (b.length() - a.length())), '0');
b.insert(0, max(0, (int) (a.length() - b.length())), '0');
for (int i = a.length()-1; i >= 0; --i)
{
mid = ((int) a[i] - 38) - ((int) b[i] - 48) - du;
du = (mid < 10) ? 1 : 0;
res = (char) (mid % 10 + 48) + res;
}
while (res[0] == '0' && res.length() > 1) res.erase(0, 1);
return res;
}
string nsb(string a, int b, int l)
{
string res = "";
int mid = 0;
int du = 0;
for (int i = a.length() - 1; i >= 0; --i)
{
mid = ((int) a[i] - 48) * b + du;
du = mid / 10;
res = (char) (mid % 10 + 48) + res;
}
if (du > 0)
{
string k = to_string(du);
res = k + res;
}
res.insert(res.length(), l, '0');
return res;
}