縦横のラベルの数から図の再現ができないか?の確認ロジック

■縦横の数に合うような図を確認するロジック。
縦横のラベル数から元の図を再現する方法について、前回は取りうる位置をランダムで変えて、縦横のラベル数に合致するものが無いかという方法をやってみた。組み合わせにして61C33を検討すればいいはずだけど、これを整数にすると、191724747789809248通り(≒191724兆、19京)。もし一致するのが1通りだけなら、この確率をランダムで出すことになる。重複するものも出るはずなので、さすがに無理があるか。
もう少しまっとうなやり方を考えると、例えば、1行ずつ検討していくことができる。下の例では、1行目は対象が9つの中で0という数字が与えられるので、9C0 = 1 となる。2行目は、9C7 = 36。これを全行で掛け合わせると、3359863535616通り(≒3.3兆)。これで前の方法よりかなり候補が減った。

さらに、1行毎に組み合わせを出した後に、列の数とつき合わせて合致しないものはそれ以降の検討が必要なくなる。例えば、下のような形でも行の総数は一致するけど、縦の総数は1列目でNGになる。こう考えると、1列目と9列目が0なので、2行目は2列から8列までが黒になる状態のみになる。そのため、上の図で2行目の36通りは1通りに絞れる(35通りがNGになる確認は必要だろうけど)。

同様に、上から順に見ていく場合、列の総数が与えられている数字より大きくなったらNGと判断すればよい。

まとめると
1.1行の中の組み合わせの総組み合わせを出す。例えば、([0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 1, 1, ...], [0, 1, 1, ...], ...)。ここで1を黒、0を白とする。
2.組み合わせの各要素の数が列の総数より小さいことを確認する。大きければNG。
3.OKの場合、次の行の組み合わせの総組み合わせを出す。
4.2、3の繰り返し。
記録する組み合わせの数がかなり大きくなりそうなので、本当に実装できるか分からないけど、まっとうなやり方としてはこんな感じかな。