import java.io.*;
public class Main {
public static int check(String s, int left, int right, boolean alreadyDeleted) {
while (left < right) {
if (s.charAt(left) == s.charAt(right)) {
left++;
right--;
} else {
if (alreadyDeleted) return 2; // 이미 한 글자를 제거했는데 또 다름 → 일반 문자열
// 한 번만 삭제해볼 기회 있음
int skipLeft = check(s, left + 1, right, true);
int skipRight = check(s, left, right - 1, true);
return Math.min(skipLeft, skipRight); // 둘 중 더 낮은 값 선택
}
}
return alreadyDeleted ? 1 : 0; // 한 글자 제거했으면 유사회문(1), 아니면 회문(0)
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 수
while (T-- > 0) {
String s = br.readLine();
int result = check(s, 0, s.length() - 1, false);
System.out.println(result);
}
}
}
check(문자, 시작인덱스, 끝인덱스, 삭제여부) {
while(시작인덱스 < 끝인덱스) {
if (문자의 첫번째 글짜 == 문자의 마지막 글짜) {
시작인덱스++
끝인덱스--
} else { // 첫글자와 끝글자가 다른 경우
if (이미 삭제한 상태) return 2;
// 시작과 끝이 다르긴 한데, 이미 삭제한 상태는 아님
// 왼쪽과 오른쪽을 각각 삭제한 상태가 펠린드롬인지 확인
int leftDeleted = check(문자, 시작인덱스+1, 끝인덱스, True);
int rightDeleted = check(문자, 시작인덱스, 끝인덱스-1, True);
// 펠린드롬이 아닌 경우 발생 (else 진입)
// -> 이미 삭제한 상태에서 두번째로 첫글자와 끝글자가 다른 상황이 발생한 것
// -> 2 반환
// 나머지는 회문인 경우
// -> if문만 통과 하다가 while문 종료
// -> while문 밖에서 이미 한번 삭제한 상태이므로 1 반환 (유사회문)
return Math.min(leftDeleted, rightDeleted);
// 2, 2 -> 둘 다 회문이 아닌 경우 -> 2 반환
// 2, 1 -> 둘 중 하나 유사회문 -> 1 반환
// 1, 1 -> 둘 다 유사회문 -> 1 반환
}
} // whlie
// while문이 종료되었다는 건 회문이라는 의미
// 이미 한번 삭제한 상태라면 1 반환, 삭제한 적 없다면 0 반환
return (이미 삭제한 상태) ? 1 : 0;
}