#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ gets(char *);
int /*<<< orphan*/ printf(char *, short);
int /*<<< orphan*/ scanf(char *, short *);
int /*<<< orphan*/ strcmp(char *, char *);
short strlen(char *);
int main() {
  short t, i, ln, j;
  char str[260], rev[260];
  scanf("%hd%*c", &t);
  for (i = 0; i < t; i++) {
    gets(str);
    ln = strlen(str);
    for (j = 0; j < ln; j++)
      rev[ln - j - 1] = str[j];
    rev[ln] = '\0';
    for (j = 0; j < ln; j++)
      if (rev[j] == str[j])
        break;
    if (j)
      printf("%hd\n", j - 1);
    else if (!strcmp(rev, str))
      printf("%hd\n", ln);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x220,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xe97(%rip),%rdi
lea    -0x6(%rbp),%rsi
call   1070 <scanf@plt>
movw   $0x0,-0x8(%rbp)
movswl -0x8(%rbp),%eax
movswl -0x6(%rbp),%ecx
cmp    %ecx,%eax
jge    12ba <main+0x16a>
lea    -0x110(%rbp),%rdi
call   1060 <gets@plt>
lea    -0x110(%rbp),%rdi
call   1030 <strlen@plt>
mov    %ax,-0xa(%rbp)
movw   $0x0,-0xc(%rbp)
movswl -0xc(%rbp),%eax
movswl -0xa(%rbp),%ecx
cmp    %ecx,%eax
jge    11ed <main+0x9d>
movswq -0xc(%rbp),%rax
mov    -0x110(%rbp,%rax,1),%cl
movswl -0xa(%rbp),%eax
movswl -0xc(%rbp),%edx
sub    %edx,%eax
sub    $0x1,%eax
cltq
mov    %cl,-0x220(%rbp,%rax,1)
mov    -0xc(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0xc(%rbp)
jmp    11aa <main+0x5a>
movswq -0xa(%rbp),%rax
movb   $0x0,-0x220(%rbp,%rax,1)
movw   $0x0,-0xc(%rbp)
movswl -0xc(%rbp),%eax
movswl -0xa(%rbp),%ecx
cmp    %ecx,%eax
jge    124d <main+0xfd>
movswq -0xc(%rbp),%rax
movsbl -0x220(%rbp,%rax,1),%eax
ff
movswq -0xc(%rbp),%rcx
movsbl -0x110(%rbp,%rcx,1),%ecx
ff
cmp    %ecx,%eax
jne    1237 <main+0xe7>
jmp    124d <main+0xfd>
jmp    123c <main+0xec>
mov    -0xc(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0xc(%rbp)
jmp    1200 <main+0xb0>
cmpw   $0x0,-0xc(%rbp)
je     1273 <main+0x123>
movswl -0xc(%rbp),%eax
sub    $0x1,%eax
lea    0xda1(%rip),%rdi
movswl %ax,%esi
call   1040 <printf@plt>
jmp    12a4 <main+0x154>
lea    -0x220(%rbp),%rdi
lea    -0x110(%rbp),%rsi
call   1050 <strcmp@plt>
cmp    $0x0,%eax
jne    129f <main+0x14f>
lea    0xd71(%rip),%rdi
movswl -0xa(%rbp),%esi
call   1040 <printf@plt>
jmp    12a4 <main+0x154>
jmp    12a9 <main+0x159>
mov    -0x8(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x8(%rbp)
jmp    1178 <main+0x28>
xor    %eax,%eax
add    $0x220,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x228,%rsp
lea    0xe98(%rip),%rdi
lea    0xe(%rsp),%rsi
call   1070 <scanf@plt>
cmpw   $0x0,0xe(%rsp)
jle    139b <main+0x24b>
xor    %r12d,%r12d
lea    0x120(%rsp),%r13
lea    0x10(%rsp),%r14
jmp    11b2 <main+0x62>
add    $0xffffffff,%eax
movswl %ax,%esi
lea    0xe6a(%rip),%rdi
call   1040 <printf@plt>
add    $0x1,%r12d
cmp    0xe(%rsp),%r12w
jge    139b <main+0x24b>
mov    %r13,%rdi
call   1060 <gets@plt>
mov    %r13,%rdi
call   1030 <strlen@plt>
mov    %eax,%r15d
test   %ax,%ax
jle    11e0 <main+0x90>
movzwl %r15w,%eax
cmp    $0x8,%r15w
jae    11f0 <main+0xa0>
xor    %ebp,%ebp
jmp    1312 <main+0x1c2>
nopl   0x0(%rax)
movswq %r15w,%rax
movb   $0x0,0x10(%rsp,%rax,1)
jmp    1380 <main+0x230>
xchg   %ax,%ax
cmp    $0x20,%r15w
jae    11fe <main+0xae>
xor    %ebp,%ebp
jmp    12aa <main+0x15a>
mov    %eax,%ebp
and    $0xffffffe0,%ebp
lea    (%rsp),%rcx
lea    (%rcx,%rax,1),%rdx
mov    %rbp,%rsi
neg    %rsi
xor    %edi,%edi
lea    0x130(%rsp),%rbx
pxor   %xmm3,%xmm3
nop
movdqa -0x10(%rbx),%xmm0
movdqa (%rbx),%xmm1
movdqa %xmm0,%xmm2
punpcklbw %xmm3,%xmm2
pshufd $0x4e,%xmm2,%xmm2
pshuflw $0x1b,%xmm2,%xmm2
pshufhw $0x1b,%xmm2,%xmm2
punpckhbw %xmm3,%xmm0
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
packuswb %xmm2,%xmm0
movdqu %xmm0,(%rdx,%rdi,1)
movdqa %xmm1,%xmm0
punpcklbw %xmm3,%xmm0
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
punpckhbw %xmm3,%xmm1
pshufd $0x4e,%xmm1,%xmm1
pshuflw $0x1b,%xmm1,%xmm1
pshufhw $0x1b,%xmm1,%xmm1
packuswb %xmm0,%xmm1
movdqu %xmm1,-0x10(%rdx,%rdi,1)
add    $0x20,%rbx
add    $0xffffffffffffffe0,%rdi
cmp    %rdi,%rsi
jne    1220 <main+0xd0>
cmp    %rax,%rbp
je     1341 <main+0x1f1>
test   $0x18,%al
je     1312 <main+0x1c2>
mov    %rbp,%rdx
mov    %eax,%ebp
and    $0xfffffff8,%ebp
lea    (%rsp,%rdx,1),%rsi
add    $0x120,%rsi
lea    0x8(%rsp),%rcx
lea    (%rcx,%rax,1),%rdi
neg    %rdx
mov    %rbp,%rcx
neg    %rcx
pxor   %xmm1,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movq   (%rsi),%xmm0
punpcklbw %xmm1,%xmm0
pshufd $0x4e,%xmm0,%xmm0
pshuflw $0x1b,%xmm0,%xmm0
pshufhw $0x1b,%xmm0,%xmm0
packuswb %xmm0,%xmm0
movq   %xmm0,(%rdi,%rdx,1)
add    $0x8,%rsi
add    $0xfffffffffffffff8,%rdx
cmp    %rdx,%rcx
jne    12e0 <main+0x190>
cmp    %rax,%rbp
je     1341 <main+0x1f1>
mov    %rax,%rcx
sub    %rbp,%rcx
lea    (%rsp,%rbp,1),%rdx
add    $0x120,%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rdx),%ebx
mov    %bl,0xf(%rsp,%rcx,1)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rcx
jne    1330 <main+0x1e0>
movb   $0x0,0x10(%rsp,%rax,1)
test   %r15w,%r15w
jle    1380 <main+0x230>
xor    %ecx,%ecx
xchg   %ax,%ax
movzbl 0x10(%rsp,%rcx,1),%edx
cmp    0x120(%rsp,%rcx,1),%dl
je     1372 <main+0x222>
add    $0x1,%rcx
cmp    %cx,%ax
jne    1350 <main+0x200>
test   %ax,%ax
jne    1190 <main+0x40>
jmp    1380 <main+0x230>
mov    %ecx,%eax
test   %ax,%ax
jne    1190 <main+0x40>
nopl   (%rax)
mov    %r14,%rdi
mov    %r13,%rsi
call   1050 <strcmp@plt>
test   %eax,%eax
jne    11a2 <main+0x52>
mov    %r15d,%eax
jmp    1193 <main+0x43>
xor    %eax,%eax
add    $0x228,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [7 x i8] c"%hd%*c\00"
@.str.1 = [5 x i8] c"%hd\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i16
%3 = alloca i16
%4 = alloca i16
%5 = alloca i16
%6 = alloca [260 x i8]
%7 = alloca [260 x i8]
store i32 0, i32* %1
%8 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i16* %2)
store i16 0, i16* %3
br label %9
9: ; preds = %88, %0
%10 = load i16, i16* %3
%11 = sext i16 %10 to i32
%12 = load i16, i16* %2
%13 = sext i16 %12 to i32
%14 = icmp slt i32 %11, %13
br i1 %14, label %15, label %91
15: ; preds = %9
%16 = getelementptr inbounds [260 x i8], [260 x i8]* %6, i64 0, i64 0
%17 = call i32 @gets(i8* %16)
%18 = getelementptr inbounds [260 x i8], [260 x i8]* %6, i64 0, i64 0
%19 = call signext i16 @strlen(i8* %18)
store i16 %19, i16* %4
store i16 0, i16* %5
br label %20
20: ; preds = %39, %15
%21 = load i16, i16* %5
%22 = sext i16 %21 to i32
%23 = load i16, i16* %4
%24 = sext i16 %23 to i32
%25 = icmp slt i32 %22, %24
br i1 %25, label %26, label %42
26: ; preds = %20
%27 = load i16, i16* %5
%28 = sext i16 %27 to i64
%29 = getelementptr inbounds [260 x i8], [260 x i8]* %6, i64 0, i64 %28
%30 = load i8, i8* %29
%31 = load i16, i16* %4
%32 = sext i16 %31 to i32
%33 = load i16, i16* %5
%34 = sext i16 %33 to i32
%35 = sub nsw i32 %32, %34
%36 = sub nsw i32 %35, 1
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [260 x i8], [260 x i8]* %7, i64 0, i64 %37
store i8 %30, i8* %38
br label %39
39: ; preds = %26
%40 = load i16, i16* %5
%41 = add i16 %40, 1
store i16 %41, i16* %5
br label %20
42: ; preds = %20
%43 = load i16, i16* %4
%44 = sext i16 %43 to i64
%45 = getelementptr inbounds [260 x i8], [260 x i8]* %7, i64 0, i64 %44
store i8 0, i8* %45
store i16 0, i16* %5
br label %46
46: ; preds = %66, %42
%47 = load i16, i16* %5
%48 = sext i16 %47 to i32
%49 = load i16, i16* %4
%50 = sext i16 %49 to i32
%51 = icmp slt i32 %48, %50
br i1 %51, label %52, label %69
52: ; preds = %46
%53 = load i16, i16* %5
%54 = sext i16 %53 to i64
%55 = getelementptr inbounds [260 x i8], [260 x i8]* %7, i64 0, i64 %54
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = load i16, i16* %5
%59 = sext i16 %58 to i64
%60 = getelementptr inbounds [260 x i8], [260 x i8]* %6, i64 0, i64 %59
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
%63 = icmp eq i32 %57, %62
br i1 %63, label %64, label %65
64: ; preds = %52
br label %69
65: ; preds = %52
br label %66
66: ; preds = %65
%67 = load i16, i16* %5
%68 = add i16 %67, 1
store i16 %68, i16* %5
br label %46
69: ; preds = %64, %46
%70 = load i16, i16* %5
%71 = icmp ne i16 %70, 0
br i1 %71, label %72, label %78
72: ; preds = %69
%73 = load i16, i16* %5
%74 = sext i16 %73 to i32
%75 = sub nsw i32 %74, 1
%76 = trunc i32 %75 to i16
%77 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i16 signext %76)
br label %87
78: ; preds = %69
%79 = getelementptr inbounds [260 x i8], [260 x i8]* %7, i64 0, i64 0
%80 = getelementptr inbounds [260 x i8], [260 x i8]* %6, i64 0, i64 0
%81 = call i32 @strcmp(i8* %79, i8* %80)
%82 = icmp ne i32 %81, 0
br i1 %82, label %86, label %83
83: ; preds = %78
%84 = load i16, i16* %4
%85 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i16 signext %84)
br label %86
86: ; preds = %83, %78
br label %87
87: ; preds = %86, %72
br label %88
88: ; preds = %87
%89 = load i16, i16* %3
%90 = add i16 %89, 1
store i16 %90, i16* %3
br label %9
91: ; preds = %9
ret i32 0
}

