1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
using namespace std;

int dlugosc(unsigned long long number) {
  int length = 1;
  if (number >= 100000000ULL) {
    length += 8;
    number /= 100000000ULL;
  }
  if (number >= 10000ULL) {
    length += 4;
    number /= 10000ULL;
  }
  if (number >= 100ULL) {
    length += 2;
    number /= 100ULL;
  }
  if (number >= 10ULL) {
    length += 1;
  }
  return length;
}

int main() {
  ios_base::sync_with_stdio(0);
  unsigned long long potegi[] = {1ULL,10ULL,100ULL,1000ULL,10000ULL,100000ULL,1000000ULL,
      10000000ULL,100000000ULL,1000000000ULL,10000000000ULL,100000000000ULL};
  unsigned long long a, pocz10, konc10, poczDociety, koncDociety, wynik = 0;
  int N, pocz10Dl, konc10Dl, aDl, aktDl, koncDoUciecia;

  //cout << 1234567890ULL / potegi[8] * potegi[8] + 1234567890ULL % potegi[2];
  //return 0;
  cin >> N;
  cin >> a;
  pocz10 = a; konc10 = a; aktDl = dlugosc(a);
  pocz10Dl = aktDl; konc10Dl = aktDl;
  for(int iN = 1; iN < N; ++iN) {
    cin >> a;
    aDl = dlugosc(a);
    if(pocz10Dl > aDl)
      poczDociety = pocz10 / potegi[pocz10Dl - aDl];
    else
      poczDociety = pocz10;
  //  cout << "*" << aDl << " - " << pocz10Dl << " - " << a << " - " << pocz10 << " - " << poczDociety << endl;
    if(a == poczDociety) {
      koncDoUciecia = (aktDl - aDl) > 10 ? 10 : (aktDl - aDl);
      koncDociety = konc10 % potegi[koncDoUciecia];
      if(koncDoUciecia) {
        if(koncDociety == (potegi[koncDoUciecia] - 1ULL)) {
          ++aktDl;
          wynik += (unsigned long long)(aktDl - aDl);
          konc10 = ((konc10 / potegi[koncDoUciecia]) * potegi[koncDoUciecia + 1]) % potegi[10];
          if(aktDl <= 10) {
            pocz10 = konc10;
            pocz10Dl = aktDl; konc10Dl = aktDl;
          } else if(aktDl < 20) {
            pocz10 = (pocz10 / potegi[20 - aktDl]) * potegi[20 - aktDl] + konc10 / potegi[aktDl - 10];
            pocz10Dl = 10; konc10Dl = 10;
          }
        } else {
          wynik += (unsigned long long)(aktDl - aDl);
          ++konc10;
          if(aktDl <= 10) {
            pocz10 = konc10;
          } else if(aktDl < 20) {
            pocz10 = (pocz10 / potegi[20 - aktDl]) * potegi[20 - aktDl] + konc10 / potegi[aktDl - 10];
          }
        }
      } else {
        if(pocz10Dl < 10) {
          pocz10 *= 10ULL;
          ++pocz10Dl;
        }
        if(konc10Dl < 10) {
          konc10 *= 10ULL;
          ++konc10Dl;
        } else {
          konc10 %= potegi[9];
          konc10 *= 10ULL;
        }
        ++aktDl;
        ++wynik;
      }
    } else if(a > poczDociety) {
      if(aDl >= aktDl) {
        pocz10 = a; konc10 = a; aktDl = aDl;
        pocz10Dl = aktDl; konc10Dl = aktDl;
      } else {
        wynik += (unsigned long long)(aktDl - aDl);
        if(aktDl <= 10) {
          pocz10 = a * potegi[aktDl - aDl];
          konc10 = pocz10;
        } else if(aktDl < 20) {
          pocz10 = a * potegi[10 - aDl];
          konc10 = (pocz10 % potegi[20 - aktDl]) * potegi[aktDl - 10];
        } else {
          pocz10 = a * potegi[10 - aDl];
          konc10 = 0;
        }
      }
    } else {
      ++aktDl;
      wynik += (unsigned long long)(aktDl - aDl);
      if(aktDl <= 10) {
        pocz10 = a * potegi[aktDl - aDl];
        konc10 = pocz10;
        pocz10Dl = aktDl; konc10Dl = aktDl;
      } else if(aktDl < 20) {
        pocz10 = a * potegi[10 - aDl];
        konc10 = (pocz10 % potegi[20 - aktDl]) * potegi[aktDl - 10];
      } else {
        pocz10 = a * potegi[10 - aDl];
        konc10 = 0;
      }
    }


   // cout << a << " - " << pocz10 << " - " << konc10 << " - " << aktDl << " - " << wynik << endl;
  }
  cout << wynik;
  return 0;
}