题目链接:http://codeforces.com/problemset/problem/1060/B
Time limit per test: 2 seconds Memory limit per test: 512 megabytes

Problem Description

You are given a positive integer n.
Let S(x) be sum of digits in base 10 representation of xx, for example, S(123)=1+2+3=6, S(0)=0.
Your task is to find two integers a,ba,b, such that 0≤a,b≤n, a+b=n and S(a)+S(b) is the largest possible among all such pairs.

Input

The only line of input contains an integer n (1≤n≤10^12)

Output

Print largest S(a)+S(b) among all pairs of integers a,b, such that 0≤a,b≤n and a+b=n.

Input

35
10000000000

Output

17
91

Note

In the first example, you can choose, for example, a=17 and b=18, so that S(17)+S(18)=1+7+1+8=17. It can be shown that it is impossible to get a larger answer.

In the second test example, you can choose, for example, a=5000000001 and b=4999999999, with S(5000000001)+S(4999999999)=91. It can be shown that it is impossible to get a larger answer.

Solving Ideas

将n分离成最高项和其余项两项,然后把最高项的减一,另一项加一,使其出现最多的9。
例如:
n=359=300+59=299+60, 则s(299)+s(60)=2+(3-1)*9+6+0=26;
其中(3-1)指的是最高位后有多少个9.
n=99=90+9=89+10, 则s(89)+s(10)=8+(2-1)*9+1+0=18;
n=2568=2000+568=1999+569, 则s(1999)+s(569)=1+(4-1)*9+5+6+9=48。
具体见代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    char s[15];
    int ans, len, c, t;
    scanf("%d", &t);
    while (t--) {
        c = 1;
        ans = 0;
        scanf("%s", s);
        len = strlen(s);
        ans += s[0] - '0' + (len - 1) * 9 - 1;
        for (int i = len - 1; i > 0; i--) {
            s[i] += c;
            c = (s[i] - '0') / 10;
            s[i] = (s[i] - '0') % 10 + '0';
            ans += s[i] - '0';
        }
        printf("%d\n", ans + c);
    }
    return 0;
}