Submission
Status:
PP--------
Subtask/Task Score:
20/100
Score: 20
User: krittaphot
Problemset: ทางเชื่อม
Language: cpp
Time: 0.914 second
Submitted On: 2026-03-04 14:02:31
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long q;
cin >> q;
while(q--){
long long n;
cin >> n;
vector<vector<long long>> dp(2,vector<long long> (n+1,0));
dp[0][0] = 1;
dp[1][0] = 1;
vector<vector<bool>> mp(2,vector<bool> (n+1,true));
for(long long i = 0;i<2;i++){
for(long long j = 1;j<n+1;j++){
char c;
cin >> c;
if(c == '#'){
mp[i][j] = false;
}
}
}
//
// for(long long i = 0;i<2;i++){
// for(long long j = 0;j<n+1;j++){
// cout << mp[i][j] << " ";
// }
// cout << "\n";
// }
for(long long j = 1;j<n+1;j++){
for(long long i = 0;i<2;i++){
if(!mp[i][j]){
dp[i][j] = 0;
continue;
}
else if(i == 0){
if(!mp[i+1][j]){
dp[i][j] = (dp[i][j-1] % 1000000007);
}
else{
dp[i][j] = (dp[i][j-1] + dp[i+1][j-1])% 1000000007 ;
}
}
else{
if(!mp[i-1][j]){
dp[i][j] = (dp[i][j-1] % 1000000007) ;
}
else{
dp[i][j] = (dp[i][j-1] + dp[i-1][j-1])% 1000000007 ;
}
}
}
}
// cout << dp[0][n] << " " << dp[1][n] << "\n";
cout << (dp[0][n]+dp[1][n]) % 1000000007 << "\n";
}
}