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.15.1) (judge verdict: Accepted)

#[allow(unused_imports)]
use std::io::*;
#[allow(unused_imports)]
use std::str::*;
#[allow(unused_imports)]
use std::mem::*;
#[allow(unused_imports)]
use std::cmp::*;
#[allow(unused_imports)]
use std::collections::HashMap;
#[allow(unused_imports)]
use std::collections::VecDeque;
#[allow(unused_imports)]
use std::usize;

#[allow(dead_code)]
fn read<T: FromStr>() -> T {
    let mut line = String::new();
    stdin().read_line(&mut line).unwrap();
    line.trim().to_string().parse().ok().unwrap()
}

#[allow(dead_code)]
fn read_cols<T: FromStr>() -> Vec<T> {
    let mut line = String::new();
    stdin().read_line(&mut line).unwrap();

    line.trim()
        .split_whitespace()
        .map(|s| s.parse().ok().unwrap())
        .collect()
}

fn main() {
    let n = read::<String>();

    let digits: Vec<i32> = n.chars().map(|v| v.to_digit(10).unwrap() as i32).collect();
    let digits_sum = digits.iter().sum();
    let nine_sum = 9 * ((n.len() as i32) - 1);
    let mut ans = max(digits_sum, nine_sum);
    for i in 0..digits.len() - 1 {
        if digits[i] == 0 {
            continue;
        }

        let sum = digits
            .iter()
            .map(|v| *v)
            .enumerate()
            .map(|(i_digit, v)| {
                if i_digit > i {
                    9
                } else if i_digit == i {
                    v - 1
                } else {
                    v
                }
            })
            .sum();

        if sum > ans {
            ans = sum;
        }
    }

    println!("{}", ans);
}