mat ← 9 9⍴0
mat[1;] ← 4 5 1 5 8 6 7 9 7
mat[2;] ← 3 7 4 3 4 7 6 5 6
mat[3;] ← 5 1 3 4 9 4 8 7 2
mat[4;] ← 7 8 6 8 1 9 6 1 7
mat[5;] ← 4 3 9 4 7 2 9 2 6
mat[6;] ← 2 6 4 3 1 7 6 3 2
mat[7;] ← 3 5 9 5 4 1 7 6 4
mat[8;] ← 7 4 5 7 3 2 8 8 9
mat[9;] ← 8 9 7 4 6 7 2 4 7
∇ res ← solver m;b;g;m1;m2;nbor;primes
nbor ← {⍺×⍵∨(0 1↓⍵,0)∨(1↓⍵⍪0)∨(0 ¯1↓0,⍵)∨¯1↓0⍪⍵}
primes ← 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47↑⍨≢m
g ← ⊃⊂∨.=⊂⌽⍨¨⍳∘(1-⍨≢)
m1 ← primes×⍤¯1⊢m×g m
m2 ← primes×⍤1⊢m×⍉g⍉m
b ← ⊃,/{((1,2≠/⊢)∘{⍵[⍋⍵]}⊂((⍸0≠⍵)⌷⍨∘⊂⍋))0~⍨,⍵}¨m1 m2
b ← {⍵∘~¨⊂¨⍵}¨b
res ← {⊃z⊣{z⊢←{⍵/⍨check¨⍵},z∘.{0@⍵⊢⍺}⍵}¨⍵⊣z←⊂m}b
∇
∇ z←check x;T
z←0=+/,(x⍷⍨⍪0 0)∨0 0⍷x ⍝ no 2x1 black islands
z∧←{⍵≡⍵∘nbor⍣≡⊢1@(⊂⊃⍸⍵)⊢0⍴⍨⍴x}x≠0 ⍝ all blacks must be connected
∇