#1974. Palindromi

Palindromi

题目描述

给你一个长度为 nn 的 01 序列,下标为 1,2,…,n1, 2, \dots, n。最初每个字符都代表了一个长度为 1 的字符串。在一次连接中,需要选择两个字符串 aa 和 bb,将它们删除后,换为字符串 abab,即在写下 aa 中的所有字符后写下字符串 bb 的所有字符。

这 nn 个初始字符串需要用 n−1n - 1 次连接操作连成一个字符串。第 ii 次选择的字符串用一个下标对 (ai,bi)(a_i, b_i) 描述,表示要连接的字符串是包含下标为 aia_i 的字符的和包含下标为 bib_i 的字符的。保证下标为 aia_i 和 bib_i 的字符不在同一字符串中。

一些字符串 ww 的回文值被定义为 ww 中不同回文子串的个数。我们定义回文串为从左到右读和从右到左读相同的字符串。一个字符串的子串被定义为可以从字符串开头和(或)结尾开始删去一个或多个字符得到的字符串。

对于每次连接操作,输出每次连成的字符串的回文值。

输入格式

第一行包含一个整数 nn,表示字符个数。

第二行一个长度为 nn 的 01 字符串,表示初始字符串。

接下来 n−1n - 1 行,每行两个整数 ai,bia_i, b_i,表示第 ii 次连接操作。

输出格式

输出 n−1n - 1 行,表示每次连接操作得到的字符串的回文值。

样例

样例输入 1

3
010
1 2
2 3

样例输出 1

2
3

样例输入 2

5
00111
4 1
1 5
2 1
3 1

样例输出 2

2
3
4
5

样例输入 3

8
10010000
7 5
4 2
3 6
1 3
6 8
5 3
1 2

样例输出 3

2
2
2
3
4
6
8

数据范围

对于 9% 的数据:1≤n≤1001 \le n \le 100。

对于 18% 的数据:1≤n≤10001 \le n \le 1000。

对于 27% 的数据:ai=1a_i = 1,bi=i+1b_i = i + 1。

对于 100% 的数据:1≤n≤1051 \le n \le 10^5,1≤ai,bi≤n1 \le a_i, b_i \le n。

本题共 20 个测试点,每个测试点 5 分,合计 100 分。

测试点编号 测试点数 数据范围
1 ~ 2 2 1≤n≤1001 \le n \le 100
3 ~ 6 4 1≤n≤10001 \le n \le 1000
7 ~ 11 5 ai=1a_i = 1,bi=i+1b_i = i + 1
12 ~ 20 9 1≤n≤1051 \le n \le 10^5,1≤ai,bi≤n1 \le a_i, b_i \le n