You are a product manager and currently leading a team to develop a new product. Unfortunately, the latest version of your product fails the quality check. Since each version is developed based on the previous version, all the versions after a bad version are also bad.

Suppose you have `n` versions `[1, 2, ..., n]` and you want to find out the first bad one, which causes all the following ones to be bad.

You are given an API `bool isBadVersion(version)` which returns whether `version` is bad. Implement a function to find the first bad version. You should minimize the number of calls to the API.

Example 1:

```Input: n = 5, bad = 4
Output: 4
Explanation:
Then 4 is the first bad version.
```

Example 2:

```Input: n = 1, bad = 1
Output: 1
```

Constraints:

• `1 <= bad <= n <= 231 - 1`

``````struct Solution {
}

impl Solution {
fn new(bad: i32) -> Self {
}

#[allow(non_snake_case)]
fn isBadVersion(&self, version: i32) -> bool {
}
}

impl Solution {
fn first_bad_version(&self, n: i32) -> i32 {
let mut lower = 1;
let mut upper = n;
while lower < upper {
let mid = lower + (upper - lower) / 2;
lower = mid + 1;
} else {
upper = mid;
}
}
lower
}
}

#[test]
fn test() {