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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <iostream>
#include <string>
using namespace std;


void increment(string &str){
	for(int i=str.size()-1;i>=0;i--)
		if(str[i]=='9')
			str[i]='0';
		else{
			str[i]++;
			break;
		}
}


int string_mode_func(string &act, string &last){
	if(act.size()>last.size())
		return 0;

	int status=0,res=0;
	for(int i=0;i<act.size();i++)
		if(act[i]<last[i]){
			status=1;
			break;
		}
		else if(act[i]>last[i]){
			status=2;
			break;
		}

	if(status==1){ //prefix mniejszy - wydłużamy stringa
		res += last.size()-act.size()+1;
		while(act.size()<=last.size())
			act.push_back('0');
	}
	else if(status==2){ //prefix wiekszy - dopychamy zerami
		res += last.size()-act.size();
		while(act.size()<last.size())
			act.push_back('0');
	}
	else{ //prefix równy = przepisujemy, próbujemy zwiększyć o 1, jak nie to wydłużamy
		bool non_nine=false;
		for(int i=act.size();i<last.size();i++)
			if(last[i]!='9'){
				non_nine=true;
				break;
			}

		if(non_nine){ //można kopiować i zwiększyć
			res += last.size()-act.size();
			for(int i=act.size();i<last.size();i++)
				act.push_back(last[i]);
			increment(act);
		}
		else{ //jednak wydłużamy stringa
			res += last.size()-act.size()+1;
			while(act.size()<=last.size())
				act.push_back('0');
		}
	}

	return res;
}


void go_clever(string &act, string &left, int &mid, string &right){
	left = act.substr(0, 10);
	mid = act.size()-17;
	right = act.substr(act.size()-7, string::npos);
}


void clever_mode_func(string &act, string &left, int &mid, string &right){
	int status=0;
	for(int i=0;i<act.size();i++)
		if(act[i]<left[i]){
			status=1;
			break;
		}
		else if(act[i]>left[i]){
			status=2;
			break;
		}

	if(status==1){ //liczba mniejsza od starej - wydłużamy string
		mid++;
		right="0000000";
		left=act;
		while(left.size()<10)
			left.push_back('0');
	}
	else if(status==2){ //liczba większa od starej - zerujemy końcówkę
		right="0000000";
		left=act;
		while(left.size()<10)
			left.push_back('0');
	}
	else{ //liczba równa starej - zwiększamy prawą stronę
		increment(right);
	}
}


int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	long long result=0;

	int n;
	cin >> n;

	bool mode = false; //false = string mode, true = clever mode
	string last; //string mode variables
	string left, right; int mid; //clever mode variables

	int x;
	cin >> x;
	last = to_string(x);
	while(--n){
		int x;
		cin >> x;
		string act = to_string(x);

		//string mode
		if(!mode){
			result += string_mode_func(act, last);
			//cerr << "After=" << act << " r=" << result << endl;
			last = act;

			if(last.size()>=20){
				mode=true;
				go_clever(act, left, mid, right);
				//cerr << "Going clever: left=" << left << " mid=" << mid << " right=" << right << endl;
			}
		}
		//clever mode
		else{
			clever_mode_func(act, left, mid, right);
			result += 17+mid - act.size();
		}
	}

	cout << result << "\n";
	return 0;
}