Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<inttypes.h>
#include<string.h>
#include<math.h>

typedef int32_t i32;
typedef int64_t i64;

const i32 mod = 1000000007;

i32 inv (i32 a) {
  i32 t = 1;
  while (a > 1) {
    t = (i64) t * (mod - mod / a) % mod;
    a = mod % a;
  }
  return t;
}

i32 modPow(i32 r, i32 n) {
  i32 t = 1;
  i32 s = r;
  while (n > 0) {
    if (n&1) t = (i64) t * s % mod;
    s = (i64) s * s % mod;
    n >>= 1;
  }
  return t;
}

i32 *fact = NULL;
i32 *iFact = NULL;
void init(const i32 n) {
  fact = (i32 *) calloc (n + 1, sizeof (i32));
  fact[0] = 1;
  for (i32 i = 1; i <= n; ++i) {
    fact[i] = (i64) i * fact[i - 1] % mod;
  }
  iFact = (i32 *) calloc (n + 1, sizeof (i32));
  iFact[n] = inv(fact[n]);
  for (i32 i = n - 1; i >= 0; --i) {
    iFact[i] = (i64) iFact[i + 1] * (i + 1) % mod;
  }
}

i32 comb (i32 n, i32 k) {
  if (!(0 <= k && k <= n)) return 0;
  return (i64) fact[n] * iFact[k] % mod * iFact[n - k] % mod;
}

void run (void) {
  i32 b, w;
  scanf ("%" SCNi32 "%" SCNi32, &b, &w);
  init(b + w);
  i32 l = 0;
  i32 r = 0;
  const i32 p = inv(2);
  for (i32 i = 1; i <= b + w; ++i) {
    printf ("%" PRIi64 "\n", (((i64)2 * mod + 1 - r - l) * p + l) % mod);
    if (i >= w) {
      l = (l + (i64)comb (i - 1, w - 1) * modPow (p, i)) % mod;
    }
    if (i >= b) {
      r = (r + (i64)comb (i - 1, b - 1) * modPow (p, i)) % mod;
    }
  }
}

