CF909C Python Indentation
题目描述
在 Python 中,代码块没有明确的 begin/end 或大括号来标记开始和结束。相反,代码块是通过缩进来定义的。
我们将考虑一个极其简化的 Python 子集,其中只有两种类型的语句。
**简单语句**用单行书写,每行一条。赋值就是简单语句的一个例子。
**for 语句**是复合语句:它们包含一个或多个其他语句。For 语句由以“for”前缀开头的单行标题和循环体组成。循环体是比标题缩进一级的语句块。循环体可以包含两种类型的语句。特别地,循环体不能为空。
现在给你一串没有缩进的语句。请找出有多少种缩进方式可以使这些语句组成一个有效的 Python 程序。
输入格式
第一行包含一个整数 $N (1 \le N \le 5000)$,表示程序中命令的数量。
接下来是 $N$ 行程序,每行描述一条命令。每条命令要么是 `f`(表示 for 语句),要么是 `s`(表示简单语句)。保证最后一行是简单语句。
输出格式
输出给定语句序列的缩进方案数,对 $10^9 + 7$ 取模。
说明/提示
#### 样例解释 #1
在第一个测试用例中,只有一种缩进程序的方法:第二个 for 语句必须是第一个 for 语句循环体的一部分。
```
简单语句
for 语句
for 语句
简单语句
```
#### 样例解释 #2
在第二个测试用例中,有两种缩进程序的方法:第二个 for 语句既可以是第一个 for 语句循环体的一部分,也可以是第一个 for 语句之后的一个单独语句。
```
for 语句
简单语句
for 语句
简单语句
```
或
```
for 语句
简单语句
for 语句
简单语句
```