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>
typedef long long ll;
ll c(ll a,ll b,ll p){
    if (b==0)return 1;
    else if (b%2==0) {
        ll d=c(a,b/2,p);
        return (d*d)%p;
    }
    else return (a*c(a,b-1,p))%p;
}
int n,a,b,i;
ll r=1,y=1,m=1e9+7;
int main(){
    scanf("%d%d%d",&n,&a,&b);
    r=c(2,n,m);
    r--;
    for(i=a;i>0;i--)y=(y*i)%m;
    y=c(y,m-2,m);
    for(i=n-a+1;i<=n;i++)y=(i*y)%m;
    r-=r-y<0?y-m:y;
    y=1;
    for(i=b;i>0;i--)y=(y*i)%m;
    y=c(y,m-2,m);
    for(i=n;i>n-b;i--)y=(i*y)%m;
    r-=r-y<0?y-m:y;
    printf("%lld",r);
    return 0;
}```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	c
	.type	c, @function
c:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$48, %rsp
	movq	%rdi, -24(%rbp)
	movq	%rsi, -32(%rbp)
	movq	%rdx, -40(%rbp)
	cmpq	$0, -32(%rbp)
	jne	.L2
	movl	$1, %eax
	jmp	.L3
.L2:
	movq	-32(%rbp), %rax
	andl	$1, %eax
	testq	%rax, %rax
	jne	.L4
	movq	-32(%rbp), %rax
	movq	%rax, %rdx
	shrq	$63, %rdx
	addq	%rdx, %rax
	sarq	%rax
	movq	%rax, %rcx
	movq	-40(%rbp), %rdx
	movq	-24(%rbp), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, -8(%rbp)
	movq	-8(%rbp), %rax
	imulq	%rax, %rax
	cqto
	idivq	-40(%rbp)
	movq	%rdx, %rax
	jmp	.L3
.L4:
	movq	-32(%rbp), %rax
	leaq	-1(%rax), %rcx
	movq	-40(%rbp), %rdx
	movq	-24(%rbp), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	imulq	-24(%rbp), %rax
	cqto
	idivq	-40(%rbp)
	movq	%rdx, %rax
.L3:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	c, .-c
	.globl	n
	.bss
	.align 4
	.type	n, @object
	.size	n, 4
n:
	.zero	4
	.globl	a
	.align 4
	.type	a, @object
	.size	a, 4
a:
	.zero	4
	.globl	b
	.align 4
	.type	b, @object
	.size	b, 4
b:
	.zero	4
	.globl	i
	.align 4
	.type	i, @object
	.size	i, 4
i:
	.zero	4
	.globl	r
	.data
	.align 8
	.type	r, @object
	.size	r, 8
r:
	.quad	1
	.globl	y
	.align 8
	.type	y, @object
	.size	y, 8
y:
	.quad	1
	.globl	m
	.align 8
	.type	m, @object
	.size	m, 8
m:
	.quad	1000000007
	.section	.rodata
.LC0:
	.string	"%d%d%d"
.LC1:
	.string	"%lld"
	.text
	.globl	main
	.type	main, @function
main:
.LFB1:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	leaq	b(%rip), %rax
	movq	%rax, %rcx
	leaq	a(%rip), %rax
	movq	%rax, %rdx
	leaq	n(%rip), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movq	m(%rip), %rdx
	movl	n(%rip), %eax
	cltq
	movq	%rax, %rsi
	movl	$2, %edi
	call	c
	movq	%rax, r(%rip)
	movq	r(%rip), %rax
	subq	$1, %rax
	movq	%rax, r(%rip)
	movl	a(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L6
.L7:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L6:
	movl	i(%rip), %eax
	testl	%eax, %eax
	jg	.L7
	movq	m(%rip), %rdx
	movq	m(%rip), %rax
	leaq	-2(%rax), %rcx
	movq	y(%rip), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, y(%rip)
	movl	n(%rip), %eax
	movl	a(%rip), %edx
	subl	%edx, %eax
	addl	$1, %eax
	movl	%eax, i(%rip)
	jmp	.L8
.L9:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	addl	$1, %eax
	movl	%eax, i(%rip)
.L8:
	movl	i(%rip), %edx
	movl	n(%rip), %eax
	cmpl	%eax, %edx
	jle	.L9
	movq	r(%rip), %rdx
	movq	r(%rip), %rax
	movq	y(%rip), %rcx
	subq	%rcx, %rax
	testq	%rax, %rax
	jns	.L10
	movq	y(%rip), %rax
	movq	m(%rip), %rcx
	subq	%rcx, %rax
	jmp	.L11
.L10:
	movq	y(%rip), %rax
.L11:
	subq	%rax, %rdx
	movq	%rdx, r(%rip)
	movq	$1, y(%rip)
	movl	b(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L12
.L13:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L12:
	movl	i(%rip), %eax
	testl	%eax, %eax
	jg	.L13
	movq	m(%rip), %rdx
	movq	m(%rip), %rax
	leaq	-2(%rax), %rcx
	movq	y(%rip), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, y(%rip)
	movl	n(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L14
.L15:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L14:
	movl	n(%rip), %eax
	movl	b(%rip), %ecx
	subl	%ecx, %eax
	movl	%eax, %edx
	movl	i(%rip), %eax
	cmpl	%eax, %edx
	jl	.L15
	movq	r(%rip), %rdx
	movq	r(%rip), %rax
	movq	y(%rip), %rcx
	subq	%rcx, %rax
	testq	%rax, %rax
	jns	.L16
	movq	y(%rip), %rax
	movq	m(%rip), %rcx
	subq	%rcx, %rax
	jmp	.L17
.L16:
	movq	y(%rip), %rax
.L17:
	subq	%rax, %rdx
	movq	%rdx, r(%rip)
	movq	r(%rip), %rax
	movq	%rax, %rsi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE1:
	.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	c
	.type	c, @function
c:
.LFB23:
	.cfi_startproc
	endbr64
	movl	$1, %r8d
	testq	%rsi, %rsi
	je	.L33
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	movq	%rsi, %rcx
	movq	%rdi, %r12
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdx, %rbx
	subq	$8, %rsp
	.cfi_def_cfa_offset 32
	testb	$1, %sil
	jne	.L3
	shrq	$63, %rsi
	movl	$1, %eax
	addq	%rcx, %rsi
	sarq	%rsi
	je	.L37
	testb	$1, %sil
	jne	.L5
	testq	%rcx, %rcx
	leaq	3(%rcx), %rsi
	cmovns	%rcx, %rsi
	sarq	$2, %rsi
	je	.L36
	testb	$1, %sil
	jne	.L7
	testq	%rcx, %rcx
	leaq	7(%rcx), %rsi
	cmovns	%rcx, %rsi
	sarq	$3, %rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
.L36:
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
.L37:
	cqto
	addq	$8, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 24
	idivq	%rbx
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	movq	%rdx, %rax
	ret
	.p2align 4,,10
	.p2align 3
.L3:
	.cfi_restore_state
	movq	%rsi, %rdi
	subq	$1, %rdi
	je	.L10
	testb	$1, %dil
	jne	.L11
	movq	%rdi, %rsi
	movl	$1, %eax
	shrq	$63, %rsi
	addq	%rdi, %rsi
	sarq	%rsi
	je	.L14
	testb	$1, %sil
	jne	.L13
	testq	%rdi, %rdi
	leaq	2(%rcx), %rsi
	cmovns	%rdi, %rsi
	movq	%r12, %rdi
	sarq	$2, %rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	.p2align 4,,10
	.p2align 3
.L14:
	cqto
	idivq	%rbx
	imulq	%rdx, %r12
.L10:
	movq	%r12, %rax
	addq	$8, %rsp
	.cfi_def_cfa_offset 24
	cqto
	idivq	%rbx
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	movq	%rdx, %rax
	ret
	.p2align 4,,10
	.p2align 3
.L33:
	.cfi_restore 3
	.cfi_restore 12
	movq	%r8, %rax
	ret
	.p2align 4,,10
	.p2align 3
.L5:
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -24
	.cfi_offset 12, -16
	movq	%rsi, %rax
	subq	$1, %rax
	je	.L8
	testb	$1, %al
	jne	.L9
	movq	%rax, %rsi
	shrq	$63, %rsi
	addq	%rax, %rsi
	sarq	%rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	imulq	%rdx, %r12
.L8:
	movq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	jmp	.L37
	.p2align 4,,10
	.p2align 3
.L11:
	movq	%rsi, %rdx
	movq	%r12, %rax
	subq	$2, %rdx
	je	.L14
	testb	$1, %dl
	jne	.L15
	movq	%rdx, %rsi
	movq	%r12, %rdi
	shrq	$63, %rsi
	addq	%rdx, %rsi
	movq	%rbx, %rdx
	sarq	%rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%r12, %rax
	jmp	.L14
	.p2align 4,,10
	.p2align 3
.L13:
	subq	$1, %rsi
	movq	%r12, %rdi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	jmp	.L14
	.p2align 4,,10
	.p2align 3
.L15:
	movq	%rbx, %rdx
	leaq	-3(%rsi), %rsi
	movq	%r12, %rdi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%r12, %rax
	jmp	.L14
	.p2align 4,,10
	.p2align 3
.L7:
	subq	$1, %rsi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	jmp	.L36
	.p2align 4,,10
	.p2align 3
.L9:
	subq	$2, %rsi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	imulq	%rdx, %r12
	jmp	.L8
	.cfi_endproc
.LFE23:
	.size	c, .-c
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d%d%d"
.LC1:
	.string	"%lld"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB24:
	.cfi_startproc
	endbr64
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	leaq	b(%rip), %rcx
	xorl	%eax, %eax
	leaq	a(%rip), %rdx
	pushq	%rbp
	.cfi_def_cfa_offset 24
	.cfi_offset 6, -24
	leaq	n(%rip), %rsi
	leaq	.LC0(%rip), %rdi
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -32
	call	__isoc99_scanf@PLT
	movslq	n(%rip), %r10
	movl	$2, %edi
	movq	m(%rip), %r9
	movq	%r10, %rsi
	movq	%r9, %rdx
	movq	%r10, %r11
	call	c
	movl	a(%rip), %r12d
	movq	y(%rip), %rdi
	leaq	-1(%rax), %rbx
	testl	%r12d, %r12d
	jle	.L41
	movslq	%r12d, %rax
	leal	-1(%r12), %edx
	leaq	-1(%rax), %rcx
	movq	%rcx, %rsi
	subq	%rdx, %rsi
	jmp	.L42
	.p2align 4,,10
	.p2align 3
.L58:
	subq	$1, %rcx
.L42:
	imulq	%rdi, %rax
	cqto
	idivq	%r9
	movq	%rcx, %rax
	movq	%rdx, %rdi
	cmpq	%rcx, %rsi
	jne	.L58
.L41:
	leaq	-2(%r9), %rbp
	movq	%r9, %rdx
	movq	%rbp, %rsi
	call	c
	movq	%rax, %rdx
	movl	%r11d, %eax
	subl	%r12d, %eax
	leal	1(%rax), %ecx
	cmpl	%ecx, %r11d
	jl	.L43
	leal	-1(%r11), %esi
	movslq	%ecx, %rcx
	subl	%eax, %esi
	cltq
	leaq	2(%rsi,%rax), %rsi
	.p2align 4,,10
	.p2align 3
.L44:
	movq	%rdx, %rax
	imulq	%rcx, %rax
	addq	$1, %rcx
	cqto
	idivq	%r9
	cmpq	%rsi, %rcx
	jne	.L44
.L43:
	movq	%rdx, %rax
	movl	b(%rip), %r12d
	subq	%r9, %rax
	cmpq	%rdx, %rbx
	cmovl	%rax, %rdx
	subq	%rdx, %rbx
	testl	%r12d, %r12d
	jle	.L51
	movslq	%r12d, %rax
	leal	-1(%r12), %edx
	movl	$1, %edi
	leaq	-1(%rax), %rcx
	movq	%rcx, %rsi
	subq	%rdx, %rsi
	jmp	.L47
	.p2align 4,,10
	.p2align 3
.L59:
	subq	$1, %rcx
.L47:
	imulq	%rdi, %rax
	cqto
	idivq	%r9
	movq	%rcx, %rax
	movq	%rdx, %rdi
	cmpq	%rcx, %rsi
	jne	.L59
.L46:
	movq	%r9, %rdx
	movq	%rbp, %rsi
	call	c
	movl	%r11d, %esi
	movl	%r11d, i(%rip)
	subl	%r12d, %esi
	movq	%rax, y(%rip)
	movq	%rax, %rdx
	cmpl	%esi, %r11d
	jle	.L48
	leaq	-1(%r10), %rcx
	subl	$1, %r11d
	movq	%r10, %rax
	subl	%esi, %r11d
	movq	%rcx, %rdi
	subq	%r11, %rdi
	jmp	.L49
	.p2align 4,,10
	.p2align 3
.L60:
	subq	$1, %rcx
.L49:
	imulq	%rdx, %rax
	cqto
	idivq	%r9
	movq	%rcx, %rax
	cmpq	%rcx, %rdi
	jne	.L60
	movq	%rdx, y(%rip)
	movl	%esi, i(%rip)
.L48:
	movq	%rdx, %rax
	leaq	.LC1(%rip), %rsi
	movl	$1, %edi
	subq	%r9, %rax
	cmpq	%rdx, %rbx
	cmovl	%rax, %rdx
	xorl	%eax, %eax
	subq	%rdx, %rbx
	movq	%rbx, %rdx
	movq	%rbx, r(%rip)
	call	__printf_chk@PLT
	popq	%rbx
	.cfi_remember_state
	.cfi_def_cfa_offset 24
	xorl	%eax, %eax
	popq	%rbp
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	ret
.L51:
	.cfi_restore_state
	movl	$1, %edi
	jmp	.L46
	.cfi_endproc
.LFE24:
	.size	main, .-main
	.globl	m
	.data
	.align 8
	.type	m, @object
	.size	m, 8
m:
	.quad	1000000007
	.globl	y
	.align 8
	.type	y, @object
	.size	y, 8
y:
	.quad	1
	.globl	r
	.align 8
	.type	r, @object
	.size	r, 8
r:
	.quad	1
	.globl	i
	.bss
	.align 4
	.type	i, @object
	.size	i, 4
i:
	.zero	4
	.globl	b
	.align 4
	.type	b, @object
	.size	b, 4
b:
	.zero	4
	.globl	a
	.align 4
	.type	a, @object
	.size	a, 4
a:
	.zero	4
	.globl	n
	.align 4
	.type	n, @object
	.size	n, 4
n:
	.zero	4
	.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	c
	.type	c, @function
c:
.LFB23:
	.cfi_startproc
	endbr64
	movl	$1, %r8d
	testq	%rsi, %rsi
	je	.L33
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	movq	%rsi, %rcx
	movq	%rdi, %r12
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdx, %rbx
	subq	$8, %rsp
	.cfi_def_cfa_offset 32
	testb	$1, %sil
	jne	.L3
	shrq	$63, %rsi
	movl	$1, %eax
	addq	%rcx, %rsi
	sarq	%rsi
	je	.L37
	testb	$1, %sil
	jne	.L5
	testq	%rcx, %rcx
	leaq	3(%rcx), %rsi
	cmovns	%rcx, %rsi
	sarq	$2, %rsi
	je	.L36
	testb	$1, %sil
	jne	.L7
	testq	%rcx, %rcx
	leaq	7(%rcx), %rsi
	cmovns	%rcx, %rsi
	sarq	$3, %rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
.L36:
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
.L37:
	cqto
	addq	$8, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 24
	idivq	%rbx
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	movq	%rdx, %rax
	ret
	.p2align 4,,10
	.p2align 3
.L3:
	.cfi_restore_state
	movq	%rsi, %rdi
	subq	$1, %rdi
	je	.L10
	testb	$1, %dil
	jne	.L11
	movq	%rdi, %rsi
	movl	$1, %eax
	shrq	$63, %rsi
	addq	%rdi, %rsi
	sarq	%rsi
	je	.L14
	testb	$1, %sil
	jne	.L13
	testq	%rdi, %rdi
	leaq	2(%rcx), %rsi
	cmovns	%rdi, %rsi
	movq	%r12, %rdi
	sarq	$2, %rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	.p2align 4,,10
	.p2align 3
.L14:
	cqto
	idivq	%rbx
	imulq	%rdx, %r12
.L10:
	movq	%r12, %rax
	addq	$8, %rsp
	.cfi_def_cfa_offset 24
	cqto
	idivq	%rbx
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	movq	%rdx, %rax
	ret
	.p2align 4,,10
	.p2align 3
.L33:
	.cfi_restore 3
	.cfi_restore 12
	movq	%r8, %rax
	ret
	.p2align 4,,10
	.p2align 3
.L5:
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -24
	.cfi_offset 12, -16
	movq	%rsi, %rax
	subq	$1, %rax
	je	.L8
	testb	$1, %al
	jne	.L9
	movq	%rax, %rsi
	shrq	$63, %rsi
	addq	%rax, %rsi
	sarq	%rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	imulq	%rdx, %r12
.L8:
	movq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	jmp	.L37
	.p2align 4,,10
	.p2align 3
.L11:
	movq	%rsi, %rdx
	movq	%r12, %rax
	subq	$2, %rdx
	je	.L14
	testb	$1, %dl
	jne	.L15
	movq	%rdx, %rsi
	movq	%r12, %rdi
	shrq	$63, %rsi
	addq	%rdx, %rsi
	movq	%rbx, %rdx
	sarq	%rsi
	call	c
	imulq	%rax, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%r12, %rax
	jmp	.L14
	.p2align 4,,10
	.p2align 3
.L13:
	subq	$1, %rsi
	movq	%r12, %rdi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	jmp	.L14
	.p2align 4,,10
	.p2align 3
.L15:
	movq	%rbx, %rdx
	leaq	-3(%rsi), %rsi
	movq	%r12, %rdi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%r12, %rax
	jmp	.L14
	.p2align 4,,10
	.p2align 3
.L7:
	subq	$1, %rsi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	movq	%rdx, %rax
	imulq	%rdx, %rax
	jmp	.L36
	.p2align 4,,10
	.p2align 3
.L9:
	subq	$2, %rsi
	call	c
	imulq	%r12, %rax
	cqto
	idivq	%rbx
	imulq	%rdx, %r12
	jmp	.L8
	.cfi_endproc
.LFE23:
	.size	c, .-c
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d%d%d"
.LC1:
	.string	"%lld"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB24:
	.cfi_startproc
	endbr64
	pushq	%r12
	.cfi_def_cfa_offset 16
	.cfi_offset 12, -16
	leaq	b(%rip), %rcx
	xorl	%eax, %eax
	leaq	a(%rip), %rdx
	pushq	%rbp
	.cfi_def_cfa_offset 24
	.cfi_offset 6, -24
	leaq	n(%rip), %rsi
	leaq	.LC0(%rip), %rdi
	pushq	%rbx
	.cfi_def_cfa_offset 32
	.cfi_offset 3, -32
	call	__isoc99_scanf@PLT
	movslq	n(%rip), %r10
	movl	$2, %edi
	movq	m(%rip), %r9
	movq	%r10, %rsi
	movq	%r9, %rdx
	movq	%r10, %r11
	call	c
	movl	a(%rip), %r12d
	movq	y(%rip), %rdi
	leaq	-1(%rax), %rbx
	testl	%r12d, %r12d
	jle	.L41
	movslq	%r12d, %rax
	leal	-1(%r12), %edx
	leaq	-1(%rax), %rcx
	movq	%rcx, %rsi
	subq	%rdx, %rsi
	jmp	.L42
	.p2align 4,,10
	.p2align 3
.L58:
	subq	$1, %rcx
.L42:
	imulq	%rdi, %rax
	cqto
	idivq	%r9
	movq	%rcx, %rax
	movq	%rdx, %rdi
	cmpq	%rcx, %rsi
	jne	.L58
.L41:
	leaq	-2(%r9), %rbp
	movq	%r9, %rdx
	movq	%rbp, %rsi
	call	c
	movq	%rax, %rdx
	movl	%r11d, %eax
	subl	%r12d, %eax
	leal	1(%rax), %ecx
	cmpl	%ecx, %r11d
	jl	.L43
	leal	-1(%r11), %esi
	movslq	%ecx, %rcx
	subl	%eax, %esi
	cltq
	leaq	2(%rsi,%rax), %rsi
	.p2align 4,,10
	.p2align 3
.L44:
	movq	%rdx, %rax
	imulq	%rcx, %rax
	addq	$1, %rcx
	cqto
	idivq	%r9
	cmpq	%rsi, %rcx
	jne	.L44
.L43:
	movq	%rdx, %rax
	movl	b(%rip), %r12d
	subq	%r9, %rax
	cmpq	%rdx, %rbx
	cmovl	%rax, %rdx
	subq	%rdx, %rbx
	testl	%r12d, %r12d
	jle	.L51
	movslq	%r12d, %rax
	leal	-1(%r12), %edx
	movl	$1, %edi
	leaq	-1(%rax), %rcx
	movq	%rcx, %rsi
	subq	%rdx, %rsi
	jmp	.L47
	.p2align 4,,10
	.p2align 3
.L59:
	subq	$1, %rcx
.L47:
	imulq	%rdi, %rax
	cqto
	idivq	%r9
	movq	%rcx, %rax
	movq	%rdx, %rdi
	cmpq	%rcx, %rsi
	jne	.L59
.L46:
	movq	%r9, %rdx
	movq	%rbp, %rsi
	call	c
	movl	%r11d, %esi
	movl	%r11d, i(%rip)
	subl	%r12d, %esi
	movq	%rax, y(%rip)
	movq	%rax, %rdx
	cmpl	%esi, %r11d
	jle	.L48
	leaq	-1(%r10), %rcx
	subl	$1, %r11d
	movq	%r10, %rax
	subl	%esi, %r11d
	movq	%rcx, %rdi
	subq	%r11, %rdi
	jmp	.L49
	.p2align 4,,10
	.p2align 3
.L60:
	subq	$1, %rcx
.L49:
	imulq	%rdx, %rax
	cqto
	idivq	%r9
	movq	%rcx, %rax
	cmpq	%rcx, %rdi
	jne	.L60
	movq	%rdx, y(%rip)
	movl	%esi, i(%rip)
.L48:
	movq	%rdx, %rax
	leaq	.LC1(%rip), %rsi
	movl	$1, %edi
	subq	%r9, %rax
	cmpq	%rdx, %rbx
	cmovl	%rax, %rdx
	xorl	%eax, %eax
	subq	%rdx, %rbx
	movq	%rbx, %rdx
	movq	%rbx, r(%rip)
	call	__printf_chk@PLT
	popq	%rbx
	.cfi_remember_state
	.cfi_def_cfa_offset 24
	xorl	%eax, %eax
	popq	%rbp
	.cfi_def_cfa_offset 16
	popq	%r12
	.cfi_def_cfa_offset 8
	ret
.L51:
	.cfi_restore_state
	movl	$1, %edi
	jmp	.L46
	.cfi_endproc
.LFE24:
	.size	main, .-main
	.globl	m
	.data
	.align 8
	.type	m, @object
	.size	m, 8
m:
	.quad	1000000007
	.globl	y
	.align 8
	.type	y, @object
	.size	y, 8
y:
	.quad	1
	.globl	r
	.align 8
	.type	r, @object
	.size	r, 8
r:
	.quad	1
	.globl	i
	.bss
	.align 4
	.type	i, @object
	.size	i, 4
i:
	.zero	4
	.globl	b
	.align 4
	.type	b, @object
	.size	b, 4
b:
	.zero	4
	.globl	a
	.align 4
	.type	a, @object
	.size	a, 4
a:
	.zero	4
	.globl	n
	.align 4
	.type	n, @object
	.size	n, 4
n:
	.zero	4
	.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>
typedef long long ll;
ll c(ll a,ll b,ll p){
    if (b==0)return 1;
    else if (b%2==0) {
        ll d=c(a,b/2,p);
        return (d*d)%p;
    }
    else return (a*c(a,b-1,p))%p;
}
int n,a,b,i;
ll r=1,y=1,m=1e9+7;
int main(){
    scanf("%d%d%d",&n,&a,&b);
    r=c(2,n,m);
    r--;
    for(i=a;i>0;i--)y=(y*i)%m;
    y=c(y,m-2,m);
    for(i=n-a+1;i<=n;i++)y=(i*y)%m;
    r-=r-y<0?y-m:y;
    y=1;
    for(i=b;i>0;i--)y=(y*i)%m;
    y=c(y,m-2,m);
    for(i=n;i>n-b;i--)y=(i*y)%m;
    r-=r-y<0?y-m:y;
    printf("%lld",r);
    return 0;
}
4 0 3
 1000000000 32745 173205
 1000010000 32745 173205
 1001010000 32745 173205
 1001010000 32745 41728
 1000000000 60937 173205
 1000010001 32745 173205
 1001011000 32745 173205
 1011010000 32745 41728
 1000010101 32745 173205

10 57817401 92275184 733789298 186006536 832968201 184550369 13899730 247477631 642797689
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>
typedef long long ll;
ll c(ll a,ll b,ll p){
    if (b==0)return 1;
    else if (b%2==0) {
        ll d=c(a,b/2,p);
        return (d*d)%p;
    }
    else return (a*c(a,b-1,p))%p;
}
int n,a,b,i;
ll r=1,y=1,m=1e9+7;
int main(){
    scanf("%d%d%d",&n,&a,&b);
    r=c(2,n,m);
    r--;
    for(i=a;i>0;i--)y=(y*i)%m;
    y=c(y,m-2,m);
    for(i=n-a+1;i<=n;i++)y=(i*y)%m;
    r-=r-y<0?y-m:y;
    y=1;
    for(i=b;i>0;i--)y=(y*i)%m;
    y=c(y,m-2,m);
    for(i=n;i>n-b;i--)y=(i*y)%m;
    r-=r-y<0?y-m:y;
    printf("%lld",r);
    return 0;
}```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	c
	.type	c, @function
c:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$48, %rsp
	movq	%rdi, -24(%rbp)
	movq	%rsi, -32(%rbp)
	movq	%rdx, -40(%rbp)
	cmpq	$0, -32(%rbp)
	jne	.L2
	movl	$1, %eax
	jmp	.L3
.L2:
	movq	-32(%rbp), %rax
	andl	$1, %eax
	testq	%rax, %rax
	jne	.L4
	movq	-32(%rbp), %rax
	movq	%rax, %rdx
	shrq	$63, %rdx
	addq	%rdx, %rax
	sarq	%rax
	movq	%rax, %rcx
	movq	-40(%rbp), %rdx
	movq	-24(%rbp), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, -8(%rbp)
	movq	-8(%rbp), %rax
	imulq	%rax, %rax
	cqto
	idivq	-40(%rbp)
	movq	%rdx, %rax
	jmp	.L3
.L4:
	movq	-32(%rbp), %rax
	leaq	-1(%rax), %rcx
	movq	-40(%rbp), %rdx
	movq	-24(%rbp), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	imulq	-24(%rbp), %rax
	cqto
	idivq	-40(%rbp)
	movq	%rdx, %rax
.L3:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	c, .-c
	.globl	n
	.bss
	.align 4
	.type	n, @object
	.size	n, 4
