On a table are `N`

cards, with a positive integer printed on the front and back of each card (possibly different).

We flip any number of cards, and after we choose one card.

If the number `X`

on the back of the chosen card is not on the front of any card, then this number X is good.

What is the smallest number that is good? If no number is good, output `0`

.

Here, `fronts[i]`

and `backs[i]`

represent the number on the front and back of card `i`

.

A flip swaps the front and back numbers, so the value on the front is now on the back and vice versa.

**Example:**

Input:fronts = [1,2,4,4,7], backs = [1,3,4,1,3]Output:`2`

Explanation:If we flip the second card, the fronts are`[1,3,4,4,7]`

and the backs are`[1,2,4,1,3]`

. We choose the second card, which has number 2 on the back, and it isn't on the front of any card, so`2`

is good.

**Note:**

`1 <= fronts.length == backs.length <= 1000`

.`1 <= fronts[i] <= 2000`

.`1 <= backs[i] <= 2000`

.

```
struct Solution;
use std::collections::HashSet;
impl Solution {
fn flipgame(fronts: Vec<i32>, backs: Vec<i32>) -> i32 {
let n = fronts.len();
let mut hs: HashSet<i32> = HashSet::new();
let mut res = std::i32::MAX;
for i in 0..n {
if fronts[i] == backs[i] {
hs.insert(fronts[i]);
}
}
for i in 0..n {
if !hs.contains(&fronts[i]) {
res = res.min(fronts[i]);
}
if !hs.contains(&backs[i]) {
res = res.min(backs[i]);
}
}
if res == std::i32::MAX {
0
} else {
res
}
}
}
#[test]
fn test() {
let fronts = vec![1, 2, 4, 4, 7];
let backs = vec![1, 3, 4, 1, 3];
let res = 2;
assert_eq!(Solution::flipgame(fronts, backs), res);
}
```