考虑当前层数
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
int n;
long long mod=1e9+7;
long long dp[2][5005];
long long sum[2][5005];
char ch[5005];
int cur;
int main() {
while(~scanf("%d",&n))
{
//getchar();
ch[0]=' ';
for(int i=1;i<=n;i++)
{
getchar();
scanf("%c",&ch[i]);
}
memset(dp,0,sizeof(dp));
memset(sum,0,sizeof(sum));
dp[0][1]=1;
for(int i=1;i<=5002;i++)
{
sum[0][i]=(sum[0][i-1]+dp[0][i])%mod;
}
cur=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
//if (ch[i] == 's')
{
if(ch[i-1]=='f')
{
dp[cur][j]=dp[cur^1][j-1]%mod;
}
else
{
dp[cur][j]=(sum[cur^1][n]-sum[cur^1][j-1])%mod;
}
}
sum[cur][j]=(sum[cur][j-1]+dp[cur][j])%mod;
}
cur^=1;
}
printf("%lld\n",(sum[cur^1][n]+mod)%mod);
}
return 0;
}