LLVM IR (-O2):
@.str = [7 x i8] c"%hd%*c\00"
@.str.1 = [5 x i8] c"%hd\0A\00"
define i32 @main() {
%1 = alloca i16
%2 = alloca [260 x i8]
%3 = alloca [260 x i8]
%4 = bitcast i16* %1 to i8*
%5 = getelementptr inbounds [260 x i8], [260 x i8]* %2, i64 0, i64 0
%6 = getelementptr inbounds [260 x i8], [260 x i8]* %3, i64 0, i64 0
%7 = call i32 @scanf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i16* %1)
%8 = load i16, i16* %1
%9 = icmp sgt i16 %8, 0
br i1 %9, label %10, label %107
10: ; preds = %0, %103
%11 = phi i16 [ %104, %103 ], [ 0, %0 ]
%12 = call i32 @gets(i8* %5)
%13 = call signext i16 @strlen(i8* %5)
%14 = icmp sgt i16 %13, 0
br i1 %14, label %18, label %15
15: ; preds = %10
%16 = sext i16 %13 to i64
%17 = getelementptr inbounds [260 x i8], [260 x i8]* %3, i64 0, i64 %16
store i8 0, i8* %17
br label %97
18: ; preds = %10
%19 = zext i16 %13 to i64
%20 = zext i16 %13 to i64
%21 = icmp ult i16 %13, 8
br i1 %21, label %68, label %22
22: ; preds = %18
%23 = icmp ult i16 %13, 32
br i1 %23, label %50, label %24
24: ; preds = %22
%25 = and i64 %20, 65504
br label %26
26: ; preds = %26, %24
%27 = phi i64 [ 0, %24 ], [ %43, %26 ]
%28 = getelementptr inbounds [260 x i8], [260 x i8]* %2, i64 0, i64 %27
%29 = bitcast i8* %28 to <16 x i8>*
%30 = load <16 x i8>, <16 x i8>* %29
%31 = getelementptr inbounds i8, i8* %28, i64 16
%32 = bitcast i8* %31 to <16 x i8>*
%33 = load <16 x i8>, <16 x i8>* %32
%34 = xor i64 %27, -1
%35 = add nsw i64 %34, %19
%36 = getelementptr inbounds [260 x i8], [260 x i8]* %3, i64 0, i64 %35
%37 = shufflevector <16 x i8> %30, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%38 = getelementptr inbounds i8, i8* %36, i64 -15
%39 = bitcast i8* %38 to <16 x i8>*
store <16 x i8> %37, <16 x i8>* %39
%40 = shufflevector <16 x i8> %33, <16 x i8> poison, <16 x i32> <i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%41 = getelementptr inbounds i8, i8* %36, i64 -31
%42 = bitcast i8* %41 to <16 x i8>*
store <16 x i8> %40, <16 x i8>* %42
%43 = add nuw i64 %27, 32
%44 = icmp eq i64 %43, %25
br i1 %44, label %45, label %26
45: ; preds = %26
%46 = icmp eq i64 %25, %20
br i1 %46, label %79, label %47
47: ; preds = %45
%48 = and i64 %20, 24
%49 = icmp eq i64 %48, 0
br i1 %49, label %68, label %50
50: ; preds = %22, %47
%51 = phi i64 [ %25, %47 ], [ 0, %22 ]
%52 = and i64 %20, 65528
br label %53
53: ; preds = %53, %50
%54 = phi i64 [ %51, %50 ], [ %64, %53 ]
%55 = getelementptr inbounds [260 x i8], [260 x i8]* %2, i64 0, i64 %54
%56 = bitcast i8* %55 to <8 x i8>*
%57 = load <8 x i8>, <8 x i8>* %56
%58 = xor i64 %54, -1
%59 = add nsw i64 %58, %19
%60 = getelementptr inbounds [260 x i8], [260 x i8]* %3, i64 0, i64 %59
%61 = shufflevector <8 x i8> %57, <8 x i8> poison, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
%62 = getelementptr inbounds i8, i8* %60, i64 -7
%63 = bitcast i8* %62 to <8 x i8>*
store <8 x i8> %61, <8 x i8>* %63
%64 = add nuw i64 %54, 8
%65 = icmp eq i64 %64, %52
br i1 %65, label %66, label %53
66: ; preds = %53
%67 = icmp eq i64 %52, %20
br i1 %67, label %79, label %68
68: ; preds = %18, %47, %66
%69 = phi i64 [ 0, %18 ], [ %25, %47 ], [ %52, %66 ]
br label %70
70: ; preds = %68, %70
%71 = phi i64 [ %77, %70 ], [ %69, %68 ]
%72 = getelementptr inbounds [260 x i8], [260 x i8]* %2, i64 0, i64 %71
%73 = load i8, i8* %72
%74 = xor i64 %71, -1
%75 = add nsw i64 %74, %19
%76 = getelementptr inbounds [260 x i8], [260 x i8]* %3, i64 0, i64 %75
store i8 %73, i8* %76
%77 = add nuw nsw i64 %71, 1
%78 = icmp eq i64 %77, %20
br i1 %78, label %79, label %70
79: ; preds = %70, %66, %45
%80 = getelementptr inbounds [260 x i8], [260 x i8]* %3, i64 0, i64 %19
store i8 0, i8* %80
br i1 %14, label %81, label %97
81: ; preds = %79, %89
%82 = phi i16 [ %90, %89 ], [ 0, %79 ]
%83 = zext i16 %82 to i64
%84 = getelementptr inbounds [260 x i8], [260 x i8]* %3, i64 0, i64 %83
%85 = load i8, i8* %84
%86 = getelementptr inbounds [260 x i8], [260 x i8]* %2, i64 0, i64 %83
%87 = load i8, i8* %86
%88 = icmp eq i8 %85, %87
br i1 %88, label %92, label %89
89: ; preds = %81
%90 = add nuw nsw i16 %82, 1
%91 = icmp eq i16 %90, %13
br i1 %91, label %92, label %81
92: ; preds = %89, %81
%93 = phi i16 [ %13, %89 ], [ %82, %81 ]
%94 = icmp eq i16 %93, 0
br i1 %94, label %97, label %95
95: ; preds = %92
%96 = add i16 %93, -1
br label %100
97: ; preds = %15, %79, %92
%98 = call i32 @strcmp(i8* %6, i8* %5)
%99 = icmp eq i32 %98, 0
br i1 %99, label %100, label %103
100: ; preds = %97, %95
%101 = phi i16 [ %96, %95 ], [ %13, %97 ]
%102 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0), i16 signext %101)
br label %103
103: ; preds = %100, %97
%104 = add nuw nsw i16 %11, 1
%105 = load i16, i16* %1
%106 = icmp slt i16 %104, %105
br i1 %106, label %10, label %107
107: ; preds = %103, %0
ret i32 0
}