Problem p02929 - Generation 1

Orig Description

Score : 500 points
Problem StatementThere are 2N squares arranged from left to right. You are given a string of length 2N representing the color of each of the squares.
The color of the i-th square from the left is black if the i-th character of S is B, and white if that character is W.
You will perform the following operation exactly N times: choose two distinct squares, then invert the colors of these squares and the squares between them. Here, to invert the color of a square is to make it white if it is black, and vice versa.  
Throughout this process, you cannot choose the same square twice or more. That is, each square has to be chosen exactly once.
Find the number of ways to make all the squares white at the end of the process, modulo 10^9+7.
Two ways to make the squares white are considered different if and only if there exists i (1 \leq i \leq N) such that the pair of the squares chosen in the i-th operation is different.
Constraints
1 \leq N \leq 10^5
|S| = 2N
Each character of S is B or W.
InputInput is given from Standard Input in the following format:
N
S
OutputPrint the number of ways to make all the squares white at the end of the process, modulo 10^9+7. If there are no such ways, print 0.
Sample Input 12
BWWB
Sample Output 14
There are four ways to make all the squares white, as follows:
Choose Squares 1, 3 in the first operation, and choose Squares 2, 4 in the second operation.
Choose Squares 2, 4 in the first operation, and choose Squares 1, 3 in the second operation.
Choose Squares 1, 4 in the first operation, and choose Squares 2, 3 in the second operation.
Choose Squares 2, 3 in the first operation, and choose Squares 1, 4 in the second operation.
Sample Input 24
BWBBWWWB
Sample Output 2288
Sample Input 35
WWWWWWWWWW
Sample Output 30

Extracted Specification

An integer N (1 ≤ N ≤ 10^5), representing some quantity or size.
A string S of length 2N, where each character is either 'B' or 'W'.

### Example Input:

```
2
BWWB
```

### Function Signature:
Write a function f(N, S) that takes in the input.
def f(N: int, S: str):
    '''
    N: an integer
    S: a string
    '''

Test Case Generator

Sure, let's create a test case generator based on the new problem statement. The generator will create random test cases within the given constraints.

Here's the test case generator for the problem:

```python
import random

def tcgen():
    # Generate a random N within the given constraints
    N = random.randint(1, 10**5)
    
    # Generate a random string S of length 2N with characters 'B' or 'W'
    S = ''.join(random.choice(['B', 'W']) for _ in range(2 * N))
    
    return N, S

# Example usage
N, S = tcgen()
print(N)
print(S)
```

This function `tcgen` generates a random integer `N` within the range \([1, 10^5]\) and a random string `S` of length `2N` consisting of characters 'B' and 'W'. You can use this function to produce random test cases for the problem.

Here's an example of how you can use this test case generator:

```python
# Generate a random test case
N, S = tcgen()

# Display the generated test case
print(f"Generated Test Case:")
print(f"N = {N}")
print(f"S = {S}")
```

This will print a random value of `N` and a corresponding string `S` as per the constraints. You can then use these values for testing your solution to the problem.

Extract Arguments

def extract_arguments(fh):
    N = int(fh.readline().strip())
    S = fh.readline().strip()
    return N, S