int main (void) {
  run ();
  return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	mod
	.section	.rodata
	.align 4
	.type	mod, @object
	.size	mod, 4
mod:
	.long	1000000007
	.text
	.globl	inv
	.type	inv, @function
inv:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -20(%rbp)
	movl	$1, -4(%rbp)
	jmp	.L2
.L3:
	movl	-4(%rbp), %eax
	movslq	%eax, %rcx
	movl	$1000000007, %esi
	movl	$1000000007, %eax
	cltd
	idivl	-20(%rbp)
	movl	%eax, %edx
	movl	%esi, %eax
	subl	%edx, %eax
	cltq
	imulq	%rcx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -4(%rbp)
	movl	$1000000007, %eax
	cltd
	idivl	-20(%rbp)
	movl	%edx, -20(%rbp)
.L2:
	cmpl	$1, -20(%rbp)
	jg	.L3
	movl	-4(%rbp), %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	inv, .-inv
	.globl	modPow
	.type	modPow, @function
modPow:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -20(%rbp)
	movl	%esi, -24(%rbp)
	movl	$1, -8(%rbp)
	movl	-20(%rbp), %eax
	movl	%eax, -4(%rbp)
	jmp	.L6
.L8:
	movl	-24(%rbp), %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L7
	movl	-8(%rbp), %eax
	movslq	%eax, %rdx
	movl	-4(%rbp), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -8(%rbp)
.L7:
	movl	-4(%rbp), %eax
	movslq	%eax, %rdx
	movl	-4(%rbp), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -4(%rbp)
	sarl	-24(%rbp)
.L6:
	cmpl	$0, -24(%rbp)
	jg	.L8
	movl	-8(%rbp), %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	modPow, .-modPow
	.globl	fact
	.bss
	.align 8
	.type	fact, @object
	.size	fact, 8
fact:
	.zero	8
	.globl	iFact
	.align 8
	.type	iFact, @object
	.size	iFact, 8
iFact:
	.zero	8
	.text
	.globl	init
	.type	init, @function
init:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	pushq	%rbx
	subq	$40, %rsp
	.cfi_offset 3, -24
	movl	%edi, -36(%rbp)
	movl	-36(%rbp), %eax
	addl	$1, %eax
	cltq
	movl	$4, %esi
	movq	%rax, %rdi
	call	calloc@PLT
	movq	%rax, fact(%rip)
	movq	fact(%rip), %rax
	movl	$1, (%rax)
	movl	$1, -24(%rbp)
	jmp	.L11
.L12:
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movq	fact(%rip), %rcx
	movl	-24(%rbp), %eax
	cltq
	salq	$2, %rax
	subq	$4, %rax
	addq	%rcx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	fact(%rip), %rdx
	movl	-24(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	%ecx, %edx
	movl	%edx, (%rax)
	addl	$1, -24(%rbp)
.L11:
	movl	-24(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jle	.L12
	movl	-36(%rbp), %eax
	addl	$1, %eax
	cltq
	movl	$4, %esi
	movq	%rax, %rdi
	call	calloc@PLT
	movq	%rax, iFact(%rip)
	movq	fact(%rip), %rdx
	movl	-36(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movq	iFact(%rip), %rcx
	movl	-36(%rbp), %edx
	movslq	%edx, %rdx
	salq	$2, %rdx
	leaq	(%rcx,%rdx), %rbx
	movl	%eax, %edi
	call	inv
	movl	%eax, (%rbx)
	movl	-36(%rbp), %eax
	subl	$1, %eax
	movl	%eax, -20(%rbp)
	jmp	.L13
.L14:
	movq	iFact(%rip), %rdx
	movl	-20(%rbp), %eax
	cltq
	addq	$1, %rax
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	addl	$1, %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	iFact(%rip), %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	%ecx, %edx
	movl	%edx, (%rax)
	subl	$1, -20(%rbp)
.L13:
	cmpl	$0, -20(%rbp)
	jns	.L14
	nop
	nop
	movq	-8(%rbp), %rbx
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	init, .-init
	.globl	comb
	.type	comb, @function
comb:
.LFB9:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	cmpl	$0, -8(%rbp)
	js	.L16
	movl	-8(%rbp), %eax
	cmpl	-4(%rbp), %eax
	jle	.L17
.L16:
	movl	$0, %eax
	jmp	.L18
.L17:
	movq	fact(%rip), %rdx
	movl	-4(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movslq	%eax, %rdx
	movq	iFact(%rip), %rcx
	movl	-8(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rcx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	iFact(%rip), %rdx
	movl	-4(%rbp), %eax
	subl	-8(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rcx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
.L18:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	comb, .-comb
	.section	.rodata
.LC0:
	.string	"%i%i"
.LC1:
	.string	"%li\n"
	.text
	.globl	run
	.type	run, @function
run:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	pushq	%r12
	pushq	%rbx
	subq	$32, %rsp
	.cfi_offset 12, -24
	.cfi_offset 3, -32
	movq	%fs:40, %rax
	movq	%rax, -24(%rbp)
	xorl	%eax, %eax
	leaq	-44(%rbp), %rdx
	leaq	-48(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	-48(%rbp), %edx
	movl	-44(%rbp), %eax
	addl	%edx, %eax
	movl	%eax, %edi
	call	init
	movl	$0, -40(%rbp)
	movl	$0, -36(%rbp)
	movl	$2, %edi
	call	inv
	movl	%eax, -28(%rbp)
	movl	$1, -32(%rbp)
	jmp	.L20
.L23:
	movl	$1000000007, %eax
	cltq
	addq	%rax, %rax
	leaq	1(%rax), %rdx
	movl	-36(%rbp), %eax
	cltq
	subq	%rax, %rdx
	movl	-40(%rbp), %eax
	cltq
	subq	%rax, %rdx
	movl	-28(%rbp), %eax
	cltq
	imulq	%rax, %rdx
	movl	-40(%rbp), %eax
	cltq
	addq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, %rsi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	-44(%rbp), %eax
	cmpl	%eax, -32(%rbp)
	jl	.L21
	movl	-40(%rbp), %eax
	movslq	%eax, %r12
	movl	-44(%rbp), %eax
	leal	-1(%rax), %edx
	movl	-32(%rbp), %eax
	subl	$1, %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	comb
	movslq	%eax, %rbx
	movl	-32(%rbp), %edx
	movl	-28(%rbp), %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	modPow
	cltq
	imulq	%rbx, %rax
	addq	%r12, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -40(%rbp)
.L21:
	movl	-48(%rbp), %eax
	cmpl	%eax, -32(%rbp)
	jl	.L22
	movl	-36(%rbp), %eax
	movslq	%eax, %r12
	movl	-48(%rbp), %eax
	leal	-1(%rax), %edx
	movl	-32(%rbp), %eax
	subl	$1, %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	comb
	movslq	%eax, %rbx
	movl	-32(%rbp), %edx
	movl	-28(%rbp), %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	modPow
	cltq
	imulq	%rbx, %rax
	addq	%r12, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -36(%rbp)
.L22:
	addl	$1, -32(%rbp)
.L20:
	movl	-48(%rbp), %edx
	movl	-44(%rbp), %eax
	addl	%edx, %eax
	cmpl	%eax, -32(%rbp)
	jle	.L23
	nop
	movq	-24(%rbp), %rax
	subq	%fs:40, %rax
	je	.L24
	call	__stack_chk_fail@PLT
.L24:
	addq	$32, %rsp
	popq	%rbx
	popq	%r12
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	run, .-run
	.globl	main
	.type	main, @function
main:
.LFB11:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	call	run
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
user
	.file	"temp.c"
	.text
	.p2align 4
	.globl	inv
	.type	inv, @function
inv:
.LFB51:
	.cfi_startproc
	endbr64
	movl	%edi, %esi
	movl	$1, %r8d
	cmpl	$1, %edi
	jle	.L1
	movl	$-1000000007, %r9d
	movl	$1000000007, %edi
	movabsq	$-8543223828751151131, %r10
	.p2align 4,,10
	.p2align 3
.L3:
	movl	%r9d, %eax
	movslq	%r8d, %r8
	cltd
	idivl	%esi
	leal	1000000007(%rax), %ecx
	movslq	%ecx, %rcx
	imulq	%r8, %rcx
	movq	%rcx, %rax
	movl	%ecx, %r8d
	mulq	%r10
	movl	%edi, %eax
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %r8d
	cltd
	idivl	%esi
	movl	%edx, %esi
	cmpl	$1, %edx
	jg	.L3
.L1:
	movl	%r8d, %eax
	ret
	.cfi_endproc
.LFE51:
	.size	inv, .-inv
	.p2align 4
	.globl	modPow
	.type	modPow, @function
modPow:
.LFB52:
	.cfi_startproc
	endbr64
	movl	%esi, %ecx
	movl	$1, %r8d
	testl	%esi, %esi
	jle	.L7
	movabsq	$-8543223828751151131, %rsi
	.p2align 4,,10
	.p2align 3
.L10:
	movslq	%edi, %rdi
	testb	$1, %cl
	je	.L9
	movslq	%r8d, %r8
	imulq	%rdi, %r8
	movq	%r8, %rax
	imulq	%rsi
	movq	%r8, %rax
	sarq	$63, %rax
	addq	%r8, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %r8d
.L9:
	imulq	%rdi, %rdi
	movq	%rdi, %rax
	imulq	%rsi
	movq	%rdi, %rax
	sarq	$63, %rax
	addq	%rdi, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %edi
	sarl	%ecx
	jne	.L10
.L7:
	movl	%r8d, %eax
	ret
	.cfi_endproc
.LFE52:
	.size	modPow, .-modPow
	.p2align 4
	.globl	init
	.type	init, @function
init:
.LFB53:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	leal	1(%rdi), %r13d
	movl	$4, %esi
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movslq	%r13d, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movl	%edi, %ebx
	movq	%r12, %rdi
	subq	$8, %rsp
	.cfi_def_cfa_offset 48
	call	calloc@PLT
	movq	%rax, fact(%rip)
	movq	%rax, %rbp
	movl	$1, (%rax)
	testl	%ebx, %ebx
	jle	.L17
	movl	%r13d, %edi
	movl	$1, %esi
	movl	$1, %eax
	movabsq	$-8543223828751151131, %r8
	.p2align 4,,10
	.p2align 3
.L18:
	imulq	%rsi, %rax
	movq	%rax, %rcx
	imulq	%r8
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subq	%rdx, %rcx
	movl	%ecx, 0(%rbp,%rsi,4)
	addq	$1, %rsi
	movslq	%ecx, %rax
	cmpq	%rsi, %rdi
	jne	.L18
.L17:
	movq	%r12, %rdi
	movl	$4, %esi
	call	calloc@PLT
	movslq	%ebx, %r9
	movl	$1, %edi
	movl	0(%rbp,%r9,4), %esi
	movq	%rax, iFact(%rip)
	movq	%rax, %r8
	leaq	(%rax,%r9,4), %r12
	cmpl	$1, %esi
	jle	.L19
	movl	$-1000000007, %r11d
	movl	$1000000007, %r10d
	movabsq	$-8543223828751151131, %rbp
	.p2align 4,,10
	.p2align 3
.L20:
	movl	%r11d, %eax
	movslq	%edi, %rdi
	cltd
	idivl	%esi
	leal	1000000007(%rax), %ecx
	movslq	%ecx, %rcx
	imulq	%rdi, %rcx
	movq	%rcx, %rax
	movl	%ecx, %edi
	mulq	%rbp
	movl	%r10d, %eax
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %edi
	cltd
	idivl	%esi
	movl	%edx, %esi
	cmpl	$1, %edx
	jg	.L20
.L19:
	movl	%edi, (%r12)
	subl	$1, %ebx
	js	.L16
	movabsq	$-8543223828751151131, %r10
	leaq	-1(%r9), %rsi
	movl	%ebx, %ebx
	subq	%rbx, %rsi
	.p2align 4,,10
	.p2align 3
.L22:
	movslq	%edi, %rcx
	imulq	%r9, %rcx
	movq	%rcx, %rax
	mulq	%r10
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rdx
	subq	%rdx, %rcx
	movl	%ecx, -4(%r8,%r9,4)
	subq	$1, %r9
	movl	%ecx, %edi
	cmpq	%r9, %rsi
	jne	.L22
.L16:
	addq	$8, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE53:
	.size	init, .-init
	.p2align 4
	.globl	comb
	.type	comb, @function
comb:
.LFB54:
	.cfi_startproc
	endbr64
	movl	%esi, %r8d
	testl	%esi, %esi
	js	.L30
	cmpl	%edi, %esi
	jg	.L30
	movq	fact(%rip), %rax
	movq	iFact(%rip), %r9
	movslq	%edi, %rdx
	subl	%r8d, %edi
	movslq	%edi, %rdi
	movslq	(%rax,%rdx,4), %rcx
	movslq	%esi, %rax
	movabsq	$-8543223828751151131, %rsi
	movslq	(%r9,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%rsi
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	movslq	(%r9,%rdi,4), %rax
	imulq	$1000000007, %rdx, %rdx
	subq	%rdx, %rcx
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%rsi
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	movl	%ecx, %eax
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %eax
	ret
	.p2align 4,,10
	.p2align 3
.L30:
	xorl	%eax, %eax
	ret
	.cfi_endproc
.LFE54:
	.size	comb, .-comb
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%i%i"
.LC1:
	.string	"%li\n"
	.text
	.p2align 4
	.globl	run
	.type	run, @function
run:
.LFB55:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	leaq	.LC0(%rip), %rdi
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	subq	$40, %rsp
	.cfi_def_cfa_offset 96
	movq	%fs:40, %rax
	movq	%rax, 24(%rsp)
	xorl	%eax, %eax
	leaq	20(%rsp), %rdx
	leaq	16(%rsp), %rsi
	call	__isoc99_scanf@PLT
	movl	20(%rsp), %edi
	addl	16(%rsp), %edi
	call	init
	movl	16(%rsp), %eax
	addl	20(%rsp), %eax
	testl	%eax, %eax
	jle	.L31
	movl	$0, 12(%rsp)
	xorl	%r15d, %r15d
	movl	$1, %r14d
	xorl	%ebx, %ebx
	movabsq	$-8543223828751151131, %r13
	jmp	.L32
	.p2align 4,,10
	.p2align 3
.L33:
	movl	16(%rsp), %r10d
	cmpl	%r14d, %r10d
	jle	.L56
.L37:
	addl	$1, %r14d
	addl	%r10d, %r9d
	addq	$4, %r15
	cmpl	%r14d, %r9d
	jl	.L31
.L32:
	movslq	12(%rsp), %r12
	movl	$2000000015, %ecx
	movslq	%ebx, %rbp
	leaq	.LC1(%rip), %rsi
	movl	$1, %edi
	subq	%r12, %rcx
	subq	%rbp, %rcx
	imulq	$500000004, %rcx, %rcx
	addq	%rbp, %rcx
	movq	%rcx, %rax
	mulq	%r13
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rax
	subq	%rax, %rcx
	xorl	%eax, %eax
	movq	%rcx, %rdx
	call	__printf_chk@PLT
	movl	20(%rsp), %r9d
	cmpl	%r14d, %r9d
	jg	.L33
	movl	%r9d, %eax
	xorl	%r11d, %r11d
	subl	$1, %eax
	js	.L34
	movq	iFact(%rip), %rsi
	movq	fact(%rip), %rdx
	cltq
	movslq	(%rdx,%r15), %rcx
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	leaq	(%rdx,%rcx), %rax
	movq	%rcx, %rdx
	sarq	$63, %rdx
	sarq	$29, %rax
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subq	%rax, %rcx
	movl	%r14d, %eax
	subl	%r9d, %eax
	cltq
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	leaq	(%rdx,%rcx), %r11
	sarq	$29, %r11
	subq	%rax, %r11
	imulq	$1000000007, %r11, %rax
	subq	%rax, %rcx
	movq	%rcx, %r11
.L34:
	movl	%r14d, %edi
	movl	$500000004, %ecx
	movl	$1, %esi
	.p2align 4,,10
	.p2align 3
.L36:
	movslq	%ecx, %rcx
	testb	$1, %dil
	je	.L35
	movslq	%esi, %rsi
	imulq	%rcx, %rsi
	movq	%rsi, %rax
	imulq	%r13
	movq	%rsi, %rax
	sarq	$63, %rax
	addq	%rsi, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %esi
.L35:
	imulq	%rcx, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %ecx
	sarl	%edi
	jne	.L36
	movslq	%esi, %rbx
	movl	16(%rsp), %r10d
	imulq	%r11, %rbx
	addq	%rbp, %rbx
	movq	%rbx, %rax
	imulq	%r13
	leaq	(%rdx,%rbx), %rax
	movq	%rbx, %rdx
	sarq	$29, %rax
	sarq	$63, %rdx
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subl	%eax, %ebx
	cmpl	%r14d, %r10d
	jg	.L37
.L56:
	movl	%r10d, %eax
	xorl	%r11d, %r11d
	subl	$1, %eax
	js	.L38
	movq	iFact(%rip), %rsi
	movq	fact(%rip), %rdx
	cltq
	movslq	(%rdx,%r15), %rcx
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	leaq	(%rdx,%rcx), %rax
	movq	%rcx, %rdx
	sarq	$63, %rdx
	sarq	$29, %rax
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subq	%rax, %rcx
	movl	%r14d, %eax
	subl	%r10d, %eax
	cltq
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	leaq	(%rdx,%rcx), %r11
	sarq	$29, %r11
	subq	%rax, %r11
	imulq	$1000000007, %r11, %rax
	subq	%rax, %rcx
	movq	%rcx, %r11
.L38:
	movl	%r14d, %edi
	movl	$500000004, %ecx
	movl	$1, %esi
	.p2align 4,,10
	.p2align 3
.L40:
	movslq	%ecx, %rcx
	testb	$1, %dil
	je	.L39
	movslq	%esi, %rsi
	imulq	%rcx, %rsi
	movq	%rsi, %rax
	imulq	%r13
	movq	%rsi, %rax
	sarq	$63, %rax
	addq	%rsi, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %esi
.L39:
	imulq	%rcx, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %ecx
	sarl	%edi
	jne	.L40
	movslq	%esi, %rbp
	addl	$1, %r14d
	addl	%r10d, %r9d
	addq	$4, %r15
	imulq	%r11, %rbp
	addq	%r12, %rbp
	movq	%rbp, %rax
	movl	%ebp, %edi
	imulq	%r13
	leaq	(%rdx,%rbp), %rax
	movq	%rbp, %rdx
	sarq	$29, %rax
	sarq	$63, %rdx
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subl	%eax, %edi
	movl	%edi, 12(%rsp)
	cmpl	%r14d, %r9d
	jge	.L32
.L31:
	movq	24(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L57
	addq	$40, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 56
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	ret
.L57:
	.cfi_restore_state
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE55:
	.size	run, .-run
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB56:
	.cfi_startproc
	endbr64
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	call	run
	xorl	%eax, %eax
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE56:
	.size	main, .-main
	.globl	iFact
	.bss
	.align 8
	.type	iFact, @object
	.size	iFact, 8
iFact:
	.zero	8
	.globl	fact
	.align 8
	.type	fact, @object
	.size	fact, 8
fact:
	.zero	8
	.globl	mod
	.section	.rodata
	.align 4
	.type	mod, @object
	.size	mod, 4
mod:
	.long	1000000007
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

rule
	.file	"temp.c"
	.text
	.p2align 4
	.globl	inv
	.type	inv, @function
inv:
.LFB51:
	.cfi_startproc
	endbr64
	movl	%edi, %esi
	movl	$1, %r8d
	cmpl	$1, %edi
	jle	.L1
	movl	$-1000000007, %r9d
	movl	$1000000007, %edi
	movabsq	$-8543223828751151131, %r10
	.p2align 4,,10
	.p2align 3
.L3:
	movl	%r9d, %eax
	movslq	%r8d, %r8
	cltd
	idivl	%esi
	leal	1000000007(%rax), %ecx
	movslq	%ecx, %rcx
	imulq	%r8, %rcx
	movq	%rcx, %rax
	movl	%ecx, %r8d
	mulq	%r10
	movl	%edi, %eax
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %r8d
	cltd
	idivl	%esi
	movl	%edx, %esi
	cmpl	$1, %edx
	jg	.L3
.L1:
	movl	%r8d, %eax
	ret
	.cfi_endproc
.LFE51:
	.size	inv, .-inv
	.p2align 4
	.globl	modPow
	.type	modPow, @function
modPow:
.LFB52:
	.cfi_startproc
	endbr64
	movl	%esi, %ecx
	movl	$1, %r8d
	testl	%esi, %esi
	jle	.L7
	movabsq	$-8543223828751151131, %rsi
	.p2align 4,,10
	.p2align 3
.L10:
	movslq	%edi, %rdi
	testb	$1, %cl
	je	.L9
	movslq	%r8d, %r8
	imulq	%rdi, %r8
	movq	%r8, %rax
	imulq	%rsi
	movq	%r8, %rax
	sarq	$63, %rax
	addq	%r8, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %r8d
.L9:
	imulq	%rdi, %rdi
	movq	%rdi, %rax
	imulq	%rsi
	movq	%rdi, %rax
	sarq	$63, %rax
	addq	%rdi, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %edi
	sarl	%ecx
	jne	.L10
.L7:
	movl	%r8d, %eax
	ret
	.cfi_endproc
.LFE52:
	.size	modPow, .-modPow
	.p2align 4
	.globl	init
	.type	init, @function
init:
.LFB53:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	leal	1(%rdi), %r13d
	movl	$4, %esi
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	movslq	%r13d, %r12
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movl	%edi, %ebx
	movq	%r12, %rdi
	subq	$8, %rsp
	.cfi_def_cfa_offset 48
	call	calloc@PLT
	movq	%rax, fact(%rip)
	movq	%rax, %rbp
	movl	$1, (%rax)
	testl	%ebx, %ebx
	jle	.L17
	movl	%r13d, %edi
	movl	$1, %esi
	movl	$1, %eax
	movabsq	$-8543223828751151131, %r8
	.p2align 4,,10
	.p2align 3
.L18:
	imulq	%rsi, %rax
	movq	%rax, %rcx
	imulq	%r8
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subq	%rdx, %rcx
	movl	%ecx, 0(%rbp,%rsi,4)
	addq	$1, %rsi
	movslq	%ecx, %rax
	cmpq	%rsi, %rdi
	jne	.L18
.L17:
	movq	%r12, %rdi
	movl	$4, %esi
	call	calloc@PLT
	movslq	%ebx, %r9
	movl	$1, %edi
	movl	0(%rbp,%r9,4), %esi
	movq	%rax, iFact(%rip)
	movq	%rax, %r8
	leaq	(%rax,%r9,4), %r12
	cmpl	$1, %esi
	jle	.L19
	movl	$-1000000007, %r11d
	movl	$1000000007, %r10d
	movabsq	$-8543223828751151131, %rbp
	.p2align 4,,10
	.p2align 3
.L20:
	movl	%r11d, %eax
	movslq	%edi, %rdi
	cltd
	idivl	%esi
	leal	1000000007(%rax), %ecx
	movslq	%ecx, %rcx
	imulq	%rdi, %rcx
	movq	%rcx, %rax
	movl	%ecx, %edi
	mulq	%rbp
	movl	%r10d, %eax
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %edi
	cltd
	idivl	%esi
	movl	%edx, %esi
	cmpl	$1, %edx
	jg	.L20
.L19:
	movl	%edi, (%r12)
	subl	$1, %ebx
	js	.L16
	movabsq	$-8543223828751151131, %r10
	leaq	-1(%r9), %rsi
	movl	%ebx, %ebx
	subq	%rbx, %rsi
	.p2align 4,,10
	.p2align 3
.L22:
	movslq	%edi, %rcx
	imulq	%r9, %rcx
	movq	%rcx, %rax
	mulq	%r10
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rdx
	subq	%rdx, %rcx
	movl	%ecx, -4(%r8,%r9,4)
	subq	$1, %r9
	movl	%ecx, %edi
	cmpq	%r9, %rsi
	jne	.L22
.L16:
	addq	$8, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r12
	.cfi_def_cfa_offset 16
	popq	%r13
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE53:
	.size	init, .-init
	.p2align 4
	.globl	comb
	.type	comb, @function
comb:
.LFB54:
	.cfi_startproc
	endbr64
	movl	%esi, %r8d
	testl	%esi, %esi
	js	.L30
	cmpl	%edi, %esi
	jg	.L30
	movq	fact(%rip), %rax
	movq	iFact(%rip), %r9
	movslq	%edi, %rdx
	subl	%r8d, %edi
	movslq	%edi, %rdi
	movslq	(%rax,%rdx,4), %rcx
	movslq	%esi, %rax
	movabsq	$-8543223828751151131, %rsi
	movslq	(%r9,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%rsi
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	movslq	(%r9,%rdi,4), %rax
	imulq	$1000000007, %rdx, %rdx
	subq	%rdx, %rcx
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%rsi
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	movl	%ecx, %eax
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %eax
	ret
	.p2align 4,,10
	.p2align 3
.L30:
	xorl	%eax, %eax
	ret
	.cfi_endproc
.LFE54:
	.size	comb, .-comb
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%i%i"
.LC1:
	.string	"%li\n"
	.text
	.p2align 4
	.globl	run
	.type	run, @function
run:
.LFB55:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	leaq	.LC0(%rip), %rdi
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%r13
	.cfi_def_cfa_offset 32
	.cfi_offset 13, -32
	pushq	%r12
	.cfi_def_cfa_offset 40
	.cfi_offset 12, -40
	pushq	%rbp
	.cfi_def_cfa_offset 48
	.cfi_offset 6, -48
	pushq	%rbx
	.cfi_def_cfa_offset 56
	.cfi_offset 3, -56
	subq	$40, %rsp
	.cfi_def_cfa_offset 96
	movq	%fs:40, %rax
	movq	%rax, 24(%rsp)
	xorl	%eax, %eax
	leaq	20(%rsp), %rdx
	leaq	16(%rsp), %rsi
	call	__isoc99_scanf@PLT
	movl	20(%rsp), %edi
	addl	16(%rsp), %edi
	call	init
	movl	16(%rsp), %eax
	addl	20(%rsp), %eax
	testl	%eax, %eax
	jle	.L31
	movl	$0, 12(%rsp)
	xorl	%r15d, %r15d
	movl	$1, %r14d
	xorl	%ebx, %ebx
	movabsq	$-8543223828751151131, %r13
	jmp	.L32
	.p2align 4,,10
	.p2align 3
.L33:
	movl	16(%rsp), %r10d
	cmpl	%r14d, %r10d
	jle	.L56
.L37:
	addl	$1, %r14d
	addl	%r10d, %r9d
	addq	$4, %r15
	cmpl	%r14d, %r9d
	jl	.L31
.L32:
	movslq	12(%rsp), %r12
	movl	$2000000015, %ecx
	movslq	%ebx, %rbp
	leaq	.LC1(%rip), %rsi
	movl	$1, %edi
	subq	%r12, %rcx
	subq	%rbp, %rcx
	imulq	$500000004, %rcx, %rcx
	addq	%rbp, %rcx
	movq	%rcx, %rax
	mulq	%r13
	shrq	$29, %rdx
	imulq	$1000000007, %rdx, %rax
	subq	%rax, %rcx
	xorl	%eax, %eax
	movq	%rcx, %rdx
	call	__printf_chk@PLT
	movl	20(%rsp), %r9d
	cmpl	%r14d, %r9d
	jg	.L33
	movl	%r9d, %eax
	xorl	%r11d, %r11d
	subl	$1, %eax
	js	.L34
	movq	iFact(%rip), %rsi
	movq	fact(%rip), %rdx
	cltq
	movslq	(%rdx,%r15), %rcx
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	leaq	(%rdx,%rcx), %rax
	movq	%rcx, %rdx
	sarq	$63, %rdx
	sarq	$29, %rax
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subq	%rax, %rcx
	movl	%r14d, %eax
	subl	%r9d, %eax
	cltq
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	leaq	(%rdx,%rcx), %r11
	sarq	$29, %r11
	subq	%rax, %r11
	imulq	$1000000007, %r11, %rax
	subq	%rax, %rcx
	movq	%rcx, %r11
.L34:
	movl	%r14d, %edi
	movl	$500000004, %ecx
	movl	$1, %esi
	.p2align 4,,10
	.p2align 3
.L36:
	movslq	%ecx, %rcx
	testb	$1, %dil
	je	.L35
	movslq	%esi, %rsi
	imulq	%rcx, %rsi
	movq	%rsi, %rax
	imulq	%r13
	movq	%rsi, %rax
	sarq	$63, %rax
	addq	%rsi, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %esi
.L35:
	imulq	%rcx, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %ecx
	sarl	%edi
	jne	.L36
	movslq	%esi, %rbx
	movl	16(%rsp), %r10d
	imulq	%r11, %rbx
	addq	%rbp, %rbx
	movq	%rbx, %rax
	imulq	%r13
	leaq	(%rdx,%rbx), %rax
	movq	%rbx, %rdx
	sarq	$29, %rax
	sarq	$63, %rdx
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subl	%eax, %ebx
	cmpl	%r14d, %r10d
	jg	.L37
.L56:
	movl	%r10d, %eax
	xorl	%r11d, %r11d
	subl	$1, %eax
	js	.L38
	movq	iFact(%rip), %rsi
	movq	fact(%rip), %rdx
	cltq
	movslq	(%rdx,%r15), %rcx
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	leaq	(%rdx,%rcx), %rax
	movq	%rcx, %rdx
	sarq	$63, %rdx
	sarq	$29, %rax
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subq	%rax, %rcx
	movl	%r14d, %eax
	subl	%r10d, %eax
	cltq
	movslq	(%rsi,%rax,4), %rax
	imulq	%rax, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	leaq	(%rdx,%rcx), %r11
	sarq	$29, %r11
	subq	%rax, %r11
	imulq	$1000000007, %r11, %rax
	subq	%rax, %rcx
	movq	%rcx, %r11
.L38:
	movl	%r14d, %edi
	movl	$500000004, %ecx
	movl	$1, %esi
	.p2align 4,,10
	.p2align 3
.L40:
	movslq	%ecx, %rcx
	testb	$1, %dil
	je	.L39
	movslq	%esi, %rsi
	imulq	%rcx, %rsi
	movq	%rsi, %rax
	imulq	%r13
	movq	%rsi, %rax
	sarq	$63, %rax
	addq	%rsi, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %esi
.L39:
	imulq	%rcx, %rcx
	movq	%rcx, %rax
	imulq	%r13
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$29, %rdx
	subq	%rax, %rdx
	imulq	$1000000007, %rdx, %rdx
	subl	%edx, %ecx
	sarl	%edi
	jne	.L40
	movslq	%esi, %rbp
	addl	$1, %r14d
	addl	%r10d, %r9d
	addq	$4, %r15
	imulq	%r11, %rbp
	addq	%r12, %rbp
	movq	%rbp, %rax
	movl	%ebp, %edi
	imulq	%r13
	leaq	(%rdx,%rbp), %rax
	movq	%rbp, %rdx
	sarq	$29, %rax
	sarq	$63, %rdx
	subq	%rdx, %rax
	imulq	$1000000007, %rax, %rax
	subl	%eax, %edi
	movl	%edi, 12(%rsp)
	cmpl	%r14d, %r9d
	jge	.L32
.L31:
	movq	24(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L57
	addq	$40, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 56
	popq	%rbx
	.cfi_def_cfa_offset 48
	popq	%rbp
	.cfi_def_cfa_offset 40
	popq	%r12
	.cfi_def_cfa_offset 32
	popq	%r13
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	ret
.L57:
	.cfi_restore_state
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE55:
	.size	run, .-run
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB56:
	.cfi_startproc
	endbr64
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	call	run
	xorl	%eax, %eax
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE56:
	.size	main, .-main
	.globl	iFact
	.bss
	.align 8
	.type	iFact, @object
	.size	iFact, 8
iFact:
	.zero	8
	.globl	fact
	.align 8
	.type	fact, @object
	.size	fact, 8
fact:
	.zero	8
	.globl	mod
	.section	.rodata
	.align 4
	.type	mod, @object
	.size	mod, 4
mod:
	.long	1000000007
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<inttypes.h>
#include<string.h>
#include<math.h>

typedef int32_t i32;
typedef int64_t i64;

const i32 mod = 1000000007;

i32 inv (i32 a) {
  i32 t = 1;
  while (a > 1) {
    t = (i64) t * (mod - mod / a) % mod;
    a = mod % a;
  }
  return t;
}

i32 modPow(i32 r, i32 n) {
  i32 t = 1;
  i32 s = r;
  while (n > 0) {
    if (n&1) t = (i64) t * s % mod;
    s = (i64) s * s % mod;
    n >>= 1;
  }
  return t;
}

i32 *fact = NULL;
i32 *iFact = NULL;
void init(const i32 n) {
  fact = (i32 *) calloc (n + 1, sizeof (i32));
  fact[0] = 1;
  for (i32 i = 1; i <= n; ++i) {
    fact[i] = (i64) i * fact[i - 1] % mod;
  }
  iFact = (i32 *) calloc (n + 1, sizeof (i32));
  iFact[n] = inv(fact[n]);
  for (i32 i = n - 1; i >= 0; --i) {
    iFact[i] = (i64) iFact[i + 1] * (i + 1) % mod;
  }
}

i32 comb (i32 n, i32 k) {
  if (!(0 <= k && k <= n)) return 0;
  return (i64) fact[n] * iFact[k] % mod * iFact[n - k] % mod;
}

void run (void) {
  i32 b, w;
  scanf ("%" SCNi32 "%" SCNi32, &b, &w);
  init(b + w);
  i32 l = 0;
  i32 r = 0;
  const i32 p = inv(2);
  for (i32 i = 1; i <= b + w; ++i) {
    printf ("%" PRIi64 "\n", (((i64)2 * mod + 1 - r - l) * p + l) % mod);
    if (i >= w) {
      l = (l + (i64)comb (i - 1, w - 1) * modPow (p, i)) % mod;
    }
    if (i >= b) {
      r = (r + (i64)comb (i - 1, b - 1) * modPow (p, i)) % mod;
    }
  }
}

int main (void) {
  run ();
  return 0;
}

1 2
 6 3
 1 3
 6 6
 2 3
 10 6
 2 6
 10 8
 4 6
 12 8

500000004
250000002
250000002
 500000004
500000004
500000004
62500001
906250007
750000006
882812507
449218754
449218754
 500000004
250000002
125000001
125000001
 500000004
500000004
500000004
500000004
500000004
500000004
500000004
500000004
500000004
500000004
500000004
500000004
 500000004
500000004
375000003
812500006
812500006
 500000004
500000004
500000004
500000004
500000004
500000004
70312501
781250006
775390631
767578131
723144537
536132817
287963870
86547853
485839848
485839848
 500000004
500000004
375000003
250000002
406250003
843750006
562500004
562500004
 500000004
500000004
500000004
500000004
500000004
500000004
500000004
500000004
642578130
212890627
960449226
420898441
496459965
295043948
243804934
492919926
617477422
617477422
 500000004
500000004
500000004
500000004
218750002
656250005
523437504
531250004
535156254
535156254
 500000004
500000004
500000004
500000004
500000004
500000004
500000004
500000004
642578130
212890627
496093754
634765630
441528324
166870119
628479009
108398439
822738654
167099001
339279178
339279178

Given the following C code and unoptimized assembly code, your task is to generate highly optimized x86-64 assembly code.
C Code:

```c
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<inttypes.h>
#include<string.h>
#include<math.h>

typedef int32_t i32;
typedef int64_t i64;

const i32 mod = 1000000007;

i32 inv (i32 a) {
  i32 t = 1;
  while (a > 1) {
    t = (i64) t * (mod - mod / a) % mod;
    a = mod % a;
  }
  return t;
}

i32 modPow(i32 r, i32 n) {
  i32 t = 1;
  i32 s = r;
  while (n > 0) {
    if (n&1) t = (i64) t * s % mod;
    s = (i64) s * s % mod;
    n >>= 1;
  }
  return t;
}

i32 *fact = NULL;
i32 *iFact = NULL;
void init(const i32 n) {
  fact = (i32 *) calloc (n + 1, sizeof (i32));
  fact[0] = 1;
  for (i32 i = 1; i <= n; ++i) {
    fact[i] = (i64) i * fact[i - 1] % mod;
  }
  iFact = (i32 *) calloc (n + 1, sizeof (i32));
  iFact[n] = inv(fact[n]);
  for (i32 i = n - 1; i >= 0; --i) {
    iFact[i] = (i64) iFact[i + 1] * (i + 1) % mod;
  }
}

i32 comb (i32 n, i32 k) {
  if (!(0 <= k && k <= n)) return 0;
  return (i64) fact[n] * iFact[k] % mod * iFact[n - k] % mod;
}

void run (void) {
  i32 b, w;
  scanf ("%" SCNi32 "%" SCNi32, &b, &w);
  init(b + w);
  i32 l = 0;
  i32 r = 0;
  const i32 p = inv(2);
  for (i32 i = 1; i <= b + w; ++i) {
    printf ("%" PRIi64 "\n", (((i64)2 * mod + 1 - r - l) * p + l) % mod);
    if (i >= w) {
      l = (l + (i64)comb (i - 1, w - 1) * modPow (p, i)) % mod;
    }
    if (i >= b) {
      r = (r + (i64)comb (i - 1, b - 1) * modPow (p, i)) % mod;
    }
  }
}

int main (void) {
  run ();
  return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	mod
	.section	.rodata
	.align 4
	.type	mod, @object
	.size	mod, 4
mod:
	.long	1000000007
	.text
	.globl	inv
	.type	inv, @function
inv:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -20(%rbp)
	movl	$1, -4(%rbp)
	jmp	.L2
.L3:
	movl	-4(%rbp), %eax
	movslq	%eax, %rcx
	movl	$1000000007, %esi
	movl	$1000000007, %eax
	cltd
	idivl	-20(%rbp)
	movl	%eax, %edx
	movl	%esi, %eax
	subl	%edx, %eax
	cltq
	imulq	%rcx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -4(%rbp)
	movl	$1000000007, %eax
	cltd
	idivl	-20(%rbp)
	movl	%edx, -20(%rbp)
.L2:
	cmpl	$1, -20(%rbp)
	jg	.L3
	movl	-4(%rbp), %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	inv, .-inv
	.globl	modPow
	.type	modPow, @function
modPow:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -20(%rbp)
	movl	%esi, -24(%rbp)
	movl	$1, -8(%rbp)
	movl	-20(%rbp), %eax
	movl	%eax, -4(%rbp)
	jmp	.L6
.L8:
	movl	-24(%rbp), %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L7
	movl	-8(%rbp), %eax
	movslq	%eax, %rdx
	movl	-4(%rbp), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -8(%rbp)
.L7:
	movl	-4(%rbp), %eax
	movslq	%eax, %rdx
	movl	-4(%rbp), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -4(%rbp)
	sarl	-24(%rbp)
.L6:
	cmpl	$0, -24(%rbp)
	jg	.L8
	movl	-8(%rbp), %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	modPow, .-modPow
	.globl	fact
	.bss
	.align 8
	.type	fact, @object
	.size	fact, 8
fact:
	.zero	8
	.globl	iFact
	.align 8
	.type	iFact, @object
	.size	iFact, 8
iFact:
	.zero	8
	.text
	.globl	init
	.type	init, @function
init:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	pushq	%rbx
	subq	$40, %rsp
	.cfi_offset 3, -24
	movl	%edi, -36(%rbp)
	movl	-36(%rbp), %eax
	addl	$1, %eax
	cltq
	movl	$4, %esi
	movq	%rax, %rdi
	call	calloc@PLT
	movq	%rax, fact(%rip)
	movq	fact(%rip), %rax
	movl	$1, (%rax)
	movl	$1, -24(%rbp)
	jmp	.L11
.L12:
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movq	fact(%rip), %rcx
	movl	-24(%rbp), %eax
	cltq
	salq	$2, %rax
	subq	$4, %rax
	addq	%rcx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	fact(%rip), %rdx
	movl	-24(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	%ecx, %edx
	movl	%edx, (%rax)
	addl	$1, -24(%rbp)
.L11:
	movl	-24(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jle	.L12
	movl	-36(%rbp), %eax
	addl	$1, %eax
	cltq
	movl	$4, %esi
	movq	%rax, %rdi
	call	calloc@PLT
	movq	%rax, iFact(%rip)
	movq	fact(%rip), %rdx
	movl	-36(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movq	iFact(%rip), %rcx
	movl	-36(%rbp), %edx
	movslq	%edx, %rdx
	salq	$2, %rdx
	leaq	(%rcx,%rdx), %rbx
	movl	%eax, %edi
	call	inv
	movl	%eax, (%rbx)
	movl	-36(%rbp), %eax
	subl	$1, %eax
	movl	%eax, -20(%rbp)
	jmp	.L13
.L14:
	movq	iFact(%rip), %rdx
	movl	-20(%rbp), %eax
	cltq
	addq	$1, %rax
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	addl	$1, %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	iFact(%rip), %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	%ecx, %edx
	movl	%edx, (%rax)
	subl	$1, -20(%rbp)
.L13:
	cmpl	$0, -20(%rbp)
	jns	.L14
	nop
	nop
	movq	-8(%rbp), %rbx
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	init, .-init
	.globl	comb
	.type	comb, @function
comb:
.LFB9:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	cmpl	$0, -8(%rbp)
	js	.L16
	movl	-8(%rbp), %eax
	cmpl	-4(%rbp), %eax
	jle	.L17
.L16:
	movl	$0, %eax
	jmp	.L18
.L17:
	movq	fact(%rip), %rdx
	movl	-4(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movslq	%eax, %rdx
	movq	iFact(%rip), %rcx
	movl	-8(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rcx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	iFact(%rip), %rdx
	movl	-4(%rbp), %eax
	subl	-8(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rcx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
.L18:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	comb, .-comb
	.section	.rodata
.LC0:
	.string	"%i%i"
.LC1:
	.string	"%li\n"
	.text
	.globl	run
	.type	run, @function
run:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	pushq	%r12
	pushq	%rbx
	subq	$32, %rsp
	.cfi_offset 12, -24
	.cfi_offset 3, -32
	movq	%fs:40, %rax
	movq	%rax, -24(%rbp)
	xorl	%eax, %eax
	leaq	-44(%rbp), %rdx
	leaq	-48(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	-48(%rbp), %edx
	movl	-44(%rbp), %eax
	addl	%edx, %eax
	movl	%eax, %edi
	call	init
	movl	$0, -40(%rbp)
	movl	$0, -36(%rbp)
	movl	$2, %edi
	call	inv
	movl	%eax, -28(%rbp)
	movl	$1, -32(%rbp)
	jmp	.L20
.L23:
	movl	$1000000007, %eax
	cltq
	addq	%rax, %rax
	leaq	1(%rax), %rdx
	movl	-36(%rbp), %eax
	cltq
	subq	%rax, %rdx
	movl	-40(%rbp), %eax
	cltq
	subq	%rax, %rdx
	movl	-28(%rbp), %eax
	cltq
	imulq	%rax, %rdx
	movl	-40(%rbp), %eax
	cltq
	addq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, %rsi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	-44(%rbp), %eax
	cmpl	%eax, -32(%rbp)
	jl	.L21
	movl	-40(%rbp), %eax
	movslq	%eax, %r12
	movl	-44(%rbp), %eax
	leal	-1(%rax), %edx
	movl	-32(%rbp), %eax
	subl	$1, %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	comb
	movslq	%eax, %rbx
	movl	-32(%rbp), %edx
	movl	-28(%rbp), %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	modPow
	cltq
	imulq	%rbx, %rax
	addq	%r12, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -40(%rbp)
.L21:
	movl	-48(%rbp), %eax
	cmpl	%eax, -32(%rbp)
	jl	.L22
	movl	-36(%rbp), %eax
	movslq	%eax, %r12
	movl	-48(%rbp), %eax
	leal	-1(%rax), %edx
	movl	-32(%rbp), %eax
	subl	$1, %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	comb
	movslq	%eax, %rbx
	movl	-32(%rbp), %edx
	movl	-28(%rbp), %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	modPow
	cltq
	imulq	%rbx, %rax
	addq	%r12, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -36(%rbp)
.L22:
	addl	$1, -32(%rbp)
.L20:
	movl	-48(%rbp), %edx
	movl	-44(%rbp), %eax
	addl	%edx, %eax
	cmpl	%eax, -32(%rbp)
	jle	.L23
	nop
	movq	-24(%rbp), %rax
	subq	%fs:40, %rax
	je	.L24
	call	__stack_chk_fail@PLT
.L24:
	addq	$32, %rsp
	popq	%rbx
	popq	%r12
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	run, .-run
	.globl	main
	.type	main, @function
main:
.LFB11:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	call	run
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
```

Only output the optimized assembly code. Do not include any other text. Do not write any comments in the assembly code. Wrap the assembly code in ```assembly``` tags.
val
	.file	"temp.c"
	.text
	.globl	mod
	.section	.rodata
	.align 4
	.type	mod, @object
	.size	mod, 4
mod:
	.long	1000000007
	.text
	.globl	inv
	.type	inv, @function
inv:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -20(%rbp)
	movl	$1, -4(%rbp)
	jmp	.L2
.L3:
	movl	-4(%rbp), %eax
	movslq	%eax, %rcx
	movl	$1000000007, %esi
	movl	$1000000007, %eax
	cltd
	idivl	-20(%rbp)
	movl	%eax, %edx
	movl	%esi, %eax
	subl	%edx, %eax
	cltq
	imulq	%rcx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -4(%rbp)
	movl	$1000000007, %eax
	cltd
	idivl	-20(%rbp)
	movl	%edx, -20(%rbp)
.L2:
	cmpl	$1, -20(%rbp)
	jg	.L3
	movl	-4(%rbp), %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	inv, .-inv
	.globl	modPow
	.type	modPow, @function
modPow:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -20(%rbp)
	movl	%esi, -24(%rbp)
	movl	$1, -8(%rbp)
	movl	-20(%rbp), %eax
	movl	%eax, -4(%rbp)
	jmp	.L6
.L8:
	movl	-24(%rbp), %eax
	andl	$1, %eax
	testl	%eax, %eax
	je	.L7
	movl	-8(%rbp), %eax
	movslq	%eax, %rdx
	movl	-4(%rbp), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -8(%rbp)
.L7:
	movl	-4(%rbp), %eax
	movslq	%eax, %rdx
	movl	-4(%rbp), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -4(%rbp)
	sarl	-24(%rbp)
.L6:
	cmpl	$0, -24(%rbp)
	jg	.L8
	movl	-8(%rbp), %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	modPow, .-modPow
	.globl	fact
	.bss
	.align 8
	.type	fact, @object
	.size	fact, 8
fact:
	.zero	8
	.globl	iFact
	.align 8
	.type	iFact, @object
	.size	iFact, 8
iFact:
	.zero	8
	.text
	.globl	init
	.type	init, @function
init:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	pushq	%rbx
	subq	$40, %rsp
	.cfi_offset 3, -24
	movl	%edi, -36(%rbp)
	movl	-36(%rbp), %eax
	addl	$1, %eax
	cltq
	movl	$4, %esi
	movq	%rax, %rdi
	call	calloc@PLT
	movq	%rax, fact(%rip)
	movq	fact(%rip), %rax
	movl	$1, (%rax)
	movl	$1, -24(%rbp)
	jmp	.L11
.L12:
	movl	-24(%rbp), %eax
	movslq	%eax, %rdx
	movq	fact(%rip), %rcx
	movl	-24(%rbp), %eax
	cltq
	salq	$2, %rax
	subq	$4, %rax
	addq	%rcx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	fact(%rip), %rdx
	movl	-24(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	%ecx, %edx
	movl	%edx, (%rax)
	addl	$1, -24(%rbp)
.L11:
	movl	-24(%rbp), %eax
	cmpl	-36(%rbp), %eax
	jle	.L12
	movl	-36(%rbp), %eax
	addl	$1, %eax
	cltq
	movl	$4, %esi
	movq	%rax, %rdi
	call	calloc@PLT
	movq	%rax, iFact(%rip)
	movq	fact(%rip), %rdx
	movl	-36(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movq	iFact(%rip), %rcx
	movl	-36(%rbp), %edx
	movslq	%edx, %rdx
	salq	$2, %rdx
	leaq	(%rcx,%rdx), %rbx
	movl	%eax, %edi
	call	inv
	movl	%eax, (%rbx)
	movl	-36(%rbp), %eax
	subl	$1, %eax
	movl	%eax, -20(%rbp)
	jmp	.L13
.L14:
	movq	iFact(%rip), %rdx
	movl	-20(%rbp), %eax
	cltq
	addq	$1, %rax
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movslq	%eax, %rdx
	movl	-20(%rbp), %eax
	addl	$1, %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	iFact(%rip), %rdx
	movl	-20(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	%ecx, %edx
	movl	%edx, (%rax)
	subl	$1, -20(%rbp)
.L13:
	cmpl	$0, -20(%rbp)
	jns	.L14
	nop
	nop
	movq	-8(%rbp), %rbx
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	init, .-init
	.globl	comb
	.type	comb, @function
comb:
.LFB9:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	%edi, -4(%rbp)
	movl	%esi, -8(%rbp)
	cmpl	$0, -8(%rbp)
	js	.L16
	movl	-8(%rbp), %eax
	cmpl	-4(%rbp), %eax
	jle	.L17
.L16:
	movl	$0, %eax
	jmp	.L18
.L17:
	movq	fact(%rip), %rdx
	movl	-4(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	movslq	%eax, %rdx
	movq	iFact(%rip), %rcx
	movl	-8(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rcx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rcx
	movq	iFact(%rip), %rdx
	movl	-4(%rbp), %eax
	subl	-8(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movl	(%rax), %eax
	cltq
	imulq	%rcx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
.L18:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	comb, .-comb
	.section	.rodata
.LC0:
	.string	"%i%i"
.LC1:
	.string	"%li\n"
	.text
	.globl	run
	.type	run, @function
run:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	pushq	%r12
	pushq	%rbx
	subq	$32, %rsp
	.cfi_offset 12, -24
	.cfi_offset 3, -32
	movq	%fs:40, %rax
	movq	%rax, -24(%rbp)
	xorl	%eax, %eax
	leaq	-44(%rbp), %rdx
	leaq	-48(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	-48(%rbp), %edx
	movl	-44(%rbp), %eax
	addl	%edx, %eax
	movl	%eax, %edi
	call	init
	movl	$0, -40(%rbp)
	movl	$0, -36(%rbp)
	movl	$2, %edi
	call	inv
	movl	%eax, -28(%rbp)
	movl	$1, -32(%rbp)
	jmp	.L20
.L23:
	movl	$1000000007, %eax
	cltq
	addq	%rax, %rax
	leaq	1(%rax), %rdx
	movl	-36(%rbp), %eax
	cltq
	subq	%rax, %rdx
	movl	-40(%rbp), %eax
	cltq
	subq	%rax, %rdx
	movl	-28(%rbp), %eax
	cltq
	imulq	%rax, %rdx
	movl	-40(%rbp), %eax
	cltq
	addq	%rdx, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, %rsi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	-44(%rbp), %eax
	cmpl	%eax, -32(%rbp)
	jl	.L21
	movl	-40(%rbp), %eax
	movslq	%eax, %r12
	movl	-44(%rbp), %eax
	leal	-1(%rax), %edx
	movl	-32(%rbp), %eax
	subl	$1, %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	comb
	movslq	%eax, %rbx
	movl	-32(%rbp), %edx
	movl	-28(%rbp), %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	modPow
	cltq
	imulq	%rbx, %rax
	addq	%r12, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -40(%rbp)
.L21:
	movl	-48(%rbp), %eax
	cmpl	%eax, -32(%rbp)
	jl	.L22
	movl	-36(%rbp), %eax
	movslq	%eax, %r12
	movl	-48(%rbp), %eax
	leal	-1(%rax), %edx
	movl	-32(%rbp), %eax
	subl	$1, %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	comb
	movslq	%eax, %rbx
	movl	-32(%rbp), %edx
	movl	-28(%rbp), %eax
	movl	%edx, %esi
	movl	%eax, %edi
	call	modPow
	cltq
	imulq	%rbx, %rax
	addq	%r12, %rax
	movl	$1000000007, %edx
	movslq	%edx, %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movl	%eax, -36(%rbp)
.L22:
	addl	$1, -32(%rbp)
.L20:
	movl	-48(%rbp), %edx
	movl	-44(%rbp), %eax
	addl	%edx, %eax
	cmpl	%eax, -32(%rbp)
	jle	.L23
	nop
	movq	-24(%rbp), %rax
	subq	%fs:40, %rax
	je	.L24
	call	__stack_chk_fail@PLT
.L24:
	addq	$32, %rsp
	popq	%rbx
	popq	%r12
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	run, .-run
	.globl	main
	.type	main, @function
main:
.LFB11:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	call	run
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	main, .-main
	.ident	"GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:
