CF1051A Vasya And Password

题目描述

Vasya 想出了一个用于注册 EatForces 的密码——一个字符串 $s$。EatForces 的密码应由小写和大写拉丁字母以及数字组成。 但由于 EatForces 非常重视用户的安全,用户的密码必须至少包含一个数字、至少一个大写拉丁字母和至少一个小写拉丁字母。例如,密码 "abaCABA12"、"Z7q" 和 "3R24m" 是合法的,而 "qwerty"、"qwerty12345" 和 "Password" 则不合法。 字符串 $s$ 的子串是指 $x = s_l s_{l + 1} \dots s_{l + len - 1}$($1 \le l \le |s|, 0 \le len \le |s| - l + 1$)。$len$ 是子串的长度。注意,空串也被认为是 $s$ 的子串,其长度为 $0$。 然而,Vasya 的密码可能过于简单,无法满足 EatForces 的安全要求。他很喜欢自己的密码,因此他希望通过将其中某个子串替换为相同长度的另一个字符串,使其满足上述条件。该操作应恰好执行一次,并且所选子串的长度应尽可能小。 注意,替换子串后 $s$ 的长度不能改变,且字符串本身只能包含小写和大写拉丁字母及数字。

输入格式

第一行包含一个整数 $T$($1 \le T \le 100$)——表示测试用例的数量。 接下来的 $T$ 行,每行包含一个初始密码 $s$($3 \le |s| \le 100$),仅由小写和大写拉丁字母及数字组成。 对于 hack 数据,仅允许 $T = 1$。

输出格式

对于每个测试用例,输出一个满足条件的新密码。 替换子串的长度计算方式如下:记录所有被更改的位置。如果没有更改,则长度为 $0$。否则,长度为第一个和最后一个被更改位置的差加一。例如,密码 "abcdef" 变为 "a7cdEf" 时,发生更改的位置是 $2$ 和 $5$,因此更改子串的长度为 $(5 - 2) + 1 = 4$。 保证一定存在满足条件的密码。 如果有多个满足条件的密码,输出任意一个即可。

说明/提示

在第一个示例中,Vasya 的密码缺少数字,他将子串 "C" 替换为 "4",得到密码 "abcD4E"。也就是说,他更改了长度为 $1$ 的子串。 在第二个示例中,Vasya 的密码本身就满足要求,无需更改。这等价于将空子串替换为空子串(长度为 $0$)。 由 ChatGPT 4.1 翻译