October 13th, 2017 A quick note on a class of invertible (bijective) integer functions composed solely from XOR and bit-rotation operations. The handful of references I’ve run across seem to make things way more complicated than needed from my perspective. Just assuming 32-bit integers but extends to other widths (but power-of-two only). Using convention that a 32-bit integer x in matrix form is $x=\left(x_0,x_1,\ldots\right)^{T}$ where $x_0$ is the low bit. Forward function If you’re not familar with the function(s) of this note then the following might be the first thing to come to mind (with a some constant): x = x ^ rot(x, a). Sadly this isn’t invertible, we can see that by setting x to zero and then to -1 and in both cases the result is zero. A bijection must be a one-to-one mapping. By adding a second rotate we do get a bijection (b is a second constant): x = x ^ rot(x,a) ^ rot(x,b). Some generic code: static inline uint32_t rot(const uint32_t x, uint32_t i) { return (x << i)|(x >> (32-i)); } static inline uint32_t xor_rot2(uint32_t x, uint32_t a, uint32_t b) { return x^rot(x,a)^rot(x,b); } We can represent this function as a matrix equation over $\mathbb{F}_2$: \[x' = M~x\] where the transform matrix is: \[\begin{equation} M = I + C^a + C^b \label{M} \end{equation}\] with $I$ the identity matrix and $C$ the cyclic permutation1 matrix. This generalizes to a sum of $C$ terms: \[\begin{equation} M = I + \sum\limits_{i=1}^n C^{k_i} \label{genM} \end{equation}\] which is invertible if $n$ is even. Transforms like: \[\begin{equation} C^a + C^b + C^c \label{rot3} \end{equation}\] are bijections as well for odd number of terms, but aren’t worth considering (for the moment on the math side) since: \[\begin{equation} C^a\left(I + C^{b-a} + C^{c-a}\right) \label{rot3f} \end{equation}\] We simply have a composition2 of $\eqref{M}$ followed by a bit-rotation. As code $\eqref{rot3}$ rot(x,a)^rot(x,b)^rot(x,c) $\eqref{rot3f}$ rot(x^rot(x,b-a)^rot(x,c-a), a) are the same (provided a is smaller than b and c, otherwise simply rename). A little CPU wasting eye candy of invertible matrices where the list of numbers indicate the powers of $C$ to be summed: Foo For 32-bit we have 4991 matrices (odd since some are involutions) by generalizing \eqref{genM} and \eqref{rot3} ($i$ still must be even and $k$’s unique): \[\begin{equation} M = C^{k_0}\left(I + \sum\limits_{i=1}^n C^{k_i}\right) \end{equation}\] Some notes on equation manipulation: Although working with matrix equations we are limited to a commutative sub-algebra: $M_0~M_1 = M_1~M_0$. Powers of $C$ modulo reduce: $C^{k} = C^{k\bmod 32}$ Leading coefficients drop since we’re working in $\mathbb{F}_2$: $n~C^k$ = $\left(n \bmod 2\right) C^k$. Or more simply even become zero and odd become one. Inverse function Instead of a frontal attack on the inverse function, let’s sneak up on it from behind. First we need to find the period of $M$ which is defined as the smallest positive integer $n$ such that: \[M^n = M\] Let’s start by expanding the function squared in painful detail: \[\begin{eqnarray} M^2 & = & \left(I + C^a + C^b\right)\left(I + C^a + C^b\right) \label{m2_1} \\ & = & I^2 + I~C^a + I~C^b + C^a~I + C^a~C^a + C^a~C^b + C^b~I + C^b~C^a +C^b~C^b \label{m2_2} \\ & = & I + C^a + C^b + C^a + C^{2a} + C^{a+b} + C^b + C^{a+b} +C^{2b} \label{m2_3} \\ & = & I + 2~C^a + 2~C^b + 2~C^{a+b} + C^{2a} + C^{2b} \label{m2_4} \\ & = & I + C^{2a} + C^{2b} \label{m2} \end{eqnarray}\] with line-by-line commentary: just state what’s being expanded $\eqref{m2_1}$ mechanical expansion $\eqref{m2_2}$ simplify $I$ terms and collect powers of $C$ $\eqref{m2_3}$ gather common terms $\eqref{m2_4}$ in $\mathbb{F}_2$ odd coefficients reduce to one and even to zero $\eqref{m2}$ This holds for the generalized version \eqref{genM}. By simply renaming the variables we can repeat this squaring process as much as we like. So we have: \[\begin{eqnarray*} M^{32} &=& I + C^{32a} + C^{32b} \\ &=& 3I \\ &=& I \end{eqnarray*}\] By extension we now have a justifiction for the set of expressions which are invertible. Given $n$ terms we have: \[\begin{eqnarray*} M^{32} &=& nI \\ \end{eqnarray*}\] which reduces to $I$ if $n$ is odd and otherwise to zero and thus $n$ must be odd to be an invertible function. Returning to our example this implies: \[\begin{eqnarray} M^{-1} & = & M^{31} \\ & = & M~M^{2}~M^{4}~M^{8}~M^{16} \\ & = & \left(I + C^a + C^b\right)\left(I + C^{2a} + C^{2b}\right)\left(I + C^{4a} + C^{4b}\right)\left(I + C^{8a} + C^{8b}\right)\left(I + C^{16a} + C^{16b}\right) \label{generic} \end{eqnarray}\] A generic inverse function (of xor_rot2 above) is then: uint32_t xor_rot2_inv(uint32_t x, uint32_t a, uint32_t b) { // Perform the five steps (and keep 'a' and 'b' in range given // how 'rot' is defined above) as a sequence of transforms. // The order reversed of above (products of powers of M commute). x = x^rot(x,a)^rot(x,b); a = (a+a) & 0x1f; b = (b+b) & 0x1f; // t0 = M x x = x^rot(x,a)^rot(x,b); a = (a+a) & 0x1f; b = (b+b) & 0x1f; // t1 = M^2 t0 x = x^rot(x,a)^rot(x,b); a = (a+a) & 0x1f; b = (b+b) & 0x1f; // t2 = M^4 t1 x = x^rot(x,a)^rot(x,b); a = (a+a) & 0x1f; b = (b+b) & 0x1f; // t3 = M^8 t2 x = x^rot(x,a)^rot(x,b); // x' = M^16 t3 return x; } For known constants simply plugging them into $\eqref{generic}$ and modulo reducing the values works but is always performing extra work. Let’s run through an example of finding the inverse of x^rot(x,11)^rot(x,16) which gives us: \[\begin{eqnarray} M & = & I + C^{11} + C^{16} \nonumber \\ \nonumber \\ M^{-1} & = & \left(I + C^{11} + C^{16}\right)\left(I + C^{22} + C^{32}\right)\left(I + C^{44} + C^{64}\right)\left(I + C^{88} + C^{128}\right)\left(I + C^{176} + C^{256}\right) \label{x1_1} \\ & = & \left(I + C^{11} + C^{16}\right)\left(I + C^{22} + C^0\right)\left(I + C^{12} + C^0\right)\left(I + C^{24} + C^0\right)\left(I + C^{16} + C^0\right) \label{x1_2} \\ & = & \left(I + C^{11} + C^{16}\right)\left(C^{22}\right)\left(C^{12}\right)\left(C^{24}\right)\left(C^{16}\right) \label{x1_3} \\ & = & \left(I + C^{11} + C^{16}\right)\left(C^{10}\right) \label{x1_4} \\ & = & \left(C^{10} + C^{21} + C^{26}\right) \label{x1_5} \end{eqnarray}\] Equation $\eqref{x1_1}$ is simply expanding $\eqref{generic}$ and modulo reduction in $\eqref{x1_2}$. Here we have $C^0=I$ which gives us $2I$ in each of the last four product terms. Recall any even coefficient reduces to zero and any odd to one bring us to $\eqref{x1_3}$. Equation $\eqref{x1_4}$ simply sums up and modulo reduces these terms. Finally $\eqref{x1_5}$ is the final result which translates back into code as rot(x,10)^rot(x,21)^rot(x,26). This inverse is in the form of $\eqref{rot3}$ which I dismissed as being uninteresting from a math perspetive. If this was the function we wanted to inverse then we could factor as per $\eqref{rot3f}$ which would give us $\eqref{x1_4}$, which we’d find the inverse of the left hand side (which ends up being identical to the original) then we’d have to compose that with the inverse of $C^{10}$ which is $C^{-10}$ and back to the original forward transform. Inverse Tables Since I tossed together a Mathematica script to mechanically perform the reductions mentioned above I might as well paste the 465 two rotation equations. This script does not attempt to generate a minimal inverse. Check any results since I could have screwed-up in the cut/paste/mark-up phase (call it about 5 seconds to exhastively test one pair). The tables entries are a list of the powers of $C$ to be summed. Example: $\left(0,1,17\right) = I+C^1+C^{17}$. There are 15 self-inverses (involutions, so period is 2): (0, 1, 17) (0, 2, 18) (0, 3, 19) (0, 4, 20) (0, 5, 21) (0, 6, 22) (0, 7, 23) (0, 8, 24) (0, 9, 25) (0, 10, 26) (0, 11, 27) (0, 12, 28) (0, 13, 29) (0, 14, 30) (0, 15, 31) Those that reduce to a single product term. The $n$ is the period of the function. $M$ n $M^{-1}$ $M$ n $M^{-1}$ (0, 1, 16) 32 (14, 30, 31) (0, 2, 16) 16 (12, 28, 30) (0, 3, 16) 32 (10, 26, 29) (0, 4, 16) 8 (8, 24, 28) (0, 5, 16) 32 (6, 22, 27) (0, 6, 16) 16 (4, 20, 26) (0, 7, 16) 32 (2, 18, 25) (0, 8, 16) 4 (0, 16, 24) (0, 9, 16) 32 (14, 23, 30) (0, 10, 16) 16 (12, 22, 28) (0, 11, 16) 32 (10, 21, 26) (0, 12, 16) 8 (8, 20, 24) (0, 13, 16) 32 (6, 19, 22) (0, 14, 16) 16 (4, 18, 20) (0, 15, 16) 32 (2, 17, 18) (0, 16, 17) 32 (14, 15, 30) (0, 16, 18) 16 (12, 14, 28) (0, 16, 19) 32 (10, 13, 26) (0, 16, 20) 8 (8, 12, 24) (0, 16, 21) 32 (6, 10, 22) (0, 16, 22) 16 (4, 10, 20) (0, 16, 23) 32 (2, 9, 18) (0, 16, 24) 4 (0, 8, 16) (0, 16, 25) 32 (7, 14, 30) (0, 16, 26) 16 (6, 12, 28) (0, 16, 27) 32 (5, 10, 26) (0, 16, 28) 8 (4, 8, 24) (0, 16, 29) 32 (3, 6, 22) (0, 16, 30) 16 (2, 4, 20) (0, 16, 31) 32 (1, 2, 18) The two product term inverses: $M$ n $M^{-1}$ $M$ n $M^{-1}$ (0, 1, 8) 32 (0, 1, 8)(12, 28, 30) (0, 2, 8) 16 (0, 4, 16)(0, 24, 26) (0, 3, 8) 32 (0, 3, 8)(4, 20, 26) (0, 4, 8) 8 (0, 4, 8)(0, 16, 24) (0, 5, 8) 32 (0, 5, 8)(12, 22, 28) (0, 6, 8) 16 (0, 6, 8)(8, 20, 24) (0, 7, 8) 32 (0, 7, 8)(4, 18, 20) (0, 1, 9) 4 (0, 1, 9)(0, 2, 18) (0, 8, 9) 32 (0, 8, 9)(12, 14, 28) (0, 2, 10) 4 (0, 2, 10)(0, 4, 20) (0, 8, 10) 16 (0, 16, 20)(0, 2, 24) (0, 3, 11) 4 (0, 3, 11)(0, 6, 22) (0, 8, 11) 32 (0, 8, 11)(4, 10, 20) (0, 4, 12) 4 (0, 4, 12)(0, 8, 24) (0, 8, 12) 8 (0, 8, 12)(0, 8, 16) (0, 5, 13) 4 (0, 5, 13)(0, 10, 26) (0, 8, 13) 32 (0, 8, 13)(6, 12, 28) (0, 6, 14) 4 (0, 6, 14)(0, 12, 28) (0, 8, 14) 16 (0, 8, 14)(4, 8, 24) (0, 7, 15) 4 (0, 7, 15)(0, 14, 30) (0, 8, 15) 32 (0, 8, 15)(2, 4, 20) (0, 8, 17) 32 (0, 2, 16)(4, 13, 28) (0, 9, 17) 4 (0, 9, 17)(0, 2, 18) (0, 8, 18) 16 (0, 4, 16)(0, 10, 24) (0, 10, 18) 4 (0, 10, 18)(0, 4, 20) (0, 8, 19) 32 (0, 6, 16)(7, 20, 28) (0, 11, 19) 4 (0, 11, 19)(0, 6, 22) (0, 8, 20) 8 (0, 8, 20)(0, 16, 24) (0, 12, 20) 4 (0, 12, 20)(0, 8, 24) (0, 8, 21) 32 (0, 10, 16)(1, 12, 20) (0, 13, 21) 4 (0, 13, 21)(0, 10, 26) (0, 8, 22) 16 (0, 12, 16)(8, 16, 30) (0, 14, 22) 4 (0, 14, 22)(0, 12, 28) (0, 8, 23) 32 (0, 14, 16)(4, 12, 27) (0, 15, 23) 4 (0, 15, 23)(0, 14, 30) (0, 1, 24) 32 (0, 2, 16)(20, 28, 29) (0, 2, 24) 16 (0, 4, 16)(16, 24, 26) (0, 3, 24) 32 (0, 6, 16)(12, 20, 23) (0, 4, 24) 8 (0, 4, 24)(0, 16, 24) (0, 5, 24) 32 (0, 10, 16)(4, 12, 17) (0, 6, 24) 16 (0, 8, 14)(0, 12, 16) (0, 7, 24) 32 (0, 14, 16)(4, 11, 28) (0, 9, 24) 32 (0, 16, 18)(5, 20, 28) (0, 10, 24) 16 (0, 16, 20)(2, 16, 24) (0, 11, 24) 32 (0, 16, 22)(12, 20, 31) (0, 12, 24) 8 (0, 8, 16)(0, 12, 24) (0, 13, 24) 32 (0, 13, 24)(6, 12, 28) (0, 14, 24) 16 (0, 8, 22)(0, 16, 28) (0, 15, 24) 32 (2, 4, 20)(0, 15, 24) (0, 17, 24) 32 (0, 2, 16)(13, 20, 28) (0, 18, 24) 16 (0, 4, 16)(10, 16, 24) (0, 19, 24) 32 (0, 6, 16)(7, 12, 20) (0, 20, 24) 8 (0, 16, 24)(0, 20, 24) (0, 21, 24) 32 (1, 4, 12)(0, 10, 16) (0, 22, 24) 16 (0, 12, 16)(0, 8, 30) (0, 23, 24) 32 (0, 14, 16)(4, 27, 28) (0, 1, 25) 4 (0, 2, 18)(0, 1, 25) (0, 8, 25) 32 (0, 16, 18)(4, 21, 28) (0, 17, 25) 4 (0, 2, 18)(0, 17, 25) (0, 24, 25) 32 (0, 16, 18)(20, 21, 28) (0, 2, 26) 4 (0, 4, 20)(0, 2, 26) (0, 8, 26) 16 (0, 16, 20)(0, 18, 24) (0, 18, 26) 4 (0, 4, 20)(0, 18, 26) (0, 24, 26) 16 (0, 16, 20)(16, 18, 24) (0, 3, 27) 4 (0, 6, 22)(0, 3, 27) (0, 8, 27) 32 (0, 16, 22)(15, 20, 28) (0, 19, 27) 4 (0, 6, 22)(0, 19, 27) (0, 24, 27) 32 (12, 15, 20)(0, 16, 22) (0, 4, 28) 4 (0, 8, 24)(0, 4, 28) (0, 8, 28) 8 (0, 8, 16)(0, 8, 28) (0, 20, 28) 4 (0, 8, 24)(0, 20, 28) (0, 24, 28) 8 (0, 8, 16)(0, 24, 28) (0, 5, 29) 4 (0, 10, 26)(0, 5, 29) (0, 8, 29) 32 (9, 12, 20)(0, 16, 26) (0, 21, 29) 4 (0, 10, 26)(0, 21, 29) (0, 24, 29) 32 (4, 9, 12)(0, 16, 26) (0, 6, 30) 4 (0, 12, 28)(0, 6, 30) (0, 8, 30) 16 (6, 8, 16)(0, 16, 28) (0, 22, 30) 4 (0, 12, 28)(0, 22, 30) (0, 24, 30) 16 (0, 6, 8)(0, 16, 28) (0, 7, 31) 4 (0, 14, 30)(0, 7, 31) (0, 8, 31) 32 (3, 4, 12)(0, 16, 30) (0, 23, 31) 4 (0, 14, 30)(0, 23, 31) (0, 24, 31) 32 (3, 4, 28)(0, 16, 30) The three product term inverses: $M$ n $M^{-1}$ (0, 1, 4) 32 (0, 1, 4)(0, 4, 16)(0, 24, 26) (0, 2, 4) 16 (0, 2, 4)(0, 4, 8)(0, 16, 24) (0, 3, 4) 32 (0, 3, 4)(0, 6, 8)(8, 20, 24) (0, 1, 5) 8 (0, 1, 5)(0, 2, 10)(0, 4, 20) (0, 4, 5) 32 (0, 4, 5)(0, 16, 20)(0, 2, 24) (0, 2, 6) 8 (0, 2, 6)(0, 4, 12)(0, 8, 24) (0, 4, 6) 16 (0, 4, 6)(0, 8, 12)(0, 8, 16) (0, 3, 7) 8 (0, 3, 7)(0, 6, 14)(0, 12, 28) (0, 4, 7) 32 (0, 4, 7)(0, 8, 14)(4, 8, 24) (0, 4, 9) 32 (0, 4, 9)(0, 4, 16)(0, 10, 24) (0, 5, 9) 8 (0, 5, 9)(0, 10, 18)(0, 4, 20) (0, 4, 10) 16 (0, 4, 10)(0, 8, 20)(0, 16, 24) (0, 6, 10) 8 (0, 6, 10)(0, 12, 20)(0, 8, 24) (0, 4, 11) 32 (0, 4, 11)(0, 12, 16)(8, 16, 30) (0, 7, 11) 8 (0, 7, 11)(0, 14, 22)(0, 12, 28) (0, 1, 12) 32 (0, 1, 12)(0, 4, 16)(16, 24, 26) (0, 2, 12) 16 (0, 2, 12)(0, 4, 24)(0, 16, 24) (0, 3, 12) 32 (0, 3, 12)(0, 8, 14)(0, 12, 16) (0, 5, 12) 32 (0, 5, 12)(0, 16, 20)(2, 16, 24) (0, 6, 12) 16 (0, 6, 12)(0, 8, 16)(0, 12, 24) (0, 7, 12) 32 (0, 7, 12)(0, 8, 22)(0, 16, 28) (0, 9, 12) 32 (0, 9, 12)(0, 4, 16)(10, 16, 24) (0, 10, 12) 16 (0, 10, 12)(0, 16, 24)(0, 20, 24) (0, 11, 12) 32 (0, 11, 12)(0, 12, 16)(0, 8, 30) (0, 1, 13) 8 (0, 1, 13)(0, 4, 20)(0, 2, 26) (0, 4, 13) 32 (0, 4, 13)(0, 16, 20)(0, 18, 24) (0, 9, 13) 8 (0, 9, 13)(0, 4, 20)(0, 18, 26) (0, 12, 13) 32 (0, 12, 13)(0, 16, 20)(16, 18, 24) (0, 2, 14) 8 (0, 2, 14)(0, 8, 24)(0, 4, 28) (0, 4, 14) 16 (0, 4, 14)(0, 8, 16)(0, 8, 28) (0, 10, 14) 8 (0, 10, 14)(0, 8, 24)(0, 20, 28) (0, 12, 14) 16 (0, 12, 14)(0, 8, 16)(0, 24, 28) (0, 3, 15) 8 (0, 3, 15)(0, 12, 28)(0, 6, 30) (0, 4, 15) 32 (0, 4, 15)(6, 8, 16)(0, 16, 28) (0, 11, 15) 8 (0, 11, 15)(0, 12, 28)(0, 22, 30) (0, 12, 15) 32 (0, 6, 8)(0, 12, 15)(0, 16, 28) (0, 4, 17) 32 (0, 4, 16)(0, 4, 17)(0, 24, 26) (0, 5, 17) 8 (0, 2, 10)(0, 5, 17)(0, 4, 20) (0, 12, 17) 32 (0, 4, 16)(0, 12, 17)(16, 24, 26) (0, 13, 17) 8 (0, 13, 17)(0, 4, 20)(0, 2, 26) (0, 4, 18) 16 (0, 4, 8)(0, 4, 18)(0, 16, 24) (0, 6, 18) 8 (0, 4, 12)(0, 6, 18)(0, 8, 24) (0, 12, 18) 16 (0, 12, 18)(0, 4, 24)(0, 16, 24) (0, 14, 18) 8 (0, 14, 18)(0, 8, 24)(0, 4, 28) (0, 4, 19) 32 (0, 6, 8)(0, 12, 16)(8, 12, 27) (0, 7, 19) 8 (0, 6, 14)(0, 7, 19)(0, 12, 28) (0, 12, 19) 32 (0, 8, 14)(0, 12, 16)(0, 12, 19) (0, 15, 19) 8 (0, 15, 19)(0, 12, 28)(0, 6, 30) (0, 1, 20) 32 (0, 4, 16)(0, 1, 20)(0, 24, 26) (0, 2, 20) 16 (0, 4, 8)(0, 2, 20)(0, 16, 24) (0, 3, 20) 32 (0, 6, 8)(0, 12, 16)(8, 11, 28) (0, 5, 20) 32 (0, 5, 20)(0, 16, 20)(0, 2, 24) (0, 6, 20) 16 (0, 8, 12)(0, 8, 16)(0, 6, 20) (0, 7, 20) 32 (0, 8, 14)(0, 7, 20)(4, 8, 24) (0, 9, 20) 32 (0, 4, 16)(0, 9, 20)(0, 10, 24) (0, 10, 20) 16 (0, 8, 20)(0, 10, 20)(0, 16, 24) (0, 11, 20) 32 (0, 12, 16)(0, 11, 20)(8, 16, 30) (0, 13, 20) 32 (0, 13, 20)(0, 16, 20)(0, 18, 24) (0, 14, 20) 16 (0, 8, 16)(0, 14, 20)(0, 8, 28) (0, 15, 20) 32 (6, 8, 16)(0, 15, 20)(0, 16, 28) (0, 17, 20) 32 (0, 4, 16)(0, 17, 20)(0, 24, 26) (0, 18, 20) 16 (0, 4, 8)(0, 18, 20)(0, 16, 24) (0, 19, 20) 32 (0, 6, 8)(0, 12, 16)(8, 27, 28) (0, 1, 21) 8 (0, 2, 10)(0, 4, 20)(0, 1, 21) (0, 4, 21) 32 (0, 16, 20)(0, 4, 21)(0, 2, 24) (0, 9, 21) 8 (0, 10, 18)(0, 4, 20)(0, 9, 21) (0, 12, 21) 32 (0, 16, 20)(0, 12, 21)(2, 16, 24) (0, 17, 21) 8 (0, 2, 10)(0, 4, 20)(0, 17, 21) (0, 20, 21) 32 (0, 16, 20)(0, 20, 21)(0, 2, 24) (0, 2, 22) 8 (0, 4, 12)(0, 2, 22)(0, 8, 24) (0, 4, 22) 16 (0, 8, 12)(0, 8, 16)(0, 4, 22) (0, 10, 22) 8 (0, 12, 20)(0, 10, 22)(0, 8, 24) (0, 12, 22) 16 (0, 8, 16)(0, 12, 22)(0, 12, 24) (0, 18, 22) 8 (0, 4, 12)(0, 18, 22)(0, 8, 24) (0, 20, 22) 16 (0, 8, 12)(0, 8, 16)(0, 20, 22) (0, 3, 23) 8 (0, 6, 14)(0, 3, 23)(0, 12, 28) (0, 4, 23) 32 (0, 8, 14)(0, 4, 23)(4, 8, 24) (0, 11, 23) 8 (0, 14, 22)(0, 11, 23)(0, 12, 28) (0, 12, 23) 32 (0, 8, 22)(0, 12, 23)(0, 16, 28) (0, 19, 23) 8 (0, 6, 14)(0, 19, 23)(0, 12, 28) (0, 20, 23) 32 (0, 8, 14)(0, 20, 23)(4, 8, 24) (0, 4, 25) 32 (0, 4, 16)(0, 10, 24)(0, 4, 25) (0, 5, 25) 8 (0, 10, 18)(0, 4, 20)(0, 5, 25) (0, 12, 25) 32 (0, 4, 16)(4, 17, 24)(0, 18, 24) (0, 13, 25) 8 (0, 4, 20)(0, 13, 25)(0, 18, 26) (0, 20, 25) 32 (0, 4, 16)(0, 10, 24)(0, 20, 25) (0, 21, 25) 8 (0, 10, 18)(0, 4, 20)(0, 21, 25) (0, 4, 26) 16 (0, 8, 20)(0, 16, 24)(0, 4, 26) (0, 6, 26) 8 (0, 12, 20)(0, 8, 24)(0, 6, 26) (0, 12, 26) 16 (0, 16, 24)(0, 20, 24)(0, 12, 26) (0, 14, 26) 8 (0, 8, 24)(0, 14, 26)(0, 20, 28) (0, 20, 26) 16 (0, 8, 20)(0, 16, 24)(0, 20, 26) (0, 22, 26) 8 (0, 12, 20)(0, 8, 24)(0, 22, 26) (0, 4, 27) 32 (3, 8, 12)(0, 12, 16)(0, 8, 22) (0, 7, 27) 8 (0, 14, 22)(0, 7, 27)(0, 12, 28) (0, 12, 27) 32 (0, 12, 16)(0, 12, 27)(0, 8, 30) (0, 15, 27) 8 (0, 15, 27)(0, 12, 28)(0, 22, 30) (0, 20, 27) 32 (0, 12, 16)(0, 8, 22)(3, 8, 28) (0, 23, 27) 8 (0, 14, 22)(0, 23, 27)(0, 12, 28) (0, 1, 28) 32 (0, 4, 16)(0, 2, 24)(20, 24, 25) (0, 2, 28) 16 (0, 4, 24)(0, 16, 24)(0, 2, 28) (0, 3, 28) 32 (0, 8, 14)(0, 12, 16)(0, 3, 28) (0, 5, 28) 32 (0, 16, 20)(0, 10, 24)(20, 24, 29) (0, 6, 28) 16 (0, 8, 16)(0, 12, 24)(0, 6, 28) (0, 7, 28) 32 (0, 8, 22)(0, 7, 28)(0, 16, 28) (0, 9, 28) 32 (0, 4, 16)(0, 18, 24)(1, 20, 24) (0, 10, 28) 16 (0, 16, 24)(0, 20, 24)(0, 10, 28) (0, 11, 28) 32 (0, 12, 16)(0, 11, 28)(0, 8, 30) (0, 13, 28) 32 (0, 16, 20)(5, 20, 24)(0, 24, 26) (0, 14, 28) 16 (0, 8, 16)(0, 14, 28)(0, 24, 28) (0, 15, 28) 32 (0, 6, 8)(0, 15, 28)(0, 16, 28) (0, 17, 28) 32 (0, 4, 16)(0, 2, 24)(9, 20, 24) (0, 18, 28) 16 (0, 4, 24)(0, 16, 24)(0, 18, 28) (0, 19, 28) 32 (0, 8, 14)(0, 12, 16)(0, 19, 28) (0, 21, 28) 32 (0, 16, 20)(0, 10, 24)(13, 20, 24) (0, 22, 28) 16 (0, 8, 16)(0, 12, 24)(0, 22, 28) (0, 23, 28) 32 (0, 8, 22)(0, 16, 28)(0, 23, 28) (0, 25, 28) 32 (0, 4, 16)(0, 18, 24)(17, 20, 24) (0, 26, 28) 16 (0, 16, 24)(0, 20, 24)(0, 26, 28) (0, 27, 28) 32 (0, 12, 16)(0, 27, 28)(0, 8, 30) (0, 1, 29) 8 (0, 4, 20)(0, 2, 26)(0, 1, 29) (0, 4, 29) 32 (0, 16, 20)(0, 18, 24)(0, 4, 29) (0, 9, 29) 8 (0, 4, 20)(0, 18, 26)(0, 9, 29) (0, 12, 29) 32 (0, 16, 20)(4, 21, 24)(0, 24, 26) (0, 17, 29) 8 (0, 4, 20)(0, 2, 26)(0, 17, 29) (0, 20, 29) 32 (0, 16, 20)(0, 18, 24)(0, 20, 29) (0, 25, 29) 8 (0, 4, 20)(0, 18, 26)(0, 25, 29) (0, 28, 29) 32 (0, 16, 20)(20, 21, 24)(0, 24, 26) (0, 2, 30) 8 (0, 8, 24)(0, 4, 28)(0, 2, 30) (0, 4, 30) 16 (0, 8, 16)(0, 8, 28)(0, 4, 30) (0, 10, 30) 8 (0, 8, 24)(0, 20, 28)(0, 10, 30) (0, 12, 30) 16 (0, 8, 16)(0, 24, 28)(0, 12, 30) (0, 18, 30) 8 (0, 8, 24)(0, 4, 28)(0, 18, 30) (0, 20, 30) 16 (0, 8, 16)(0, 8, 28)(0, 20, 30) (0, 26, 30) 8 (0, 8, 24)(0, 20, 28)(0, 26, 30) (0, 28, 30) 16 (0, 8, 16)(0, 24, 28)(0, 28, 30) (0, 3, 31) 8 (0, 12, 28)(0, 6, 30)(0, 3, 31) (0, 4, 31) 32 (7, 8, 12)(0, 16, 28)(0, 8, 30) (0, 11, 31) 8 (0, 12, 28)(0, 22, 30)(0, 11, 31) (0, 12, 31) 32 (0, 6, 8)(0, 16, 28)(0, 12, 31) (0, 19, 31) 8 (0, 12, 28)(0, 6, 30)(0, 19, 31) (0, 20, 31) 32 (7, 8, 28)(0, 16, 28)(0, 8, 30) (0, 27, 31) 8 (0, 12, 28)(0, 22, 30)(0, 27, 31) (0, 28, 31) 32 (0, 6, 8)(0, 16, 28)(0, 28, 31) and finally the four product term inverses: $M$ n $M^{-1}$ (0, 1, 2) 32 (0, 1, 2)(0, 2, 4)(0, 4, 8)(0, 16, 24) (0, 1, 3) 16 (0, 1, 3)(0, 2, 6)(0, 4, 12)(0, 8, 24) (0, 2, 3) 32 (0, 2, 3)(0, 4, 6)(0, 8, 12)(0, 8, 16) (0, 2, 5) 32 (0, 2, 5)(0, 4, 10)(0, 8, 20)(0, 16, 24) (0, 3, 5) 16 (0, 3, 5)(0, 6, 10)(0, 12, 20)(0, 8, 24) (0, 1, 6) 32 (0, 1, 6)(0, 2, 12)(0, 4, 24)(0, 16, 24) (0, 3, 6) 32 (0, 3, 6)(0, 6, 12)(0, 8, 16)(0, 12, 24) (0, 5, 6) 32 (0, 5, 6)(0, 10, 12)(0, 16, 24)(0, 20, 24) (0, 1, 7) 16 (0, 1, 7)(0, 2, 14)(0, 8, 24)(0, 4, 28) (0, 2, 7) 32 (0, 2, 7)(0, 4, 14)(0, 8, 16)(0, 8, 28) (0, 5, 7) 16 (0, 5, 7)(0, 10, 14)(0, 8, 24)(0, 20, 28) (0, 6, 7) 32 (0, 6, 7)(0, 12, 14)(0, 8, 16)(0, 24, 28) (0, 2, 9) 32 (0, 4, 8)(0, 2, 9)(0, 4, 18)(0, 16, 24) (0, 3, 9) 16 (0, 3, 9)(0, 4, 12)(0, 6, 18)(0, 8, 24) (0, 6, 9) 32 (0, 6, 9)(0, 12, 18)(0, 4, 24)(0, 16, 24) (0, 7, 9) 16 (0, 7, 9)(0, 14, 18)(0, 8, 24)(0, 4, 28) (0, 1, 10) 32 (0, 4, 8)(0, 1, 10)(0, 2, 20)(0, 16, 24) (0, 3, 10) 32 (0, 3, 10)(0, 8, 12)(0, 8, 16)(0, 6, 20) (0, 5, 10) 32 (0, 5, 10)(0, 8, 20)(0, 10, 20)(0, 16, 24) (0, 7, 10) 32 (0, 7, 10)(0, 8, 16)(0, 14, 20)(0, 8, 28) (0, 9, 10) 32 (0, 4, 8)(0, 9, 10)(0, 18, 20)(0, 16, 24) (0, 1, 11) 16 (0, 1, 11)(0, 4, 12)(0, 2, 22)(0, 8, 24) (0, 2, 11) 32 (0, 2, 11)(0, 8, 12)(0, 8, 16)(0, 4, 22) (0, 5, 11) 16 (0, 5, 11)(0, 12, 20)(0, 10, 22)(0, 8, 24) (0, 6, 11) 32 (0, 6, 11)(0, 8, 16)(0, 12, 22)(0, 12, 24) (0, 9, 11) 16 (0, 9, 11)(0, 4, 12)(0, 18, 22)(0, 8, 24) (0, 10, 11) 32 (0, 10, 11)(0, 8, 12)(0, 8, 16)(0, 20, 22) (0, 2, 13) 32 (0, 2, 13)(0, 8, 20)(0, 16, 24)(0, 4, 26) (0, 3, 13) 16 (0, 3, 13)(0, 12, 20)(0, 8, 24)(0, 6, 26) (0, 6, 13) 32 (0, 6, 13)(0, 16, 24)(0, 20, 24)(0, 12, 26) (0, 7, 13) 16 (0, 7, 13)(0, 8, 24)(0, 14, 26)(0, 20, 28) (0, 10, 13) 32 (0, 10, 13)(0, 8, 20)(0, 16, 24)(0, 20, 26) (0, 11, 13) 16 (0, 11, 13)(0, 12, 20)(0, 8, 24)(0, 22, 26) (0, 1, 14) 32 (0, 1, 14)(0, 4, 24)(0, 16, 24)(0, 2, 28) (0, 3, 14) 32 (0, 3, 14)(0, 8, 16)(0, 12, 24)(0, 6, 28) (0, 5, 14) 32 (0, 5, 14)(0, 16, 24)(0, 20, 24)(0, 10, 28) (0, 7, 14) 32 (0, 7, 14)(0, 8, 16)(0, 14, 28)(0, 24, 28) (0, 9, 14) 32 (0, 9, 14)(0, 4, 24)(0, 16, 24)(0, 18, 28) (0, 11, 14) 32 (0, 11, 14)(0, 8, 16)(0, 12, 24)(0, 22, 28) (0, 13, 14) 32 (0, 13, 14)(0, 16, 24)(0, 20, 24)(0, 26, 28) (0, 1, 15) 16 (0, 1, 15)(0, 8, 24)(0, 4, 28)(0, 2, 30) (0, 2, 15) 32 (0, 2, 15)(0, 8, 16)(0, 8, 28)(0, 4, 30) (0, 5, 15) 16 (0, 5, 15)(0, 8, 24)(0, 20, 28)(0, 10, 30) (0, 6, 15) 32 (0, 6, 15)(0, 8, 16)(0, 24, 28)(0, 12, 30) (0, 9, 15) 16 (0, 9, 15)(0, 8, 24)(0, 4, 28)(0, 18, 30) (0, 10, 15) 32 (0, 10, 15)(0, 8, 16)(0, 8, 28)(0, 20, 30) (0, 13, 15) 16 (0, 13, 15)(0, 8, 24)(0, 20, 28)(0, 26, 30) (0, 14, 15) 32 (0, 14, 15)(0, 8, 16)(0, 24, 28)(0, 28, 30) (0, 2, 17) 32 (0, 2, 4)(0, 4, 8)(0, 2, 17)(0, 16, 24) (0, 3, 17) 16 (0, 2, 6)(0, 4, 12)(0, 3, 17)(0, 8, 24) (0, 6, 17) 32 (0, 2, 12)(0, 6, 17)(0, 4, 24)(0, 16, 24) (0, 7, 17) 16 (0, 2, 14)(0, 7, 17)(0, 8, 24)(0, 4, 28) (0, 10, 17) 32 (0, 4, 8)(0, 10, 17)(0, 2, 20)(0, 16, 24) (0, 11, 17) 16 (0, 4, 12)(0, 11, 17)(0, 2, 22)(0, 8, 24) (0, 14, 17) 32 (0, 14, 17)(0, 4, 24)(0, 16, 24)(0, 2, 28) (0, 15, 17) 16 (0, 15, 17)(0, 8, 24)(0, 4, 28)(0, 2, 30) (0, 1, 18) 32 (0, 2, 4)(0, 4, 8)(0, 1, 18)(0, 16, 24) (0, 3, 18) 32 (0, 4, 6)(0, 8, 12)(0, 8, 16)(0, 3, 18) (0, 5, 18) 32 (0, 4, 10)(0, 5, 18)(0, 8, 20)(0, 16, 24) (0, 7, 18) 32 (0, 4, 14)(0, 8, 16)(0, 7, 18)(0, 8, 28) (0, 9, 18) 32 (0, 4, 8)(0, 4, 18)(0, 9, 18)(0, 16, 24) (0, 11, 18) 32 (0, 8, 12)(0, 8, 16)(0, 11, 18)(0, 4, 22) (0, 13, 18) 32 (0, 13, 18)(0, 8, 20)(0, 16, 24)(0, 4, 26) (0, 15, 18) 32 (0, 8, 16)(0, 15, 18)(0, 8, 28)(0, 4, 30) (0, 17, 18) 32 (0, 2, 4)(0, 4, 8)(0, 17, 18)(0, 16, 24) (0, 1, 19) 16 (0, 2, 6)(0, 4, 12)(0, 1, 19)(0, 8, 24) (0, 2, 19) 32 (0, 4, 6)(0, 8, 12)(0, 8, 16)(0, 2, 19) (0, 5, 19) 16 (0, 6, 10)(0, 5, 19)(0, 12, 20)(0, 8, 24) (0, 6, 19) 32 (0, 6, 12)(0, 8, 16)(0, 6, 19)(0, 12, 24) (0, 9, 19) 16 (0, 4, 12)(0, 6, 18)(0, 9, 19)(0, 8, 24) (0, 10, 19) 32 (0, 8, 12)(0, 8, 16)(0, 10, 19)(0, 6, 20) (0, 13, 19) 16 (0, 13, 19)(0, 12, 20)(0, 8, 24)(0, 6, 26) (0, 14, 19) 32 (0, 8, 16)(0, 14, 19)(0, 12, 24)(0, 6, 28) (0, 17, 19) 16 (0, 2, 6)(0, 4, 12)(0, 17, 19)(0, 8, 24) (0, 18, 19) 32 (0, 4, 6)(0, 8, 12)(0, 8, 16)(0, 18, 19) (0, 2, 21) 32 (0, 4, 10)(0, 8, 20)(0, 2, 21)(0, 16, 24) (0, 3, 21) 16 (0, 6, 10)(0, 12, 20)(0, 3, 21)(0, 8, 24) (0, 6, 21) 32 (0, 10, 12)(0, 6, 21)(0, 16, 24)(0, 20, 24) (0, 7, 21) 16 (0, 10, 14)(0, 7, 21)(0, 8, 24)(0, 20, 28) (0, 10, 21) 32 (0, 8, 20)(0, 10, 20)(0, 10, 21)(0, 16, 24) (0, 11, 21) 16 (0, 12, 20)(0, 11, 21)(0, 10, 22)(0, 8, 24) (0, 14, 21) 32 (0, 14, 21)(0, 16, 24)(0, 20, 24)(0, 10, 28) (0, 15, 21) 16 (0, 15, 21)(0, 8, 24)(0, 20, 28)(0, 10, 30) (0, 18, 21) 32 (0, 4, 10)(0, 8, 20)(0, 18, 21)(0, 16, 24) (0, 19, 21) 16 (0, 6, 10)(0, 12, 20)(0, 19, 21)(0, 8, 24) (0, 1, 22) 32 (0, 2, 12)(0, 1, 22)(0, 4, 24)(0, 16, 24) (0, 3, 22) 32 (0, 6, 12)(0, 8, 16)(0, 3, 22)(0, 12, 24) (0, 5, 22) 32 (0, 10, 12)(0, 5, 22)(0, 16, 24)(0, 20, 24) (0, 7, 22) 32 (0, 12, 14)(0, 8, 16)(0, 7, 22)(0, 24, 28) (0, 9, 22) 32 (0, 12, 18)(0, 9, 22)(0, 4, 24)(0, 16, 24) (0, 11, 22) 32 (0, 8, 16)(0, 11, 22)(0, 12, 22)(0, 12, 24) (0, 13, 22) 32 (0, 13, 22)(0, 16, 24)(0, 20, 24)(0, 12, 26) (0, 15, 22) 32 (0, 8, 16)(0, 15, 22)(0, 24, 28)(0, 12, 30) (0, 17, 22) 32 (0, 2, 12)(0, 17, 22)(0, 4, 24)(0, 16, 24) (0, 19, 22) 32 (0, 6, 12)(0, 8, 16)(0, 19, 22)(0, 12, 24) (0, 21, 22) 32 (0, 10, 12)(0, 21, 22)(0, 16, 24)(0, 20, 24) (0, 1, 23) 16 (0, 2, 14)(0, 1, 23)(0, 8, 24)(0, 4, 28) (0, 2, 23) 32 (0, 4, 14)(0, 8, 16)(0, 2, 23)(0, 8, 28) (0, 5, 23) 16 (0, 10, 14)(0, 5, 23)(0, 8, 24)(0, 20, 28) (0, 6, 23) 32 (0, 12, 14)(0, 8, 16)(0, 6, 23)(0, 24, 28) (0, 9, 23) 16 (0, 14, 18)(0, 9, 23)(0, 8, 24)(0, 4, 28) (0, 10, 23) 32 (0, 8, 16)(0, 14, 20)(0, 10, 23)(0, 8, 28) (0, 13, 23) 16 (0, 13, 23)(0, 8, 24)(0, 14, 26)(0, 20, 28) (0, 14, 23) 32 (0, 8, 16)(0, 14, 23)(0, 14, 28)(0, 24, 28) (0, 17, 23) 16 (0, 2, 14)(0, 17, 23)(0, 8, 24)(0, 4, 28) (0, 18, 23) 32 (0, 4, 14)(0, 8, 16)(0, 18, 23)(0, 8, 28) (0, 21, 23) 16 (0, 10, 14)(0, 21, 23)(0, 8, 24)(0, 20, 28) (0, 22, 23) 32 (0, 12, 14)(0, 8, 16)(0, 22, 23)(0, 24, 28) (0, 2, 25) 32 (0, 4, 8)(0, 4, 18)(0, 16, 24)(0, 2, 25) (0, 3, 25) 16 (0, 4, 12)(0, 6, 18)(0, 8, 24)(0, 3, 25) (0, 6, 25) 32 (0, 12, 18)(0, 4, 24)(0, 16, 24)(0, 6, 25) (0, 7, 25) 16 (0, 14, 18)(0, 8, 24)(0, 7, 25)(0, 4, 28) (0, 10, 25) 32 (0, 4, 8)(0, 18, 20)(0, 16, 24)(0, 10, 25) (0, 11, 25) 16 (0, 4, 12)(0, 18, 22)(0, 8, 24)(0, 11, 25) (0, 14, 25) 32 (0, 4, 24)(0, 16, 24)(0, 14, 25)(0, 18, 28) (0, 15, 25) 16 (0, 8, 24)(0, 15, 25)(0, 4, 28)(0, 18, 30) (0, 18, 25) 32 (0, 4, 8)(0, 4, 18)(0, 16, 24)(0, 18, 25) (0, 19, 25) 16 (0, 4, 12)(0, 6, 18)(0, 8, 24)(0, 19, 25) (0, 22, 25) 32 (0, 12, 18)(0, 4, 24)(0, 16, 24)(0, 22, 25) (0, 23, 25) 16 (0, 14, 18)(0, 8, 24)(0, 23, 25)(0, 4, 28) (0, 1, 26) 32 (0, 4, 8)(0, 2, 20)(0, 16, 24)(0, 1, 26) (0, 3, 26) 32 (0, 8, 12)(0, 8, 16)(0, 6, 20)(0, 3, 26) (0, 5, 26) 32 (0, 8, 20)(0, 10, 20)(0, 16, 24)(0, 5, 26) (0, 7, 26) 32 (0, 8, 16)(0, 14, 20)(0, 7, 26)(0, 8, 28) (0, 9, 26) 32 (0, 4, 8)(0, 18, 20)(0, 16, 24)(0, 9, 26) (0, 11, 26) 32 (0, 8, 12)(0, 8, 16)(0, 20, 22)(0, 11, 26) (0, 13, 26) 32 (0, 8, 20)(0, 16, 24)(0, 13, 26)(0, 20, 26) (0, 15, 26) 32 (0, 8, 16)(0, 15, 26)(0, 8, 28)(0, 20, 30) (0, 17, 26) 32 (0, 4, 8)(0, 2, 20)(0, 16, 24)(0, 17, 26) (0, 19, 26) 32 (0, 8, 12)(0, 8, 16)(0, 6, 20)(0, 19, 26) (0, 21, 26) 32 (0, 8, 20)(0, 10, 20)(0, 16, 24)(0, 21, 26) (0, 23, 26) 32 (0, 8, 16)(0, 14, 20)(0, 23, 26)(0, 8, 28) (0, 25, 26) 32 (0, 4, 8)(0, 18, 20)(0, 16, 24)(0, 25, 26) (0, 1, 27) 16 (0, 4, 12)(0, 2, 22)(0, 8, 24)(0, 1, 27) (0, 2, 27) 32 (0, 8, 12)(0, 8, 16)(0, 4, 22)(0, 2, 27) (0, 5, 27) 16 (0, 12, 20)(0, 10, 22)(0, 8, 24)(0, 5, 27) (0, 6, 27) 32 (0, 8, 16)(0, 12, 22)(0, 12, 24)(0, 6, 27) (0, 9, 27) 16 (0, 4, 12)(0, 18, 22)(0, 8, 24)(0, 9, 27) (0, 10, 27) 32 (0, 8, 12)(0, 8, 16)(0, 20, 22)(0, 10, 27) (0, 13, 27) 16 (0, 12, 20)(0, 8, 24)(0, 22, 26)(0, 13, 27) (0, 14, 27) 32 (0, 8, 16)(0, 12, 24)(0, 14, 27)(0, 22, 28) (0, 17, 27) 16 (0, 4, 12)(0, 2, 22)(0, 8, 24)(0, 17, 27) (0, 18, 27) 32 (0, 8, 12)(0, 8, 16)(0, 4, 22)(0, 18, 27) (0, 21, 27) 16 (0, 12, 20)(0, 10, 22)(0, 8, 24)(0, 21, 27) (0, 22, 27) 32 (0, 8, 16)(0, 12, 22)(0, 12, 24)(0, 22, 27) (0, 25, 27) 16 (0, 4, 12)(0, 18, 22)(0, 8, 24)(0, 25, 27) (0, 26, 27) 32 (0, 8, 12)(0, 8, 16)(0, 20, 22)(0, 26, 27) (0, 2, 29) 32 (0, 8, 20)(0, 16, 24)(0, 4, 26)(0, 2, 29) (0, 3, 29) 16 (0, 12, 20)(0, 8, 24)(0, 6, 26)(0, 3, 29) (0, 6, 29) 32 (0, 16, 24)(0, 20, 24)(0, 12, 26)(0, 6, 29) (0, 7, 29) 16 (0, 8, 24)(0, 14, 26)(0, 20, 28)(0, 7, 29) (0, 10, 29) 32 (0, 8, 20)(0, 16, 24)(0, 20, 26)(0, 10, 29) (0, 11, 29) 16 (0, 12, 20)(0, 8, 24)(0, 22, 26)(0, 11, 29) (0, 14, 29) 32 (0, 16, 24)(0, 20, 24)(0, 26, 28)(0, 14, 29) (0, 15, 29) 16 (0, 8, 24)(0, 20, 28)(0, 15, 29)(0, 26, 30) (0, 18, 29) 32 (0, 8, 20)(0, 16, 24)(0, 4, 26)(0, 18, 29) (0, 19, 29) 16 (0, 12, 20)(0, 8, 24)(0, 6, 26)(0, 19, 29) (0, 22, 29) 32 (0, 16, 24)(0, 20, 24)(0, 12, 26)(0, 22, 29) (0, 23, 29) 16 (0, 8, 24)(0, 14, 26)(0, 20, 28)(0, 23, 29) (0, 26, 29) 32 (0, 8, 20)(0, 16, 24)(0, 20, 26)(0, 26, 29) (0, 27, 29) 16 (0, 12, 20)(0, 8, 24)(0, 22, 26)(0, 27, 29) (0, 1, 30) 32 (0, 4, 24)(0, 16, 24)(0, 2, 28)(0, 1, 30) (0, 3, 30) 32 (0, 8, 16)(0, 12, 24)(0, 6, 28)(0, 3, 30) (0, 5, 30) 32 (0, 16, 24)(0, 20, 24)(0, 10, 28)(0, 5, 30) (0, 7, 30) 32 (0, 8, 16)(0, 14, 28)(0, 24, 28)(0, 7, 30) (0, 9, 30) 32 (0, 4, 24)(0, 16, 24)(0, 18, 28)(0, 9, 30) (0, 11, 30) 32 (0, 8, 16)(0, 12, 24)(0, 22, 28)(0, 11, 30) (0, 13, 30) 32 (0, 16, 24)(0, 20, 24)(0, 26, 28)(0, 13, 30) (0, 15, 30) 32 (0, 8, 16)(0, 24, 28)(0, 15, 30)(0, 28, 30) (0, 17, 30) 32 (0, 4, 24)(0, 16, 24)(0, 2, 28)(0, 17, 30) (0, 19, 30) 32 (0, 8, 16)(0, 12, 24)(0, 6, 28)(0, 19, 30) (0, 21, 30) 32 (0, 16, 24)(0, 20, 24)(0, 10, 28)(0, 21, 30) (0, 23, 30) 32 (0, 8, 16)(0, 14, 28)(0, 24, 28)(0, 23, 30) (0, 25, 30) 32 (0, 4, 24)(0, 16, 24)(0, 18, 28)(0, 25, 30) (0, 27, 30) 32 (0, 8, 16)(0, 12, 24)(0, 22, 28)(0, 27, 30) (0, 29, 30) 32 (0, 16, 24)(0, 20, 24)(0, 26, 28)(0, 29, 30) (0, 1, 31) 16 (0, 8, 24)(0, 4, 28)(0, 2, 30)(0, 1, 31) (0, 2, 31) 32 (0, 8, 16)(0, 8, 28)(0, 4, 30)(0, 2, 31) (0, 5, 31) 16 (0, 8, 24)(0, 20, 28)(0, 10, 30)(0, 5, 31) (0, 6, 31) 32 (0, 8, 16)(0, 24, 28)(0, 12, 30)(0, 6, 31) (0, 9, 31) 16 (0, 8, 24)(0, 4, 28)(0, 18, 30)(0, 9, 31) (0, 10, 31) 32 (0, 8, 16)(0, 8, 28)(0, 20, 30)(0, 10, 31) (0, 13, 31) 16 (0, 8, 24)(0, 20, 28)(0, 26, 30)(0, 13, 31) (0, 14, 31) 32 (0, 8, 16)(0, 24, 28)(0, 28, 30)(0, 14, 31) (0, 17, 31) 16 (0, 8, 24)(0, 4, 28)(0, 2, 30)(0, 17, 31) (0, 18, 31) 32 (0, 8, 16)(0, 8, 28)(0, 4, 30)(0, 18, 31) (0, 21, 31) 16 (0, 8, 24)(0, 20, 28)(0, 10, 30)(0, 21, 31) (0, 22, 31) 32 (0, 8, 16)(0, 24, 28)(0, 12, 30)(0, 22, 31) (0, 25, 31) 16 (0, 8, 24)(0, 4, 28)(0, 18, 30)(0, 25, 31) (0, 26, 31) 32 (0, 8, 16)(0, 8, 28)(0, 20, 30)(0, 26, 31) (0, 29, 31) 16 (0, 8, 24)(0, 20, 28)(0, 26, 30)(0, 29, 31) (0, 30, 31) 32 (0, 8, 16)(0, 24, 28)(0, 28, 30)(0, 30, 31) References and Footnotes Wikipedia: Circulant matrix (page) ↩ A composition of bijections is a bijection. ↩ Comments math (32) integer (7)