n:
	.zero	4
	.globl	a
	.align 4
	.type	a, @object
	.size	a, 4
a:
	.zero	4
	.globl	b
	.align 4
	.type	b, @object
	.size	b, 4
b:
	.zero	4
	.globl	i
	.align 4
	.type	i, @object
	.size	i, 4
i:
	.zero	4
	.globl	r
	.data
	.align 8
	.type	r, @object
	.size	r, 8
r:
	.quad	1
	.globl	y
	.align 8
	.type	y, @object
	.size	y, 8
y:
	.quad	1
	.globl	m
	.align 8
	.type	m, @object
	.size	m, 8
m:
	.quad	1000000007
	.section	.rodata
.LC0:
	.string	"%d%d%d"
.LC1:
	.string	"%lld"
	.text
	.globl	main
	.type	main, @function
main:
.LFB1:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	leaq	b(%rip), %rax
	movq	%rax, %rcx
	leaq	a(%rip), %rax
	movq	%rax, %rdx
	leaq	n(%rip), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movq	m(%rip), %rdx
	movl	n(%rip), %eax
	cltq
	movq	%rax, %rsi
	movl	$2, %edi
	call	c
	movq	%rax, r(%rip)
	movq	r(%rip), %rax
	subq	$1, %rax
	movq	%rax, r(%rip)
	movl	a(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L6
.L7:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L6:
	movl	i(%rip), %eax
	testl	%eax, %eax
	jg	.L7
	movq	m(%rip), %rdx
	movq	m(%rip), %rax
	leaq	-2(%rax), %rcx
	movq	y(%rip), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, y(%rip)
	movl	n(%rip), %eax
	movl	a(%rip), %edx
	subl	%edx, %eax
	addl	$1, %eax
	movl	%eax, i(%rip)
	jmp	.L8
.L9:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	addl	$1, %eax
	movl	%eax, i(%rip)
.L8:
	movl	i(%rip), %edx
	movl	n(%rip), %eax
	cmpl	%eax, %edx
	jle	.L9
	movq	r(%rip), %rdx
	movq	r(%rip), %rax
	movq	y(%rip), %rcx
	subq	%rcx, %rax
	testq	%rax, %rax
	jns	.L10
	movq	y(%rip), %rax
	movq	m(%rip), %rcx
	subq	%rcx, %rax
	jmp	.L11
.L10:
	movq	y(%rip), %rax
.L11:
	subq	%rax, %rdx
	movq	%rdx, r(%rip)
	movq	$1, y(%rip)
	movl	b(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L12
.L13:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L12:
	movl	i(%rip), %eax
	testl	%eax, %eax
	jg	.L13
	movq	m(%rip), %rdx
	movq	m(%rip), %rax
	leaq	-2(%rax), %rcx
	movq	y(%rip), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, y(%rip)
	movl	n(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L14
.L15:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L14:
	movl	n(%rip), %eax
	movl	b(%rip), %ecx
	subl	%ecx, %eax
	movl	%eax, %edx
	movl	i(%rip), %eax
	cmpl	%eax, %edx
	jl	.L15
	movq	r(%rip), %rdx
	movq	r(%rip), %rax
	movq	y(%rip), %rcx
	subq	%rcx, %rax
	testq	%rax, %rax
	jns	.L16
	movq	y(%rip), %rax
	movq	m(%rip), %rcx
	subq	%rcx, %rax
	jmp	.L17
.L16:
	movq	y(%rip), %rax
.L17:
	subq	%rax, %rdx
	movq	%rdx, r(%rip)
	movq	r(%rip), %rax
	movq	%rax, %rsi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE1:
	.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.
train
	.file	"temp.c"
	.text
	.globl	c
	.type	c, @function
c:
.LFB0:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$48, %rsp
	movq	%rdi, -24(%rbp)
	movq	%rsi, -32(%rbp)
	movq	%rdx, -40(%rbp)
	cmpq	$0, -32(%rbp)
	jne	.L2
	movl	$1, %eax
	jmp	.L3
.L2:
	movq	-32(%rbp), %rax
	andl	$1, %eax
	testq	%rax, %rax
	jne	.L4
	movq	-32(%rbp), %rax
	movq	%rax, %rdx
	shrq	$63, %rdx
	addq	%rdx, %rax
	sarq	%rax
	movq	%rax, %rcx
	movq	-40(%rbp), %rdx
	movq	-24(%rbp), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, -8(%rbp)
	movq	-8(%rbp), %rax
	imulq	%rax, %rax
	cqto
	idivq	-40(%rbp)
	movq	%rdx, %rax
	jmp	.L3
.L4:
	movq	-32(%rbp), %rax
	leaq	-1(%rax), %rcx
	movq	-40(%rbp), %rdx
	movq	-24(%rbp), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	imulq	-24(%rbp), %rax
	cqto
	idivq	-40(%rbp)
	movq	%rdx, %rax
.L3:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	c, .-c
	.globl	n
	.bss
	.align 4
	.type	n, @object
	.size	n, 4
n:
	.zero	4
	.globl	a
	.align 4
	.type	a, @object
	.size	a, 4
a:
	.zero	4
	.globl	b
	.align 4
	.type	b, @object
	.size	b, 4
b:
	.zero	4
	.globl	i
	.align 4
	.type	i, @object
	.size	i, 4
i:
	.zero	4
	.globl	r
	.data
	.align 8
	.type	r, @object
	.size	r, 8
r:
	.quad	1
	.globl	y
	.align 8
	.type	y, @object
	.size	y, 8
y:
	.quad	1
	.globl	m
	.align 8
	.type	m, @object
	.size	m, 8
m:
	.quad	1000000007
	.section	.rodata
.LC0:
	.string	"%d%d%d"
.LC1:
	.string	"%lld"
	.text
	.globl	main
	.type	main, @function
main:
.LFB1:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	leaq	b(%rip), %rax
	movq	%rax, %rcx
	leaq	a(%rip), %rax
	movq	%rax, %rdx
	leaq	n(%rip), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movq	m(%rip), %rdx
	movl	n(%rip), %eax
	cltq
	movq	%rax, %rsi
	movl	$2, %edi
	call	c
	movq	%rax, r(%rip)
	movq	r(%rip), %rax
	subq	$1, %rax
	movq	%rax, r(%rip)
	movl	a(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L6
.L7:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L6:
	movl	i(%rip), %eax
	testl	%eax, %eax
	jg	.L7
	movq	m(%rip), %rdx
	movq	m(%rip), %rax
	leaq	-2(%rax), %rcx
	movq	y(%rip), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, y(%rip)
	movl	n(%rip), %eax
	movl	a(%rip), %edx
	subl	%edx, %eax
	addl	$1, %eax
	movl	%eax, i(%rip)
	jmp	.L8
.L9:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	addl	$1, %eax
	movl	%eax, i(%rip)
.L8:
	movl	i(%rip), %edx
	movl	n(%rip), %eax
	cmpl	%eax, %edx
	jle	.L9
	movq	r(%rip), %rdx
	movq	r(%rip), %rax
	movq	y(%rip), %rcx
	subq	%rcx, %rax
	testq	%rax, %rax
	jns	.L10
	movq	y(%rip), %rax
	movq	m(%rip), %rcx
	subq	%rcx, %rax
	jmp	.L11
.L10:
	movq	y(%rip), %rax
.L11:
	subq	%rax, %rdx
	movq	%rdx, r(%rip)
	movq	$1, y(%rip)
	movl	b(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L12
.L13:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L12:
	movl	i(%rip), %eax
	testl	%eax, %eax
	jg	.L13
	movq	m(%rip), %rdx
	movq	m(%rip), %rax
	leaq	-2(%rax), %rcx
	movq	y(%rip), %rax
	movq	%rcx, %rsi
	movq	%rax, %rdi
	call	c
	movq	%rax, y(%rip)
	movl	n(%rip), %eax
	movl	%eax, i(%rip)
	jmp	.L14
.L15:
	movl	i(%rip), %eax
	movslq	%eax, %rdx
	movq	y(%rip), %rax
	imulq	%rdx, %rax
	movq	m(%rip), %rcx
	cqto
	idivq	%rcx
	movq	%rdx, %rax
	movq	%rax, y(%rip)
	movl	i(%rip), %eax
	subl	$1, %eax
	movl	%eax, i(%rip)
.L14:
	movl	n(%rip), %eax
	movl	b(%rip), %ecx
	subl	%ecx, %eax
	movl	%eax, %edx
	movl	i(%rip), %eax
	cmpl	%eax, %edx
	jl	.L15
	movq	r(%rip), %rdx
	movq	r(%rip), %rax
	movq	y(%rip), %rcx
	subq	%rcx, %rax
	testq	%rax, %rax
	jns	.L16
	movq	y(%rip), %rax
	movq	m(%rip), %rcx
	subq	%rcx, %rax
	jmp	.L17
.L16:
	movq	y(%rip), %rax
.L17:
	subq	%rax, %rdx
	movq	%rdx, r(%rip)
	movq	r(%rip), %rax
	movq	%rax, %rsi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE1:
	.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:
