| Algorithm |
| Input: a binary matrix with and . |
| Output: |
| (1) If is a singleton then |
| (2) return ; |
| (3) If then |
| (4) return ; |
| (5) If such that () = then |
| (6) return ; |
| (7) If there exists a singleton () = for some then |
| (8) let () |
| (9) return PA(); // singleton removal |
| (10) If () = and then |
| (11) return PA() PA() PA(); // partitioning |
| (12) Let row be the row with the most 1s in ; |
| (13) Let M[; ] and M[; ()]; |
| (14) Let PA and PA ; |
| (15) Let ; |
| (16) Let ; |
| (17) Return ; // forced binding |