// File: /workspace/github_cpp_makefile_star2_O1/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 0x2f0e(%rip), %r13      # 0x3fe0
movq (%r13), %r14
pushq $0x2
popq %rbx
movq %rbx, %rdi
movq %rbx, %rsi
callq 0x14dc
leaq 0xf19(%rip), %rsi       # 0x2004
movq %r14, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r15
pushq $0x3
popq %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x14dc
leaq 0xefe(%rip), %rsi       # 0x2010
movq %r15, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
pushq $0x4
popq %r15
movq %rbx, %rdi
movq %r15, %rsi
callq 0x14dc
leaq 0xee3(%rip), %rsi       # 0x201c
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movq %r14, %rdi
movq %r14, %rsi
callq 0x14dc
leaq 0xecc(%rip), %rsi       # 0x2028
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movl $0x3b9aca05, %esi       # imm = 0x3B9ACA05
movq %rbx, %rdi
callq 0x14dc
imulq $0xa, %rax, %rax
movl $0x3b9aca07, %ebp       # imm = 0x3B9ACA07
cqto
idivq %rbp
leaq 0xea5(%rip), %rsi       # 0x2034
movq %r12, %rdi
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movl $0x3b9aca05, %esi       # imm = 0x3B9ACA05
movq %r15, %rdi
callq 0x14dc
imulq $0xc, %rax, %rax
cqto
idivq %rbp
leaq 0xe89(%rip), %rsi       # 0x2043
movq %r12, %rdi
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movl $0x1893d095, %edi       # imm = 0x1893D095
movl $0x3b9aca05, %esi       # imm = 0x3B9ACA05
callq 0x14dc
imulq $0x3127a12a, %rax, %rax # imm = 0x3127A12A
cqto
idivq %rbp
leaq 0xe68(%rip), %rsi       # 0x2052
movq %r12, %rdi
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movq %r14, %rdi
callq 0x15c8
leaq 0xe9d(%rip), %rsi       # 0x20a4
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movq %r15, %rdi
callq 0x15c8
leaq 0xe4f(%rip), %rsi       # 0x2076
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
pushq $0x5
popq %rdi
callq 0x15c8
leaq 0xe3a(%rip), %rsi       # 0x2081
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
pushq $0x6
popq %rdi
callq 0x15c8
leaq 0xe25(%rip), %rsi       # 0x208c
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
pushq $0xc
popq %rdi
callq 0x15c8
leaq 0xe10(%rip), %rsi       # 0x2097
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
pushq $0xd
popq %rdi
callq 0x15c8
leaq 0xdfc(%rip), %rsi       # 0x20a3
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movq %r15, %rdi
xorl %esi, %esi
callq 0x168b
leaq 0xde6(%rip), %rsi       # 0x20af
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
pushq $0x1
popq %rsi
movq %r15, %rdi
callq 0x168b
leaq 0xdcf(%rip), %rsi       # 0x20bb
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %r12
movq %r15, %rdi
movq %rbx, %rsi
callq 0x168b
leaq 0xdb8(%rip), %rsi       # 0x20c7
movq %r12, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %rbx
movq %r15, %rdi
movq %r14, %rsi
callq 0x168b
leaq 0xda1(%rip), %rsi       # 0x20d3
movq %rbx, %rdi
movq %rax, %rdx
xorl %eax, %eax
callq 0x1090
movq (%r13), %rbx
movq %r15, %rdi
movq %r15, %rsi
callq 0x168b
leaq 0xd8a(%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