Submission
Status:
PP--------
Subtask/Task Score:
20/100
Score: 20
User: kormuyang
Problemset: ทางเชื่อม
Language: cpp
Time: 0.611 second
Submitted On: 2025-12-15 12:14:19
#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
void solve() {
int l;
vector<string> s(2);
cin >> l >> s[0] >> s[1];
vector<vector<int>> dp(2, vector<int>(2, 0));
dp[0][0] = dp[1][0] = 1;
for (int i = 0; i < l; i++) {
int now = (i + 1) % 2, prv = i % 2;
dp[0][now] = dp[1][now] = 0;
if (s[0][i] == '.') {
dp[0][now] = (dp[0][now] + dp[0][prv]) % MOD;
if (s[1][i] == '.') {
dp[0][now] = (dp[0][now] + dp[1][prv]) % MOD;
}
}
if (s[1][i] == '.') {
dp[1][now] = (dp[1][now] + dp[1][prv]) % MOD;
if (s[0][i] == '.') {
dp[1][now] = (dp[1][now] + dp[0][prv]) % MOD;
}
}
}
cout << (dp[0][l % 2] + dp[1][l % 2]) % MOD << '\n';
}
int main() {
int n;
cin >> n;
while (n--) {
solve();
}
return 0;
}