A or B Equals C Gym-101028C
标签:水题
/*
题意:二进制数的或运算A | C = B, 给出位数相等的A,B,求有多少符合要求的C
思路:或运算(有真则真,全假才假),枚举所有可能的A, B,简化为两种情况,见代码
注意阅读后面的Note,结果可能会很大
*/
#include <stdio.h>
#include <string.h>
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int n;
char a[105], b[105];
scanf("%d %s %s", &n, a, b);
long long ans = 1; ///
int flag = 1;
for(int i = 0; i < n; i++)
{
if(a[i] == '1' && b[i] == '0') //情况(1)
{
flag = 0;
break;
}
else if(a[i] == '1' && b[i] == '1') //情况(2)
{
ans *= 2;
if(ans > 1000000007) ans %= 1000000007; ///乘一次模一次
}
}
if(flag) printf("%I64d\n", ans);
else printf("IMPOSSIBLE\n");
}
return 0;
}