number_of_square_patterns := proc(n, len) local k, m, d, A, l1, K, k1, l2, k2: k := 1: while k*(n - 1)^2 >= n^(k - 1) - 1 do k := k + 1: od: m := 0: d := k*(n - 1)^2: A := Array(1..d): if n = 10 then for l1 to d do A[l1] := convert(base_10_square_pattern(l1), set): K := {}: for k1 to l1 - 1 do K := K union (A[k1] intersect A[l1]): if K <> {} then break: fi: od: if K = {} then m := m + 1: fi: od: fi: if n <> 10 then for l2 to d do A[l2] := convert(base_n_square_pattern(l2, n, len), set): K := {}: for k2 to l2 - 1 do K := K union (A[k2] intersect A[l2]): if K <> {} then break: fi: od: if K = {} then m := m + 1: fi: od: fi: m end proc: