int main() {
  int b = 0, e = 0, i, j, k, tam;
  char *senha, *chute, *aux;
  int *aux_senha;
  scanf("%d", &k);
  for (; k > 0; --k) {
    scanf("%d", &tam);
    senha = (char *)malloc(sizeof(char) * tam);
    chute = (char *)malloc(sizeof(char) * tam);
    aux = (char *)malloc(sizeof(char) * tam);
    aux_senha = (int *)malloc(sizeof(int) * tam);
    for (i = 0; i < tam; ++i) {
      aux[i] = '0';
      aux_senha[i] = 0;
    }
    aux[tam] = '\0';
    getchar();
    scanf("%s", senha);
    senha[tam] = '\0';
    while (strcmp(senha, chute) != 0) {
      scanf("%s", chute);
      chute[tam] = '\0';
      if (strcmp(aux, chute) == 0)
        break;
      for (i = 0; i < tam; ++i) {
        if (chute[i] == senha[i]) {
          ++e;
          aux_senha[i] = 1;
        }
      }
      for (i = 0; i < tam; ++i) {
        if (chute[i] != senha[i]) {
          for (j = 0; j < tam; ++j) {
            if (chute[i] == senha[j] && aux_senha[j] == 0) {
              ++b;
              break;
            }
          }
        }
      }
      printf("(%d,%d)\n", e, b);
      e = 0;
      b = 0;
      for (i = 0; i < tam; ++i)
        aux_senha[i] = 0;
    }
    free(senha);
    free(chute);
    free(aux);
    free(aux_senha);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
lea    0xe7c(%rip),%rdi
lea    -0x18(%rbp),%rsi
mov    $0x0,%al
call   1080 <scanf@plt>
cmpl   $0x0,-0x18(%rbp)
jle    1443 <main+0x2e3>
lea    0xe60(%rip),%rdi
lea    -0x1c(%rbp),%rsi
mov    $0x0,%al
call   1080 <scanf@plt>
movslq -0x1c(%rbp),%rdi
shl    $0x0,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x28(%rbp)
movslq -0x1c(%rbp),%rdi
shl    $0x0,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x30(%rbp)
movslq -0x1c(%rbp),%rdi
shl    $0x0,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x38(%rbp)
movslq -0x1c(%rbp),%rdi
shl    $0x2,%rdi
call   1070 <malloc@plt>
mov    %rax,-0x40(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    122b <main+0xcb>
mov    -0x38(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x30,(%rax,%rcx,1)
mov    -0x40(%rbp),%rax
movslq -0x10(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    11f6 <main+0x96>
mov    -0x38(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    $0x0,%al
call   1060 <getchar@plt>
mov    -0x28(%rbp),%rsi
lea    0xdba(%rip),%rdi
mov    $0x0,%al
call   1080 <scanf@plt>
mov    -0x28(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1050 <strcmp@plt>
cmp    $0x0,%eax
je     1411 <main+0x2b1>
mov    -0x30(%rbp),%rsi
lea    0xd86(%rip),%rdi
mov    $0x0,%al
call   1080 <scanf@plt>
mov    -0x30(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rdi
mov    -0x30(%rbp),%rsi
call   1050 <strcmp@plt>
cmp    $0x0,%eax
jne    12ab <main+0x14b>
jmp    1411 <main+0x2b1>
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1309 <main+0x1a9>
mov    -0x30(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x28(%rbp),%rcx
movslq -0x10(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    12f6 <main+0x196>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x10(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    12fb <main+0x19b>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    12b2 <main+0x152>
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    13ba <main+0x25a>
mov    -0x30(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x28(%rbp),%rcx
movslq -0x10(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
je     13a7 <main+0x247>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    13a2 <main+0x242>
mov    -0x30(%rbp),%rax
movslq -0x10(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x28(%rbp),%rcx
movslq -0x14(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    138f <main+0x22f>
mov    -0x40(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    138f <main+0x22f>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13a2 <main+0x242>
jmp    1394 <main+0x234>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1343 <main+0x1e3>
jmp    13a7 <main+0x247>
jmp    13ac <main+0x24c>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1310 <main+0x1b0>
mov    -0xc(%rbp),%esi
mov    -0x8(%rbp),%edx
lea    0xc3f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    140c <main+0x2ac>
mov    -0x40(%rbp),%rax
movslq -0x10(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    13e3 <main+0x283>
jmp    125c <main+0xfc>
mov    -0x28(%rbp),%rdi
call   1030 <free@plt>
mov    -0x30(%rbp),%rdi
call   1030 <free@plt>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
mov    -0x40(%rbp),%rdi
call   1030 <free@plt>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    118f <main+0x2f>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
lea    0xe8b(%rip),%rdi
lea    0xc(%rsp),%rsi
xor    %eax,%eax
call   1090 <scanf@plt>
cmpl   $0x0,0xc(%rsp)
jle    152b <main+0x3bb>
lea    0xe70(%rip),%r13
jmp    11e6 <main+0x76>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %r14,%rdi
call   1030 <free@plt>
mov    %rbp,%rdi
call   1030 <free@plt>
mov    0x10(%rsp),%rdi
call   1030 <free@plt>
mov    %r15,%rdi
call   1030 <free@plt>
mov    0xc(%rsp),%eax
lea    -0x1(%rax),%ecx
mov    %ecx,0xc(%rsp)
cmp    $0x1,%eax
jle    152b <main+0x3bb>
lea    0xe23(%rip),%rdi
lea    0x8(%rsp),%rsi
xor    %eax,%eax
call   1090 <scanf@plt>
movslq 0x8(%rsp),%r12
mov    %r12,%rdi
call   1080 <malloc@plt>
mov    %rax,%r14
mov    %r12,%rdi
call   1080 <malloc@plt>
mov    %rax,%rbp
mov    %r12,%rdi
call   1080 <malloc@plt>
mov    %rax,%rbx
lea    0x0(,%r12,4),%rdi
call   1080 <malloc@plt>
mov    %rax,%r15
test   %r12,%r12
mov    %rbx,0x10(%rsp)
jle    126a <main+0xfa>
mov    %r13,%rbx
mov    %r12d,%r13d
mov    0x10(%rsp),%rdi
mov    $0x30,%esi
mov    %r13,%rdx
call   1050 <memset@plt>
shl    $0x2,%r13
mov    %r15,%rdi
xor    %esi,%esi
mov    %r13,%rdx
mov    %rbx,%r13
mov    0x10(%rsp),%rbx
call   1050 <memset@plt>
movb   $0x0,(%rbx,%r12,1)
xor    %eax,%eax
call   1070 <getchar@plt>
mov    %r13,%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1090 <scanf@plt>
movslq 0x8(%rsp),%rax
movb   $0x0,(%r14,%rax,1)
mov    %r14,%rdi
mov    %rbp,%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
lea    0xd75(%rip),%r12
jne    12c3 <main+0x153>
jmp    11b0 <main+0x40>
nopl   0x0(%rax,%rax,1)
mov    %r14,%rdi
mov    %rbp,%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
je     11b0 <main+0x40>
mov    %r13,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1090 <scanf@plt>
movslq 0x8(%rsp),%rbx
movb   $0x0,0x0(%rbp,%rbx,1)
mov    0x10(%rsp),%rdi
mov    %rbp,%rsi
call   1060 <strcmp@plt>
test   %eax,%eax
je     11b0 <main+0x40>
mov    %ebx,%eax
test   %eax,%eax
jle    1310 <main+0x1a0>
cmp    $0x8,%eax
jae    1320 <main+0x1b0>
xor    %ecx,%ecx
xor    %esi,%esi
jmp    1499 <main+0x329>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xor    %esi,%esi
jmp    1500 <main+0x390>
nopw   0x0(%rax,%rax,1)
mov    %eax,%ecx
and    $0xfffffff8,%ecx
pxor   %xmm0,%xmm0
xor    %edx,%edx
pxor   %xmm1,%xmm1
movdqa 0xcc9(%rip),%xmm5
jmp    136d <main+0x1fd>
nopl   0x0(%rax)
punpcklbw %xmm2,%xmm2
punpcklwd %xmm2,%xmm2
pand   %xmm5,%xmm2
paddd  %xmm2,%xmm0
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
pand   %xmm5,%xmm3
paddd  %xmm3,%xmm1
add    $0x8,%rdx
cmp    %rdx,%rcx
je     1460 <main+0x2f0>
movd   0x0(%rbp,%rdx,1),%xmm3
movd   (%r14,%rdx,1),%xmm2
pcmpeqb %xmm3,%xmm2
movd   %xmm2,%esi
test   $0x1,%sil
je     138f <main+0x21f>
movl   $0x1,(%r15,%rdx,4)
movdqa %xmm2,%xmm3
psllq  $0x18,%xmm3
pextrw $0x2,%xmm3,%esi
test   $0x1,%sil
je     13ac <main+0x23c>
movl   $0x1,0x4(%r15,%rdx,4)
pextrw $0x1,%xmm2,%esi
test   $0x1,%sil
je     13c0 <main+0x250>
movl   $0x1,0x8(%r15,%rdx,4)
movdqa %xmm2,%xmm3
pslldq $0x9,%xmm3
pextrw $0x6,%xmm3,%esi
test   $0x1,%sil
je     13dd <main+0x26d>
movl   $0x1,0xc(%r15,%rdx,4)
movd   0x4(%rbp,%rdx,1),%xmm4
movd   0x4(%r14,%rdx,1),%xmm3
pcmpeqb %xmm4,%xmm3
movd   %xmm3,%esi
test   $0x1,%sil
je     1401 <main+0x291>
movl   $0x1,0x10(%r15,%rdx,4)
movdqa %xmm3,%xmm4
psllq  $0x18,%xmm4
pextrw $0x2,%xmm4,%esi
test   $0x1,%sil
je     141e <main+0x2ae>
movl   $0x1,0x14(%r15,%rdx,4)
pextrw $0x1,%xmm3,%esi
test   $0x1,%sil
je     1432 <main+0x2c2>
movl   $0x1,0x18(%r15,%rdx,4)
movdqa %xmm3,%xmm4
pslldq $0x9,%xmm4
pextrw $0x6,%xmm4,%esi
test   $0x1,%sil
je     1340 <main+0x1d0>
movl   $0x1,0x1c(%r15,%rdx,4)
jmp    1340 <main+0x1d0>
nopl   0x0(%rax,%rax,1)
paddd  %xmm0,%xmm1
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%esi
cmp    %rax,%rcx
jne    1499 <main+0x329>
test   %eax,%eax
jle    1500 <main+0x390>
xor    %ecx,%ecx
xor    %edx,%edx
jmp    14c9 <main+0x359>
nopl   0x0(%rax)
add    $0x1,%rcx
cmp    %rcx,%rax
je     147f <main+0x30f>
movzbl 0x0(%rbp,%rcx,1),%edx
cmp    (%r14,%rcx,1),%dl
jne    1490 <main+0x320>
add    $0x1,%esi
movl   $0x1,(%r15,%rcx,4)
jmp    1490 <main+0x320>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
cmp    %rax,%rcx
je     1502 <main+0x392>
mov    0x0(%rbp,%rcx,1),%bl
cmp    (%r14,%rcx,1),%bl
je     14c0 <main+0x350>
xor    %edi,%edi
jmp    14e9 <main+0x379>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rdi
cmp    %rdi,%rax
je     14c0 <main+0x350>
cmp    (%r14,%rdi,1),%bl
jne    14e0 <main+0x370>
cmpl   $0x0,(%r15,%rdi,4)
jne    14e0 <main+0x370>
add    $0x1,%edx
jmp    14c0 <main+0x350>
nopl   0x0(%rax,%rax,1)
xor    %edx,%edx
mov    %r12,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%rsp),%edx
test   %edx,%edx
jle    12b0 <main+0x140>
shl    $0x2,%rdx
mov    %r15,%rdi
xor    %esi,%esi
call   1050 <memset@plt>
jmp    12b0 <main+0x140>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [3 x i8] c"%d\00"
@.str.1 = [3 x i8] c"%s\00"
@.str.2 = [9 x i8] c"(%d,%d)\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i8*
%11 = alloca i32*
store i32 0, i32* %1
store i32 0, i32* %2
store i32 0, i32* %3
%12 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %6)
br label %13
13: ; preds = %190, %0
%14 = load i32, i32* %6
%15 = icmp sgt i32 %14, 0
br i1 %15, label %16, label %193
16: ; preds = %13
%17 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %7)
%18 = load i32, i32* %7
%19 = sext i32 %18 to i64
%20 = mul i64 1, %19
%21 = call i8* @malloc(i64 %20)
store i8* %21, i8** %8
%22 = load i32, i32* %7
%23 = sext i32 %22 to i64
%24 = mul i64 1, %23
%25 = call i8* @malloc(i64 %24)
store i8* %25, i8** %9
%26 = load i32, i32* %7
%27 = sext i32 %26 to i64
%28 = mul i64 1, %27
%29 = call i8* @malloc(i64 %28)
store i8* %29, i8** %10
%30 = load i32, i32* %7
%31 = sext i32 %30 to i64
%32 = mul i64 4, %31
%33 = call i8* @malloc(i64 %32)
%34 = bitcast i8* %33 to i32*
store i32* %34, i32** %11
store i32 0, i32* %4
br label %35
35: ; preds = %48, %16
%36 = load i32, i32* %4
%37 = load i32, i32* %7
%38 = icmp slt i32 %36, %37
br i1 %38, label %39, label %51
39: ; preds = %35
%40 = load i8*, i8** %10
%41 = load i32, i32* %4
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i8, i8* %40, i64 %42
store i8 48, i8* %43
%44 = load i32*, i32** %11
%45 = load i32, i32* %4
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i32, i32* %44, i64 %46
store i32 0, i32* %47
br label %48
48: ; preds = %39
%49 = load i32, i32* %4
%50 = add nsw i32 %49, 1
store i32 %50, i32* %4
br label %35
51: ; preds = %35
%52 = load i8*, i8** %10
%53 = load i32, i32* %7
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %52, i64 %54
store i8 0, i8* %55
%56 = call i32 (...) @getchar()
%57 = load i8*, i8** %8
%58 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %57)
%59 = load i8*, i8** %8
%60 = load i32, i32* %7
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %59, i64 %61
store i8 0, i8* %62
br label %63
63: ; preds = %183, %51
%64 = load i8*, i8** %8
%65 = load i8*, i8** %9
%66 = call i32 @strcmp(i8* %64, i8* %65)
%67 = icmp ne i32 %66, 0
br i1 %67, label %68, label %184
68: ; preds = %63
%69 = load i8*, i8** %9
%70 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %69)
%71 = load i8*, i8** %9
%72 = load i32, i32* %7
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %71, i64 %73
store i8 0, i8* %74
%75 = load i8*, i8** %10
%76 = load i8*, i8** %9
%77 = call i32 @strcmp(i8* %75, i8* %76)
%78 = icmp eq i32 %77, 0
br i1 %78, label %79, label %80
79: ; preds = %68
br label %184
80: ; preds = %68
store i32 0, i32* %4
br label %81
81: ; preds = %107, %80
%82 = load i32, i32* %4
%83 = load i32, i32* %7
%84 = icmp slt i32 %82, %83
br i1 %84, label %85, label %110
85: ; preds = %81
%86 = load i8*, i8** %9
%87 = load i32, i32* %4
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %86, i64 %88
%90 = load i8, i8* %89
%91 = sext i8 %90 to i32
%92 = load i8*, i8** %8
%93 = load i32, i32* %4
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8, i8* %92, i64 %94
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = icmp eq i32 %91, %97
br i1 %98, label %99, label %106
99: ; preds = %85
%100 = load i32, i32* %3
%101 = add nsw i32 %100, 1
store i32 %101, i32* %3
%102 = load i32*, i32** %11
%103 = load i32, i32* %4
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i32, i32* %102, i64 %104
store i32 1, i32* %105
br label %106
106: ; preds = %99, %85
br label %107
107: ; preds = %106
%108 = load i32, i32* %4
%109 = add nsw i32 %108, 1
store i32 %109, i32* %4
br label %81
110: ; preds = %81
store i32 0, i32* %4
br label %111
111: ; preds = %164, %110
%112 = load i32, i32* %4
%113 = load i32, i32* %7
%114 = icmp slt i32 %112, %113
br i1 %114, label %115, label %167
115: ; preds = %111
%116 = load i8*, i8** %9
%117 = load i32, i32* %4
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i8, i8* %116, i64 %118
%120 = load i8, i8* %119
%121 = sext i8 %120 to i32
%122 = load i8*, i8** %8
%123 = load i32, i32* %4
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds i8, i8* %122, i64 %124
%126 = load i8, i8* %125
%127 = sext i8 %126 to i32
%128 = icmp ne i32 %121, %127
br i1 %128, label %129, label %163
129: ; preds = %115
store i32 0, i32* %5
br label %130
130: ; preds = %159, %129
%131 = load i32, i32* %5
%132 = load i32, i32* %7
%133 = icmp slt i32 %131, %132
br i1 %133, label %134, label %162
134: ; preds = %130
%135 = load i8*, i8** %9
%136 = load i32, i32* %4
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i8, i8* %135, i64 %137
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = load i8*, i8** %8
%142 = load i32, i32* %5
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i8, i8* %141, i64 %143
%145 = load i8, i8* %144
%146 = sext i8 %145 to i32
%147 = icmp eq i32 %140, %146
br i1 %147, label %148, label %158
148: ; preds = %134
%149 = load i32*, i32** %11
%150 = load i32, i32* %5
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds i32, i32* %149, i64 %151
%153 = load i32, i32* %152
%154 = icmp eq i32 %153, 0
br i1 %154, label %155, label %158
155: ; preds = %148
%156 = load i32, i32* %2
%157 = add nsw i32 %156, 1
store i32 %157, i32* %2
br label %162
158: ; preds = %148, %134
br label %159
159: ; preds = %158
%160 = load i32, i32* %5
%161 = add nsw i32 %160, 1
store i32 %161, i32* %5
br label %130
162: ; preds = %155, %130
br label %163
163: ; preds = %162, %115
br label %164
164: ; preds = %163
%165 = load i32, i32* %4
%166 = add nsw i32 %165, 1
store i32 %166, i32* %4
br label %111
167: ; preds = %111
%168 = load i32, i32* %3
%169 = load i32, i32* %2
%170 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 %168, i32 %169)
store i32 0, i32* %3
store i32 0, i32* %2
store i32 0, i32* %4
br label %171
171: ; preds = %180, %167
%172 = load i32, i32* %4
%173 = load i32, i32* %7
%174 = icmp slt i32 %172, %173
br i1 %174, label %175, label %183
175: ; preds = %171
%176 = load i32*, i32** %11
%177 = load i32, i32* %4
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds i32, i32* %176, i64 %178
store i32 0, i32* %179
br label %180
180: ; preds = %175
%181 = load i32, i32* %4
%182 = add nsw i32 %181, 1
store i32 %182, i32* %4
br label %171
183: ; preds = %171
br label %63
184: ; preds = %79, %63
%185 = load i8*, i8** %8
%186 = load i8*, i8** %9
%187 = load i8*, i8** %10
%188 = load i32*, i32** %11
%189 = bitcast i32* %188 to i8*
br label %190
190: ; preds = %184
%191 = load i32, i32* %6
%192 = add nsw i32 %191, -1
store i32 %192, i32* %6
br label %13
193: ; preds = %13
ret i32 0
}

LLVM IR (-O2):
@.str = [3 x i8] c"%d\00"
@.str.1 = [3 x i8] c"%s\00"
@.str.2 = [9 x i8] c"(%d,%d)\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = bitcast i32* %1 to i8*
%4 = bitcast i32* %2 to i8*
%5 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %1)
%6 = load i32, i32* %1
%7 = icmp sgt i32 %6, 0
br i1 %7, label %8, label %176
8: ; preds = %0, %172
%9 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %2)
%10 = load i32, i32* %2
%11 = sext i32 %10 to i64
%12 = call i8* @malloc(i64 %11)
%13 = call i8* @malloc(i64 %11)
%14 = call i8* @malloc(i64 %11)
%15 = shl nsw i64 %11, 2
%16 = call i8* @malloc(i64 %15)
%17 = bitcast i8* %16 to i32*
%18 = icmp sgt i32 %10, 0
br i1 %18, label %19, label %22
19: ; preds = %8
%20 = zext i32 %10 to i64
%21 = shl nuw nsw i64 %20, 2
br label %22
22: ; preds = %19, %8
%23 = getelementptr inbounds i8, i8* %14, i64 %11
store i8 0, i8* %23
%24 = call i32 (...) @getchar()
%25 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %12)
%26 = load i32, i32* %2
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds i8, i8* %12, i64 %27
store i8 0, i8* %28
%29 = call i32 @strcmp(i8* dereferenceable(1) %12, i8* dereferenceable(1) %13)
%30 = icmp eq i32 %29, 0
br i1 %30, label %172, label %34
31: ; preds = %169, %163
%32 = call i32 @strcmp(i8* dereferenceable(1) %12, i8* dereferenceable(1) %13)
%33 = icmp eq i32 %32, 0
br i1 %33, label %172, label %34
34: ; preds = %22, %31
%35 = call i32 (i8*, ...) @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i8* %13)
%36 = load i32, i32* %2
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %13, i64 %37
store i8 0, i8* %38
%39 = call i32 @strcmp(i8* dereferenceable(1) %14, i8* dereferenceable(1) %13)
%40 = icmp eq i32 %39, 0
br i1 %40, label %172, label %41
41: ; preds = %34
%42 = icmp sgt i32 %36, 0
br i1 %42, label %43, label %163
43: ; preds = %41
%44 = zext i32 %36 to i64
%45 = icmp ult i32 %36, 8
br i1 %45, label %115, label %46
46: ; preds = %43
%47 = and i64 %44, 4294967288
br label %48
48: ; preds = %104, %46
%49 = phi i64 [ 0, %46 ], [ %109, %104 ]
%50 = phi <4 x i32> [ zeroinitializer, %46 ], [ %106, %104 ]
%51 = phi <4 x i32> [ zeroinitializer, %46 ], [ %108, %104 ]
%52 = or i64 %49, 4
%53 = getelementptr inbounds i8, i8* %13, i64 %49
%54 = bitcast i8* %53 to <4 x i8>*
%55 = load <4 x i8>, <4 x i8>* %54
%56 = getelementptr inbounds i8, i8* %53, i64 4
%57 = bitcast i8* %56 to <4 x i8>*
%58 = load <4 x i8>, <4 x i8>* %57
%59 = getelementptr inbounds i8, i8* %12, i64 %49
%60 = bitcast i8* %59 to <4 x i8>*
%61 = load <4 x i8>, <4 x i8>* %60
%62 = getelementptr inbounds i8, i8* %59, i64 4
%63 = bitcast i8* %62 to <4 x i8>*
%64 = load <4 x i8>, <4 x i8>* %63
%65 = icmp eq <4 x i8> %55, %61
%66 = icmp eq <4 x i8> %58, %64
%67 = extractelement <4 x i1> %65, i64 0
br i1 %67, label %68, label %70
68: ; preds = %48
%69 = getelementptr inbounds i32, i32* %17, i64 %49
store i32 1, i32* %69
br label %70
70: ; preds = %68, %48
%71 = extractelement <4 x i1> %65, i64 1
br i1 %71, label %72, label %75
72: ; preds = %70
%73 = or i64 %49, 1
%74 = getelementptr inbounds i32, i32* %17, i64 %73
store i32 1, i32* %74
br label %75
75: ; preds = %72, %70
%76 = extractelement <4 x i1> %65, i64 2
br i1 %76, label %77, label %80
77: ; preds = %75
%78 = or i64 %49, 2
%79 = getelementptr inbounds i32, i32* %17, i64 %78
store i32 1, i32* %79
br label %80
80: ; preds = %77, %75
%81 = extractelement <4 x i1> %65, i64 3
br i1 %81, label %82, label %85
82: ; preds = %80
%83 = or i64 %49, 3
%84 = getelementptr inbounds i32, i32* %17, i64 %83
store i32 1, i32* %84
br label %85
85: ; preds = %82, %80
%86 = extractelement <4 x i1> %66, i64 0
br i1 %86, label %87, label %89
87: ; preds = %85
%88 = getelementptr inbounds i32, i32* %17, i64 %52
store i32 1, i32* %88
br label %89
89: ; preds = %87, %85
%90 = extractelement <4 x i1> %66, i64 1
br i1 %90, label %91, label %94
91: ; preds = %89
%92 = or i64 %49, 5
%93 = getelementptr inbounds i32, i32* %17, i64 %92
store i32 1, i32* %93
br label %94
94: ; preds = %91, %89
%95 = extractelement <4 x i1> %66, i64 2
br i1 %95, label %96, label %99
96: ; preds = %94
%97 = or i64 %49, 6
%98 = getelementptr inbounds i32, i32* %17, i64 %97
store i32 1, i32* %98
br label %99
99: ; preds = %96, %94
%100 = extractelement <4 x i1> %66, i64 3
br i1 %100, label %101, label %104
101: ; preds = %99
%102 = or i64 %49, 7
%103 = getelementptr inbounds i32, i32* %17, i64 %102
store i32 1, i32* %103
br label %104
104: ; preds = %101, %99
%105 = zext <4 x i1> %65 to <4 x i32>
%106 = add <4 x i32> %50, %105
%107 = zext <4 x i1> %66 to <4 x i32>
%108 = add <4 x i32> %51, %107
%109 = add nuw i64 %49, 8
%110 = icmp eq i64 %109, %47
br i1 %110, label %111, label %48
111: ; preds = %104
%112 = add <4 x i32> %108, %106
%113 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %112)
%114 = icmp eq i64 %47, %44
br i1 %114, label %118, label %115
115: ; preds = %43, %111
%116 = phi i64 [ 0, %43 ], [ %47, %111 ]
%117 = phi i32 [ 0, %43 ], [ %113, %111 ]
br label %122
118: ; preds = %133, %111
%119 = phi i32 [ %113, %111 ], [ %134, %133 ]
br i1 %42, label %120, label %163
120: ; preds = %118
%121 = zext i32 %36 to i64
br label %137
122: ; preds = %115, %133
%123 = phi i64 [ %135, %133 ], [ %116, %115 ]
%124 = phi i32 [ %134, %133 ], [ %117, %115 ]
%125 = getelementptr inbounds i8, i8* %13, i64 %123
%126 = load i8, i8* %125
%127 = getelementptr inbounds i8, i8* %12, i64 %123
%128 = load i8, i8* %127
%129 = icmp eq i8 %126, %128
br i1 %129, label %130, label %133
130: ; preds = %122
%131 = add nsw i32 %124, 1
%132 = getelementptr inbounds i32, i32* %17, i64 %123
store i32 1, i32* %132
br label %133
133: ; preds = %122, %130
%134 = phi i32 [ %131, %130 ], [ %124, %122 ]
%135 = add nuw nsw i64 %123, 1
%136 = icmp eq i64 %135, %44
br i1 %136, label %118, label %122
137: ; preds = %120, %159
%138 = phi i64 [ 0, %120 ], [ %161, %159 ]
%139 = phi i32 [ 0, %120 ], [ %160, %159 ]
%140 = getelementptr inbounds i8, i8* %13, i64 %138
%141 = load i8, i8* %140
%142 = getelementptr inbounds i8, i8* %12, i64 %138
%143 = load i8, i8* %142
%144 = icmp eq i8 %141, %143
br i1 %144, label %159, label %145
145: ; preds = %137, %156
%146 = phi i64 [ %157, %156 ], [ 0, %137 ]
%147 = getelementptr inbounds i8, i8* %12, i64 %146
%148 = load i8, i8* %147
%149 = icmp eq i8 %141, %148
br i1 %149, label %150, label %156
150: ; preds = %145
%151 = getelementptr inbounds i32, i32* %17, i64 %146
%152 = load i32, i32* %151
%153 = icmp eq i32 %152, 0
br i1 %153, label %154, label %156
154: ; preds = %150
%155 = add nsw i32 %139, 1
br label %159
156: ; preds = %145, %150
%157 = add nuw nsw i64 %146, 1
%158 = icmp eq i64 %157, %121
br i1 %158, label %159, label %145
159: ; preds = %156, %137, %154
%160 = phi i32 [ %155, %154 ], [ %139, %137 ], [ %139, %156 ]
%161 = add nuw nsw i64 %138, 1
%162 = icmp eq i64 %161, %121
br i1 %162, label %163, label %137
163: ; preds = %159, %41, %118
%164 = phi i32 [ %119, %118 ], [ 0, %41 ], [ %119, %159 ]
%165 = phi i32 [ 0, %118 ], [ 0, %41 ], [ %160, %159 ]
%166 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 %164, i32 %165)
%167 = load i32, i32* %2
%168 = icmp sgt i32 %167, 0
br i1 %168, label %169, label %31
169: ; preds = %163
%170 = zext i32 %167 to i64
%171 = shl nuw nsw i64 %170, 2
br label %31
172: ; preds = %31, %34, %22
%173 = load i32, i32* %1
%174 = add nsw i32 %173, -1
store i32 %174, i32* %1
%175 = icmp sgt i32 %173, 1
br i1 %175, label %8, label %176
176: ; preds = %172, %0
ret i32 0
}