int combination(int d[]) {
  int c[5];
  c[0] = d[0];
  c[1] = d[1];
  c[2] = d[2];
  c[3] = d[3];
  c[4] = d[4];
  double temp = 0;
  for (int j = 0; j < 5; j++)
    for (int i = j + 1; i < 5; i++) {
      if (c[i] == c[j])
        temp++;
    }
  if (temp == 10)
    return -1;
  for (int j = 0; j < 5; j++)
    for (int i = 0; i < 4; i++) {
      int temp2 = 0;
      if (c[i + 1] < c[i]) {
        temp2 = c[i];
        c[i] = c[i + 1];
        c[i + 1] = temp2;
      }
    }
  const int P[5] = {1, 13, 169, 169 * 13, 169 * 169};
  int k = 0;
  if ((temp == 6) || (temp == 4)) {
    if (c[4] == c[2])
      k = c[4] * P[1] + c[0];
    else
      k = c[2] * P[1] + c[4];
  }
  if (temp == 3) {
    if (c[4] == c[2])
      k = c[4] * P[2] + c[1] * P[1] + c[0];
    if (c[3] == c[1])
      k = c[3] * P[2] + c[4] * P[1] + c[0];
    if (c[2] == c[0])
      k = c[2] * P[2] + c[4] * P[1] + c[3];
  }
  if (temp == 2) {
    if (c[4] != c[3])
      k = c[3] * P[2] + c[1] * P[1] + c[4];
    if (c[0] != c[1])
      k = c[3] * P[2] + c[1] * P[1] + c[0];
    if (c[2] != c[3])
      k = c[3] * P[2] + c[1] * P[1] + c[2];
  }
  if (temp == 1) {
    if (c[4] == c[3])
      k = c[4] * P[3] + c[2] * P[2] + c[1] * P[1] + c[0];
    if (c[3] == c[2])
      k = c[3] * P[3] + c[4] * P[2] + c[1] * P[1] + c[0];
    if (c[2] == c[1])
      k = c[2] * P[3] + c[4] * P[2] + c[3] * P[1] + c[0];
    if (c[1] == c[0])
      k = c[1] * P[3] + c[4] * P[2] + c[3] * P[1] + c[2];
  }
  if (temp == 0) {
    k = c[4] * P[4] + c[3] * P[3] + c[2] * P[2] + c[1] * P[1] + c[0] * P[0];
  }
  if (temp == 6)
    temp = 7;
  if (temp == 4)
    temp = 6;
  if ((temp == 0) && (c[4] == 12) && (c[3] == 3) && (c[0] == 0)) {
    temp = 4;
    k = 1;
  }
  if ((temp == 0) && (c[4] - c[0] == 4))
    temp = 4;
  return temp * 10000000 + k;
}


