#CF2070F. 朋友与披萨

朋友与披萨

F. 朋友与披萨

每个测试点的时间限制:88
每个测试点的内存限制:512512 兆字节

Monocarp 有 nn 个披萨,第 ii 个披萨有 aia_i 片。披萨用大写英文字母 AA 到第 nn 个字母表示。

Monocarp 还有 mm 个朋友,他想邀请恰好其中两位来吃披萨。对于每位朋友,Monocarp 知道他喜欢哪些披萨。

朋友们到达 Monocarp 家后,对于每个披萨,会发生以下情况:

  • 如果两个被邀请的朋友都不喜欢这个披萨,Monocarp 会吃掉它;
  • 如果恰好其中一个朋友喜欢这个披萨,那么那位朋友会吃掉它;
  • 如果两个朋友都喜欢这个披萨,他们会尝试平分它。如果披萨的片数是偶数,他们每人恰好吃一半;但如果披萨的片数是奇数,他们会开始争吵,试图决定谁多吃一片——而 Monocarp 不喜欢这样。

对于每个 kk00ai\sum a_i,请计算恰好选择两位朋友邀请的方案数,使得朋友不争吵,并且 Monocarp 恰好吃掉 kk 片。


输入
第一行包含两个整数 nnmm1n201 \le n \le 202m5×1052 \le m \le 5 \times 10^5)——披萨的数量和朋友的数量。

第二行包含 mm 个字符串 s1,s2,,sms_1, s_2, \dots, s_m1sin1 \le |s_i| \le n),其中 sis_i 是由从 AA 到第 nn 个字母的不同字符组成的字符串,表示第 ii 个朋友喜欢哪些披萨。每个字符串 sis_i 中的字符按字典序(字母顺序)排序。

第三行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai2×1041 \le a_i \le 2 \times 10^4)——每个披萨的片数。


输出
输出 ai+1\sum a_i + 1 个整数,其中第 kk 个整数(从 00 开始计数)应该是恰好选择两位朋友邀请且朋友不争吵、Monocarp 恰好吃掉 kk 片的方案数。


示例
输入

3 6
A AB ABC AB BC C
2 3 5

输出

4 0 0 1 0 2 0 0 0 0 0 

注意
考虑第一个示例中所有朋友对:

  • 邀请朋友 1122:他们会吃掉披萨 1122,Monocarp 吃掉披萨 33
  • 邀请朋友 1133:他们会吃掉所有披萨;
  • 邀请朋友 1144:他们会吃掉披萨 1122,Monocarp 吃掉披萨 33
  • 邀请朋友 1155:他们会吃掉所有披萨;
  • 邀请朋友 1166:他们会吃掉披萨 1133,Monocarp 吃掉披萨 22
  • 邀请朋友 2233:会因披萨 22 争吵;
  • 邀请朋友 2244:会因披萨 22 争吵;
  • 邀请朋友 2255:会因披萨 22 争吵;
  • 邀请朋友 2266:他们会吃掉所有披萨;
  • 邀请朋友 3344:会因披萨 22 争吵;
  • 邀请朋友 3355:会因披萨 22 争吵;
  • 邀请朋友 3366:会因披萨 33 争吵;
  • 邀请朋友 4455:会因披萨 22 争吵;
  • 邀请朋友 4466:他们会吃掉所有披萨;
  • 邀请朋友 5566:会因披萨 33 争吵。