Problem:
Score : 200 points

Problem Statement

Takahashi has many red balls and blue balls. Now, he will place them in a row.

Initially, there is no ball placed.

Takahashi, who is very patient, will do the following operation 10^{100} times:

Place A blue balls at the end of the row of balls already placed. Then, place B red balls at the end of the row.

How many blue balls will be there among the first N balls in the row of balls made this way?

Constraints

1 \leq N \leq 10^{18}

A, B \geq 0

0 < A + B \leq 10^{18}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N A B

Output

Print the number of blue balls that will be there among the first N balls in the row of balls.

Sample Input 1

8 3 4

Sample Output 1

4

Let b denote a blue ball, and r denote a red ball. The first eight balls in the row will be bbbrrrrb, among which there are four blue balls.

Sample Input 2

8 0 4

Sample Output 2

0

He placed only red balls from the beginning.

Sample Input 3

6 2 4

Sample Output 3

2

Among bbrrrr, there are two blue balls.

Solution in Rust (1.15.1) (judge verdict: Wrong Answer)

macro_rules! input {
    (source = $s:expr, $($r:tt)*) => {
        let mut iter = $s.split_whitespace();
        input_inner!{iter, $($r)*}
    };
    ($($r:tt)*) => {
        let s = {
            use std::io::Read;
            let mut s = String::new();
            std::io::stdin().read_to_string(&mut s).unwrap();
            s
        };
        let mut iter = s.split_whitespace();
        input_inner!{iter, $($r)*}
    };
}

macro_rules! input_inner {
    ($iter:expr) => {};
    ($iter:expr, ) => {};

    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {
        let $var = read_value!($iter, $t);
        input_inner!{$iter $($r)*}
    };
}

macro_rules! read_value {
    ($iter:expr, ( $($t:tt),* )) => {
        ( $(read_value!($iter, $t)),* )
    };

    ($iter:expr, [ $t:tt ; $len:expr ]) => {
        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()
    };

    ($iter:expr, chars) => {
        read_value!($iter, String).chars().collect::<Vec<char>>()
    };

    ($iter:expr, usize1) => {
        read_value!($iter, usize) - 1
    };

    ($iter:expr, $t:ty) => {
        $iter.next().unwrap().parse::<$t>().expect("Parse error")
    };
}

fn repeat(s: &str, n: usize) -> String {
    let mut ans = "".to_string();
    for _ in 0..n {
        ans = ans + s;
    }
    ans
}

fn exe(n: usize, blue: usize, red: usize) -> usize {
    let mut balls = "".to_string();
    let blue_str = &repeat("b", blue);
    let red_str = &repeat("r", red);
    let mut done = false;
    for _ in 0..100 {
        for _ in 0..10 {
            if balls.len() + blue > n {
                balls += &repeat("b", n - balls.len());
                done = true;
                break;
            }
            balls += blue_str;
            if balls.len() > n {
                done = true;
                break;
            }
            if balls.len() + red > n {
                done = true;
                break;
            }
            balls += red_str;
            if balls.len() > n as usize {
                done = true;
                break;
            }
        }
        if done {
            break;
        }
    }
    balls.chars().filter(|&x| x == 'b').count() as usize
}

fn main() {
    input! {
        n: usize,
        a: usize,
        b: usize,
    }
    let ans = exe(n, a, b);
    println!("{}", ans);
}

#[test]
fn test() {
    assert_eq!(exe(8, 3, 4), 4);
    assert_eq!(exe(8, 0, 4), 0);
    assert_eq!(exe(6, 2, 4), 2);
}