// File: kc885[P]SAT-Solver-with-CDCL/cdcl.cpp
// Function: ck_cdcl_solver::Solver::recursion(int, int)
bool recursion(int index, int level){
            std::unordered_set<int> implied;
            if(!unitPropagate(implied,level)){
                for(auto iter = implied.begin();iter != implied.end(); iter++)
                    val_decisionLevel[*iter] = 0;
                return false;
            }
                
            int i = index;
            while(i < variableNumber && val_decisionLevel[sor[i]] != 0)
                i++;
            if(i == variableNumber)
                return true;
            
            
            decisionVar[level+1] = sor[i];
            val_decisionLevel[sor[i]] = -level-1;
            if(recursion(i+1,level+1))
                return true;
            
            decisionVar[level+1] = -sor[i];
            val_decisionLevel[sor[i]] = level+1;
            if(recursion(i+1,level+1))
                return true;
            
            val_decisionLevel[sor[i]] = 0;
            for(auto iter = implied.begin();iter != implied.end(); iter++)
                val_decisionLevel[*iter] = 0;
            return false;
        }

// Assembly:
subq $0x118, %rsp            # imm = 0x118
movq %rdi, 0x108(%rsp)
movl %esi, 0x104(%rsp)
movl %edx, 0x100(%rsp)
movq 0x108(%rsp), %rax
movq %rax, 0x68(%rsp)
leaq 0xc8(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x38f0
movq 0x68(%rsp), %rdi
movq 0x70(%rsp), %rsi
movl 0x100(%rsp), %edx
callq 0xb060
movb %al, 0x7f(%rsp)
jmp 0xb9e8
movb 0x7f(%rsp), %al
testb $0x1, %al
jne 0xbac0
jmp 0xb9f6
leaq 0xc8(%rsp), %rdi
callq 0x3980
movq %rax, 0xb0(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x39d0
movq %rax, 0xa8(%rsp)
leaq 0xb0(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0x39b0
testb $0x1, %al
jne 0xba3b
jmp 0xbaa8
movq 0x68(%rsp), %rax
addq $0x50, %rax
movq %rax, 0x60(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x3a30
movq 0x60(%rsp), %rdi
movslq (%rax), %rsi
callq 0xb970
movl $0x0, (%rax)
leaq 0xb0(%rsp), %rdi
xorl %esi, %esi
callq 0x3ac0
movq %rax, 0xa0(%rsp)
jmp 0xba0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xc0(%rsp)
movl %eax, 0xbc(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x3b60
jmp 0xbdf2
movb $0x0, 0x117(%rsp)
movl $0x1, 0x9c(%rsp)
jmp 0xbdd4
movl 0x104(%rsp), %eax
movl %eax, 0x98(%rsp)
movq 0x68(%rsp), %rdx
movl 0x98(%rsp), %ecx
xorl %eax, %eax
cmpl 0x98(%rdx), %ecx
movb %al, 0x5f(%rsp)
jge 0xbb24
movq 0x68(%rsp), %rdi
movq %rdi, %rax
addq $0x50, %rax
movq %rax, 0x50(%rsp)
addq $0x80, %rdi
movslq 0x98(%rsp), %rsi
callq 0xb970
movq 0x50(%rsp), %rdi
movslq (%rax), %rsi
callq 0xb970
cmpl $0x0, (%rax)
setne %al
movb %al, 0x5f(%rsp)
movb 0x5f(%rsp), %al
testb $0x1, %al
jne 0xbb2e
jmp 0xbb41
movl 0x98(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x98(%rsp)
jmp 0xbace
movq 0x68(%rsp), %rcx
movl 0x98(%rsp), %eax
cmpl 0x98(%rcx), %eax
jne 0xbb6d
movb $0x1, 0x117(%rsp)
movl $0x1, 0x9c(%rsp)
jmp 0xbdd4
movq 0x68(%rsp), %rdi
subq $-0x80, %rdi
movq %rdi, 0x38(%rsp)
movslq 0x98(%rsp), %rsi
callq 0xb970
movq 0x68(%rsp), %rdi
movl (%rax), %eax
movl %eax, 0x34(%rsp)
addq $0x68, %rdi
movl 0x100(%rsp), %eax
incl %eax
movslq %eax, %rsi
callq 0xb970
movl 0x34(%rsp), %edx
movq 0x38(%rsp), %rdi
movq %rax, %rcx
movq 0x68(%rsp), %rax
movl %edx, (%rcx)
movl 0x100(%rsp), %ecx
notl %ecx
movl %ecx, 0x48(%rsp)
addq $0x50, %rax
movq %rax, 0x40(%rsp)
movslq 0x98(%rsp), %rsi
callq 0xb970
movq 0x40(%rsp), %rdi
movslq (%rax), %rsi
callq 0xb970
movl 0x48(%rsp), %ecx
movq 0x68(%rsp), %rdi
movl %ecx, (%rax)
movl 0x98(%rsp), %esi
incl %esi
movl 0x100(%rsp), %edx
incl %edx
callq 0xb990
movb %al, 0x4f(%rsp)
jmp 0xbc13
movb 0x4f(%rsp), %al
testb $0x1, %al
jne 0xbc1d
jmp 0xbc35
movb $0x1, 0x117(%rsp)
movl $0x1, 0x9c(%rsp)
jmp 0xbdd4
movq 0x68(%rsp), %rdi
subq $-0x80, %rdi
movq %rdi, 0x18(%rsp)
movslq 0x98(%rsp), %rsi
callq 0xb970
movq 0x68(%rsp), %rdi
movl (%rax), %eax
negl %eax
movl %eax, 0x14(%rsp)
addq $0x68, %rdi
movl 0x100(%rsp), %eax
incl %eax
movslq %eax, %rsi
callq 0xb970
movl 0x14(%rsp), %edx
movq 0x18(%rsp), %rdi
movq %rax, %rcx
movq 0x68(%rsp), %rax
movl %edx, (%rcx)
movl 0x100(%rsp), %ecx
incl %ecx
movl %ecx, 0x2c(%rsp)
addq $0x50, %rax
movq %rax, 0x20(%rsp)
movslq 0x98(%rsp), %rsi
callq 0xb970
movq 0x20(%rsp), %rdi
movslq (%rax), %rsi
callq 0xb970
movl 0x2c(%rsp), %ecx
movq 0x68(%rsp), %rdi
movl %ecx, (%rax)
movl 0x98(%rsp), %esi
incl %esi
movl 0x100(%rsp), %edx
incl %edx
callq 0xb990
movb %al, 0x33(%rsp)
jmp 0xbcdd
movb 0x33(%rsp), %al
testb $0x1, %al
jne 0xbce7
jmp 0xbcff
movb $0x1, 0x117(%rsp)
movl $0x1, 0x9c(%rsp)
jmp 0xbdd4
movq 0x68(%rsp), %rdi
movq %rdi, %rax
addq $0x50, %rax
movq %rax, 0x8(%rsp)
addq $0x80, %rdi
movslq 0x98(%rsp), %rsi
callq 0xb970
movq 0x8(%rsp), %rdi
movslq (%rax), %rsi
callq 0xb970
movl $0x0, (%rax)
leaq 0xc8(%rsp), %rdi
callq 0x3980
movq %rax, 0x90(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x39d0
movq %rax, 0x88(%rsp)
leaq 0x90(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x39b0
testb $0x1, %al
jne 0xbd7c
jmp 0xbdc1
movq 0x68(%rsp), %rax
addq $0x50, %rax
movq %rax, (%rsp)
leaq 0x90(%rsp), %rdi
callq 0x3a30
movq (%rsp), %rdi
movslq (%rax), %rsi
callq 0xb970
movl $0x0, (%rax)
leaq 0x90(%rsp), %rdi
xorl %esi, %esi
callq 0x3ac0
movq %rax, 0x80(%rsp)
jmp 0xbd4c
movb $0x0, 0x117(%rsp)
movl $0x1, 0x9c(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0x3b60
movb 0x117(%rsp), %al
andb $0x1, %al
addq $0x118, %rsp            # imm = 0x118
retq
movq 0xc0(%rsp), %rdi
callq 0x22d0
nop