/**
 * 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];
}