col := proc(L, m) local i; (L[1] + 3*L[2] + 5*L[3]) mod m; end proc; conT1 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([x, a, b], x, a, b); T1 := []; A := {}; for i to m do for j to m do T1 := [op(T1), t1(x, i, j)]; end do; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; A; end proc; conT2 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([a, x, b], x, a, b); T1 := []; A := {}; for i to m do for j to m do T1 := [op(T1), t1(x, i, j)]; end do; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; A; end proc; conT3 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([a, b, x], x, a, b); T1 := []; A := {}; for i to m do for j to m do T1 := [op(T1), t1(x, i, j)]; end do; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; A; end proc; conT4 := proc(m) local i, x, a, b, T2, t2, j, s, L, k, A; t2 := unapply([x, x, b], x, b); T2 := []; A := {}; for i to m do T2 := [op(T2), t2(x, i)]; end do; for i to nops(T2) do s := unapply(T2[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; A; end proc; conT5 := proc(m) local i, x, a, b, T2, t2, j, s, L, k, A; t2 := unapply([x, b, x], x, b); T2 := []; A := {}; for i to m do T2 := [op(T2), t2(x, i)]; end do; for i to nops(T2) do s := unapply(T2[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; end proc; conT6 := proc(m) local i, x, a, b, T2, t2, j, s, L, k, A; t2 := unapply([b, x, x], x, b); T2 := []; A := {}; for i to m do T2 := [op(T2), t2(x, i)]; end do; for i to nops(T2) do s := unapply(T2[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; A; end proc; conT7 := proc(m) local i, x, a, b, t1, j, s, L, k, A; t1 := unapply([x, x, x], x); A := {}; for j to m do L := [t1(j mod m), t1((j + 1) mod m), t1((j + 2) mod m), t1((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end proc; conT8 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([x, m + 1 - x, b], x, b); T1 := []; A := {}; for j to m do T1 := [op(T1), t1(x, j)]; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; end proc; conT9 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([x, b, m + 1 - x], x, b); T1 := []; A := {}; for j to m do T1 := [op(T1), t1(x, j)]; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; end proc; conT10 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([b, x, m + 1 - x], x, b); T1 := []; A := {}; for j to m do T1 := [op(T1), t1(x, j)]; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; end proc; conT11 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([b, m + 1 - x, x], x, b); T1 := []; A := {}; for j to m do T1 := [op(T1), t1(x, j)]; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; end proc; conT12 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([m + 1 - x, b, x], x, b); T1 := []; A := {}; for j to m do T1 := [op(T1), t1(x, j)]; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; end proc; conT13 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([m + 1 - x, x, b], x, b); T1 := []; A := {}; for j to m do T1 := [op(T1), t1(x, j)]; end do; for i to nops(T1) do s := unapply(T1[i], x); for j to m do L := [s(j mod m), s((j + 1) mod m), s((j + 2) mod m), s((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end do; end proc; conT14 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([x, x, m + 1 - x], x); A := {}; for j to m do L := [t1(j mod m), t1((j + 1) mod m), t1((j + 2) mod m), t1((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end proc; conT15 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([x, m + 1 - x, x], x); A := {}; for j to m do L := [t1(j mod m), t1((j + 1) mod m), t1((j + 2) mod m), t1((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end proc; conT16 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([m + 1 - x, x, x], x); A := {}; for j to m do L := [t1(j mod m), t1((j + 1) mod m), t1((j + 2) mod m), t1((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end proc; conT17 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([m + 1 - x, m + 1 - x, x], x); A := {}; for j to m do L := [t1(j mod m), t1((j + 1) mod m), t1((j + 2) mod m), t1((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end proc; conT18 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([m + 1 - x, x, m + 1 - x], x); A := {}; for j to m do L := [t1(j mod m), t1((j + 1) mod m), t1((j + 2) mod m), t1((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end proc; conT19 := proc(m) local i, x, a, b, T1, t1, j, s, L, k, A; t1 := unapply([x, m + 1 - x, m + 1 - x], x); A := {}; for j to m do L := [t1(j mod m), t1((j + 1) mod m), t1((j + 2) mod m), t1((j + 3) mod m)]; A := A union {{col(L[1], m), col(L[2], m), col(L[3], m), col(L[4], m)}}; end do; end proc; ColTest := proc(m, R, B) local i, T; T := conT1(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T1"; end if; end do; T := conT2(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T2"; end if; end do; T := conT3(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T3"; end if; end do; T := conT4(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T4"; end if; end do; T := conT5(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T5"; end if; end do; T := conT6(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T6"; end if; end do; T := conT7(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T7"; end if; end do; T := conT8(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T8"; end if; end do; T := conT9(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T9"; end if; end do; T := conT10(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T10"; end if; end do; T := conT11(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T11"; end if; end do; T := conT12(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T12"; end if; end do; T := conT13(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T13"; end if; end do; T := conT14(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T14"; end if; end do; T := conT15(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T15"; end if; end do; T := conT16(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T16"; end if; end do; T := conT17(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T17"; end if; end do; T := conT18(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T18"; end if; end do; T := conT19(m); for i to nops(T) do if T[i] subset R or T[i] subset B then return "FAIL,T19"; end if; end do; return "SUCCESS"; end proc; ColTest(11, {0, 1, 5, 7, 8, 10}, {2, 3, 4, 6, 9}); "SUCCESS"