diff --git a/Project.toml b/Project.toml index a36839dd..aaf0a861 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "TensorAlgebra" uuid = "68bd88dc-f39d-4e12-b2ca-f046b68fcc6a" -version = "0.13.1" +version = "0.13.2" authors = ["ITensor developers and contributors"] [workspace] diff --git a/benchmark/Project.toml b/benchmark/Project.toml index b3d6fa8c..4d82f32f 100644 --- a/benchmark/Project.toml +++ b/benchmark/Project.toml @@ -1,3 +1,9 @@ [deps] BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" TensorAlgebra = "68bd88dc-f39d-4e12-b2ca-f046b68fcc6a" + +[sources.TensorAlgebra] +path = ".." + +[compat] +BenchmarkTools = "1" diff --git a/benchmark/README.md b/benchmark/README.md new file mode 100644 index 00000000..3f096547 --- /dev/null +++ b/benchmark/README.md @@ -0,0 +1,34 @@ +# TensorAlgebra benchmarks + +A [`BenchmarkTools.jl`](https://github.com/JuliaCI/BenchmarkTools.jl) suite for +TensorAlgebra. The benchmarks live in the `SUITE` global defined in +`benchmarks.jl`, covering the core contraction entry points (`contract`, +`contract!`) across a range of dimensions. Small dimensions track the fixed +per-call label bookkeeping, large ones the BLAS call, so a regression in either +regime shows up. + +The suite is also run once as a smoke test in the package tests (`test_benchmarks.jl`), +so it cannot silently fall out of sync with the API. + +## Running the suite + +```bash +julia --project=benchmark -e ' + include("benchmark/benchmarks.jl") + using BenchmarkTools + display(run(SUITE; verbose = true))' +``` + +## Comparing two revisions + +With [`AirspeedVelocity.jl`](https://github.com/MilesCranmer/AirspeedVelocity.jl) +installed in a shared environment, compare the working tree against `main`: + +```bash +benchpkg TensorAlgebra --rev=dirty,main -o benchmark/results/ +benchpkgtable TensorAlgebra --rev=dirty,main -i benchmark/results/ +``` + +Timings on shared or CI machines are noisy. Compare allocation counts and relative +numbers rather than absolute times, and run on a quiet machine when absolute +timings matter. diff --git a/benchmark/benchmark_specs/randomTCs.dat b/benchmark/benchmark_specs/randomTCs.dat deleted file mode 100644 index 44cc162d..00000000 --- a/benchmark/benchmark_specs/randomTCs.dat +++ /dev/null @@ -1,1000 +0,0 @@ -C[n,m,a] = A[u,m,n] * B[a,u] & a:120; m:108; u:120; n:120; -C[a,n,m] = A[a,u] * B[u,m,n] & a:120; m:108; u:120; n:108; -C[m,a,n] = A[m,u,n] * B[a,u] & a:120; u:108; m:120; n:108; -C[m,n,a] = A[m,u,n] * B[a,u] & a:120; u:108; m:120; n:108; -C[o,n,a,m] = A[u,o,m,n] * B[a,u] & a:32; m:30; u:32; o:32; n:32; -C[n,m,a,o] = A[u,o,m,n] * B[a,u] & a:32; m:30; u:32; o:32; n:32; -C[m,o,n,a] = A[n,o,m,u] * B[a,u] & a:32; u:32; m:32; o:30; n:32; -C[o,n,a,m] = A[n,o,m,u] * B[a,u] & a:32; u:32; m:30; o:32; n:32; -C[n,m,p,a,o] = A[u,m,n,p,o] * B[u,a] & a:16; m:15; o:16; n:16; p:16; u:16; -C[m,a,o,p,n] = A[u,m,n,p,o] * B[u,a] & a:16; m:16; o:15; n:16; p:16; u:16; -C[p,n,o,m,a] = A[o,p,m,u,n] * B[u,a] & a:16; m:15; o:16; n:16; p:16; u:16; -C[a,p,n,m,o] = A[u,a] * B[o,p,m,u,n] & a:24; m:16; o:16; n:16; p:16; u:16; -C[q,p,o,m,a,n] = A[p,q,m,n,o,u] * B[u,a] & a:8; m:9; o:10; n:10; q:8; p:8; u:8; -C[n,m,a,q,p,o] = A[p,q,m,n,o,u] * B[u,a] & a:8; m:9; o:10; n:8; q:10; p:8; u:8; -C[n,a,p,q,m,o] = A[o,p,m,u,q,n] * B[u,a] & a:8; m:9; o:8; n:8; q:10; p:10; u:8; -C[o,m,q,p,a,n] = A[o,p,m,u,q,n] * B[u,a] & a:8; m:9; o:8; n:10; q:10; p:10; u:8; -C[a,b,m] = A[u,b,a] * B[u,m] & a:120; m:108; b:108; u:120; -C[m,a,b] = A[u,m] * B[u,b,a] & a:108; m:120; b:108; u:120; -C[b,m,a] = A[u,b,a] * B[m,u] & a:108; m:120; b:120; u:120; -C[m,a,b] = A[m,u] * B[u,b,a] & a:108; m:120; b:108; u:120; -C[n,m,b,a] = A[m,u,n] * B[u,a,b] & a:32; u:1152; b:32; m:24; n:32; -C[a,n,m,b] = A[u,a,b] * B[m,u,n] & a:32; u:1152; b:30; m:32; n:32; -C[b,a,n,m] = A[u,a,b] * B[n,u,m] & a:30; u:1152; b:32; m:32; n:32; -C[m,a,n,b] = A[n,u,m] * B[u,a,b] & a:32; u:1152; b:32; m:24; n:32; -C[a,m] = A[v,u,a] * B[v,m,u] & a:120; m:108; u:108; v:120; -C[m,a] = A[v,m,u] * B[v,u,a] & a:108; u:108; m:120; v:120; -C[m,a] = A[u,m,v] * B[v,u,a] & a:108; m:120; u:120; v:120; -C[a,m] = A[v,u,a] * B[u,m,v] & a:120; m:108; u:120; v:120; -C[a,o,b,m,n] = A[b,a,u] * B[u,o,n,m] & a:24; b:16; m:16; o:16; n:16; u:256; -C[b,o,m,n,a] = A[b,a,u] * B[u,o,n,m] & a:15; b:16; m:16; o:16; n:16; u:256; -C[a,b,o,m,n] = A[b,a,u] * B[o,u,n,m] & a:24; b:16; m:16; o:16; n:16; u:270; -C[m,n,a,b,o] = A[o,u,n,m] * B[b,a,u] & a:16; b:16; m:16; o:16; n:15; u:270; -C[n,a,m] = A[u,v,n,m] * B[a,v,u] & a:1152; m:30; n:32; u:32; v:32; -C[a,m,n] = A[a,v,u] * B[u,v,n,m] & a:1152; m:32; n:32; u:32; v:32; -C[n,a,m] = A[m,u,v,n] * B[a,v,u] & a:1152; u:32; n:24; m:32; v:32; -C[a,m,n] = A[a,v,u] * B[m,u,v,n] & a:1152; u:32; n:32; m:32; v:32; -C[o,m,n,b,p,a] = A[n,o,p,u,m] * B[u,a,b] & a:10; b:10; m:9; o:8; n:8; p:10; u:96; -C[o,a,p,b,m,n] = A[n,o,p,u,m] * B[u,a,b] & a:10; b:10; m:9; o:8; n:8; p:10; u:96; -C[b,n,m,a,p,o] = A[u,a,b] * B[n,u,m,o,p] & a:9; b:8; m:10; o:10; n:8; p:10; u:96; -C[a,p,b,n,o,m] = A[u,a,b] * B[n,u,m,o,p] & a:8; b:9; m:10; o:10; n:8; p:10; u:96; -C[a,m,n,o] = A[v,a,u] * B[o,u,m,v,n] & a:240; m:16; o:16; n:16; u:16; v:16; -C[a,n,o,m] = A[v,a,u] * B[o,u,m,v,n] & a:240; m:16; o:16; n:16; u:16; v:16; -C[a,m,n,o] = A[v,a,u] * B[o,v,u,n,m] & a:240; m:16; o:16; n:16; u:16; v:16; -C[a,m,o,n] = A[v,a,u] * B[o,v,u,n,m] & a:240; m:16; o:16; n:16; u:16; v:16; -C[a,m,o,n,p] = A[v,u,a] * B[p,v,n,u,o,m] & a:96; m:10; o:10; n:10; p:8; u:10; v:8; -C[a,p,m,o,n] = A[v,u,a] * B[p,v,n,u,o,m] & a:96; m:10; o:10; n:10; p:8; u:10; v:8; -C[a,m,p,n,o] = A[v,u,a] * B[p,u,v,m,o,n] & a:96; m:10; o:10; n:10; p:8; u:10; v:8; -C[a,m,n,o,p] = A[v,u,a] * B[p,u,v,m,o,n] & a:96; m:10; o:10; n:10; p:8; u:10; v:8; -C[c,m,a,b] = A[b,a,c,u] * B[u,m] & a:30; m:32; c:32; b:32; u:32; -C[b,c,a,m] = A[b,a,c,u] * B[u,m] & a:30; m:32; c:32; b:32; u:32; -C[c,a,m,b] = A[b,a,c,u] * B[m,u] & a:30; m:32; c:32; b:32; u:32; -C[a,m,c,b] = A[b,a,c,u] * B[m,u] & a:32; m:32; c:30; b:32; u:32; -C[n,a,c,m,b] = A[u,n,m] * B[c,b,u,a] & a:16; c:16; b:16; m:15; n:16; u:256; -C[m,n,b,c,a] = A[u,n,m] * B[c,b,u,a] & a:16; c:16; b:16; m:16; n:15; u:256; -C[c,a,n,b,m] = A[c,b,u,a] * B[n,u,m] & a:15; c:16; b:16; m:16; n:16; u:270; -C[c,m,n,b,a] = A[c,b,u,a] * B[n,u,m] & a:15; c:16; b:16; m:16; n:16; u:270; -C[m,b,a] = A[m,u,v] * B[a,b,v,u] & a:32; m:1152; b:32; u:32; v:32; -C[b,m,a] = A[a,b,v,u] * B[m,u,v] & a:24; m:1152; b:32; u:32; v:32; -C[a,m,b] = A[a,b,v,u] * B[u,m,v] & a:32; m:1152; b:30; u:32; v:32; -C[b,m,a] = A[a,b,v,u] * B[u,m,v] & a:24; m:1152; b:32; u:32; v:32; -C[a,o,m,b,n,c] = A[u,b,a,c] * B[n,m,o,u] & a:8; c:9; b:10; m:10; o:10; n:8; u:1000; -C[m,n,c,b,o,a] = A[n,m,o,u] * B[u,b,a,c] & a:10; c:10; b:10; m:8; o:9; n:8; u:1000; -C[o,a,m,n,b,c] = A[u,n,m,o] * B[u,b,a,c] & a:10; c:10; b:10; m:9; o:8; n:10; u:1000; -C[o,a,m,b,n,c] = A[u,n,m,o] * B[u,b,a,c] & a:10; c:10; b:10; m:9; o:8; n:10; u:1000; -C[b,n,a,m] = A[a,u,v,b] * B[n,v,m,u] & a:24; b:32; m:32; n:32; u:32; v:32; -C[n,b,m,a] = A[n,v,m,u] * B[a,u,v,b] & a:32; b:32; m:30; n:32; u:32; v:32; -C[a,m,n,b] = A[a,u,v,b] * B[m,v,u,n] & a:32; b:30; m:32; n:32; u:32; v:32; -C[b,m,a,n] = A[a,u,v,b] * B[m,v,u,n] & a:24; b:32; m:32; n:32; u:32; v:32; -C[a,m] = A[u,a,v,w] * B[v,m,w,u] & a:24; m:32; u:32; w:32; v:32; -C[m,a] = A[v,m,w,u] * B[u,a,v,w] & a:32; u:32; m:24; w:32; v:32; -C[m,a] = A[m,v,u,w] * B[u,a,v,w] & a:32; u:32; m:24; w:32; v:32; -C[a,m] = A[u,a,v,w] * B[m,v,u,w] & a:24; m:32; u:32; w:32; v:32; -C[m,a,b,n,o] = A[m,u,v,o,n] * B[u,b,a,v] & a:16; b:16; m:16; o:15; n:16; u:16; v:16; -C[n,m,a,b,o] = A[m,u,v,o,n] * B[u,b,a,v] & a:16; b:16; m:16; o:15; n:16; u:16; v:16; -C[m,b,n,a,o] = A[v,n,o,u,m] * B[u,b,a,v] & a:16; b:16; m:16; o:15; n:16; u:16; v:16; -C[b,m,a,o,n] = A[u,b,a,v] * B[v,n,o,u,m] & a:15; b:16; m:16; o:16; n:16; u:16; v:16; -C[a,n,m] = A[u,w,a,v] * B[m,n,w,v,u] & a:240; m:16; n:16; u:16; w:16; v:16; -C[a,m,n] = A[u,w,a,v] * B[v,w,u,n,m] & a:240; m:16; n:16; u:16; w:16; v:16; -C[a,n,m] = A[u,w,a,v] * B[m,w,v,n,u] & a:240; m:16; n:16; u:16; w:16; v:16; -C[a,m,n] = A[u,w,a,v] * B[m,w,v,n,u] & a:240; m:16; n:16; u:16; w:16; v:16; -C[o,b,p,a,n,m] = A[n,v,u,p,m,o] * B[a,u,b,v] & a:8; b:10; m:9; o:8; n:8; p:10; u:10; v:10; -C[a,m,p,b,o,n] = A[a,u,b,v] * B[n,v,u,p,m,o] & a:8; b:9; m:10; o:10; n:8; p:10; u:10; v:10; -C[n,o,a,p,m,b] = A[n,p,o,m,u,v] * B[a,u,b,v] & a:8; b:10; m:9; o:10; n:8; p:10; u:10; v:10; -C[a,o,n,m,b,p] = A[a,u,b,v] * B[n,p,o,m,u,v] & a:8; b:9; m:10; o:10; n:8; p:10; u:10; v:10; -C[n,m,a,o] = A[n,v,u,w,o,m] * B[v,w,u,a] & a:972; m:9; o:10; n:8; u:10; w:10; v:8; -C[n,a,m,o] = A[n,v,u,w,o,m] * B[v,w,u,a] & a:972; m:9; o:10; n:8; u:10; w:10; v:8; -C[m,a,n,o] = A[u,v,m,n,w,o] * B[v,w,u,a] & a:972; m:8; o:9; n:10; u:8; w:10; v:8; -C[o,n,a,m] = A[u,v,m,n,w,o] * B[v,w,u,a] & a:972; m:9; o:8; n:10; u:8; w:10; v:8; -C[b,d,c,m,a] = A[u,d,b,c,a] * B[m,u] & a:15; c:16; b:16; d:16; m:16; u:16; -C[c,d,a,m,b] = A[u,d,b,c,a] * B[m,u] & a:15; c:16; b:16; d:16; m:16; u:16; -C[d,m,c,b,a] = A[u,d,b,c,a] * B[u,m] & a:15; c:16; b:16; d:16; m:16; u:16; -C[d,c,b,m,a] = A[u,d,b,c,a] * B[u,m] & a:15; c:16; b:16; d:16; m:16; u:16; -C[n,a,c,b,m,d] = A[m,n,u] * B[a,b,u,d,c] & a:8; c:10; b:10; d:10; m:24; n:8; u:90; -C[d,b,c,a,n,m] = A[a,b,u,d,c] * B[m,n,u] & a:8; c:9; b:10; d:8; m:8; n:10; u:90; -C[m,c,d,n,b,a] = A[u,m,n] * B[a,b,u,d,c] & a:8; c:10; b:10; d:10; m:8; n:9; u:96; -C[c,d,n,m,b,a] = A[a,b,u,d,c] * B[u,m,n] & a:8; c:8; b:9; d:10; m:10; n:10; u:96; -C[m,a,c,b] = A[u,v,m] * B[a,b,v,c,u] & a:16; c:16; b:16; m:240; u:16; v:16; -C[m,b,c,a] = A[u,v,m] * B[a,b,v,c,u] & a:16; c:16; b:16; m:240; u:16; v:16; -C[m,c,b,a] = A[u,m,v] * B[a,b,v,c,u] & a:16; c:16; b:16; m:240; u:16; v:16; -C[m,b,c,a] = A[u,m,v] * B[a,b,v,c,u] & a:16; c:16; b:16; m:240; u:16; v:16; -C[m,b,n,a,c] = A[u,v,m,n] * B[a,v,c,u,b] & a:16; c:16; b:16; m:16; n:15; u:16; v:16; -C[c,n,m,b,a] = A[a,v,c,u,b] * B[u,v,m,n] & a:16; c:16; b:15; m:16; n:16; u:16; v:16; -C[n,a,m,b,c] = A[m,n,v,u] * B[a,v,c,u,b] & a:16; c:16; b:16; m:24; n:16; u:16; v:16; -C[m,a,c,b,n] = A[m,n,v,u] * B[a,v,c,u,b] & a:16; c:16; b:16; m:16; n:15; u:16; v:16; -C[m,b,a] = A[w,u,v,m] * B[w,v,a,u,b] & a:16; b:16; m:240; u:16; w:16; v:16; -C[m,a,b] = A[w,u,v,m] * B[w,v,a,u,b] & a:16; b:16; m:240; u:16; w:16; v:16; -C[m,b,a] = A[u,v,w,m] * B[w,v,a,u,b] & a:16; b:16; m:240; u:16; w:16; v:16; -C[m,a,b] = A[u,v,w,m] * B[w,v,a,u,b] & a:16; b:16; m:240; u:16; w:16; v:16; -C[c,m,o,b,n,a] = A[b,c,v,a,u] * B[u,n,v,o,m] & a:9; c:8; b:8; m:10; o:10; n:10; u:32; v:32; -C[b,m,a,o,c,n] = A[b,c,v,a,u] * B[u,n,v,o,m] & a:9; c:10; b:8; m:10; o:10; n:10; u:32; v:32; -C[m,o,c,b,n,a] = A[u,v,o,m,n] * B[b,c,v,a,u] & a:10; c:10; b:8; m:8; o:9; n:10; u:32; v:32; -C[o,c,a,n,m,b] = A[u,v,o,m,n] * B[b,c,v,a,u] & a:10; c:10; b:8; m:9; o:8; n:10; u:32; v:32; -C[m,a,n,b] = A[v,n,w,u,m] * B[v,u,a,b,w] & a:16; b:16; m:16; n:15; u:16; w:16; v:16; -C[b,a,n,m] = A[v,u,a,b,w] * B[v,n,w,u,m] & a:15; b:16; m:16; n:16; u:16; w:16; v:16; -C[a,m,b,n] = A[v,u,a,b,w] * B[n,w,u,m,v] & a:16; b:15; m:16; n:16; u:16; w:16; v:16; -C[a,n,m,b] = A[v,u,a,b,w] * B[n,w,u,m,v] & a:16; b:15; m:16; n:16; u:16; w:16; v:16; -C[b,o,n,m,a] = A[a,u,v,w,b] * B[n,u,o,m,w,v] & a:24; b:32; m:10; o:10; n:8; u:10; w:10; v:10; -C[o,b,m,n,a] = A[n,u,o,m,w,v] * B[a,u,v,w,b] & a:32; b:32; m:9; o:8; n:8; u:10; w:10; v:10; -C[b,o,a,n,m] = A[a,u,v,w,b] * B[w,u,m,o,v,n] & a:24; b:32; m:10; o:10; n:10; u:10; w:8; v:10; -C[a,m,b,o,n] = A[a,u,v,w,b] * B[w,u,m,o,v,n] & a:32; b:30; m:10; o:10; n:10; u:10; w:8; v:10; -C[a,c,m,b,e,d] = A[u,c,e,b,a,d] * B[m,u] & a:8; c:9; b:10; e:10; d:10; m:8; u:8; -C[m,d,e,a,b,c] = A[m,u] * B[u,c,e,b,a,d] & a:10; c:10; b:10; e:10; d:10; m:24; u:8; -C[b,e,c,d,a,m] = A[u,c,e,b,a,d] * B[u,m] & a:9; c:10; b:8; e:10; d:10; m:8; u:8; -C[a,b,m,c,d,e] = A[u,c,e,b,a,d] * B[u,m] & a:8; c:9; b:10; e:10; d:10; m:8; u:8; -C[c,a,m,b,d] = A[a,d,b,u,v,c] * B[m,v,u] & a:8; c:8; b:9; d:10; m:96; u:10; v:10; -C[d,a,c,m,b] = A[a,d,b,u,v,c] * B[m,v,u] & a:8; c:9; b:10; d:8; m:96; u:10; v:10; -C[m,b,d,c,a] = A[v,u,m] * B[a,d,b,u,v,c] & a:8; c:10; b:10; d:10; m:96; u:10; v:8; -C[m,c,a,b,d] = A[v,u,m] * B[a,d,b,u,v,c] & a:8; c:10; b:10; d:10; m:96; u:10; v:8; -C[m,b,d,c,n,a] = A[u,n,v,m] * B[u,d,a,v,c,b] & a:10; c:10; b:10; d:10; m:8; n:9; u:8; v:10; -C[b,m,a,c,n,d] = A[u,d,a,v,c,b] * B[u,n,v,m] & a:9; c:10; b:8; d:10; m:10; n:10; u:8; v:10; -C[a,d,c,m,b,n] = A[u,d,a,v,c,b] * B[v,m,n,u] & a:8; c:9; b:10; d:10; m:10; n:10; u:8; v:8; -C[a,c,n,m,d,b] = A[u,d,a,v,c,b] * B[v,m,n,u] & a:8; c:9; b:10; d:10; m:10; n:10; u:8; v:8; -C[b,m,a,c] = A[w,v,b,u,c,a] * B[m,v,u,w] & a:9; c:10; b:8; m:1000; u:10; w:8; v:10; -C[c,b,m,a] = A[w,v,b,u,c,a] * B[m,v,u,w] & a:9; c:8; b:10; m:1000; u:10; w:8; v:10; -C[b,a,m,c] = A[w,v,b,u,c,a] * B[w,u,v,m] & a:9; c:10; b:8; m:972; u:10; w:8; v:10; -C[m,a,c,b] = A[w,u,v,m] * B[w,v,b,u,c,a] & a:10; c:10; b:10; m:960; u:10; w:8; v:10; -C[a,n,m,b,c] = A[u,v,a,w,c,b] * B[v,w,n,u,m] & a:8; c:9; b:10; m:32; n:32; u:8; w:10; v:8; -C[a,n,c,m,b] = A[u,v,a,w,c,b] * B[v,w,n,u,m] & a:8; c:9; b:10; m:32; n:32; u:8; w:10; v:8; -C[m,b,n,c,a] = A[v,m,w,u,n] * B[u,v,a,w,c,b] & a:10; c:10; b:10; m:32; n:30; u:8; w:10; v:8; -C[b,n,m,c,a] = A[u,v,a,w,c,b] * B[v,m,w,u,n] & a:9; c:10; b:8; m:32; n:32; u:8; w:10; v:8; -C[n,m,c,o,b,a] = A[m,u,w,v,n,o] * B[v,w,u,b,c,a] & a:10; c:10; b:10; m:8; o:9; n:8; u:10; w:10; v:8; -C[o,m,b,n,a,c] = A[m,u,w,v,n,o] * B[v,w,u,b,c,a] & a:10; c:10; b:10; m:8; o:8; n:9; u:10; w:10; v:8; -C[a,n,b,o,m,c] = A[v,w,u,b,c,a] * B[o,n,w,m,u,v] & a:8; c:9; b:10; m:10; o:8; n:10; u:10; w:10; v:8; -C[n,b,a,m,c,o] = A[o,n,w,m,u,v] * B[v,w,u,b,c,a] & a:10; c:10; b:10; m:9; o:8; n:8; u:10; w:10; v:8; -C[a,n,m] = A[a,u] * B[u,m,n] & a:144; m:128; u:144; n:135; -C[m,a,n] = A[u,m,n] * B[a,u] & a:144; m:144; u:144; n:135; -C[m,a,n] = A[n,m,u] * B[a,u] & a:144; u:135; m:144; n:144; -C[m,n,a] = A[n,m,u] * B[a,u] & a:144; u:135; m:144; n:144; -C[o,m,a,n] = A[m,n,u,o] * B[a,u] & a:40; u:40; m:40; o:40; n:36; -C[a,n,o,m] = A[a,u] * B[m,n,u,o] & a:48; u:40; m:40; o:40; n:40; -C[o,n,m,a] = A[u,m,n,o] * B[a,u] & a:40; m:36; u:40; o:40; n:40; -C[n,m,a,o] = A[u,m,n,o] * B[a,u] & a:40; m:36; u:40; o:40; n:40; -C[p,o,m,n,a] = A[u,p,m,o,n] * B[u,a] & a:16; m:18; o:20; n:20; p:16; u:16; -C[p,n,a,o,m] = A[u,p,m,o,n] * B[u,a] & a:16; m:18; o:20; n:20; p:16; u:16; -C[o,m,p,n,a] = A[o,n,u,p,m] * B[u,a] & a:16; m:18; o:16; n:20; p:20; u:16; -C[n,a,m,o,p] = A[o,n,u,p,m] * B[u,a] & a:16; m:18; o:16; n:16; p:20; u:16; -C[p,a,n,q,m,o] = A[q,o,n,u,m,p] * B[a,u] & a:8; m:12; o:12; n:12; q:8; p:8; u:12; -C[p,o,m,q,n,a] = A[q,o,n,u,m,p] * B[a,u] & a:8; m:12; o:12; n:12; q:8; p:8; u:12; -C[n,o,a,q,p,m] = A[m,u,o,p,q,n] * B[a,u] & a:8; m:8; o:12; n:8; q:12; p:12; u:12; -C[q,o,a,p,m,n] = A[m,u,o,p,q,n] * B[a,u] & a:8; m:8; o:12; n:12; q:8; p:12; u:12; -C[m,a,b] = A[m,u] * B[a,u,b] & a:144; m:144; b:135; u:135; -C[b,a,m] = A[a,u,b] * B[m,u] & a:144; m:144; b:144; u:135; -C[a,m,b] = A[a,u,b] * B[u,m] & a:144; m:128; b:135; u:144; -C[b,a,m] = A[a,u,b] * B[u,m] & a:144; m:128; b:144; u:144; -C[b,n,m,a] = A[u,b,a] * B[m,n,u] & a:36; u:1536; b:40; m:40; n:40; -C[n,m,a,b] = A[m,n,u] * B[u,b,a] & a:40; u:1536; b:40; m:48; n:40; -C[n,b,m,a] = A[u,m,n] * B[u,b,a] & a:40; u:1536; b:40; m:36; n:40; -C[a,n,m,b] = A[u,b,a] * B[u,m,n] & a:40; u:1536; b:36; m:40; n:40; -C[m,a] = A[v,u,m] * B[v,a,u] & a:128; m:144; u:135; v:144; -C[a,m] = A[v,a,u] * B[v,u,m] & a:144; m:128; u:135; v:144; -C[m,a] = A[v,m,u] * B[v,a,u] & a:128; u:135; m:144; v:144; -C[a,m] = A[v,a,u] * B[v,m,u] & a:144; m:128; u:135; v:144; -C[m,o,n,b,a] = A[n,o,u,m] * B[a,b,u] & a:16; b:20; m:16; o:18; n:16; u:324; -C[a,m,n,b,o] = A[a,b,u] * B[n,o,u,m] & a:16; b:18; m:20; o:20; n:16; u:324; -C[b,m,n,a,o] = A[a,b,u] * B[o,u,n,m] & a:24; b:16; m:20; o:16; n:20; u:324; -C[o,m,n,b,a] = A[o,u,n,m] * B[a,b,u] & a:16; b:20; m:18; o:16; n:20; u:324; -C[a,n,m] = A[a,u,v] * B[u,m,v,n] & a:1536; m:40; n:40; u:40; v:40; -C[n,m,a] = A[u,m,v,n] * B[a,u,v] & a:1536; m:36; n:40; u:40; v:40; -C[a,n,m] = A[a,u,v] * B[v,n,u,m] & a:1536; m:40; n:40; u:40; v:40; -C[n,a,m] = A[v,n,u,m] * B[a,u,v] & a:1536; m:36; n:40; u:40; v:40; -C[o,n,a,m,p,b] = A[o,m,u,n,p] * B[b,a,u] & a:12; b:8; m:12; o:8; n:12; p:12; u:128; -C[m,n,b,p,a,o] = A[o,m,u,n,p] * B[b,a,u] & a:12; b:8; m:8; o:8; n:12; p:12; u:128; -C[n,b,m,p,a,o] = A[u,p,o,n,m] * B[b,a,u] & a:12; b:8; m:12; o:12; n:8; p:12; u:128; -C[o,m,n,b,p,a] = A[u,p,o,n,m] * B[b,a,u] & a:12; b:8; m:12; o:8; n:12; p:12; u:128; -C[a,m,n,o] = A[a,v,u] * B[n,v,o,u,m] & a:288; m:20; o:20; n:16; u:20; v:20; -C[m,a,n,o] = A[n,v,o,u,m] * B[a,v,u] & a:320; m:16; o:18; n:16; u:20; v:20; -C[a,m,o,n] = A[a,v,u] * B[v,n,u,o,m] & a:288; m:20; o:20; n:20; u:20; v:16; -C[o,a,n,m] = A[v,n,u,o,m] * B[a,v,u] & a:320; m:18; o:16; n:20; u:20; v:16; -C[p,a,m,n,o] = A[o,p,u,n,v,m] * B[a,v,u] & a:128; m:12; o:8; n:12; p:8; u:12; v:12; -C[p,a,n,m,o] = A[o,p,u,n,v,m] * B[a,v,u] & a:128; m:12; o:8; n:12; p:8; u:12; v:12; -C[a,m,o,p,n] = A[a,v,u] * B[n,m,u,v,p,o] & a:120; m:12; o:12; n:8; p:12; u:12; v:12; -C[a,p,m,n,o] = A[a,v,u] * B[n,m,u,v,p,o] & a:120; m:12; o:12; n:8; p:12; u:12; v:12; -C[m,a,c,b] = A[m,u] * B[a,b,c,u] & a:40; m:48; c:40; b:40; u:40; -C[c,b,m,a] = A[a,b,c,u] * B[m,u] & a:40; m:40; c:40; b:36; u:40; -C[c,b,m,a] = A[a,b,c,u] * B[u,m] & a:40; m:40; c:40; b:36; u:40; -C[c,a,m,b] = A[a,b,c,u] * B[u,m] & a:40; m:40; c:40; b:36; u:40; -C[n,a,b,m,c] = A[n,u,m] * B[c,a,u,b] & a:20; c:16; b:20; m:18; n:16; u:324; -C[c,n,m,a,b] = A[c,a,u,b] * B[n,u,m] & a:18; c:16; b:20; m:20; n:16; u:324; -C[a,m,b,c,n] = A[c,a,u,b] * B[m,n,u] & a:16; c:16; b:18; m:16; n:20; u:324; -C[n,b,a,c,m] = A[m,n,u] * B[c,a,u,b] & a:20; c:16; b:20; m:24; n:16; u:324; -C[b,m,a] = A[u,v,b,a] * B[u,m,v] & a:36; m:1536; b:40; u:40; v:40; -C[a,b,m] = A[u,v,b,a] * B[u,m,v] & a:40; m:1536; b:36; u:40; v:40; -C[m,a,b] = A[v,u,m] * B[u,v,b,a] & a:40; m:1536; b:40; u:40; v:40; -C[b,m,a] = A[u,v,b,a] * B[v,u,m] & a:36; m:1536; b:40; u:40; v:40; -C[m,a,o,c,n,b] = A[m,n,o,u] * B[a,b,c,u] & a:8; c:12; b:12; m:8; o:12; n:12; u:1500; -C[m,c,n,b,o,a] = A[m,n,o,u] * B[a,b,c,u] & a:8; c:12; b:12; m:8; o:12; n:12; u:1500; -C[c,m,b,o,a,n] = A[a,b,c,u] * B[o,m,u,n] & a:8; c:8; b:12; m:12; o:8; n:12; u:1500; -C[o,n,b,a,c,m] = A[o,m,u,n] * B[a,b,c,u] & a:8; c:12; b:12; m:12; o:8; n:12; u:1500; -C[b,m,a,n] = A[a,u,b,v] * B[v,m,u,n] & a:48; b:40; m:40; n:40; u:40; v:40; -C[n,b,m,a] = A[v,m,u,n] * B[a,u,b,v] & a:40; b:40; m:36; n:40; u:40; v:40; -C[n,b,m,a] = A[m,v,u,n] * B[a,u,b,v] & a:40; b:40; m:48; n:40; u:40; v:40; -C[m,n,b,a] = A[m,v,u,n] * B[a,u,b,v] & a:40; b:40; m:40; n:36; u:40; v:40; -C[m,a] = A[m,v,u,w] * B[a,w,u,v] & a:40; u:40; m:48; w:40; v:40; -C[a,m] = A[a,w,u,v] * B[m,v,u,w] & a:48; m:40; u:40; w:40; v:40; -C[m,a] = A[v,w,m,u] * B[a,w,u,v] & a:40; u:40; m:48; w:40; v:40; -C[a,m] = A[a,w,u,v] * B[v,w,m,u] & a:48; m:40; u:40; w:40; v:40; -C[n,o,a,b,m] = A[u,v,n,m,o] * B[a,u,b,v] & a:16; b:18; m:18; o:20; n:16; u:16; v:20; -C[a,b,o,m,n] = A[a,u,b,v] * B[u,v,n,m,o] & a:16; b:18; m:20; o:20; n:20; u:16; v:20; -C[o,a,b,m,n] = A[u,n,v,m,o] * B[a,u,b,v] & a:16; b:18; m:18; o:16; n:20; u:16; v:20; -C[a,b,n,o,m] = A[a,u,b,v] * B[u,n,v,m,o] & a:16; b:18; m:20; o:20; n:20; u:16; v:20; -C[a,m,n] = A[u,v,w,a] * B[v,n,u,w,m] & a:288; m:20; n:20; u:16; w:20; v:16; -C[m,a,n] = A[v,n,u,w,m] * B[u,v,w,a] & a:324; m:16; n:18; u:16; w:20; v:16; -C[m,a,n] = A[u,n,v,m,w] * B[u,v,w,a] & a:324; m:16; n:18; u:16; w:20; v:20; -C[a,m,n] = A[u,v,w,a] * B[u,n,v,m,w] & a:288; m:20; n:20; u:16; w:20; v:20; -C[m,a,o,n,b,p] = A[u,m,n,p,v,o] * B[a,u,b,v] & a:8; b:12; m:8; o:12; n:12; p:12; u:8; v:12; -C[a,o,n,b,p,m] = A[a,u,b,v] * B[u,m,n,p,v,o] & a:8; b:12; m:12; o:12; n:12; p:12; u:8; v:12; -C[o,n,a,p,b,m] = A[m,v,p,o,u,n] * B[a,u,b,v] & a:8; b:12; m:8; o:8; n:12; p:12; u:12; v:12; -C[m,o,p,n,a,b] = A[m,v,p,o,u,n] * B[a,u,b,v] & a:8; b:12; m:8; o:12; n:12; p:12; u:12; v:12; -C[n,o,m,a] = A[n,m,v,u,o,w] * B[a,u,v,w] & a:1536; m:12; o:12; n:8; u:12; w:12; v:12; -C[a,n,o,m] = A[a,u,v,w] * B[n,m,v,u,o,w] & a:1536; m:12; o:12; n:8; u:12; w:12; v:12; -C[m,a,n,o] = A[v,n,w,o,m,u] * B[a,u,v,w] & a:1536; m:8; o:12; n:12; u:12; w:12; v:8; -C[a,m,o,n] = A[a,u,v,w] * B[v,n,w,o,m,u] & a:1536; m:12; o:12; n:12; u:12; w:12; v:8; -C[d,m,b,a,c] = A[b,u,a,d,c] * B[u,m] & a:18; c:20; b:16; d:16; m:16; u:16; -C[b,m,a,c,d] = A[b,u,a,d,c] * B[u,m] & a:18; c:20; b:16; d:20; m:16; u:16; -C[d,b,c,a,m] = A[b,u,a,d,c] * B[m,u] & a:18; c:20; b:16; d:16; m:16; u:20; -C[m,c,d,b,a] = A[m,u] * B[b,u,a,d,c] & a:20; c:20; b:16; d:20; m:24; u:20; -C[b,c,n,d,m,a] = A[u,a,c,d,b] * B[n,m,u] & a:12; c:12; b:8; d:12; m:12; n:8; u:128; -C[d,m,c,a,n,b] = A[u,a,c,d,b] * B[n,m,u] & a:12; c:12; b:12; d:8; m:12; n:8; u:128; -C[b,a,d,m,n,c] = A[u,a,c,d,b] * B[u,n,m] & a:12; c:12; b:8; d:12; m:12; n:12; u:128; -C[n,b,c,m,a,d] = A[u,n,m] * B[u,a,c,d,b] & a:12; c:12; b:12; d:12; m:12; n:8; u:128; -C[b,m,c,a] = A[a,u,b,c,v] * B[u,v,m] & a:16; c:18; b:16; m:324; u:16; v:20; -C[m,b,a,c] = A[u,v,m] * B[a,u,b,c,v] & a:16; c:20; b:20; m:288; u:16; v:20; -C[b,a,m,c] = A[a,u,b,c,v] * B[v,u,m] & a:16; c:18; b:16; m:324; u:20; v:16; -C[c,m,b,a] = A[a,u,b,c,v] * B[v,u,m] & a:16; c:16; b:18; m:324; u:20; v:16; -C[b,m,a,c,n] = A[c,u,b,a,v] * B[m,n,u,v] & a:18; c:16; b:16; m:16; n:18; u:20; v:20; -C[b,c,a,n,m] = A[c,u,b,a,v] * B[m,n,u,v] & a:18; c:16; b:16; m:16; n:18; u:20; v:20; -C[n,b,c,a,m] = A[m,n,v,u] * B[c,u,b,a,v] & a:20; c:16; b:20; m:24; n:16; u:20; v:20; -C[m,c,a,n,b] = A[m,n,v,u] * B[c,u,b,a,v] & a:20; c:16; b:20; m:16; n:18; u:20; v:20; -C[b,m,a] = A[u,b,a,v,w] * B[m,w,v,u] & a:18; b:16; m:320; u:16; w:20; v:20; -C[m,a,b] = A[m,w,v,u] * B[u,b,a,v,w] & a:20; b:20; m:288; u:16; w:20; v:20; -C[a,m,b] = A[u,b,a,v,w] * B[u,v,m,w] & a:16; b:18; m:324; u:16; w:20; v:20; -C[b,m,a] = A[u,b,a,v,w] * B[u,v,m,w] & a:18; b:16; m:324; u:16; w:20; v:20; -C[a,m,c,n,b,o] = A[b,v,c,a,u] * B[u,n,o,m,v] & a:8; c:12; b:8; m:12; o:12; n:12; u:40; v:40; -C[m,o,b,c,n,a] = A[u,n,o,m,v] * B[b,v,c,a,u] & a:12; c:12; b:8; m:8; o:12; n:12; u:40; v:40; -C[n,o,b,m,a,c] = A[u,v,n,m,o] * B[b,v,c,a,u] & a:12; c:12; b:8; m:12; o:12; n:8; u:40; v:40; -C[b,m,a,o,c,n] = A[b,v,c,a,u] * B[u,v,n,m,o] & a:12; c:12; b:8; m:12; o:12; n:12; u:40; v:40; -C[a,b,m,n] = A[a,u,v,w,b] * B[v,u,n,w,m] & a:16; b:18; m:18; n:18; u:20; w:20; v:16; -C[b,a,n,m] = A[a,u,v,w,b] * B[v,u,n,w,m] & a:24; b:16; m:18; n:18; u:20; w:20; v:16; -C[a,b,n,m] = A[a,u,v,w,b] * B[w,n,v,u,m] & a:16; b:18; m:18; n:18; u:20; w:16; v:20; -C[a,n,b,m] = A[a,u,v,w,b] * B[w,n,v,u,m] & a:16; b:18; m:18; n:18; u:20; w:16; v:20; -C[m,o,a,n,b] = A[n,w,m,u,o,v] * B[u,v,w,a,b] & a:40; b:40; m:8; o:12; n:8; u:8; w:12; v:12; -C[m,o,b,a,n] = A[n,w,m,u,o,v] * B[u,v,w,a,b] & a:40; b:40; m:8; o:12; n:8; u:8; w:12; v:12; -C[m,n,b,a,o] = A[o,u,n,w,v,m] * B[u,v,w,a,b] & a:40; b:40; m:8; o:8; n:12; u:8; w:12; v:12; -C[b,o,a,m,n] = A[u,v,w,a,b] * B[o,u,n,w,v,m] & a:36; b:40; m:12; o:8; n:12; u:8; w:12; v:12; -C[m,b,a,d,e,c] = A[u,m] * B[c,b,d,u,e,a] & a:12; c:8; b:12; e:12; d:12; m:24; u:8; -C[m,d,a,b,e,c] = A[u,m] * B[c,b,d,u,e,a] & a:12; c:8; b:12; e:12; d:12; m:24; u:8; -C[b,e,m,c,a,d] = A[c,b,d,u,e,a] * B[m,u] & a:12; c:8; b:8; e:12; d:12; m:8; u:12; -C[m,e,c,d,a,b] = A[m,u] * B[c,b,d,u,e,a] & a:12; c:8; b:12; e:12; d:12; m:24; u:12; -C[a,d,c,b,m] = A[c,a,u,v,d,b] * B[u,m,v] & a:8; c:8; b:12; d:12; m:128; u:8; v:12; -C[d,c,m,a,b] = A[c,a,u,v,d,b] * B[u,m,v] & a:12; c:8; b:12; d:8; m:128; u:8; v:12; -C[d,a,b,c,m] = A[c,a,u,v,d,b] * B[m,v,u] & a:12; c:8; b:12; d:8; m:128; u:12; v:12; -C[d,c,b,a,m] = A[c,a,u,v,d,b] * B[m,v,u] & a:12; c:8; b:12; d:8; m:128; u:12; v:12; -C[c,d,a,b,n,m] = A[v,b,a,d,c,u] * B[u,v,m,n] & a:12; c:8; b:12; d:12; m:12; n:12; u:8; v:8; -C[m,d,n,a,c,b] = A[u,v,m,n] * B[v,b,a,d,c,u] & a:12; c:12; b:12; d:12; m:8; n:12; u:8; v:8; -C[m,c,a,b,d,n] = A[m,v,n,u] * B[v,b,a,d,c,u] & a:12; c:12; b:12; d:12; m:8; n:12; u:12; v:8; -C[n,d,a,c,b,m] = A[m,v,n,u] * B[v,b,a,d,c,u] & a:12; c:12; b:12; d:12; m:24; n:8; u:12; v:8; -C[a,b,m,c] = A[a,u,v,b,w,c] * B[m,v,u,w] & a:8; c:12; b:12; m:1536; u:12; w:12; v:12; -C[b,c,a,m] = A[a,u,v,b,w,c] * B[m,v,u,w] & a:8; c:12; b:8; m:1536; u:12; w:12; v:12; -C[c,b,a,m] = A[a,u,v,b,w,c] * B[v,w,m,u] & a:8; c:8; b:12; m:1500; u:12; w:12; v:8; -C[m,c,b,a] = A[v,w,m,u] * B[a,u,v,b,w,c] & a:8; c:12; b:12; m:1536; u:12; w:12; v:8; -C[c,m,a,n,b] = A[a,u,w,v,c,b] * B[v,u,m,w,n] & a:8; c:8; b:12; m:40; n:40; u:12; w:12; v:8; -C[m,a,b,c,n] = A[v,u,m,w,n] * B[a,u,w,v,c,b] & a:8; c:12; b:12; m:40; n:36; u:12; w:12; v:8; -C[b,m,c,n,a] = A[a,u,w,v,c,b] * B[n,m,w,u,v] & a:8; c:12; b:8; m:40; n:40; u:12; w:12; v:12; -C[b,m,a,c,n] = A[a,u,w,v,c,b] * B[n,m,w,u,v] & a:8; c:12; b:8; m:40; n:40; u:12; w:12; v:12; -C[n,o,b,a,c,m] = A[v,u,n,w,o,m] * B[b,v,c,w,a,u] & a:12; c:12; b:8; m:12; o:12; n:8; u:12; w:12; v:8; -C[a,b,m,n,o,c] = A[b,v,c,w,a,u] * B[v,u,n,w,o,m] & a:8; c:12; b:8; m:12; o:12; n:12; u:12; w:12; v:8; -C[c,b,a,n,o,m] = A[b,v,c,w,a,u] * B[v,n,m,w,u,o] & a:12; c:8; b:8; m:12; o:12; n:12; u:12; w:12; v:8; -C[c,a,m,n,o,b] = A[b,v,c,w,a,u] * B[v,n,m,w,u,o] & a:12; c:8; b:8; m:12; o:12; n:12; u:12; w:12; v:8; -C[a,m,n] = A[u,a] * B[n,u,m] & a:144; m:160; u:160; n:160; -C[m,n,a] = A[n,u,m] * B[u,a] & a:160; m:144; u:160; n:160; -C[n,a,m] = A[u,n,m] * B[u,a] & a:160; m:162; u:160; n:160; -C[a,m,n] = A[u,a] * B[u,n,m] & a:144; m:160; u:160; n:160; -C[a,m,o,n] = A[a,u] * B[u,n,o,m] & a:48; m:48; u:48; o:45; n:45; -C[m,n,a,o] = A[u,n,o,m] * B[a,u] & a:40; m:48; u:48; o:45; n:45; -C[o,n,m,a] = A[m,o,u,n] * B[a,u] & a:40; u:45; m:48; o:48; n:45; -C[n,o,m,a] = A[m,o,u,n] * B[a,u] & a:40; u:45; m:48; o:45; n:48; -C[a,o,n,p,m] = A[u,a] * B[n,u,p,o,m] & a:24; m:20; o:20; n:24; p:20; u:24; -C[o,n,m,a,p] = A[n,u,p,o,m] * B[u,a] & a:20; m:20; o:24; n:24; p:20; u:24; -C[p,o,n,m,a] = A[u,o,m,n,p] * B[u,a] & a:20; m:20; o:20; n:20; p:24; u:24; -C[a,m,p,n,o] = A[u,a] * B[u,o,m,n,p] & a:24; m:20; o:20; n:20; p:20; u:24; -C[p,q,a,n,m,o] = A[u,m,n,o,q,p] * B[a,u] & a:8; m:12; o:12; n:12; q:12; p:16; u:16; -C[m,p,o,n,a,q] = A[u,m,n,o,q,p] * B[a,u] & a:8; m:16; o:12; n:12; q:12; p:12; u:16; -C[q,n,o,p,a,m] = A[u,m,q,o,n,p] * B[a,u] & a:8; m:12; o:12; n:12; q:16; p:12; u:16; -C[m,o,p,q,n,a] = A[u,m,q,o,n,p] * B[a,u] & a:8; m:16; o:12; n:12; q:12; p:12; u:16; -C[b,m,a] = A[b,a,u] * B[m,u] & a:162; m:160; b:160; u:160; -C[m,a,b] = A[m,u] * B[b,a,u] & a:160; m:144; b:160; u:160; -C[b,m,a] = A[b,a,u] * B[u,m] & a:162; m:160; b:160; u:160; -C[m,a,b] = A[u,m] * B[b,a,u] & a:160; m:144; b:160; u:160; -C[a,m,b,n] = A[b,u,a] * B[u,m,n] & a:48; u:1944; b:48; m:48; n:45; -C[a,n,m,b] = A[b,u,a] * B[u,m,n] & a:48; u:1944; b:48; m:48; n:45; -C[a,m,n,b] = A[b,u,a] * B[n,m,u] & a:48; u:1944; b:48; m:45; n:48; -C[b,m,a,n] = A[b,u,a] * B[n,m,u] & a:45; u:1944; b:48; m:45; n:48; -C[m,a] = A[m,v,u] * B[a,u,v] & a:160; u:160; m:144; v:160; -C[a,m] = A[a,u,v] * B[m,v,u] & a:144; m:160; u:160; v:160; -C[m,a] = A[v,m,u] * B[a,u,v] & a:160; u:160; m:144; v:160; -C[a,m] = A[a,u,v] * B[v,m,u] & a:144; m:160; u:160; v:160; -C[a,n,o,m,b] = A[u,a,b] * B[m,o,n,u] & a:24; b:20; m:24; o:20; n:20; u:432; -C[o,m,b,n,a] = A[m,o,n,u] * B[u,a,b] & a:20; b:20; m:24; o:24; n:20; u:432; -C[b,m,a,o,n] = A[u,a,b] * B[n,m,u,o] & a:20; b:24; m:20; o:20; n:24; u:432; -C[n,o,a,m,b] = A[n,m,u,o] * B[u,a,b] & a:20; b:20; m:20; o:20; n:24; u:432; -C[n,a,m] = A[n,u,v,m] * B[v,u,a] & a:1944; m:45; v:48; u:45; n:48; -C[a,n,m] = A[v,u,a] * B[n,u,v,m] & a:1944; m:45; v:48; u:45; n:48; -C[m,n,a] = A[u,n,m,v] * B[v,u,a] & a:1944; m:48; v:48; u:48; n:45; -C[m,a,n] = A[u,n,m,v] * B[v,u,a] & a:1944; m:48; v:48; u:48; n:45; -C[o,m,n,a,p,b] = A[u,p,m,o,n] * B[u,b,a] & a:12; b:12; m:12; o:16; n:12; p:12; u:144; -C[a,p,n,o,b,m] = A[u,b,a] * B[u,p,m,o,n] & a:16; b:12; m:12; o:12; n:12; p:12; u:144; -C[o,p,a,m,n,b] = A[u,m,o,n,p] * B[u,b,a] & a:12; b:12; m:12; o:16; n:12; p:12; u:144; -C[m,n,a,o,b,p] = A[u,m,o,n,p] * B[u,b,a] & a:12; b:12; m:16; o:12; n:12; p:12; u:144; -C[a,m,o,n] = A[a,u,v] * B[u,o,v,n,m] & a:432; m:20; o:20; n:20; u:24; v:20; -C[m,n,o,a] = A[u,o,v,n,m] * B[a,u,v] & a:432; m:24; o:20; n:20; u:24; v:20; -C[o,a,m,n] = A[n,u,m,o,v] * B[a,u,v] & a:432; m:20; o:24; n:24; u:20; v:20; -C[n,a,o,m] = A[n,u,m,o,v] * B[a,u,v] & a:432; m:20; o:20; n:24; u:20; v:20; -C[p,o,a,n,m] = A[v,u,n,o,m,p] * B[a,u,v] & a:144; m:12; o:12; n:12; p:16; u:12; v:16; -C[o,p,m,n,a] = A[v,u,n,o,m,p] * B[a,u,v] & a:144; m:12; o:16; n:12; p:12; u:12; v:16; -C[p,m,n,o,a] = A[v,o,n,p,u,m] * B[a,u,v] & a:144; m:12; o:12; n:12; p:16; u:12; v:16; -C[a,n,o,m,p] = A[a,u,v] * B[v,o,n,p,u,m] & a:144; m:12; o:12; n:12; p:12; u:12; v:16; -C[b,c,a,m] = A[c,b,u,a] * B[u,m] & a:45; m:48; c:48; b:48; u:48; -C[a,b,c,m] = A[c,b,u,a] * B[u,m] & a:48; m:48; c:48; b:45; u:48; -C[c,m,a,b] = A[c,b,u,a] * B[m,u] & a:45; m:40; c:48; b:45; u:45; -C[m,b,a,c] = A[m,u] * B[c,b,u,a] & a:45; m:48; c:48; b:45; u:45; -C[b,a,n,c,m] = A[a,u,c,b] * B[m,n,u] & a:24; c:20; b:24; m:24; n:20; u:432; -C[a,n,c,m,b] = A[a,u,c,b] * B[m,n,u] & a:24; c:20; b:20; m:24; n:20; u:432; -C[n,m,c,a,b] = A[n,u,m] * B[a,u,c,b] & a:24; c:20; b:20; m:20; n:24; u:432; -C[n,b,a,m,c] = A[n,u,m] * B[a,u,c,b] & a:24; c:20; b:20; m:20; n:24; u:432; -C[a,b,m] = A[v,a,u,b] * B[u,v,m] & a:48; m:1944; b:45; u:48; v:48; -C[b,a,m] = A[v,a,u,b] * B[u,v,m] & a:45; m:1944; b:48; u:48; v:48; -C[a,b,m] = A[v,a,u,b] * B[m,u,v] & a:48; m:1944; b:45; u:45; v:48; -C[b,a,m] = A[v,a,u,b] * B[m,u,v] & a:45; m:1944; b:48; u:45; v:48; -C[b,a,o,c,m,n] = A[c,b,u,a] * B[n,m,u,o] & a:12; c:16; b:16; m:12; o:12; n:16; u:1800; -C[n,b,c,a,m,o] = A[n,m,u,o] * B[c,b,u,a] & a:12; c:16; b:12; m:12; o:12; n:16; u:1800; -C[b,c,n,a,o,m] = A[c,b,u,a] * B[u,m,n,o] & a:12; c:16; b:16; m:12; o:12; n:12; u:1800; -C[a,o,n,m,b,c] = A[c,b,u,a] * B[u,m,n,o] & a:16; c:16; b:12; m:12; o:12; n:12; u:1800; -C[b,n,a,m] = A[u,v,a,b] * B[n,v,m,u] & a:45; b:48; m:45; n:48; u:48; v:45; -C[a,m,n,b] = A[u,v,a,b] * B[n,v,m,u] & a:48; b:45; m:45; n:48; u:48; v:45; -C[a,n,m,b] = A[u,v,a,b] * B[m,n,v,u] & a:48; b:45; m:48; n:45; u:48; v:45; -C[b,n,m,a] = A[u,v,a,b] * B[m,n,v,u] & a:45; b:48; m:48; n:45; u:48; v:45; -C[m,a] = A[u,v,w,m] * B[u,a,w,v] & a:48; m:48; u:48; w:45; v:45; -C[a,m] = A[u,a,w,v] * B[u,v,w,m] & a:48; m:48; u:48; w:45; v:45; -C[m,a] = A[u,w,m,v] * B[u,a,w,v] & a:48; m:48; u:48; w:45; v:45; -C[a,m] = A[u,a,w,v] * B[u,w,m,v] & a:48; m:48; u:48; w:45; v:45; -C[n,a,b,m,o] = A[u,v,m,n,o] * B[v,a,u,b] & a:20; b:20; m:20; o:20; n:24; u:24; v:24; -C[n,b,o,a,m] = A[u,v,m,n,o] * B[v,a,u,b] & a:20; b:20; m:20; o:20; n:24; u:24; v:24; -C[n,o,b,a,m] = A[m,n,u,o,v] * B[v,a,u,b] & a:20; b:20; m:24; o:20; n:24; u:20; v:24; -C[m,b,n,a,o] = A[m,n,u,o,v] * B[v,a,u,b] & a:20; b:20; m:24; o:20; n:20; u:20; v:24; -C[n,m,a] = A[v,w,m,n,u] * B[w,v,a,u] & a:432; m:20; n:24; u:20; w:24; v:24; -C[n,a,m] = A[v,w,m,n,u] * B[w,v,a,u] & a:432; m:20; n:24; u:20; w:24; v:24; -C[m,n,a] = A[w,m,v,u,n] * B[w,v,a,u] & a:432; m:24; n:20; u:20; w:24; v:20; -C[n,m,a] = A[w,m,v,u,n] * B[w,v,a,u] & a:432; m:20; n:24; u:20; w:24; v:20; -C[m,a,n,b,o,p] = A[p,v,n,u,o,m] * B[u,b,v,a] & a:12; b:12; m:16; o:12; n:12; p:16; u:16; v:12; -C[b,o,a,n,p,m] = A[u,b,v,a] * B[p,v,n,u,o,m] & a:12; b:8; m:12; o:12; n:12; p:16; u:16; v:12; -C[o,b,n,p,a,m] = A[p,u,n,v,o,m] * B[u,b,v,a] & a:12; b:12; m:12; o:16; n:12; p:16; u:16; v:12; -C[a,p,m,n,b,o] = A[u,b,v,a] * B[p,u,n,v,o,m] & a:8; b:12; m:12; o:12; n:12; p:16; u:16; v:12; -C[m,n,o,a] = A[v,o,m,w,n,u] * B[w,a,v,u] & a:1800; m:16; o:12; n:12; u:12; w:16; v:16; -C[a,n,m,o] = A[w,a,v,u] * B[v,o,m,w,n,u] & a:1800; m:12; o:12; n:12; u:12; w:16; v:16; -C[o,a,n,m] = A[m,u,o,n,v,w] * B[w,a,v,u] & a:1800; m:16; o:16; n:12; u:12; w:16; v:12; -C[n,m,a,o] = A[m,u,o,n,v,w] * B[w,a,v,u] & a:1800; m:16; o:12; n:16; u:12; w:16; v:12; -C[m,d,b,a,c] = A[m,u] * B[b,u,d,c,a] & a:20; c:20; b:24; d:20; m:24; u:20; -C[d,a,b,c,m] = A[b,u,d,c,a] * B[m,u] & a:20; c:20; b:24; d:24; m:24; u:20; -C[b,m,d,a,c] = A[b,u,d,c,a] * B[u,m] & a:20; c:20; b:24; d:20; m:20; u:24; -C[d,b,a,m,c] = A[b,u,d,c,a] * B[u,m] & a:20; c:20; b:24; d:24; m:20; u:24; -C[c,a,m,d,n,b] = A[c,u,b,a,d] * B[u,n,m] & a:12; c:16; b:12; d:12; m:12; n:12; u:144; -C[n,a,c,d,m,b] = A[u,n,m] * B[c,u,b,a,d] & a:12; c:16; b:12; d:12; m:12; n:16; u:144; -C[c,d,m,b,n,a] = A[c,u,b,a,d] * B[u,m,n] & a:12; c:16; b:12; d:12; m:12; n:12; u:144; -C[a,m,b,d,c,n] = A[c,u,b,a,d] * B[u,m,n] & a:16; c:16; b:12; d:12; m:12; n:12; u:144; -C[b,a,m,c] = A[u,a,c,b,v] * B[v,u,m] & a:20; c:20; b:24; m:432; u:24; v:24; -C[b,m,c,a] = A[u,a,c,b,v] * B[v,u,m] & a:20; c:20; b:24; m:432; u:24; v:24; -C[c,a,b,m] = A[u,a,c,b,v] * B[m,u,v] & a:20; c:24; b:20; m:432; u:24; v:20; -C[b,c,a,m] = A[u,a,c,b,v] * B[m,u,v] & a:20; c:20; b:24; m:432; u:24; v:20; -C[m,n,a,c,b] = A[n,v,m,u] * B[a,b,v,u,c] & a:24; c:20; b:20; m:24; n:24; u:20; v:20; -C[n,a,m,c,b] = A[n,v,m,u] * B[a,b,v,u,c] & a:24; c:20; b:20; m:20; n:24; u:20; v:20; -C[m,c,n,b,a] = A[v,m,n,u] * B[a,b,v,u,c] & a:24; c:20; b:20; m:24; n:20; u:20; v:24; -C[c,b,m,a,n] = A[a,b,v,u,c] * B[v,m,n,u] & a:24; c:24; b:20; m:20; n:20; u:20; v:24; -C[a,m,b] = A[a,v,u,b,w] * B[m,u,w,v] & a:24; b:20; m:432; u:20; w:20; v:20; -C[m,a,b] = A[m,u,w,v] * B[a,v,u,b,w] & a:24; b:20; m:432; u:20; w:20; v:20; -C[a,b,m] = A[a,v,u,b,w] * B[u,m,v,w] & a:24; b:20; m:432; u:24; w:20; v:20; -C[m,a,b] = A[u,m,v,w] * B[a,v,u,b,w] & a:24; b:20; m:432; u:24; w:20; v:20; -C[n,b,o,a,m,c] = A[m,u,o,n,v] * B[a,v,b,u,c] & a:16; c:12; b:12; m:16; o:12; n:16; u:45; v:45; -C[o,c,a,b,n,m] = A[m,u,o,n,v] * B[a,v,b,u,c] & a:16; c:12; b:12; m:16; o:16; n:12; u:45; v:45; -C[b,c,n,a,o,m] = A[a,v,b,u,c] * B[v,m,u,o,n] & a:16; c:12; b:16; m:12; o:12; n:12; u:45; v:40; -C[a,o,c,m,n,b] = A[a,v,b,u,c] * B[v,m,u,o,n] & a:16; c:12; b:12; m:12; o:12; n:12; u:45; v:40; -C[n,a,b,m] = A[u,w,n,m,v] * B[a,w,u,v,b] & a:24; b:20; m:20; n:24; u:24; w:20; v:20; -C[b,a,m,n] = A[a,w,u,v,b] * B[u,w,n,m,v] & a:24; b:24; m:20; n:20; u:24; w:20; v:20; -C[a,n,b,m] = A[a,w,u,v,b] * B[w,m,v,n,u] & a:24; b:20; m:20; n:20; u:20; w:24; v:20; -C[n,b,a,m] = A[w,m,v,n,u] * B[a,w,u,v,b] & a:24; b:20; m:20; n:24; u:20; w:24; v:20; -C[m,n,o,b,a] = A[w,n,m,v,o,u] * B[v,u,a,b,w] & a:48; b:45; m:16; o:12; n:12; u:12; w:16; v:16; -C[a,m,o,n,b] = A[v,u,a,b,w] * B[w,n,m,v,o,u] & a:40; b:45; m:12; o:12; n:12; u:12; w:16; v:16; -C[o,b,m,a,n] = A[m,o,n,u,v,w] * B[v,u,a,b,w] & a:48; b:45; m:16; o:16; n:12; u:12; w:12; v:16; -C[m,b,n,o,a] = A[m,o,n,u,v,w] * B[v,u,a,b,w] & a:48; b:45; m:16; o:12; n:12; u:12; w:12; v:16; -C[m,b,c,d,e,a] = A[u,m] * B[b,u,d,a,e,c] & a:12; c:12; b:16; e:12; d:12; m:24; u:16; -C[m,b,a,c,e,d] = A[u,m] * B[b,u,d,a,e,c] & a:12; c:12; b:16; e:12; d:12; m:24; u:16; -C[e,b,d,c,m,a] = A[b,u,d,a,e,c] * B[m,u] & a:12; c:12; b:16; e:16; d:12; m:8; u:12; -C[m,c,a,b,e,d] = A[m,u] * B[b,u,d,a,e,c] & a:12; c:12; b:16; e:12; d:12; m:24; u:12; -C[d,c,a,m,b] = A[u,b,a,c,v,d] * B[u,v,m] & a:12; c:12; b:12; d:16; m:128; u:16; v:12; -C[m,b,c,a,d] = A[u,v,m] * B[u,b,a,c,v,d] & a:12; c:12; b:12; d:12; m:144; u:16; v:12; -C[a,m,b,d,c] = A[u,b,a,c,v,d] * B[m,v,u] & a:16; c:12; b:12; d:12; m:144; u:16; v:12; -C[a,d,b,m,c] = A[u,b,a,c,v,d] * B[m,v,u] & a:16; c:12; b:12; d:12; m:144; u:16; v:12; -C[c,b,a,m,d,n] = A[u,b,v,c,d,a] * B[m,u,v,n] & a:12; c:16; b:12; d:12; m:8; n:12; u:16; v:12; -C[a,c,m,n,d,b] = A[u,b,v,c,d,a] * B[m,u,v,n] & a:16; c:12; b:12; d:12; m:8; n:12; u:16; v:12; -C[b,d,m,a,c,n] = A[u,b,v,c,d,a] * B[v,n,m,u] & a:12; c:12; b:16; d:12; m:12; n:12; u:16; v:16; -C[d,m,a,b,n,c] = A[u,b,v,c,d,a] * B[v,n,m,u] & a:12; c:12; b:12; d:16; m:12; n:12; u:16; v:16; -C[m,c,a,b] = A[v,m,u,w] * B[a,c,v,w,u,b] & a:16; c:12; b:12; m:1800; u:12; w:12; v:16; -C[a,m,c,b] = A[a,c,v,w,u,b] * B[v,m,u,w] & a:16; c:12; b:12; m:1800; u:12; w:12; v:16; -C[c,m,a,b] = A[a,c,v,w,u,b] * B[w,m,u,v] & a:16; c:16; b:12; m:1800; u:12; w:16; v:12; -C[c,a,m,b] = A[a,c,v,w,u,b] * B[w,m,u,v] & a:16; c:16; b:12; m:1800; u:12; w:16; v:12; -C[c,n,a,m,b] = A[b,a,c,w,u,v] * B[w,v,m,n,u] & a:12; c:16; b:16; m:48; n:45; u:12; w:16; v:12; -C[m,b,n,c,a] = A[w,v,m,n,u] * B[b,a,c,w,u,v] & a:12; c:12; b:16; m:40; n:45; u:12; w:16; v:12; -C[a,m,c,n,b] = A[b,a,c,w,u,v] * B[m,w,v,n,u] & a:16; c:12; b:16; m:40; n:45; u:12; w:12; v:12; -C[n,c,a,b,m] = A[m,w,v,n,u] * B[b,a,c,w,u,v] & a:12; c:12; b:16; m:48; n:40; u:12; w:12; v:12; -C[c,o,n,b,m,a] = A[a,v,u,c,w,b] * B[m,u,n,w,o,v] & a:16; c:16; b:12; m:16; o:12; n:12; u:12; w:12; v:12; -C[a,m,b,c,o,n] = A[a,v,u,c,w,b] * B[m,u,n,w,o,v] & a:16; c:12; b:12; m:16; o:12; n:12; u:12; w:12; v:12; -C[n,m,c,o,a,b] = A[o,w,u,n,v,m] * B[a,v,u,c,w,b] & a:16; c:12; b:12; m:12; o:16; n:16; u:12; w:12; v:12; -C[n,o,c,a,m,b] = A[o,w,u,n,v,m] * B[a,v,u,c,w,b] & a:16; c:12; b:12; m:12; o:16; n:16; u:12; w:12; v:12; -C[a,n,m] = A[a,u] * B[u,m,n] & a:192; m:192; u:192; n:192; -C[m,a,n] = A[u,m,n] * B[a,u] & a:192; m:192; u:192; n:192; -C[n,a,m] = A[m,n,u] * B[a,u] & a:192; u:192; m:192; n:192; -C[m,a,n] = A[m,n,u] * B[a,u] & a:192; u:192; m:192; n:192; -C[a,m,n,o] = A[u,a] * B[m,u,o,n] & a:48; u:48; m:48; o:50; n:50; -C[a,o,m,n] = A[u,a] * B[m,u,o,n] & a:48; u:48; m:48; o:50; n:50; -C[a,o,m,n] = A[u,a] * B[n,o,u,m] & a:48; m:50; u:48; o:50; n:48; -C[a,m,o,n] = A[u,a] * B[n,o,u,m] & a:48; m:50; u:48; o:50; n:48; -C[p,m,o,a,n] = A[o,u,m,n,p] * B[a,u] & a:16; m:24; o:24; n:24; p:24; u:24; -C[a,p,n,o,m] = A[a,u] * B[o,u,m,n,p] & a:24; m:24; o:24; n:24; p:24; u:24; -C[n,p,m,a,o] = A[n,m,u,o,p] * B[a,u] & a:16; m:24; o:24; n:24; p:24; u:24; -C[n,o,m,p,a] = A[n,m,u,o,p] * B[a,u] & a:16; m:24; o:24; n:24; p:24; u:24; -C[o,q,p,m,a,n] = A[m,u,o,p,q,n] * B[a,u] & a:16; m:16; o:16; n:15; q:15; p:15; u:15; -C[m,p,o,n,a,q] = A[m,u,o,p,q,n] * B[a,u] & a:16; m:16; o:15; n:15; q:15; p:15; u:15; -C[q,p,m,a,n,o] = A[q,o,m,p,u,n] * B[a,u] & a:16; m:15; o:15; n:15; q:16; p:15; u:15; -C[m,a,q,n,o,p] = A[q,o,m,p,u,n] * B[a,u] & a:16; m:16; o:15; n:15; q:16; p:15; u:15; -C[b,m,a] = A[u,a,b] * B[m,u] & a:192; m:192; b:192; u:192; -C[m,b,a] = A[m,u] * B[u,a,b] & a:192; m:192; b:192; u:192; -C[b,m,a] = A[u,a,b] * B[u,m] & a:192; m:180; b:192; u:192; -C[a,m,b] = A[u,a,b] * B[u,m] & a:192; m:180; b:192; u:192; -C[a,b,m,n] = A[a,u,b] * B[n,m,u] & a:48; u:2500; b:50; m:50; n:48; -C[a,m,n,b] = A[a,u,b] * B[n,m,u] & a:48; u:2500; b:50; m:50; n:48; -C[n,b,a,m] = A[m,n,u] * B[a,u,b] & a:48; u:2500; b:50; m:48; n:48; -C[n,m,b,a] = A[m,n,u] * B[a,u,b] & a:48; u:2500; b:50; m:48; n:48; -C[a,m] = A[a,u,v] * B[v,u,m] & a:192; m:180; u:192; v:192; -C[m,a] = A[v,u,m] * B[a,u,v] & a:192; m:192; u:192; v:192; -C[m,a] = A[m,v,u] * B[a,u,v] & a:192; u:192; m:192; v:192; -C[a,m] = A[a,u,v] * B[m,v,u] & a:192; m:192; u:192; v:192; -C[m,a,n,b,o] = A[m,o,n,u] * B[u,a,b] & a:24; b:24; m:24; o:24; n:24; u:480; -C[a,o,m,b,n] = A[u,a,b] * B[m,o,n,u] & a:24; b:24; m:24; o:24; n:24; u:480; -C[n,m,b,a,o] = A[n,u,o,m] * B[u,a,b] & a:24; b:24; m:24; o:24; n:24; u:480; -C[a,n,o,b,m] = A[u,a,b] * B[n,u,o,m] & a:24; b:24; m:24; o:24; n:24; u:480; -C[a,m,n] = A[u,a,v] * B[n,u,v,m] & a:2592; m:50; v:50; u:48; n:48; -C[m,a,n] = A[n,u,v,m] * B[u,a,v] & a:2500; m:48; v:50; u:48; n:48; -C[a,n,m] = A[u,a,v] * B[v,n,u,m] & a:2592; m:50; n:50; u:48; v:48; -C[a,m,n] = A[u,a,v] * B[v,n,u,m] & a:2592; m:50; n:50; u:48; v:48; -C[b,m,n,o,a,p] = A[a,b,u] * B[m,o,n,p,u] & a:24; b:16; m:16; o:15; n:15; p:15; u:162; -C[p,n,b,a,o,m] = A[m,o,n,p,u] * B[a,b,u] & a:16; b:15; m:16; o:15; n:15; p:16; u:162; -C[o,b,m,n,a,p] = A[u,n,m,o,p] * B[a,b,u] & a:16; b:15; m:15; o:16; n:15; p:15; u:160; -C[m,b,o,n,p,a] = A[u,n,m,o,p] * B[a,b,u] & a:16; b:15; m:16; o:15; n:15; p:15; u:160; -C[m,o,a,n] = A[m,v,n,o,u] * B[v,u,a] & a:480; m:24; o:24; n:24; u:24; v:24; -C[a,n,m,o] = A[v,u,a] * B[m,v,n,o,u] & a:480; m:24; o:24; n:24; u:24; v:24; -C[m,n,o,a] = A[n,v,m,u,o] * B[v,u,a] & a:480; m:24; o:24; n:24; u:24; v:24; -C[n,a,m,o] = A[n,v,m,u,o] * B[v,u,a] & a:480; m:24; o:24; n:24; u:24; v:24; -C[n,p,o,a,m] = A[o,n,m,p,v,u] * B[a,u,v] & a:160; m:15; o:16; n:16; p:15; u:15; v:15; -C[o,a,n,p,m] = A[o,n,m,p,v,u] * B[a,u,v] & a:160; m:15; o:16; n:15; p:15; u:15; v:15; -C[a,n,o,m,p] = A[a,u,v] * B[m,o,u,n,p,v] & a:144; m:16; o:15; n:15; p:15; u:15; v:15; -C[p,a,m,n,o] = A[m,o,u,n,p,v] * B[a,u,v] & a:160; m:16; o:15; n:15; p:16; u:15; v:15; -C[m,b,c,a] = A[u,m] * B[c,b,a,u] & a:50; m:48; c:48; b:50; u:48; -C[m,c,a,b] = A[u,m] * B[c,b,a,u] & a:50; m:48; c:48; b:50; u:48; -C[c,a,b,m] = A[c,b,a,u] * B[m,u] & a:50; m:48; c:48; b:50; u:50; -C[b,m,a,c] = A[c,b,a,u] * B[m,u] & a:50; m:48; c:48; b:48; u:50; -C[m,a,b,n,c] = A[n,m,u] * B[a,u,c,b] & a:24; c:24; b:24; m:24; n:24; u:480; -C[m,b,n,a,c] = A[n,m,u] * B[a,u,c,b] & a:24; c:24; b:24; m:24; n:24; u:480; -C[a,c,m,b,n] = A[a,u,c,b] * B[u,m,n] & a:24; c:24; b:24; m:24; n:24; u:480; -C[m,c,a,b,n] = A[u,m,n] * B[a,u,c,b] & a:24; c:24; b:24; m:24; n:24; u:480; -C[a,b,m] = A[a,u,b,v] * B[m,v,u] & a:48; m:2560; b:50; u:50; v:50; -C[b,m,a] = A[a,u,b,v] * B[m,v,u] & a:48; m:2560; b:48; u:50; v:50; -C[b,a,m] = A[a,u,b,v] * B[v,m,u] & a:48; m:2500; b:48; u:50; v:48; -C[a,m,b] = A[a,u,b,v] * B[v,m,u] & a:48; m:2500; b:50; u:50; v:48; -C[m,o,b,a,n,c] = A[u,m,n,o] * B[a,c,b,u] & a:16; c:15; b:15; m:16; o:15; n:15; u:2400; -C[o,m,b,n,c,a] = A[u,m,n,o] * B[a,c,b,u] & a:16; c:15; b:15; m:15; o:16; n:15; u:2400; -C[o,c,a,n,b,m] = A[u,m,o,n] * B[a,c,b,u] & a:16; c:15; b:15; m:15; o:16; n:15; u:2400; -C[a,m,b,n,c,o] = A[a,c,b,u] * B[u,m,o,n] & a:16; c:15; b:15; m:16; o:15; n:15; u:2400; -C[a,b,m,n] = A[a,v,u,b] * B[u,n,v,m] & a:48; b:50; m:50; n:50; u:48; v:50; -C[n,a,b,m] = A[u,n,v,m] * B[a,v,u,b] & a:48; b:50; m:50; n:48; u:48; v:50; -C[m,n,a,b] = A[n,u,v,m] * B[a,v,u,b] & a:48; b:50; m:48; n:48; u:50; v:50; -C[a,b,m,n] = A[a,v,u,b] * B[n,u,v,m] & a:48; b:50; m:50; n:48; u:50; v:50; -C[a,m] = A[v,w,u,a] * B[m,v,u,w] & a:48; m:48; u:50; w:50; v:48; -C[a,m] = A[v,w,u,a] * B[m,u,w,v] & a:48; m:48; u:50; w:50; v:48; -C[a,m] = A[v,w,u,a] * B[m,w,v,u] & a:48; m:48; u:50; w:50; v:48; -C[a,m] = A[u,v,w,a] * B[m,v,u,w] & a:48; m:48; u:48; w:50; v:50; -C[a,m] = A[u,v,w,a] * B[m,u,w,v] & a:48; m:48; u:48; w:50; v:50; -C[a,m] = A[u,v,w,a] * B[m,w,v,u] & a:48; m:48; u:48; w:50; v:50; -C[a,n,o,m,b] = A[b,v,u,a] * B[n,u,m,o,v] & a:24; b:24; m:24; o:24; n:24; u:24; v:24; -C[b,o,m,n,a] = A[b,v,u,a] * B[n,u,m,o,v] & a:20; b:24; m:24; o:24; n:24; u:24; v:24; -C[n,m,b,a,o] = A[o,v,m,n,u] * B[b,v,u,a] & a:20; b:24; m:24; o:24; n:24; u:24; v:24; -C[n,a,o,b,m] = A[o,v,m,n,u] * B[b,v,u,a] & a:20; b:24; m:24; o:24; n:24; u:24; v:24; -C[a,m,n] = A[a,w,v,u] * B[w,m,u,v,n] & a:480; m:24; n:24; u:24; w:24; v:24; -C[m,a,n] = A[w,m,u,v,n] * B[a,w,v,u] & a:480; m:24; n:24; u:24; w:24; v:24; -C[m,a,n] = A[u,n,w,m,v] * B[a,w,v,u] & a:480; m:24; n:24; u:24; w:24; v:24; -C[n,m,a] = A[u,n,w,m,v] * B[a,w,v,u] & a:480; m:24; n:24; u:24; w:24; v:24; -C[n,a,o,b,p,m] = A[p,n,v,o,m,u] * B[a,u,b,v] & a:16; b:15; m:15; o:15; n:16; p:16; u:15; v:15; -C[b,a,m,n,p,o] = A[a,u,b,v] * B[p,n,v,o,m,u] & a:24; b:16; m:15; o:15; n:15; p:16; u:15; v:15; -C[p,o,m,a,b,n] = A[n,v,u,o,p,m] * B[a,u,b,v] & a:16; b:15; m:15; o:15; n:16; p:16; u:15; v:15; -C[p,o,b,m,n,a] = A[n,v,u,o,p,m] * B[a,u,b,v] & a:16; b:15; m:15; o:15; n:16; p:16; u:15; v:15; -C[a,o,m,n] = A[v,w,u,a] * B[n,m,u,w,o,v] & a:2400; m:15; o:15; n:16; u:15; w:15; v:16; -C[o,n,a,m] = A[n,m,u,w,o,v] * B[v,w,u,a] & a:2400; m:15; o:16; n:16; u:15; w:15; v:16; -C[a,m,o,n] = A[v,w,u,a] * B[u,v,n,o,m,w] & a:2400; m:16; o:15; n:15; u:16; w:15; v:16; -C[m,n,a,o] = A[u,v,n,o,m,w] * B[v,w,u,a] & a:2400; m:16; o:15; n:15; u:16; w:15; v:16; -C[d,m,a,b,c] = A[b,u,d,a,c] * B[m,u] & a:24; c:24; b:24; d:24; m:16; u:24; -C[a,m,c,b,d] = A[b,u,d,a,c] * B[m,u] & a:24; c:24; b:24; d:24; m:16; u:24; -C[a,m,d,b,c] = A[b,u,d,a,c] * B[u,m] & a:24; c:24; b:24; d:24; m:20; u:24; -C[a,m,b,c,d] = A[b,u,d,a,c] * B[u,m] & a:24; c:24; b:24; d:24; m:20; u:24; -C[b,m,c,a,n,d] = A[b,u,d,a,c] * B[m,u,n] & a:15; c:15; b:16; d:15; m:16; n:15; u:162; -C[b,c,a,n,d,m] = A[b,u,d,a,c] * B[m,u,n] & a:15; c:15; b:16; d:15; m:16; n:15; u:162; -C[b,m,c,d,n,a] = A[b,u,d,a,c] * B[m,n,u] & a:15; c:15; b:16; d:15; m:16; n:15; u:162; -C[n,c,d,m,a,b] = A[m,n,u] * B[b,u,d,a,c] & a:15; c:15; b:16; d:15; m:24; n:16; u:162; -C[a,b,c,m] = A[c,b,v,a,u] * B[u,v,m] & a:24; c:24; b:24; m:480; u:24; v:24; -C[c,m,b,a] = A[c,b,v,a,u] * B[u,v,m] & a:24; c:24; b:24; m:480; u:24; v:24; -C[b,m,c,a] = A[c,b,v,a,u] * B[v,m,u] & a:24; c:24; b:24; m:480; u:24; v:24; -C[b,a,c,m] = A[c,b,v,a,u] * B[v,m,u] & a:24; c:24; b:24; m:480; u:24; v:24; -C[n,a,c,m,b] = A[v,n,m,u] * B[v,c,a,u,b] & a:24; c:24; b:24; m:20; n:24; u:24; v:24; -C[m,a,c,n,b] = A[v,n,m,u] * B[v,c,a,u,b] & a:24; c:24; b:24; m:24; n:20; u:24; v:24; -C[n,a,c,m,b] = A[n,u,m,v] * B[v,c,a,u,b] & a:24; c:24; b:24; m:20; n:24; u:24; v:24; -C[a,c,n,b,m] = A[v,c,a,u,b] * B[n,u,m,v] & a:24; c:24; b:24; m:20; n:24; u:24; v:24; -C[b,a,m] = A[a,b,v,u,w] * B[v,w,m,u] & a:24; b:24; m:480; u:24; w:24; v:24; -C[b,m,a] = A[a,b,v,u,w] * B[v,w,m,u] & a:24; b:24; m:480; u:24; w:24; v:24; -C[b,m,a] = A[a,b,v,u,w] * B[v,m,w,u] & a:24; b:24; m:480; u:24; w:24; v:24; -C[m,b,a] = A[v,m,w,u] * B[a,b,v,u,w] & a:24; b:24; m:480; u:24; w:24; v:24; -C[c,a,n,b,o,m] = A[v,u,b,a,c] * B[o,v,m,n,u] & a:15; c:16; b:15; m:15; o:16; n:15; u:48; v:48; -C[n,a,m,o,b,c] = A[o,v,m,n,u] * B[v,u,b,a,c] & a:16; c:15; b:15; m:15; o:16; n:16; u:48; v:48; -C[c,b,m,o,a,n] = A[v,u,b,a,c] * B[u,o,n,v,m] & a:15; c:16; b:15; m:16; o:15; n:15; u:48; v:48; -C[b,m,o,a,n,c] = A[v,u,b,a,c] * B[u,o,n,v,m] & a:15; c:15; b:16; m:16; o:15; n:15; u:48; v:48; -C[n,a,m,b] = A[w,u,n,v,m] * B[v,w,a,u,b] & a:20; b:20; m:24; n:24; u:24; w:24; v:24; -C[b,a,n,m] = A[v,w,a,u,b] * B[w,u,n,v,m] & a:24; b:24; m:20; n:20; u:24; w:24; v:24; -C[n,b,a,m] = A[v,n,m,u,w] * B[v,w,a,u,b] & a:20; b:20; m:24; n:24; u:24; w:24; v:24; -C[m,n,b,a] = A[v,n,m,u,w] * B[v,w,a,u,b] & a:20; b:20; m:24; n:24; u:24; w:24; v:24; -C[n,b,a,o,m] = A[u,w,v,m,o,n] * B[v,b,w,u,a] & a:48; b:48; m:15; o:15; n:16; u:16; w:15; v:16; -C[b,m,a,n,o] = A[v,b,w,u,a] * B[u,w,v,m,o,n] & a:48; b:48; m:16; o:15; n:15; u:16; w:15; v:16; -C[m,n,o,a,b] = A[m,o,w,n,v,u] * B[v,b,w,u,a] & a:48; b:48; m:16; o:15; n:15; u:15; w:15; v:16; -C[n,m,b,o,a] = A[m,o,w,n,v,u] * B[v,b,w,u,a] & a:48; b:48; m:16; o:15; n:16; u:15; w:15; v:16; -C[a,d,b,e,m,c] = A[d,a,b,u,e,c] * B[u,m] & a:16; c:15; b:15; e:15; d:16; m:12; u:16; -C[d,c,m,e,b,a] = A[d,a,b,u,e,c] * B[u,m] & a:15; c:15; b:15; e:15; d:16; m:12; u:16; -C[c,m,e,a,d,b] = A[d,a,b,u,e,c] * B[m,u] & a:15; c:16; b:15; e:15; d:16; m:16; u:15; -C[b,m,c,a,e,d] = A[d,a,b,u,e,c] * B[m,u] & a:15; c:15; b:16; e:15; d:16; m:16; u:15; -C[m,d,a,c,b] = A[u,m,v] * B[b,c,v,u,a,d] & a:15; c:15; b:16; d:15; m:144; u:16; v:15; -C[m,d,b,a,c] = A[u,m,v] * B[b,c,v,u,a,d] & a:15; c:15; b:16; d:15; m:144; u:16; v:15; -C[a,c,m,d,b] = A[b,c,v,u,a,d] * B[m,u,v] & a:16; c:15; b:16; d:15; m:160; u:15; v:15; -C[b,d,m,c,a] = A[b,c,v,u,a,d] * B[m,u,v] & a:15; c:15; b:16; d:15; m:160; u:15; v:15; -C[m,c,a,n,b,d] = A[v,m,n,u] * B[b,a,c,d,v,u] & a:15; c:15; b:16; d:15; m:16; n:15; u:15; v:16; -C[d,c,a,n,b,m] = A[b,a,c,d,v,u] * B[v,m,n,u] & a:15; c:15; b:16; d:16; m:16; n:15; u:15; v:16; -C[c,a,m,b,d,n] = A[b,a,c,d,v,u] * B[m,n,u,v] & a:15; c:16; b:16; d:15; m:16; n:15; u:15; v:15; -C[a,d,n,b,m,c] = A[b,a,c,d,v,u] * B[m,n,u,v] & a:16; c:15; b:16; d:15; m:16; n:15; u:15; v:15; -C[b,a,c,m] = A[c,b,v,u,a,w] * B[w,m,u,v] & a:15; c:16; b:16; m:2400; u:15; w:16; v:15; -C[b,c,m,a] = A[c,b,v,u,a,w] * B[w,m,u,v] & a:15; c:16; b:16; m:2400; u:15; w:16; v:15; -C[m,a,b,c] = A[m,v,w,u] * B[c,b,v,u,a,w] & a:15; c:16; b:15; m:2400; u:15; w:15; v:15; -C[c,m,a,b] = A[c,b,v,u,a,w] * B[m,v,w,u] & a:15; c:16; b:15; m:2400; u:15; w:15; v:15; -C[b,n,a,c,m] = A[w,c,a,u,b,v] * B[n,u,m,v,w] & a:15; c:15; b:16; m:48; n:48; u:15; w:16; v:15; -C[b,n,a,m,c] = A[w,c,a,u,b,v] * B[n,u,m,v,w] & a:15; c:15; b:16; m:48; n:48; u:15; w:16; v:15; -C[n,c,m,b,a] = A[v,n,u,w,m] * B[w,c,a,u,b,v] & a:16; c:15; b:15; m:48; n:48; u:15; w:16; v:16; -C[m,c,n,b,a] = A[v,n,u,w,m] * B[w,c,a,u,b,v] & a:16; c:15; b:15; m:48; n:48; u:15; w:16; v:16; -C[a,n,m,o,c,b] = A[b,c,a,w,v,u] * B[m,n,o,u,v,w] & a:16; c:15; b:16; m:16; o:15; n:15; u:15; w:15; v:15; -C[a,n,c,m,o,b] = A[b,c,a,w,v,u] * B[m,n,o,u,v,w] & a:16; c:15; b:16; m:16; o:15; n:15; u:15; w:15; v:15; -C[b,m,o,a,n,c] = A[b,c,a,w,v,u] * B[u,o,n,m,v,w] & a:15; c:15; b:16; m:16; o:15; n:15; u:16; w:15; v:15; -C[n,c,o,m,a,b] = A[u,o,n,m,v,w] * B[b,c,a,w,v,u] & a:15; c:15; b:16; m:15; o:15; n:16; u:16; w:15; v:15; -C[a,n,m] = A[a,u] * B[u,m,n] & a:216; m:216; u:216; n:216; -C[n,m,a] = A[u,m,n] * B[a,u] & a:216; m:216; u:216; n:216; -C[n,m,a] = A[m,n,u] * B[a,u] & a:216; u:216; m:216; n:216; -C[n,a,m] = A[m,n,u] * B[a,u] & a:216; u:216; m:216; n:216; -C[a,n,m,o] = A[u,a] * B[m,u,n,o] & a:72; u:64; m:64; o:54; n:54; -C[a,o,n,m] = A[u,a] * B[m,u,n,o] & a:72; u:64; m:64; o:54; n:54; -C[a,n,o,m] = A[u,a] * B[o,n,m,u] & a:72; u:64; m:54; o:64; n:54; -C[a,m,n,o] = A[u,a] * B[o,n,m,u] & a:72; u:64; m:54; o:64; n:54; -C[p,n,m,a,o] = A[m,n,o,p,u] * B[a,u] & a:24; m:24; o:25; n:25; p:24; u:25; -C[p,m,o,n,a] = A[m,n,o,p,u] * B[a,u] & a:24; m:24; o:25; n:25; p:24; u:25; -C[m,a,o,p,n] = A[m,o,n,u,p] * B[a,u] & a:24; m:24; o:25; n:25; p:25; u:25; -C[a,o,p,n,m] = A[a,u] * B[m,o,n,u,p] & a:24; m:24; o:25; n:25; p:25; u:25; -C[m,q,n,o,a,p] = A[o,m,p,u,n,q] * B[u,a] & a:16; m:16; o:16; n:15; q:15; p:15; u:16; -C[q,p,m,n,a,o] = A[o,m,p,u,n,q] * B[u,a] & a:16; m:15; o:16; n:15; q:16; p:15; u:16; -C[o,n,q,p,m,a] = A[u,p,n,m,q,o] * B[u,a] & a:16; m:15; o:16; n:15; q:15; p:15; u:16; -C[m,n,o,p,q,a] = A[u,p,n,m,q,o] * B[u,a] & a:16; m:16; o:15; n:15; q:15; p:15; u:16; -C[b,a,m] = A[a,u,b] * B[u,m] & a:216; m:216; b:216; u:216; -C[a,m,b] = A[a,u,b] * B[u,m] & a:216; m:216; b:216; u:216; -C[b,m,a] = A[a,u,b] * B[m,u] & a:216; m:216; b:216; u:216; -C[m,b,a] = A[m,u] * B[a,u,b] & a:216; m:216; b:216; u:216; -C[b,m,n,a] = A[a,u,b] * B[n,u,m] & a:72; u:3240; b:64; m:54; n:64; -C[m,n,a,b] = A[n,u,m] * B[a,u,b] & a:64; u:3240; b:54; m:72; n:64; -C[n,b,a,m] = A[n,m,u] * B[a,u,b] & a:64; u:3240; b:54; m:54; n:64; -C[b,n,a,m] = A[a,u,b] * B[n,m,u] & a:72; u:3240; b:64; m:54; n:64; -C[m,a] = A[v,m,u] * B[v,u,a] & a:216; u:216; m:216; v:216; -C[a,m] = A[v,u,a] * B[v,m,u] & a:216; m:216; u:216; v:216; -C[a,m] = A[v,u,a] * B[u,v,m] & a:216; m:216; u:216; v:216; -C[m,a] = A[u,v,m] * B[v,u,a] & a:216; m:216; u:216; v:216; -C[m,a,o,b,n] = A[m,n,u,o] * B[b,u,a] & a:25; b:24; m:24; o:25; n:25; u:600; -C[n,b,o,m,a] = A[m,n,u,o] * B[b,u,a] & a:25; b:24; m:24; o:25; n:24; u:600; -C[o,a,m,b,n] = A[u,o,n,m] * B[b,u,a] & a:25; b:24; m:25; o:24; n:25; u:600; -C[n,b,o,m,a] = A[u,o,n,m] * B[b,u,a] & a:25; b:24; m:25; o:25; n:24; u:600; -C[m,a,n] = A[m,n,v,u] * B[a,u,v] & a:3240; u:54; v:54; m:64; n:54; -C[a,n,m] = A[a,u,v] * B[m,n,v,u] & a:3240; u:54; v:54; m:64; n:54; -C[m,n,a] = A[v,u,n,m] * B[a,u,v] & a:3240; m:64; n:54; u:54; v:64; -C[a,m,n] = A[a,u,v] * B[v,u,n,m] & a:3240; m:54; n:54; u:54; v:64; -C[m,a,n,p,b,o] = A[u,o,p,n,m] * B[u,b,a] & a:16; b:15; m:16; o:15; n:15; p:15; u:200; -C[m,p,o,b,n,a] = A[u,o,p,n,m] * B[u,b,a] & a:16; b:15; m:16; o:15; n:15; p:15; u:200; -C[b,o,n,m,a,p] = A[u,b,a] * B[o,m,n,p,u] & a:15; b:16; m:15; o:16; n:15; p:15; u:200; -C[n,m,b,p,o,a] = A[o,m,n,p,u] * B[u,b,a] & a:16; b:15; m:15; o:16; n:16; p:15; u:200; -C[o,n,m,a] = A[u,n,v,o,m] * B[u,v,a] & a:600; m:25; o:24; n:25; u:24; v:25; -C[n,o,a,m] = A[u,n,v,o,m] * B[u,v,a] & a:600; m:25; o:25; n:24; u:24; v:25; -C[n,o,a,m] = A[o,m,u,n,v] * B[u,v,a] & a:600; m:25; o:24; n:24; u:24; v:25; -C[a,m,n,o] = A[u,v,a] * B[o,m,u,n,v] & a:600; m:25; o:24; n:25; u:24; v:25; -C[p,n,a,o,m] = A[n,u,p,v,m,o] * B[u,a,v] & a:200; m:15; o:15; n:16; p:16; u:16; v:15; -C[n,o,p,m,a] = A[n,u,p,v,m,o] * B[u,a,v] & a:200; m:15; o:15; n:16; p:15; u:16; v:15; -C[n,m,o,a,p] = A[n,o,u,m,v,p] * B[u,a,v] & a:200; m:15; o:15; n:16; p:15; u:16; v:15; -C[m,o,p,n,a] = A[n,o,u,m,v,p] * B[u,a,v] & a:200; m:16; o:15; n:16; p:15; u:16; v:15; -C[a,c,m,b] = A[a,u,b,c] * B[m,u] & a:64; m:64; c:54; b:54; u:54; -C[c,a,m,b] = A[a,u,b,c] * B[m,u] & a:64; m:64; c:64; b:54; u:54; -C[m,c,b,a] = A[u,m] * B[a,u,b,c] & a:64; m:72; c:54; b:54; u:64; -C[m,b,a,c] = A[u,m] * B[a,u,b,c] & a:64; m:72; c:54; b:54; u:64; -C[c,a,b,m,n] = A[b,a,c,u] * B[n,m,u] & a:25; c:24; b:24; m:25; n:24; u:600; -C[b,m,n,c,a] = A[b,a,c,u] * B[n,m,u] & a:25; c:25; b:24; m:25; n:24; u:600; -C[n,b,m,c,a] = A[m,u,n] * B[b,a,c,u] & a:25; c:25; b:24; m:24; n:24; u:600; -C[c,a,b,n,m] = A[b,a,c,u] * B[m,u,n] & a:25; c:24; b:24; m:24; n:25; u:600; -C[a,m,b] = A[a,u,v,b] * B[u,m,v] & a:64; m:3240; b:54; u:64; v:54; -C[a,b,m] = A[a,u,v,b] * B[u,m,v] & a:64; m:3240; b:54; u:64; v:54; -C[m,b,a] = A[v,u,m] * B[a,u,v,b] & a:64; m:3240; b:54; u:54; v:64; -C[a,m,b] = A[a,u,v,b] * B[v,u,m] & a:64; m:3240; b:54; u:54; v:64; -C[o,c,m,b,a,n] = A[u,n,o,m] * B[a,b,c,u] & a:16; c:15; b:15; m:15; o:16; n:15; u:3072; -C[o,c,n,b,a,m] = A[u,n,o,m] * B[a,b,c,u] & a:16; c:15; b:15; m:15; o:16; n:15; u:3072; -C[o,a,c,n,m,b] = A[o,m,u,n] * B[a,b,c,u] & a:16; c:15; b:15; m:15; o:16; n:15; u:3125; -C[a,m,n,c,o,b] = A[a,b,c,u] * B[o,m,u,n] & a:16; c:15; b:15; m:15; o:16; n:15; u:3125; -C[a,n,b,m] = A[v,u,a,b] * B[v,m,n,u] & a:64; b:54; m:54; n:54; u:54; v:64; -C[b,m,a,n] = A[v,u,a,b] * B[v,m,n,u] & a:54; b:64; m:54; n:54; u:54; v:64; -C[a,n,m,b] = A[v,u,a,b] * B[m,n,u,v] & a:64; b:54; m:64; n:54; u:54; v:64; -C[n,b,m,a] = A[m,n,u,v] * B[v,u,a,b] & a:54; b:54; m:72; n:64; u:54; v:64; -C[a,m] = A[w,u,v,a] * B[m,v,u,w] & a:72; m:64; u:54; w:64; v:54; -C[a,m] = A[w,u,v,a] * B[m,w,v,u] & a:72; m:64; u:54; w:64; v:54; -C[a,m] = A[w,u,v,a] * B[m,u,w,v] & a:72; m:64; u:54; w:64; v:54; -C[a,m] = A[u,v,w,a] * B[m,w,v,u] & a:72; m:64; u:64; w:54; v:54; -C[a,m] = A[u,v,w,a] * B[m,v,u,w] & a:72; m:64; u:64; w:54; v:54; -C[a,m] = A[u,v,w,a] * B[m,u,w,v] & a:72; m:64; u:64; w:54; v:54; -C[a,o,n,m,b] = A[v,b,a,u] * B[m,o,u,v,n] & a:24; b:25; m:24; o:25; n:25; u:25; v:24; -C[b,m,n,a,o] = A[v,b,a,u] * B[m,o,u,v,n] & a:25; b:24; m:24; o:25; n:25; u:25; v:24; -C[n,m,b,o,a] = A[v,o,m,n,u] * B[v,b,a,u] & a:24; b:25; m:25; o:25; n:24; u:25; v:24; -C[a,n,o,b,m] = A[v,b,a,u] * B[v,o,m,n,u] & a:24; b:25; m:24; o:25; n:25; u:25; v:24; -C[a,n,m] = A[u,v,a,w] * B[v,u,m,n,w] & a:600; m:24; n:25; u:24; w:25; v:24; -C[n,m,a] = A[v,u,m,n,w] * B[u,v,a,w] & a:600; m:25; n:24; u:24; w:25; v:24; -C[m,n,a] = A[w,v,n,m,u] * B[u,v,a,w] & a:600; m:24; n:25; u:24; w:24; v:25; -C[a,m,n] = A[u,v,a,w] * B[w,v,n,m,u] & a:600; m:24; n:25; u:24; w:24; v:25; -C[m,p,b,n,o,a] = A[v,o,p,m,u,n] * B[v,a,b,u] & a:16; b:15; m:16; o:15; n:15; p:15; u:15; v:16; -C[b,n,a,m,p,o] = A[v,a,b,u] * B[v,o,p,m,u,n] & a:15; b:16; m:16; o:15; n:15; p:15; u:15; v:16; -C[b,a,o,m,p,n] = A[v,a,b,u] * B[v,p,u,o,n,m] & a:15; b:16; m:16; o:15; n:15; p:15; u:15; v:16; -C[b,n,o,a,p,m] = A[v,a,b,u] * B[v,p,u,o,n,m] & a:15; b:16; m:16; o:15; n:15; p:15; u:15; v:16; -C[m,n,o,a] = A[o,n,m,w,v,u] * B[u,v,w,a] & a:3072; m:16; o:16; n:15; u:16; w:15; v:15; -C[o,m,n,a] = A[o,n,m,w,v,u] * B[u,v,w,a] & a:3072; m:15; o:16; n:15; u:16; w:15; v:15; -C[o,a,m,n] = A[v,o,n,m,w,u] * B[u,v,w,a] & a:3072; m:15; o:16; n:15; u:16; w:15; v:16; -C[n,a,m,o] = A[v,o,n,m,w,u] * B[u,v,w,a] & a:3072; m:15; o:15; n:16; u:16; w:15; v:16; -C[c,a,d,b,m] = A[b,c,d,u,a] * B[u,m] & a:25; c:24; b:24; d:25; m:24; u:24; -C[a,c,m,d,b] = A[b,c,d,u,a] * B[u,m] & a:24; c:25; b:24; d:25; m:24; u:24; -C[m,c,a,d,b] = A[m,u] * B[b,c,d,u,a] & a:25; c:25; b:24; d:25; m:24; u:25; -C[m,b,a,d,c] = A[m,u] * B[b,c,d,u,a] & a:25; c:25; b:24; d:25; m:24; u:25; -C[d,a,b,m,c,n] = A[c,a,u,b,d] * B[m,u,n] & a:15; c:16; b:15; d:16; m:16; n:15; u:200; -C[d,a,b,c,n,m] = A[c,a,u,b,d] * B[m,u,n] & a:15; c:16; b:15; d:16; m:16; n:15; u:200; -C[m,c,b,n,d,a] = A[u,n,m] * B[c,a,u,b,d] & a:15; c:16; b:15; d:15; m:16; n:15; u:200; -C[a,b,n,c,d,m] = A[c,a,u,b,d] * B[u,n,m] & a:16; c:16; b:15; d:15; m:16; n:15; u:200; -C[c,b,m,a] = A[c,a,b,u,v] * B[v,m,u] & a:25; c:24; b:25; m:600; u:25; v:24; -C[c,m,b,a] = A[c,a,b,u,v] * B[v,m,u] & a:25; c:24; b:25; m:600; u:25; v:24; -C[m,a,c,b] = A[u,m,v] * B[c,a,b,u,v] & a:25; c:24; b:25; m:600; u:24; v:25; -C[a,m,c,b] = A[c,a,b,u,v] * B[u,m,v] & a:24; c:24; b:25; m:600; u:24; v:25; -C[m,b,a,c,n] = A[n,v,u,m] * B[c,b,u,v,a] & a:25; c:24; b:25; m:24; n:24; u:25; v:25; -C[b,c,a,n,m] = A[c,b,u,v,a] * B[n,v,u,m] & a:25; c:24; b:24; m:25; n:24; u:25; v:25; -C[b,m,c,a,n] = A[c,b,u,v,a] * B[n,v,m,u] & a:25; c:24; b:24; m:25; n:24; u:25; v:25; -C[n,m,c,a,b] = A[n,v,m,u] * B[c,b,u,v,a] & a:25; c:24; b:25; m:25; n:24; u:25; v:25; -C[b,m,a] = A[a,v,w,b,u] * B[w,u,m,v] & a:24; b:24; m:600; u:25; w:24; v:25; -C[b,a,m] = A[a,v,w,b,u] * B[w,u,m,v] & a:24; b:24; m:600; u:25; w:24; v:25; -C[b,a,m] = A[a,v,w,b,u] * B[v,m,u,w] & a:24; b:24; m:600; u:25; w:25; v:24; -C[m,b,a] = A[v,m,u,w] * B[a,v,w,b,u] & a:24; b:25; m:600; u:25; w:25; v:24; -C[c,m,a,b,n,o] = A[c,b,v,u,a] * B[m,u,v,o,n] & a:15; c:16; b:15; m:16; o:15; n:15; u:54; v:54; -C[o,b,c,n,m,a] = A[m,u,v,o,n] * B[c,b,v,u,a] & a:15; c:16; b:15; m:16; o:16; n:15; u:54; v:54; -C[o,b,n,a,c,m] = A[v,n,o,m,u] * B[c,b,v,u,a] & a:15; c:16; b:15; m:15; o:16; n:15; u:54; v:48; -C[b,n,c,m,o,a] = A[c,b,v,u,a] * B[v,n,o,m,u] & a:15; c:16; b:16; m:16; o:15; n:15; u:54; v:48; -C[n,m,b,a] = A[m,n,w,u,v] * B[b,u,w,v,a] & a:25; b:24; m:24; n:24; u:25; w:25; v:25; -C[n,a,m,b] = A[m,n,w,u,v] * B[b,u,w,v,a] & a:25; b:24; m:24; n:24; u:25; w:25; v:25; -C[a,n,m,b] = A[b,u,w,v,a] * B[m,v,n,w,u] & a:24; b:24; m:24; n:25; u:25; w:25; v:25; -C[m,a,n,b] = A[m,v,n,w,u] * B[b,u,w,v,a] & a:25; b:24; m:24; n:25; u:25; w:25; v:25; -C[b,a,m,o,n] = A[u,b,w,v,a] * B[m,n,u,v,o,w] & a:54; b:48; m:16; o:15; n:15; u:16; w:15; v:15; -C[a,n,o,m,b] = A[u,b,w,v,a] * B[m,n,u,v,o,w] & a:48; b:54; m:16; o:15; n:15; u:16; w:15; v:15; -C[b,m,a,n,o] = A[u,b,w,v,a] * B[u,v,w,o,m,n] & a:54; b:48; m:16; o:15; n:15; u:16; w:15; v:15; -C[a,o,n,b,m] = A[u,b,w,v,a] * B[u,v,w,o,m,n] & a:48; b:54; m:16; o:15; n:15; u:16; w:15; v:15; -C[b,m,e,d,a,c] = A[c,a,b,d,e,u] * B[u,m] & a:15; c:16; b:16; e:15; d:15; m:16; u:16; -C[a,e,d,m,b,c] = A[c,a,b,d,e,u] * B[u,m] & a:16; c:16; b:15; e:15; d:15; m:16; u:16; -C[b,e,c,d,a,m] = A[c,a,b,d,e,u] * B[m,u] & a:15; c:16; b:16; e:15; d:15; m:16; u:15; -C[e,a,d,b,c,m] = A[c,a,b,d,e,u] * B[m,u] & a:15; c:16; b:15; e:16; d:15; m:16; u:15; -C[a,b,d,c,m] = A[c,b,a,u,d,v] * B[m,u,v] & a:16; c:16; b:15; d:15; m:200; u:15; v:15; -C[d,a,b,c,m] = A[c,b,a,u,d,v] * B[m,u,v] & a:15; c:16; b:15; d:16; m:200; u:15; v:15; -C[m,b,c,d,a] = A[u,m,v] * B[c,b,a,u,d,v] & a:15; c:16; b:15; d:15; m:192; u:16; v:15; -C[b,d,m,c,a] = A[c,b,a,u,d,v] * B[u,m,v] & a:15; c:16; b:16; d:15; m:200; u:16; v:15; -C[a,b,n,m,d,c] = A[u,b,v,c,a,d] * B[v,m,n,u] & a:16; c:15; b:15; d:15; m:16; n:15; u:16; v:16; -C[d,a,b,m,c,n] = A[u,b,v,c,a,d] * B[v,m,n,u] & a:15; c:15; b:15; d:16; m:16; n:15; u:16; v:16; -C[a,n,m,b,c,d] = A[u,b,v,c,a,d] * B[m,n,v,u] & a:16; c:15; b:15; d:15; m:16; n:15; u:16; v:15; -C[c,d,m,b,a,n] = A[u,b,v,c,a,d] * B[m,n,v,u] & a:15; c:16; b:15; d:15; m:16; n:15; u:16; v:15; -C[b,a,c,m] = A[w,a,v,c,b,u] * B[v,m,w,u] & a:15; c:15; b:16; m:3072; u:15; w:16; v:16; -C[c,a,m,b] = A[w,a,v,c,b,u] * B[v,m,w,u] & a:15; c:16; b:15; m:3072; u:15; w:16; v:16; -C[c,a,b,m] = A[w,a,v,c,b,u] * B[m,u,w,v] & a:15; c:16; b:15; m:3072; u:15; w:16; v:15; -C[m,c,a,b] = A[m,u,w,v] * B[w,a,v,c,b,u] & a:16; c:15; b:15; m:3072; u:15; w:16; v:15; -C[c,b,n,m,a] = A[v,w,c,u,a,b] * B[v,u,n,w,m] & a:15; c:16; b:15; m:54; n:54; u:15; w:15; v:16; -C[n,a,m,c,b] = A[v,u,n,w,m] * B[v,w,c,u,a,b] & a:16; c:15; b:15; m:54; n:48; u:15; w:15; v:16; -C[c,m,b,n,a] = A[v,w,c,u,a,b] * B[n,w,v,m,u] & a:15; c:16; b:15; m:54; n:48; u:15; w:15; v:16; -C[c,a,n,b,m] = A[v,w,c,u,a,b] * B[n,w,v,m,u] & a:15; c:16; b:15; m:54; n:48; u:15; w:15; v:16; -C[c,m,n,b,o,a] = A[v,w,b,u,c,a] * B[w,n,v,m,u,o] & a:15; c:16; b:15; m:16; o:15; n:15; u:15; w:16; v:16; -C[c,o,n,b,m,a] = A[v,w,b,u,c,a] * B[w,n,v,m,u,o] & a:15; c:16; b:15; m:16; o:15; n:15; u:15; w:16; v:16; -C[n,c,b,a,m,o] = A[m,w,n,u,v,o] * B[v,w,b,u,c,a] & a:16; c:15; b:15; m:16; o:15; n:16; u:15; w:15; v:16; -C[c,b,o,n,a,m] = A[v,w,b,u,c,a] * B[m,w,n,u,v,o] & a:15; c:16; b:15; m:16; o:15; n:15; u:15; w:15; v:16; -C[m,n,a] = A[n,u,m] * B[u,a] & a:256; m:240; u:256; n:256; -C[a,m,n] = A[u,a] * B[n,u,m] & a:240; m:256; u:256; n:256; -C[a,n,m] = A[u,a] * B[m,n,u] & a:240; u:256; m:256; n:256; -C[m,a,n] = A[m,n,u] * B[u,a] & a:256; u:256; m:256; n:243; -C[o,a,n,m] = A[u,n,o,m] * B[u,a] & a:64; m:60; u:64; o:64; n:64; -C[n,a,m,o] = A[u,n,o,m] * B[u,a] & a:64; m:60; u:64; o:64; n:64; -C[n,o,a,m] = A[m,n,u,o] * B[u,a] & a:64; u:64; m:64; o:60; n:64; -C[n,o,m,a] = A[m,n,u,o] * B[u,a] & a:64; u:64; m:64; o:60; n:64; -C[p,a,n,m,o] = A[m,p,o,u,n] * B[a,u] & a:24; m:24; o:27; n:27; p:24; u:27; -C[m,a,o,p,n] = A[m,p,o,u,n] * B[a,u] & a:24; m:24; o:27; n:27; p:27; u:27; -C[n,p,m,a,o] = A[n,u,o,m,p] * B[a,u] & a:24; m:27; o:27; n:24; p:27; u:27; -C[p,o,a,n,m] = A[n,u,o,m,p] * B[a,u] & a:24; m:27; o:27; n:24; p:24; u:27; -C[p,q,a,o,n,m] = A[q,n,o,u,p,m] * B[a,u] & a:16; m:15; o:16; n:16; q:16; p:16; u:16; -C[q,p,a,n,m,o] = A[q,n,o,u,p,m] * B[a,u] & a:16; m:15; o:16; n:16; q:16; p:16; u:16; -C[m,q,p,a,n,o] = A[p,q,m,u,o,n] * B[a,u] & a:16; m:16; o:15; n:16; q:16; p:16; u:16; -C[p,n,m,o,a,q] = A[p,q,m,u,o,n] * B[a,u] & a:16; m:15; o:16; n:16; q:16; p:16; u:16; -C[m,b,a] = A[u,m] * B[u,a,b] & a:256; m:240; b:256; u:256; -C[b,m,a] = A[u,a,b] * B[u,m] & a:243; m:256; b:256; u:256; -C[a,m,b] = A[u,a,b] * B[m,u] & a:256; m:256; b:243; u:256; -C[m,b,a] = A[m,u] * B[u,a,b] & a:256; m:240; b:256; u:256; -C[b,n,m,a] = A[b,a,u] * B[u,m,n] & a:60; u:4000; b:64; m:64; n:64; -C[m,a,b,n] = A[u,m,n] * B[b,a,u] & a:64; u:4000; b:64; m:64; n:60; -C[m,b,n,a] = A[n,u,m] * B[b,a,u] & a:64; u:4050; b:64; m:72; n:64; -C[m,a,b,n] = A[n,u,m] * B[b,a,u] & a:64; u:4050; b:64; m:72; n:64; -C[a,m] = A[u,v,a] * B[v,m,u] & a:240; m:256; u:256; v:256; -C[m,a] = A[v,m,u] * B[u,v,a] & a:256; u:256; m:240; v:256; -C[a,m] = A[u,v,a] * B[v,u,m] & a:240; m:256; u:256; v:256; -C[m,a] = A[v,u,m] * B[u,v,a] & a:256; m:240; u:256; v:256; -C[a,o,b,m,n] = A[u,b,a] * B[m,u,n,o] & a:24; b:27; m:24; o:27; n:27; u:768; -C[o,m,a,b,n] = A[m,u,n,o] * B[u,b,a] & a:24; b:27; m:24; o:24; n:27; u:768; -C[a,m,b,o,n] = A[u,b,a] * B[n,u,o,m] & a:24; b:27; m:27; o:27; n:24; u:768; -C[m,n,o,a,b] = A[n,u,o,m] * B[u,b,a] & a:24; b:27; m:24; o:27; n:24; u:768; -C[a,n,m] = A[a,v,u] * B[m,n,u,v] & a:3888; u:64; v:64; m:64; n:64; -C[n,m,a] = A[m,n,u,v] * B[a,v,u] & a:4000; u:64; v:64; m:72; n:64; -C[m,n,a] = A[m,u,n,v] * B[a,v,u] & a:4000; u:64; v:64; m:64; n:60; -C[a,m,n] = A[a,v,u] * B[m,u,n,v] & a:3888; u:64; v:64; m:64; n:64; -C[n,m,b,p,a,o] = A[p,m,o,u,n] * B[b,u,a] & a:16; b:16; m:15; o:16; n:16; p:16; u:200; -C[o,p,b,m,a,n] = A[p,m,o,u,n] * B[b,u,a] & a:16; b:16; m:15; o:16; n:16; p:16; u:200; -C[p,n,o,m,b,a] = A[n,m,p,o,u] * B[b,u,a] & a:16; b:16; m:15; o:16; n:16; p:16; u:200; -C[n,a,p,b,o,m] = A[n,m,p,o,u] * B[b,u,a] & a:16; b:16; m:15; o:16; n:16; p:16; u:200; -C[o,a,n,m] = A[o,v,n,u,m] * B[u,a,v] & a:768; m:27; o:24; n:27; u:24; v:27; -C[n,o,a,m] = A[o,v,n,u,m] * B[u,a,v] & a:768; m:27; o:24; n:24; u:24; v:27; -C[o,m,a,n] = A[m,v,u,n,o] * B[u,a,v] & a:768; m:24; o:24; n:27; u:24; v:27; -C[n,a,o,m] = A[m,v,u,n,o] * B[u,a,v] & a:768; m:24; o:27; n:24; u:24; v:27; -C[p,n,o,a,m] = A[u,m,n,p,v,o] * B[a,v,u] & a:200; m:15; o:16; n:16; p:16; u:16; v:16; -C[a,n,o,p,m] = A[a,v,u] * B[u,m,n,p,v,o] & a:192; m:16; o:16; n:16; p:16; u:16; v:16; -C[o,p,n,a,m] = A[p,o,m,n,u,v] * B[a,v,u] & a:200; m:15; o:16; n:16; p:16; u:16; v:16; -C[m,a,o,n,p] = A[p,o,m,n,u,v] * B[a,v,u] & a:200; m:16; o:15; n:16; p:16; u:16; v:16; -C[a,b,m,c] = A[b,u,c,a] * B[m,u] & a:64; m:64; c:60; b:64; u:64; -C[b,c,m,a] = A[b,u,c,a] * B[m,u] & a:60; m:64; c:64; b:64; u:64; -C[m,a,c,b] = A[u,m] * B[b,u,c,a] & a:64; m:72; c:64; b:64; u:64; -C[a,c,m,b] = A[b,u,c,a] * B[u,m] & a:64; m:64; c:60; b:64; u:64; -C[b,c,m,a,n] = A[b,u,c,a] * B[n,u,m] & a:27; c:27; b:24; m:27; n:24; u:768; -C[n,m,c,b,a] = A[n,u,m] * B[b,u,c,a] & a:27; c:27; b:24; m:27; n:24; u:768; -C[a,n,c,m,b] = A[b,u,c,a] * B[m,n,u] & a:24; c:27; b:24; m:24; n:27; u:768; -C[a,n,b,m,c] = A[b,u,c,a] * B[m,n,u] & a:24; c:27; b:24; m:24; n:27; u:768; -C[m,a,b] = A[v,m,u] * B[u,v,b,a] & a:64; m:3888; b:64; u:64; v:64; -C[m,a,b] = A[v,u,m] * B[u,v,b,a] & a:64; m:3888; b:64; u:64; v:64; -C[m,a,b] = A[u,m,v] * B[u,v,b,a] & a:64; m:3888; b:64; u:64; v:64; -C[b,m,a] = A[u,v,b,a] * B[m,v,u] & a:60; m:4000; b:64; u:64; v:64; -C[a,m,b] = A[u,v,b,a] * B[m,v,u] & a:64; m:4000; b:60; u:64; v:64; -C[b,o,m,c,a,n] = A[u,c,b,a] * B[m,u,n,o] & a:15; c:16; b:16; m:16; o:16; n:16; u:3456; -C[n,a,c,o,m,b] = A[m,u,n,o] * B[u,c,b,a] & a:16; c:16; b:16; m:16; o:15; n:16; u:3456; -C[c,n,a,o,m,b] = A[u,c,b,a] * B[n,m,u,o] & a:15; c:16; b:16; m:16; o:16; n:16; u:3456; -C[b,c,n,a,o,m] = A[u,c,b,a] * B[n,m,u,o] & a:15; c:16; b:16; m:16; o:16; n:16; u:3456; -C[m,b,a,n] = A[v,n,m,u] * B[b,v,u,a] & a:64; b:64; m:64; n:60; u:64; v:64; -C[b,m,n,a] = A[b,v,u,a] * B[v,n,m,u] & a:60; b:64; m:64; n:64; u:64; v:64; -C[a,b,m,n] = A[b,v,u,a] * B[u,n,m,v] & a:72; b:64; m:64; n:64; u:64; v:64; -C[m,b,a,n] = A[u,n,m,v] * B[b,v,u,a] & a:64; b:64; m:64; n:60; u:64; v:64; -C[a,m] = A[v,u,w,a] * B[u,m,v,w] & a:72; m:64; u:64; w:64; v:64; -C[m,a] = A[u,m,v,w] * B[v,u,w,a] & a:64; m:72; u:64; w:64; v:64; -C[m,a] = A[v,w,m,u] * B[v,u,w,a] & a:64; u:64; m:72; w:64; v:64; -C[a,m] = A[v,u,w,a] * B[v,w,m,u] & a:72; m:64; u:64; w:64; v:64; -C[b,o,a,n,m] = A[u,a,v,b] * B[u,o,n,v,m] & a:27; b:24; m:24; o:27; n:27; u:24; v:27; -C[n,b,m,o,a] = A[u,o,n,v,m] * B[u,a,v,b] & a:24; b:27; m:27; o:27; n:24; u:24; v:27; -C[a,n,o,b,m] = A[u,a,v,b] * B[m,v,u,o,n] & a:24; b:27; m:24; o:27; n:27; u:24; v:27; -C[o,b,n,m,a] = A[m,v,u,o,n] * B[u,a,v,b] & a:24; b:27; m:24; o:24; n:27; u:24; v:27; -C[n,m,a] = A[u,m,w,n,v] * B[u,v,a,w] & a:768; m:27; n:24; u:24; w:27; v:27; -C[n,a,m] = A[u,m,w,n,v] * B[u,v,a,w] & a:768; m:27; n:24; u:24; w:27; v:27; -C[m,n,a] = A[n,m,v,w,u] * B[u,v,a,w] & a:768; m:24; n:24; u:24; w:27; v:27; -C[n,a,m] = A[n,m,v,w,u] * B[u,v,a,w] & a:768; m:27; n:24; u:24; w:27; v:27; -C[b,o,p,n,a,m] = A[v,u,a,b] * B[u,v,p,m,o,n] & a:15; b:16; m:16; o:16; n:16; p:16; u:16; v:16; -C[a,o,m,n,b,p] = A[v,u,a,b] * B[u,v,p,m,o,n] & a:16; b:15; m:16; o:16; n:16; p:16; u:16; v:16; -C[m,o,b,p,a,n] = A[o,v,p,u,n,m] * B[v,u,a,b] & a:16; b:15; m:16; o:16; n:15; p:16; u:16; v:16; -C[n,p,o,m,b,a] = A[o,v,p,u,n,m] * B[v,u,a,b] & a:16; b:15; m:15; o:16; n:16; p:16; u:16; v:16; -C[m,a,o,n] = A[w,n,m,v,o,u] * B[a,w,u,v] & a:3456; m:16; o:15; n:16; u:16; w:16; v:16; -C[m,o,a,n] = A[w,n,m,v,o,u] * B[a,w,u,v] & a:3456; m:16; o:15; n:16; u:16; w:16; v:16; -C[n,a,o,m] = A[m,n,v,u,w,o] * B[a,w,u,v] & a:3456; m:16; o:15; n:16; u:16; w:16; v:16; -C[n,m,o,a] = A[m,n,v,u,w,o] * B[a,w,u,v] & a:3456; m:16; o:15; n:16; u:16; w:16; v:16; -C[m,b,c,a,d] = A[m,u] * B[b,d,u,a,c] & a:27; c:27; b:24; d:27; m:24; u:27; -C[c,b,a,d,m] = A[b,d,u,a,c] * B[m,u] & a:27; c:24; b:24; d:27; m:24; u:27; -C[m,c,a,d,b] = A[u,m] * B[b,d,u,a,c] & a:27; c:27; b:24; d:27; m:24; u:24; -C[b,m,c,a,d] = A[b,d,u,a,c] * B[u,m] & a:27; c:27; b:24; d:27; m:24; u:24; -C[c,b,m,d,a,n] = A[c,a,u,b,d] * B[n,u,m] & a:15; c:16; b:16; d:16; m:16; n:16; u:200; -C[a,b,n,c,d,m] = A[c,a,u,b,d] * B[n,u,m] & a:16; c:16; b:15; d:16; m:16; n:16; u:200; -C[m,c,d,n,b,a] = A[n,m,u] * B[c,a,u,b,d] & a:16; c:16; b:16; d:16; m:24; n:16; u:200; -C[d,c,n,b,a,m] = A[c,a,u,b,d] * B[n,m,u] & a:15; c:16; b:16; d:16; m:16; n:16; u:200; -C[m,b,c,a] = A[m,u,v] * B[c,v,u,a,b] & a:27; c:24; b:27; m:768; u:27; v:27; -C[c,b,m,a] = A[c,v,u,a,b] * B[m,u,v] & a:27; c:24; b:27; m:768; u:27; v:27; -C[a,m,b,c] = A[c,v,u,a,b] * B[v,m,u] & a:24; c:24; b:27; m:768; u:27; v:24; -C[a,c,m,b] = A[c,v,u,a,b] * B[v,m,u] & a:24; c:24; b:27; m:768; u:27; v:24; -C[b,n,a,c,m] = A[b,c,v,a,u] * B[u,n,m,v] & a:27; c:27; b:24; m:24; n:27; u:24; v:27; -C[c,n,a,m,b] = A[b,c,v,a,u] * B[u,n,m,v] & a:27; c:24; b:24; m:24; n:27; u:24; v:27; -C[b,n,m,c,a] = A[b,c,v,a,u] * B[u,m,v,n] & a:27; c:27; b:24; m:24; n:27; u:24; v:27; -C[a,c,m,b,n] = A[b,c,v,a,u] * B[u,m,v,n] & a:24; c:27; b:24; m:24; n:27; u:24; v:27; -C[m,b,a] = A[v,m,w,u] * B[w,a,b,v,u] & a:24; b:27; m:768; u:27; w:24; v:24; -C[b,a,m] = A[w,a,b,v,u] * B[v,m,w,u] & a:27; b:24; m:768; u:27; w:24; v:24; -C[b,a,m] = A[w,a,b,v,u] * B[u,v,w,m] & a:27; b:24; m:768; u:24; w:24; v:27; -C[m,b,a] = A[u,v,w,m] * B[w,a,b,v,u] & a:24; b:27; m:768; u:24; w:24; v:27; -C[b,o,n,a,m,c] = A[b,a,c,v,u] * B[n,m,u,v,o] & a:15; c:16; b:16; m:16; o:16; n:16; u:60; v:60; -C[m,c,n,b,o,a] = A[n,m,u,v,o] * B[b,a,c,v,u] & a:16; c:16; b:16; m:16; o:15; n:16; u:60; v:60; -C[b,c,n,a,o,m] = A[b,a,c,v,u] * B[o,u,v,n,m] & a:15; c:16; b:16; m:16; o:16; n:16; u:60; v:60; -C[n,c,m,a,b,o] = A[o,u,v,n,m] * B[b,a,c,v,u] & a:16; c:16; b:16; m:15; o:16; n:16; u:60; v:60; -C[m,b,n,a] = A[u,n,m,v,w] * B[a,b,u,w,v] & a:24; b:27; m:24; n:27; u:24; w:27; v:27; -C[m,b,a,n] = A[u,n,m,v,w] * B[a,b,u,w,v] & a:24; b:27; m:24; n:27; u:24; w:27; v:27; -C[a,n,m,b] = A[a,b,u,w,v] * B[w,u,m,v,n] & a:24; b:27; m:24; n:27; u:27; w:24; v:27; -C[b,a,m,n] = A[a,b,u,w,v] * B[w,u,m,v,n] & a:24; b:24; m:24; n:27; u:27; w:24; v:27; -C[o,m,n,a,b] = A[u,m,w,v,o,n] * B[v,b,a,w,u] & a:60; b:60; m:15; o:16; n:16; u:16; w:16; v:16; -C[o,a,m,n,b] = A[u,m,w,v,o,n] * B[v,b,a,w,u] & a:60; b:60; m:15; o:16; n:16; u:16; w:16; v:16; -C[o,a,m,n,b] = A[w,o,m,u,v,n] * B[v,b,a,w,u] & a:60; b:60; m:15; o:16; n:16; u:16; w:16; v:16; -C[a,m,b,n,o] = A[v,b,a,w,u] * B[w,o,m,u,v,n] & a:64; b:60; m:16; o:16; n:16; u:16; w:16; v:16; -C[e,d,a,c,b,m] = A[a,d,e,b,c,u] * B[u,m] & a:16; c:15; b:16; e:16; d:16; m:12; u:16; -C[c,m,d,b,a,e] = A[a,d,e,b,c,u] * B[u,m] & a:16; c:16; b:15; e:16; d:16; m:12; u:16; -C[a,c,b,e,m,d] = A[a,d,e,b,c,u] * B[m,u] & a:16; c:15; b:16; e:16; d:16; m:16; u:16; -C[b,e,c,d,m,a] = A[a,d,e,b,c,u] * B[m,u] & a:16; c:15; b:16; e:16; d:16; m:16; u:16; -C[c,d,a,b,m] = A[c,a,d,v,b,u] * B[v,m,u] & a:15; c:16; b:16; d:16; m:200; u:16; v:16; -C[m,a,c,b,d] = A[v,m,u] * B[c,a,d,v,b,u] & a:16; c:16; b:16; d:16; m:192; u:16; v:16; -C[a,b,c,d,m] = A[c,a,d,v,b,u] * B[u,v,m] & a:16; c:16; b:15; d:16; m:200; u:16; v:16; -C[d,a,m,c,b] = A[c,a,d,v,b,u] * B[u,v,m] & a:15; c:16; b:16; d:16; m:200; u:16; v:16; -C[d,c,a,m,b,n] = A[v,b,a,d,u,c] * B[m,u,v,n] & a:15; c:16; b:16; d:16; m:16; n:15; u:16; v:16; -C[m,c,a,n,d,b] = A[m,u,v,n] * B[v,b,a,d,u,c] & a:16; c:16; b:16; d:16; m:16; n:15; u:16; v:16; -C[d,n,a,b,m,c] = A[v,b,a,d,u,c] * B[u,n,m,v] & a:15; c:16; b:16; d:16; m:16; n:15; u:16; v:16; -C[n,c,a,b,d,m] = A[u,n,m,v] * B[v,b,a,d,u,c] & a:16; c:16; b:16; d:16; m:15; n:16; u:16; v:16; -C[m,c,a,b] = A[u,m,w,v] * B[a,v,u,w,b,c] & a:16; c:16; b:16; m:3456; u:16; w:16; v:16; -C[m,b,a,c] = A[u,m,w,v] * B[a,v,u,w,b,c] & a:16; c:16; b:16; m:3456; u:16; w:16; v:16; -C[m,c,b,a] = A[w,u,m,v] * B[a,v,u,w,b,c] & a:16; c:16; b:16; m:3456; u:16; w:16; v:16; -C[c,a,m,b] = A[a,v,u,w,b,c] * B[w,u,m,v] & a:16; c:16; b:15; m:3456; u:16; w:16; v:16; -C[m,n,b,a,c] = A[u,m,v,n,w] * B[a,b,u,c,v,w] & a:16; c:16; b:16; m:64; n:60; u:16; w:16; v:16; -C[a,n,m,b,c] = A[a,b,u,c,v,w] * B[u,m,v,n,w] & a:16; c:15; b:16; m:60; n:60; u:16; w:16; v:16; -C[b,m,n,c,a] = A[a,b,u,c,v,w] * B[v,m,w,u,n] & a:16; c:15; b:16; m:60; n:60; u:16; w:16; v:16; -C[n,a,c,b,m] = A[v,m,w,u,n] * B[a,b,u,c,v,w] & a:16; c:16; b:16; m:60; n:64; u:16; w:16; v:16; -C[c,m,o,a,b,n] = A[u,b,a,v,c,w] * B[v,u,o,m,w,n] & a:15; c:16; b:16; m:16; o:16; n:16; u:16; w:16; v:16; -C[a,n,m,b,o,c] = A[u,b,a,v,c,w] * B[v,u,o,m,w,n] & a:16; c:15; b:16; m:16; o:16; n:16; u:16; w:16; v:16; -C[n,b,o,a,m,c] = A[v,u,n,m,w,o] * B[u,b,a,v,c,w] & a:16; c:16; b:16; m:15; o:16; n:16; u:16; w:16; v:16; -C[b,n,a,o,m,c] = A[u,b,a,v,c,w] * B[v,u,n,m,w,o] & a:15; c:16; b:16; m:16; o:16; n:16; u:16; w:16; v:16; -C[n,a,m] = A[m,u,n] * B[a,u] & a:288; u:300; m:288; n:288; -C[n,m,a] = A[m,u,n] * B[a,u] & a:288; u:300; m:288; n:288; -C[m,a,n] = A[n,m,u] * B[a,u] & a:288; u:300; m:288; n:288; -C[n,a,m] = A[n,m,u] * B[a,u] & a:288; u:300; m:300; n:288; -C[m,o,n,a] = A[m,n,o,u] * B[u,a] & a:72; u:72; m:72; o:72; n:72; -C[o,n,a,m] = A[m,n,o,u] * B[u,a] & a:72; u:72; m:72; o:72; n:72; -C[n,o,a,m] = A[o,n,u,m] * B[u,a] & a:72; m:72; u:72; o:72; n:72; -C[a,m,n,o] = A[u,a] * B[o,n,u,m] & a:72; m:72; u:72; o:72; n:72; -C[o,a,n,m,p] = A[n,o,u,p,m] * B[a,u] & a:32; m:30; o:32; n:32; p:30; u:30; -C[n,p,a,m,o] = A[n,o,u,p,m] * B[a,u] & a:32; m:30; o:30; n:32; p:30; u:30; -C[p,a,n,m,o] = A[m,p,u,o,n] * B[a,u] & a:32; m:32; o:30; n:30; p:32; u:30; -C[p,o,m,a,n] = A[m,p,u,o,n] * B[a,u] & a:32; m:32; o:30; n:30; p:32; u:30; -C[o,m,n,q,a,p] = A[p,n,m,u,o,q] * B[a,u] & a:16; m:18; o:16; n:18; q:18; p:16; u:18; -C[n,p,m,q,o,a] = A[p,n,m,u,o,q] * B[a,u] & a:16; m:18; o:18; n:16; q:18; p:16; u:18; -C[n,m,q,p,a,o] = A[m,u,o,p,n,q] * B[a,u] & a:16; m:16; o:18; n:16; q:18; p:18; u:18; -C[m,n,p,a,o,q] = A[m,u,o,p,n,q] * B[a,u] & a:16; m:16; o:18; n:18; q:18; p:18; u:18; -C[b,a,m] = A[b,u,a] * B[u,m] & a:300; m:300; b:288; u:288; -C[a,b,m] = A[b,u,a] * B[u,m] & a:288; m:300; b:288; u:288; -C[a,m,b] = A[b,u,a] * B[m,u] & a:288; m:288; b:288; u:300; -C[b,a,m] = A[b,u,a] * B[m,u] & a:300; m:288; b:288; u:300; -C[n,a,m,b] = A[m,u,n] * B[b,a,u] & a:72; u:5000; b:72; m:72; n:72; -C[n,a,b,m] = A[m,u,n] * B[b,a,u] & a:72; u:5000; b:72; m:72; n:72; -C[n,m,a,b] = A[u,m,n] * B[b,a,u] & a:72; u:5000; b:72; m:72; n:72; -C[m,a,n,b] = A[u,m,n] * B[b,a,u] & a:72; u:5000; b:72; m:72; n:72; -C[a,m] = A[a,v,u] * B[m,u,v] & a:288; m:288; u:300; v:300; -C[m,a] = A[m,u,v] * B[a,v,u] & a:288; u:300; m:288; v:300; -C[m,a] = A[v,m,u] * B[a,v,u] & a:288; u:300; m:288; v:288; -C[a,m] = A[a,v,u] * B[v,m,u] & a:288; m:300; u:300; v:288; -C[a,m,b,o,n] = A[u,a,b] * B[u,o,m,n] & a:32; b:30; m:30; o:30; n:30; u:864; -C[o,b,m,a,n] = A[u,o,m,n] * B[u,a,b] & a:30; b:30; m:30; o:32; n:30; u:864; -C[n,b,m,a,o] = A[o,n,u,m] * B[u,a,b] & a:30; b:30; m:30; o:32; n:32; u:864; -C[a,o,b,m,n] = A[u,a,b] * B[o,n,u,m] & a:32; b:30; m:30; o:32; n:30; u:864; -C[m,n,a] = A[v,n,m,u] * B[u,v,a] & a:5000; u:72; n:72; m:72; v:72; -C[m,a,n] = A[v,n,m,u] * B[u,v,a] & a:5000; u:72; n:72; m:72; v:72; -C[a,n,m] = A[u,v,a] * B[n,v,u,m] & a:5184; m:72; v:72; u:72; n:72; -C[n,m,a] = A[n,v,u,m] * B[u,v,a] & a:5000; m:72; v:72; u:72; n:72; -C[a,n,o,m,p,b] = A[u,b,a] * B[u,o,n,p,m] & a:16; b:18; m:18; o:18; n:18; p:18; u:256; -C[o,m,n,b,p,a] = A[u,o,n,p,m] * B[u,b,a] & a:18; b:18; m:18; o:16; n:18; p:18; u:256; -C[a,b,m,p,n,o] = A[u,b,a] * B[n,u,m,o,p] & a:16; b:18; m:18; o:18; n:16; p:18; u:256; -C[o,a,p,b,m,n] = A[n,u,m,o,p] * B[u,b,a] & a:18; b:18; m:18; o:16; n:16; p:18; u:256; -C[n,o,a,m] = A[n,v,u,o,m] * B[u,a,v] & a:864; m:30; o:30; n:32; u:32; v:30; -C[o,n,m,a] = A[n,v,u,o,m] * B[u,a,v] & a:864; m:30; o:32; n:32; u:32; v:30; -C[n,o,m,a] = A[u,m,o,v,n] * B[u,a,v] & a:864; m:30; o:30; n:32; u:32; v:30; -C[n,o,a,m] = A[u,m,o,v,n] * B[u,a,v] & a:864; m:30; o:30; n:32; u:32; v:30; -C[a,m,o,p,n] = A[v,a,u] * B[m,v,u,p,o,n] & a:240; m:16; o:18; n:18; p:18; u:18; v:16; -C[a,p,n,o,m] = A[v,a,u] * B[m,v,u,p,o,n] & a:240; m:16; o:18; n:18; p:18; u:18; v:16; -C[a,n,m,o,p] = A[v,a,u] * B[p,n,o,m,v,u] & a:240; m:18; o:18; n:18; p:16; u:18; v:16; -C[a,n,m,p,o] = A[v,a,u] * B[p,n,o,m,v,u] & a:240; m:18; o:18; n:18; p:16; u:18; v:16; -C[c,m,a,b] = A[a,u,c,b] * B[u,m] & a:72; m:72; c:72; b:72; u:72; -C[b,c,a,m] = A[a,u,c,b] * B[u,m] & a:72; m:72; c:72; b:72; u:72; -C[m,b,c,a] = A[m,u] * B[a,u,c,b] & a:72; m:72; c:72; b:72; u:72; -C[c,m,a,b] = A[a,u,c,b] * B[m,u] & a:72; m:72; c:72; b:72; u:72; -C[n,a,m,c,b] = A[n,u,m] * B[a,c,u,b] & a:32; c:30; b:30; m:30; n:32; u:864; -C[b,n,a,m,c] = A[a,c,u,b] * B[n,u,m] & a:32; c:30; b:32; m:30; n:32; u:864; -C[c,n,a,b,m] = A[a,c,u,b] * B[u,m,n] & a:32; c:32; b:30; m:30; n:30; u:864; -C[a,n,m,b,c] = A[a,c,u,b] * B[u,m,n] & a:32; c:30; b:30; m:30; n:30; u:864; -C[m,a,b] = A[v,m,u] * B[a,u,b,v] & a:72; m:5184; b:72; u:72; v:72; -C[b,m,a] = A[a,u,b,v] * B[v,m,u] & a:72; m:5000; b:72; u:72; v:72; -C[a,m,b] = A[a,u,b,v] * B[u,v,m] & a:72; m:5000; b:72; u:72; v:72; -C[m,b,a] = A[u,v,m] * B[a,u,b,v] & a:72; m:5184; b:72; u:72; v:72; -C[m,b,n,a,o,c] = A[m,u,o,n] * B[b,c,a,u] & a:18; c:18; b:16; m:16; o:18; n:18; u:4500; -C[b,m,o,a,c,n] = A[b,c,a,u] * B[m,u,o,n] & a:18; c:18; b:16; m:16; o:18; n:18; u:4500; -C[n,m,c,o,b,a] = A[o,u,m,n] * B[b,c,a,u] & a:18; c:18; b:16; m:18; o:16; n:16; u:4500; -C[c,m,b,n,a,o] = A[b,c,a,u] * B[o,u,m,n] & a:18; c:16; b:16; m:18; o:16; n:18; u:4500; -C[m,n,a,b] = A[v,m,u,n] * B[a,u,v,b] & a:72; b:72; m:72; n:72; u:72; v:72; -C[m,n,b,a] = A[v,m,u,n] * B[a,u,v,b] & a:72; b:72; m:72; n:72; u:72; v:72; -C[b,a,n,m] = A[a,u,v,b] * B[m,n,v,u] & a:72; b:72; m:72; n:72; u:72; v:72; -C[a,n,m,b] = A[a,u,v,b] * B[m,n,v,u] & a:72; b:72; m:72; n:72; u:72; v:72; -C[a,m] = A[a,v,w,u] * B[v,u,w,m] & a:72; m:72; u:72; w:72; v:72; -C[m,a] = A[v,u,w,m] * B[a,v,w,u] & a:72; m:72; u:72; w:72; v:72; -C[a,m] = A[a,v,w,u] * B[w,m,v,u] & a:72; m:72; u:72; w:72; v:72; -C[m,a] = A[w,m,v,u] * B[a,v,w,u] & a:72; u:72; m:72; w:72; v:72; -C[o,a,n,m,b] = A[v,n,u,o,m] * B[a,b,u,v] & a:32; b:30; m:30; o:32; n:30; u:30; v:32; -C[a,o,n,b,m] = A[a,b,u,v] * B[v,n,u,o,m] & a:32; b:30; m:30; o:30; n:30; u:30; v:32; -C[o,b,a,n,m] = A[o,m,v,u,n] * B[a,b,u,v] & a:32; b:30; m:30; o:32; n:30; u:30; v:30; -C[n,b,a,m,o] = A[o,m,v,u,n] * B[a,b,u,v] & a:32; b:30; m:30; o:32; n:32; u:30; v:30; -C[m,a,n] = A[m,v,n,u,w] * B[a,w,v,u] & a:864; m:32; n:30; u:30; w:30; v:30; -C[m,n,a] = A[m,v,n,u,w] * B[a,w,v,u] & a:864; m:32; n:30; u:30; w:30; v:30; -C[a,m,n] = A[a,w,v,u] * B[v,n,w,m,u] & a:864; m:30; n:30; u:30; w:30; v:32; -C[n,a,m] = A[v,n,w,m,u] * B[a,w,v,u] & a:864; m:30; n:32; u:30; w:30; v:32; -C[b,n,p,m,a,o] = A[v,a,b,u] * B[o,m,n,u,p,v] & a:15; b:16; m:18; o:16; n:18; p:18; u:18; v:16; -C[p,b,a,n,m,o] = A[o,m,n,u,p,v] * B[v,a,b,u] & a:16; b:16; m:18; o:16; n:18; p:16; u:18; v:16; -C[m,b,p,o,n,a] = A[o,u,m,n,p,v] * B[v,a,b,u] & a:16; b:16; m:16; o:16; n:18; p:18; u:18; v:16; -C[p,b,n,a,o,m] = A[o,u,m,n,p,v] * B[v,a,b,u] & a:16; b:16; m:18; o:16; n:18; p:16; u:18; v:16; -C[n,m,o,a] = A[m,w,o,v,n,u] * B[v,a,u,w] & a:4500; m:16; o:18; n:16; u:18; w:18; v:16; -C[o,m,n,a] = A[m,w,o,v,n,u] * B[v,a,u,w] & a:4500; m:16; o:16; n:18; u:18; w:18; v:16; -C[m,a,o,n] = A[m,u,n,v,o,w] * B[v,a,u,w] & a:4500; m:16; o:18; n:18; u:18; w:18; v:16; -C[o,m,n,a] = A[m,u,n,v,o,w] * B[v,a,u,w] & a:4500; m:16; o:16; n:18; u:18; w:18; v:16; -C[m,c,b,d,a] = A[u,m] * B[a,d,b,c,u] & a:32; c:30; b:30; d:30; m:24; u:32; -C[m,b,a,c,d] = A[u,m] * B[a,d,b,c,u] & a:32; c:30; b:30; d:30; m:24; u:32; -C[d,a,b,m,c] = A[a,d,b,c,u] * B[m,u] & a:32; c:30; b:30; d:32; m:32; u:30; -C[c,m,a,b,d] = A[a,d,b,c,u] * B[m,u] & a:32; c:32; b:30; d:30; m:32; u:30; -C[m,b,a,c,n,d] = A[n,u,m] * B[c,u,b,d,a] & a:18; c:16; b:18; d:18; m:24; n:16; u:250; -C[n,b,a,m,d,c] = A[n,u,m] * B[c,u,b,d,a] & a:18; c:16; b:18; d:18; m:18; n:16; u:250; -C[d,b,m,a,n,c] = A[c,u,b,d,a] * B[m,n,u] & a:18; c:16; b:18; d:16; m:16; n:18; u:250; -C[m,d,n,a,b,c] = A[m,n,u] * B[c,u,b,d,a] & a:18; c:16; b:18; d:18; m:16; n:18; u:250; -C[a,m,c,b] = A[v,u,c,a,b] * B[m,u,v] & a:32; c:30; b:30; m:864; u:30; v:32; -C[c,b,m,a] = A[v,u,c,a,b] * B[m,u,v] & a:30; c:32; b:30; m:864; u:30; v:32; -C[m,b,a,c] = A[u,m,v] * B[v,u,c,a,b] & a:30; c:30; b:30; m:864; u:32; v:32; -C[a,c,m,b] = A[v,u,c,a,b] * B[u,m,v] & a:32; c:30; b:30; m:864; u:32; v:32; -C[b,n,a,c,m] = A[v,c,a,b,u] * B[u,n,m,v] & a:30; c:30; b:32; m:30; n:30; u:32; v:32; -C[c,n,a,m,b] = A[v,c,a,b,u] * B[u,n,m,v] & a:30; c:32; b:30; m:30; n:30; u:32; v:32; -C[n,m,c,b,a] = A[n,v,u,m] * B[v,c,a,b,u] & a:30; c:30; b:30; m:30; n:32; u:30; v:32; -C[b,m,n,a,c] = A[v,c,a,b,u] * B[n,v,u,m] & a:30; c:30; b:32; m:30; n:32; u:30; v:32; -C[m,b,a] = A[w,u,m,v] * B[b,u,a,v,w] & a:30; b:32; m:864; u:30; w:32; v:30; -C[a,b,m] = A[b,u,a,v,w] * B[w,u,m,v] & a:24; b:32; m:864; u:30; w:32; v:30; -C[b,a,m] = A[b,u,a,v,w] * B[m,w,u,v] & a:30; b:32; m:864; u:30; w:30; v:30; -C[m,a,b] = A[m,w,u,v] * B[b,u,a,v,w] & a:30; b:32; m:864; u:30; w:30; v:30; -C[m,a,o,n,c,b] = A[m,u,o,v,n] * B[c,v,b,u,a] & a:18; c:16; b:18; m:16; o:18; n:18; u:64; v:64; -C[o,n,a,m,b,c] = A[m,u,o,v,n] * B[c,v,b,u,a] & a:18; c:16; b:18; m:16; o:16; n:18; u:64; v:64; -C[c,b,a,n,o,m] = A[c,v,b,u,a] * B[m,o,n,v,u] & a:18; c:16; b:18; m:16; o:18; n:18; u:64; v:64; -C[a,b,o,c,n,m] = A[c,v,b,u,a] * B[m,o,n,v,u] & a:16; c:16; b:18; m:16; o:18; n:18; u:64; v:64; -C[m,a,n,b] = A[w,m,v,n,u] * B[b,u,v,w,a] & a:30; b:32; m:32; n:30; u:30; w:32; v:30; -C[n,b,m,a] = A[w,m,v,n,u] * B[b,u,v,w,a] & a:30; b:32; m:30; n:32; u:30; w:32; v:30; -C[m,n,b,a] = A[w,u,m,v,n] * B[b,u,v,w,a] & a:30; b:32; m:32; n:30; u:30; w:32; v:30; -C[a,b,n,m] = A[b,u,v,w,a] * B[w,u,m,v,n] & a:24; b:32; m:30; n:30; u:30; w:32; v:30; -C[b,o,m,a,n] = A[v,b,a,w,u] * B[u,m,v,o,w,n] & a:60; b:64; m:18; o:18; n:18; u:16; w:18; v:16; -C[n,o,b,m,a] = A[u,m,v,o,w,n] * B[v,b,a,w,u] & a:64; b:64; m:18; o:18; n:16; u:16; w:18; v:16; -C[m,a,n,b,o] = A[u,o,w,n,v,m] * B[v,b,a,w,u] & a:64; b:64; m:16; o:18; n:18; u:16; w:18; v:16; -C[o,a,b,n,m] = A[u,o,w,n,v,m] * B[v,b,a,w,u] & a:64; b:64; m:18; o:16; n:18; u:16; w:18; v:16; -C[e,m,a,b,d,c] = A[u,c,d,b,e,a] * B[u,m] & a:18; c:18; b:18; e:16; d:18; m:16; u:16; -C[b,c,a,m,e,d] = A[u,c,d,b,e,a] * B[u,m] & a:18; c:18; b:16; e:18; d:18; m:16; u:16; -C[e,m,a,d,c,b] = A[u,c,d,b,e,a] * B[m,u] & a:18; c:18; b:18; e:16; d:18; m:16; u:16; -C[e,d,c,b,a,m] = A[u,c,d,b,e,a] * B[m,u] & a:18; c:18; b:18; e:16; d:18; m:16; u:16; -C[m,d,b,c,a] = A[v,m,u] * B[b,d,u,a,v,c] & a:18; c:18; b:16; d:18; m:240; u:18; v:16; -C[m,d,a,b,c] = A[v,m,u] * B[b,d,u,a,v,c] & a:18; c:18; b:16; d:18; m:240; u:18; v:16; -C[m,a,b,c,d] = A[u,v,m] * B[b,d,u,a,v,c] & a:18; c:18; b:16; d:18; m:240; u:16; v:18; -C[m,c,d,b,a] = A[u,v,m] * B[b,d,u,a,v,c] & a:18; c:18; b:16; d:18; m:240; u:16; v:18; -C[n,d,c,m,b,a] = A[v,u,m,n] * B[a,u,v,b,c,d] & a:16; c:18; b:18; d:18; m:15; n:16; u:18; v:16; -C[c,m,b,n,a,d] = A[a,u,v,b,c,d] * B[v,u,m,n] & a:16; c:16; b:18; d:18; m:16; n:16; u:18; v:16; -C[d,a,b,m,c,n] = A[a,u,v,b,c,d] * B[n,m,v,u] & a:16; c:18; b:18; d:16; m:16; n:16; u:18; v:18; diff --git a/benchmark/benchmarks.jl b/benchmark/benchmarks.jl index ea007571..75e2f444 100644 --- a/benchmark/benchmarks.jl +++ b/benchmark/benchmarks.jl @@ -1,26 +1,50 @@ -using BenchmarkTools -using TensorAlgebra +using BenchmarkTools: @benchmarkable, BenchmarkGroup +using TensorAlgebra: contract, contract! -SUITE = BenchmarkGroup() +# Benchmarks of the core contraction entry points across a range of dimensions. +# Small dimensions are dominated by the fixed per-call label bookkeeping, large +# ones by the BLAS call, so a regression in either regime is visible. The `SUITE` +# global is the entry point `AirspeedVelocity.jl`'s `benchpkg` expects. -const CONTRACTIONS_PATH = joinpath(@__DIR__, "benchmark_specs", "randomTCs.dat") +const SUITE = BenchmarkGroup() -include("contractions.jl") +const DIMS = (4, 16, 64) -# Contraction benchmarks -# ---------------------- -contraction_suite = SUITE["contractions"] = BenchmarkGroup() +contract_suite = SUITE["contract"] = BenchmarkGroup() -Ts = (Float64, ComplexF64) -algs = (TensorAlgebra.Matricize(),) +# Matrix multiply, one shared index: C[i,k] = A[i,j] B[j,k]. +matmul = contract_suite["matmul"] = BenchmarkGroup() +for d in DIMS + matmul[d] = @benchmarkable( + contract(A, (:i, :j), B, (:j, :k)), + setup = (A = randn($d, $d); B = randn($d, $d)), + ) +end + +# Rank-3 contraction over two shared indices: C[i,l] = A[i,j,k] B[k,j,l]. +rank3 = contract_suite["rank3"] = BenchmarkGroup() +for d in (4, 16) + rank3[d] = @benchmarkable( + contract(A, (:i, :j, :k), B, (:k, :j, :l)), + setup = (A = randn($d, $d, $d); B = randn($d, $d, $d)), + ) +end -for alg in algs - alg_suite = contraction_suite[alg] = BenchmarkGroup() - for T in Ts - alg_suite[T] = BenchmarkGroup() +# Full contraction to a scalar: c = A[i,j] B[i,j]. +scalar = contract_suite["scalar"] = BenchmarkGroup() +for d in DIMS + scalar[d] = @benchmarkable( + contract(A, (:i, :j), B, (:i, :j)), + setup = (A = randn($d, $d); B = randn($d, $d)), + ) +end - for (i, line) in enumerate(eachline(CONTRACTIONS_PATH)) - alg_suite[T][i] = generate_contract_benchmark(line; T, alg) - end - end +# In-place matrix multiply into a preallocated destination. +contract!_suite = SUITE["contract!"] = BenchmarkGroup() +matmul! = contract!_suite["matmul"] = BenchmarkGroup() +for d in DIMS + matmul![d] = @benchmarkable( + contract!(C, (:i, :k), A, (:i, :j), B, (:j, :k)), + setup = (A = randn($d, $d); B = randn($d, $d); C = zeros($d, $d)), + ) end diff --git a/benchmark/contractions.jl b/benchmark/contractions.jl deleted file mode 100644 index c8cbdcf9..00000000 --- a/benchmark/contractions.jl +++ /dev/null @@ -1,76 +0,0 @@ -function extract_contract_labels(contraction::AbstractString) - symbolsC = match(r"C\[([^\]]*)\]", contraction) - labelsC = split(symbolsC.captures[1], ","; keepempty = false) - symbolsA = match(r"A\[([^\]]*)\]", contraction) - labelsA = split(symbolsA.captures[1], ","; keepempty = false) - symbolsB = match(r"B\[([^\]]*)\]", contraction) - labelsB = split(symbolsB.captures[1], ","; keepempty = false) - return labelsC, labelsA, labelsB -end - -function generate_contract_benchmark( - line::AbstractString; elt = Float64, alg = default_contract_alg(), do_alpha = true, - do_beta = true - ) - line_split = split(line, " & ") - @assert length(line_split) == 2 "Invalid line format:\n$line" - contraction, sizes = line_split - - # extract labels - labelsC, labelsA, labelsB = map(Tuple, extract_contract_labels(contraction)) - # pA, pB, pC = TensorOperations.contract_indices( - # tuple(labelsA...), tuple(labelsB...), tuple(labelsC...) - # ) - - # extract sizes - subsizes = Dict{String, Int}() - for (label, sz) in split.(split(sizes, "; "; keepempty = false), Ref(":")) - subsizes[label] = parse(Int, sz) - end - szA = getindex.(Ref(subsizes), labelsA) - szB = getindex.(Ref(subsizes), labelsB) - szC = getindex.(Ref(subsizes), labelsC) - setup_tensors() = (rand(elt, szA...), rand(elt, szB...), rand(elt, szC...)) - - if do_alpha && do_beta - α, β = rand(elt, 2) - return @benchmarkable( - contract!($alg, C, $labelsC, A, $labelsA, B, $labelsB, $α, $β), - setup = ((A, B, C) = $setup_tensors()), - evals = 1 - ) - elseif do_alpha - α = rand(elt) - return @benchmarkable( - contract!($alg, C, $labelsC, A, $labelsA, B, $labelsB, $α), - setup = ((A, B, C) = $setup_tensors()), - evals = 1 - ) - elseif do_beta - β = rand(elt) - return @benchmarkable( - contract!($alg, C, $labelsC, A, $labelsA, B, $labelsB, true, $β), - setup = ((A, B, C) = $setup_tensors()), - evals = 1 - ) - else - return @benchmarkable( - contract!($alg, C, $labelsC, A, $labelsA, B, $labelsB), - setup = ((A, B, C) = $setup_tensors()), - evals = 1 - ) - end -end - -function compute_contract_ops(line::AbstractString) - line_split = split(line, " & ") - @assert length(line_split) == 2 "Invalid line format:\n$line" - _, sizes = line_split - - # extract sizes - subsizes = Dict{String, Int}() - for (label, sz) in split.(split(sizes, "; "; keepempty = false), Ref("=")) - subsizes[label] = parse(Int, sz) - end - return prod(collect(values(subsizes))) -end diff --git a/test/Project.toml b/test/Project.toml index c8b1fde7..a46dc4da 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,6 +1,7 @@ [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" +BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" EllipsisNotation = "da5c29d0-fa7d-589e-88eb-ea29b0a81949" ITensorPkgSkeleton = "3d388ab1-018a-49f4-ae50-18094d5f71ea" @@ -23,6 +24,7 @@ path = ".." [compat] Adapt = "4" Aqua = "0.8.9" +BenchmarkTools = "1" BlockArrays = "1.6.1" EllipsisNotation = "1.8" ITensorPkgSkeleton = "0.3.42" diff --git a/test/test_benchmarks.jl b/test/test_benchmarks.jl new file mode 100644 index 00000000..0aa7fce1 --- /dev/null +++ b/test/test_benchmarks.jl @@ -0,0 +1,11 @@ +using BenchmarkTools: warmup +using Test: @test, @testset + +# Run the benchmark suite once, so it cannot fall out of sync with the API without +# CI noticing. This is a smoke test, not a regression check (for that, compare +# revisions with `benchpkg`, see `benchmark/README.md`). +include(joinpath(@__DIR__, "..", "benchmark", "benchmarks.jl")) + +@testset "benchmarks (smoke run)" begin + @test (warmup(SUITE); true) +end