Submission

Status:

TTTTTTTTTT

Subtask/Task Score:

0/100

Score: 0

User: august

Problemset: ทางเชื่อม

Language: cpp

Time: 1.095 second

Submitted On: 2026-03-19 22:37:37

#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9+7;

int l;

int fnd(int i, int j, int state, vector<vector<vector<int>>> &dp, vector<string> &g) {
    if (i<0 || i>1 || (j < l && g[i][j] == '#')) return 0;
    if (j == l) {
        if (state == 0) return 1;
        return 0;
    }

    if (dp[i][j][state] != -1) return dp[i][j][state];

    int sm = 0;
    if (state == 0) {
        sm = (fnd(i, j+1, 0, dp, g)+sm)%MOD;
        sm = (fnd(i, j+1, 1, dp, g)+sm)%MOD;
        sm = (fnd(i, j+1, 2, dp, g)+sm)%MOD;    
    }
    else if (state == 1) {
        sm = (fnd(i-1, j, 4, dp, g)+sm)%MOD;
    }
    else if (state == 2) {
        sm = (fnd(i+1, j, 3, dp ,g)+sm)%MOD;
    }
    else if (state == 3) {
        sm = (fnd(i, j+1, 0, dp, g)+sm)%MOD;
        sm = (fnd(i, j+1, 1, dp, g)+sm)%MOD;
    }
    else if (state == 4) {
        sm = (fnd(i, j+1, 0, dp, g)+sm)%MOD;
        sm = (fnd(i, j+1, 3, dp, g)+sm)%MOD;
    }
    return dp[i][j][state] = sm;
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int n;
    cin>> n;

    while (n--) {
        cin>> l;

        vector<vector<vector<int>>> dp(2, vector<vector<int>>(l+1, vector<int>(5, -1)));
        vector<string> g(2);
        for (int i=0; i<2; i++) cin>> g[i];

        int sm = 0;
        for (int i=0; i<2; i++) {
            for (int j=0; j<3; j++) {
                sm = (fnd(i, 0, j, dp, g)+sm)%MOD;
            }
        }
        cout<<sm<< '\n';
    }
}