#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define dou double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define fi first
#define se second
#define pb push_back
#define FOR(i,a,b) for(int i=(a); i<=(b); i++)
#define FORD(i,a,b) for(int i=(a); i>=(b); i--)
#define REP(i,a,b) for(int i=(a); i<(b); i++)
#define el '\n'
#define all(x) (x).begin(), (x).end()
const int maxN = 2e5;
const int maxM = 3e3;
const int LOG = 20;
const int mod = (int)1e9 + 7;
const ll oo = 1e18;
int query;
namespace subtask1
{
int n, a[maxN+5];
string s;
string cal(string x)
{
string temp = " ";
FOR(i,1,n)
{
int idx = a[i];
temp += x[idx];
}
return temp;
}
void solve()
{
cin >> n;
cin >> s;
s = " " + s;
FOR(i,1,n) cin >> a[i];
set<string> st;
queue<pair<string, int>> q;
q.push({s, 0});
while(!q.empty())
{
string x = q.front().fi;
int kc = q.front().se;
q.pop();
string newX = cal(x);
if(newX == s)
{
cout << kc + 1 << el;
break;
}
else if(!st.count(newX)) q.push({newX, kc+1});
}
}
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
#define task "safe"
if(fopen(task".inp", "r"))
{
freopen(task".inp", "r", stdin);
freopen(task".out", "w", stdout);
}
cin >> query;
while(query--)subtask1::solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcgCiNkZWZpbmUgZG91IGRvdWJsZQojZGVmaW5lIHBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgcGxsIHBhaXI8bGwsbGw+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBGT1IoaSxhLGIpIGZvcihpbnQgaT0oYSk7IGk8PShiKTsgaSsrKQojZGVmaW5lIEZPUkQoaSxhLGIpIGZvcihpbnQgaT0oYSk7IGk+PShiKTsgaS0tKQojZGVmaW5lIFJFUChpLGEsYikgZm9yKGludCBpPShhKTsgaTwoYik7IGkrKykKI2RlZmluZSBlbCAnXG4nCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKY29uc3QgaW50IG1heE4gPSAyZTU7CmNvbnN0IGludCBtYXhNID0gM2UzOwpjb25zdCBpbnQgTE9HID0gMjA7CmNvbnN0IGludCBtb2QgPSAoaW50KTFlOSArIDc7CmNvbnN0IGxsIG9vID0gMWUxODsKCmludCBxdWVyeTsKCm5hbWVzcGFjZSBzdWJ0YXNrMQp7CiAgICBpbnQgbiwgYVttYXhOKzVdOwogICAgc3RyaW5nIHM7CiAgICAKICAgIHN0cmluZyBjYWwoc3RyaW5nIHgpCiAgICB7CiAgICAgICAgc3RyaW5nIHRlbXAgPSAiICI7CiAgICAgICAgRk9SKGksMSxuKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGlkeCA9IGFbaV07CiAgICAgICAgICAgIHRlbXAgKz0geFtpZHhdOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGVtcDsKICAgIH0KICAgIAogICAgdm9pZCBzb2x2ZSgpCiAgICB7CiAgICAgICAgY2luID4+IG47CiAgICAgICAgY2luID4+IHM7CiAgICAgICAgcyA9ICIgIiArIHM7CiAgICAgICAgRk9SKGksMSxuKSBjaW4gPj4gYVtpXTsKICAgICAgICBzZXQ8c3RyaW5nPiBzdDsKICAgICAgICBxdWV1ZTxwYWlyPHN0cmluZywgaW50Pj4gcTsKICAgICAgICBxLnB1c2goe3MsIDB9KTsKICAgICAgICB3aGlsZSghcS5lbXB0eSgpKQogICAgICAgIHsKICAgICAgICAgICAgc3RyaW5nIHggPSBxLmZyb250KCkuZmk7CiAgICAgICAgICAgIGludCBrYyA9IHEuZnJvbnQoKS5zZTsKICAgICAgICAgICAgcS5wb3AoKTsKICAgICAgICAgICAgc3RyaW5nIG5ld1ggPSBjYWwoeCk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZihuZXdYID09IHMpIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IGtjICsgMSA8PCBlbDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYoIXN0LmNvdW50KG5ld1gpKSBxLnB1c2goe25ld1gsIGtjKzF9KTsKICAgICAgICB9CiAgICB9Cn0KCgoKCgoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwogICAgI2RlZmluZSB0YXNrICJzYWZlIgogICAgaWYoZm9wZW4odGFzayIuaW5wIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4odGFzayIub3V0IiwgInciLCBzdGRvdXQpOwogICAgfQogICAgY2luID4+IHF1ZXJ5OwogICAgd2hpbGUocXVlcnktLSlzdWJ0YXNrMTo6c29sdmUoKTsKICAgCiAgICByZXR1cm4gMDsKfQo=