platinum_Problem_Setting (USACO February_Contest)
Time limit: 2 seconds | Memory limit: 512 MB | Task type: batch
Algorithms: subset dp, dynamic programming

**Note: The memory limit for this problem is 512MB, twice the default.**
Farmer John created $N$ ($1\le N\le 10^5$) problems. He then recruited $M$
($1\le M\le 20$) test-solvers, each of which rated every problem as "easy" or
"hard."
His goal is now to create a problemset arranged in increasing order of
difficulty, consisting of some subset of his $N$ problems arranged in some
order. There must exist no pair of problems such that some test-solver thinks
the problem later in the order is easy but the problem earlier in the order is
hard.
Count the number of distinct nonempty problemsets he can form, modulo $10^9+7$.
INPUT FORMAT (input arrives from the terminal / stdin):
The first line contains $N$ and $M$.
The next $M$ lines each contain a string of length $N$. The $i$th character of
this  string is E if the test-solver thinks the $i$th problem is easy, or H
otherwise.
OUTPUT FORMAT (print output to the terminal / stdout):
The number of distinct problemsets FJ can form, modulo $10^9+7$.
SAMPLE INPUT:
3 1
EHE
SAMPLE OUTPUT:
9
The nine possible problemsets are as follows:
[1]
[1,2]
[1,3]
[1,3,2]
[2]
[3]
[3,1]
[3,2]
[3,1,2]
Note that the order of the problems within the problemset matters.
SAMPLE INPUT:
10 6
EHEEEHHEEH
EHHHEEHHHE
EHEHEHEEHH
HEHEEEHEEE
HHEEHEEEHE
EHHEEEEEHE
SAMPLE OUTPUT:
33
SCORING:
Inputs 3-4: $M=1$
Inputs 5-14: $M\le 16$
Inputs 15-22: No additional constraints.
Problem credits: Benjamin Qi

Starter code:

Grader code:

Setup script:

Evaluation script: