CF1383C String Transformation 2

题目描述

请注意,String Transformation 1 和 String Transformation 2 的唯一区别在于 Koa 所做的操作。在本题中,Koa 选择的字母 $y$ 可以是前 $20$ 个小写英文字母中的任意一个(请阅读题面以获得更好的理解)。你可以分别对这些题目进行 hack。 考拉 Koa 有两个长度相同的字符串 $A$ 和 $B$($|A|=|B|=n$),它们均由前 $20$ 个小写英文字母(即 a 到 t)组成。 每次操作,Koa 可以: 1. 选择 $A$ 中若干个位置 $p_1, p_2, \ldots, p_k$($k \ge 1$,$1 \le p_i \le n$,若 $i \neq j$,则 $p_i \neq p_j$),使得这些位置上的字母都相同,即 $A_{p_1} = A_{p_2} = \ldots = A_{p_k} = x$(即这些位置上的字母都是某个字母 $x$)。 2. 选择任意一个字母 $y$(从前 $20$ 个小写英文字母中选择)。 3. 将上述所有位置的字母都改为 $y$。更正式地说,对于每个 $i$($1 \le i \le k$),Koa 令 $A_{p_i} = y$。注意,你只能修改字符串 $A$。 Koa 想知道,她最少需要多少次操作才能使两个字符串相等(即 $A = B$),或者判断是否无法通过上述操作使它们相等。请你帮助她!

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 $t$($1 \le t \le 10$),表示测试数据组数。接下来是每组测试数据的描述。 每组测试数据的第一行包含一个整数 $n$($1 \le n \le 10^5$),表示字符串 $A$ 和 $B$ 的长度。 第二行包含字符串 $A$($|A|=n$)。 第三行包含字符串 $B$($|B|=n$)。 两个字符串均由前 $20$ 个小写英文字母(即 a 到 t)组成。 保证所有测试数据中 $n$ 的总和不超过 $10^5$。

输出格式

对于每组测试数据: 输出一行,表示使两个字符串相等所需的最小操作次数($A = B$),如果无法通过上述操作使它们相等,则输出 $-1$。

说明/提示

- 在第 $1$ 组测试数据中,Koa: 1. 选择第 $1$ 和第 $2$ 个位置,将 $A_1 = A_2 = b$($\color{red}{aa}b \rightarrow \color{blue}{bb}b$)。 2. 选择第 $2$ 和第 $3$ 个位置,将 $A_2 = A_3 = c$($b\color{red}{bb} \rightarrow b\color{blue}{cc}$)。 - 在第 $2$ 组测试数据中,Koa: 1. 选择第 $1$ 和第 $4$ 个位置,将 $A_1 = A_4 = a$($\color{red}{c}ab\color{red}{c} \rightarrow \color{blue}{a}ab\color{blue}{a}$)。 2. 选择第 $2$ 和第 $4$ 个位置,将 $A_2 = A_4 = b$($a\color{red}{a}b\color{red}{a} \rightarrow a\color{blue}{b}b\color{blue}{b}$)。 3. 选择第 $3$ 个位置,将 $A_3 = c$($ab\color{red}{b}b \rightarrow ab\color{blue}{c}b$)。 - 在第 $3$ 组测试数据中,Koa: 1. 选择第 $1$ 个位置,将 $A_1 = t$($\color{red}{a}bc \rightarrow \color{blue}{t}bc$)。 2. 选择第 $2$ 个位置,将 $A_2 = s$($t\color{red}{b}c \rightarrow t\color{blue}{s}c$)。 3. 选择第 $3$ 个位置,将 $A_3 = r$($ts\color{red}{c} \rightarrow ts\color{blue}{r}$)。 由 ChatGPT 4.1 翻译