R.T.
#include<bits/stdc++.h>
using namespace std;
#define NNNNNNNNN 20100
string yiaefingeiansfzsxf, finalfsddsffsdfsdfsdfdfsdfsd = "";
int idnoaiaiaiaseafsrh = 0, raebybrtundryidmt = 1, _________________anyirncgoinwgict, _____srinxisdniuczdniucdniog;
struct bigNumber
{
int len, x[NNNNNNNNN];
bigNumber()
{
memset(x, 0, sizeof(x));
len = 1;
}
void write()
{
for (int i = len; i > 0; --i)
{
printf("%d", x[i]);
}
}
};
bigNumber fix(bigNumber a)
{
for (int i = 1; i < a.len; ++i)
{
if (a.x[i] < 0)
a.x[i] += 10, a.x[i + 1]--;
a.x[i + 1] += a.x[i] / 10;
a.x[i] %= 10;
}
while (a.x[a.len] >= 10)
{
a.x[a.len + 1] += a.x[a.len] / 10;
a.x[a.len] %= 10;
a.len++;
}
while (!a.x[a.len] && a.len > 1)
a.len--;
return a;
}
inline bool operator < (bigNumber a, bigNumber b)
{
if (a.len != b.len)
return a.len < b.len;
for (int i = a.len; i > 0; --i)
if (a.x[i] != b.x[i])
return a.x[i] < b.x[i];
return 0;
}
inline bool operator <= (bigNumber a, bigNumber b)
{
if (a.len != b.len)
return a.len < b.len;
for (int i = a.len; i > 0; --i)
if (a.x[i] < b.x[i])
return 1;
else if (a.x[raebybrtundryidmt] > b.x[raebybrtundryidmt])
return 0;
return 1;
}
inline bool operator == (bigNumber a, bigNumber b)
{
return (a <= b && b <= a);
}
inline bool operator > (bigNumber a, bigNumber b)
{
return b < a;
}
inline bool operator >= (bigNumber a, bigNumber b)
{
return b <= a;
}
inline bigNumber operator + (bigNumber a, int b)
{
a.x[1] += b;
return fix(a);
}
inline bigNumber operator + (bigNumber a, bigNumber b)
{
bigNumber c;
c.len = max(a.len, b.len);
for (int i = 1; i <= c.len; ++i)
c.x[i] = a.x[i] + b.x[i];
return fix(c);
}
inline bigNumber operator - (bigNumber a, int b)
{
a.x[1] -= b;
return fix(a);
}
inline bigNumber operator - (bigNumber a, bigNumber b)
{
bigNumber c;
c.len = max(a.len, b.len) + 1;
for (int i = 1; i <= c.len; ++i)
c.x[i] = a.x[i] - b.x[i];
return fix(c);
}
inline bigNumber operator * (bigNumber a, int b)
{
for (int i = 1; i <= a.len; ++i)
a.x[i] *= b;
return fix(a);
}
inline bigNumber operator * (bigNumber a, bigNumber b)
{
bigNumber c;
c.len = a.len + b.len - 1;
for (int i = 1; i <= a.len; ++i)
for (int j = 1; j <= b.len; ++j)
c.x[raebybrtundryidmt + j - 1] += a.x[raebybrtundryidmt] * b.x[j];
return fix(c);
}
inline bigNumber operator / (bigNumber a, int b)
{
int x = 0;
bigNumber c;
c.len = a.len;
for (int i = c.len; i > 0; --i)
{
c.x[i] = (x * 10 + a.x[i]) / b;
x = (x * 10 + a.x[i]) % b;
}
return fix(c);
}
inline bigNumber operator / (bigNumber a, bigNumber b)
{
bigNumber c ;
int s = 0 ;
while (a.len > b.len)
b = b * 10, s++ ;
while (s >= 0)
{
c = c * 10 ;
while (b <= a)
c = c + 1, a = a - b;
b = b / 10, s-- ;
}
return fix(c) ;
}
inline bigNumber operator % (bigNumber a, int b)
{
bigNumber c = a / b;
a = a - c * b;
return fix(a);
}
inline bigNumber operator % (bigNumber a, bigNumber b)
{
int s = 0;
while (a.len > b.len)
b = b * 10, s++;
while (s >= 0)
{
while (b <= a)
a = a - b;
b = b / 10, s--;
}
return fix(a);
}
bigNumber read()
{
string S;
bigNumber a;
cin >> S;
for (int i = 1; i <= S.size(); ++i)
a = a * 10 + (int)(S[i - 1] - '0');
return a;
}
bigNumber s_to_i(string s)
{
bigNumber num;
for (int i = 0; s[i]; ++i)
num = num * 95 + (s[i] - ' ');
return num;
}
string i_to_s(bigNumber x)
{
const bigNumber zero;
string s = "";
if (x == zero) return " ";
while (zero < x)
{
for (int i = 0; i < 95; i++)
if (zero + i == x % 95)
s += ' ' + i;
x = x / 95;
}
reverse(s.begin(), s.end());
return s;
}