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;
		
}