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
#include<iostream>
#include<algorithm>
#include<deque>
using namespace std;

const bool debug = false;

int dlen(long long v) {
    int cnt = 0;
    while(v != 0) {
        cnt += 1;
        v /= 10;
    }
    return cnt;
}

const int PRLEN = 17;

class SNum {
    long long primary;
    int zeros;
    public:
        SNum(int a) {
            primary = a;
            zeros = 0;
        }
        SNum(int a, int zerAfter) {
            primary = a;
            int zerosForPr = min(zerAfter, PRLEN - dlen(a));
            for (int i = 0; i < zerosForPr; i++)
                primary *= 10;
            zeros = zerAfter - zerosForPr;
        }

        int len() {
            return dlen(primary) + zeros;
        }

        long long prefWithLen(int k) {
            int toCut = dlen(primary) - k;
            long long pref = primary;
            for (int i = 0; i < toCut; i++)
                pref /= 10;
            return pref;
        }

        bool primaryWitoutLeadingWillCarry(int digits) {
            long long sufSize = dlen(primary) - digits;
            long long m = 1;
            for (int i = 0; i < sufSize; i++)
                m *= 10;
            return ((primary % m) + 1) >= m;
        }

        void addToPrimary(int v) {
            primary += v;
        }

        void debPrint() {
            if (!debug) return;
            cerr << primary;
            for (int i = 0; i < zeros; i++) 
                cerr << '0';
            cerr << endl;
        }
};

int main() {
    ios_base::sync_with_stdio(0);
    int n; cin >> n;

    int a; cin >> a;
    SNum p(a);
    p.debPrint();
    long long digitsAdded = 0;

    for(int i = 0; i < n - 1; i++) {
        cin >> a;
        if (dlen(a) > p.len())
            p = SNum(a);
        else {
            int pPref = p.prefWithLen(dlen(a));
            if (a > pPref) {
                int zeros = p.len() - dlen(a);
                p = SNum(a, zeros); // match length of p, but with prefix a
                digitsAdded += zeros; // just add zeros after a
            }
            else if (a < pPref) {
                // same as before, but with 1 extra zero
                int zeros = p.len() - dlen(a) + 1;
                p = SNum(a, zeros);
                digitsAdded += zeros;
            }
            else {
                if (p.primaryWitoutLeadingWillCarry(dlen(a))) {
                    // same as before, just make new one longer.
                    int zeros = p.len() - dlen(a) + 1;
                    p = SNum(a, zeros);
                    digitsAdded += zeros;
                }
                else {
                    p.addToPrimary(1);
                    digitsAdded += p.len() - dlen(a);
                }
            }
        }
        p.debPrint();
    }

    cout << digitsAdded << endl;

    return 0;
}