#DR8. 整理名单

整理名单

整理名单

算法社最近接到了一项重要任务——制作年度电子花名册,用于评优、活动报名和成员统计。 这是社团年度最重要的统计依据,每一位成员的姓名和学号都必须完整且规范。

这项任务原本交给社长亲自处理,但社长最近忙于策划社团活动和训练竞赛,只能把任务委派给普通成员 xxj

xxj 虽然是算法社的一员,但他最大的“特长”就是写 bug,而整理数据几乎是他的克星。

当他打开报名名单文件时,办公室陷入了短暂的寂静——名单乱得不可思议:

  • 每个成员的字符串完全不含空格,但里面充斥着各种字母、数字和特殊符号,如 "Alice123@#""B9o8B7!%"
  • 大小写完全混乱,像 "aLICe""bOB""cHaRLie"
  • 更离谱的是,每个人提交前,还特意挑出一段字符反着写,有的人甚至挑了字符串的中间或末尾,让姓名和学号的顺序彻底乱套;
  • 有些成员为了“炫酷”,把学号和姓名混在一起写,数字和字母交替出现,让人一眼也看不出学号在哪、姓名在哪。

面对这堆乱成一团的字符串,xxj 整个人都傻眼了。他甚至开始怀疑,这是不是社长在考验他的新能力。

最终,xxj决定求助你——算法社最可靠、最强大的“救场选手”。 你需要做以下操作来完成任务:

对每位成员的原始字符串 s 与区间 [l, r],按照顺序依次执行以下操作:

  1. 区间反转:将 s 的第 l 到第 r 个字符反转
  2. 提取学号和姓名
    • 学号:提取字符串中所有数字字符(0–9),按出现顺序组成学号字符串;
    • 姓名:提取字符串中所有字母(A–Z, a–z),按出现顺序组成姓名字符串;
  3. 姓名格式化:将提取出的姓名字符串的首字母大写,其余小写。
  4. 输出结果:每位成员输出两行:
    • 第一行:格式化后的姓名字符串或 -1
    • 第二行:学号字符串或 -1
  5. 首字母统计
    • 在完成所有姓名规范化后,统计以 26 个大写字母(A–Z)分别作为姓名首字母的成员数量。
    • 输出时26个数字用空格分隔

输入格式(每位成员三行)

n
k1
s1
l1 r1
k2
s2
l2 r2
...
kn
sn
ln rn
  • 第一行:整数 n(成员人数)
  • 接下来每位成员占三行:
    1. 第一行:整数 ki(字符串长度)
    2. 第二行:原始字符串 si(长度 = ki,不含空格)
    3. 第三行:两个整数 li ri,表示需要反转的区间(1 ≤ li ≤ ri ≤ ki)

输出格式

每位成员输出两行:

  1. 姓名(若无字母输出 -1
  2. 学号(若无数字输出 -1

在输出 26 个首字母统计数字时: 用空格分隔数字


输入样例

3
10
Alice123@#
2 5
8
BoB987!$
1 3
5
!@#$%
1 3

输出样例

Aecil
123
Bob
987
-1
-1
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

数据范围

  • 1 ≤ n ≤ 5000
  • 1 ≤ |si| ≤ 200
  • 1 ≤ li ≤ ri ≤ |si|
  • 每个字符串仅包含可见 ASCII 字符(不含空格)
  • 字符串可能不含字母或数字