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

```c
#ifdef __cplusplus
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#endif

#define rep(i,n) for(ll i = 0; i < (n); ++i)
#define rep1(i, n) for(ll i = 1; i < (n); ++i)
#define rep4(i, start, end, step) for (ll i = (start); i < (end); i += (step))

#define BIG_PRIME 1000000007
#define BP_remainder(x) ((x) % BIG_PRIME)

#define INF (1 << 30)
#define INF_NEG (INF * -1)
#define INF_LONG (1LL << 62)
#define INF_LONG_NEG (INF_LONG * -1L)

typedef long long ll;
typedef char str255[256];
ll StrLen(char *s) { for(ll ptr = 0L;; ++ptr) if(!s[ptr]) return ptr; } 
// char * の後ろから n 文字削除, 削除後の文字数を返す
ll StrDel(char *s, int n) { ll l = StrLen(s); s[l - n + 1L] = '\0'; return l - n; }

ll NumDigits(ll l){ char s[30]; sprintf(s, "%lld", l); return StrLen(s); }

int is1stAns = 1;
void printI(int    i) { if (is1stAns) printf(  "%d", i), is1stAns = 0; else printf(  " %d", i); }
void printL(ll     l) { if (is1stAns) printf("%lld", l), is1stAns = 0; else printf(" %lld", l); }
void print (ll     l) { if (is1stAns) printf("%lld", l), is1stAns = 0; else printf(" %lld", l); }
void printD(double d) { if (is1stAns) printf("%.9f", d), is1stAns = 0; else printf(" %.9f", d); }
void printC(char   c) { if (is1stAns) printf(  "%c", c), is1stAns = 0; else printf(  " %c", c); }
void printS(char  *s) { if (is1stAns) printf(  "%s", s), is1stAns = 0; else printf(  " %s", s); }

#ifndef __cplusplus // C 版 min, max
ll min(ll a, ll b){ if (a < b) return a; else return b; }
ll max(ll a, ll b){ if (a > b) return a; else return b; }
#endif
#define chmin(a, b) func_chmin(&(a), (b))
void func_chmin(ll *a, ll b) { if (*a > b) *a = b; }
#define chmax(a, b) func_chmax(&(a), (b))
void func_chmax(ll *a, ll b) { if (*a < b) *a = b; }

// 入力用
#ifndef __cplusplus // C の配列動的確保用
#define newchar(n) (char *)malloc(sizeof(char) * (n))
#define newint(n) (int *)malloc(sizeof(int) * (n))
#define newll(n) (ll *)malloc(sizeof(ll) * (n))
#define newstr(n) (str255 *)malloc(sizeof(str255) * (n))
#endif

#define INPUT_LL(x) scanf("%lld", &x)
#define INPUT_CHAR(x) scanf("%c", &c)
#define INPUT_STRING(x) scanf("%s", x)

#define inll(x) ll x; INPUT_LL(x)
#define incc(x) char x; INPUT_CHAR(x)
#define inss(x) str255 x; INPUT_STRING(x)
#ifdef __cplusplus
#define invecll(x, n) vector<ll> x ((n)); rep(i, n) cin >> x [i]
#define inveccc(x, n) vector<char> x ((n)); rep(i, n) cin >> x [i]
#define invecss(x, n) vector<str255> x ((n)); rep(i, n) cin >> x [i]
#else
#define invecll(x, n) ll * x = newll(n); rep(i, n) INPUT_LL(x [i])
#define inveccc(x, n) char * x = newchar(n); rep(i, n) INPUT_CHAR(x [i])
#define invecss(x, n) str255 * x = newstr(n); rep(i, n) INPUT_STRING(x [i])
#endif

#define putll(x) printf("%lld\n", (x))
#define putcc(x) printf("%c\n", (x))

signed main()
{
#ifdef __cplusplus
    cout << fixed << setprecision(9);
#endif
    inll(L); inll(R);
    if ((R - L) > 2019){
        puts("0");
        return 0;
    }

    ll ans = 2020;
    rep4(i, L, R, 1){
        rep4(j, i + 1, R + 1, 1){
            ans = min(ans, (i * j) % 2019);
        }
    }

    putll(ans);

    return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	StrLen
	.type	StrLen, @function
StrLen:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -24(%rbp)
	movq	$0, -8(%rbp)
.L4:
	movq	-8(%rbp), %rdx
	movq	-24(%rbp), %rax
	addq	%rdx, %rax
	movzbl	(%rax), %eax
	testb	%al, %al
	jne	.L2
	movq	-8(%rbp), %rax
	jmp	.L5
.L2:
	addq	$1, -8(%rbp)
	jmp	.L4
.L5:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	StrLen, .-StrLen
	.globl	StrDel
	.type	StrDel, @function
StrDel:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$32, %rsp
	movq	%rdi, -24(%rbp)
	movl	%esi, -28(%rbp)
	movq	-24(%rbp), %rax
	movq	%rax, %rdi
	call	StrLen
	movq	%rax, -8(%rbp)
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	-8(%rbp), %rax
	subq	%rdx, %rax
	leaq	1(%rax), %rdx
	movq	-24(%rbp), %rax
	addq	%rdx, %rax
	movb	$0, (%rax)
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	-8(%rbp), %rax
	subq	%rdx, %rax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	StrDel, .-StrDel
	.section	.rodata
.LC0:
	.string	"%lld"
	.text
	.globl	NumDigits
	.type	NumDigits, @function
NumDigits:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$64, %rsp
	movq	%rdi, -56(%rbp)
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movq	-56(%rbp), %rdx
	leaq	-48(%rbp), %rax
	leaq	.LC0(%rip), %rcx
	movq	%rcx, %rsi
	movq	%rax, %rdi
	movl	$0, %eax
	call	sprintf@PLT
	leaq	-48(%rbp), %rax
	movq	%rax, %rdi
	call	StrLen
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L10
	call	__stack_chk_fail@PLT
.L10:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	NumDigits, .-NumDigits
	.globl	is1stAns
	.data
	.align 4
	.type	is1stAns, @object
	.size	is1stAns, 4
is1stAns:
	.long	1
	.section	.rodata
.LC1:
	.string	"%d"
.LC2:
	.string	" %d"
	.text
	.globl	printI
	.type	printI, @function
printI:
.LFB9:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L12
	movl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L14
.L12:
	movl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC2(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L14:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	printI, .-printI
	.section	.rodata
.LC3:
	.string	" %lld"
	.text
	.globl	printL
	.type	printL, @function
printL:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L16
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L18
.L16:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L18:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	printL, .-printL
	.globl	print
	.type	print, @function
print:
.LFB11:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L20
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L22
.L20:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L22:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	print, .-print
	.section	.rodata
.LC4:
	.string	"%.9f"
.LC5:
	.string	" %.9f"
	.text
	.globl	printD
	.type	printD, @function
printD:
.LFB12:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movsd	%xmm0, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L24
	movq	-8(%rbp), %rax
	movq	%rax, %xmm0
	leaq	.LC4(%rip), %rax
	movq	%rax, %rdi
	movl	$1, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L26
.L24:
	movq	-8(%rbp), %rax
	movq	%rax, %xmm0
	leaq	.LC5(%rip), %rax
	movq	%rax, %rdi
	movl	$1, %eax
	call	printf@PLT
.L26:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	printD, .-printD
	.section	.rodata
.LC6:
	.string	" %c"
	.text
	.globl	printC
	.type	printC, @function
printC:
.LFB13:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, %eax
	movb	%al, -4(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L28
	movsbl	-4(%rbp), %eax
	movl	%eax, %edi
	call	putchar@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L30
.L28:
	movsbl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC6(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L30:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	printC, .-printC
	.section	.rodata
.LC7:
	.string	"%s"
.LC8:
	.string	" %s"
	.text
	.globl	printS
	.type	printS, @function
printS:
.LFB14:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L32
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC7(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L34
.L32:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC8(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L34:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	printS, .-printS
	.globl	min
	.type	min, @function
min:
.LFB15:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	cmpq	-16(%rbp), %rax
	jge	.L36
	movq	-8(%rbp), %rax
	jmp	.L37
.L36:
	movq	-16(%rbp), %rax
.L37:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	min, .-min
	.globl	max
	.type	max, @function
max:
.LFB16:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	cmpq	-16(%rbp), %rax
	jle	.L39
	movq	-8(%rbp), %rax
	jmp	.L40
.L39:
	movq	-16(%rbp), %rax
.L40:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	max, .-max
	.globl	func_chmin
	.type	func_chmin, @function
func_chmin:
.LFB17:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	cmpq	%rax, -16(%rbp)
	jge	.L43
	movq	-8(%rbp), %rax
	movq	-16(%rbp), %rdx
	movq	%rdx, (%rax)
.L43:
	nop
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	func_chmin, .-func_chmin
	.globl	func_chmax
	.type	func_chmax, @function
func_chmax:
.LFB18:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	cmpq	%rax, -16(%rbp)
	jle	.L46
	movq	-8(%rbp), %rax
	movq	-16(%rbp), %rdx
	movq	%rdx, (%rax)
.L46:
	nop
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	func_chmax, .-func_chmax
	.section	.rodata
.LC9:
	.string	"0"
.LC10:
	.string	"%lld\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB19:
	.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	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	leaq	-48(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	leaq	-40(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movq	-40(%rbp), %rax
	movq	-48(%rbp), %rdx
	subq	%rdx, %rax
	cmpq	$2019, %rax
	jle	.L48
	leaq	.LC9(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L54
.L48:
	movq	$2020, -32(%rbp)
	movq	-48(%rbp), %rax
	movq	%rax, -24(%rbp)
	jmp	.L50
.L53:
	movq	-24(%rbp), %rax
	addq	$1, %rax
	movq	%rax, -16(%rbp)
	jmp	.L51
.L52:
	movq	-24(%rbp), %rax
	imulq	-16(%rbp), %rax
	movq	%rax, %rcx
	movabsq	$-9090891705468550697, %rdx
	movq	%rcx, %rax
	imulq	%rdx
	leaq	(%rdx,%rcx), %rax
	sarq	$10, %rax
	movq	%rcx, %rdx
	sarq	$63, %rdx
	subq	%rdx, %rax
	imulq	$2019, %rax, %rdx
	movq	%rcx, %rax
	subq	%rdx, %rax
	movq	-32(%rbp), %rdx
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	min
	movq	%rax, -32(%rbp)
	addq	$1, -16(%rbp)
.L51:
	movq	-40(%rbp), %rax
	cmpq	%rax, -16(%rbp)
	jle	.L52
	addq	$1, -24(%rbp)
.L50:
	movq	-40(%rbp), %rax
	cmpq	%rax, -24(%rbp)
	jl	.L53
	movq	-32(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC10(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
.L54:
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L55
	call	__stack_chk_fail@PLT
.L55:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.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	StrLen
	.type	StrLen, @function
StrLen:
.LFB51:
	.cfi_startproc
	endbr64
	xorl	%eax, %eax
	cmpb	$0, (%rdi)
	je	.L1
	.p2align 4,,10
	.p2align 3
.L2:
	addq	$1, %rax
	cmpb	$0, (%rdi,%rax)
	jne	.L2
.L1:
	ret
	.cfi_endproc
.LFE51:
	.size	StrLen, .-StrLen
	.p2align 4
	.globl	StrDel
	.type	StrDel, @function
StrDel:
.LFB52:
	.cfi_startproc
	endbr64
	xorl	%eax, %eax
	cmpb	$0, (%rdi)
	je	.L9
	.p2align 4,,10
	.p2align 3
.L8:
	addq	$1, %rax
	cmpb	$0, (%rdi,%rax)
	jne	.L8
.L9:
	movslq	%esi, %rsi
	subq	%rsi, %rax
	movb	$0, 1(%rdi,%rax)
	ret
	.cfi_endproc
.LFE52:
	.size	StrDel, .-StrDel
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%lld"
	.text
	.p2align 4
	.globl	NumDigits
	.type	NumDigits, @function
NumDigits:
.LFB53:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %r8
	leaq	.LC0(%rip), %rcx
	movl	$30, %edx
	movl	$1, %esi
	subq	$48, %rsp
	.cfi_def_cfa_offset 64
	movq	%fs:40, %rax
	movq	%rax, 40(%rsp)
	xorl	%eax, %eax
	movq	%rsp, %rbx
	movq	%rbx, %rdi
	call	__sprintf_chk@PLT
	xorl	%eax, %eax
	cmpb	$0, (%rsp)
	je	.L13
	.p2align 4,,10
	.p2align 3
.L14:
	addq	$1, %rax
	cmpb	$0, (%rbx,%rax)
	jne	.L14
.L13:
	movq	40(%rsp), %rdx
	subq	%fs:40, %rdx
	jne	.L20
	addq	$48, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
.L20:
	.cfi_restore_state
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE53:
	.size	NumDigits, .-NumDigits
	.section	.rodata.str1.1
.LC1:
	.string	"%d"
.LC2:
	.string	" %d"
	.text
	.p2align 4
	.globl	printI
	.type	printI, @function
printI:
.LFB54:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movl	%edi, %edx
	testl	%eax, %eax
	je	.L22
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC1(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L22:
	leaq	.LC2(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE54:
	.size	printI, .-printI
	.section	.rodata.str1.1
.LC3:
	.string	" %lld"
	.text
	.p2align 4
	.globl	printL
	.type	printL, @function
printL:
.LFB55:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movq	%rdi, %rdx
	testl	%eax, %eax
	je	.L29
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC0(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L29:
	leaq	.LC3(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE55:
	.size	printL, .-printL
	.p2align 4
	.globl	print
	.type	print, @function
print:
.LFB66:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movq	%rdi, %rdx
	testl	%eax, %eax
	je	.L36
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC0(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L36:
	leaq	.LC3(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE66:
	.size	print, .-print
	.section	.rodata.str1.1
.LC4:
	.string	"%.9f"
.LC5:
	.string	" %.9f"
	.text
	.p2align 4
	.globl	printD
	.type	printD, @function
printD:
.LFB57:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L43
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	movl	$1, %edi
	movl	$1, %eax
	leaq	.LC4(%rip), %rsi
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L43:
	leaq	.LC5(%rip), %rsi
	movl	$1, %edi
	movl	$1, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE57:
	.size	printD, .-printD
	.section	.rodata.str1.1
.LC6:
	.string	" %c"
	.text
	.p2align 4
	.globl	printC
	.type	printC, @function
printC:
.LFB58:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movsbl	%dil, %edx
	testl	%eax, %eax
	je	.L50
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	movl	%edx, %edi
	call	putchar@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L50:
	leaq	.LC6(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE58:
	.size	printC, .-printC
	.section	.rodata.str1.1
.LC7:
	.string	"%s"
.LC8:
	.string	" %s"
	.text
	.p2align 4
	.globl	printS
	.type	printS, @function
printS:
.LFB59:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movq	%rdi, %rdx
	testl	%eax, %eax
	je	.L57
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC7(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L57:
	leaq	.LC8(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE59:
	.size	printS, .-printS
	.p2align 4
	.globl	min
	.type	min, @function
min:
.LFB60:
	.cfi_startproc
	endbr64
	cmpq	%rsi, %rdi
	movq	%rsi, %rax
	cmovle	%rdi, %rax
	ret
	.cfi_endproc
.LFE60:
	.size	min, .-min
	.p2align 4
	.globl	max
	.type	max, @function
max:
.LFB61:
	.cfi_startproc
	endbr64
	cmpq	%rsi, %rdi
	movq	%rsi, %rax
	cmovge	%rdi, %rax
	ret
	.cfi_endproc
.LFE61:
	.size	max, .-max
	.p2align 4
	.globl	func_chmin
	.type	func_chmin, @function
func_chmin:
.LFB62:
	.cfi_startproc
	endbr64
	cmpq	%rsi, (%rdi)
	jle	.L65
	movq	%rsi, (%rdi)
.L65:
	ret
	.cfi_endproc
.LFE62:
	.size	func_chmin, .-func_chmin
	.p2align 4
	.globl	func_chmax
	.type	func_chmax, @function
func_chmax:
.LFB63:
	.cfi_startproc
	endbr64
	cmpq	%rsi, (%rdi)
	jge	.L67
	movq	%rsi, (%rdi)
.L67:
	ret
	.cfi_endproc
.LFE63:
	.size	func_chmax, .-func_chmax
	.section	.rodata.str1.1
.LC9:
	.string	"0"
.LC10:
	.string	"%lld\n"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB64:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	leaq	.LC0(%rip), %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rbp, %rdi
	subq	$40, %rsp
	.cfi_def_cfa_offset 64
	movq	%fs:40, %rax
	movq	%rax, 24(%rsp)
	xorl	%eax, %eax
	leaq	8(%rsp), %rsi
	call	__isoc99_scanf@PLT
	movq	%rbp, %rdi
	leaq	16(%rsp), %rsi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	movq	16(%rsp), %rbx
	movq	8(%rsp), %rdi
	movq	%rbx, %rax
	subq	%rdi, %rax
	cmpq	$2019, %rax
	jg	.L70
	movl	$2020, %r8d
	leaq	1(%rbx), %r10
	movabsq	$-9090891705468550697, %r9
	cmpq	%rdi, %rbx
	jle	.L72
	.p2align 4,,10
	.p2align 3
.L71:
	leaq	1(%rdi), %r11
	cmpq	%r11, %rbx
	jl	.L74
	movq	%r11, %rcx
	movq	%r11, %rsi
	imulq	%rdi, %rcx
	.p2align 4,,10
	.p2align 3
.L75:
	movq	%rcx, %rax
	imulq	%r9
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$10, %rdx
	subq	%rax, %rdx
	movq	%rcx, %rax
	imulq	$2019, %rdx, %rdx
	subq	%rdx, %rax
	cmpq	%rax, %r8
	cmovg	%rax, %r8
	addq	$1, %rsi
	addq	%rdi, %rcx
	cmpq	%rsi, %r10
	jne	.L75
	cmpq	%r11, %rbx
	je	.L72
.L74:
	movq	%r11, %rdi
	jmp	.L71
	.p2align 4,,10
	.p2align 3
.L72:
	movq	%r8, %rdx
	leaq	.LC10(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L73:
	movq	24(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L81
	addq	$40, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 24
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	ret
.L70:
	.cfi_restore_state
	leaq	.LC9(%rip), %rdi
	call	puts@PLT
	jmp	.L73
.L81:
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE64:
	.size	main, .-main
	.globl	is1stAns
	.data
	.align 4
	.type	is1stAns, @object
	.size	is1stAns, 4
is1stAns:
	.long	1
	.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	StrLen
	.type	StrLen, @function
StrLen:
.LFB51:
	.cfi_startproc
	endbr64
	xorl	%eax, %eax
	cmpb	$0, (%rdi)
	je	.L1
	.p2align 4,,10
	.p2align 3
.L2:
	addq	$1, %rax
	cmpb	$0, (%rdi,%rax)
	jne	.L2
.L1:
	ret
	.cfi_endproc
.LFE51:
	.size	StrLen, .-StrLen
	.p2align 4
	.globl	StrDel
	.type	StrDel, @function
StrDel:
.LFB52:
	.cfi_startproc
	endbr64
	xorl	%eax, %eax
	cmpb	$0, (%rdi)
	je	.L9
	.p2align 4,,10
	.p2align 3
.L8:
	addq	$1, %rax
	cmpb	$0, (%rdi,%rax)
	jne	.L8
.L9:
	movslq	%esi, %rsi
	subq	%rsi, %rax
	movb	$0, 1(%rdi,%rax)
	ret
	.cfi_endproc
.LFE52:
	.size	StrDel, .-StrDel
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%lld"
	.text
	.p2align 4
	.globl	NumDigits
	.type	NumDigits, @function
NumDigits:
.LFB53:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %r8
	leaq	.LC0(%rip), %rcx
	movl	$30, %edx
	movl	$1, %esi
	subq	$48, %rsp
	.cfi_def_cfa_offset 64
	movq	%fs:40, %rax
	movq	%rax, 40(%rsp)
	xorl	%eax, %eax
	movq	%rsp, %rbx
	movq	%rbx, %rdi
	call	__sprintf_chk@PLT
	xorl	%eax, %eax
	cmpb	$0, (%rsp)
	je	.L13
	.p2align 4,,10
	.p2align 3
.L14:
	addq	$1, %rax
	cmpb	$0, (%rbx,%rax)
	jne	.L14
.L13:
	movq	40(%rsp), %rdx
	subq	%fs:40, %rdx
	jne	.L20
	addq	$48, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
.L20:
	.cfi_restore_state
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE53:
	.size	NumDigits, .-NumDigits
	.section	.rodata.str1.1
.LC1:
	.string	"%d"
.LC2:
	.string	" %d"
	.text
	.p2align 4
	.globl	printI
	.type	printI, @function
printI:
.LFB54:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movl	%edi, %edx
	testl	%eax, %eax
	je	.L22
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC1(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L22:
	leaq	.LC2(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE54:
	.size	printI, .-printI
	.section	.rodata.str1.1
.LC3:
	.string	" %lld"
	.text
	.p2align 4
	.globl	printL
	.type	printL, @function
printL:
.LFB55:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movq	%rdi, %rdx
	testl	%eax, %eax
	je	.L29
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC0(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L29:
	leaq	.LC3(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE55:
	.size	printL, .-printL
	.p2align 4
	.globl	print
	.type	print, @function
print:
.LFB66:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movq	%rdi, %rdx
	testl	%eax, %eax
	je	.L36
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC0(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L36:
	leaq	.LC3(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE66:
	.size	print, .-print
	.section	.rodata.str1.1
.LC4:
	.string	"%.9f"
.LC5:
	.string	" %.9f"
	.text
	.p2align 4
	.globl	printD
	.type	printD, @function
printD:
.LFB57:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L43
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	movl	$1, %edi
	movl	$1, %eax
	leaq	.LC4(%rip), %rsi
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L43:
	leaq	.LC5(%rip), %rsi
	movl	$1, %edi
	movl	$1, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE57:
	.size	printD, .-printD
	.section	.rodata.str1.1
.LC6:
	.string	" %c"
	.text
	.p2align 4
	.globl	printC
	.type	printC, @function
printC:
.LFB58:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movsbl	%dil, %edx
	testl	%eax, %eax
	je	.L50
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	movl	%edx, %edi
	call	putchar@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L50:
	leaq	.LC6(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE58:
	.size	printC, .-printC
	.section	.rodata.str1.1
.LC7:
	.string	"%s"
.LC8:
	.string	" %s"
	.text
	.p2align 4
	.globl	printS
	.type	printS, @function
printS:
.LFB59:
	.cfi_startproc
	endbr64
	movl	is1stAns(%rip), %eax
	movq	%rdi, %rdx
	testl	%eax, %eax
	je	.L57
	subq	$8, %rsp
	.cfi_def_cfa_offset 16
	leaq	.LC7(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
	movl	$0, is1stAns(%rip)
	addq	$8, %rsp
	.cfi_def_cfa_offset 8
	ret
	.p2align 4,,10
	.p2align 3
.L57:
	leaq	.LC8(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	jmp	__printf_chk@PLT
	.cfi_endproc
.LFE59:
	.size	printS, .-printS
	.p2align 4
	.globl	min
	.type	min, @function
min:
.LFB60:
	.cfi_startproc
	endbr64
	cmpq	%rsi, %rdi
	movq	%rsi, %rax
	cmovle	%rdi, %rax
	ret
	.cfi_endproc
.LFE60:
	.size	min, .-min
	.p2align 4
	.globl	max
	.type	max, @function
max:
.LFB61:
	.cfi_startproc
	endbr64
	cmpq	%rsi, %rdi
	movq	%rsi, %rax
	cmovge	%rdi, %rax
	ret
	.cfi_endproc
.LFE61:
	.size	max, .-max
	.p2align 4
	.globl	func_chmin
	.type	func_chmin, @function
func_chmin:
.LFB62:
	.cfi_startproc
	endbr64
	cmpq	%rsi, (%rdi)
	jle	.L65
	movq	%rsi, (%rdi)
.L65:
	ret
	.cfi_endproc
.LFE62:
	.size	func_chmin, .-func_chmin
	.p2align 4
	.globl	func_chmax
	.type	func_chmax, @function
func_chmax:
.LFB63:
	.cfi_startproc
	endbr64
	cmpq	%rsi, (%rdi)
	jge	.L67
	movq	%rsi, (%rdi)
.L67:
	ret
	.cfi_endproc
.LFE63:
	.size	func_chmax, .-func_chmax
	.section	.rodata.str1.1
.LC9:
	.string	"0"
.LC10:
	.string	"%lld\n"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB64:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	leaq	.LC0(%rip), %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rbp, %rdi
	subq	$40, %rsp
	.cfi_def_cfa_offset 64
	movq	%fs:40, %rax
	movq	%rax, 24(%rsp)
	xorl	%eax, %eax
	leaq	8(%rsp), %rsi
	call	__isoc99_scanf@PLT
	movq	%rbp, %rdi
	leaq	16(%rsp), %rsi
	xorl	%eax, %eax
	call	__isoc99_scanf@PLT
	movq	16(%rsp), %rbx
	movq	8(%rsp), %rdi
	movq	%rbx, %rax
	subq	%rdi, %rax
	cmpq	$2019, %rax
	jg	.L70
	movl	$2020, %r8d
	leaq	1(%rbx), %r10
	movabsq	$-9090891705468550697, %r9
	cmpq	%rdi, %rbx
	jle	.L72
	.p2align 4,,10
	.p2align 3
.L71:
	leaq	1(%rdi), %r11
	cmpq	%r11, %rbx
	jl	.L74
	movq	%r11, %rcx
	movq	%r11, %rsi
	imulq	%rdi, %rcx
	.p2align 4,,10
	.p2align 3
.L75:
	movq	%rcx, %rax
	imulq	%r9
	movq	%rcx, %rax
	sarq	$63, %rax
	addq	%rcx, %rdx
	sarq	$10, %rdx
	subq	%rax, %rdx
	movq	%rcx, %rax
	imulq	$2019, %rdx, %rdx
	subq	%rdx, %rax
	cmpq	%rax, %r8
	cmovg	%rax, %r8
	addq	$1, %rsi
	addq	%rdi, %rcx
	cmpq	%rsi, %r10
	jne	.L75
	cmpq	%r11, %rbx
	je	.L72
.L74:
	movq	%r11, %rdi
	jmp	.L71
	.p2align 4,,10
	.p2align 3
.L72:
	movq	%r8, %rdx
	leaq	.LC10(%rip), %rsi
	movl	$1, %edi
	xorl	%eax, %eax
	call	__printf_chk@PLT
.L73:
	movq	24(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L81
	addq	$40, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 24
	xorl	%eax, %eax
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%rbp
	.cfi_def_cfa_offset 8
	ret
.L70:
	.cfi_restore_state
	leaq	.LC9(%rip), %rdi
	call	puts@PLT
	jmp	.L73
.L81:
	call	__stack_chk_fail@PLT
	.cfi_endproc
.LFE64:
	.size	main, .-main
	.globl	is1stAns
	.data
	.align 4
	.type	is1stAns, @object
	.size	is1stAns, 4
is1stAns:
	.long	1
	.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:

#ifdef __cplusplus
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#endif

#define rep(i,n) for(ll i = 0; i < (n); ++i)
#define rep1(i, n) for(ll i = 1; i < (n); ++i)
#define rep4(i, start, end, step) for (ll i = (start); i < (end); i += (step))

#define BIG_PRIME 1000000007
#define BP_remainder(x) ((x) % BIG_PRIME)

#define INF (1 << 30)
#define INF_NEG (INF * -1)
#define INF_LONG (1LL << 62)
#define INF_LONG_NEG (INF_LONG * -1L)

typedef long long ll;
typedef char str255[256];
ll StrLen(char *s) { for(ll ptr = 0L;; ++ptr) if(!s[ptr]) return ptr; } 
// char * の後ろから n 文字削除, 削除後の文字数を返す
ll StrDel(char *s, int n) { ll l = StrLen(s); s[l - n + 1L] = '\0'; return l - n; }

ll NumDigits(ll l){ char s[30]; sprintf(s, "%lld", l); return StrLen(s); }

int is1stAns = 1;
void printI(int    i) { if (is1stAns) printf(  "%d", i), is1stAns = 0; else printf(  " %d", i); }
void printL(ll     l) { if (is1stAns) printf("%lld", l), is1stAns = 0; else printf(" %lld", l); }
void print (ll     l) { if (is1stAns) printf("%lld", l), is1stAns = 0; else printf(" %lld", l); }
void printD(double d) { if (is1stAns) printf("%.9f", d), is1stAns = 0; else printf(" %.9f", d); }
void printC(char   c) { if (is1stAns) printf(  "%c", c), is1stAns = 0; else printf(  " %c", c); }
void printS(char  *s) { if (is1stAns) printf(  "%s", s), is1stAns = 0; else printf(  " %s", s); }

#ifndef __cplusplus // C 版 min, max
ll min(ll a, ll b){ if (a < b) return a; else return b; }
ll max(ll a, ll b){ if (a > b) return a; else return b; }
#endif
#define chmin(a, b) func_chmin(&(a), (b))
void func_chmin(ll *a, ll b) { if (*a > b) *a = b; }
#define chmax(a, b) func_chmax(&(a), (b))
void func_chmax(ll *a, ll b) { if (*a < b) *a = b; }

// 入力用
#ifndef __cplusplus // C の配列動的確保用
#define newchar(n) (char *)malloc(sizeof(char) * (n))
#define newint(n) (int *)malloc(sizeof(int) * (n))
#define newll(n) (ll *)malloc(sizeof(ll) * (n))
#define newstr(n) (str255 *)malloc(sizeof(str255) * (n))
#endif

#define INPUT_LL(x) scanf("%lld", &x)
#define INPUT_CHAR(x) scanf("%c", &c)
#define INPUT_STRING(x) scanf("%s", x)

#define inll(x) ll x; INPUT_LL(x)
#define incc(x) char x; INPUT_CHAR(x)
#define inss(x) str255 x; INPUT_STRING(x)
#ifdef __cplusplus
#define invecll(x, n) vector<ll> x ((n)); rep(i, n) cin >> x [i]
#define inveccc(x, n) vector<char> x ((n)); rep(i, n) cin >> x [i]
#define invecss(x, n) vector<str255> x ((n)); rep(i, n) cin >> x [i]
#else
#define invecll(x, n) ll * x = newll(n); rep(i, n) INPUT_LL(x [i])
#define inveccc(x, n) char * x = newchar(n); rep(i, n) INPUT_CHAR(x [i])
#define invecss(x, n) str255 * x = newstr(n); rep(i, n) INPUT_STRING(x [i])
#endif

#define putll(x) printf("%lld\n", (x))
#define putcc(x) printf("%c\n", (x))

signed main()
{
#ifdef __cplusplus
    cout << fixed << setprecision(9);
#endif
    inll(L); inll(R);
    if ((R - L) > 2019){
        puts("0");
        return 0;
    }

    ll ans = 2020;
    rep4(i, L, R, 1){
        rep4(j, i + 1, R + 1, 1){
            ans = min(ans, (i * j) % 2019);
        }
    }

    putll(ans);

    return 0;
}

3 5
 4 10
 2020 3053
 1 5
 8 10
 2845 3053
 2 5
 6 8
 5 12
 9 10

12
 20
 0
 2
 72
 1
 6
 42
 30
 90

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

```c
#ifdef __cplusplus
#include <iostream>
#include <iomanip>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#endif

