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
#include <iostream>
#include <string>

using namespace std;

void inc(string &a) {
	for(string::reverse_iterator i = a.rbegin(); i != a.rend(); i++) {
		if (*i == '9') {
			*i = '0';
		} else {
			(*i)++;
			return;
		}
	}
	a = "1" + a;
}

int main()
{
	int N;
	cin >> N;

	uint64_t liczb = 0;
	string t, s;
	cin >> s;
	//cerr << s << endl;
	while(--N) {
		t.swap(s);
		inc(t);
		cin >> s;

		int r = 0;
		string::const_iterator ss = s.begin(), tt = t.begin();
		for (; ss != s.end() && tt != t.end(); ss++, tt++) {
			if (!r) {
				if(*ss < *tt) {
					r = -1;
				} else if(*ss > *tt) {
					r = 1;
				}
			}
		}

		if (tt == t.end()) {
			if (ss == s.end()) {
				if (r >= 0) {
					// ok
				} else {
					s = s + "0";
					liczb++;
				}
			} else {
				// ok
			}
		} else {
			if (ss == s.end()) {
				if (r > 0) {
					while (s.length() < t.length()) {
						s.append("0");
						liczb++;
					}
				} else if (r < 0) {
					while (s.length() < t.length()) {
						s.append("0");
						liczb++;
					}
					s.append("0");
					liczb++;
				} else {
					liczb += t.length() - s.length();
					s.swap(t);
				}
			} else {
				abort(); // impossiburu
			}
		}
		//cerr << s << endl;
	}
	cout << liczb << endl;
	return 0;
}