// File: 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:
subq $0x98, %rsp
movl $0x0, 0x94(%rsp)
movq 0x3a87(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, (%rsp)
movl $0x2, %esi
movq %rsi, %rdi
callq 0x1280
movq (%rsp), %rdi
movq %rax, %rdx
leaq 0x1a89(%rip), %rsi      # 0x3004
movb $0x0, %al
callq 0x10b0
movq 0x3a57(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x8(%rsp)
movl $0x2, %edi
movl $0x3, %esi
callq 0x1280
movq 0x8(%rsp), %rdi
movq %rax, %rdx
leaq 0x1a61(%rip), %rsi      # 0x3010
movb $0x0, %al
callq 0x10b0
movq 0x3a23(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x10(%rsp)
movl $0x2, %edi
movl $0x4, %esi
callq 0x1280
movq 0x10(%rsp), %rdi
movq %rax, %rdx
leaq 0x1a39(%rip), %rsi      # 0x301c
movb $0x0, %al
callq 0x10b0
movq 0x39ef(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movl $0x3, %esi
movq %rsi, %rdi
callq 0x1280
movq 0x18(%rsp), %rdi
movq %rax, %rdx
leaq 0x1a13(%rip), %rsi      # 0x3028
movb $0x0, %al
callq 0x10b0
movq 0x39bd(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x20(%rsp)
movl $0xa, %edi
movl $0x2, %esi
callq 0x1340
movq 0x20(%rsp), %rdi
movq %rax, %rdx
leaq 0x19eb(%rip), %rsi      # 0x3034
movb $0x0, %al
callq 0x10b0
movq 0x3989(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x28(%rsp)
movl $0xc, %edi
movl $0x4, %esi
callq 0x1340
movq 0x28(%rsp), %rdi
movq %rax, %rdx
leaq 0x19c6(%rip), %rsi      # 0x3043
movb $0x0, %al
callq 0x10b0
movq 0x3955(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x30(%rsp)
movl $0x3127a12a, %edi       # imm = 0x3127A12A
movl $0x1893d095, %esi       # imm = 0x1893D095
callq 0x1340
movq 0x30(%rsp), %rdi
movq %rax, %rdx
leaq 0x19a1(%rip), %rsi      # 0x3052
movb $0x0, %al
callq 0x10b0
movq 0x3921(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x38(%rsp)
movl $0x3, %edi
callq 0x1380
movq 0x38(%rsp), %rdi
movq %rax, %rdx
leaq 0x19c4(%rip), %rsi      # 0x30a4
movb $0x0, %al
callq 0x10b0
movq 0x38f2(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x40(%rsp)
movl $0x4, %edi
callq 0x1380
movq 0x40(%rsp), %rdi
movq %rax, %rdx
leaq 0x1967(%rip), %rsi      # 0x3076
movb $0x0, %al
callq 0x10b0
movq 0x38c3(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x48(%rsp)
movl $0x5, %edi
callq 0x1380
movq 0x48(%rsp), %rdi
movq %rax, %rdx
leaq 0x1943(%rip), %rsi      # 0x3081
movb $0x0, %al
callq 0x10b0
movq 0x3894(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x50(%rsp)
movl $0x6, %edi
callq 0x1380
movq 0x50(%rsp), %rdi
movq %rax, %rdx
leaq 0x191f(%rip), %rsi      # 0x308c
movb $0x0, %al
callq 0x10b0
movq 0x3865(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x58(%rsp)
movl $0xc, %edi
callq 0x1380
movq 0x58(%rsp), %rdi
movq %rax, %rdx
leaq 0x18fb(%rip), %rsi      # 0x3097
movb $0x0, %al
callq 0x10b0
movq 0x3836(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x60(%rsp)
movl $0xd, %edi
callq 0x1380
movq 0x60(%rsp), %rdi
movq %rax, %rdx
leaq 0x18d8(%rip), %rsi      # 0x30a3
movb $0x0, %al
callq 0x10b0
movq 0x3807(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x68(%rsp)
movl $0x4, %edi
xorl %eax, %eax
movl %eax, %esi
callq 0x1430
movq 0x68(%rsp), %rdi
movq %rax, %rdx
leaq 0x18b1(%rip), %rsi      # 0x30af
movb $0x0, %al
callq 0x10b0
movq 0x37d4(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x70(%rsp)
movl $0x4, %edi
movl $0x1, %esi
callq 0x1430
movq 0x70(%rsp), %rdi
movq %rax, %rdx
leaq 0x1889(%rip), %rsi      # 0x30bb
movb $0x0, %al
callq 0x10b0
movq 0x37a0(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x78(%rsp)
movl $0x4, %edi
movl $0x2, %esi
callq 0x1430
movq 0x78(%rsp), %rdi
movq %rax, %rdx
leaq 0x1861(%rip), %rsi      # 0x30c7
movb $0x0, %al
callq 0x10b0
movq 0x376c(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x80(%rsp)
movl $0x4, %edi
movl $0x3, %esi
callq 0x1430
movq 0x80(%rsp), %rdi
movq %rax, %rdx
leaq 0x1833(%rip), %rsi      # 0x30d3
movb $0x0, %al
callq 0x10b0
movq 0x3732(%rip), %rax      # 0x4fe0
movq (%rax), %rax
movq %rax, 0x88(%rsp)
movl $0x4, %esi
movq %rsi, %rdi
callq 0x1430
movq 0x88(%rsp), %rdi
movq %rax, %rdx
leaq 0x1807(%rip), %rsi      # 0x30df
movb $0x0, %al
callq 0x10b0
xorl %eax, %eax
addq $0x98, %rsp
retq
nopl (%rax)