Problem:
Score : 300 points

Problem Statement

Find the maximum possible sum of the digits (in base 10) of a positive integer not greater than N.

Constraints

1\leq N \leq 10^{16}

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the maximum possible sum of the digits (in base 10) of a positive integer not greater than N.

Sample Input 1

100

Sample Output 1

18

For example, the sum of the digits in 99 is 18, which turns out to be the maximum value.

Sample Input 2

9995

Sample Output 2

35

For example, the sum of the digits in 9989 is 35, which turns out to be the maximum value.

Sample Input 3

3141592653589793

Sample Output 3

137

Solution in Rust (1.42.0) (judge verdict: Accepted)

#![allow(unused, non_snake_case, dead_code, non_upper_case_globals)]
use {
    proconio::{marker::*, *},
    std::{cmp::*, collections::*, mem::*},
};
macro_rules! chmax {
    ($ base : expr ,$ cmp : expr ) => {
        $base = max($base, $cmp);
    };
}
fn main() {
    input! {
       mut n:Chars,
    }
    let mut dp = vec![vec![-INF; 2]; 20];
    dp[0][1] = 0;
    pub fn charconv(c: char, base: char) -> i64 {
        return (c as u8 - base as u8) as i64;
    }

    for (i, &c) in n.iter().enumerate() {
        chmax!(dp[i + 1][1], dp[i][1] + charconv(c, '0'));
        chmax!(dp[i + 1][0], dp[i][0] + 9);
        chmax!(dp[i + 1][0], dp[i][1] + charconv(c, '0') - 1);
    }
    let mut ans = 0;
    let ln = n.len();
    chmax!(ans, dp[ln][0]);
    chmax!(ans, dp[ln][1]);
    println!("{}", ans);
}
const INF: i64 = 1 << 60;