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 C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <bitset>
#include <deque>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
const long INF = 1000000009;

long n;
long dig[16];
int main(){
	scanf("%ld", &n);
	long ans = 0;
	long num = 0;
	long n1 = n;
	long len = 0;
	for(int i = 0; n1 > 0; i++){
		dig[i] = n1 % 10;
		n1 /= 10;
		len = i;
	}
	for(int i = 0; i <= len; i++){
		ans += dig[i];
	}
	for(int i = 0; i <= len; i++){
		if(dig[i] != 0){
			long upsum = 0;
			for(int j = i+1; j <= len; j++){
				upsum += dig[j];
			}
			ans = std::max(ans, upsum + (dig[i]-1) + i*9);
			//printf("%d %ld\n", i, ans);
		}
	}
	printf("%ld\n", ans);
	return 0;
}