/**
* Author: Sergey Kopeliovich (Burunduk30@gmail.com)
*/
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
#define fornd(i, n) for (int i = (int)(n) - 1; i >= 0; i--)
const int base = (int)1e6;
const int blen = 6;
const int strLen = 1010;
const int maxLen = strLen / blen;
typedef int num[maxLen];
void Copy( num &a, num &b ) { memcpy(a, b, sizeof(num)); }
void Zero( num &a ) { memset(a, 0, sizeof(num)); }
void Read( num &a )
{
static char s[strLen];
scanf("%s", s);
Zero(a);
int i = 0, x = 1, len = strlen(s);
fornd(j, len)
{
a[i] += x * (s[j] - '0');
if ((x *= 10) == base)
x = 1, i++;
}
}
void Out( num &a )
{
int i = maxLen - 1;
while (i && !a[i])
i--;
printf("%d", a[i--]);
while (i >= 0)
printf("%0*d", blen, a[i--]);
}
int Len( num &a )
{
int i = maxLen - 1;
while (i >= 0 && !a[i])
i--;
return i + 1;
}
void DivD( num &c, num &a, int x )
{
int rest = 0;
fornd(i, Len(a))
{
ll tmp = (ll)rest * base + a[i];
c[i] = tmp / x, rest = tmp % x;
}
}
void MulD( num &a, int x )
{
forn(i, maxLen)
a[i] *= x;
forn(i, maxLen)
if (a[i] >= base)
a[i + 1] += a[i] / base, a[i] %= base;
}
void Mul( num &a, num &b )
{
static ll temp[maxLen];
zero(temp);
int la = Len(a), lb = Len(b);
forn(i, la)
forn(j, lb)
temp[i + j] += (ll)a[i] * b[j];
Zero(a);
forn(i, la + lb)
a[i] = temp[i] % base, temp[i + 1] += temp[i] / base;
}
void Add( num &a, num &b )
{
forn(i, maxLen)
if ((a[i] += b[i]) >= base)
a[i + 1]++, a[i] -= base;
}
void Sub( num &a, num &b )
{
forn(i, maxLen)
if ((a[i] -= b[i]) < 0)
a[i + 1]--, a[i] += base;
}
int Cmp( num &a, num &b )
{
fornd(i, maxLen)
if (a[i] != b[i])
return a[i] - b[i];
}