int is_distance_under_recrusively(char *a, int al, char *b, int bl, int x,
                                  int y, int l, int s, int *d) {
  int right;
  int bottom;
  if (l >= s) {
    return 0;
  }
  if (y == al && x == bl) {
    return 1;
  }
  while (y < al && x < bl && a[y] == b[x]) {
    x++;
    y++;
  }
  if (y < al && x < bl && !d[(y + 1) * 1200 + (x + 1)]) {
    d[(y + 1) * 1200 + (x + 1)] = 1;
    if (is_distance_under_recrusively(a, al, b, bl, x + 1, y + 1, l + 1, s,
                                      d)) {
      return 1;
    }
  }
  if (x < bl && !d[y * 1200 + (x + 1)]) {
    d[y * 1200 + (x + 1)] = 1;
    if (is_distance_under_recrusively(a, al, b, bl, x + 1, y, l + 1, s, d)) {
      return 1;
    }
  }
  if (y < al && !d[(y + 1) * 1200 + x]) {
    d[(y + 1) * 1200 + x] = 1;
    if (is_distance_under_recrusively(a, al, b, bl, x, y + 1, l + 1, s, d)) {
      return 1;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<is_distance_under_recrusively>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8d,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    0x10(%rbp),%eax
cmp    0x18(%rbp),%eax
jl     1150 <is_distance_under_recrusively+0x40>
movl   $0x0,-0x4(%rbp)
jmp    13e3 <is_distance_under_recrusively+0x2d3>
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1174 <is_distance_under_recrusively+0x64>
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jne    1174 <is_distance_under_recrusively+0x64>
movl   $0x1,-0x4(%rbp)
jmp    13e3 <is_distance_under_recrusively+0x2d3>
jmp    1179 <is_distance_under_recrusively+0x69>
mov    -0x2c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x14(%rbp),%ecx
mov    %al,-0x35(%rbp)
jge    11bb <is_distance_under_recrusively+0xab>
mov    -0x28(%rbp),%ecx
xor    %eax,%eax
cmp    -0x24(%rbp),%ecx
mov    %al,-0x35(%rbp)
jge    11bb <is_distance_under_recrusively+0xab>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x20(%rbp),%rcx
movslq -0x28(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
sete   %al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
test   $0x1,%al
jne    11cb <is_distance_under_recrusively+0xbb>
jmp    11e2 <is_distance_under_recrusively+0xd2>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1179 <is_distance_under_recrusively+0x69>
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    129c <is_distance_under_recrusively+0x18c>
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    129c <is_distance_under_recrusively+0x18c>
mov    0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
imul   $0x4b0,%ecx,%ecx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    129c <is_distance_under_recrusively+0x18c>
mov    0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
imul   $0x4b0,%ecx,%ecx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
add    $0x1,%r8d
mov    -0x2c(%rbp),%r9d
add    $0x1,%r9d
mov    0x10(%rbp),%r11d
add    $0x1,%r11d
mov    0x18(%rbp),%r10d
mov    0x20(%rbp),%rax
mov    %r11d,(%rsp)
mov    %r10d,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1030 <is_distance_under_recrusively@plt>
cmp    $0x0,%eax
je     1297 <is_distance_under_recrusively+0x187>
movl   $0x1,-0x4(%rbp)
jmp    13e3 <is_distance_under_recrusively+0x2d3>
jmp    129c <is_distance_under_recrusively+0x18c>
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    133c <is_distance_under_recrusively+0x22c>
mov    0x20(%rbp),%rax
imul   $0x4b0,-0x2c(%rbp),%ecx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    133c <is_distance_under_recrusively+0x22c>
mov    0x20(%rbp),%rax
imul   $0x4b0,-0x2c(%rbp),%ecx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
add    $0x1,%r8d
mov    -0x2c(%rbp),%r9d
mov    0x10(%rbp),%r11d
add    $0x1,%r11d
mov    0x18(%rbp),%r10d
mov    0x20(%rbp),%rax
mov    %r11d,(%rsp)
mov    %r10d,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1030 <is_distance_under_recrusively@plt>
cmp    $0x0,%eax
je     1337 <is_distance_under_recrusively+0x227>
movl   $0x1,-0x4(%rbp)
jmp    13e3 <is_distance_under_recrusively+0x2d3>
jmp    133c <is_distance_under_recrusively+0x22c>
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    13dc <is_distance_under_recrusively+0x2cc>
mov    0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
imul   $0x4b0,%ecx,%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    13dc <is_distance_under_recrusively+0x2cc>
mov    0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
imul   $0x4b0,%ecx,%ecx
add    -0x28(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
mov    -0x24(%rbp),%ecx
mov    -0x28(%rbp),%r8d
mov    -0x2c(%rbp),%r9d
add    $0x1,%r9d
mov    0x10(%rbp),%r11d
add    $0x1,%r11d
mov    0x18(%rbp),%r10d
mov    0x20(%rbp),%rax
mov    %r11d,(%rsp)
mov    %r10d,0x8(%rsp)
mov    %rax,0x10(%rsp)
call   1030 <is_distance_under_recrusively@plt>
cmp    $0x0,%eax
je     13d7 <is_distance_under_recrusively+0x2c7>
movl   $0x1,-0x4(%rbp)
jmp    13e3 <is_distance_under_recrusively+0x2d3>
jmp    13dc <is_distance_under_recrusively+0x2cc>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_distance_under_recrusively>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    0x58(%rsp),%ebp
mov    0x50(%rsp),%eax
xor    %ebx,%ebx
cmp    %ebp,%eax
jge    12dc <is_distance_under_recrusively+0x1cc>
mov    %r9d,%r14d
mov    %r8d,%r12d
mov    $0x1,%ebx
cmp    %ecx,%r8d
jne    1149 <is_distance_under_recrusively+0x39>
cmp    %esi,%r14d
je     12dc <is_distance_under_recrusively+0x1cc>
mov    0x60(%rsp),%r10
cmp    %esi,%r14d
setl   %r13b
jge    1209 <is_distance_under_recrusively+0xf9>
cmp    %ecx,%r12d
jge    1209 <is_distance_under_recrusively+0xf9>
movslq %r12d,%r10
mov    %ecx,0x4(%rsp)
movslq %ecx,%r8
movslq %r14d,%r15
mov    %esi,(%rsp)
movslq %esi,%r9
imul   $0x4b0,%r14d,%eax
lea    (%r12,%rax,1),%r11d
add    $0x4b1,%r11d
mov    %rdi,0x10(%rsp)
lea    (%rdi,%r15,1),%rbp
mov    %rdx,0x8(%rsp)
lea    (%rdx,%r10,1),%rcx
xor    %eax,%eax
nopl   (%rax)
movzbl 0x0(%rbp,%rax,1),%ebx
cmp    (%rcx,%rax,1),%bl
jne    1213 <is_distance_under_recrusively+0x103>
lea    (%r10,%rax,1),%rbx
add    $0x1,%rbx
lea    (%r15,%rax,1),%rsi
add    $0x1,%rsi
add    $0x1,%rax
cmp    %r9,%rsi
setl   %r13b
jge    11d3 <is_distance_under_recrusively+0xc3>
add    $0x4b1,%r11d
cmp    %r8,%rbx
jl     11a0 <is_distance_under_recrusively+0x90>
mov    %r14d,%r14d
add    %rax,%r14
mov    %r12d,%r12d
add    %rax,%r12
cmp    %r8,%rbx
mov    0x58(%rsp),%ebp
jge    1319 <is_distance_under_recrusively+0x209>
mov    0x4(%rsp),%ecx
mov    0x8(%rsp),%rdx
mov    (%rsp),%esi
mov    0x10(%rsp),%rdi
mov    $0x1,%ebx
mov    0x60(%rsp),%r10
jmp    1251 <is_distance_under_recrusively+0x141>
cmp    %ecx,%r12d
jl     1251 <is_distance_under_recrusively+0x141>
jmp    12be <is_distance_under_recrusively+0x1ae>
mov    %r14d,%ecx
lea    (%rcx,%rax,1),%r14
mov    %r12d,%esi
lea    (%rsi,%rax,1),%r12
movslq %r11d,%rdx
mov    0x60(%rsp),%r10
cmpl   $0x0,(%r10,%rdx,4)
je     133b <is_distance_under_recrusively+0x22b>
mov    $0x1,%r13b
mov    0x58(%rsp),%ebp
mov    0x4(%rsp),%ecx
mov    0x8(%rsp),%rdx
mov    (%rsp),%esi
mov    0x10(%rsp),%rdi
mov    $0x1,%ebx
imul   $0x4b0,%r14d,%eax
add    %r12d,%eax
add    $0x1,%eax
cltq
cmpl   $0x0,(%r10,%rax,4)
jne    12be <is_distance_under_recrusively+0x1ae>
lea    0x1(%r12),%r8d
movl   $0x1,(%r10,%rax,4)
mov    0x50(%rsp),%eax
add    $0x1,%eax
sub    $0x8,%rsp
mov    %rdx,0x10(%rsp)
mov    %rdi,0x18(%rsp)
mov    %ecx,%ebx
mov    %esi,0x8(%rsp)
mov    %r14d,%r9d
push   %r10
push   %rbp
push   %rax
mov    %r10,%r15
call   1030 <is_distance_under_recrusively@plt>
mov    %r15,%r10
mov    0x20(%rsp),%esi
mov    %ebx,%ecx
mov    0x30(%rsp),%rdi
mov    $0x1,%ebx
mov    0x28(%rsp),%rdx
add    $0x20,%rsp
test   %eax,%eax
jne    12dc <is_distance_under_recrusively+0x1cc>
test   %r13b,%r13b
je     12da <is_distance_under_recrusively+0x1ca>
add    $0x1,%r14d
imul   $0x4b0,%r14d,%eax
add    %r12d,%eax
cltq
cmpl   $0x0,(%r10,%rax,4)
je     12ed <is_distance_under_recrusively+0x1dd>
xor    %ebx,%ebx
mov    %ebx,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movl   $0x1,(%r10,%rax,4)
mov    0x50(%rsp),%eax
add    $0x1,%eax
sub    $0x8,%rsp
mov    %r12d,%r8d
mov    %r14d,%r9d
push   %r10
push   %rbp
push   %rax
call   1030 <is_distance_under_recrusively@plt>
add    $0x20,%rsp
test   %eax,%eax
jne    12dc <is_distance_under_recrusively+0x1cc>
jmp    12da <is_distance_under_recrusively+0x1ca>
mov    0x4(%rsp),%ecx
mov    0x8(%rsp),%rdx
mov    (%rsp),%esi
mov    0x10(%rsp),%rdi
mov    $0x1,%ebx
mov    0x60(%rsp),%r10
test   %r13b,%r13b
jne    12c3 <is_distance_under_recrusively+0x1b3>
jmp    12da <is_distance_under_recrusively+0x1ca>
lea    (%rcx,%rax,1),%r9
add    $0x1,%r9
lea    0x1(%rsi,%rax,1),%r8
movl   $0x1,(%r10,%rdx,4)
mov    0x50(%rsp),%eax
add    $0x1,%eax
sub    $0x8,%rsp
mov    0x18(%rsp),%r13
mov    %r13,%rdi
mov    0x8(%rsp),%esi
mov    0x10(%rsp),%rdx
mov    0xc(%rsp),%r15d
mov    %r15d,%ecx
push   %r10
mov    0x68(%rsp),%ebp
push   %rbp
push   %rax
call   1030 <is_distance_under_recrusively@plt>
add    $0x20,%rsp
test   %eax,%eax
mov    $0x1,%ebx
jne    12dc <is_distance_under_recrusively+0x1cc>
mov    %r13,%rdi
mov    $0x1,%r13b
mov    %r15d,%ecx
mov    0x8(%rsp),%rdx
mov    (%rsp),%esi
mov    0x60(%rsp),%r10
jmp    1251 <is_distance_under_recrusively+0x141>

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

LLVM IR (-O2):
define i32 @is_distance_under_recrusively(i8* %0, i32 %1, i8* %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32* %8) {
%10 = icmp slt i32 %6, %7
br i1 %10, label %11, label %89
11: ; preds = %9
%12 = icmp eq i32 %5, %1
%13 = icmp eq i32 %4, %3
%14 = and i1 %13, %12
br i1 %14, label %89, label %15
15: ; preds = %11
%16 = icmp slt i32 %5, %1
%17 = icmp slt i32 %4, %3
%18 = and i1 %16, %17
br i1 %18, label %19, label %56
19: ; preds = %15
%20 = sext i32 %4 to i64
%21 = sext i32 %3 to i64
%22 = sext i32 %5 to i64
%23 = sext i32 %1 to i64
br label %24
24: ; preds = %19, %32
%25 = phi i64 [ %22, %19 ], [ %34, %32 ]
%26 = phi i64 [ %20, %19 ], [ %33, %32 ]
%27 = getelementptr inbounds i8, i8* %0, i64 %25
%28 = load i8, i8* %27
%29 = getelementptr inbounds i8, i8* %2, i64 %26
%30 = load i8, i8* %29
%31 = icmp eq i8 %28, %30
br i1 %31, label %32, label %38
32: ; preds = %24
%33 = add nsw i64 %26, 1
%34 = add nsw i64 %25, 1
%35 = icmp slt i64 %34, %23
%36 = icmp slt i64 %33, %21
%37 = select i1 %35, i1 %36, i1 false
br i1 %37, label %24, label %53
38: ; preds = %24
%39 = trunc i64 %25 to i32
%40 = trunc i64 %26 to i32
%41 = add nsw i32 %39, 1
%42 = mul nsw i32 %41, 1200
%43 = add nsw i32 %40, 1
%44 = add nsw i32 %42, %43
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i32, i32* %8, i64 %45
%47 = load i32, i32* %46
%48 = icmp eq i32 %47, 0
br i1 %48, label %49, label %57
49: ; preds = %38
store i32 1, i32* %46
%50 = add nsw i32 %6, 1
%51 = tail call i32 @is_distance_under_recrusively(i8* %0, i32 %1, i8* %2, i32 %3, i32 %43, i32 %41, i32 %50, i32 %7, i32* %8)
%52 = icmp eq i32 %51, 0
br i1 %52, label %57, label %89
53: ; preds = %32
%54 = trunc i64 %34 to i32
%55 = trunc i64 %33 to i32
br i1 %36, label %57, label %72
56: ; preds = %15
br i1 %17, label %57, label %72
57: ; preds = %38, %49, %53, %56
%58 = phi i1 [ %16, %56 ], [ %35, %53 ], [ true, %49 ], [ true, %38 ]
%59 = phi i32 [ %4, %56 ], [ %55, %53 ], [ %40, %49 ], [ %40, %38 ]
%60 = phi i32 [ %5, %56 ], [ %54, %53 ], [ %39, %49 ], [ %39, %38 ]
%61 = mul nsw i32 %60, 1200
%62 = add nsw i32 %59, 1
%63 = add nsw i32 %62, %61
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i32, i32* %8, i64 %64
%66 = load i32, i32* %65
%67 = icmp eq i32 %66, 0
br i1 %67, label %68, label %72
68: ; preds = %57
store i32 1, i32* %65
%69 = add nsw i32 %6, 1
%70 = tail call i32 @is_distance_under_recrusively(i8* %0, i32 %1, i8* %2, i32 %3, i32 %62, i32 %60, i32 %69, i32 %7, i32* %8)
%71 = icmp eq i32 %70, 0
br i1 %71, label %72, label %89
72: ; preds = %53, %68, %57, %56
%73 = phi i1 [ %58, %68 ], [ %58, %57 ], [ %16, %56 ], [ %35, %53 ]
%74 = phi i32 [ %59, %68 ], [ %59, %57 ], [ %4, %56 ], [ %55, %53 ]
%75 = phi i32 [ %60, %68 ], [ %60, %57 ], [ %5, %56 ], [ %54, %53 ]
br i1 %73, label %76, label %88
76: ; preds = %72
%77 = add nsw i32 %75, 1
%78 = mul nsw i32 %77, 1200
%79 = add nsw i32 %78, %74
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds i32, i32* %8, i64 %80
%82 = load i32, i32* %81
%83 = icmp eq i32 %82, 0
br i1 %83, label %84, label %88
84: ; preds = %76
store i32 1, i32* %81
%85 = add nsw i32 %6, 1
%86 = tail call i32 @is_distance_under_recrusively(i8* %0, i32 %1, i8* %2, i32 %3, i32 %74, i32 %77, i32 %85, i32 %7, i32* %8)
%87 = icmp eq i32 %86, 0
br i1 %87, label %88, label %89
88: ; preds = %84, %76, %72
br label %89
89: ; preds = %84, %68, %49, %11, %9, %88
%90 = phi i32 [ 0, %88 ], [ 0, %9 ], [ 1, %11 ], [ 1, %49 ], [ 1, %68 ], [ 1, %84 ]
ret i32 %90
}