В этой задаче достаточно было рассмотреть несколько случаев.
1) Если пароль 𝑠
изначально корректен, то ничего менять не нужно — просто выводим 𝑠.
2) Теперь попробуем изменить один символ, для этого переберем его и переберем три варианта его замены(любая цифра, любая заглавная латинская буква и любая строчная латинская буква). После замены проверим строку на корректность и если нашлась корректная строка — выведем её.
3) У нас не получилось заменить подстроку длины 0 и 1, а значит ответ минимум 2. Мы можем всегда его получить следующим образом: заменим первых два символа на «a1», если третий символ заглавная латинская буква, на «A1», если третий символ строчная латинская буква и на «aA», если третий символ — цифра.
#include <bits/stdc++.h>
using namespace std;
string s;
bool ok(string t){
int msk = 0;
for(int i = 0; i < int(t.size()); ++i){
if(isupper(t[i])) msk |= 1;
if(islower(t[i])) msk |= 2;
if(isdigit(t[i])) msk |= 4;
}
return msk == 7;
}
int main() {
//freopen("input.txt", "r", stdin);
int t;
cin >> t;
for(int i = 0; i < t; ++i){
cin >> s;
if(ok(s)){
cout << s << endl;
continue;
}
bool fnd = false;
for(int i = 0; i < int(s.size()); ++i){
string t = s;
t[i] = '1';
if(ok(t)){
cout << t << endl;
fnd = true;
break;
}
t[i] = 'a';
if(ok(t)){
cout << t << endl;
fnd = true;
break;
}
t[i] = 'A';
if(ok(t)){
cout << t << endl;
fnd = true;
break;
}
}
if(fnd) continue;
if(isupper(s[2])){
s[0] = 'a';
s[1] = '1';
cout << s << endl;
continue;
}
if(islower(s[2])){
s[0] = 'A';
s[1] = '1';
cout << s << endl;
continue;
}
if(isdigit(s[2])){
s[0] = 'a';
s[1] = 'A';
cout << s << endl;
continue;
}
}
return 0;
}