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