Problem:
Score : 400 points

Problem Statement

Given are integers A, B, and N.

Find the maximum possible value of floor(Ax/B) - A × floor(x/B) for a non-negative integer x not greater than N.

Here floor(t) denotes the greatest integer not greater than the real number t.

Constraints

1 ≤ A ≤ 10^{6}

1 ≤ B ≤ 10^{12}

1 ≤ N ≤ 10^{12}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B N

Output

Print the maximum possible value of floor(Ax/B) - A × floor(x/B) for a non-negative integer x not greater than N, as an integer.

Sample Input 1

5 7 4

Sample Output 1

2

When x=3, floor(Ax/B)-A×floor(x/B) = floor(15/7) - 5×floor(3/7) = 2. This is the maximum value possible.

Sample Input 2

11 10 9

Sample Output 2

9

Solution in Java (OpenJDK 1.8.0) (judge verdict: Time Limit Exceeded)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Main {
    public static void main(final String[] args) throws Exception {

        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {
            List<String> inputString = Arrays.asList(br.readLine().split(" "));
            long A = Long.parseLong(inputString.get(0));
            long B = Long.parseLong(inputString.get(1));
            long N = Long.parseLong(inputString.get(2));

            List<Long> ansList = new ArrayList<>();
            for (long i = N; i >= 0; i--) {
                ansList.add((long)(Math.floor((A * i) / B) - (A * Math.floor(i / B))));
            }

            sortNatualOrder(ansList);
            long ans = ansList.get(ansList.size() - 1);
            System.out.println(ans);
        } catch (IOException | NumberFormatException e) {
            e.printStackTrace();
            System.exit(0);
        } catch (final Exception e) {
            e.printStackTrace();
            System.exit(0);
        }
    }

    private static void sortNatualOrder(List<Long> targetList) {
        for (int i = 0; i < targetList.size() - 1; i++) {
            for (int j = targetList.size() - 1; j > i ; j--) {
                if (targetList.get(j - 1) > targetList.get(j)) {
                    Long tmp = targetList.get(j - 1);
                    targetList.set(j - 1, targetList.get(j));
                    targetList.set(j, tmp);
                }
            }
        }
    }
}