#include #include #define llint long long #define mod 1000000007 #define V(k, a, b, c, d) ((k)*625+(a)*125+(b)*25+(c)*5+(d)) using namespace std; llint n, t; llint l1, r1, l2, r2; vector G[1305]; bool win[1305], lose[1305], must[1305], fin[1305]; llint dp[20005][1305]; int main(void) { cin >> n >> t >> l1 >> r1 >> l2 >> r2; for(int i = 0; i < 5; i++){ for(int j = 0; j < 5; j++){ for(int k = 0; k < 5; k++){ for(int l = 0; l < 5; l++){ if(i==0&&j==0 || k==0&&l==0) continue; for(int m = 0; m < 2; m++){ int u, v = V(m, i, j, k, l); if(m == 0){ if(i>0&&k>0) u = V(1-m, i, j, (k+i)%5, l), G[v].push_back(u); if(j>0&&k>0) u = V(1-m, i, j, (k+j)%5, l), G[v].push_back(u); if(i>0&&l>0) u = V(1-m, i, j, k, (l+i)%5), G[v].push_back(u); if(j>0&&l>0) u = V(1-m, i, j, k, (l+j)%5), G[v].push_back(u); for(int p = 0; p < 5; p++){ for(int q = 0; q < 5; q++){ if(p==0&&q==0) continue; if(!(i+j==p+q || i+j>5&&(i+j)%5==(p+q)%5)) continue; if(i==p&&j==q || i==q&&j==p) continue; u = V(1-m, p, q, k, l), G[v].push_back(u); } } } else{ if(i>0&&k>0) u = V(1-m, (i+k)%5, j, k, l), G[v].push_back(u); if(i>0&&l>0) u = V(1-m, (i+l)%5, j, k, l), G[v].push_back(u); if(j>0&&k>0) u = V(1-m, i, (j+k)%5, k, l), G[v].push_back(u); if(j>0&&l>0) u = V(1-m, i, (j+l)%5, k, l), G[v].push_back(u); for(int p = 0; p < 5; p++){ for(int q = 0; q < 5; q++){ if(p==0&&q==0) continue; if(!(k+l==p+q || k+l>5&&(k+l)%5==(p+q)%5)) continue; if(k==p&&l==q || k==q&&l==p) continue; u = V(1-m, i, j, p, q), G[v].push_back(u); } } } } } } } } for(int i = 0; i < 5; i++){ for(int j = 0; j < 5; j++){ for(int k = 0; k < 5; k++){ for(int l = 0; l < 5; l++){ int v = V(0, i, j, k, l); int u = V(1, i, j, 0, 0); if(i==0&&j==0) fin[v] = true; for(int m = 0; m < G[v].size(); m++){ if(G[v][m] == u) lose[v] = true; } } } } } for(int i = 0; i < 5; i++){ for(int j = 0; j < 5; j++){ for(int k = 0; k < 5; k++){ for(int l = 0; l < 5; l++){ int v = V(1, i, j, k, l); int u = V(0, 0, 0, k, l); bool flag = false; for(int m = 0; m < G[v].size(); m++){ if(G[v][m] == u) win[v] = true; if(!lose[G[v][m]]) flag = true; } if(!flag) must[v] = true; } } } } int S = V(n, l1, r1, l2, r2); dp[0][S] = 1; for(int i = 0; i < t; i++){ for(int j = 0; j < 1305; j++){ for(int k = 0; k < G[j].size(); k++){ int u = G[j][k]; if(win[j] && !fin[u]) continue; if(!must[j] && lose[u]) continue; dp[i+1][u] += dp[i][j], dp[i+1][u] %= mod; } } } llint ans = 0; for(int i = 0; i <= t; i++){ for(int j = 0; j < 1305; j+=25){ ans += dp[i][j], ans %= mod; } } cout << ans << endl; return 0; }