You want to perform the combo on your opponent in one popular fighting game. The combo is the string s consisting of n lowercase Latin letters. To perform the combo, you have to press all buttons in the order they appear in s. I.e. if s=“abca” then you have to press ‘a’, then ‘b’, ‘c’ and ‘a’ again.

You know that you will spend m wrong tries to perform the combo and during the i-th try you will make a mistake right after pi-th button (1≤pi<n) (i.e. you will press first pi buttons right and start performing the combo from the beginning). It is guaranteed that during the m+1-th try you press all buttons right and finally perform the combo.

I.e. if s=“abca”, m=2 and p=[1,3] then the sequence of pressed buttons will be ‘a’ (here you’re making a mistake and start performing the combo from the beginning), ‘a’, ‘b’, ‘c’, (here you’re making a mistake and start performing the combo from the beginning), ‘a’ (note that at this point you will not perform the combo because of the mistake), ‘b’, ‘c’, ‘a’.

Your task is to calculate for each button (letter) the number of times you’ll press it.

You have to answer t independent test cases.

Input

The first line of the input contains one integer t (1≤t≤104) — the number of test cases.

Then t test cases follow.

The first line of each test case contains two integers n and m (2≤n≤2⋅105, 1≤m≤2⋅105) — the length of s and the number of tries correspondingly.

The second line of each test case contains the string s consisting of n lowercase Latin letters.

The third line of each test case contains m integers p1,p2,…,pm (1≤pi<n) — the number of characters pressed right during the i-th try.

It is guaranteed that the sum of n and the sum of m both does not exceed 2⋅105 (∑n≤2⋅105, ∑m≤2⋅105).

It is guaranteed that the answer for each letter does not exceed 2⋅109.

Output

For each test case, print the answer — 26 integers: the number of times you press the button ‘a’, the number of times you press the button ‘b’, …, the number of times you press the button ‘z’.

Example

inputCopy

3

4 2

abca

1 3

10 5

codeforces

2 8 3 2 9

26 10

qwertyuioplkjhgfdsazxcvbnm

20 10 1 2 3 5 10 5 9 4

outputCopy

4 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 9 4 5 3 0 0 0 0 0 0 0 0 9 0 0 3 1 0 0 0 0 0 0 0

2 1 1 2 9 2 2 2 5 2 2 2 1 1 5 4 11 8 2 7 5 1 10 1 5 2

Note

The first test case is described in the problem statement. Wrong tries are “a”, “abc” and the final try is “abca”. The number of times you press ‘a’ is 4, ‘b’ is 2 and ‘c’ is 2.

In the second test case, there are five wrong tries: “co”, “codeforc”, “cod”, “co”, “codeforce” and the final try is “codeforces”. The number of times you press ‘c’ is 9, ‘d’ is 4, ‘e’ is 5, ‘f’ is 3, ‘o’ is 9, ‘r’ is 3 and ‘s’ is 1.

就是个坠和的过程,可以用差分写

#include <bits/stdc++.h>
using namespace std;
int a[205000];
int b[27];
string s;
int main()
{
int t;
cin >> t;
while (t--)
{
int m, n, k;
cin >> n >> m;
cin >> s;
memset(a, 0, sizeof(a));
memset(b,0,sizeof(b));
for (int i = 1; i <= m; i++)
{
cin >> k;
a[k - 1] ++;
}
int cnt = 1;
b[s[s.size() - 1] - 'a']++;
for (int i = s.size() - 2; i >= 0; --i)
{
cnt+=a[i];
b[s[i] - 'a'] += cnt;
}
for(int i=0;i<26;i++)
cout<<b[i]<<" ";
puts("");
}
}

最新文章

  1. Java——URLEncoder和URLDecoder
  2. Intellij IDEA常用快捷键——Mac版
  3. 【struts2】OGNL
  4. keepalived对nginx高可用演练脚本
  5. WWF3追踪功能&lt;WWF第六篇&gt;
  6. div 布局2
  7. PHP中使用CURL(三)
  8. 内网服务器启动报错UNEXPECTED INCONSISTENCY解决方法
  9. JMeter打开脚本失败 如何解决?
  10. VS编程,C#串口通讯,通过串口读取数据的一种方法
  11. Zookeeper连接eclipse
  12. 【转】linux清屏的几种方法
  13. C# web Api ajax发送json对象到action中
  14. dubbo 基础入门
  15. Linux下JDK+Eclipse安装
  16. MATLAB中版本和日期函数
  17. 传输层两大协议:TCP和UDP
  18. Fedora 20 安装搜狗拼音输入法
  19. Jrebel不生效的原因和解决办法
  20. [转] oracle 数据库 SQL plus 连接方法

热门文章

  1. 使用Cloudflare增强网站
  2. C语言 加密解密
  3. Vue 核心最基本的功能
  4. Java成长第五集--面向对象设计的五大原则
  5. Android传感器--光照传感器使用
  6. android学习笔记——计时器实现
  7. 负载均衡服务之HAProxy基础入门
  8. L10机器
  9. ASE team work proposal
  10. tp5.0看点