Submission

Status:

PP--------

Subtask/Task Score:

20/100

Score: 20

User: kormuyang

Problemset: ทางเชื่อม

Language: cpp

Time: 0.611 second

Submitted On: 2025-12-15 12:14:19

#include <bits/stdc++.h>

using namespace std;

#define MOD 1000000007

void solve() {
    int l;
    vector<string> s(2);
    cin >> l >> s[0] >> s[1];
    vector<vector<int>> dp(2, vector<int>(2, 0));
    dp[0][0] = dp[1][0] = 1;
    for (int i = 0; i < l; i++) {
        int now = (i + 1) % 2, prv = i % 2;
        dp[0][now] = dp[1][now] = 0;
        if (s[0][i] == '.') {
            dp[0][now] = (dp[0][now] + dp[0][prv]) % MOD;
            if (s[1][i] == '.') {
                dp[0][now] = (dp[0][now] + dp[1][prv]) % MOD;
            }
        }
        if (s[1][i] == '.') {
            dp[1][now] = (dp[1][now] + dp[1][prv]) % MOD;
            if (s[0][i] == '.') {
                dp[1][now] = (dp[1][now] + dp[0][prv]) % MOD;
            }
        }
    }
    cout << (dp[0][l % 2] + dp[1][l % 2]) % MOD << '\n';
}

int main() {
    int n;
    cin >> n;
    while (n--) {
        solve();
    }
    return 0;
}