user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  jmp    L51
L68:
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  jns    L40
  mov    -0x10(%rbp),%rax
  and    $0x1,%eax
  test   %rax,%rax
  jne    L40
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L40:
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  jns    L111
  mov    -0x10(%rbp),%rax
  and    $0x1,%eax
  test   %rax,%rax
  je     L111
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L111:
  mov    -0x10(%rbp),%rax
  test   %rax,%rax
  je     L155
  mov    -0x10(%rbp),%rax
  cmp    $0x7,%rax
  jg     L166
L155:
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L166:
  mov    -0x10(%rbp),%rax
  cmp    $0x8,%rax
  jne    L159
  lea    D97(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L159:
  mov    -0x10(%rbp),%rax
  cmp    $0x9,%rax
  jne    L185
  lea    D108(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L185:
  mov    -0x10(%rbp),%rax
  cmp    $0xa,%rax
  jne    L90
  lea    D92(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L90:
  mov    -0x10(%rbp),%rax
  cmp    $0xb,%rax
  jne    L126
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L126:
  mov    -0x10(%rbp),%rax
  cmp    $0xc,%rax
  jne    L0
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L0:
  mov    -0x10(%rbp),%rax
  cmp    $0xd,%rax
  jne    L54
  lea    D101(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L51
L54:
  mov    -0x10(%rbp),%rax
  cmp    $0xd,%rax
  jle    L51
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L51:
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  cmp    $0x1,%eax
  je     L68
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L191
  call   <__stack_chk_fail@plt>
L191:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D20
datatype: string
name: disassemble_data
arguments: label: D27
datatype: string
name: disassemble_data
arguments: label: D97
datatype: string
name: disassemble_data
arguments: label: D108
datatype: string
name: disassemble_data
arguments: label: D92
datatype: string
name: disassemble_data
arguments: label: D23
datatype: string
name: disassemble_data
arguments: label: D91
datatype: string
name: disassemble_data
arguments: label: D101
datatype: string
name: disassemble_data
arguments: label: D54
datatype: string

tool: D20: Underflow!


tool: D27: Overflow!


tool: D97: 40320


tool: D108: 362880


tool: D92: 3628800


tool: D23: 39916800


tool: D91: 479001600


tool: D101: 6227020800


tool: D54: %lld

assistant: ```c
int main() {
  long long n;
  while (scanf("%lld", &n) == 1) {
    if (n < 0 && n % 2 == 0)
      printf("Underflow!\n");
    else if (n < 0 && n % 2 != 0)
      printf("Overflow!\n");
    else if (n == 0 || n <= 7)
      printf("Underflow!\n");
    else if (n == 8)
      printf("40320\n");
    else if (n == 9)
      printf("362880\n");
    else if (n == 10)
      printf("3628800\n");
    else if (n == 11)
      printf("39916800\n");
    else if (n == 12)
      printf("479001600\n");
    else if (n == 13)
      printf("6227020800\n");
    else if (n > 13)
      printf("Overflow!\n");
  }
  return 0;
}
```