x86 assembly (clang, -O0):
<combination>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    0xc(%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%eax
mov    %eax,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x5,-0x3c(%rbp)
jge    11b3 <combination+0xb3>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x5,-0x40(%rbp)
jge    11a0 <combination+0xa0>
movslq -0x40(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
movslq -0x3c(%rbp),%rcx
cmp    -0x30(%rbp,%rcx,4),%eax
jne    118d <combination+0x8d>
movsd  0xea5(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    1192 <combination+0x92>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    115b <combination+0x5b>
jmp    11a5 <combination+0xa5>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1148 <combination+0x48>
movsd  -0x38(%rbp),%xmm0
movsd  0xe40(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11dc <combination+0xdc>
jp     11dc <combination+0xdc>
movl   $0xffffffff,-0x4(%rbp)
jmp    161f <combination+0x51f>
movl   $0x0,-0x44(%rbp)
cmpl   $0x5,-0x44(%rbp)
jge    1273 <combination+0x173>
movl   $0x0,-0x48(%rbp)
cmpl   $0x4,-0x48(%rbp)
jge    1260 <combination+0x160>
movl   $0x0,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
cltq
mov    -0x30(%rbp,%rax,4),%eax
movslq -0x48(%rbp),%rcx
cmp    -0x30(%rbp,%rcx,4),%eax
jge    124d <combination+0x14d>
movslq -0x48(%rbp),%rax
mov    -0x30(%rbp,%rax,4),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
cltq
mov    -0x30(%rbp,%rax,4),%ecx
movslq -0x48(%rbp),%rax
mov    %ecx,-0x30(%rbp,%rax,4)
mov    -0x4c(%rbp),%ecx
mov    -0x48(%rbp),%eax
add    $0x1,%eax
cltq
mov    %ecx,-0x30(%rbp,%rax,4)
jmp    1252 <combination+0x152>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    11f4 <combination+0xf4>
jmp    1265 <combination+0x165>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    11e3 <combination+0xe3>
mov    0xdc6(%rip),%rax
mov    %rax,-0x60(%rbp)
mov    0xdc3(%rip),%rax
mov    %rax,-0x58(%rbp)
mov    0xdc1(%rip),%eax
mov    %eax,-0x50(%rbp)
movl   $0x0,-0x64(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xd62(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12bb <combination+0x1bb>
jp     12bb <combination+0x1bb>
jmp    12d8 <combination+0x1d8>
movsd  -0x38(%rbp),%xmm0
movsd  0xd48(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1308 <combination+0x208>
jp     1308 <combination+0x208>
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jne    12f6 <combination+0x1f6>
mov    -0x20(%rbp),%eax
imul   -0x5c(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    1303 <combination+0x203>
mov    -0x28(%rbp),%eax
imul   -0x5c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    1308 <combination+0x208>
movsd  -0x38(%rbp),%xmm0
movsd  0xd03(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1390 <combination+0x290>
jp     1390 <combination+0x290>
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jne    1347 <combination+0x247>
mov    -0x20(%rbp),%eax
imul   -0x58(%rbp),%eax
mov    -0x2c(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jne    1369 <combination+0x269>
mov    -0x24(%rbp),%eax
imul   -0x58(%rbp),%eax
mov    -0x20(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    138b <combination+0x28b>
mov    -0x28(%rbp),%eax
imul   -0x58(%rbp),%eax
mov    -0x20(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    1390 <combination+0x290>
movsd  -0x38(%rbp),%xmm0
movsd  0xc83(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1418 <combination+0x318>
jp     1418 <combination+0x318>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     13cf <combination+0x2cf>
mov    -0x24(%rbp),%eax
imul   -0x58(%rbp),%eax
mov    -0x2c(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x2c(%rbp),%eax
je     13f1 <combination+0x2f1>
mov    -0x24(%rbp),%eax
imul   -0x58(%rbp),%eax
mov    -0x2c(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1413 <combination+0x313>
mov    -0x24(%rbp),%eax
imul   -0x58(%rbp),%eax
mov    -0x2c(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    1418 <combination+0x318>
movsd  -0x38(%rbp),%xmm0
movsd  0xc03(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    14e6 <combination+0x3e6>
jp     14e6 <combination+0x3e6>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
jne    1460 <combination+0x360>
mov    -0x20(%rbp),%eax
imul   -0x54(%rbp),%eax
mov    -0x28(%rbp),%ecx
imul   -0x58(%rbp),%ecx
add    %ecx,%eax
mov    -0x2c(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jne    148b <combination+0x38b>
mov    -0x24(%rbp),%eax
imul   -0x54(%rbp),%eax
mov    -0x20(%rbp),%ecx
imul   -0x58(%rbp),%ecx
add    %ecx,%eax
mov    -0x2c(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jne    14b6 <combination+0x3b6>
mov    -0x28(%rbp),%eax
imul   -0x54(%rbp),%eax
mov    -0x20(%rbp),%ecx
imul   -0x58(%rbp),%ecx
add    %ecx,%eax
mov    -0x24(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    14e1 <combination+0x3e1>
mov    -0x2c(%rbp),%eax
imul   -0x54(%rbp),%eax
mov    -0x20(%rbp),%ecx
imul   -0x58(%rbp),%ecx
add    %ecx,%eax
mov    -0x24(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    14e6 <combination+0x3e6>
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    152c <combination+0x42c>
jp     152c <combination+0x42c>
mov    -0x20(%rbp),%eax
imul   -0x50(%rbp),%eax
mov    -0x24(%rbp),%ecx
imul   -0x54(%rbp),%ecx
add    %ecx,%eax
mov    -0x28(%rbp),%ecx
imul   -0x58(%rbp),%ecx
add    %ecx,%eax
mov    -0x2c(%rbp),%ecx
imul   -0x5c(%rbp),%ecx
add    %ecx,%eax
mov    -0x30(%rbp),%ecx
imul   -0x60(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x64(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xacf(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1556 <combination+0x456>
jp     1556 <combination+0x456>
movsd  0xadf(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xaad(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1580 <combination+0x480>
jp     1580 <combination+0x480>
movsd  0xa8d(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15ca <combination+0x4ca>
jp     15ca <combination+0x4ca>
cmpl   $0xc,-0x20(%rbp)
jne    15ca <combination+0x4ca>
cmpl   $0x3,-0x24(%rbp)
jne    15ca <combination+0x4ca>
cmpl   $0x0,-0x30(%rbp)
jne    15ca <combination+0x4ca>
movsd  0xa52(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x1,-0x64(%rbp)
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15fe <combination+0x4fe>
jp     15fe <combination+0x4fe>
mov    -0x20(%rbp),%eax
sub    -0x30(%rbp),%eax
cmp    $0x4,%eax
jne    15fe <combination+0x4fe>
movsd  0xa17(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x64(%rbp),%xmm1
movsd  0xa28(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<combination>:
mov    (%rdi),%r9d
mov    0x4(%rdi),%ecx
mov    0x8(%rdi),%r8d
movsd  0xeee(%rip),%xmm1
movapd %xmm1,%xmm0
cmp    %r9d,%ecx
je     111f <combination+0x1f>
xorpd  %xmm0,%xmm0
mov    0xc(%rdi),%r10d
cmp    %r9d,%r8d
jne    112c <combination+0x2c>
addsd  %xmm1,%xmm0
mov    0x10(%rdi),%edx
cmp    %r9d,%r10d
je     116c <combination+0x6c>
cmp    %r9d,%edx
je     1175 <combination+0x75>
cmp    %ecx,%r8d
je     117e <combination+0x7e>
cmp    %ecx,%r10d
je     1187 <combination+0x87>
cmp    %ecx,%edx
je     118f <combination+0x8f>
cmp    %r8d,%r10d
je     1198 <combination+0x98>
cmp    %r8d,%edx
je     11a1 <combination+0xa1>
cmp    %r10d,%edx
jne    115a <combination+0x5a>
addsd  %xmm1,%xmm0
mov    $0xffffffff,%eax
ucomisd 0xea1(%rip),%xmm0
jne    11ac <combination+0xac>
jp     11ac <combination+0xac>
ret
addsd  %xmm1,%xmm0
cmp    %r9d,%edx
jne    1139 <combination+0x39>
addsd  %xmm1,%xmm0
cmp    %ecx,%r8d
jne    113e <combination+0x3e>
addsd  %xmm1,%xmm0
cmp    %ecx,%r10d
jne    1143 <combination+0x43>
addsd  %xmm1,%xmm0
cmp    %ecx,%edx
jne    1147 <combination+0x47>
addsd  %xmm1,%xmm0
cmp    %r8d,%r10d
jne    114c <combination+0x4c>
addsd  %xmm1,%xmm0
cmp    %r8d,%edx
jne    1151 <combination+0x51>
addsd  %xmm1,%xmm0
cmp    %r10d,%edx
je     1156 <combination+0x56>
jmp    115a <combination+0x5a>
cmp    %r9d,%ecx
mov    %r9d,%esi
cmovl  %ecx,%esi
cmovl  %r9d,%ecx
cmp    %ecx,%r8d
mov    %ecx,%eax
cmovl  %r8d,%eax
cmovge %r8d,%ecx
cmp    %ecx,%r10d
mov    %ecx,%edi
cmovl  %r10d,%edi
cmovge %r10d,%ecx
cmp    %ecx,%edx
mov    %edx,%r8d
cmovl  %ecx,%r8d
cmovl  %edx,%ecx
cmp    %esi,%eax
mov    %esi,%r9d
cmovl  %eax,%r9d
cmovl  %esi,%eax
cmp    %eax,%edi
mov    %eax,%edx
cmovl  %edi,%edx
cmovge %edi,%eax
cmp    %eax,%ecx
mov    %eax,%esi
cmovl  %ecx,%esi
cmovge %ecx,%eax
cmp    %eax,%r8d
mov    %r8d,%edi
cmovl  %eax,%edi
cmovl  %r8d,%eax
cmp    %r9d,%edx
mov    %r9d,%r8d
cmovl  %edx,%r8d
cmovl  %r9d,%edx
cmp    %edx,%esi
mov    %edx,%ecx
cmovl  %esi,%ecx
cmovge %esi,%edx
cmp    %edx,%eax
mov    %edx,%esi
cmovl  %eax,%esi
cmovge %eax,%edx
cmp    %edx,%edi
mov    %edi,%eax
cmovl  %edx,%eax
cmovl  %edi,%edx
cmp    %r8d,%ecx
mov    %r8d,%edi
cmovl  %ecx,%edi
cmovl  %r8d,%ecx
cmp    %ecx,%esi
mov    %ecx,%r11d
cmovl  %esi,%r11d
cmovge %esi,%ecx
cmp    %ecx,%edx
mov    %ecx,%esi
cmovl  %edx,%esi
cmovge %edx,%ecx
cmp    %ecx,%eax
mov    %eax,%edx
cmovl  %ecx,%edx
cmovl  %eax,%ecx
cmp    %edi,%r11d
mov    %edi,%r9d
cmovl  %r11d,%r9d
cmovl  %edi,%r11d
cmp    %r11d,%esi
mov    %r11d,%edi
cmovl  %esi,%edi
cmovge %esi,%r11d
cmp    %r11d,%ecx
mov    %r11d,%r10d
cmovl  %ecx,%r10d
cmovge %ecx,%r11d
cmp    %r11d,%edx
mov    %r11d,%r8d
cmovl  %edx,%r8d
cmovge %edx,%r11d
ucomisd 0xd6c(%rip),%xmm0
jne    12a8 <combination+0x1a8>
jnp    12b6 <combination+0x1b6>
xor    %edx,%edx
ucomisd 0xd66(%rip),%xmm0
jne    12cb <combination+0x1cb>
jp     12cb <combination+0x1cb>
lea    (%r10,%r10,2),%eax
lea    (%r10,%rax,4),%edx
cmp    %r10d,%r11d
jne    12c8 <combination+0x1c8>
add    %r9d,%edx
jmp    12cb <combination+0x1cb>
add    %r11d,%edx
ucomisd 0xd4d(%rip),%xmm0
jne    1321 <combination+0x221>
jp     1321 <combination+0x221>
imul   $0xa9,%r10d,%eax
lea    (%rdi,%rdi,2),%ecx
lea    (%rdi,%rcx,4),%ecx
add    %eax,%ecx
add    %r9d,%ecx
cmp    %r10d,%r11d
cmove  %ecx,%edx
imul   $0xa9,%edi,%eax
lea    (%r11,%r11,2),%ecx
lea    (%r11,%rcx,4),%ecx
add    %eax,%ecx
add    %r9d,%ecx
cmp    %edi,%r8d
cmove  %ecx,%edx
cmp    %r9d,%r10d
jne    1321 <combination+0x221>
imul   $0xa9,%r9d,%eax
lea    (%r11,%r11,2),%ecx
lea    (%r11,%rcx,4),%edx
add    %eax,%edx
add    %r8d,%edx
ucomisd 0xcff(%rip),%xmm0
jne    135e <combination+0x25e>
jp     135e <combination+0x25e>
imul   $0xa9,%r8d,%ecx
lea    (%rdi,%rdi,2),%eax
lea    (%rdi,%rax,4),%eax
lea    (%rcx,%r11,1),%esi
add    %eax,%esi
cmp    %r8d,%r11d
cmove  %edx,%esi
lea    (%r9,%rcx,1),%edx
add    %eax,%edx
cmp    %edi,%r9d
cmove  %esi,%edx
cmp    %r8d,%r10d
je     135e <combination+0x25e>
add    %ecx,%eax
add    %r10d,%eax
mov    %eax,%edx
ucomisd 0xc9a(%rip),%xmm0
jne    13a7 <combination+0x2a7>
jp     13a7 <combination+0x2a7>
cmp    %r8d,%r11d
je     1497 <combination+0x397>
cmp    %r10d,%r8d
je     14bb <combination+0x3bb>
cmp    %edi,%r10d
je     14df <combination+0x3df>
cmp    %r9d,%edi
jne    13a7 <combination+0x2a7>
imul   $0x895,%r9d,%eax
imul   $0xa9,%r11d,%ecx
lea    (%r8,%r8,2),%edx
lea    (%r8,%rdx,4),%edx
add    %ecx,%edx
add    %r10d,%edx
add    %eax,%edx
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13d7 <combination+0x2d7>
jp     13d7 <combination+0x2d7>
imul   $0x6f91,%r11d,%eax
imul   $0x895,%r8d,%ecx
add    %eax,%ecx
imul   $0xa9,%r10d,%eax
add    %ecx,%eax
lea    (%rdi,%rdi,2),%ecx
lea    (%rdi,%rcx,4),%edx
add    %eax,%edx
add    %r9d,%edx
movsd  0xc31(%rip),%xmm3
movapd %xmm0,%xmm4
cmpeqsd %xmm3,%xmm4
movsd  0xc40(%rip),%xmm2
andpd  %xmm4,%xmm2
andnpd %xmm0,%xmm4
orpd   %xmm2,%xmm4
movsd  0xc14(%rip),%xmm0
movapd %xmm4,%xmm2
cmpeqsd %xmm0,%xmm2
movapd %xmm2,%xmm5
andnpd %xmm4,%xmm5
andpd  %xmm3,%xmm2
orpd   %xmm5,%xmm2
ucomisd %xmm1,%xmm2
setnp  %al
sete   %cl
and    %al,%cl
cmp    $0xc,%r11d
sete   %sil
cmp    $0x3,%r8d
sete   %al
and    %sil,%al
and    %cl,%al
test   %r9d,%r9d
sete   %cl
sub    %r9d,%r11d
movapd %xmm0,%xmm3
test   %cl,%al
jne    1452 <combination+0x352>
movapd %xmm2,%xmm3
jne    1463 <combination+0x363>
xorps  %xmm2,%xmm2
cvtsi2sd %edx,%xmm2
cmp    $0x4,%r11d
jne    1471 <combination+0x371>
jmp    1475 <combination+0x375>
movsd  0xb95(%rip),%xmm2
cmp    $0x4,%r11d
je     1475 <combination+0x375>
movapd %xmm3,%xmm0
cmpeqsd %xmm3,%xmm1
andpd  %xmm1,%xmm0
andnpd %xmm3,%xmm1
orpd   %xmm0,%xmm1
mulsd  0xbaa(%rip),%xmm1
addsd  %xmm2,%xmm1
cvttsd2si %xmm1,%eax
ret
imul   $0x895,%r8d,%eax
imul   $0xa9,%r10d,%ecx
add    %eax,%ecx
lea    (%rdi,%rdi,2),%eax
lea    (%rdi,%rax,4),%edx
add    %ecx,%edx
add    %r9d,%edx
cmp    %r10d,%r8d
jne    137c <combination+0x27c>
imul   $0x895,%r10d,%eax
imul   $0xa9,%r11d,%ecx
add    %eax,%ecx
lea    (%rdi,%rdi,2),%eax
lea    (%rdi,%rax,4),%edx
add    %ecx,%edx
add    %r9d,%edx
cmp    %edi,%r10d
jne    1385 <combination+0x285>
imul   $0x895,%edi,%eax
imul   $0xa9,%r11d,%ecx
lea    (%r8,%r8,2),%edx
lea    (%r8,%rdx,4),%edx
add    %ecx,%edx
add    %eax,%edx
add    %r9d,%edx
cmp    %r9d,%edi
je     138a <combination+0x28a>
jmp    13a7 <combination+0x2a7>

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

LLVM IR (-O2):
define i32 @combination(i32* nocapture %0) {
%2 = load i32, i32* %0
%3 = getelementptr inbounds i32, i32* %0, i64 1
%4 = load i32, i32* %3
%5 = getelementptr inbounds i32, i32* %0, i64 2
%6 = load i32, i32* %5
%7 = getelementptr inbounds i32, i32* %0, i64 3
%8 = load i32, i32* %7
%9 = getelementptr inbounds i32, i32* %0, i64 4
%10 = load i32, i32* %9
%11 = icmp eq i32 %4, %2
%12 = select i1 %11, double 1.000000e+00, double 0.000000e+00
%13 = icmp eq i32 %6, %2
%14 = fadd double %12, 1.000000e+00
%15 = select i1 %13, double %14, double %12
%16 = icmp eq i32 %8, %2
%17 = fadd double %15, 1.000000e+00
%18 = select i1 %16, double %17, double %15
%19 = icmp eq i32 %10, %2
%20 = fadd double %18, 1.000000e+00
%21 = select i1 %19, double %20, double %18
%22 = icmp eq i32 %6, %4
%23 = fadd double %21, 1.000000e+00
%24 = select i1 %22, double %23, double %21
%25 = icmp eq i32 %8, %4
%26 = fadd double %24, 1.000000e+00
%27 = select i1 %25, double %26, double %24
%28 = icmp eq i32 %10, %4
%29 = fadd double %27, 1.000000e+00
%30 = select i1 %28, double %29, double %27
%31 = icmp eq i32 %8, %6
%32 = fadd double %30, 1.000000e+00
%33 = select i1 %31, double %32, double %30
%34 = icmp eq i32 %10, %6
%35 = fadd double %33, 1.000000e+00
%36 = select i1 %34, double %35, double %33
%37 = icmp eq i32 %10, %8
%38 = fadd double %36, 1.000000e+00
%39 = select i1 %37, double %38, double %36
%40 = fcmp oeq double %39, 1.000000e+01
br i1 %40, label %228, label %41
41: ; preds = %1
%42 = icmp slt i32 %4, %2
%43 = select i1 %42, i32 %4, i32 %2
%44 = select i1 %42, i32 %2, i32 %4
%45 = icmp slt i32 %6, %44
%46 = select i1 %45, i32 %6, i32 %44
%47 = select i1 %45, i32 %44, i32 %6
%48 = icmp slt i32 %8, %47
%49 = select i1 %48, i32 %8, i32 %47
%50 = select i1 %48, i32 %47, i32 %8
%51 = icmp slt i32 %10, %50
%52 = select i1 %51, i32 %50, i32 %10
%53 = select i1 %51, i32 %10, i32 %50
%54 = icmp slt i32 %46, %43
%55 = select i1 %54, i32 %46, i32 %43
%56 = select i1 %54, i32 %43, i32 %46
%57 = icmp slt i32 %49, %56
%58 = select i1 %57, i32 %49, i32 %56
%59 = select i1 %57, i32 %56, i32 %49
%60 = icmp slt i32 %53, %59
%61 = select i1 %60, i32 %53, i32 %59
%62 = select i1 %60, i32 %59, i32 %53
%63 = icmp slt i32 %52, %62
%64 = select i1 %63, i32 %62, i32 %52
%65 = select i1 %63, i32 %52, i32 %62
%66 = icmp slt i32 %58, %55
%67 = select i1 %66, i32 %58, i32 %55
%68 = select i1 %66, i32 %55, i32 %58
%69 = icmp slt i32 %61, %68
%70 = select i1 %69, i32 %61, i32 %68
%71 = select i1 %69, i32 %68, i32 %61
%72 = icmp slt i32 %65, %71
%73 = select i1 %72, i32 %65, i32 %71
%74 = select i1 %72, i32 %71, i32 %65
%75 = icmp slt i32 %64, %74
%76 = select i1 %75, i32 %74, i32 %64
%77 = select i1 %75, i32 %64, i32 %74
%78 = icmp slt i32 %70, %67
%79 = select i1 %78, i32 %70, i32 %67
%80 = select i1 %78, i32 %67, i32 %70
%81 = icmp slt i32 %73, %80
%82 = select i1 %81, i32 %73, i32 %80
%83 = select i1 %81, i32 %80, i32 %73
%84 = icmp slt i32 %77, %83
%85 = select i1 %84, i32 %77, i32 %83
%86 = select i1 %84, i32 %83, i32 %77
%87 = icmp slt i32 %76, %86
%88 = select i1 %87, i32 %86, i32 %76
%89 = select i1 %87, i32 %76, i32 %86
%90 = icmp slt i32 %82, %79
%91 = select i1 %90, i32 %82, i32 %79
%92 = select i1 %90, i32 %79, i32 %82
%93 = icmp slt i32 %85, %92
%94 = select i1 %93, i32 %85, i32 %92
%95 = select i1 %93, i32 %92, i32 %85
%96 = icmp slt i32 %89, %95
%97 = select i1 %96, i32 %89, i32 %95
%98 = select i1 %96, i32 %95, i32 %89
%99 = icmp slt i32 %88, %98
%100 = select i1 %99, i32 %88, i32 %98
%101 = select i1 %99, i32 %98, i32 %88
%102 = fcmp oeq double %39, 6.000000e+00
%103 = fcmp oeq double %39, 4.000000e+00
%104 = or i1 %102, %103
br i1 %104, label %105, label %112
105: ; preds = %41
%106 = icmp eq i32 %101, %97
%107 = mul nsw i32 %97, 13
br i1 %106, label %108, label %110
108: ; preds = %105
%109 = add nsw i32 %91, %107
br label %112
110: ; preds = %105
%111 = add nsw i32 %107, %101
br label %112
112: ; preds = %108, %110, %41
%113 = phi i32 [ %109, %108 ], [ %111, %110 ], [ 0, %41 ]
%114 = fcmp oeq double %39, 3.000000e+00
br i1 %114, label %115, label %134
115: ; preds = %112
%116 = icmp eq i32 %101, %97
%117 = mul nsw i32 %97, 169
%118 = mul nsw i32 %94, 13
%119 = add nsw i32 %118, %117
%120 = add nsw i32 %119, %91
%121 = select i1 %116, i32 %120, i32 %113
%122 = icmp eq i32 %100, %94
%123 = mul nsw i32 %94, 169
%124 = mul nsw i32 %101, 13
%125 = add nsw i32 %123, %124
%126 = add nsw i32 %125, %91
%127 = select i1 %122, i32 %126, i32 %121
%128 = icmp eq i32 %97, %91
br i1 %128, label %129, label %134
129: ; preds = %115
%130 = mul nsw i32 %91, 169
%131 = mul nsw i32 %101, 13
%132 = add nsw i32 %130, %131
%133 = add nsw i32 %132, %100
br label %134
134: ; preds = %115, %129, %112
%135 = phi i32 [ %133, %129 ], [ %127, %115 ], [ %113, %112 ]
%136 = fcmp oeq double %39, 2.000000e+00
br i1 %136, label %137, label %152
137: ; preds = %134
%138 = icmp eq i32 %101, %100
%139 = mul nsw i32 %100, 169
%140 = mul nsw i32 %94, 13
%141 = add i32 %139, %101
%142 = add i32 %141, %140
%143 = select i1 %138, i32 %135, i32 %142
%144 = icmp eq i32 %91, %94
%145 = add i32 %91, %139
%146 = add i32 %145, %140
%147 = select i1 %144, i32 %143, i32 %146
%148 = icmp eq i32 %97, %100
br i1 %148, label %152, label %149
149: ; preds = %137
%150 = add nsw i32 %140, %139
%151 = add nsw i32 %150, %97
br label %152
152: ; preds = %137, %149, %134
%153 = phi i32 [ %151, %149 ], [ %147, %137 ], [ %135, %134 ]
%154 = fcmp oeq double %39, 1.000000e+00
br i1 %154, label %155, label %194
155: ; preds = %152
%156 = icmp eq i32 %101, %100
br i1 %156, label %157, label %164
157: ; preds = %155
%158 = mul nsw i32 %100, 2197
%159 = mul nsw i32 %97, 169
%160 = add nsw i32 %159, %158
%161 = mul nsw i32 %94, 13
%162 = add nsw i32 %160, %161
%163 = add nsw i32 %162, %91
br label %164
164: ; preds = %157, %155
%165 = phi i32 [ %163, %157 ], [ %153, %155 ]
%166 = icmp eq i32 %100, %97
br i1 %166, label %167, label %174
167: ; preds = %164
%168 = mul nsw i32 %97, 2197
%169 = mul nsw i32 %101, 169
%170 = add nsw i32 %168, %169
%171 = mul nsw i32 %94, 13
%172 = add nsw i32 %170, %171
%173 = add nsw i32 %172, %91
br label %174
174: ; preds = %167, %164
%175 = phi i32 [ %173, %167 ], [ %165, %164 ]
%176 = icmp eq i32 %97, %94
br i1 %176, label %177, label %184
177: ; preds = %174
%178 = mul nsw i32 %94, 2197
%179 = mul nsw i32 %101, 169
%180 = mul nsw i32 %100, 13
%181 = add i32 %180, %179
%182 = add i32 %181, %178
%183 = add i32 %182, %91
br label %184
184: ; preds = %177, %174
%185 = phi i32 [ %183, %177 ], [ %175, %174 ]
%186 = icmp eq i32 %94, %91
br i1 %186, label %187, label %194
187: ; preds = %184
%188 = mul nsw i32 %91, 2197
%189 = mul nsw i32 %101, 169
%190 = mul nsw i32 %100, 13
%191 = add i32 %190, %189
%192 = add i32 %191, %97
%193 = add i32 %192, %188
br label %194
194: ; preds = %184, %187, %152
%195 = phi i32 [ %193, %187 ], [ %185, %184 ], [ %153, %152 ]
%196 = fcmp oeq double %39, 0.000000e+00
br i1 %196, label %197, label %206
197: ; preds = %194
%198 = mul nsw i32 %101, 28561
%199 = mul nsw i32 %100, 2197
%200 = add nsw i32 %199, %198
%201 = mul nsw i32 %97, 169
%202 = add nsw i32 %200, %201
%203 = mul nsw i32 %94, 13
%204 = add nsw i32 %202, %203
%205 = add nsw i32 %204, %91
br label %206
206: ; preds = %197, %194
%207 = phi i32 [ %205, %197 ], [ %195, %194 ]
%208 = select i1 %102, double 7.000000e+00, double %39
%209 = fcmp oeq double %208, 4.000000e+00
%210 = select i1 %209, double 6.000000e+00, double %208
%211 = fcmp oeq double %210, 0.000000e+00
%212 = icmp eq i32 %101, 12
%213 = select i1 %211, i1 %212, i1 false
%214 = icmp eq i32 %100, 3
%215 = select i1 %213, i1 %214, i1 false
%216 = icmp eq i32 %91, 0
%217 = select i1 %215, i1 %216, i1 false
%218 = select i1 %217, double 4.000000e+00, double %210
%219 = fcmp oeq double %218, 0.000000e+00
%220 = sub nsw i32 %101, %91
%221 = icmp eq i32 %220, 4
%222 = select i1 %219, i1 %221, i1 false
%223 = select i1 %222, double 4.000000e+00, double %218
%224 = sitofp i32 %207 to double
%225 = select i1 %217, double 1.000000e+00, double %224
%226 = tail call double @llvm.fmuladd.f64(double %223, double 1.000000e+07, double %225)
%227 = fptosi double %226 to i32
br label %228
228: ; preds = %1, %206
%229 = phi i32 [ %227, %206 ], [ -1, %1 ]
ret i32 %229
}