Submission

Status:
PP--------

Score: 20

User: Jibhong

Problemset: ทางเชื่อม

Language: cpp

Time: 0.357 second

Submitted On: 2025-03-31 21:31:48

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int q;
    cin >> q;
    while(q--){
        int n;
        cin >> n;
        // use vector<bool> for clarity
        vector<bool> mem(n+2, 0), mem1(n+2, 0);
        
        for (int i = 1; i <= n; ++i) {
            char inp;
            cin >> inp;
            if (inp == '.')
                mem[i] = true;
        }
        for (int i = 1; i <= n; ++i) {
            char inp;
            cin >> inp;
            if (inp == '.')
                mem1[i] = true;
        }
        
        // Set boundaries
        mem[0] = mem[1];
        mem1[0] = mem1[1];
        mem[n+1] = true;
        mem1[n+1] = true;
        
        long long out = 1;
        // Loop from i = 0 to n.
        // Replace any mem[i-1] with mem[left] where left is defined as 0 when i==0.
        for (int i = 0; i <= n; ++i){
            int left = (i == 0 ? 0 : i - 1);
            if ((mem[i] == mem1[left] && !mem[i]) ||
                (mem[left] == mem1[i] && !mem1[i]) ||
                (mem[i] == mem1[i] && !mem[i])) {
                out = 0;
                break;
            }
            if (!mem[i+1] || !mem1[i+1])
                continue;
            out = (out * ( (int)mem[i] + (int)mem1[i] )) % MOD;
        }
        cout << out << "\n";
    }
    return 0;
}