#include "bits/stdc++.h" using namespace std; #define MAX 20010 long long mod = (long long)1e9 + 7; long long lowdp1[1 << 4][MAX]; long long highdp1[1 << 4][MAX]; long long lowsum1[MAX]; long long lowsum2[MAX]; long long lowdp2[1 << 3][MAX]; long long highdp2[1 << 3][MAX]; int main(){ vector low(7); vector high(7); for (int i = 0; i < 7; i++) { cin >> low[i] >> high[i]; low[i] += 3; high[i] += 3; } lowdp1[0][0] = lowdp2[0][0] = 1; highdp1[0][MAX - 1] = highdp2[0][MAX - 1] = 1; for (int j = 1; j < MAX; j++) { for (int i = 0; i < (1 << 4) - 1; i++) { if (lowdp1[i][j - 1] == 0) continue; lowdp1[i][j] += lowdp1[i][j - 1]; lowdp1[i][j] %= mod; for (int k = 0; k < 4; k++) { if ((i >> k) % 2 == 1) continue; int t = k * 2; if (low[t] > j || high[t] < j) continue; lowdp1[i | (1 << k)][j] += lowdp1[i][j - 1]; lowdp1[i | (1 << k)][j] %= mod; } } lowsum1[j] = lowsum1[j - 1] + lowdp1[(1 << 4) - 1][j]; lowsum1[j] %= mod; } for (int j = 1; j < MAX; j++) { for (int i = 0; i < (1 << 3) - 1; i++) { if (lowdp2[i][j - 1] == 0) continue; lowdp2[i][j] += lowdp2[i][j - 1]; lowdp2[i][j] %= mod; for (int k = 0; k < 3; k++) { if ((i >> k) % 2 == 1) continue; int t = k * 2 + 1; if (low[t] > j || high[t] < j) continue; lowdp2[i | (1 << k)][j] += lowdp2[i][j - 1]; lowdp2[i | (1 << k)][j] %= mod; } } lowsum2[j] = lowsum2[j - 1] + lowdp2[(1 << 3) - 1][j]; lowsum2[j] %= mod; } for (int j = MAX - 2; j >= 0; j--) { for (int i = 0; i < (1 << 4) - 1; i++) { if (highdp1[i][j + 1] == 0) continue; highdp1[i][j] += highdp1[i][j + 1]; highdp1[i][j] %= mod; for (int k = 0; k < 4; k++) { if ((i >> k) % 2 == 1) continue; int t = k * 2; if (low[t] > j || high[t] < j) continue; highdp1[i | (1 << k)][j] += highdp1[i][j + 1]; highdp1[i | (1 << k)][j] %= mod; } } } for (int j = MAX - 2; j >= 0; j--) { for (int i = 0; i < (1 << 3) - 1; i++) { if (highdp2[i][j + 1] == 0) continue; highdp2[i][j] += highdp2[i][j + 1]; highdp2[i][j] %= mod; for (int k = 0; k < 3; k++) { if ((i >> k) % 2 == 1) continue; int t = k * 2 + 1; if (low[t] > j || high[t] < j) continue; highdp2[i | (1 << k)][j] += highdp2[i][j + 1]; highdp2[i | (1 << k)][j] %= mod; } } } long long ans = 0; for (int i = 1; i < MAX; i++) { ans += lowsum1[i - 1] * highdp2[(1 << 3) - 1][i]; ans += lowsum2[i - 1] * highdp1[(1 << 4) - 1][i]; ans %= mod; } cout << ans << endl; }