Submission

Status:

PP--------

Subtask/Task Score:

20/100

Score: 20

User: kormuyang

Problemset: ทางเชื่อม

Language: cpp

Time: 0.617 second

Submitted On: 2025-12-15 12:53:12

#include <bits/stdc++.h>

using namespace std;

#define MOD (int)(1e9 + 7)

void solve() {
    int n;
    vector<string> s(2);
    cin >> n >> s[0] >> s[1];
    s[0] = ' ' + s[0];
    s[1] = ' ' + s[1];
    for (int i = 0; i < n; i++) {
        if ((s[0][i] == '#' || s[0][i + 1] == '#') && (s[1][i] == '#' || s[1][i + 1] == '#')) {
            cout << "0\n";
            return;
        }
    }
    vector<vector<int>> dp(2, vector<int>(n + 1, 0));
    dp[0][0] = dp[1][0] = 1;
    for (int i = 1; i <= n; i++) {
        if (s[0][i] == '.') {
            dp[0][i] = dp[0][i - 1];
            if (s[1][i] == '.') {
                dp[0][i] = (dp[0][i] + dp[1][i - 1]) % MOD;
            }
        }
        if (s[1][i] == '.') {
            dp[1][i] = dp[1][i - 1];
            if (s[0][i] == '.') {
                dp[1][i] = (dp[1][i] + dp[0][i - 1]) % MOD;
            }
        }
    }
    cout << (dp[0][n] + dp[1][n]) % MOD << '\n';
}

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