#include<iostream>
using namespace std;
#include<string>
int num,length1,length2;
string s1,s2;
int f[105][105]; //f[i][j]表示a的前i个字符与b的前j个字符的最大权值
int a[105];
int b[105];
int main()
{
int judge[5][5]={{5,-1,-2,-1,-3},{-1,5,-3,-2,-4},{-2,-3,5,-2,-2},{-1,-2,-2,5,-1},{-3,-4,-2,-1,0}};
int i,j;
cin>>num;
while(num--)
{
cin>>length1>>s1>>length2>>s2;
for(i=0;i<length1;i++)
{
if(s1[i]=='A') a[i]=0;
else if(s1[i]=='C') a[i]=1;
else if(s1[i]=='G') a[i]=2;
else if(s1[i]=='T') a[i]=3;
else return 1;
}
for(i=0;i<length2;i++)
{
if(s2[i]=='A') b[i]=0;
else if(s2[i]=='C') b[i]=1;
else if(s2[i]=='G') b[i]=2;
else if(s2[i]=='T') b[i]=3;
else return 1;
}
f[0][0]=0;
for(i=1;i<=length1;i++)
{
f[i][0]=f[i-1][0]+judge[a[i-1]][4];
}
for(j=1;j<=length2;j++)
{
f[0][j]=f[0][j-1]+judge[4][b[j-1]];
}
for(i=1;i<=length1;i++)
{
for(j=1;j<=length2;j++)
{
f[i][j]=f[i-1][j-1]+judge[a[i-1]][b[j-1]];
if((f[i-1][j]+judge[a[i-1]][4])>f[i][j])
f[i][j]=f[i-1][j]+judge[a[i-1]][4];
if((f[i][j-1]+judge[4][b[j-1]])>f[i][j])
f[i][j]=f[i][j-1]+judge[4][b[j-1]];
}
}
cout<<f[length1][length2]<<endl;
}
}
/*
int num,length1,length2;
string s1,s2;
int maxs,cur;
vector<pair<int,int> > st,result;
pair<int,int> pa;
void dfs(int a,int b,int cur)
{
if(a>=length1 || b>=length2)
{
if(maxs<cur)
{
maxs=cur;
result.clear();
for(vector<pair<int,int> >::iterator it=st.begin();it!=st.end();it++)
{
result.push_back(*it);
}
}
return;
}
if(s1[a]!=s2[b])
{
dfs(a,b+1,cur);
}
else
{
pa.first=a;
pa.second=b;
st.push_back(pa);
dfs(a+1,b+1,++cur);
st.pop_back();
if(!st.empty())
dfs(a+1,(*st.begin()).second+1,--cur);
}
}
void dfs1(int a,int b,int cur)
{
if(a>=length2 || b>=length1)
{
if(maxs<cur)
{
maxs=cur;
result.clear();
for(vector<pair<int,int> >::iterator it=st.begin();it!=st.end();it++)
{
result.push_back(*it);
}
}
return;
}
if(s2[a]!=s1[b])
{
dfs1(a,b+1,cur);
}
else
{
pa.first=a;
pa.second=b;
st.push_back(pa);
dfs1(a+1,b+1,++cur);
st.pop_back();
if(!st.empty())
dfs1(a+1,(*st.begin()).second+1,--cur);
}
}
int judge(char a,char b)
{
if(a=='-' && b=='-') return 0;
else if(a==b) return 5;
else if((a=='A' && b=='C')||(a=='C' && b=='A')) return -1;
else if((a=='A' && b=='G')||(a=='G' && b=='A')) return -2;
else if((a=='A' && b=='T')||(a=='T' && b=='A')) return -1;
else if((a=='A' && b=='-')||(a=='-' && b=='A')) return -3;
else if((a=='C' && b=='-')||(a=='-' && b=='C')) return -4;
else if((a=='C' && b=='G')||(a=='G' && b=='C')) return -3;
else if((a=='C' && b=='T')||(a=='T' && b=='C')) return -2;
else if((a=='G' && b=='T')||(a=='T' && b=='G')) return -2;
else if((a=='G' && b=='-')||(a=='-' && b=='G')) return -2;
else if((a=='T' && b=='-')||(a=='-' && b=='T')) return -1;
}
int main()
{
int i,j;
int sum;
cin>>num;
while(num--)
{
cin>>length1>>s1>>length2>>s2;
cur=maxs=0;
if(length1<=length2){
st.clear();
dfs(0,0,cur);
i=0;
for(vector<pair<int,int> >::iterator it=result.begin();it!=result.end();it++)
{
if((*it).second>((*it).first+i))
{
for(j=((*it).first+i);j<(*it).second;j++)
{
s1.insert((string::size_type)j,1,'-');
}
i=(*it).second-(*it).first;
}
}
cout<<s1<<endl;
sum=0;
for(i=0;i<s2.length();i++)
{
sum+=judge(s1[i],s2[i]);
}
cout<<sum<<endl;
}
else{
st.clear();
dfs1(0,0,cur);
i=0;
for(vector<pair<int,int> >::iterator it=result.begin();it!=result.end();it++)
{
if((*it).second>((*it).first+i))
{
for(j=((*it).first+i);j<(*it).second;j++)
{
s2.insert((string::size_type)j,1,'-');
}
i=(*it).second-(*it).first;
}
}
sum=0;
for(i=0;i<s1.length();i++)
{
sum+=judge(s1[i],s2[i]);
}
cout<<sum<<endl;
}
}
return 0;
}
*/