// File: ricbit[P]dlx/cover_mrv.cc
// Function: ExactCover::run()
long run() {
    long count = 0;
    int p, i, value;
  //d1:
    int l = 0;
  d2:
    if (header[0].rlink == 0) {
      count++;
      goto d8;
    }
  //d3:
    i = header[0].rlink;
    value = nodes[i].top;
    for (int p = header[i].rlink; p != 0; p = header[p].rlink) {
      if (nodes[p].top < value) {
        i = p;
        value = nodes[p].top;
        if (value == 0) {
          break;
        }
      }
    }
  //d4:
    cover(i);
    solution[l] = nodes[i].dlink;
  d5:
    if (solution[l] == i) {
      goto d7;
    }
    p = solution[l] + 1;
    while (p != solution[l]) {
      int j = nodes[p].top;
      if (j <= 0) {
        p = nodes[p].ulink;
      } else {
        cover(j);
        p++;
      }
    }
    l++;
    goto d2;
  d6:
    p = solution[l] - 1;
    while (p != solution[l]) {
      int j = nodes[p].top;
      if (j <= 0) {
        p = nodes[p].dlink;
      } else {
        uncover(j);
        p--;
      }
    }
    i = nodes[solution[l]].top;
    solution[l] = nodes[solution[l]].dlink;
    goto d5;
  d7:
    uncover(i);
  d8:
    if (l == 0) {
      return count;
    }
    l--;
    if (nodes[solution[l]].top == 0) {
      goto d5;
    }
    goto d6;
  }

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq 0x60(%rsp), %rax
movq %rax, 0x30(%rsp)
movq $0x0, 0x58(%rsp)
movl $0x0, 0x48(%rsp)
movq 0x30(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3d90
cmpl $0x0, 0x24(%rax)
jne 0x2adb
movq 0x58(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x58(%rsp)
jmp 0x2dbb
movq 0x30(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3d90
movq 0x30(%rsp), %rdi
movl 0x24(%rax), %eax
movl %eax, 0x50(%rsp)
addq $0x18, %rdi
movslq 0x50(%rsp), %rsi
callq 0x48e0
movq 0x30(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x4c(%rsp)
movslq 0x50(%rsp), %rsi
callq 0x3d90
movl 0x24(%rax), %eax
movl %eax, 0x44(%rsp)
cmpl $0x0, 0x44(%rsp)
je 0x2b87
movq 0x30(%rsp), %rdi
addq $0x18, %rdi
movslq 0x44(%rsp), %rsi
callq 0x48e0
movl (%rax), %eax
cmpl 0x4c(%rsp), %eax
jge 0x2b6d
movq 0x30(%rsp), %rdi
movl 0x44(%rsp), %eax
movl %eax, 0x50(%rsp)
addq $0x18, %rdi
movslq 0x44(%rsp), %rsi
callq 0x48e0
movl (%rax), %eax
movl %eax, 0x4c(%rsp)
cmpl $0x0, 0x4c(%rsp)
jne 0x2b6b
jmp 0x2b87
jmp 0x2b6d
jmp 0x2b6f
movq 0x30(%rsp), %rdi
movslq 0x44(%rsp), %rsi
callq 0x3d90
movl 0x24(%rax), %eax
movl %eax, 0x44(%rsp)
jmp 0x2b1f
movq 0x30(%rsp), %rdi
movl 0x50(%rsp), %esi
callq 0x7dd0
movq 0x30(%rsp), %rdi
addq $0x18, %rdi
movslq 0x50(%rsp), %rsi
callq 0x48e0
movq 0x30(%rsp), %rdi
movl 0x8(%rax), %eax
movl %eax, 0x2c(%rsp)
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movl 0x2c(%rsp), %ecx
movl %ecx, (%rax)
movq 0x30(%rsp), %rdi
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movl (%rax), %eax
cmpl 0x50(%rsp), %eax
jne 0x2be8
jmp 0x2dad
movq 0x30(%rsp), %rdi
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0x54(%rsp)
movq 0x30(%rsp), %rdi
movl 0x54(%rsp), %eax
movl %eax, 0x28(%rsp)
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movq %rax, %rcx
movl 0x28(%rsp), %eax
cmpl (%rcx), %eax
je 0x2c81
movq 0x30(%rsp), %rdi
addq $0x18, %rdi
movslq 0x54(%rsp), %rsi
callq 0x48e0
movl (%rax), %eax
movl %eax, 0x40(%rsp)
cmpl $0x0, 0x40(%rsp)
jg 0x2c66
movq 0x30(%rsp), %rdi
addq $0x18, %rdi
movslq 0x54(%rsp), %rsi
callq 0x48e0
movl 0x4(%rax), %eax
movl %eax, 0x54(%rsp)
jmp 0x2c7f
movq 0x30(%rsp), %rdi
movl 0x40(%rsp), %esi
callq 0x7dd0
movl 0x54(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x54(%rsp)
jmp 0x2c04
movl 0x48(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x48(%rsp)
jmp 0x2ab4
movq 0x30(%rsp), %rdi
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movl (%rax), %eax
subl $0x1, %eax
movl %eax, 0x54(%rsp)
movq 0x30(%rsp), %rdi
movl 0x54(%rsp), %eax
movl %eax, 0x24(%rsp)
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movq %rax, %rcx
movl 0x24(%rsp), %eax
cmpl (%rcx), %eax
je 0x2d2a
movq 0x30(%rsp), %rdi
addq $0x18, %rdi
movslq 0x54(%rsp), %rsi
callq 0x48e0
movl (%rax), %eax
movl %eax, 0x3c(%rsp)
cmpl $0x0, 0x3c(%rsp)
jg 0x2d0f
movq 0x30(%rsp), %rdi
addq $0x18, %rdi
movslq 0x54(%rsp), %rsi
callq 0x48e0
movl 0x8(%rax), %eax
movl %eax, 0x54(%rsp)
jmp 0x2d28
movq 0x30(%rsp), %rdi
movl 0x3c(%rsp), %esi
callq 0x7ea0
movl 0x54(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x54(%rsp)
jmp 0x2cad
movq 0x30(%rsp), %rdi
movq %rdi, %rax
addq $0x18, %rax
movq %rax, 0x10(%rsp)
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movq 0x10(%rsp), %rdi
movslq (%rax), %rsi
callq 0x48e0
movq 0x30(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x50(%rsp)
movq %rdi, %rax
addq $0x18, %rax
movq %rax, 0x18(%rsp)
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movq 0x18(%rsp), %rdi
movslq (%rax), %rsi
callq 0x48e0
movq 0x30(%rsp), %rdi
movl 0x8(%rax), %eax
movl %eax, 0x20(%rsp)
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movl 0x20(%rsp), %ecx
movl %ecx, (%rax)
jmp 0x2bc8
movq 0x30(%rsp), %rdi
movl 0x50(%rsp), %esi
callq 0x7ea0
cmpl $0x0, 0x48(%rsp)
jne 0x2dcc
movq 0x58(%rsp), %rax
addq $0x68, %rsp
retq
movq 0x30(%rsp), %rdi
movl 0x48(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x48(%rsp)
movq %rdi, %rax
addq $0x18, %rax
movq %rax, 0x8(%rsp)
addq $0x30, %rdi
movslq 0x48(%rsp), %rsi
callq 0x4900
movq 0x8(%rsp), %rdi
movslq (%rax), %rsi
callq 0x48e0
cmpl $0x0, (%rax)
jne 0x2e0d
jmp 0x2bc8
jmp 0x2c91
nopw %cs:(%rax,%rax)
nopl (%rax)