// File: /workspace/github_cpp_makefile_star2_O2/ruippeixotog[P]algo-lib/mod-ops.cpp
// Function: main
int main() {
  fprintf(stderr, "2^2 = %lld\n", mpow(2, 2));
  fprintf(stderr, "2^3 = %lld\n", mpow(2, 3));
  fprintf(stderr, "2^4 = %lld\n", mpow(2, 4));
  fprintf(stderr, "3^3 = %lld\n", mpow(3, 3));

  fprintf(stderr, "10 / 2 = %lld\n", mdiv(10, 2));
  fprintf(stderr, "12 / 4 = %lld\n", mdiv(12, 4));
  fprintf(stderr, "246824682468 / 123412341234 = %lld\n",
          mdiv(246824682468 % MOD, 123412341234 % MOD));

  fprintf(stderr, "3! = %lld\n", mfact(3));
  fprintf(stderr, "4! = %lld\n", mfact(4));
  fprintf(stderr, "5! = %lld\n", mfact(5));
  fprintf(stderr, "6! = %lld\n", mfact(6));
  fprintf(stderr, "12! = %lld\n", mfact(12));
  fprintf(stderr, "13! = %lld\n", mfact(13));

  fprintf(stderr, "4C0 = %lld\n", mcomb(4, 0));
  fprintf(stderr, "4C1 = %lld\n", mcomb(4, 1));
  fprintf(stderr, "4C2 = %lld\n", mcomb(4, 2));
  fprintf(stderr, "4C3 = %lld\n", mcomb(4, 3));
  fprintf(stderr, "4C4 = %lld\n", mcomb(4, 4));

  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq 0x2c24(%rip), %rbp      # 0x3fe0
movq (%rbp), %r14
pushq $0x2
popq %rbx
movq %rbx, %rdi
movq %rbx, %rsi
callq 0x120c
leaq 0xc2f(%rip), %rsi       # 0x2004
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r15
pushq $0x3
popq %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x120c
leaq 0xc14(%rip), %rsi       # 0x2010
movq %r15, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r12
pushq $0x4
popq %r15
movq %rbx, %rdi
movq %r15, %rsi
callq 0x120c
leaq 0xbf9(%rip), %rsi       # 0x201c
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r12
movq %r14, %rdi
movq %r14, %rsi
callq 0x120c
leaq 0xbe2(%rip), %rsi       # 0x2028
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r12
pushq $0xa
popq %rdi
movq %rbx, %rsi
callq 0x1272
leaq 0xbcb(%rip), %rsi       # 0x2034
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r13
pushq $0xc
popq %r12
movq %r12, %rdi
movq %r15, %rsi
callq 0x1272
leaq 0xbb3(%rip), %rsi       # 0x2043
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r13
movl $0x3127a12a, %edi       # imm = 0x3127A12A
movl $0x1893d095, %esi       # imm = 0x1893D095
callq 0x1272
leaq 0xb9b(%rip), %rsi       # 0x2052
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r13
movq %r14, %rdi
callq 0x1291
leaq 0xbcd(%rip), %rsi       # 0x20a4
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r13
movq %r15, %rdi
callq 0x1291
leaq 0xb7f(%rip), %rsi       # 0x2076
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r13
pushq $0x5
popq %rdi
callq 0x1291
leaq 0xb6a(%rip), %rsi       # 0x2081
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r13
pushq $0x6
popq %rdi
callq 0x1291
leaq 0xb55(%rip), %rsi       # 0x208c
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r13
movq %r12, %rdi
callq 0x1291
leaq 0xb40(%rip), %rsi       # 0x2097
movq %r13, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r12
pushq $0xd
popq %rdi
callq 0x1291
leaq 0xb2c(%rip), %rsi       # 0x20a3
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r12
movq %r15, %rdi
xorl %esi, %esi
callq 0x1300
leaq 0xb16(%rip), %rsi       # 0x20af
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r12
pushq $0x1
popq %rsi
movq %r15, %rdi
callq 0x1300
leaq 0xaff(%rip), %rsi       # 0x20bb
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %r12
movq %r15, %rdi
movq %rbx, %rsi
callq 0x1300
leaq 0xae8(%rip), %rsi       # 0x20c7
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %rbx
movq %r15, %rdi
movq %r14, %rsi
callq 0x1300
leaq 0xad1(%rip), %rsi       # 0x20d3
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%rbp), %rbx
movq %r15, %rdi
movq %r15, %rsi
callq 0x1300
leaq 0xaba(%rip), %rsi       # 0x20df
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop