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 Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.io.*;

public class Main
{
	static InputReader in;    
	static PrintWriter out;  
	
	
	/**
     * @param args
     * @throws IOException
     */
	
    public static void main(String[] args) throws IOException
    {
    	in = new InputReader(System.in);    
        out = new PrintWriter(System.out);
        
        String n=in.next();
        int count=0,sum=0;
        int l=n.length();
        
        for(int i=1;i<l;i++)
        {
        	if(n.charAt(i)!='9')
        	{
        		count=i;
        		break;
        	}
        }
        
        if(count==0)
        {
        	if(l==1)
        		out.println(n);
        	else
        	{
        		for(int i=0;i<l;i++)
        		{
        			sum+=(int)n.charAt(i)-48;
        		}
        		out.println(sum);
        	}
        }
        else
        {
        	sum=((int)n.charAt(0)-49)+(l-1)*9;
        	out.println(sum);
        }
        
        out.close();
    }

	static class InputReader {    
        BufferedReader br;    
    
        public InputReader(InputStream stream) {    
            br = new BufferedReader(new InputStreamReader(stream));    
        }    
    
        public int nextInt() throws IOException {    
            int c = br.read();    
            while (c <= 32) {    
                c = br.read();    
            }    
            boolean negative = false;    
            if (c == '-') {    
                negative = true;    
                c = br.read();    
            }    
            int x = 0;    
            while (c > 32) {    
                x = x * 10 + c - '0';    
                c = br.read();    
            }    
            return negative ? -x : x;    
        }    
    
        public long nextLong() throws IOException {    
            int c = br.read();    
            while (c <= 32) {    
                c = br.read();    
            }    
            boolean negative = false;    
            if (c == '-') {    
                negative = true;    
                c = br.read();    
            }    
            long x = 0;    
            while (c > 32) {    
                x = x * 10 + c - '0';    
                c = br.read();    
            }    
            return negative ? -x : x;    
        }    
    
        public String next() throws IOException {    
            int c = br.read();    
            while (c <= 32) {    
                c = br.read();    
            }    
            StringBuilder sb = new StringBuilder();    
            while (c > 32) {    
                sb.append((char) c);    
                c = br.read();    
            }    
            return sb.toString();    
        }    
    
        public double nextDouble() throws IOException {    
            return Double.parseDouble(next());    
        }    
    }
}