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
#include <bits/stdc++.h>
#define lld long long
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define MAX 300009
#define MOD 1000000007
#define INF 1000000000000000

using namespace std;

lld n,wyn,temp,tdl;
lld tab[MAX];
lld dl[MAX];
lld ost[MAX];
lld dychy[100];
lld czyzer[MAX];
pair<lld,lld> ktzer;
void dodaj(lld dli){
    int sk=0;
    for(int i=tdl-1;i>=dli;--i){
        if(czyzer[i]<ktzer.f&&i>=ktzer.s){
            ost[i]=0;
            czyzer[i]=ktzer.f;
        }
        if(ost[i]!=9){
            ost[i]++;
            sk=1;
            break;
        }
        ost[i]=0;
    }
    if(!sk){
		//cout<<"A";
        tdl++;
        wyn++;
        //ost[0]=1;
    }
}

lld por(int odi){
    lld ret=0;
    for(int i=odi-1;i>=0;--i){
        ret+=ost[i]*dychy[odi-1-i];
    }
    return ret;
}

void ustpier(lld na, lld od){
    for(int i=od-1;i>=0;--i){
        ost[i]=na%10;
        na=na/10;
    }
}

int main()
{
    dychy[0]=1;
    for(int i=1;i<=12;++i){
        dychy[i]=dychy[i-1]*10;
    }
    scanf("%lld",&n);

    for(int i=0;i<n;++i){
        scanf("%lld",&tab[i]);
        lld temp=tab[i];
        while(temp>0){
            dl[i]++;
            temp=temp/10;
        }
    }
    tdl=dl[0];
    ustpier(tab[0],dl[0]);
    for(int i=1;i<n;++i){
		//cout<<wyn<<endl;
        if(dl[i]>tdl){
            ustpier(tab[i],dl[i]);
            tdl=dl[i];
        }else{
            //cout<<tab[i]<<" "<<por(dl[i])<<" ";
            wyn+=tdl-dl[i];
            if(tab[i]>por(dl[i])){
                ustpier(tab[i],dl[i]);
                ktzer=mp(ktzer.f+1,dl[i]);
                for(int j=dl[i];j<dl[i]+10;++j){
					ost[j]=0;
					czyzer[j]=ktzer.f;
				}
            }else if(tab[i]<por(dl[i])){

                ustpier(tab[i],dl[i]);
                ktzer=mp(ktzer.f+1,dl[i]);
                for(int j=dl[i];j<dl[i]+10;++j){
					ost[j]=0;
					czyzer[j]=ktzer.f;
				}
                tdl++;
                wyn++;
                //cout<<"A";
            }else{
                if(dl[i]==tdl){
                    tdl++;
                    wyn++;
                }else{
                    dodaj(dl[i]);
                }
            }
        }
    }
    printf("%lld",wyn);
    return 0;
}

/*

*/