Submission

Status:

PP--------

Subtask/Task Score:

20/100

Score: 20

User: krittaphot

Problemset: ทางเชื่อม

Language: cpp

Time: 0.367 second

Submitted On: 2026-03-04 14:17:12

#include <bits/stdc++.h>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	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++){
			if(mp[0][j] && mp[1][j]){
				dp[0][j] = (dp[0][j-1] + dp[1][j-1]) % 1000000007;
				dp[1][j] = (dp[0][j-1] + dp[1][j-1]) % 1000000007;
			}
			else if(mp[0][j] == false && mp[1][j] == true){
				dp[0][j] = 0;
				dp[1][j] = dp[1][j-1] % 1000000007;
			}
			else if(mp[0][j] == true && mp[1][j] == false){
				dp[0][j] = dp[0][j-1]% 1000000007;
				dp[1][j] = 0;
			}
			else{
				dp[0][j] = 0;
				dp[1][j] = 0;
			}
		}
		
//		cout << dp[0][n] << " " << dp[1][n] << "\n";
		cout << (dp[0][n]+dp[1][n])  % 1000000007 << "\n";
	}
}