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 <string.h>
#include <math.h>
int acs(const void *a, const void *b) { 
  return *(int*)a - *(int*)b;
} /* 1,2,3,4.. */
int des(const void *a, const void *b) {
  return *(int*)b - *(int*)a;
} /* 8,7,6,5.. */
int cmp_char(const void *a, const void *b) { 
  return *(char*)a - *(char*)b;
} /* a,b,c,d.. */
int cmp_str(const void *a, const void *b) {
  return strcmp(*(const char **)a, *(const char **)b);
} /* aaa,aab.. */
#define min(a,b) (a < b ? a : b)
#define max(a,b) (a > b ? a : b)
#define rep(i, l, r) for (int i = l; i < r; i++)
#define MAX 100001
#define MOD 1000000007
#define INF 1000000009
typedef long long int lli;

int main(void) {
  int N;
  scanf("%d", &N);
  int a[MAX];
  rep(i, 0, N) scanf("%d", &a[i]);

  int max = 0;
  int count[10] = {0};
  rep(i, 0, N) {
    int ok = 1;
    for ( int s = 0; s < 3200; s += 400) {
      if ( s <= a[i] && a[i] < s+400 ) {
        count[s/400]++;
        ok = 0;
        break;
      }
    }
    if ( ok ) max++;
  }
  int min = 0;
  rep(i, 0, 10) if (count[i] > 0) min++;
  printf("%d %d\n", min ? min : 1, min + max);
  return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	acs
	.type	acs, @function
acs:
.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, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movl	(%rax), %edx
	movq	-16(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	acs, .-acs
	.globl	des
	.type	des, @function
des:
.LFB7:
	.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	-16(%rbp), %rax
	movl	(%rax), %edx
	movq	-8(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	des, .-des
	.globl	cmp_char
	.type	cmp_char, @function
cmp_char:
.LFB8:
	.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
	movzbl	(%rax), %eax
	movsbl	%al, %edx
	movq	-16(%rbp), %rax
	movzbl	(%rax), %eax
	movsbl	%al, %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	cmp_char, .-cmp_char
	.globl	cmp_str
	.type	cmp_str, @function
cmp_str:
.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
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-16(%rbp), %rax
	movq	(%rax), %rdx
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	movq	%rdx, %rsi
	movq	%rax, %rdi
	call	strcmp@PLT
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	cmp_str, .-cmp_str
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"%d %d\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	leaq	-397312(%rsp), %r11
.LPSRL0:
	subq	$4096, %rsp
	orq	$0, (%rsp)
	cmpq	%r11, %rsp
	jne	.LPSRL0
	subq	$2784, %rsp
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	leaq	-400096(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -400092(%rbp)
	jmp	.L10
.L11:
	leaq	-400016(%rbp), %rdx
	movl	-400092(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	addl	$1, -400092(%rbp)
.L10:
	movl	-400096(%rbp), %eax
	cmpl	%eax, -400092(%rbp)
	jl	.L11
	movl	$0, -400088(%rbp)
	movq	$0, -400064(%rbp)
	movq	$0, -400056(%rbp)
	movq	$0, -400048(%rbp)
	movq	$0, -400040(%rbp)
	movq	$0, -400032(%rbp)
	movl	$0, -400084(%rbp)
	jmp	.L12
.L18:
	movl	$1, -400080(%rbp)
	movl	$0, -400076(%rbp)
	jmp	.L13
.L16:
	movl	-400084(%rbp), %eax
	cltq
	movl	-400016(%rbp,%rax,4), %eax
	cmpl	%eax, -400076(%rbp)
	jg	.L14
	movl	-400076(%rbp), %eax
	leal	399(%rax), %edx
	movl	-400084(%rbp), %eax
	cltq
	movl	-400016(%rbp,%rax,4), %eax
	cmpl	%eax, %edx
	jl	.L14
	movl	-400076(%rbp), %eax
	movslq	%eax, %rdx
	imulq	$1374389535, %rdx, %rdx
	shrq	$32, %rdx
	sarl	$7, %edx
	sarl	$31, %eax
	movl	%eax, %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	movslq	%eax, %rdx
	movl	-400064(%rbp,%rdx,4), %edx
	addl	$1, %edx
	cltq
	movl	%edx, -400064(%rbp,%rax,4)
	movl	$0, -400080(%rbp)
	jmp	.L15
.L14:
	addl	$400, -400076(%rbp)
.L13:
	cmpl	$3199, -400076(%rbp)
	jle	.L16
.L15:
	cmpl	$0, -400080(%rbp)
	je	.L17
	addl	$1, -400088(%rbp)
.L17:
	addl	$1, -400084(%rbp)
.L12:
	movl	-400096(%rbp), %eax
	cmpl	%eax, -400084(%rbp)
	jl	.L18
	movl	$0, -400072(%rbp)
	movl	$0, -400068(%rbp)
	jmp	.L19
.L21:
	movl	-400068(%rbp), %eax
	cltq
	movl	-400064(%rbp,%rax,4), %eax
	testl	%eax, %eax
	jle	.L20
	addl	$1, -400072(%rbp)
.L20:
	addl	$1, -400068(%rbp)
.L19:
	cmpl	$9, -400068(%rbp)
	jle	.L21
	movl	-400072(%rbp), %edx
	movl	-400088(%rbp), %eax
	addl	%eax, %edx
	cmpl	$0, -400072(%rbp)
	je	.L22
	movl	-400072(%rbp), %eax
	jmp	.L23
.L22:
	movl	$1, %eax
.L23:
	movl	%eax, %esi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L25
	call	__stack_chk_fail@PLT
.L25:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.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	acs
	.type	acs, @function
acs:
.LFB51:
	.cfi_startproc
	endbr64
	movl	(%rdi), %eax
	subl	(%rsi), %eax
	ret
	.cfi_endproc
.LFE51:
	.size	acs, .-acs
	.p2align 4
	.globl	des
	.type	des, @function
des:
.LFB52:
	.cfi_startproc
	endbr64
	movl	(%rsi), %eax
	subl	(%rdi), %eax
	ret
	.cfi_endproc
.LFE52:
	.size	des, .-des
	.p2align 4
	.globl	cmp_char
	.type	cmp_char, @function
cmp_char:
.LFB53:
	.cfi_startproc
	endbr64
	movsbl	(%rdi), %eax
	movsbl	(%rsi), %edx
	subl	%edx, %eax
	ret
	.cfi_endproc
.LFE53:
	.size	cmp_char, .-cmp_char
	.p2align 4
	.globl	cmp_str
	.type	cmp_str, @function
cmp_str:
.LFB54:
	.cfi_startproc
	endbr64
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	strcmp@PLT
	.cfi_endproc
.LFE54:
	.size	cmp_str, .-cmp_str
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d"
.LC2:
	.string	"%d %d\n"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB55:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	leaq	-397312(%rsp), %r11
	.cfi_def_cfa 11, 397352
.LPSRL0:
	subq	$4096, %rsp
	orq	$0, (%rsp)
	cmpq	%r11, %rsp
	jne	.LPSRL0
	.cfi_def_cfa_register 7
	subq	$2776, %rsp
	.cfi_def_cfa_offset 400128
	leaq	.LC0(%rip), %r13
	movq	%r13, %rdi
	movq	%fs:40, %rax
	movq	%rax, 400072(%rsp)
	xorl	%eax, %eax
	leaq	12(%rsp), %rsi
	call	__isoc99_scanf@PLT
	movl	12(%rsp), %edx
	testl	%edx, %edx
	jle	.L7
	leaq	64(%rsp), %r12
	xorl	%ebx, %ebx
	movq	%r12, %rbp
	.p2align 4,,10
	.p2align 3
.L8:
	movq	%rbp, %rsi
	movq	%r13, %rdi
	xorl	%eax, %eax
	addl	$1, %ebx
	call	__isoc99_scanf@PLT
	movl	12(%rsp), %eax
	addq	$4, %rbp
	cmpl	%ebx, %eax
	jg	.L8
	movq	$0, 48(%rsp)
	pxor	%xmm0, %xmm0
	movaps	%xmm0, 16(%rsp)
	movaps	%xmm0, 32(%rsp)
	testl	%eax, %eax
	jle	.L19
	subl	$1, %eax
	leaq	4(%r12), %rdx
	xorl	%ecx, %ecx
	leaq	(%rdx,%rax,4), %rsi
	jmp	.L10
	.p2align 4,,10
	.p2align 3
.L34:
	addq	$4, %rdx
.L10:
	movl	(%r12), %eax
	testl	%eax, %eax
	js	.L12
	cmpl	$399, %eax
	jle	.L20
	cmpl	$799, %eax
	jle	.L21
	cmpl	$1199, %eax
	jle	.L22
	cmpl	$1599, %eax
	jle	.L23
	cmpl	$1999, %eax
	jle	.L24
	cmpl	$2399, %eax
	jle	.L25
	cmpl	$2799, %eax
	jle	.L26
	subl	$2800, %eax
	cmpl	$399, %eax
	jbe	.L33
.L12:
	addl	$1, %ecx
.L11:
	movq	%rdx, %r12
	cmpq	%rdx, %rsi
	jne	.L34
.L9:
	movdqa	16(%rsp), %xmm1
	pxor	%xmm2, %xmm2
	movdqa	32(%rsp), %xmm0
	movl	48(%rsp), %eax
	pcmpgtd	%xmm2, %xmm1
	pcmpgtd	%xmm2, %xmm0
	pand	.LC1(%rip), %xmm0
	psubd	%xmm1, %xmm0
	movdqa	%xmm0, %xmm1
	psrldq	$8, %xmm1
	paddd	%xmm1, %xmm0
	movdqa	%xmm0, %xmm1
	psrldq	$4, %xmm1
	paddd	%xmm1, %xmm0
	movd	%xmm0, %edx
	testl	%eax, %eax
	jle	.L14
	addl	$1, %edx
	cmpl	$0, 52(%rsp)
	jle	.L35
.L15:
	addl	$1, %edx
	addl	%edx, %ecx
.L17:
	xorl	%eax, %eax
	leaq	.LC2(%rip), %rsi
	movl	$1, %edi
	call	__printf_chk@PLT
	movq	400072(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L36
	addq	$400088, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 40
	xorl	%eax, %eax
	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
.L14:
	.cfi_restore_state
	cmpl	$0, 52(%rsp)
	jg	.L15
	addl	%edx, %ecx
	testl	%edx, %edx
	jne	.L17
	movl	$1, %edx
	jmp	.L17
.L20:
	xorl	%eax, %eax
	.p2align 4,,10
	.p2align 3
.L13:
	imulq	$1374389535, %rax, %rax
	shrq	$39, %rax
	addl	$1, 16(%rsp,%rax,4)
	jmp	.L11
.L21:
	movl	$400, %eax
	jmp	.L13
.L23:
	movl	$1200, %eax
	jmp	.L13
.L22:
	movl	$800, %eax
	jmp	.L13
.L24:
	movl	$1600, %eax
	jmp	.L13
.L25:
	movl	$2000, %eax
	jmp	.L13
.L26:
	movl	$2400, %eax
	jmp	.L13
.L33:
	movl	$2800, %eax
	jmp	.L13
.L7:
	leaq	16(%rsp), %rdi
	movl	$10, %ecx
	xorl	%eax, %eax
	rep stosl
	jmp	.L9
.L19:
	xorl	%ecx, %ecx
	jmp	.L9
.L36:
	call	__stack_chk_fail@PLT
.L35:
	addl	%edx, %ecx
	jmp	.L17
	.cfi_endproc
.LFE55:
	.size	main, .-main
	.section	.rodata.cst16,"aM",@progbits,16
	.align 16
.LC1:
	.long	1
	.long	1
	.long	1
	.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	acs
	.type	acs, @function
acs:
.LFB51:
	.cfi_startproc
	endbr64
	movl	(%rdi), %eax
	subl	(%rsi), %eax
	ret
	.cfi_endproc
.LFE51:
	.size	acs, .-acs
	.p2align 4
	.globl	des
	.type	des, @function
des:
.LFB52:
	.cfi_startproc
	endbr64
	movl	(%rsi), %eax
	subl	(%rdi), %eax
	ret
	.cfi_endproc
.LFE52:
	.size	des, .-des
	.p2align 4
	.globl	cmp_char
	.type	cmp_char, @function
cmp_char:
.LFB53:
	.cfi_startproc
	endbr64
	movsbl	(%rdi), %eax
	movsbl	(%rsi), %edx
	subl	%edx, %eax
	ret
	.cfi_endproc
.LFE53:
	.size	cmp_char, .-cmp_char
	.p2align 4
	.globl	cmp_str
	.type	cmp_str, @function
cmp_str:
.LFB54:
	.cfi_startproc
	endbr64
	movq	(%rsi), %rsi
	movq	(%rdi), %rdi
	jmp	strcmp@PLT
	.cfi_endproc
.LFE54:
	.size	cmp_str, .-cmp_str
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"%d"
.LC2:
	.string	"%d %d\n"
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB55:
	.cfi_startproc
	endbr64
	pushq	%r13
	.cfi_def_cfa_offset 16
	.cfi_offset 13, -16
	pushq	%r12
	.cfi_def_cfa_offset 24
	.cfi_offset 12, -24
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	leaq	-397312(%rsp), %r11
	.cfi_def_cfa 11, 397352
.LPSRL0:
	subq	$4096, %rsp
	orq	$0, (%rsp)
	cmpq	%r11, %rsp
	jne	.LPSRL0
	.cfi_def_cfa_register 7
	subq	$2776, %rsp
	.cfi_def_cfa_offset 400128
	leaq	.LC0(%rip), %r13
	movq	%r13, %rdi
	movq	%fs:40, %rax
	movq	%rax, 400072(%rsp)
	xorl	%eax, %eax
	leaq	12(%rsp), %rsi
	call	__isoc99_scanf@PLT
	movl	12(%rsp), %edx
	testl	%edx, %edx
	jle	.L7
	leaq	64(%rsp), %r12
	xorl	%ebx, %ebx
	movq	%r12, %rbp
	.p2align 4,,10
	.p2align 3
.L8:
	movq	%rbp, %rsi
	movq	%r13, %rdi
	xorl	%eax, %eax
	addl	$1, %ebx
	call	__isoc99_scanf@PLT
	movl	12(%rsp), %eax
	addq	$4, %rbp
	cmpl	%ebx, %eax
	jg	.L8
	movq	$0, 48(%rsp)
	pxor	%xmm0, %xmm0
	movaps	%xmm0, 16(%rsp)
	movaps	%xmm0, 32(%rsp)
	testl	%eax, %eax
	jle	.L19
	subl	$1, %eax
	leaq	4(%r12), %rdx
	xorl	%ecx, %ecx
	leaq	(%rdx,%rax,4), %rsi
	jmp	.L10
	.p2align 4,,10
	.p2align 3
.L34:
	addq	$4, %rdx
.L10:
	movl	(%r12), %eax
	testl	%eax, %eax
	js	.L12
	cmpl	$399, %eax
	jle	.L20
	cmpl	$799, %eax
	jle	.L21
	cmpl	$1199, %eax
	jle	.L22
	cmpl	$1599, %eax
	jle	.L23
	cmpl	$1999, %eax
	jle	.L24
	cmpl	$2399, %eax
	jle	.L25
	cmpl	$2799, %eax
	jle	.L26
	subl	$2800, %eax
	cmpl	$399, %eax
	jbe	.L33
.L12:
	addl	$1, %ecx
.L11:
	movq	%rdx, %r12
	cmpq	%rdx, %rsi
	jne	.L34
.L9:
	movdqa	16(%rsp), %xmm1
	pxor	%xmm2, %xmm2
	movdqa	32(%rsp), %xmm0
	movl	48(%rsp), %eax
	pcmpgtd	%xmm2, %xmm1
	pcmpgtd	%xmm2, %xmm0
	pand	.LC1(%rip), %xmm0
	psubd	%xmm1, %xmm0
	movdqa	%xmm0, %xmm1
	psrldq	$8, %xmm1
	paddd	%xmm1, %xmm0
	movdqa	%xmm0, %xmm1
	psrldq	$4, %xmm1
	paddd	%xmm1, %xmm0
	movd	%xmm0, %edx
	testl	%eax, %eax
	jle	.L14
	addl	$1, %edx
	cmpl	$0, 52(%rsp)
	jle	.L35
.L15:
	addl	$1, %edx
	addl	%edx, %ecx
.L17:
	xorl	%eax, %eax
	leaq	.LC2(%rip), %rsi
	movl	$1, %edi
	call	__printf_chk@PLT
	movq	400072(%rsp), %rax
	subq	%fs:40, %rax
	jne	.L36
	addq	$400088, %rsp
	.cfi_remember_state
	.cfi_def_cfa_offset 40
	xorl	%eax, %eax
	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
.L14:
	.cfi_restore_state
	cmpl	$0, 52(%rsp)
	jg	.L15
	addl	%edx, %ecx
	testl	%edx, %edx
	jne	.L17
	movl	$1, %edx
	jmp	.L17
.L20:
	xorl	%eax, %eax
	.p2align 4,,10
	.p2align 3
.L13:
	imulq	$1374389535, %rax, %rax
	shrq	$39, %rax
	addl	$1, 16(%rsp,%rax,4)
	jmp	.L11
.L21:
	movl	$400, %eax
	jmp	.L13
.L23:
	movl	$1200, %eax
	jmp	.L13
.L22:
	movl	$800, %eax
	jmp	.L13
.L24:
	movl	$1600, %eax
	jmp	.L13
.L25:
	movl	$2000, %eax
	jmp	.L13
.L26:
	movl	$2400, %eax
	jmp	.L13
.L33:
	movl	$2800, %eax
	jmp	.L13
.L7:
	leaq	16(%rsp), %rdi
	movl	$10, %ecx
	xorl	%eax, %eax
	rep stosl
	jmp	.L9
.L19:
	xorl	%ecx, %ecx
	jmp	.L9
.L36:
	call	__stack_chk_fail@PLT
.L35:
	addl	%edx, %ecx
	jmp	.L17
	.cfi_endproc
.LFE55:
	.size	main, .-main
	.section	.rodata.cst16,"aM",@progbits,16
	.align 16
.LC1:
	.long	1
	.long	1
	.long	1
	.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:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int acs(const void *a, const void *b) { 
  return *(int*)a - *(int*)b;
} /* 1,2,3,4.. */
int des(const void *a, const void *b) {
  return *(int*)b - *(int*)a;
} /* 8,7,6,5.. */
int cmp_char(const void *a, const void *b) { 
  return *(char*)a - *(char*)b;
} /* a,b,c,d.. */
int cmp_str(const void *a, const void *b) {
  return strcmp(*(const char **)a, *(const char **)b);
} /* aaa,aab.. */
#define min(a,b) (a < b ? a : b)
#define max(a,b) (a > b ? a : b)
#define rep(i, l, r) for (int i = l; i < r; i++)
#define MAX 100001
#define MOD 1000000007
#define INF 1000000009
typedef long long int lli;

int main(void) {
  int N;
  scanf("%d", &N);
  int a[MAX];
  rep(i, 0, N) scanf("%d", &a[i]);

  int max = 0;
  int count[10] = {0};
  rep(i, 0, N) {
    int ok = 1;
    for ( int s = 0; s < 3200; s += 400) {
      if ( s <= a[i] && a[i] < s+400 ) {
        count[s/400]++;
        ok = 0;
        break;
      }
    }
    if ( ok ) max++;
  }
  int min = 0;
  rep(i, 0, 10) if (count[i] > 0) min++;
  printf("%d %d\n", min ? min : 1, min + max);
  return 0;
}

4
2100 2500 4217 2700
 20
800 810 820 830 840 850 860 870 880 890 900 1771 920 930 940 950 960 970 980 990
 5
1100 3348 2800 3200 3200
 20
800 810 820 830 840 850 860 870 880 890 900 1771 920 930 120 950 960 970 980 990
 5
1101 3348 2955 3200 2889
 5
1101 3348 2302 3200 2889
 4
2100 4691 248 409
 20
800 1586 820 830 840 850 860 433 1213 259 900 1303 920 1028 92 950 960 970 980 990
 20
800 1586 820 830 840 850 860 433 1213 259 900 1303 920 1028 92 2243 960 970 980 990
 20
800 2108 443 830 840 1093 116 614 398 92 399 1139 1229 646 92 2243 960 970 1914 990

2 3
 2 2
 2 5
 3 3
 2 4
 3 5
 3 4
 4 4
 5 5
 6 6

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 <string.h>
#include <math.h>
int acs(const void *a, const void *b) { 
  return *(int*)a - *(int*)b;
} /* 1,2,3,4.. */
int des(const void *a, const void *b) {
  return *(int*)b - *(int*)a;
} /* 8,7,6,5.. */
int cmp_char(const void *a, const void *b) { 
  return *(char*)a - *(char*)b;
} /* a,b,c,d.. */
int cmp_str(const void *a, const void *b) {
  return strcmp(*(const char **)a, *(const char **)b);
} /* aaa,aab.. */
#define min(a,b) (a < b ? a : b)
#define max(a,b) (a > b ? a : b)
#define rep(i, l, r) for (int i = l; i < r; i++)
#define MAX 100001
#define MOD 1000000007
#define INF 1000000009
typedef long long int lli;

int main(void) {
  int N;
  scanf("%d", &N);
  int a[MAX];
  rep(i, 0, N) scanf("%d", &a[i]);

  int max = 0;
  int count[10] = {0};
  rep(i, 0, N) {
    int ok = 1;
    for ( int s = 0; s < 3200; s += 400) {
      if ( s <= a[i] && a[i] < s+400 ) {
        count[s/400]++;
        ok = 0;
        break;
      }
    }
    if ( ok ) max++;
  }
  int min = 0;
  rep(i, 0, 10) if (count[i] > 0) min++;
  printf("%d %d\n", min ? min : 1, min + max);
  return 0;
}
```

Unoptimized Assembly Code:

```assembly
	.file	"temp.c"
	.text
	.globl	acs
	.type	acs, @function
acs:
.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, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movl	(%rax), %edx
	movq	-16(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	acs, .-acs
	.globl	des
	.type	des, @function
des:
.LFB7:
	.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	-16(%rbp), %rax
	movl	(%rax), %edx
	movq	-8(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	des, .-des
	.globl	cmp_char
	.type	cmp_char, @function
cmp_char:
.LFB8:
	.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
	movzbl	(%rax), %eax
	movsbl	%al, %edx
	movq	-16(%rbp), %rax
	movzbl	(%rax), %eax
	movsbl	%al, %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	cmp_char, .-cmp_char
	.globl	cmp_str
	.type	cmp_str, @function
cmp_str:
.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
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-16(%rbp), %rax
	movq	(%rax), %rdx
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	movq	%rdx, %rsi
	movq	%rax, %rdi
	call	strcmp@PLT
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	cmp_str, .-cmp_str
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"%d %d\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	leaq	-397312(%rsp), %r11
.LPSRL0:
	subq	$4096, %rsp
	orq	$0, (%rsp)
	cmpq	%r11, %rsp
	jne	.LPSRL0
	subq	$2784, %rsp
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	leaq	-400096(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -400092(%rbp)
	jmp	.L10
.L11:
	leaq	-400016(%rbp), %rdx
	movl	-400092(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	addl	$1, -400092(%rbp)
.L10:
	movl	-400096(%rbp), %eax
	cmpl	%eax, -400092(%rbp)
	jl	.L11
	movl	$0, -400088(%rbp)
	movq	$0, -400064(%rbp)
	movq	$0, -400056(%rbp)
	movq	$0, -400048(%rbp)
	movq	$0, -400040(%rbp)
	movq	$0, -400032(%rbp)
	movl	$0, -400084(%rbp)
	jmp	.L12
.L18:
	movl	$1, -400080(%rbp)
	movl	$0, -400076(%rbp)
	jmp	.L13
.L16:
	movl	-400084(%rbp), %eax
	cltq
	movl	-400016(%rbp,%rax,4), %eax
	cmpl	%eax, -400076(%rbp)
	jg	.L14
	movl	-400076(%rbp), %eax
	leal	399(%rax), %edx
	movl	-400084(%rbp), %eax
	cltq
	movl	-400016(%rbp,%rax,4), %eax
	cmpl	%eax, %edx
	jl	.L14
	movl	-400076(%rbp), %eax
	movslq	%eax, %rdx
	imulq	$1374389535, %rdx, %rdx
	shrq	$32, %rdx
	sarl	$7, %edx
	sarl	$31, %eax
	movl	%eax, %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	movslq	%eax, %rdx
	movl	-400064(%rbp,%rdx,4), %edx
	addl	$1, %edx
	cltq
	movl	%edx, -400064(%rbp,%rax,4)
	movl	$0, -400080(%rbp)
	jmp	.L15
.L14:
	addl	$400, -400076(%rbp)
.L13:
	cmpl	$3199, -400076(%rbp)
	jle	.L16
.L15:
	cmpl	$0, -400080(%rbp)
	je	.L17
	addl	$1, -400088(%rbp)
.L17:
	addl	$1, -400084(%rbp)
.L12:
	movl	-400096(%rbp), %eax
	cmpl	%eax, -400084(%rbp)
	jl	.L18
	movl	$0, -400072(%rbp)
	movl	$0, -400068(%rbp)
	jmp	.L19
.L21:
	movl	-400068(%rbp), %eax
	cltq
	movl	-400064(%rbp,%rax,4), %eax
	testl	%eax, %eax
	jle	.L20
	addl	$1, -400072(%rbp)
.L20:
	addl	$1, -400068(%rbp)
.L19:
	cmpl	$9, -400068(%rbp)
	jle	.L21
	movl	-400072(%rbp), %edx
	movl	-400088(%rbp), %eax
	addl	%eax, %edx
	cmpl	$0, -400072(%rbp)
	je	.L22
	movl	-400072(%rbp), %eax
	jmp	.L23
.L22:
	movl	$1, %eax
.L23:
	movl	%eax, %esi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L25
	call	__stack_chk_fail@PLT
.L25:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.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	acs
	.type	acs, @function
acs:
.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, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-8(%rbp), %rax
	movl	(%rax), %edx
	movq	-16(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE6:
	.size	acs, .-acs
	.globl	des
	.type	des, @function
des:
.LFB7:
	.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	-16(%rbp), %rax
	movl	(%rax), %edx
	movq	-8(%rbp), %rax
	movl	(%rax), %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE7:
	.size	des, .-des
	.globl	cmp_char
	.type	cmp_char, @function
cmp_char:
.LFB8:
	.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
	movzbl	(%rax), %eax
	movsbl	%al, %edx
	movq	-16(%rbp), %rax
	movzbl	(%rax), %eax
	movsbl	%al, %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE8:
	.size	cmp_char, .-cmp_char
	.globl	cmp_str
	.type	cmp_str, @function
cmp_str:
.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
	movq	%rdi, -8(%rbp)
	movq	%rsi, -16(%rbp)
	movq	-16(%rbp), %rax
	movq	(%rax), %rdx
	movq	-8(%rbp), %rax
	movq	(%rax), %rax
	movq	%rdx, %rsi
	movq	%rax, %rdi
	call	strcmp@PLT
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE9:
	.size	cmp_str, .-cmp_str
	.section	.rodata
.LC0:
	.string	"%d"
.LC1:
	.string	"%d %d\n"
	.text
	.globl	main
	.type	main, @function
main:
.LFB10:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	leaq	-397312(%rsp), %r11
.LPSRL0:
	subq	$4096, %rsp
	orq	$0, (%rsp)
	cmpq	%r11, %rsp
	jne	.LPSRL0
	subq	$2784, %rsp
	movq	%fs:40, %rax
	movq	%rax, -8(%rbp)
	xorl	%eax, %eax
	leaq	-400096(%rbp), %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	movl	$0, -400092(%rbp)
	jmp	.L10
.L11:
	leaq	-400016(%rbp), %rdx
	movl	-400092(%rbp), %eax
	cltq
	salq	$2, %rax
	addq	%rdx, %rax
	movq	%rax, %rsi
	leaq	.LC0(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	__isoc99_scanf@PLT
	addl	$1, -400092(%rbp)
.L10:
	movl	-400096(%rbp), %eax
	cmpl	%eax, -400092(%rbp)
	jl	.L11
	movl	$0, -400088(%rbp)
	movq	$0, -400064(%rbp)
	movq	$0, -400056(%rbp)
	movq	$0, -400048(%rbp)
	movq	$0, -400040(%rbp)
	movq	$0, -400032(%rbp)
	movl	$0, -400084(%rbp)
	jmp	.L12
.L18:
	movl	$1, -400080(%rbp)
	movl	$0, -400076(%rbp)
	jmp	.L13
.L16:
	movl	-400084(%rbp), %eax
	cltq
	movl	-400016(%rbp,%rax,4), %eax
	cmpl	%eax, -400076(%rbp)
	jg	.L14
	movl	-400076(%rbp), %eax
	leal	399(%rax), %edx
	movl	-400084(%rbp), %eax
	cltq
	movl	-400016(%rbp,%rax,4), %eax
	cmpl	%eax, %edx
	jl	.L14
	movl	-400076(%rbp), %eax
	movslq	%eax, %rdx
	imulq	$1374389535, %rdx, %rdx
	shrq	$32, %rdx
	sarl	$7, %edx
	sarl	$31, %eax
	movl	%eax, %ecx
	movl	%edx, %eax
	subl	%ecx, %eax
	movslq	%eax, %rdx
	movl	-400064(%rbp,%rdx,4), %edx
	addl	$1, %edx
	cltq
	movl	%edx, -400064(%rbp,%rax,4)
	movl	$0, -400080(%rbp)
	jmp	.L15
.L14:
	addl	$400, -400076(%rbp)
.L13:
	cmpl	$3199, -400076(%rbp)
	jle	.L16
.L15:
	cmpl	$0, -400080(%rbp)
	je	.L17
	addl	$1, -400088(%rbp)
.L17:
	addl	$1, -400084(%rbp)
.L12:
	movl	-400096(%rbp), %eax
	cmpl	%eax, -400084(%rbp)
	jl	.L18
	movl	$0, -400072(%rbp)
	movl	$0, -400068(%rbp)
	jmp	.L19
.L21:
	movl	-400068(%rbp), %eax
	cltq
	movl	-400064(%rbp,%rax,4), %eax
	testl	%eax, %eax
	jle	.L20
	addl	$1, -400072(%rbp)
.L20:
	addl	$1, -400068(%rbp)
.L19:
	cmpl	$9, -400068(%rbp)
	jle	.L21
	movl	-400072(%rbp), %edx
	movl	-400088(%rbp), %eax
	addl	%eax, %edx
	cmpl	$0, -400072(%rbp)
	je	.L22
	movl	-400072(%rbp), %eax
	jmp	.L23
.L22:
	movl	$1, %eax
.L23:
	movl	%eax, %esi
	leaq	.LC1(%rip), %rax
	movq	%rax, %rdi
	movl	$0, %eax
	call	printf@PLT
	movl	$0, %eax
	movq	-8(%rbp), %rdx
	subq	%fs:40, %rdx
	je	.L25
	call	__stack_chk_fail@PLT
.L25:
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE10:
	.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:
