// File: /workspace/github_cpp_makefile_star2_O1/Laakeri[P]Triangulator/src/PMC.cpp
// Function: PMC::findPMCs(Graph const&, PMC::valueT, int)
vector<vector<int> > findPMCs(const Graph& G, valueT upperBound, int PROBLEM) {
	assert(G.isConnected());
	vector<int> rmV(G.n);
	vector<int> order = MCS::MCS_L(G, 0, rmV);
	reverse(order.begin(), order.end());
	vector<int> ord(G.n);
	assert((int)order.size() == G.n);
	for (int i = 0; i < G.n; i++) {
		ord[order[i]] = i;
	}
	Graph nG(G.n, true);
	vector<vector<int> > PMCs = {{order[0]}};
	vector<vector<int> > minSeps = {};
	for (int i = 1; i < G.n; i++) {
		int x = order[i];
		for (int nx : G.g[x]) {
			if (ord[nx] < ord[x]) {
				nG.addEdge(nx, x);
			}
		}
		assert(nG.isConnectedOrIsolated());
		auto newMinSeps = findMinSeps(nG);
		for (auto& s : newMinSeps) {
			assert(isMinSep(nG, s));
		}
		PMCs = ONE_MORE_VERTEX(nG, PMCs, minSeps, newMinSeps, x, upperBound, PROBLEM);
		minSeps = newMinSeps;
		for (auto& pmc : PMCs) {
			assert(canFill(G, pmc, upperBound, PROBLEM));
			sort(pmc.begin(), pmc.end());
		}
		sort(PMCs.begin(), PMCs.end());
		PMCs.erase(unique(PMCs.begin(), PMCs.end()), PMCs.end());
		if (printProgress) cerr<<"ONE_MORE_VERTEX: "<<G.n<<" "<<i<<" "<<PMCs.size()<<" "<<minSeps.size()<<endl;
	}
	return PMCs;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x168, %rsp            # imm = 0x168
movl %edx, 0x4c(%rsp)
movq %rsi, %r14
movq %rdi, 0x40(%rsp)
movq %rsi, %rdi
callq 0xa156
testb %al, %al
je 0x1dd5d
movslq 0x50(%r14), %rsi
leaq 0xf8(%rsp), %rbx
leaq 0x110(%rsp), %rdx
movq %rbx, %rdi
callq 0xa6ba
leaq 0x70(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x134fd
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
cmpq %rcx, %rax
setne %dl
addq $-0x4, %rcx
cmpq %rax, %rcx
seta %sil
andb %dl, %sil
cmpb $0x1, %sil
jne 0x1d766
addq $0x4, %rax
movl -0x4(%rax), %edx
movl (%rcx), %esi
movl %esi, -0x4(%rax)
movl %edx, (%rcx)
addq $-0x4, %rcx
leaq 0x4(%rax), %rdx
cmpq %rcx, %rax
movq %rdx, %rax
jb 0x1d74c
movslq 0x50(%r14), %rsi
leaq 0xe0(%rsp), %rdi
leaq 0x110(%rsp), %rdx
callq 0xa6ba
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
subq %rax, %rcx
shrq $0x2, %rcx
cmpl %ecx, 0x50(%r14)
jne 0x1dd7c
movl 0x50(%r14), %esi
testl %esi, %esi
jle 0x1d7bf
movq 0xe0(%rsp), %rcx
xorl %edx, %edx
movslq (%rax,%rdx,4), %rsi
movl %edx, (%rcx,%rsi,4)
incq %rdx
movslq 0x50(%r14), %rsi
cmpq %rsi, %rdx
jl 0x1d7ac
leaq 0x110(%rsp), %rdi
movl $0x1, %edx
callq 0x9218
movq 0x70(%rsp), %rax
movl (%rax), %eax
leaq 0x90(%rsp), %rsi
movl %eax, (%rsi)
leaq 0x50(%rsp), %rdi
leaq 0xc8(%rsp), %rcx
movl $0x1, %edx
callq 0x121d8
leaq 0x50(%rsp), %rsi
leaq 0xb0(%rsp), %rcx
movl $0x1, %edx
movq 0x40(%rsp), %rdi
callq 0x21200
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x1d82c
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
xorps %xmm0, %xmm0
movaps %xmm0, 0x90(%rsp)
movq $0x0, 0xa0(%rsp)
cmpl $0x2, 0x50(%r14)
jl 0x1dc52
leaq 0x1a0(%rsp), %r12
movl $0x1, %ecx
movq %r14, 0x68(%rsp)
movq 0x70(%rsp), %rax
movq %rcx, 0x88(%rsp)
movslq (%rax,%rcx,4), %r15
movq 0x38(%r14), %rax
leaq (%r15,%r15,2), %rcx
movq (%rax,%rcx,8), %rbx
movq 0x8(%rax,%rcx,8), %r14
cmpq %r14, %rbx
je 0x1d8b1
movslq (%rbx), %rsi
movq 0xe0(%rsp), %rax
movl (%rax,%rsi,4), %ecx
cmpl (%rax,%r15,4), %ecx
jge 0x1d8ab
leaq 0x110(%rsp), %rdi
movl %r15d, %edx
callq 0x9512
addq $0x4, %rbx
jmp 0x1d882
leaq 0x110(%rsp), %rdi
callq 0xa1d8
testb %al, %al
je 0x1dd3e
leaq 0xc8(%rsp), %rdi
leaq 0x110(%rsp), %rsi
movq $-0x1, %rdx
callq 0x1cdf4
movq 0xc8(%rsp), %rbx
movq 0xd0(%rsp), %r14
cmpq %r14, %rbx
je 0x1d943
leaq 0x50(%rsp), %r13
movq %r13, %rdi
leaq 0x110(%rsp), %rsi
movq %rbx, %rdx
callq 0x1ba74
movq 0x58(%rsp), %rbp
subq 0x50(%rsp), %rbp
sarq $0x3, %rbp
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rbp
movq %r13, %rdi
callq 0x41fe
cmpq $0x1, %rbp
jbe 0x1dd00
addq $0x18, %rbx
jmp 0x1d8f2
movaps (%r12), %xmm0
movaps 0x10(%r12), %xmm1
movaps 0x20(%r12), %xmm2
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
movl 0x4c(%rsp), %eax
movl %eax, 0x30(%rsp)
leaq 0xb0(%rsp), %rbp
movq %rbp, %rdi
leaq 0x110(%rsp), %rsi
movq 0x40(%rsp), %rbx
movq %rbx, %rdx
leaq 0x90(%rsp), %r13
movq %r13, %rcx
leaq 0xc8(%rsp), %r14
movq %r14, %r8
movl %r15d, %r9d
callq 0x1c63e
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
movq (%rbx), %rax
movups 0x8(%rbx), %xmm0
movq 0xb0(%rsp), %rcx
movq %rcx, (%rbx)
movq 0xb8(%rsp), %rcx
movq %rcx, 0x8(%rbx)
movq 0xc0(%rsp), %rcx
movq %rcx, 0x10(%rbx)
movq 0x50(%rsp), %rcx
movq 0x58(%rsp), %rdx
movq 0x60(%rsp), %rsi
movq %rax, 0x50(%rsp)
movups %xmm0, 0x58(%rsp)
movq %rcx, 0xb0(%rsp)
movq %rdx, 0xb8(%rsp)
movq %rsi, 0xc0(%rsp)
leaq 0x50(%rsp), %rdi
callq 0x41fe
movq %rbp, %rdi
callq 0x41fe
movq %r13, %rdi
movq %r14, %rsi
callq 0x2124a
movq 0x40(%rsp), %rax
movq (%rax), %r15
movq 0x8(%rax), %r14
cmpq %r14, %r15
je 0x1dab4
movaps (%r12), %xmm0
movaps 0x10(%r12), %xmm1
movaps 0x20(%r12), %xmm2
movaps %xmm2, 0x20(%rsp)
movaps %xmm1, 0x10(%rsp)
movaps %xmm0, (%rsp)
movq 0x68(%rsp), %rdi
movq %r15, %rsi
movl 0x4c(%rsp), %edx
callq 0x1c57a
testb %al, %al
je 0x1dd1f
movq (%r15), %rbx
movq 0x8(%r15), %rbp
cmpq %rbp, %rbx
je 0x1daae
movq %rbp, %rax
subq %rbx, %rax
sarq $0x2, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xac3d
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xad20
addq $0x18, %r15
jmp 0x1da38
movq 0x40(%rsp), %rax
movq (%rax), %rbx
movq 0x8(%rax), %r15
cmpq %r15, %rbx
je 0x1db00
movq %r15, %rax
subq %rbx, %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0xb710
movq %rbx, %rdi
movq %r15, %rsi
callq 0xb7cf
movq 0x40(%rsp), %rbx
movq (%rbx), %rdi
movq 0x8(%rbx), %rsi
callq 0xc18a
movq 0x8(%rbx), %rdx
movq %rbx, %rdi
movq %rax, %rsi
callq 0xc256
cmpb $0x1, 0x632f6d(%rip)    # 0x650a94
jne 0x1dc28
movl $0x11, %edx
movq 0x184b7(%rip), %rdi     # 0x35ff0
leaq 0xe1cd(%rip), %rsi      # 0x2bd0d
callq 0x2250
movq 0x68(%rsp), %rax
movl 0x50(%rax), %esi
movq 0x1849c(%rip), %rdi     # 0x35ff0
callq 0x2300
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0xe1b2(%rip), %rsi      # 0x2bd1d
callq 0x2250
movq %rbx, %rdi
movq 0x88(%rsp), %rsi
callq 0x2300
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0xe18b(%rip), %rsi      # 0x2bd1d
callq 0x2250
movq 0x40(%rsp), %rax
movq 0x8(%rax), %rsi
subq (%rax), %rsi
sarq $0x3, %rsi
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rsi
movq %rbx, %rdi
callq 0x2150
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0xe14e(%rip), %rsi      # 0x2bd1d
callq 0x2250
movq 0x98(%rsp), %rsi
subq 0x90(%rsp), %rsi
sarq $0x3, %rsi
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rsi
movq %rbx, %rdi
callq 0x2150
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x21f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2160
leaq 0xc8(%rsp), %rdi
callq 0x41fe
movq 0x88(%rsp), %rcx
incq %rcx
movq 0x68(%rsp), %r14
movslq 0x50(%r14), %rax
cmpq %rax, %rcx
jl 0x1d860
leaq 0x90(%rsp), %rdi
callq 0x41fe
leaq 0x148(%rsp), %rdi
callq 0x41fe
leaq 0x128(%rsp), %rbx
movq %rbx, %rdi
callq 0x43b8
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x1dc95
movq 0x120(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x1dcb2
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x1dccc
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0xf8(%rsp), %rdi
testq %rdi, %rdi
je 0x1dce9
movq 0x108(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0x40(%rsp), %rax
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xdfd1(%rip), %rdi      # 0x2bcd8
leaq 0xd9a8(%rip), %rsi      # 0x2b6b6
leaq 0xdf6a(%rip), %rcx      # 0x2bc7f
movl $0x210, %edx            # imm = 0x210
callq 0x2140
leaq 0xdfc2(%rip), %rdi      # 0x2bce8
leaq 0xd989(%rip), %rsi      # 0x2b6b6
leaq 0xdf4b(%rip), %rcx      # 0x2bc7f
movl $0x215, %edx            # imm = 0x215
callq 0x2140
leaq 0xdf78(%rip), %rdi      # 0x2bcbd
leaq 0xd96a(%rip), %rsi      # 0x2b6b6
leaq 0xdf2c(%rip), %rcx      # 0x2bc7f
movl $0x20d, %edx            # imm = 0x20D
callq 0x2140
leaq 0xdf0b(%rip), %rdi      # 0x2bc6f
leaq 0xd94b(%rip), %rsi      # 0x2b6b6
leaq 0xdf0d(%rip), %rcx      # 0x2bc7f
movl $0x1fa, %edx            # imm = 0x1FA
callq 0x2140
leaq 0xd0ba(%rip), %rdi      # 0x2ae3d
leaq 0xd92c(%rip), %rsi      # 0x2b6b6
leaq 0xdeee(%rip), %rcx      # 0x2bc7f
movl $0x1ff, %edx            # imm = 0x1FF
callq 0x2140
movq %rax, %r14
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x1de05
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
jmp 0x1de05
movq %rax, %r14
jmp 0x1de05
movq %rax, %r14
jmp 0x1de12
movq %rax, %r14
jmp 0x1de2f
movq %rax, %r14
jmp 0x1de49
jmp 0x1ddde
jmp 0x1ddde
jmp 0x1ddde
jmp 0x1ddd7
jmp 0x1ddd7
jmp 0x1ddde
movq %rax, %r14
jmp 0x1ddee
jmp 0x1ddde
movq %rax, %r14
leaq 0xc8(%rsp), %rdi
callq 0x41fe
leaq 0x90(%rsp), %rdi
callq 0x41fe
movq 0x40(%rsp), %rdi
callq 0x41fe
leaq 0x110(%rsp), %rdi
callq 0x412c
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x1de2f
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x1de49
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq 0xf8(%rsp), %rdi
testq %rdi, %rdi
je 0x1de66
movq 0x108(%rsp), %rsi
subq %rdi, %rsi
callq 0x2210
movq %r14, %rdi
callq 0x2310