#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 */
long long comb(long long, int);
int /*<<< orphan*/ getchar();
int /*<<< orphan*/ gets(char *);
int /*<<< orphan*/ printf(char *, int);
int /*<<< orphan*/ scanf(char *, int *);
long long strlen(char *);
int main() {
  int t;
  scanf("%d", &t);
  int i;
  getchar();
  for (i = 0; i < t; i++) {
    char b[10005];
    gets(b);
    long long l;
    long long c = 0;
    l = strlen(b);
    int j, k, p, s;
    long long a[10] = {0};
    for (j = 0; j < l; j++) {
      a[b[j] - 48]++;
    }
    c = c + a[9];
    for (j = 0; j < 10; j++) {
      for (k = j; k < 10; k++) {
        if ((j + k) % 9 == 0 && (j != 0 || k != 0)) {
          if (j == k) {
            c = c + comb(a[j], 2);
          } else {
            c = c + (a[j] * a[k]);
          }
        }
        for (p = k; p < 10; p++) {
          if ((j + k + p) % 9 == 0 && (j != 0 || k != 0 || p != 0)) {
            if (j == k && k == p) {
              c = c + comb(a[j], 3);
            } else if (j == k) {
              c = c + (comb(a[j], 2) * a[p]);
            } else if (k == p) {
              c = c + (comb(a[k], 2) * a[j]);
            } else {
              c = c + (a[j] * a[k] * a[p]);
            }
          }
          for (s = p; s < 10; s++) {
            if ((j + k + p + s) % 9 == 0 &&
                (j != 0 || k != 0 || p != 0 || s != 0)) {
              if (j == k && k == p && p == s) {
                c = c + comb(a[j], 4);
              } else if (j == k && k == p) {
                c = c + (comb(a[j], 3) * a[s]);
              } else if (k == p && p == s) {
                c = c + (comb(a[k], 3) * a[j]);
              } else if (j == k && p == s)
                c = c + (comb(a[j], 2) * comb(a[p], 2));
              else if (j == k) {
                c = c + (comb(a[j], 2) * a[p] * a[s]);
              } else if (k == p) {
                c = c + (comb(a[k], 2) * a[j] * a[s]);
              } else if (p == s) {
                c = c + (comb(a[p], 2) * a[j] * a[k]);
              } else {
                c = c + (a[j] * a[k] * a[p] * a[s]);
              }
            }
          }
        }
      }
    }
    int co;
    co = c % 1000000007;
    printf("%d\n", co);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2810,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xe77(%rip),%rdi
lea    -0x8(%rbp),%rsi
call   1090 <scanf@plt>
mov    $0x0,%al
call   1070 <getchar@plt>
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    19e9 <main+0x879>
lea    -0x2730(%rbp),%rdi
call   1080 <gets@plt>
movq   $0x0,-0x2740(%rbp)
lea    -0x2730(%rbp),%rdi
call   1040 <strlen@plt>
mov    %rax,-0x2738(%rbp)
lea    -0x27a0(%rbp),%rdi
xor    %esi,%esi
mov    $0x50,%edx
call   1060 <memset@plt>
movl   $0x0,-0x2744(%rbp)
movslq -0x2744(%rbp),%rax
cmp    -0x2738(%rbp),%rax
jge    1243 <main+0xd3>
movslq -0x2744(%rbp),%rax
movsbl -0x2730(%rbp,%rax,1),%eax
ff
sub    $0x30,%eax
cltq
mov    -0x27a0(%rbp,%rax,8),%rcx
ff
add    $0x1,%rcx
mov    %rcx,-0x27a0(%rbp,%rax,8)
ff
mov    -0x2744(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2744(%rbp)
jmp    11f3 <main+0x83>
mov    -0x2740(%rbp),%rax
add    -0x2758(%rbp),%rax
mov    %rax,-0x2740(%rbp)
movl   $0x0,-0x2744(%rbp)
cmpl   $0xa,-0x2744(%rbp)
jge    19b0 <main+0x840>
mov    -0x2744(%rbp),%eax
mov    %eax,-0x2748(%rbp)
cmpl   $0xa,-0x2748(%rbp)
jge    1997 <main+0x827>
mov    -0x2744(%rbp),%eax
add    -0x2748(%rbp),%eax
mov    $0x9,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1346 <main+0x1d6>
cmpl   $0x0,-0x2744(%rbp)
jne    12bf <main+0x14f>
cmpl   $0x0,-0x2748(%rbp)
je     1346 <main+0x1d6>
mov    -0x2744(%rbp),%eax
cmp    -0x2748(%rbp),%eax
jne    1311 <main+0x1a1>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27b0(%rbp)
movslq -0x2744(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27b0(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1341 <main+0x1d1>
mov    -0x2740(%rbp),%rax
movslq -0x2744(%rbp),%rcx
mov    -0x27a0(%rbp,%rcx,8),%rcx
ff
movslq -0x2748(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1346 <main+0x1d6>
mov    -0x2748(%rbp),%eax
mov    %eax,-0x274c(%rbp)
cmpl   $0xa,-0x274c(%rbp)
jge    197e <main+0x80e>
mov    -0x2744(%rbp),%eax
add    -0x2748(%rbp),%eax
add    -0x274c(%rbp),%eax
mov    $0x9,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1520 <main+0x3b0>
cmpl   $0x0,-0x2744(%rbp)
jne    13a9 <main+0x239>
cmpl   $0x0,-0x2748(%rbp)
jne    13a9 <main+0x239>
cmpl   $0x0,-0x274c(%rbp)
je     1520 <main+0x3b0>
mov    -0x2744(%rbp),%eax
cmp    -0x2748(%rbp),%eax
jne    140d <main+0x29d>
mov    -0x2748(%rbp),%eax
cmp    -0x274c(%rbp),%eax
jne    140d <main+0x29d>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27b8(%rbp)
movslq -0x2744(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x3,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27b8(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    151b <main+0x3ab>
mov    -0x2744(%rbp),%eax
cmp    -0x2748(%rbp),%eax
jne    146f <main+0x2ff>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27c0(%rbp)
movslq -0x2744(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27c0(%rbp),%rax
movslq -0x274c(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1516 <main+0x3a6>
mov    -0x2748(%rbp),%eax
cmp    -0x274c(%rbp),%eax
jne    14d1 <main+0x361>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27c8(%rbp)
movslq -0x2748(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27c8(%rbp),%rax
movslq -0x2744(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1511 <main+0x3a1>
mov    -0x2740(%rbp),%rax
movslq -0x2744(%rbp),%rcx
mov    -0x27a0(%rbp,%rcx,8),%rcx
ff
movslq -0x2748(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
movslq -0x274c(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1516 <main+0x3a6>
jmp    151b <main+0x3ab>
jmp    1520 <main+0x3b0>
mov    -0x274c(%rbp),%eax
mov    %eax,-0x2750(%rbp)
cmpl   $0xa,-0x2750(%rbp)
jge    1965 <main+0x7f5>
mov    -0x2744(%rbp),%eax
add    -0x2748(%rbp),%eax
add    -0x274c(%rbp),%eax
add    -0x2750(%rbp),%eax
mov    $0x9,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    194c <main+0x7dc>
cmpl   $0x0,-0x2744(%rbp)
jne    1596 <main+0x426>
cmpl   $0x0,-0x2748(%rbp)
jne    1596 <main+0x426>
cmpl   $0x0,-0x274c(%rbp)
jne    1596 <main+0x426>
cmpl   $0x0,-0x2750(%rbp)
je     194c <main+0x7dc>
mov    -0x2744(%rbp),%eax
cmp    -0x2748(%rbp),%eax
jne    160c <main+0x49c>
mov    -0x2748(%rbp),%eax
cmp    -0x274c(%rbp),%eax
jne    160c <main+0x49c>
mov    -0x274c(%rbp),%eax
cmp    -0x2750(%rbp),%eax
jne    160c <main+0x49c>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27d0(%rbp)
movslq -0x2744(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x4,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27d0(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1947 <main+0x7d7>
mov    -0x2744(%rbp),%eax
cmp    -0x2748(%rbp),%eax
jne    1680 <main+0x510>
mov    -0x2748(%rbp),%eax
cmp    -0x274c(%rbp),%eax
jne    1680 <main+0x510>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27d8(%rbp)
movslq -0x2744(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x3,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27d8(%rbp),%rax
movslq -0x2750(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1942 <main+0x7d2>
mov    -0x2748(%rbp),%eax
cmp    -0x274c(%rbp),%eax
jne    16f4 <main+0x584>
mov    -0x274c(%rbp),%eax
cmp    -0x2750(%rbp),%eax
jne    16f4 <main+0x584>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27e0(%rbp)
movslq -0x2748(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x3,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27e0(%rbp),%rax
movslq -0x2744(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    193d <main+0x7cd>
mov    -0x2744(%rbp),%eax
cmp    -0x2748(%rbp),%eax
jne    1783 <main+0x613>
mov    -0x274c(%rbp),%eax
cmp    -0x2750(%rbp),%eax
jne    1783 <main+0x613>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27e8(%rbp)
movslq -0x2744(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,-0x27f0(%rbp)
movslq -0x274c(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    -0x27f0(%rbp),%rcx
mov    %rax,%rdx
mov    -0x27e8(%rbp),%rax
imul   %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1938 <main+0x7c8>
mov    -0x2744(%rbp),%eax
cmp    -0x2748(%rbp),%eax
jne    17f5 <main+0x685>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x27f8(%rbp)
movslq -0x2744(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x27f8(%rbp),%rax
movslq -0x274c(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
movslq -0x2750(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1933 <main+0x7c3>
mov    -0x2748(%rbp),%eax
cmp    -0x274c(%rbp),%eax
jne    1867 <main+0x6f7>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x2800(%rbp)
movslq -0x2748(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x2800(%rbp),%rax
movslq -0x2744(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
movslq -0x2750(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    192e <main+0x7be>
mov    -0x274c(%rbp),%eax
cmp    -0x2750(%rbp),%eax
jne    18d9 <main+0x769>
mov    -0x2740(%rbp),%rax
mov    %rax,-0x2808(%rbp)
movslq -0x274c(%rbp),%rax
mov    -0x27a0(%rbp,%rax,8),%rdi
ff
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,%rcx
mov    -0x2808(%rbp),%rax
movslq -0x2744(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
movslq -0x2748(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    1929 <main+0x7b9>
mov    -0x2740(%rbp),%rax
movslq -0x2744(%rbp),%rcx
mov    -0x27a0(%rbp,%rcx,8),%rcx
ff
movslq -0x2748(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
movslq -0x274c(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
movslq -0x2750(%rbp),%rdx
imul   -0x27a0(%rbp,%rdx,8),%rcx
ff ff
add    %rcx,%rax
mov    %rax,-0x2740(%rbp)
jmp    192e <main+0x7be>
jmp    1933 <main+0x7c3>
jmp    1938 <main+0x7c8>
jmp    193d <main+0x7cd>
jmp    1942 <main+0x7d2>
jmp    1947 <main+0x7d7>
jmp    194c <main+0x7dc>
jmp    1951 <main+0x7e1>
mov    -0x2750(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2750(%rbp)
jmp    152c <main+0x3bc>
jmp    196a <main+0x7fa>
mov    -0x274c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x274c(%rbp)
jmp    1352 <main+0x1e2>
jmp    1983 <main+0x813>
mov    -0x2748(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2748(%rbp)
jmp    127b <main+0x10b>
jmp    199c <main+0x82c>
mov    -0x2744(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2744(%rbp)
jmp    1262 <main+0xf2>
mov    -0x2740(%rbp),%rax
mov    $0x3b9aca07,%ecx
cqto
idiv   %rcx
mov    %edx,%eax
mov    %eax,-0x27a4(%rbp)
mov    -0x27a4(%rbp),%esi
lea    0x62d(%rip),%rdi
call   1050 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11a0 <main+0x30>
xor    %eax,%eax
add    $0x2810,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x27f8,%rsp
lea    0xe88(%rip),%rdi
lea    0x2c(%rsp),%rsi
call   1080 <scanf@plt>
xor    %eax,%eax
mov    %rax,0x98(%rsp)
xor    %eax,%eax
call   1060 <getchar@plt>
cmpl   $0x0,0x2c(%rsp)
jg     11fd <main+0x9d>
xor    %eax,%eax
add    $0x27f8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xchg   %ax,%ax
mov    %rsi,%rax
movabs $0x89705f3112a28fe5,%rcx
5f 70 89
imul   %rcx
add    %rsi,%rdx
mov    %rdx,%rax
shr    $0x3f,%rax
shr    $0x1d,%rdx
add    %eax,%edx
imul   $0x3b9aca07,%edx,%eax
sub    %eax,%esi
lea    0xe24(%rip),%rdi
call   1050 <printf@plt>
mov    0x98(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x98(%rsp)
cmp    0x2c(%rsp),%eax
jge    119a <main+0x3a>
lea    0xe0(%rsp),%rbx
mov    %rbx,%rdi
call   1070 <gets@plt>
mov    %rbx,%rdi
call   1040 <strlen@plt>
xorps  %xmm0,%xmm0
movaps %xmm0,0x80(%rsp)
movaps %xmm0,0x70(%rsp)
movaps %xmm0,0x60(%rsp)
movaps %xmm0,0x50(%rsp)
movaps %xmm0,0x40(%rsp)
test   %rax,%rax
jle    1250 <main+0xf0>
cmp    $0x1,%rax
jne    1260 <main+0x100>
xor    %ecx,%ecx
jmp    129d <main+0x13d>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xor    %esi,%esi
jmp    12bb <main+0x15b>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %rax,%rdx
and    $0xfffffffffffffffe,%rdx
xor    %ecx,%ecx
nopl   0x0(%rax)
movsbq 0xe0(%rsp,%rcx,1),%rsi
addq   $0x1,-0x140(%rsp,%rsi,8)
ff 01
movsbq 0xe1(%rsp,%rcx,1),%rsi
addq   $0x1,-0x140(%rsp,%rsi,8)
ff 01
add    $0x2,%rcx
cmp    %rcx,%rdx
jne    1270 <main+0x110>
test   $0x1,%al
je     12b3 <main+0x153>
movsbq 0xe0(%rsp,%rcx,1),%rax
addq   $0x1,-0x140(%rsp,%rax,8)
ff 01
mov    0x88(%rsp),%rsi
xor    %ecx,%ecx
lea    0x40(%rsp),%rdx
mov    $0xffffffffffffffff,%rax
xor    %edi,%edi
xor    %ebp,%ebp
jmp    12f4 <main+0x194>
nop
add    $0x1,%rbp
mov    0xb8(%rsp),%rax
add    $0x1,%rax
add    $0xfffffffc,%edi
add    $0x4,%ecx
add    $0x8,%rdx
cmp    $0xa,%rbp
je     11b0 <main+0x50>
mov    %edi,0x38(%rsp)
mov    %rdx,0xc0(%rsp)
mov    %rcx,0xc8(%rsp)
mov    %rdx,0xa8(%rsp)
mov    %ecx,0x28(%rsp)
mov    %edi,0x24(%rsp)
mov    %rax,0xb8(%rsp)
mov    %rax,0xa0(%rsp)
mov    %rbp,%rax
mov    %rbp,0x30(%rsp)
jmp    1383 <main+0x223>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x8(%rsp),%rax
add    $0x1,%rax
addq   $0x1,0xa0(%rsp)
addl   $0xfffffffd,0x24(%rsp)
addl   $0x3,0x28(%rsp)
addq   $0x8,0xa8(%rsp)
cmp    $0xa,%rax
mov    0xc8(%rsp),%rcx
mov    0xc0(%rsp),%rdx
mov    0x38(%rsp),%edi
je     12d0 <main+0x170>
lea    (%rax,%rbp,1),%rdx
mov    %rax,%rcx
mov    %rdx,%rax
mov    %rdx,0xd8(%rsp)
imul   $0x38e38e39,%edx,%eax
cmp    $0x1c71c71c,%eax
mov    %rcx,0x8(%rsp)
jbe    13b0 <main+0x250>
cmp    $0x9,%rcx
ja     1340 <main+0x1e0>
jmp    13e0 <main+0x280>
nop
mov    %rbp,%rax
or     %rcx,%rax
je     13e0 <main+0x280>
mov    0x40(%rsp,%rbp,8),%rdi
cmp    %rcx,%rbp
jne    1732 <main+0x5d2>
mov    %rsi,%rbx
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rbx,%rsi
add    %rax,%rsi
mov    0x8(%rsp),%rcx
jmp    13a7 <main+0x247>
mov    %rbp,%rax
mov    0x8(%rsp),%rcx
or     %rcx,%rax
setne  0x7(%rsp)
mov    0xa8(%rsp),%rax
mov    %rax,0x18(%rsp)
mov    0x28(%rsp),%ebx
mov    0x24(%rsp),%r14d
mov    0xa0(%rsp),%r15
mov    %rcx,%r13
jmp    1446 <main+0x2e6>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x1(%r13),%rax
add    $0x1,%r15
add    $0xfffffffe,%r14d
mov    0x3c(%rsp),%ebx
add    $0x2,%ebx
addq   $0x8,0x18(%rsp)
cmp    $0x9,%r13
mov    %rax,%r13
jae    1340 <main+0x1e0>
mov    0xd8(%rsp),%rax
add    %r13d,%eax
imul   $0x38e38e39,%eax,%eax
cmp    $0x1c71c71c,%eax
ja     14f0 <main+0x390>
test   %r13,%r13
setne  %al
or     0x7(%rsp),%al
cmp    $0x1,%al
jne    14f0 <main+0x390>
mov    0x8(%rsp),%rax
cmp    %rax,%rbp
jne    149a <main+0x33a>
cmp    %r13,%rax
jne    149a <main+0x33a>
mov    0x40(%rsp,%rbp,8),%rdi
mov    %rsi,%r12
mov    $0x3,%esi
call   1030 <comb@plt>
mov    %r12,%rsi
jmp    14e9 <main+0x389>
cmp    %rax,%rbp
jne    14b6 <main+0x356>
mov    0x40(%rsp,%rbp,8),%rdi
mov    %rsi,%r12
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %r12,%rsi
jmp    14e3 <main+0x383>
cmp    %r13,%rax
jne    14d8 <main+0x378>
mov    0x40(%rsp,%rax,8),%rdi
mov    %rsi,%r12
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %r12,%rsi
imul   0x40(%rsp,%rbp,8),%rax
jmp    14e9 <main+0x389>
mov    0x40(%rsp,%rax,8),%rax
imul   0x40(%rsp,%rbp,8),%rax
imul   0x40(%rsp,%r13,8),%rax
add    %rax,%rsi
nopl   0x0(%rax)
mov    %rbp,%rax
mov    0x8(%rsp),%rcx
xor    %rcx,%rax
test   %r13,%r13
setne  %dl
or     0x7(%rsp),%dl
xor    %r13,%rcx
or     %rax,%rcx
sete   %cl
mov    %ebx,0x3c(%rsp)
xor    %r12d,%r12d
mov    %r13,0xb0(%rsp)
mov    %dl,0x6(%rsp)
mov    %cl,0x5(%rsp)
jmp    156a <main+0x40a>
mov    0x40(%rsp,%rbp,8),%rdi
mov    %rsi,%r13
mov    $0x4,%esi
call   1030 <comb@plt>
movzbl 0x5(%rsp),%ecx
movzbl 0x6(%rsp),%edx
mov    %r13,%rsi
mov    0xb0(%rsp),%r13
add    %rax,%rsi
lea    (%r15,%r12,1),%rax
add    $0x1,%rax
add    $0x1,%r12
add    $0x1,%ebx
cmp    $0x9,%rax
jae    1420 <main+0x2c0>
mov    %ebx,%eax
imul   $0x38e38e39,%rax,%rax
shr    $0x21,%rax
lea    (%rax,%rax,8),%eax
add    %r14d,%eax
cmp    %r12d,%eax
jne    1551 <main+0x3f1>
mov    %r13,%rax
add    %r12,%rax
setne  %al
or     %dl,%al
cmp    $0x1,%al
jne    1551 <main+0x3f1>
test   %r12,%r12
sete   %al
and    %cl,%al
cmp    $0x1,%al
je     1527 <main+0x3c7>
test   %cl,%cl
je     15d4 <main+0x474>
mov    0x40(%rsp,%rbp,8),%rdi
mov    %rsi,%rbp
mov    $0x3,%esi
call   1030 <comb@plt>
movzbl 0x6(%rsp),%edx
mov    %rbp,%rsi
mov    0x30(%rsp),%rbp
mov    0x18(%rsp),%rcx
imul   (%rcx,%r12,8),%rax
movzbl 0x5(%rsp),%ecx
jmp    154e <main+0x3ee>
mov    0x8(%rsp),%rax
cmp    %r13,%rax
jne    1612 <main+0x4b2>
test   %r12,%r12
jne    1612 <main+0x4b2>
mov    0x40(%rsp,%rax,8),%rdi
mov    %rsi,%rbp
mov    $0x3,%esi
call   1030 <comb@plt>
movzbl 0x5(%rsp),%ecx
movzbl 0x6(%rsp),%edx
mov    %rbp,%rsi
mov    0x30(%rsp),%rbp
imul   0x40(%rsp,%rbp,8),%rax
jmp    154e <main+0x3ee>
cmp    %rax,%rbp
jne    1664 <main+0x504>
test   %r12,%r12
jne    1664 <main+0x504>
mov    0x40(%rsp,%rbp,8),%rdi
mov    %rsi,0x10(%rsp)
mov    $0x2,%esi
call   1030 <comb@plt>
mov    %rax,0xd0(%rsp)
mov    0x40(%rsp,%r13,8),%rdi
mov    $0x2,%esi
call   1030 <comb@plt>
movzbl 0x5(%rsp),%ecx
movzbl 0x6(%rsp),%edx
mov    0x10(%rsp),%rsi
imul   0xd0(%rsp),%rax
jmp    154e <main+0x3ee>
cmp    %rax,%rbp
jne    1693 <main+0x533>
mov    0x40(%rsp,%rbp,8),%rdi
mov    %rsi,%rbp
mov    $0x2,%esi
call   1030 <comb@plt>
movzbl 0x6(%rsp),%edx
mov    %rbp,%rsi
mov    0x30(%rsp),%rbp
imul   0x40(%rsp,%r13,8),%rax
jmp    15c0 <main+0x460>
mov    %rsi,0x10(%rsp)
cmp    %r13,%rax
jne    16d3 <main+0x573>
mov    0x40(%rsp,%rax,8),%rdi
mov    $0x2,%esi
call   1030 <comb@plt>
imul   0x40(%rsp,%rbp,8),%rax
mov    0x18(%rsp),%rcx
imul   (%rcx,%r12,8),%rax
movzbl 0x5(%rsp),%ecx
mov    0x10(%rsp),%rsi
add    %rax,%rsi
movzbl 0x6(%rsp),%edx
jmp    1551 <main+0x3f1>
test   %r12,%r12
je     16f5 <main+0x595>
mov    0x40(%rsp,%rax,8),%rax
imul   0x40(%rsp,%rbp,8),%rax
imul   0x40(%rsp,%r13,8),%rax
mov    0x18(%rsp),%rcx
imul   (%rcx,%r12,8),%rax
jmp    171b <main+0x5bb>
mov    0x40(%rsp,%r13,8),%rdi
mov    $0x2,%esi
mov    %rax,%r13
call   1030 <comb@plt>
imul   0x40(%rsp,%rbp,8),%rax
imul   0x40(%rsp,%r13,8),%rax
mov    0xb0(%rsp),%r13
mov    0x10(%rsp),%rsi
add    %rax,%rsi
movzbl 0x6(%rsp),%edx
movzbl 0x5(%rsp),%ecx
jmp    1551 <main+0x3f1>
imul   0x40(%rsp,%rcx,8),%rdi
add    %rdi,%rsi
jmp    13a7 <main+0x247>

LLVM IR (-O0):
@.str = [3 x i8] c"%d\00"
@.str.1 = [4 x i8] c"%d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca [10005 x i8]
%5 = alloca i64
%6 = alloca i64
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca [10 x i64]
%12 = alloca i32
store i32 0, i32* %1
%13 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %2)
%14 = call i32 (...) @getchar()
store i32 0, i32* %3
br label %15
15: ; preds = %414, %0
%16 = load i32, i32* %3
%17 = load i32, i32* %2
%18 = icmp slt i32 %16, %17
br i1 %18, label %19, label %417
19: ; preds = %15
%20 = getelementptr inbounds [10005 x i8], [10005 x i8]* %4, i64 0, i64 0
%21 = call i32 @gets(i8* %20)
store i64 0, i64* %6
%22 = getelementptr inbounds [10005 x i8], [10005 x i8]* %4, i64 0, i64 0
%23 = call i64 @strlen(i8* %22)
store i64 %23, i64* %5
%24 = bitcast [10 x i64]* %11 to i8*
store i32 0, i32* %7
br label %25
25: ; preds = %41, %19
%26 = load i32, i32* %7
%27 = sext i32 %26 to i64
%28 = load i64, i64* %5
%29 = icmp slt i64 %27, %28
br i1 %29, label %30, label %44
30: ; preds = %25
%31 = load i32, i32* %7
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [10005 x i8], [10005 x i8]* %4, i64 0, i64 %32
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = sub nsw i32 %35, 48
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %37
%39 = load i64, i64* %38
%40 = add nsw i64 %39, 1
store i64 %40, i64* %38
br label %41
41: ; preds = %30
%42 = load i32, i32* %7
%43 = add nsw i32 %42, 1
store i32 %43, i32* %7
br label %25
44: ; preds = %25
%45 = load i64, i64* %6
%46 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 9
%47 = load i64, i64* %46
%48 = add nsw i64 %45, %47
store i64 %48, i64* %6
store i32 0, i32* %7
br label %49
49: ; preds = %405, %44
%50 = load i32, i32* %7
%51 = icmp slt i32 %50, 10
br i1 %51, label %52, label %408
52: ; preds = %49
%53 = load i32, i32* %7
store i32 %53, i32* %8
br label %54
54: ; preds = %401, %52
%55 = load i32, i32* %8
%56 = icmp slt i32 %55, 10
br i1 %56, label %57, label %404
57: ; preds = %54
%58 = load i32, i32* %7
%59 = load i32, i32* %8
%60 = add nsw i32 %58, %59
%61 = srem i32 %60, 9
%62 = icmp eq i32 %61, 0
br i1 %62, label %63, label %94
63: ; preds = %57
%64 = load i32, i32* %7
%65 = icmp ne i32 %64, 0
br i1 %65, label %69, label %66
66: ; preds = %63
%67 = load i32, i32* %8
%68 = icmp ne i32 %67, 0
br i1 %68, label %69, label %94
69: ; preds = %66, %63
%70 = load i32, i32* %7
%71 = load i32, i32* %8
%72 = icmp eq i32 %70, %71
br i1 %72, label %73, label %81
73: ; preds = %69
%74 = load i64, i64* %6
%75 = load i32, i32* %7
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %76
%78 = load i64, i64* %77
%79 = call i64 @comb(i64 %78, i32 2)
%80 = add nsw i64 %74, %79
store i64 %80, i64* %6
br label %93
81: ; preds = %69
%82 = load i64, i64* %6
%83 = load i32, i32* %7
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %84
%86 = load i64, i64* %85
%87 = load i32, i32* %8
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %88
%90 = load i64, i64* %89
%91 = mul nsw i64 %86, %90
%92 = add nsw i64 %82, %91
store i64 %92, i64* %6
br label %93
93: ; preds = %81, %73
br label %94
94: ; preds = %93, %66, %57
%95 = load i32, i32* %8
store i32 %95, i32* %9
br label %96
96: ; preds = %397, %94
%97 = load i32, i32* %9
%98 = icmp slt i32 %97, 10
br i1 %98, label %99, label %400
99: ; preds = %96
%100 = load i32, i32* %7
%101 = load i32, i32* %8
%102 = add nsw i32 %100, %101
%103 = load i32, i32* %9
%104 = add nsw i32 %102, %103
%105 = srem i32 %104, 9
%106 = icmp eq i32 %105, 0
br i1 %106, label %107, label %186
107: ; preds = %99
%108 = load i32, i32* %7
%109 = icmp ne i32 %108, 0
br i1 %109, label %116, label %110
110: ; preds = %107
%111 = load i32, i32* %8
%112 = icmp ne i32 %111, 0
br i1 %112, label %116, label %113
113: ; preds = %110
%114 = load i32, i32* %9
%115 = icmp ne i32 %114, 0
br i1 %115, label %116, label %186
116: ; preds = %113, %110, %107
%117 = load i32, i32* %7
%118 = load i32, i32* %8
%119 = icmp eq i32 %117, %118
br i1 %119, label %120, label %132
120: ; preds = %116
%121 = load i32, i32* %8
%122 = load i32, i32* %9
%123 = icmp eq i32 %121, %122
br i1 %123, label %124, label %132
124: ; preds = %120
%125 = load i64, i64* %6
%126 = load i32, i32* %7
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %127
%129 = load i64, i64* %128
%130 = call i64 @comb(i64 %129, i32 3)
%131 = add nsw i64 %125, %130
store i64 %131, i64* %6
br label %185
132: ; preds = %120, %116
%133 = load i32, i32* %7
%134 = load i32, i32* %8
%135 = icmp eq i32 %133, %134
br i1 %135, label %136, label %149
136: ; preds = %132
%137 = load i64, i64* %6
%138 = load i32, i32* %7
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %139
%141 = load i64, i64* %140
%142 = call i64 @comb(i64 %141, i32 2)
%143 = load i32, i32* %9
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %144
%146 = load i64, i64* %145
%147 = mul nsw i64 %142, %146
%148 = add nsw i64 %137, %147
store i64 %148, i64* %6
br label %184
149: ; preds = %132
%150 = load i32, i32* %8
%151 = load i32, i32* %9
%152 = icmp eq i32 %150, %151
br i1 %152, label %153, label %166
153: ; preds = %149
%154 = load i64, i64* %6
%155 = load i32, i32* %8
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %156
%158 = load i64, i64* %157
%159 = call i64 @comb(i64 %158, i32 2)
%160 = load i32, i32* %7
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %161
%163 = load i64, i64* %162
%164 = mul nsw i64 %159, %163
%165 = add nsw i64 %154, %164
store i64 %165, i64* %6
br label %183
166: ; preds = %149
%167 = load i64, i64* %6
%168 = load i32, i32* %7
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %169
%171 = load i64, i64* %170
%172 = load i32, i32* %8
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %173
%175 = load i64, i64* %174
%176 = mul nsw i64 %171, %175
%177 = load i32, i32* %9
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %178
%180 = load i64, i64* %179
%181 = mul nsw i64 %176, %180
%182 = add nsw i64 %167, %181
store i64 %182, i64* %6
br label %183
183: ; preds = %166, %153
br label %184
184: ; preds = %183, %136
br label %185
185: ; preds = %184, %124
br label %186
186: ; preds = %185, %113, %99
%187 = load i32, i32* %9
store i32 %187, i32* %10
br label %188
188: ; preds = %393, %186
%189 = load i32, i32* %10
%190 = icmp slt i32 %189, 10
br i1 %190, label %191, label %396
191: ; preds = %188
%192 = load i32, i32* %7
%193 = load i32, i32* %8
%194 = add nsw i32 %192, %193
%195 = load i32, i32* %9
%196 = add nsw i32 %194, %195
%197 = load i32, i32* %10
%198 = add nsw i32 %196, %197
%199 = srem i32 %198, 9
%200 = icmp eq i32 %199, 0
br i1 %200, label %201, label %392
201: ; preds = %191
%202 = load i32, i32* %7
%203 = icmp ne i32 %202, 0
br i1 %203, label %213, label %204
204: ; preds = %201
%205 = load i32, i32* %8
%206 = icmp ne i32 %205, 0
br i1 %206, label %213, label %207
207: ; preds = %204
%208 = load i32, i32* %9
%209 = icmp ne i32 %208, 0
br i1 %209, label %213, label %210
210: ; preds = %207
%211 = load i32, i32* %10
%212 = icmp ne i32 %211, 0
br i1 %212, label %213, label %392
213: ; preds = %210, %207, %204, %201
%214 = load i32, i32* %7
%215 = load i32, i32* %8
%216 = icmp eq i32 %214, %215
br i1 %216, label %217, label %233
217: ; preds = %213
%218 = load i32, i32* %8
%219 = load i32, i32* %9
%220 = icmp eq i32 %218, %219
br i1 %220, label %221, label %233
221: ; preds = %217
%222 = load i32, i32* %9
%223 = load i32, i32* %10
%224 = icmp eq i32 %222, %223
br i1 %224, label %225, label %233
225: ; preds = %221
%226 = load i64, i64* %6
%227 = load i32, i32* %7
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %228
%230 = load i64, i64* %229
%231 = call i64 @comb(i64 %230, i32 4)
%232 = add nsw i64 %226, %231
store i64 %232, i64* %6
br label %391
233: ; preds = %221, %217, %213
%234 = load i32, i32* %7
%235 = load i32, i32* %8
%236 = icmp eq i32 %234, %235
br i1 %236, label %237, label %254
237: ; preds = %233
%238 = load i32, i32* %8
%239 = load i32, i32* %9
%240 = icmp eq i32 %238, %239
br i1 %240, label %241, label %254
241: ; preds = %237
%242 = load i64, i64* %6
%243 = load i32, i32* %7
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %244
%246 = load i64, i64* %245
%247 = call i64 @comb(i64 %246, i32 3)
%248 = load i32, i32* %10
%249 = sext i32 %248 to i64
%250 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %249
%251 = load i64, i64* %250
%252 = mul nsw i64 %247, %251
%253 = add nsw i64 %242, %252
store i64 %253, i64* %6
br label %390
254: ; preds = %237, %233
%255 = load i32, i32* %8
%256 = load i32, i32* %9
%257 = icmp eq i32 %255, %256
br i1 %257, label %258, label %275
258: ; preds = %254
%259 = load i32, i32* %9
%260 = load i32, i32* %10
%261 = icmp eq i32 %259, %260
br i1 %261, label %262, label %275
262: ; preds = %258
%263 = load i64, i64* %6
%264 = load i32, i32* %8
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %265
%267 = load i64, i64* %266
%268 = call i64 @comb(i64 %267, i32 3)
%269 = load i32, i32* %7
%270 = sext i32 %269 to i64
%271 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %270
%272 = load i64, i64* %271
%273 = mul nsw i64 %268, %272
%274 = add nsw i64 %263, %273
store i64 %274, i64* %6
br label %389
275: ; preds = %258, %254
%276 = load i32, i32* %7
%277 = load i32, i32* %8
%278 = icmp eq i32 %276, %277
br i1 %278, label %279, label %297
279: ; preds = %275
%280 = load i32, i32* %9
%281 = load i32, i32* %10
%282 = icmp eq i32 %280, %281
br i1 %282, label %283, label %297
283: ; preds = %279
%284 = load i64, i64* %6
%285 = load i32, i32* %7
%286 = sext i32 %285 to i64
%287 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %286
%288 = load i64, i64* %287
%289 = call i64 @comb(i64 %288, i32 2)
%290 = load i32, i32* %9
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %291
%293 = load i64, i64* %292
%294 = call i64 @comb(i64 %293, i32 2)
%295 = mul nsw i64 %289, %294
%296 = add nsw i64 %284, %295
store i64 %296, i64* %6
br label %388
297: ; preds = %279, %275
%298 = load i32, i32* %7
%299 = load i32, i32* %8
%300 = icmp eq i32 %298, %299
br i1 %300, label %301, label %319
301: ; preds = %297
%302 = load i64, i64* %6
%303 = load i32, i32* %7
%304 = sext i32 %303 to i64
%305 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %304
%306 = load i64, i64* %305
%307 = call i64 @comb(i64 %306, i32 2)
%308 = load i32, i32* %9
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %309
%311 = load i64, i64* %310
%312 = mul nsw i64 %307, %311
%313 = load i32, i32* %10
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %314
%316 = load i64, i64* %315
%317 = mul nsw i64 %312, %316
%318 = add nsw i64 %302, %317
store i64 %318, i64* %6
br label %387
319: ; preds = %297
%320 = load i32, i32* %8
%321 = load i32, i32* %9
%322 = icmp eq i32 %320, %321
br i1 %322, label %323, label %341
323: ; preds = %319
%324 = load i64, i64* %6
%325 = load i32, i32* %8
%326 = sext i32 %325 to i64
%327 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %326
%328 = load i64, i64* %327
%329 = call i64 @comb(i64 %328, i32 2)
%330 = load i32, i32* %7
%331 = sext i32 %330 to i64
%332 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %331
%333 = load i64, i64* %332
%334 = mul nsw i64 %329, %333
%335 = load i32, i32* %10
%336 = sext i32 %335 to i64
%337 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %336
%338 = load i64, i64* %337
%339 = mul nsw i64 %334, %338
%340 = add nsw i64 %324, %339
store i64 %340, i64* %6
br label %386
341: ; preds = %319
%342 = load i32, i32* %9
%343 = load i32, i32* %10
%344 = icmp eq i32 %342, %343
br i1 %344, label %345, label %363
345: ; preds = %341
%346 = load i64, i64* %6
%347 = load i32, i32* %9
%348 = sext i32 %347 to i64
%349 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %348
%350 = load i64, i64* %349
%351 = call i64 @comb(i64 %350, i32 2)
%352 = load i32, i32* %7
%353 = sext i32 %352 to i64
%354 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %353
%355 = load i64, i64* %354
%356 = mul nsw i64 %351, %355
%357 = load i32, i32* %8
%358 = sext i32 %357 to i64
%359 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %358
%360 = load i64, i64* %359
%361 = mul nsw i64 %356, %360
%362 = add nsw i64 %346, %361
store i64 %362, i64* %6
br label %385
363: ; preds = %341
%364 = load i64, i64* %6
%365 = load i32, i32* %7
%366 = sext i32 %365 to i64
%367 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %366
%368 = load i64, i64* %367
%369 = load i32, i32* %8
%370 = sext i32 %369 to i64
%371 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %370
%372 = load i64, i64* %371
%373 = mul nsw i64 %368, %372
%374 = load i32, i32* %9
%375 = sext i32 %374 to i64
%376 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %375
%377 = load i64, i64* %376
%378 = mul nsw i64 %373, %377
%379 = load i32, i32* %10
%380 = sext i32 %379 to i64
%381 = getelementptr inbounds [10 x i64], [10 x i64]* %11, i64 0, i64 %380
%382 = load i64, i64* %381
%383 = mul nsw i64 %378, %382
%384 = add nsw i64 %364, %383
store i64 %384, i64* %6
br label %385
385: ; preds = %363, %345
br label %386
386: ; preds = %385, %323
br label %387
387: ; preds = %386, %301
br label %388
388: ; preds = %387, %283
br label %389
389: ; preds = %388, %262
br label %390
390: ; preds = %389, %241
br label %391
391: ; preds = %390, %225
br label %392
392: ; preds = %391, %210, %191
br label %393
393: ; preds = %392
%394 = load i32, i32* %10
%395 = add nsw i32 %394, 1
store i32 %395, i32* %10
br label %188
396: ; preds = %188
br label %397
397: ; preds = %396
%398 = load i32, i32* %9
%399 = add nsw i32 %398, 1
store i32 %399, i32* %9
br label %96
400: ; preds = %96
br label %401
401: ; preds = %400
%402 = load i32, i32* %8
%403 = add nsw i32 %402, 1
store i32 %403, i32* %8
br label %54
404: ; preds = %54
br label %405
405: ; preds = %404
%406 = load i32, i32* %7
%407 = add nsw i32 %406, 1
store i32 %407, i32* %7
br label %49
408: ; preds = %49
%409 = load i64, i64* %6
%410 = srem i64 %409, 1000000007
%411 = trunc i64 %410 to i32
store i32 %411, i32* %12
%412 = load i32, i32* %12
%413 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %412)
br label %414
414: ; preds = %408
%415 = load i32, i32* %3
%416 = add nsw i32 %415, 1
store i32 %416, i32* %3
br label %15
417: ; preds = %15
ret i32 0
}

LLVM IR (-O2):
@.str = [3 x i8] c"%d\00"
@.str.1 = [4 x i8] c"%d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [10005 x i8]
%3 = alloca [10 x i64]
%4 = bitcast i32* %1 to i8*
%5 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32* %1)
%6 = call i32 (...) @getchar()
%7 = load i32, i32* %1
%8 = icmp sgt i32 %7, 0
br i1 %8, label %9, label %243
9: ; preds = %0
%10 = getelementptr inbounds [10005 x i8], [10005 x i8]* %2, i64 0, i64 0
%11 = bitcast [10 x i64]* %3 to i8*
%12 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 9
br label %13
13: ; preds = %9, %236
%14 = phi i32 [ 0, %9 ], [ %240, %236 ]
%15 = call i32 @gets(i8* %10)
%16 = call i64 @strlen(i8* %10)
%17 = icmp sgt i64 %16, 0
br i1 %17, label %18, label %57
18: ; preds = %13
%19 = and i64 %16, 1
%20 = icmp eq i64 %16, 1
br i1 %20, label %44, label %21
21: ; preds = %18
%22 = and i64 %16, -2
br label %23
23: ; preds = %23, %21
%24 = phi i64 [ 0, %21 ], [ %41, %23 ]
%25 = phi i64 [ 0, %21 ], [ %42, %23 ]
%26 = getelementptr inbounds [10005 x i8], [10005 x i8]* %2, i64 0, i64 %24
%27 = load i8, i8* %26
%28 = sext i8 %27 to i64
%29 = add nsw i64 %28, -48
%30 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %29
%31 = load i64, i64* %30
%32 = add nsw i64 %31, 1
store i64 %32, i64* %30
%33 = or i64 %24, 1
%34 = getelementptr inbounds [10005 x i8], [10005 x i8]* %2, i64 0, i64 %33
%35 = load i8, i8* %34
%36 = sext i8 %35 to i64
%37 = add nsw i64 %36, -48
%38 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %37
%39 = load i64, i64* %38
%40 = add nsw i64 %39, 1
store i64 %40, i64* %38
%41 = add nuw nsw i64 %24, 2
%42 = add i64 %25, 2
%43 = icmp eq i64 %42, %22
br i1 %43, label %44, label %23
44: ; preds = %23, %18
%45 = phi i64 [ 0, %18 ], [ %41, %23 ]
%46 = icmp eq i64 %19, 0
br i1 %46, label %55, label %47
47: ; preds = %44
%48 = getelementptr inbounds [10005 x i8], [10005 x i8]* %2, i64 0, i64 %45
%49 = load i8, i8* %48
%50 = sext i8 %49 to i64
%51 = add nsw i64 %50, -48
%52 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %51
%53 = load i64, i64* %52
%54 = add nsw i64 %53, 1
store i64 %54, i64* %52
br label %55
55: ; preds = %44, %47
%56 = load i64, i64* %12
br label %57
57: ; preds = %55, %13
%58 = phi i64 [ 0, %13 ], [ %56, %55 ]
br label %59
59: ; preds = %57, %233
%60 = phi i64 [ %234, %233 ], [ 0, %57 ]
%61 = phi i64 [ %230, %233 ], [ %58, %57 ]
%62 = icmp ne i64 %60, 0
%63 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %60
br label %64
64: ; preds = %59, %229
%65 = phi i64 [ %60, %59 ], [ %231, %229 ]
%66 = phi i64 [ %61, %59 ], [ %230, %229 ]
%67 = add nuw nsw i64 %65, %60
%68 = trunc i64 %67 to i32
%69 = urem i32 %68, 9
%70 = icmp eq i32 %69, 0
br i1 %70, label %71, label %85
71: ; preds = %64
%72 = icmp ne i64 %65, 0
%73 = select i1 %62, i1 true, i1 %72
br i1 %73, label %74, label %88
74: ; preds = %71
%75 = icmp eq i64 %60, %65
%76 = load i64, i64* %63
br i1 %75, label %77, label %80
77: ; preds = %74
%78 = call i64 @comb(i64 %76, i32 2)
%79 = add nsw i64 %78, %66
br label %85
80: ; preds = %74
%81 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %65
%82 = load i64, i64* %81
%83 = mul nsw i64 %82, %76
%84 = add nsw i64 %83, %66
br label %85
85: ; preds = %77, %80, %64
%86 = phi i64 [ %79, %77 ], [ %84, %80 ], [ %66, %64 ]
%87 = icmp ult i64 %65, 10
br i1 %87, label %88, label %229
88: ; preds = %71, %85
%89 = phi i64 [ %86, %85 ], [ %66, %71 ]
%90 = icmp ne i64 %65, 0
%91 = select i1 %62, i1 true, i1 %90
%92 = icmp eq i64 %60, %65
%93 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %65
br label %94
94: ; preds = %88, %226
%95 = phi i64 [ %65, %88 ], [ %227, %226 ]
%96 = phi i64 [ %89, %88 ], [ %223, %226 ]
%97 = add nuw nsw i64 %95, %67
%98 = trunc i64 %97 to i32
%99 = urem i32 %98, 9
%100 = icmp eq i32 %99, 0
br i1 %100, label %101, label %134
101: ; preds = %94
%102 = icmp ne i64 %95, 0
%103 = select i1 %91, i1 true, i1 %102
br i1 %103, label %104, label %134
104: ; preds = %101
%105 = icmp eq i64 %65, %95
%106 = select i1 %92, i1 %105, i1 false
br i1 %106, label %107, label %111
107: ; preds = %104
%108 = load i64, i64* %63
%109 = call i64 @comb(i64 %108, i32 3)
%110 = add nsw i64 %109, %96
br label %134
111: ; preds = %104
br i1 %92, label %112, label %119
112: ; preds = %111
%113 = load i64, i64* %63
%114 = call i64 @comb(i64 %113, i32 2)
%115 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %95
%116 = load i64, i64* %115
%117 = mul nsw i64 %116, %114
%118 = add nsw i64 %117, %96
br label %134
119: ; preds = %111
br i1 %105, label %120, label %126
120: ; preds = %119
%121 = load i64, i64* %93
%122 = call i64 @comb(i64 %121, i32 2)
%123 = load i64, i64* %63
%124 = mul nsw i64 %123, %122
%125 = add nsw i64 %124, %96
br label %134
126: ; preds = %119
%127 = load i64, i64* %63
%128 = load i64, i64* %93
%129 = mul nsw i64 %128, %127
%130 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %95
%131 = load i64, i64* %130
%132 = mul nsw i64 %129, %131
%133 = add nsw i64 %132, %96
br label %134
134: ; preds = %94, %101, %112, %126, %120, %107
%135 = phi i64 [ %110, %107 ], [ %118, %112 ], [ %125, %120 ], [ %133, %126 ], [ %96, %101 ], [ %96, %94 ]
%136 = icmp ne i64 %95, 0
%137 = select i1 %91, i1 true, i1 %136
%138 = icmp eq i64 %65, %95
%139 = select i1 %92, i1 %138, i1 false
%140 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %95
br label %141
141: ; preds = %134, %222
%142 = phi i64 [ %95, %134 ], [ %224, %222 ]
%143 = phi i64 [ %135, %134 ], [ %223, %222 ]
%144 = add nuw nsw i64 %142, %97
%145 = trunc i64 %144 to i32
%146 = urem i32 %145, 9
%147 = icmp eq i32 %146, 0
br i1 %147, label %148, label %222
148: ; preds = %141
%149 = icmp ne i64 %142, 0
%150 = select i1 %137, i1 true, i1 %149
br i1 %150, label %151, label %222
151: ; preds = %148
%152 = icmp eq i64 %95, %142
%153 = select i1 %139, i1 %152, i1 false
br i1 %153, label %154, label %158
154: ; preds = %151
%155 = load i64, i64* %63
%156 = call i64 @comb(i64 %155, i32 4)
%157 = add nsw i64 %156, %143
br label %222
158: ; preds = %151
br i1 %139, label %159, label %166
159: ; preds = %158
%160 = load i64, i64* %63
%161 = call i64 @comb(i64 %160, i32 3)
%162 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %142
%163 = load i64, i64* %162
%164 = mul nsw i64 %163, %161
%165 = add nsw i64 %164, %143
br label %222
166: ; preds = %158
%167 = select i1 %138, i1 %152, i1 false
br i1 %167, label %168, label %174
168: ; preds = %166
%169 = load i64, i64* %93
%170 = call i64 @comb(i64 %169, i32 3)
%171 = load i64, i64* %63
%172 = mul nsw i64 %171, %170
%173 = add nsw i64 %172, %143
br label %222
174: ; preds = %166
%175 = select i1 %92, i1 %152, i1 false
br i1 %175, label %176, label %183
176: ; preds = %174
%177 = load i64, i64* %63
%178 = call i64 @comb(i64 %177, i32 2)
%179 = load i64, i64* %140
%180 = call i64 @comb(i64 %179, i32 2)
%181 = mul nsw i64 %180, %178
%182 = add nsw i64 %181, %143
br label %222
183: ; preds = %174
br i1 %92, label %184, label %193
184: ; preds = %183
%185 = load i64, i64* %63
%186 = call i64 @comb(i64 %185, i32 2)
%187 = load i64, i64* %140
%188 = mul nsw i64 %187, %186
%189 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %142
%190 = load i64, i64* %189
%191 = mul nsw i64 %188, %190
%192 = add nsw i64 %191, %143
br label %222
193: ; preds = %183
br i1 %138, label %194, label %203
194: ; preds = %193
%195 = load i64, i64* %93
%196 = call i64 @comb(i64 %195, i32 2)
%197 = load i64, i64* %63
%198 = mul nsw i64 %197, %196
%199 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %142
%200 = load i64, i64* %199
%201 = mul nsw i64 %198, %200
%202 = add nsw i64 %201, %143
br label %222
203: ; preds = %193
br i1 %152, label %204, label %212
204: ; preds = %203
%205 = load i64, i64* %140
%206 = call i64 @comb(i64 %205, i32 2)
%207 = load i64, i64* %63
%208 = mul nsw i64 %207, %206
%209 = load i64, i64* %93
%210 = mul nsw i64 %208, %209
%211 = add nsw i64 %210, %143
br label %222
212: ; preds = %203
%213 = load i64, i64* %63
%214 = load i64, i64* %93
%215 = mul nsw i64 %214, %213
%216 = load i64, i64* %140
%217 = mul nsw i64 %215, %216
%218 = getelementptr inbounds [10 x i64], [10 x i64]* %3, i64 0, i64 %142
%219 = load i64, i64* %218
%220 = mul nsw i64 %217, %219
%221 = add nsw i64 %220, %143
br label %222
222: ; preds = %141, %148, %159, %176, %194, %212, %204, %184, %168, %154
%223 = phi i64 [ %157, %154 ], [ %165, %159 ], [ %173, %168 ], [ %182, %176 ], [ %192, %184 ], [ %202, %194 ], [ %211, %204 ], [ %221, %212 ], [ %143, %148 ], [ %143, %141 ]
%224 = add nuw nsw i64 %142, 1
%225 = icmp ult i64 %142, 9
br i1 %225, label %141, label %226
226: ; preds = %222
%227 = add nuw nsw i64 %95, 1
%228 = icmp ult i64 %95, 9
br i1 %228, label %94, label %229
229: ; preds = %226, %85
%230 = phi i64 [ %86, %85 ], [ %223, %226 ]
%231 = add nuw nsw i64 %65, 1
%232 = icmp eq i64 %231, 10
br i1 %232, label %233, label %64
233: ; preds = %229
%234 = add nuw nsw i64 %60, 1
%235 = icmp eq i64 %234, 10
br i1 %235, label %236, label %59
236: ; preds = %233
%237 = srem i64 %230, 1000000007
%238 = trunc i64 %237 to i32
%239 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %238)
%240 = add nuw nsw i32 %14, 1
%241 = load i32, i32* %1
%242 = icmp slt i32 %240, %241
br i1 %242, label %13, label %243
243: ; preds = %236, %0
ret i32 0
}