int tmp;
for(int k = l; k < r; ++k)
{
tmp = 0;
for(int p1 = k + 1; p1 > l && k - p1 + 1 <= K; --p1)
if(ys[p1][k]) Add(tmp, dp[l][p1 - 1]);
Add(dp2[l][r], (ll)tmp * (dp[k + 1][r] + dp2[k + 1][r]) % mod);
}
for(int k = l; k < r; ++k)
{
Add(dp2[l][r], (ll)dp3[l][k] * (dp[k + 1][r] + dp2[k + 1][r]) % mod);
}
int k = r;
for(int p1 = k + 1; p1 > l && k - p1 + 1 <= K; --p1)
if(ys[p1][k]) Add(dp3[l][k], dp[l][p1 - 1]);