Я бы начал с малого, как бы вы сделали это для 2 * 2 массивов? Сделайте это вручную - то есть начните записывать все возможные 2 * 2 массива. Как ты делаешь это? Затем подумайте, как вы можете сделать это в коде. Если вы сделаете это за 2 * 2, вы сможете увидеть, хорошо ли выглядят ваши результаты, чтобы вы знали, на правильном ли вы пути.
Это, по сути, проблема перестановки, когда вы вычислите ее для небольших чисел, масштабирование будет одинаковым.