Frog Jumping

A frog is initially at position $0$ on the number line. The frog has two positive integers $a$ and $b$. From a position $k$, it can either jump to position $k+a$ or $k-b$.

Let $f(x)$ be the number of distinct integers the frog can reach if it never jumps on an integer outside the interval $[0, x]$. The frog doesn’t need to visit all these integers in one trip, that is, an integer is counted if the frog can somehow reach it if it starts from $0$.

Given an integer $m$, find $\sum_{i=0}^{m} f(i)$. That is, find the sum of all $f(i)$ for $i$ from $0$ to $m$.

Input

The first line contains three integers $m, a, b$ ($1 \leq m \leq 10^9, 1 \leq a,b \leq 10^5$).

Output

Print a single integer, the desired sum.

Examples

input

7 5 3

output

19

input

1000000000 1 2019

output

500000001500000001

input

100 100000 1

output

101

input

6 4 5

output

10

Note

In the first example, we must find $f(0)+f(1)+\ldots+f(7)$. We have $f(0) = 1, f(1) = 1, f(2) = 1, f(3) = 1, f(4) = 1, f(5) = 3, f(6) = 3, f(7) = 8$. The sum of these values is $19$.

In the second example, we have $f(i) = i+1$, so we want to find $\sum_{i=0}^{10^9} i+1$.

In the third example, the frog can’t make any jumps in any case.

Solution:

#include <bits/stdc++.h>

using namespace std;

int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int m, a, b;
cin >> m >> a >> b;
vector<int> first(a + b, -1);
int x = 0;
int y = 0;
while (true) {
first[x] = y;
if (x >= b) {
x -= b;
} else {
x += a;
}
if (x == 0) {
break;
}
y = max(y, x);
}
long long ans = 0;
for (int i = 0; i < a + b; i++) {
    if (first[i] != -1) {
      ans += max(0, m - first[i] + 1);
    }
  }
  if (m >= a + b) {
int left = m - (a + b);
int g = __gcd(a, b);
int u = left / g * g;
long long first = left - 0 + 1;
long long last = left - u + 1;
long long cnt = (first - last) / g + 1;
ans += (first + last) * cnt / 2;
}
cout << ans << '\n';
  return 0;
}