#include <bits/stdc++.h>
int main() {
using namespace std;
ios_base::sync_with_stdio(false), cin.tie(nullptr);
int T; cin >> T;
for (int case_num = 1; case_num <= T; case_num ++) {
int N; cin >> N;
vector<string> A(N); for (auto& a : A) cin >> a;
int ans = 0;
string cur = A[0];
cout << " cur = " << cur << endl;
for (int i = 1; i < N; i++) {
// increment cur, because strictly increasing
for (int x = int(cur.size())-1; true; x--) {
if (x < 0) {
cur.insert(cur.begin(), '1');
break;
} else if (cur[x] == '9') {
cur[x] = '0';
continue;
} else {
cur[x]++;
break;
}
}
string cnd = A[i];
if (cnd.size() > cur.size()) {
// do nothing
cur = cnd;
continue;
} else {
// try to match it in size
assert(cur.size() >= cnd.size());
for (int a = 0; true; a++) {
if (a == int(cnd.size())) {
// the prefixes match
ans += int(cur.size() - cnd.size());
cnd = cur;
break;
} else if (cnd[a] < cur[a]) {
// it's bad
ans += int(cur.size() - cnd.size() + 1);
cnd.insert(cnd.end(), cur.size() - cnd.size() + 1, '0');
break;
} else if (cnd[a] > cur[a]) {
// it's fine, we can just insert 0's
ans += int(cur.size() - cnd.size());
cnd.insert(cnd.end(), cur.size() - cnd.size(), '0');
break;
} else {
continue;
}
}
cur = cnd;
}
}
cout << "Case #" << case_num << ": " << ans << '\n';
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgppbnQgbWFpbigpIHsKCXVzaW5nIG5hbWVzcGFjZSBzdGQ7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY2luLnRpZShudWxscHRyKTsKCglpbnQgVDsgY2luID4+IFQ7Cglmb3IgKGludCBjYXNlX251bSA9IDE7IGNhc2VfbnVtIDw9IFQ7IGNhc2VfbnVtICsrKSB7CgoJCWludCBOOyBjaW4gPj4gTjsKCQl2ZWN0b3I8c3RyaW5nPiBBKE4pOyBmb3IgKGF1dG8mIGEgOiBBKSBjaW4gPj4gYTsKCgkJaW50IGFucyA9IDA7CgkJCgkJc3RyaW5nIGN1ciA9IEFbMF07CgkJY291dCA8PCAiIGN1ciA9ICIgPDwgY3VyIDw8IGVuZGw7CgkJZm9yIChpbnQgaSA9IDE7IGkgPCBOOyBpKyspIHsKCQkJLy8gaW5jcmVtZW50IGN1ciwgYmVjYXVzZSBzdHJpY3RseSBpbmNyZWFzaW5nCgkJCWZvciAoaW50IHggPSBpbnQoY3VyLnNpemUoKSktMTsgdHJ1ZTsgeC0tKSB7CgkJCQlpZiAoeCA8IDApIHsKCQkJCQljdXIuaW5zZXJ0KGN1ci5iZWdpbigpLCAnMScpOwoJCQkJCWJyZWFrOwoJCQkJfSBlbHNlIGlmIChjdXJbeF0gPT0gJzknKSB7CgkJCQkJY3VyW3hdID0gJzAnOwoJCQkJCWNvbnRpbnVlOwoJCQkJfSBlbHNlIHsKCQkJCQljdXJbeF0rKzsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoKCQkJc3RyaW5nIGNuZCA9IEFbaV07CgkJCWlmIChjbmQuc2l6ZSgpID4gY3VyLnNpemUoKSkgewoJCQkJLy8gZG8gbm90aGluZwoJCQkJY3VyID0gY25kOwoJCQkJY29udGludWU7CgkJCX0gZWxzZSB7CgkJCQkvLyB0cnkgdG8gbWF0Y2ggaXQgaW4gc2l6ZQoJCQkJYXNzZXJ0KGN1ci5zaXplKCkgPj0gY25kLnNpemUoKSk7CgkJCQlmb3IgKGludCBhID0gMDsgdHJ1ZTsgYSsrKSB7CgkJCQkJaWYgKGEgPT0gaW50KGNuZC5zaXplKCkpKSB7CgkJCQkJCS8vIHRoZSBwcmVmaXhlcyBtYXRjaAoJCQkJCQlhbnMgKz0gaW50KGN1ci5zaXplKCkgLSBjbmQuc2l6ZSgpKTsKCQkJCQkJY25kID0gY3VyOwoJCQkJCQlicmVhazsKCQkJCQl9IGVsc2UgaWYgKGNuZFthXSA8IGN1clthXSkgewoJCQkJCQkvLyBpdCdzIGJhZAoJCQkJCQlhbnMgKz0gaW50KGN1ci5zaXplKCkgLSBjbmQuc2l6ZSgpICsgMSk7CgkJCQkJCWNuZC5pbnNlcnQoY25kLmVuZCgpLCBjdXIuc2l6ZSgpIC0gY25kLnNpemUoKSArIDEsICcwJyk7CgkJCQkJCWJyZWFrOwoJCQkJCX0gZWxzZSBpZiAoY25kW2FdID4gY3VyW2FdKSB7CgkJCQkJCS8vIGl0J3MgZmluZSwgd2UgY2FuIGp1c3QgaW5zZXJ0IDAncwoJCQkJCQlhbnMgKz0gaW50KGN1ci5zaXplKCkgLSBjbmQuc2l6ZSgpKTsKCQkJCQkJY25kLmluc2VydChjbmQuZW5kKCksIGN1ci5zaXplKCkgLSBjbmQuc2l6ZSgpLCAnMCcpOwoJCQkJCQlicmVhazsKCQkJCQl9IGVsc2UgewoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQl9CgkJCQljdXIgPSBjbmQ7CgkJCX0KCQl9CgoJCWNvdXQgPDwgIkNhc2UgIyIgPDwgY2FzZV9udW0gPDwgIjogIiA8PCBhbnMgPDwgJ1xuJzsKCX0KCglyZXR1cm4gMDsKfQo=