import std.stdio, std.string, std.algorithm, std.array, std.conv;

int mex(int[] arr)
{
	if (arr.maxElement == 2)
		return 2;
	else if (arr.minElement == arr.maxElement)
		return 1 - arr.minElement;
	else
		return 2;
}

void main()
{
    int t;
    scanf("%d", &t);
    getchar();
    foreach(j; 0..t){
	int str_l;
	scanf("%d", &str_l);
	getchar();
	auto str1 = readln.strip();
	auto str2 = readln.strip();
	int[] result;
	for (int i = 0; i < str_l; i++)
	{
		if (str1[i] == str2[i])
		{
			result ~= cast(int)(str1[i] - '0');
		}
		else
			result ~= 2;
	}
	int[] mex_res;
	debug{writeln(result);}
	for (int i = 0; i < str_l; i++)
	{
		mex_res ~= mex(result[i..i+1]);
	}
	debug{writeln(mex_res);}
	for (int i = 0; i < str_l; i++)
	{
		if (mex_res[i] == 0)
		{
			if (i == 0)
			{
				if (mex_res[i+1] == 1)
				{
					if (mex(result[i..i+2]) == 2)
						mex_res[i+1]++;
				}
			}
			else if (i == str_l - 1)
			{
				if (mex_res[i-1] == 1)
				{
					if (mex(result[i-1..i+1]) == 2)
						mex_res[i-1]++;
				}
			}
			else
			{
				if (mex_res[i-1] == 1)
				{
					if (mex(result[i-1..i+1]) == 2)
						mex_res[i-1]++;
				}
				else if (mex_res[i+1] == 1)
				{
					if (mex(result[i..i+2]) == 2)
						mex_res[i+1]++;
				}
			}
		}
	}
	writeln(mex_res.sum);
    }
}
