#include using namespace std; using ll = long long; using pll = pair; #define drep(i, cc, n) for (ll i = (cc); i <= (n); ++i) #define rep(i, n) drep(i, 0, n - 1) #define all(a) (a).begin(), (a).end() #define pb push_back #define fi first #define se second const ll MOD = 1000000007; const ll INF = 1LL << 60; const ll MAX = 2000; ll sum(vector &bit, ll i){ ll s = 0; while(i > 0){ s += bit[i]; s %= MOD; i -= i & -i; } return s; } void add(vector &bit, ll i, ll x){ while(i <= MAX){ bit[i] += x; bit[i] %= MOD; i += i & -i; } } int main(){ ll n, k; cin >> n >> k; vector a(n); rep(i, n) cin >> a[i]; string s; cin >> s; vector b(n); rep(i, n) b[i] = a[i]; sort(all(b)); b.erase(unique(all(b)), b.end()); rep(i, n) a[i] = lower_bound(all(b), a[i]) - b.begin()+1; vector> dp(k+1, vector(n, 0)); //初期化 rep(i, n) dp[0][i] = 1; //遷移 for(ll i=1; i<=k; i++){ vector max_bit(MAX+1, 0); vector min_bit(MAX+1, 0); for(ll j=0; j