// File: It4innovations[P]Handicap/src/GraphLabelings/GraphLabeling.h
// Function: GraphLabeling::solve(int, std::mutex&)
void solve(int label, std::mutex & mut) {
			++this->levelOfRecursion;
			const int freeSlots = solution->getFreeCellsInColumn(label);

			generator->setSizeOfSet(freeSlots);
			generator->setCurrentLabel(label);
			generator->setMissingWeight(this->solution->getWeight(label));
			generator->computePossibleCombination(intermediateNSumResults[levelOfRecursion], solution);

			const int resultsCount = (int) this->intermediateNSumResults[levelOfRecursion].size() / freeSlots;
			for (int position = 0; position < resultsCount; ++position) {
				// mark numbers to solution
				this->markLabelsToSolution(label, freeSlots);

				for (int slot = 0; slot < freeSlots; ++slot) {
					this->intermediateNSumResults[levelOfRecursion].emplace(this->disabledNumbersArray[slot]);
				}

				if (solution->getFilledCells() == graph->getEdgesCount() * 2) {
					if (this->solutionValidator->validate(solution)) {
						std::lock_guard<std::mutex> lock{mut};
						++GraphLabeling::numberOfSolution;
						solutionPrinter->print(solution, GraphLabeling::numberOfSolution);
					}

				} else {
					const int nextLabelIndex = solution->selectNextLabel();
					this->solve(nextLabelIndex, mut);
				}
				// unmark numbers from solution
				this->unmarkLabelsFromSolution(label, freeSlots);
			}
			--levelOfRecursion;
		}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movl %esi, 0x6c(%rsp)
movq %rdx, 0x60(%rsp)
movq 0x70(%rsp), %rdi
movq %rdi, 0x28(%rsp)
movl 0x40(%rdi), %eax
addl $0x1, %eax
movl %eax, 0x40(%rdi)
addq $0x10, %rdi
callq 0xf630
movq %rax, %rdi
leaq 0x6c(%rsp), %rsi
callq 0x11f10
movq 0x28(%rsp), %rdi
movl %eax, 0x5c(%rsp)
addq $0x28, %rdi
callq 0x12870
movq %rax, %rdi
leaq 0x5c(%rsp), %rsi
callq 0x12880
movq 0x28(%rsp), %rdi
addq $0x28, %rdi
callq 0x12870
movq %rax, %rdi
leaq 0x6c(%rsp), %rsi
callq 0x128a0
movq 0x28(%rsp), %rdi
addq $0x28, %rdi
callq 0x12870
movq 0x28(%rsp), %rdi
movq %rax, 0x18(%rsp)
addq $0x10, %rdi
callq 0xf630
movq %rax, %rdi
leaq 0x6c(%rsp), %rsi
callq 0x128e0
movq 0x18(%rsp), %rdi
movl %eax, 0x58(%rsp)
leaq 0x58(%rsp), %rsi
callq 0x128c0
movq 0x28(%rsp), %rdi
addq $0x28, %rdi
callq 0x12870
movq %rax, %rcx
movq 0x28(%rsp), %rax
movq %rcx, 0x20(%rsp)
movq %rax, %rdi
addq $0x30, %rdi
movslq 0x40(%rax), %rsi
callq 0x11f40
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rdx
movq %rax, %rsi
addq $0x10, %rdx
callq 0x12910
movq 0x28(%rsp), %rax
movq %rax, %rdi
addq $0x30, %rdi
movslq 0x40(%rax), %rsi
callq 0x11f40
movq %rax, %rdi
callq 0x4080
cltd
idivl 0x5c(%rsp)
movl %eax, 0x54(%rsp)
movl $0x0, 0x50(%rsp)
movl 0x50(%rsp), %eax
cmpl 0x54(%rsp), %eax
jge 0x1244a
movq 0x28(%rsp), %rdi
movl 0x6c(%rsp), %esi
movl 0x5c(%rsp), %edx
callq 0x11f90
movl $0x0, 0x4c(%rsp)
movl 0x4c(%rsp), %eax
cmpl 0x5c(%rsp), %eax
jge 0x1232e
movq 0x28(%rsp), %rax
movq %rax, %rdi
addq $0x30, %rdi
movslq 0x40(%rax), %rsi
callq 0x11f40
movq 0x28(%rsp), %rdi
movq %rax, 0x10(%rsp)
addq $0x38, %rdi
movslq 0x4c(%rsp), %rsi
callq 0x3290
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x32d0
movl 0x4c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4c(%rsp)
jmp 0x122dd
movq 0x28(%rsp), %rdi
addq $0x10, %rdi
callq 0xf630
movq %rax, %rdi
callq 0x12b50
movq 0x28(%rsp), %rdi
movl %eax, 0xc(%rsp)
callq 0x3f90
movq %rax, %rdi
callq 0x6680
movl %eax, %ecx
movl 0xc(%rsp), %eax
shll %ecx
cmpl %ecx, %eax
jne 0x123fb
movq 0x28(%rsp), %rdi
addq $0x18, %rdi
callq 0x12b60
movq 0x28(%rsp), %rsi
movq %rax, %rdi
addq $0x10, %rsi
callq 0x12b70
testb $0x1, %al
jne 0x1238f
jmp 0x123f9
movq 0x60(%rsp), %rsi
leaq 0x40(%rsp), %rdi
callq 0x9460
movq 0x28(%rsp), %rdi
movl 0xee07(%rip), %eax      # 0x211b0
incl %eax
movl %eax, 0xedff(%rip)      # 0x211b0
addq $0x20, %rdi
callq 0x12c20
movq 0x28(%rsp), %rsi
movq %rax, %rdi
addq $0x10, %rsi
movl 0xede4(%rip), %edx      # 0x211b0
callq 0x12c30
jmp 0x123d3
leaq 0x40(%rsp), %rdi
callq 0x94c0
jmp 0x123f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x38(%rsp)
movl %eax, 0x34(%rsp)
leaq 0x40(%rsp), %rdi
callq 0x94c0
jmp 0x1245d
jmp 0x12428
movq 0x28(%rsp), %rdi
addq $0x10, %rdi
callq 0xf630
movq %rax, %rdi
callq 0x120a0
movq 0x28(%rsp), %rdi
movl %eax, 0x30(%rsp)
movl 0x30(%rsp), %esi
movq 0x60(%rsp), %rdx
callq 0x12190
movq 0x28(%rsp), %rdi
movl 0x6c(%rsp), %esi
movl 0x5c(%rsp), %edx
callq 0x12470
movl 0x50(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x50(%rsp)
jmp 0x122b5
movq 0x28(%rsp), %rax
movl 0x40(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x40(%rax)
addq $0x78, %rsp
retq
movq 0x38(%rsp), %rdi
callq 0x22b0
nopw (%rax,%rax)