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