#define rep(i,n) for(ll i = 0; i < (n); ++i)
#define rep1(i, n) for(ll i = 1; i < (n); ++i)
#define rep4(i, start, end, step) for (ll i = (start); i < (end); i += (step))

#define BIG_PRIME 1000000007
#define BP_remainder(x) ((x) % BIG_PRIME)

#define INF (1 << 30)
#define INF_NEG (INF * -1)
#define INF_LONG (1LL << 62)
#define INF_LONG_NEG (INF_LONG * -1L)

typedef long long ll;
typedef char str255[256];
ll StrLen(char *s) { for(ll ptr = 0L;; ++ptr) if(!s[ptr]) return ptr; } 
// char * の後ろから n 文字削除, 削除後の文字数を返す
ll StrDel(char *s, int n) { ll l = StrLen(s); s[l - n + 1L] = '\0'; return l - n; }

ll NumDigits(ll l){ char s[30]; sprintf(s, "%lld", l); return StrLen(s); }

int is1stAns = 1;
void printI(int    i) { if (is1stAns) printf(  "%d", i), is1stAns = 0; else printf(  " %d", i); }
void printL(ll     l) { if (is1stAns) printf("%lld", l), is1stAns = 0; else printf(" %lld", l); }
void print (ll     l) { if (is1stAns) printf("%lld", l), is1stAns = 0; else printf(" %lld", l); }
void printD(double d) { if (is1stAns) printf("%.9f", d), is1stAns = 0; else printf(" %.9f", d); }
void printC(char   c) { if (is1stAns) printf(  "%c", c), is1stAns = 0; else printf(  " %c", c); }
void printS(char  *s) { if (is1stAns) printf(  "%s", s), is1stAns = 0; else printf(  " %s", s); }

