#include <bits/stdc++.h>
using namespace std;
long long max(long long a, long long b) { return a > b ? a : b; }
long long min(long long a, long long b) { return a < b ? a : b; }
long long abso(long long a) { return a > 0 ? a : -a; }
bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  if (a.first == b.first) return a.second < b.second;
  return a.first < b.first;
}
vector<long long> v, alp;
unordered_map<char, long long> U;
int main(int argc, char const *argv[]) {
  int t;
  cin >> t;
  while (t--) {
    int n, m;
    cin >> n >> m;
    string st;
    cin >> st;
    U.clear();
    alp.resize(st.size() + 1);
    for (int i = 0; i <= st.size(); i++) {
      alp[i] = 0;
    }
    v.resize(m);
    for (int i = 0; i < m; i++) {
      cin >> v[i];
      v[i]--;
      alp[0] += 1;
      alp[v[i] + 1] -= 1;
    }
    alp[0] += 1;
    for (int i = 1; i < alp.size(); i++) {
      alp[i] += alp[i - 1];
    }
    for (int i = 0; i < st.size(); i++) {
      U[st[i]] += alp[i];
    }
    for (int i = 0; i < 26; i++) {
      cout << U[char('a' + i)] << " ";
    }
    cout << "\n";
  }
}
