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

#define SIZE(c) static_cast<int>((c).size())

void inc(string& s) {
  for(int i=SIZE(s)-1;i>=0;--i) {
    if(s[i] < '9') {
      s[i]++;
      return;
    }
    s[i] = '0';
  }
}

struct SWithPad {
  string pref;
  int sz;
  bool operator<(const SWithPad& oth) const {
    if(sz != oth.sz) return sz < oth.sz;
    if(SIZE(pref) == SIZE(oth.pref)) return pref < oth.pref;
    const int l = min(SIZE(pref), SIZE(oth.pref));
    for(int i=0;i<l;++i)
      if(pref[i] != oth.pref[i]) return pref[i] < oth.pref[i];
    return SIZE(pref) < SIZE(oth.pref);
    if(SIZE(pref) > SIZE(oth.pref)) return false;
    for(int i=l;i<SIZE(oth.pref);++i) if(oth.pref[i] != '0') return true;
    return false;
  }
  char operator[](int idx)const {
    return idx < SIZE(pref) ? pref[idx] : '0';
  }
  void inc(){
    pref.resize(sz, '0');
    for(int i=sz-1;i>=0;--i) {
      if(pref[i] < '9') {
        pref[i]++;
        return;
      }
      pref[i] = '0';
    }
  }
  int size()const{return sz;}
};

int main(){
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  string last;
  int n;
  SWithPad lst;
  cin>>n>>lst.pref;
  lst.sz = SIZE(lst.pref);
  long long ans = 0;
  for(int _=1;_<n;++_) {
    SWithPad nxt;
    cin>>nxt.pref;
    nxt.sz = SIZE(nxt.pref);
    if(lst < nxt) {
      swap(nxt, lst);
      continue;
    }
    if(nxt.sz == lst.sz) {
      ++nxt.sz;
      ++ans;
      swap(nxt, lst);
      continue;
    }
    int i;
    for(i=0;i<SIZE(nxt);++i)
      if(nxt[i] != lst[i]) break;
    if(i < SIZE(nxt)) {
      if(nxt[i] > lst[i]) {
        ans += SIZE(lst) - SIZE(nxt);
        nxt.sz = lst.sz;
        swap(nxt, lst);
        continue;
      }
      ans += SIZE(lst) + 1 - SIZE(nxt);
      nxt.sz = lst.sz + 1;
      swap(nxt, lst);
      continue;
    }
    bool all9 = true;
    for(i=SIZE(nxt);i<SIZE(lst);++i) {
      if(lst[i] != '9'){
        all9 = false;
        break;
      }
    }
    if(!all9) {
      ans += SIZE(lst) - SIZE(nxt);
      lst.inc();
    } else {
      ans += SIZE(lst) + 1 - SIZE(nxt);
      nxt.sz = lst.sz + 1;
      swap(nxt, lst);
    }
  }
  cout << ans << endl;
}