#ifndef __cplusplus // C 版 min, max
ll min(ll a, ll b){ if (a < b) return a; else return b; }
ll max(ll a, ll b){ if (a > b) return a; else return b; }
#endif
#define chmin(a, b) func_chmin(&(a), (b))
void func_chmin(ll *a, ll b) { if (*a > b) *a = b; }
#define chmax(a, b) func_chmax(&(a), (b))
void func_chmax(ll *a, ll b) { if (*a < b) *a = b; }

// 入力用
#ifndef __cplusplus // C の配列動的確保用
#define newchar(n) (char *)malloc(sizeof(char) * (n))
#define newint(n) (int *)malloc(sizeof(int) * (n))
#define newll(n) (ll *)malloc(sizeof(ll) * (n))
#define newstr(n) (str255 *)malloc(sizeof(str255) * (n))
#endif

#define INPUT_LL(x) scanf("%lld", &x)
#define INPUT_CHAR(x) scanf("%c", &c)
#define INPUT_STRING(x) scanf("%s", x)

#define inll(x) ll x; INPUT_LL(x)
#define incc(x) char x; INPUT_CHAR(x)
#define inss(x) str255 x; INPUT_STRING(x)
#ifdef __cplusplus
#define invecll(x, n) vector<ll> x ((n)); rep(i, n) cin >> x [i]
#define inveccc(x, n) vector<char> x ((n)); rep(i, n) cin >> x [i]
#define invecss(x, n) vector<str255> x ((n)); rep(i, n) cin >> x [i]
#else
#define invecll(x, n) ll * x = newll(n); rep(i, n) INPUT_LL(x [i])
#define inveccc(x, n) char * x = newchar(n); rep(i, n) INPUT_CHAR(x [i])
#define invecss(x, n) str255 * x = newstr(n); rep(i, n) INPUT_STRING(x [i])
#endif

