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;
}