#include const int MX = 100000, md = 1000000007; bool getNext(int twos, char digit, int& nextTwos) { if (digit == '1') { nextTwos = 0; return twos != 1; } else { nextTwos = twos + 1; return twos != 2; } } char a[MX + 1], b[MX + 1]; int dp[MX][3][3]; int main() { int T; scanf("%d", &T); while (T--) { memset(dp, 0, sizeof dp); scanf(" %s %s", a, b); int n = strlen(a); dp[0][a[0] - '1'][b[0] - '1']++; dp[0][b[0] - '1'][a[0] - '1']++; for (int i = 1; i < n - 1; i++) for (int j = 0; j < 3; j++) for (int k = 0; k < 3; k++) { int p, q; if (getNext(j, a[i], p) && getNext(k, b[i], q)) { dp[i][p][q] += dp[i - 1][j][k]; dp[i][p][q] %= md; } if (getNext(j, b[i], p) && getNext(k, a[i], q)) { dp[i][p][q] += dp[i - 1][j][k]; dp[i][p][q] %= md; } } int ans = 0; if (n == 1) ans = 2; else ans = (2 * dp[n - 2][0][0]) % md; printf("%d\n", ans); } return 0; }