#define putll(x) printf("%lld\n", (x))
#define putcc(x) printf("%c\n", (x))

signed main()
{
#ifdef __cplusplus
    cout << fixed << setprecision(9);
#endif
    inll(L); inll(R);
    if ((R - L) > 2019){
        puts("0");
        return 0;
    }

    ll ans = 2020;
    rep4(i, L, R, 1){
        rep4(j, i + 1, R + 1, 1){
            ans = min(ans, (i * j) % 2019);
        }
    }

    putll(ans);

    return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	StrLen
	.type	StrLen, @function
StrLen:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -24(%rbp)
	movq	$0, -8(%rbp)
.L4:
	movq	-8(%rbp), %rdx
	movq	-24(%rbp), %rax
	addq	%rdx, %rax
	movzbl	(%rax), %eax
	testb	%al, %al
	jne	.L2
	movq	-8(%rbp), %rax
	jmp	.L5
.L2:
	addq	$1, -8(%rbp)
	jmp	.L4
.L5:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	StrLen, .-StrLen
	.globl	StrDel
	.type	StrDel, @function
StrDel:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$32, %rsp
	movq	%rdi, -24(%rbp)
	movl	%esi, -28(%rbp)
	movq	-24(%rbp), %rax
	movq	%rax, %rdi
	call	StrLen
	movq	%rax, -8(%rbp)
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	-8(%rbp), %rax
	subq	%rdx, %rax
	leaq	1(%rax), %rdx
	movq	-24(%rbp), %rax
	addq	%rdx, %rax
	movb	$0, (%rax)
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	-8(%rbp), %rax
	subq	%rdx, %rax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	StrDel, .-StrDel
	.section	.rodata
.LC0:
	.string	"%lld"
	.text
	.globl	NumDigits
	.type	NumDigits, @function
NumDigits:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$64, %rsp
	movq	%rdi, -56(%rbp)
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movq	-56(%rbp), %rdx
	leaq	-48(%rbp), %rax
	leaq	.LC0(%rip), %rcx
	movq	%rcx, %rsi
	movq	%rax, %rdi
	movl	$0, %eax
	call	sprintf@PLT
	leaq	-48(%rbp), %rax
	movq	%rax, %rdi
	call	StrLen
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L10
	call	__stack_chk_fail@PLT
.L10:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	NumDigits, .-NumDigits
	.globl	is1stAns
	.data
	.align 4
	.type	is1stAns, @object
	.size	is1stAns, 4
is1stAns:
	.long	1
	.section	.rodata
.LC1:
	.string	"%d"
.LC2:
	.string	" %d"
	.text
	.globl	printI
	.type	printI, @function
printI:
.LFB9:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L12
	movl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L14
.L12:
	movl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC2(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L14:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	printI, .-printI
	.section	.rodata
.LC3:
	.string	" %lld"
	.text
	.globl	printL
	.type	printL, @function
printL:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L16
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L18
.L16:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L18:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	printL, .-printL
	.globl	print
	.type	print, @function
print:
.LFB11:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L20
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L22
.L20:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L22:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	print, .-print
	.section	.rodata
.LC4:
	.string	"%.9f"
.LC5:
	.string	" %.9f"
	.text
	.globl	printD
	.type	printD, @function
printD:
.LFB12:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movsd	%xmm0, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L24
	movq	-8(%rbp), %rax
	movq	%rax, %xmm0
	leaq	.LC4(%rip), %rax
	movq	%rax, %rdi
	movl	$1, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L26
.L24:
	movq	-8(%rbp), %rax
	movq	%rax, %xmm0
	leaq	.LC5(%rip), %rax
	movq	%rax, %rdi
	movl	$1, %eax
	call	printf@PLT
.L26:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	printD, .-printD
	.section	.rodata
.LC6:
	.string	" %c"
	.text
	.globl	printC
	.type	printC, @function
printC:
.LFB13:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, %eax
	movb	%al, -4(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L28
	movsbl	-4(%rbp), %eax
	movl	%eax, %edi
	call	putchar@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L30
.L28:
	movsbl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC6(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L30:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	printC, .-printC
	.section	.rodata
.LC7:
	.string	"%s"
.LC8:
	.string	" %s"
	.text
	.globl	printS
	.type	printS, @function
printS:
.LFB14:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L32
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC7(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L34
.L32:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC8(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L34:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	printS, .-printS
	.globl	min
	.type	min, @function
min:
.LFB15:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	cmpq	-16(%rbp), %rax
	jge	.L36
	movq	-8(%rbp), %rax
	jmp	.L37
.L36:
	movq	-16(%rbp), %rax
.L37:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	min, .-min
	.globl	max
	.type	max, @function
max:
.LFB16:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	cmpq	-16(%rbp), %rax
	jle	.L39
	movq	-8(%rbp), %rax
	jmp	.L40
.L39:
	movq	-16(%rbp), %rax
.L40:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	max, .-max
	.globl	func_chmin
	.type	func_chmin, @function
func_chmin:
.LFB17:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	cmpq	%rax, -16(%rbp)
	jge	.L43
	movq	-8(%rbp), %rax
	movq	-16(%rbp), %rdx
	movq	%rdx, (%rax)
.L43:
	nop
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	func_chmin, .-func_chmin
	.globl	func_chmax
	.type	func_chmax, @function
func_chmax:
.LFB18:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	cmpq	%rax, -16(%rbp)
	jle	.L46
	movq	-8(%rbp), %rax
	movq	-16(%rbp), %rdx
	movq	%rdx, (%rax)
.L46:
	nop
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	func_chmax, .-func_chmax
	.section	.rodata
.LC9:
	.string	"0"
.LC10:
	.string	"%lld\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB19:
	.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	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	leaq	-48(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	leaq	-40(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movq	-40(%rbp), %rax
	movq	-48(%rbp), %rdx
	subq	%rdx, %rax
	cmpq	$2019, %rax
	jle	.L48
	leaq	.LC9(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L54
.L48:
	movq	$2020, -32(%rbp)
	movq	-48(%rbp), %rax
	movq	%rax, -24(%rbp)
	jmp	.L50
.L53:
	movq	-24(%rbp), %rax
	addq	$1, %rax
	movq	%rax, -16(%rbp)
	jmp	.L51
.L52:
	movq	-24(%rbp), %rax
	imulq	-16(%rbp), %rax
	movq	%rax, %rcx
	movabsq	$-9090891705468550697, %rdx
	movq	%rcx, %rax
	imulq	%rdx
	leaq	(%rdx,%rcx), %rax
	sarq	$10, %rax
	movq	%rcx, %rdx
	sarq	$63, %rdx
	subq	%rdx, %rax
	imulq	$2019, %rax, %rdx
	movq	%rcx, %rax
	subq	%rdx, %rax
	movq	-32(%rbp), %rdx
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	min
	movq	%rax, -32(%rbp)
	addq	$1, -16(%rbp)
.L51:
	movq	-40(%rbp), %rax
	cmpq	%rax, -16(%rbp)
	jle	.L52
	addq	$1, -24(%rbp)
.L50:
	movq	-40(%rbp), %rax
	cmpq	%rax, -24(%rbp)
	jl	.L53
	movq	-32(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC10(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
.L54:
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L55
	call	__stack_chk_fail@PLT
.L55:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.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	StrLen
	.type	StrLen, @function
StrLen:
.LFB6:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -24(%rbp)
	movq	$0, -8(%rbp)
.L4:
	movq	-8(%rbp), %rdx
	movq	-24(%rbp), %rax
	addq	%rdx, %rax
	movzbl	(%rax), %eax
	testb	%al, %al
	jne	.L2
	movq	-8(%rbp), %rax
	jmp	.L5
.L2:
	addq	$1, -8(%rbp)
	jmp	.L4
.L5:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	StrLen, .-StrLen
	.globl	StrDel
	.type	StrDel, @function
StrDel:
.LFB7:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$32, %rsp
	movq	%rdi, -24(%rbp)
	movl	%esi, -28(%rbp)
	movq	-24(%rbp), %rax
	movq	%rax, %rdi
	call	StrLen
	movq	%rax, -8(%rbp)
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	-8(%rbp), %rax
	subq	%rdx, %rax
	leaq	1(%rax), %rdx
	movq	-24(%rbp), %rax
	addq	%rdx, %rax
	movb	$0, (%rax)
	movl	-28(%rbp), %eax
	movslq	%eax, %rdx
	movq	-8(%rbp), %rax
	subq	%rdx, %rax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	StrDel, .-StrDel
	.section	.rodata
.LC0:
	.string	"%lld"
	.text
	.globl	NumDigits
	.type	NumDigits, @function
NumDigits:
.LFB8:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$64, %rsp
	movq	%rdi, -56(%rbp)
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	movq	-56(%rbp), %rdx
	leaq	-48(%rbp), %rax
	leaq	.LC0(%rip), %rcx
	movq	%rcx, %rsi
	movq	%rax, %rdi
	movl	$0, %eax
	call	sprintf@PLT
	leaq	-48(%rbp), %rax
	movq	%rax, %rdi
	call	StrLen
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L10
	call	__stack_chk_fail@PLT
.L10:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	NumDigits, .-NumDigits
	.globl	is1stAns
	.data
	.align 4
	.type	is1stAns, @object
	.size	is1stAns, 4
is1stAns:
	.long	1
	.section	.rodata
.LC1:
	.string	"%d"
.LC2:
	.string	" %d"
	.text
	.globl	printI
	.type	printI, @function
printI:
.LFB9:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, -4(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L12
	movl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L14
.L12:
	movl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC2(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L14:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	printI, .-printI
	.section	.rodata
.LC3:
	.string	" %lld"
	.text
	.globl	printL
	.type	printL, @function
printL:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L16
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L18
.L16:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L18:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.size	printL, .-printL
	.globl	print
	.type	print, @function
print:
.LFB11:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L20
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L22
.L20:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC3(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L22:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE11:
	.size	print, .-print
	.section	.rodata
.LC4:
	.string	"%.9f"
.LC5:
	.string	" %.9f"
	.text
	.globl	printD
	.type	printD, @function
printD:
.LFB12:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movsd	%xmm0, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L24
	movq	-8(%rbp), %rax
	movq	%rax, %xmm0
	leaq	.LC4(%rip), %rax
	movq	%rax, %rdi
	movl	$1, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L26
.L24:
	movq	-8(%rbp), %rax
	movq	%rax, %xmm0
	leaq	.LC5(%rip), %rax
	movq	%rax, %rdi
	movl	$1, %eax
	call	printf@PLT
.L26:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE12:
	.size	printD, .-printD
	.section	.rodata
.LC6:
	.string	" %c"
	.text
	.globl	printC
	.type	printC, @function
printC:
.LFB13:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	%edi, %eax
	movb	%al, -4(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L28
	movsbl	-4(%rbp), %eax
	movl	%eax, %edi
	call	putchar@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L30
.L28:
	movsbl	-4(%rbp), %eax
	movl	%eax, %esi
	leaq	.LC6(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L30:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE13:
	.size	printC, .-printC
	.section	.rodata
.LC7:
	.string	"%s"
.LC8:
	.string	" %s"
	.text
	.globl	printS
	.type	printS, @function
printS:
.LFB14:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movq	%rdi, -8(%rbp)
	movl	is1stAns(%rip), %eax
	testl	%eax, %eax
	je	.L32
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC7(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, is1stAns(%rip)
	jmp	.L34
.L32:
	movq	-8(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC8(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
.L34:
	nop
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE14:
	.size	printS, .-printS
	.globl	min
	.type	min, @function
min:
.LFB15:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	cmpq	-16(%rbp), %rax
	jge	.L36
	movq	-8(%rbp), %rax
	jmp	.L37
.L36:
	movq	-16(%rbp), %rax
.L37:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE15:
	.size	min, .-min
	.globl	max
	.type	max, @function
max:
.LFB16:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	cmpq	-16(%rbp), %rax
	jle	.L39
	movq	-8(%rbp), %rax
	jmp	.L40
.L39:
	movq	-16(%rbp), %rax
.L40:
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE16:
	.size	max, .-max
	.globl	func_chmin
	.type	func_chmin, @function
func_chmin:
.LFB17:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	cmpq	%rax, -16(%rbp)
	jge	.L43
	movq	-8(%rbp), %rax
	movq	-16(%rbp), %rdx
	movq	%rdx, (%rax)
.L43:
	nop
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE17:
	.size	func_chmin, .-func_chmin
	.globl	func_chmax
	.type	func_chmax, @function
func_chmax:
.LFB18:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	cmpq	%rax, -16(%rbp)
	jle	.L46
	movq	-8(%rbp), %rax
	movq	-16(%rbp), %rdx
	movq	%rdx, (%rax)
.L46:
	nop
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE18:
	.size	func_chmax, .-func_chmax
	.section	.rodata
.LC9:
	.string	"0"
.LC10:
	.string	"%lld\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB19:
	.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	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	leaq	-48(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	leaq	-40(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movq	-40(%rbp), %rax
	movq	-48(%rbp), %rdx
	subq	%rdx, %rax
	cmpq	$2019, %rax
	jle	.L48
	leaq	.LC9(%rip), %rax
	movq	%rax, %rdi
	call	puts@PLT
	movl	$0, %eax
	jmp	.L54
.L48:
	movq	$2020, -32(%rbp)
	movq	-48(%rbp), %rax
	movq	%rax, -24(%rbp)
	jmp	.L50
.L53:
	movq	-24(%rbp), %rax
	addq	$1, %rax
	movq	%rax, -16(%rbp)
	jmp	.L51
.L52:
	movq	-24(%rbp), %rax
	imulq	-16(%rbp), %rax
	movq	%rax, %rcx
	movabsq	$-9090891705468550697, %rdx
	movq	%rcx, %rax
	imulq	%rdx
	leaq	(%rdx,%rcx), %rax
	sarq	$10, %rax
	movq	%rcx, %rdx
	sarq	$63, %rdx
	subq	%rdx, %rax
	imulq	$2019, %rax, %rdx
	movq	%rcx, %rax
	subq	%rdx, %rax
	movq	-32(%rbp), %rdx
	movq	%rax, %rsi
	movq	%rdx, %rdi
	call	min
	movq	%rax, -32(%rbp)
	addq	$1, -16(%rbp)
.L51:
	movq	-40(%rbp), %rax
	cmpq	%rax, -16(%rbp)
	jle	.L52
	addq	$1, -24(%rbp)
.L50:
	movq	-40(%rbp), %rax
	cmpq	%rax, -24(%rbp)
	jl	.L53
	movq	-32(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC10(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
.L54:
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L55
	call	__stack_chk_fail@PLT
.L55:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE19:
	.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:
