Skip to content

Instantly share code, notes, and snippets.

@coolcomputery
Created April 18, 2023 06:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save coolcomputery/49f9d579e80044824bbc30593bbe8635 to your computer and use it in GitHub Desktop.
Save coolcomputery/49f9d579e80044824bbc30593bbe8635 to your computer and use it in GitHub Desktop.
6x6 (SSSP DP + syllable conjugations): 3x3->4x4 GN<=20
import java.util.*;
public class SSSP {
public static final boolean inRange(int v, int N) { return 0<=v && v<N; }
public static final boolean inRange(long v, long N) { return 0<=v && v<N; }
public static final boolean allInRange(int[] S, int N) {
for (int v:S) if (!inRange(v,N)) return false;
return true;
}
public static final int[] range(int n) {
int[] out=new int[n];
for (int i=0; i<n; i++) out[i]=i;
return out;
}
public static final int[] list2arr(List<Integer> L) {
int[] A=new int[L.size()];
for (int i=0; i<A.length; i++) A[i]=L.get(i);
return A;
}
public static final int[] set2sortedArr(Set<Integer> S) {
List<Integer> vals=new ArrayList<>(S);
Collections.sort(vals);
return list2arr(vals);
}
public static int[][] fromto_idx(Set<Integer> S, int N) {
for (int v:S) if (!inRange(v,N)) throw new RuntimeException();
int[] idx2set= set2sortedArr(S);
final int INVALID=-1;
int[] set2idx=new int[N]; Arrays.fill(set2idx,INVALID);
for (int i=0; i<idx2set.length; i++)
set2idx[idx2set[i]]=i;
return new int[][] {idx2set,set2idx};
}
public static final Set<Integer> set(int... vals) {
Set<Integer> out=new HashSet<>();
for (int v:vals) out.add(v);
return out;
}
public static final Set<Integer> difference(Set<Integer> A, Collection<Integer> B) {
Set<Integer> out=new HashSet<>(A);
out.removeAll(B);
return out;
}
public static int[] concat(int[] A, int[] B) {
int[] out=Arrays.copyOf(A,A.length+B.length);
System.arraycopy(B,0,out,A.length,B.length);
return out;
}
private static class BigByteArray {
private static final int CHUNK_SIZE=1<<30;
public final long N;
public byte[][] chunks;
public BigByteArray(long N, int val) {
if (val!=(byte)val) throw new RuntimeException(""+val);
this.N=N;
chunks=new byte[(int)(N/CHUNK_SIZE)+1][];
for (int c=0; CHUNK_SIZE*(long)c<N; c++) {
long lo=CHUNK_SIZE*(long)c;
chunks[c]=new byte[(int)( Math.min(N,lo+CHUNK_SIZE)-lo )];
}
for (byte[] chunk:chunks) Arrays.fill(chunk,(byte)val);
}
public byte get(long i) {
if (!inRange(i,N)) throw new RuntimeException();
return chunks[(int)(i/CHUNK_SIZE)][(int)(i%CHUNK_SIZE)];
}
public void set(long i, int v) {
if (!inRange(i,N)) throw new RuntimeException();
if (v!=(byte)v) throw new RuntimeException(""+v);
chunks[(int)(i/CHUNK_SIZE)][(int)(i%CHUNK_SIZE)]=(byte)v;
}
}
private static final int[] prod(int[] A, int[] B) {
int[] C=new int[B.length];
for (int i=0; i<B.length; i++) C[i]=A[B[i]];
return C;
}
private static class Move { //single-move permutation on a RxC loopover board
public static final int mod(int n, int k) { return ((n%k)+k)%k; }
public final int R, C, N;
public final boolean row_shift;
public final int coord; public final boolean backwards;
public Move(int R, int C, boolean row_shift, int coord, boolean backwards) {
if (R<=0 || C<=0) throw new RuntimeException();
if (!inRange(coord,row_shift?R:C)) throw new RuntimeException();
this.R=R; this.C=C; N=R*C;
this.row_shift=row_shift;
this.coord=coord;
this.backwards=backwards;
}
public boolean same_dimensions(Move o) {
return R==o.R && C==o.C;
}
public Move inv() {
return new Move(R,C,row_shift,coord,!backwards);
}
public int move(int v) {
if (!inRange(v,N)) throw new RuntimeException();
int r=v/C, c=mod(v,C);
int shift=backwards?-1:1;
if (row_shift) {
if (coord==r) c=mod(c+shift,C);
}
else {
if (coord==c) r=mod(r+shift,R);
}
return r*C+c;
}
public int[] action() {
int[] out=new int[N];
for (int i=0; i<N; i++) out[i]=move(i);
return out;
}
public String toString() {
return String.format("%d%s%s", coord, row_shift?"R":"C", backwards?"'":"");
}
public static int glice_cost(int R, int C, boolean row_shift, int shift) {
int period=row_shift?C:R;
int normalized_shift=mod(shift,period);
return Math.min(normalized_shift,period-normalized_shift);
}
public static List<Move> glide(int R, int C, boolean row_shift, int coord, int shift) {
int period=row_shift?C:R;
int normalized_shift=mod(shift,period), back_shift=period-normalized_shift;
boolean bkwd=normalized_shift>back_shift;
int reps=Math.min(normalized_shift,back_shift);
List<Move> out=new ArrayList<>();
for (int i=0; i<reps; i++) out.add(new Move(R,C,row_shift,coord,bkwd));
return out;
}
public static List<Move> concat(List<List<Move>> seqs) {
List<Move> out=new ArrayList<>();
for (List<Move> seq:seqs) out.addAll(seq);
return out;
}
public static List<Move> inv(List<Move> mvs) {
List<Move> out=new ArrayList<>();
for (int i=mvs.size()-1; i>=0; i--)
out.add(mvs.get(i).inv());
return out;
}
public static List<Move> conj(List<Move> A, List<Move> B) {
return concat(Arrays.asList(A,B,inv(A)));
}
public static int[] action(int R, int C, List<Move> mvs) {
for (Move mv:mvs) if (mv.R!=R || mv.C!=C) throw new RuntimeException();
int[] out=range(R*C);
for (Move mv:mvs) out=prod(out,mv.action());
return out;
}
}
public static String displayRegion(int R, int C, int[] pcs) {
boolean[] board=new boolean[R*C];
for (int pc:pcs) board[pc]=true;
StringBuilder s=new StringBuilder();
for (int r=0; r<R; r++) {
if (r>0) s.append("\n");
for (int c=0; c<C; c++)
s.append(board[r*C+c]?"#":".");
}
return s.toString();
}
public static String displayScramble(int R, int C, int[] pcs, int[] locs) {
if (pcs.length!=locs.length) throw new RuntimeException();
System.out.println(Arrays.toString(pcs)+"-->"+Arrays.toString(locs));
final int BLANK=-1;
int[] board=new int[R*C]; Arrays.fill(board,BLANK);
for (int i=0; i<pcs.length; i++)
board[locs[i]]=pcs[i];
boolean alphaMode=R*C<=26;
int CHARS_PER_CELL=alphaMode?1:(1+(R*C+"").length());
String CELL_FORMAT="%"+CHARS_PER_CELL+"s";
StringBuilder s=new StringBuilder();
for (int r=0; r<R; r++) {
if (r>0) s.append("\n");
for (int c=0; c<C; c++) {
int pc=board[r*C+c];
s.append(
String.format(CELL_FORMAT,
pc==BLANK? ".": alphaMode? (""+(char)('A'+pc)): (pc+1)
)
);
}
}
return s.toString();
}
//bijection {K-length lists of numbers in [0,N)} <--> [0,(N choose K)*K!)
//must have (N choose K)*K! < Integer.MAX_VALUE for these methods to work properly
private static final long perm2code(int N, int[] P) {
//transform list L=[0,...,N-1] to [....]|P using swaps (i,J_i) for i=N-1...N-K;
// then encode [J_{N-1},...J_{N-K}] as a number using mixed-radix valuation
if (!allInRange(P,N)) throw new RuntimeException();
int[] L=range(N), locInL=range(N);
int K=P.length;
long out=0, pow=1;
for (int i=N-1, pi=K-1; i>=N-K; i--, pi--) {
int j=locInL[P[pi]];
int Li=L[i], Lj=L[j];
if (Lj!=P[pi]) throw new RuntimeException();
L[i]=Lj; L[j]=Li;
locInL[Li]=j; locInL[Lj]=i;
out+=j*pow;
pow*=(i+1);
}
return out;
}
private static final int[] code2perm(int N, int K, long code) {
int[] L=range(N);
for (int i=N-1; i>=N-K; i--) {
int j=(int)(code%(i+1));
int Li=L[i], Lj=L[j];
L[i]=Lj; L[j]=Li;
code/=(i+1);
}
if (code!=0) throw new RuntimeException(""+code);
return Arrays.copyOfRange(L,N-K,N);
}
public static int SSSP(int R, int C, int[] start, int[] end, List<List<Move>> seqs0) {
System.out.printf("%dx%d: %s --> %s%n%s%n-->%n%s%n",
R,C,Arrays.toString(start),Arrays.toString(end),
displayRegion(R,C,start),displayRegion(R,C,end)
);
if (!allInRange(start,R*C) || !allInRange(end,R*C)) throw new RuntimeException();
for (List<Move> seq:seqs0) for (Move mv:seq) if (mv.R!=R || mv.C!=C) throw new RuntimeException();
//process actions
int nActs; List<List<Move>> canonical_seqs; int[][] canonical_acts; int[] canonical_costs; {
int[] ID_ACT=range(R*C);
Map<String,List<Move>> act2seq=new HashMap<>();
for (boolean inv:new boolean[] {false,true}) //include both actions and their inverses
for (List<Move> seq0:seqs0) {
List<Move> seq=inv?Move.inv(seq0):seq0;
int[] act=Move.action(R,C,seq);
//every action we use must preserve every element in the start array
// and not be equal to the identity (do-nothing) action
if (Arrays.equals(prod(act,start),start) && !Arrays.equals(act,ID_ACT)) {
String act_s=Arrays.toString(act);
if (!act2seq.containsKey(act_s)
|| seq.size()<act2seq.get(act_s).size())
act2seq.put(act_s,seq);
}
}
canonical_seqs=new ArrayList<>(); {
List<String> act_ss=new ArrayList<>(act2seq.keySet());
Collections.sort(act_ss);
for (String act_s:act_ss)
canonical_seqs.add(act2seq.get(act_s));
}
System.out.printf("#canonical_seqs=%d%ncanonical_seqs=%s%n",canonical_seqs.size(),canonical_seqs);
nActs=canonical_seqs.size();
canonical_acts=new int[nActs][]; canonical_costs=new int[nActs];
for (int i=0; i<nActs; i++) {
List<Move> seq=canonical_seqs.get(i);
canonical_acts[i]=Move.action(R,C,seq);
canonical_costs[i]=seq.size();
}
for (int[] act:canonical_acts)
if (!Arrays.equals(prod(act,start),start))
throw new RuntimeException();
Map<Integer,Integer> cost_freq=new TreeMap<>();
for (int c:canonical_costs)
cost_freq.put(c,cost_freq.getOrDefault(c,0)+1);
System.out.printf("cost_freq=%s%n",cost_freq);
}
int[][] act_idxs_with_cost; int max_act_cost; {
Map<Integer,Set<Integer>> ais_by_cost=new HashMap<>();
for (int a=0; a<nActs; a++) {
int cost=canonical_costs[a];
if (!ais_by_cost.containsKey(cost)) ais_by_cost.put(cost,new HashSet<>());
ais_by_cost.get(cost).add(a);
}
max_act_cost=0; for (int c:canonical_costs) max_act_cost=Math.max(max_act_cost,c);
act_idxs_with_cost=new int[max_act_cost+1][];
for (int c:ais_by_cost.keySet())
act_idxs_with_cost[c]=set2sortedArr(ais_by_cost.get(c));
if (act_idxs_with_cost[0]!=null)
throw new RuntimeException();
for (int c=0; c<=max_act_cost; c++)
if (act_idxs_with_cost[c]!=null)
for (int a:act_idxs_with_cost[c])
if (canonical_costs[a]!=c) throw new RuntimeException();
}
//dijkstra
int N=R*C;
int[] ri2loc, loc2ri; {
int[][] fromto=fromto_idx(difference(set(range(N)),set(start)),N);
ri2loc=fromto[0]; loc2ri=fromto[1];
System.out.printf("ri2loc=%s loc2ri=%s%n",Arrays.toString(ri2loc),Arrays.toString(loc2ri));
}
class Config2Code {
public final int nRem=N-start.length, nBridge=end.length-start.length;
public long config2code(int[] config) {
if (config.length!=nBridge) throw new RuntimeException();
return perm2code(nRem,prod(loc2ri,config));
}
public int[] code2config(long code) {
return prod(ri2loc,code2perm(nRem,nBridge,code));
}
} Config2Code $=new Config2Code();
//assert that set(end) is a strict superset of set(start)
if (difference(set(start),set(end)).size()!=0 || end.length<=start.length) throw new RuntimeException();
int[] bridge=set2sortedArr(difference(set(end),set(start)));
System.out.printf("bridge=%s%n",Arrays.toString(bridge));
long nconfigs=1; for (int i=N-start.length; i>N-end.length; i--) nconfigs*=i;
System.out.printf("nconfigs=%d%n",nconfigs);
if (nconfigs>=(1L<<40)) throw new RuntimeException();
final int INVALID_DIST=-1;
BigByteArray dists=new BigByteArray(nconfigs,INVALID_DIST);
dists.set($.config2code(bridge),0);
System.out.println("dist=0 size=1");
long st=System.currentTimeMillis(), mark=0;
for (int dist=1;; dist++) {
if (dist>Byte.MAX_VALUE) throw new RuntimeException();
//find all vertices of distance dist from source
boolean have_unreached_nodes=false, have_pending_edges=false;
long out_dp_cost=0, in_dp_cost=0;
for (long code=0; code<nconfigs; code++) {
int d=dists.get(code);
have_unreached_nodes|=(d==INVALID_DIST);
have_pending_edges|=(d!=INVALID_DIST && d+max_act_cost>=dist);
if (d==INVALID_DIST)
in_dp_cost+=nActs;
else {
int c=dist-d;
if (c>=0 && c<=max_act_cost && act_idxs_with_cost[c]!=null)
out_dp_cost+=act_idxs_with_cost[c].length;
}
}
if (!have_unreached_nodes || !have_pending_edges) break;
//decide whether to evaluate DP at this dist directly or by expanding from previous layers of DP
System.out.printf("dist=%d\n\tout_dp_cost=%d in_dp_cost=%d%n",dist,out_dp_cost,in_dp_cost);
long work=0;
if (out_dp_cost<=in_dp_cost) {
for (long code=0; code<nconfigs; code++) {
int d=dists.get(code);
if (d!=INVALID_DIST && d<dist) {
if (work%128==0) {
long t=System.currentTimeMillis()-st;
if (t>=mark) {
System.out.printf("\ttime=%d work=%d dist=%d%n",t,work,dist);
while (t>=mark) mark+=mark<100_000?10_000:mark<1000_000?100_000:mark<10000_000?1000_000:10000_000;
}
}
int[] config=$.code2config(code);
int c=dist-d;
if (c>=0 && c<=max_act_cost && act_idxs_with_cost[c]!=null)
for (int a:act_idxs_with_cost[c]) {
long ncode=$.config2code(prod(canonical_acts[a],config));
if (d+canonical_costs[a]!=dist) throw new RuntimeException();
if (dists.get(ncode)==INVALID_DIST)
dists.set(ncode,dist);
work++;
}
}
}
}
else {
for (long code=0; code<nconfigs; code++) {
int d=dists.get(code);
if (d==INVALID_DIST) {
if (work%128==0) {
long t=System.currentTimeMillis()-st;
if (t>=mark) {
System.out.printf("\ttime=%d work=%d dist=%d%n",t,work,dist);
while (t>=mark) mark+=mark<100_000?10_000:mark<1000_000?100_000:mark<10000_000?1000_000:10000_000;
}
}
int[] config=$.code2config(code);
for (int a=0; a<nActs; a++) {
long ocode=$.config2code(prod(canonical_acts[a],config));
int od=dists.get(ocode);
if (od+canonical_costs[a]==dist)
dists.set(code,dist);
work++;
}
}
}
}
System.out.printf("\ttime=%d work=%d dist=%d%n",System.currentTimeMillis()-st,work,dist);
long cnt=0;
for (long code=0; code<nconfigs; code++)
if (dists.get(code)==dist)
cnt++;
System.out.printf("\tdist=%d size=%d t=%d%n",dist,cnt,System.currentTimeMillis()-st);
}
System.out.printf("time=%d%n",System.currentTimeMillis()-st);
long cnt=0;
for (long code=0; code<nconfigs; code++)
if (dists.get(code)!=INVALID_DIST)
cnt++;
if (cnt!=nconfigs)
System.out.printf("WARNING: (# of configs found)=%d != %d=(expected # of configs)%s%n",
cnt,nconfigs,2*cnt==nconfigs?" (parity restriction?)":"");
int diam=0;
Map<Integer,Integer> depth_freq=new TreeMap<>();
for (long code=0; code<nconfigs; code++) {
int d=dists.get(code);
if (d!=INVALID_DIST) {
diam=Math.max(diam,d);
depth_freq.put(d,depth_freq.getOrDefault(d,0)+1);
}
}
System.out.printf("diameter=%d%ndepth_freq=%s%n",diam,depth_freq);
//print an antipode
class Solver {
public List<List<Move>> sol(long code) {
if (dists.get(code)==INVALID_DIST) throw new RuntimeException();
List<List<Move>> out=new ArrayList<>();
while (dists.get(code)>0) {
int[] config=$.code2config(code);
long bcode=-1; List<Move> bseq=null;
for (int m=0; m<nActs; m++) {
long ncode=$.config2code(prod(canonical_acts[m],config));
if (dists.get(ncode)+canonical_costs[m]==dists.get(code)) {
bcode=ncode;
bseq=canonical_seqs.get(m);
break;
}
}
if (bseq==null) throw new RuntimeException();
code=bcode;
out.add(bseq);
}
Collections.reverse(out); //use right-to-left convention (apply rightmost move, then left-most, etc.
//this is so that we match the reading convention within each sequence element of out
return out;
}
} Solver S$=new Solver();
for (long code=0; code<nconfigs; code++)
if (dists.get(code)==diam) {
System.out.printf("sample antipode:%n%s%nsol (right-to-left): %s%n",
displayScramble(R,C,concat(start,bridge),concat(start,$.code2config(code))),
S$.sol(code)
);
break;
}
return diam;
}
public static List<List<Move>> singleMoves(int R, int C) {
List<List<Move>> out=new ArrayList<>();
for (boolean row_shift:new boolean[] {true,false})
for (int coord=0; coord<(row_shift?R:C); coord++)
for (boolean backward:new boolean[] {true,false})
out.add(Collections.singletonList(new Move(R,C,row_shift,coord,backward)));
return out;
}
public static int SSSP(int R, int C, int[] start, int[] end) {
return SSSP(R,C,start,end,singleMoves(R,C));
}
private static List<List<Move>> syllables(int R, int C, boolean row_shift, int max_dist) {
List<List<Move>> out=new ArrayList<>();
class DFS {
private int cnt=row_shift?R:C, period=row_shift?C:R;
private int[] shifts=new int[cnt];
private void dfs(int co, int dist) {
if (co==cnt) {
List<Move> seq=new ArrayList<>();
for (int i=0; i<cnt; i++)
seq.addAll(Move.glide(R,C,row_shift,i,shifts[i]));
out.add(seq);
return;
}
for (int sh=0; sh<period; sh++) {
int ndist=dist+Move.glice_cost(R,C,row_shift,sh);
if (ndist<=max_dist) {
shifts[co]=sh;
dfs(co+1,ndist);
}
}
}
} new DFS().dfs(0,0);
return out;
}
public static List<List<Move>> syllableConjugations(int R, int C, int[] region, int conj_dist, int mid_dist) {
//A*B*A^{-1}, where A and B are syllables (products of glides that all are aligned along the same dimension),
// and A and B are aligned in opposite dimensions
//require A to be <=conj_dist moves, and B to be <=mid_dist moves
List<List<Move>> out=new ArrayList<>();
for (boolean conj_is_row:new boolean[] {false,true})
for (List<Move> conj:syllables(R,C,conj_is_row,conj_dist))
if (!Arrays.equals(region,prod(Move.action(R,C,conj),region))) //require A to disrupt region
for (List<Move> mid:syllables(R,C,!conj_is_row,mid_dist))
out.add(Move.conj(conj,mid));
return out;
}
public static void main(String[] args) {
class RegionHelp {
public int[] blockRegion(int R, int C, int[] rs, int[] cs) {
if (!allInRange(rs,R) || !allInRange(cs,C)) throw new RuntimeException();
Set<Integer> S=new HashSet<>();
for (int r:rs) for (int c:cs) S.add(r*C+c);
return set2sortedArr(S);
}
public int[] blockRegion(int R, int C, int[] rs) {
return blockRegion(R,C,rs,rs);
}
public int[] all(int R, int C) {
return blockRegion(R,C,range(R),range(C));
}
} RegionHelp $=new RegionHelp();
int R=6, C=6;
int[] S0=$.blockRegion(R,C,range(3)), S1=$.blockRegion(R,C,range(4));
List<List<Move>> mvs=singleMoves(R,C);
mvs.addAll(syllableConjugations(R,C,S0,2,2));
SSSP(R,C,S0,S1,mvs);
}
}
% java -Xmx10g src/SSSP.java
6x6: [0, 1, 2, 6, 7, 8, 12, 13, 14] --> [0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21]
###...
###...
###...
......
......
......
-->
####..
####..
####..
####..
......
......
#canonical_seqs=1260
canonical_seqs=[[1R, 3R', 3C, 4C, 3R, 1R'], [1R, 4R', 3C, 4C, 4R, 1R'], [1R, 5R', 3C, 4C, 5R, 1R'], [1R, 3C, 4C, 1R'], [1R, 5R, 3C, 4C, 5R', 1R'], [1R, 4R, 3C, 4C, 4R', 1R'], [1R, 3R, 3C, 4C, 3R', 1R'], [0R', 2R', 4C, 5C, 2R, 0R], [1R, 2R, 3C, 4C, 2R', 1R'], [0R', 3R', 4C, 5C, 3R, 0R], [0R', 4R', 4C, 5C, 4R, 0R], [0R', 5R', 4C, 5C, 5R, 0R], [0R', 4C, 5C, 0R], [0R', 5R, 4C, 5C, 5R', 0R], [0R', 4R, 4C, 5C, 4R', 0R], [0R', 3R, 4C, 5C, 3R', 0R], [0R', 5R, 4C, 5C', 5R', 0R], [1R, 5R', 3C, 4C', 5R, 1R'], [1R, 3R', 3C, 4C', 3R, 1R'], [1R, 4R', 3C, 4C', 4R, 1R'], [1R, 3C, 4C', 1R'], [1R, 4R, 3C, 4C', 4R', 1R'], [1R, 3R, 3C, 4C', 3R', 1R'], [1R, 2R, 3C, 4C', 2R', 1R'], [0R', 5R', 4C, 5C', 5R, 0R], [1R, 5R, 3C, 4C', 5R', 1R'], [0R', 2R', 4C, 5C', 2R, 0R], [0R', 3R', 4C, 5C', 3R, 0R], [0R', 4R', 4C, 5C', 4R, 0R], [0R', 4C, 5C', 0R], [0R', 4R, 4C, 5C', 4R', 0R], [0R', 3R, 4C, 5C', 3R', 0R], [1R, 3R', 3C, 3R, 1R'], [1R, 4R', 3C, 4R, 1R'], [1R, 5R', 3C, 5R, 1R'], [1R, 3C, 1R'], [1R, 5R, 3C, 5R', 1R'], [1R, 4R, 3C, 4R', 1R'], [1R, 3R, 3C, 3R', 1R'], [0R', 2R', 4C, 2R, 0R], [1R, 2R, 3C, 2R', 1R'], [0R', 3R', 4C, 3R, 0R], [0R', 4R', 4C, 4R, 0R], [0R', 5R', 4C, 5R, 0R], [0R', 4C, 0R], [0R', 5R, 4C, 5R', 0R], [0R', 4R, 4C, 4R', 0R], [0R', 3R, 4C, 3R', 0R], [0R', 2R, 4C, 2R', 0R], [1R, 1R, 3C, 1R', 1R'], [0R', 1R, 4C, 1R', 0R], [0R', 0R', 5C, 0R, 0R], [1R, 1R, 3C, 3C, 1R', 1R'], [1R, 3R', 3C, 3C, 3R, 1R'], [1R, 4R', 3C, 3C, 4R, 1R'], [1R, 5R', 3C, 3C, 5R, 1R'], [1R, 3C, 3C, 1R'], [1R, 5R, 3C, 3C, 5R', 1R'], [1R, 4R, 3C, 3C, 4R', 1R'], [1R, 3R, 3C, 3C, 3R', 1R'], [0R', 2R', 4C, 4C, 2R, 0R], [2R, 3R', 3C, 3C, 3R, 2R'], [2R, 4R', 3C, 3C, 4R, 2R'], [2R, 5R', 3C, 3C, 5R, 2R'], [2R, 3C, 3C, 2R'], [2R, 5R, 3C, 3C, 5R', 2R'], [2R, 4R, 3C, 3C, 4R', 2R'], [2R, 3R, 3C, 3C, 3R', 2R'], [0R', 1R', 4C, 4C, 1R, 0R], [0R', 1R, 4C, 4C, 1R', 0R], [1R, 2R, 3C, 3C, 2R', 1R'], [0R', 3R', 4C, 4C, 3R, 0R], [0R', 4R', 4C, 4C, 4R, 0R], [0R', 5R', 4C, 4C, 5R, 0R], [0R', 4C, 4C, 0R], [0R', 5R, 4C, 4C, 5R', 0R], [0R', 4R, 4C, 4C, 4R', 0R], [0R', 3R, 4C, 4C, 3R', 0R], [2R, 2R, 3C, 3C, 2R', 2R'], [0R', 0R', 5C, 5C, 0R, 0R], [0R', 2R, 4C, 4C, 2R', 0R], [1C', 3C, 5R', 5R', 3C', 1C], [2R, 4R', 3C', 3C', 4R, 2R'], [2C', 3C, 5R', 3C', 2C], [2C', 3C, 4R', 5R', 3C', 2C], [2C', 3C, 4R, 5R', 3C', 2C], [1R, 4R', 3C', 3C', 4R, 1R'], [2R, 5R', 3C', 3C', 5R, 2R'], [2R, 2R, 3C', 3C', 2R', 2R'], [2R, 3R, 3C', 3C', 3R', 2R'], [2R, 3C', 3C', 2R'], [2R, 3R', 3C', 3C', 3R, 2R'], [2R, 5R, 3C', 3C', 5R', 2R'], [1R, 1R, 3C', 3C', 1R', 1R'], [1R, 5R', 3C', 3C', 5R, 1R'], [1R, 2R, 3C', 3C', 2R', 1R'], [1R, 3R', 3C', 3C', 3R, 1R'], [1R, 3C', 3C', 1R'], [1R, 3R, 3C', 3C', 3R', 1R'], [0R', 4R', 4C', 4C', 4R, 0R], [1R, 5R, 3C', 3C', 5R', 1R'], [2R, 4R, 3C', 3C', 4R', 2R'], [0R', 1R', 4C', 4C', 1R, 0R], [0R', 1R, 4C', 4C', 1R', 0R], [0R', 5R', 4C', 4C', 5R, 0R], [1R, 4R, 3C', 3C', 4R', 1R'], [0R', 2R, 4C', 4C', 2R', 0R], [0R', 3R', 4C', 4C', 3R, 0R], [0R', 4C', 4C', 0R], [0R', 3R, 4C', 4C', 3R', 0R], [0R', 2R', 4C', 4C', 2R, 0R], [0R', 5R, 4C', 4C', 5R', 0R], [0R', 0R', 5C', 5C', 0R, 0R], [0R', 4R, 4C', 4C', 4R', 0R], [0R, 1R, 3C, 4C, 1R', 0R'], [2R', 3R', 4C, 5C, 3R, 2R], [2R', 4R', 4C, 5C, 4R, 2R], [2R', 5R', 4C, 5C, 5R, 2R], [2R', 4C, 5C, 2R], [2R', 5R, 4C, 5C, 5R', 2R], [2R', 4R, 4C, 5C, 4R', 2R], [2R', 3R, 4C, 5C, 3R', 2R], [2R', 5R, 4C, 5C', 5R', 2R], [0R, 1R, 3C, 4C', 1R', 0R'], [2R', 5R', 4C, 5C', 5R, 2R], [2R', 3R', 4C, 5C', 3R, 2R], [2R', 4R', 4C, 5C', 4R, 2R], [2R', 4C, 5C', 2R], [2R', 4R, 4C, 5C', 4R', 2R], [2R', 3R, 4C, 5C', 3R', 2R], [0R, 1R, 3C, 1R', 0R'], [2R', 3R', 4C, 3R, 2R], [2R', 4R', 4C, 4R, 2R], [2R', 5R', 4C, 5R, 2R], [2R', 4C, 2R], [2R', 5R, 4C, 5R', 2R], [2R', 4R, 4C, 4R', 2R], [2R', 3R, 4C, 3R', 2R], [4C], [2R, 3R', 4C, 3R, 2R'], [2R, 4R', 4C, 4R, 2R'], [2R, 5R', 4C, 5R, 2R'], [2R, 4C, 2R'], [2R, 5R, 4C, 5R', 2R'], [2R, 4R, 4C, 4R', 2R'], [2R, 3R, 4C, 3R', 2R'], [0R', 1R', 5C, 1R, 0R], [1R, 2R', 4C, 2R, 1R'], [1R, 3R', 4C, 3R, 1R'], [1R, 4R', 4C, 4R, 1R'], [1R, 5R', 4C, 5R, 1R'], [1R, 4C, 1R'], [1R, 5R, 4C, 5R', 1R'], [1R, 4R, 4C, 4R', 1R'], [1R, 3R, 4C, 3R', 1R'], [0R', 2R', 5C, 2R, 0R], [0R', 3R, 5C, 3R', 0R], [1R, 2R, 4C, 2R', 1R'], [0R', 3R', 5C, 3R, 0R], [0R', 4R, 5C, 4R', 0R], [0R', 4R', 5C, 4R, 0R], [0R', 5R, 5C, 5R', 0R], [0R', 5R', 5C, 5R, 0R], [0R', 5C, 0R], [0R, 3R', 3C, 3C, 3R, 0R'], [0R, 4R', 3C, 3C, 4R, 0R'], [0R, 5R', 3C, 3C, 5R, 0R'], [0R, 3C, 3C, 0R'], [0R, 5R, 3C, 3C, 5R', 0R'], [0R, 4R, 3C, 3C, 4R', 0R'], [0R, 3R, 3C, 3C, 3R', 0R'], [1R', 2R', 4C, 4C, 2R, 1R], [1R, 2R', 4C, 4C, 2R, 1R'], [0R, 1R, 3C, 3C, 1R', 0R'], [2R', 3R', 4C, 4C, 3R, 2R], [2R', 4R', 4C, 4C, 4R, 2R], [2R', 5R', 4C, 4C, 5R, 2R], [2R', 4C, 4C, 2R], [2R', 5R, 4C, 4C, 5R', 2R], [2R', 4R, 4C, 4C, 4R', 2R], [2R', 3R, 4C, 4C, 3R', 2R], [0R, 2R, 3C, 3C, 2R', 0R'], [1R', 3R', 4C, 4C, 3R, 1R], [1R', 4R', 4C, 4C, 4R, 1R], [1R', 5R', 4C, 4C, 5R, 1R], [1R', 4C, 4C, 1R], [1R', 5R, 4C, 4C, 5R', 1R], [1R', 4R, 4C, 4C, 4R', 1R], [1R', 3R, 4C, 4C, 3R', 1R], [1R, 3R', 4C, 4C, 3R, 1R'], [1R, 4R', 4C, 4C, 4R, 1R'], [1R, 5R', 4C, 4C, 5R, 1R'], [1R, 4C, 4C, 1R'], [1R, 5R, 4C, 4C, 5R', 1R'], [1R, 4R, 4C, 4C, 4R', 1R'], [1R, 3R, 4C, 4C, 3R', 1R'], [0R', 2R', 5C, 5C, 2R, 0R], [1R', 2R, 4C, 4C, 2R', 1R], [0R', 3R, 5C, 5C, 3R', 0R], [1R, 2R, 4C, 4C, 2R', 1R'], [0R', 3R', 5C, 5C, 3R, 0R], [0R', 4R, 5C, 5C, 4R', 0R], [0R', 4R', 5C, 5C, 4R, 0R], [0R', 5R, 5C, 5C, 5R', 0R], [0R', 5R', 5C, 5C, 5R, 0R], [0R', 5C, 5C, 0R], [2R, 3R', 4C, 4C, 3R, 2R'], [2R, 4R', 4C, 4C, 4R, 2R'], [2R, 5R', 4C, 4C, 5R, 2R'], [2R, 4C, 4C, 2R'], [2R, 5R, 4C, 4C, 5R', 2R'], [2R, 4R, 4C, 4C, 4R', 2R'], [2R, 3R, 4C, 4C, 3R', 2R'], [0R', 1R', 5C, 5C, 1R, 0R], [0C', 4C, 5R, 5R, 4C', 0C], [0R', 4R, 5C', 5C', 4R', 0R], [0R, 4R', 3C', 3C', 4R, 0R'], [2C', 4C, 5R', 5R', 4C', 2C], [0R, 5R', 3C', 3C', 5R, 0R'], [0R, 2R, 3C', 3C', 2R', 0R'], [0R, 3R, 3C', 3C', 3R', 0R'], [0R, 3C', 3C', 0R'], [0R, 3R', 3C', 3C', 3R, 0R'], [1R', 4R', 4C', 4C', 4R, 1R], [0R, 5R, 3C', 3C', 5R', 0R'], [1R, 4R', 4C', 4C', 4R, 1R'], [0R, 1R, 3C', 3C', 1R', 0R'], [2R, 4R', 4C', 4C', 4R, 2R'], [2R', 4R', 4C', 4C', 4R, 2R], [1R', 5R', 4C', 4C', 5R, 1R], [0R, 4R, 3C', 3C', 4R', 0R'], [1R', 2R, 4C', 4C', 2R', 1R], [1R', 3R, 4C', 4C', 3R', 1R], [1R', 4C', 4C', 1R], [1R', 3R', 4C', 4C', 3R, 1R], [1R', 2R', 4C', 4C', 2R, 1R], [1R', 5R, 4C', 4C', 5R', 1R], [1R, 5R', 4C', 4C', 5R, 1R'], [1R, 2R, 4C', 4C', 2R', 1R'], [1R, 3R', 4C', 4C', 3R, 1R'], [1R, 4C', 4C', 1R'], [1R, 3R, 4C', 4C', 3R', 1R'], [1R, 2R', 4C', 4C', 2R, 1R'], [0R', 4R', 5C', 5C', 4R, 0R], [1R, 5R, 4C', 4C', 5R', 1R'], [2R, 5R', 4C', 4C', 5R, 2R'], [2R', 5R', 4C', 4C', 5R, 2R], [2R, 3R', 4C', 4C', 3R, 2R'], [2R, 4C', 4C', 2R'], [2R, 3R, 4C', 4C', 3R', 2R'], [2R', 3R', 4C', 4C', 3R, 2R], [2R', 4C', 4C', 2R], [2R', 3R, 4C', 4C', 3R', 2R], [2R, 5R, 4C', 4C', 5R', 2R'], [2R', 5R, 4C', 4C', 5R', 2R], [1R', 4R, 4C', 4C', 4R', 1R], [0R', 5R, 5C', 5C', 5R', 0R], [0R', 5R', 5C', 5C', 5R, 0R], [1R, 4R, 4C', 4C', 4R', 1R'], [0R', 3R, 5C', 5C', 3R', 0R], [0R', 3R', 5C', 5C', 3R, 0R], [0R', 5C', 5C', 0R], [0R', 2R', 5C', 5C', 2R, 0R], [2R, 4R, 4C', 4C', 4R', 2R'], [2R', 4R, 4C', 4C', 4R', 2R], [0R', 1R', 5C', 5C', 1R, 0R], [2C', 4C, 5R, 5R, 4C', 2C], [1C', 4C, 5R, 5R, 4C', 1C], [0R', 5R, 5C', 5R', 0R], [0R, 5R', 3C', 4C, 5R, 0R'], [0R, 5R', 3C', 4C', 5R, 0R'], [0R, 5R', 3C', 5R, 0R'], [1C', 4C, 5R', 5R', 4C', 1C], [0C', 4C, 5R', 5R', 4C', 0C], [0R, 3R', 3C', 4C, 3R, 0R'], [0R, 4R', 3C', 4C, 4R, 0R'], [0R, 3C', 4C, 0R'], [0R, 4R, 3C', 4C, 4R', 0R'], [0R, 3R, 3C', 4C, 3R', 0R'], [0R, 2R, 3C', 4C, 2R', 0R'], [1R', 5R', 4C', 5C, 5R, 1R], [0R, 1R, 3C', 4C, 1R', 0R'], [2R', 5R', 4C', 5C, 5R, 2R], [0R, 2R, 3C', 4C', 2R', 0R'], [1R', 5R', 4C', 5C', 5R, 1R], [0R, 3R', 3C', 4C', 3R, 0R'], [0R, 4R', 3C', 4C', 4R, 0R'], [0R, 3C', 4C', 0R'], [0R, 4R, 3C', 4C', 4R', 0R'], [0R, 3R, 3C', 4C', 3R', 0R'], [0R, 1R, 3C', 4C', 1R', 0R'], [2R', 5R', 4C', 5C', 5R, 2R], [0R, 2R, 3C', 2R', 0R'], [1R', 5R', 4C', 5R, 1R], [0R, 3R', 3C', 3R, 0R'], [0R, 4R', 3C', 4R, 0R'], [0R, 3C', 0R'], [0R, 4R, 3C', 4R', 0R'], [0R, 3R, 3C', 3R', 0R'], [2C', 4C, 5R', 4C', 2C], [1C', 4C, 5R', 4C', 1C], [0C', 4C, 5R', 4C', 0C], [2C', 4C, 4R', 5R', 4C', 2C], [2C', 4C, 4R, 5R', 4C', 2C], [1C', 4C, 4R', 5R', 4C', 1C], [1C', 4C, 4R, 5R', 4C', 1C], [0C', 4C, 4R, 5R', 4C', 0C], [0C', 4C, 4R', 5R', 4C', 0C], [1R, 5R', 4C', 5R, 1R'], [0R, 1R, 3C', 1R', 0R'], [2R', 5R', 4C', 5R, 2R], [2R, 5R', 4C', 5R, 2R'], [0R, 5R, 3C', 4C, 5R', 0R'], [1R', 2R', 4C', 5C, 2R, 1R], [1R', 3R, 4C', 5C, 3R', 1R], [1R', 3R', 4C', 5C, 3R, 1R], [1R', 4R, 4C', 5C, 4R', 1R], [1R', 4R', 4C', 5C, 4R, 1R], [1R', 4C', 5C, 1R], [2R', 3R, 4C', 5C, 3R', 2R], [2R', 3R', 4C', 5C, 3R, 2R], [2R', 4R, 4C', 5C, 4R', 2R], [2R', 4R', 4C', 5C, 4R, 2R], [2R', 4C', 5C, 2R], [1R', 3R, 4C', 5C', 3R', 1R], [1R', 3R', 4C', 5C', 3R, 1R], [1R', 4R, 4C', 5C', 4R', 1R], [1R', 4R', 4C', 5C', 4R, 1R], [1R', 4C', 5C', 1R], [0R, 5R, 3C', 4C', 5R', 0R'], [1R', 2R', 4C', 5C', 2R, 1R], [2R', 3R, 4C', 5C', 3R', 2R], [2R', 3R', 4C', 5C', 3R, 2R], [2R', 4R, 4C', 5C', 4R', 2R], [2R', 4R', 4C', 5C', 4R, 2R], [2R', 4C', 5C', 2R], [1R', 2R, 4C', 2R', 1R], [1R', 3R', 4C', 3R, 1R], [1R', 4R', 4C', 4R, 1R], [1R', 4C', 1R], [1R', 4R, 4C', 4R', 1R], [1R', 3R, 4C', 3R', 1R], [0R, 5R, 3C', 5R', 0R'], [1R', 2R', 4C', 2R, 1R], [1R, 2R', 4C', 2R, 1R'], [1R, 3R', 4C', 3R, 1R'], [1R, 4R', 4C', 4R, 1R'], [1R, 4C', 1R'], [1R, 4R, 4C', 4R', 1R'], [1R, 3R, 4C', 3R', 1R'], [1R, 2R, 4C', 2R', 1R'], [0R', 5R', 5C', 5R, 0R], [2R', 3R', 4C', 3R, 2R], [2R', 4R', 4C', 4R, 2R], [2R', 4C', 2R], [2R', 4R, 4C', 4R', 2R], [2R', 3R, 4C', 3R', 2R], [4C'], [2R, 3R', 4C', 3R, 2R'], [2R, 4R', 4C', 4R, 2R'], [2R, 4C', 2R'], [2R, 4R, 4C', 4R', 2R'], [2R, 3R, 4C', 3R', 2R'], [1R', 5R, 4C', 5C, 5R', 1R], [2R', 5R, 4C', 5C, 5R', 2R], [1R', 5R, 4C', 5C', 5R', 1R], [2R', 5R, 4C', 5C', 5R', 2R], [1R', 5R, 4C', 5R', 1R], [2C', 4C, 5R, 4C', 2C], [1C', 4C, 5R, 4C', 1C], [0C', 4C, 5R, 4C', 0C], [2C', 4C, 4R', 5R, 4C', 2C], [2C', 4C, 4R, 5R, 4C', 2C], [1C', 4C, 4R', 5R, 4C', 1C], [1C', 4C, 4R, 5R, 4C', 1C], [0C', 4C, 4R, 5R, 4C', 0C], [0C', 4C, 4R', 5R, 4C', 0C], [1R, 5R, 4C', 5R', 1R'], [0R', 2R', 5C', 2R, 0R], [0R', 3R, 5C', 3R', 0R], [0R', 3R', 5C', 3R, 0R], [0R', 4R, 5C', 4R', 0R], [0R', 4R', 5C', 4R, 0R], [0R', 5C', 0R], [2R', 5R, 4C', 5R', 2R], [2R, 5R, 4C', 5R', 2R'], [0R', 1R', 5C', 1R, 0R], [0R, 2R', 4C, 2R, 0R'], [0R, 3R', 4C, 3R, 0R'], [0R, 4R', 4C, 4R, 0R'], [0R, 5R', 4C, 5R, 0R'], [0R, 4C, 0R'], [0R, 5R, 4C, 5R', 0R'], [0R, 4R, 4C, 4R', 0R'], [0R, 3R, 4C, 3R', 0R'], [1R', 2R', 5C, 2R, 1R], [1R', 3R, 5C, 3R', 1R], [0R, 2R, 4C, 2R', 0R'], [1R', 3R', 5C, 3R, 1R], [1R', 4R, 5C, 4R', 1R], [1R', 4R', 5C, 4R, 1R], [1R', 5R, 5C, 5R', 1R], [1R', 5R', 5C, 5R, 1R], [1R', 5C, 1R], [2R', 2R', 5C, 2R, 2R], [2R', 3R, 5C, 3R', 2R], [0R, 1R, 4C, 1R', 0R'], [2R', 3R', 5C, 3R, 2R], [2R', 4R, 5C, 4R', 2R], [2R', 4R', 5C, 4R, 2R], [2R', 5R, 5C, 5R', 2R], [2R', 5R', 5C, 5R, 2R], [2R', 5C, 2R], [5C], [0R, 0R, 3C, 3C, 0R', 0R'], [2R', 2R', 5C, 5C, 2R, 2R], [0R, 2R', 4C, 4C, 2R, 0R'], [0R, 1R', 4C, 4C, 1R, 0R'], [2R', 3R, 5C, 5C, 3R', 2R], [0R, 1R, 4C, 4C, 1R', 0R'], [2R', 3R', 5C, 5C, 3R, 2R], [2R', 4R, 5C, 5C, 4R', 2R], [2R', 4R', 5C, 5C, 4R, 2R], [2R', 5R, 5C, 5C, 5R', 2R], [2R', 5R', 5C, 5C, 5R, 2R], [2R', 5C, 5C, 2R], [0R, 3R', 4C, 4C, 3R, 0R'], [0R, 4R', 4C, 4C, 4R, 0R'], [0R, 5R', 4C, 4C, 5R, 0R'], [0R, 4C, 4C, 0R'], [0R, 5R, 4C, 4C, 5R', 0R'], [0R, 4R, 4C, 4C, 4R', 0R'], [0R, 3R, 4C, 4C, 3R', 0R'], [1R', 2R', 5C, 5C, 2R, 1R], [1R', 1R', 5C, 5C, 1R, 1R], [1R', 3R, 5C, 5C, 3R', 1R], [0R, 2R, 4C, 4C, 2R', 0R'], [1R', 3R', 5C, 5C, 3R, 1R], [1R', 4R, 5C, 5C, 4R', 1R], [1R', 4R', 5C, 5C, 4R, 1R], [1R', 5R, 5C, 5C, 5R', 1R], [1R', 5R', 5C, 5C, 5R, 1R], [1R', 5C, 5C, 1R], [0C', 5C, 5R, 5C', 0C], [0C', 5C, 4R, 5R, 5C', 0C], [0C', 5C, 4R', 5R, 5C', 0C], [2R', 4R, 5C', 5C', 4R', 2R], [1R', 4R, 5C', 5C', 4R', 1R], [1C', 5C, 5R, 5R, 5C', 1C], [0R, 0R, 3C', 3C', 0R', 0R'], [0R, 4R', 4C', 4C', 4R, 0R'], [0R, 1R', 4C', 4C', 1R, 0R'], [0R, 1R, 4C', 4C', 1R', 0R'], [2R', 4R', 5C', 5C', 4R, 2R], [0R, 5R', 4C', 4C', 5R, 0R'], [0R, 2R, 4C', 4C', 2R', 0R'], [0R, 3R', 4C', 4C', 3R, 0R'], [0R, 4C', 4C', 0R'], [0R, 3R, 4C', 4C', 3R', 0R'], [0R, 2R', 4C', 4C', 2R, 0R'], [1R', 4R', 5C', 5C', 4R, 1R], [0R, 5R, 4C', 4C', 5R', 0R'], [1R', 1R', 5C', 5C', 1R, 1R], [2R', 5R, 5C', 5C', 5R', 2R], [2R', 5R', 5C', 5C', 5R, 2R], [2R', 3R, 5C', 5C', 3R', 2R], [2R', 3R', 5C', 5C', 3R, 2R], [2R', 5C', 5C', 2R], [2R', 2R', 5C', 5C', 2R, 2R], [1R', 5R, 5C', 5C', 5R', 1R], [1R', 5R', 5C', 5C', 5R, 1R], [0R, 4R, 4C', 4C', 4R', 0R'], [1R', 3R, 5C', 5C', 3R', 1R], [1R', 3R', 5C', 5C', 3R, 1R], [1R', 5C', 5C', 1R], [1R', 2R', 5C', 5C', 2R, 1R], [2C', 5C, 5R, 5C', 2C], [1C', 5C, 5R, 5C', 1C], [2C', 5C, 4R', 5R, 5C', 2C], [2C', 5C, 4R, 5R, 5C', 2C], [1C', 5C, 4R', 5R, 5C', 1C], [1C', 5C, 4R, 5R, 5C', 1C], [2R', 5R, 5C', 5R', 2R], [1R', 5R, 5C', 5R', 1R], [2C', 5C, 5R, 5R, 5C', 2C], [0C', 5C, 5R, 5R, 5C', 0C], [0R, 0R, 3C', 0R', 0R'], [2C', 5C, 5R', 5R', 5C', 2C], [1C', 5C, 5R', 5R', 5C', 1C], [0C', 5C, 5R', 5R', 5C', 0C], [0R, 5R', 4C', 5R, 0R'], [0R, 1R', 4C', 1R, 0R'], [2C', 5C, 5R', 5C', 2C], [1C', 5C, 5R', 5C', 1C], [0C', 5C, 5R', 5C', 0C], [2C', 5C, 4R', 5R', 5C', 2C], [2C', 5C, 4R, 5R', 5C', 2C], [1C', 5C, 4R', 5R', 5C', 1C], [1C', 5C, 4R, 5R', 5C', 1C], [0C', 5C, 4R, 5R', 5C', 0C], [0C', 5C, 4R', 5R', 5C', 0C], [0R, 1R, 4C', 1R', 0R'], [2R', 5R', 5C', 5R, 2R], [0R, 2R', 4C', 2R, 0R'], [0R, 3R', 4C', 3R, 0R'], [0R, 4R', 4C', 4R, 0R'], [0R, 4C', 0R'], [0R, 4R, 4C', 4R', 0R'], [0R, 3R, 4C', 3R', 0R'], [0R, 2R, 4C', 2R', 0R'], [1R', 5R', 5C', 5R, 1R], [1R', 1R', 5C', 1R, 1R], [2R', 2R', 5C', 2R, 2R], [2R', 3R, 5C', 3R', 2R], [2R', 3R', 5C', 3R, 2R], [2R', 4R, 5C', 4R', 2R], [2R', 4R', 5C', 4R, 2R], [2R', 5C', 2R], [5C'], [0R, 5R, 4C', 5R', 0R'], [1R', 2R', 5C', 2R, 1R], [1R', 3R, 5C', 3R', 1R], [1R', 3R', 5C', 3R, 1R], [1R', 4R, 5C', 4R', 1R], [1R', 4R', 5C', 4R, 1R], [1R', 5C', 1R], [5R], [5R'], [0C, 1C, 4R, 1C', 0C'], [2C', 3C', 5R, 3C, 2C], [2C', 4C', 5R, 5R, 4C, 2C], [0C, 1C, 4R, 4R, 1C', 0C'], [2C', 4C', 5R', 5R', 4C, 2C], [2C', 5R', 5R', 2C], [2C', 5C', 5R', 5R', 5C, 2C], [0C, 1C, 4R', 4R', 1C', 0C'], [2C', 3C', 5R', 5R', 3C, 2C], [0C, 1C, 4R', 1C', 0C'], [2C', 3C', 5R', 3C, 2C], [2C', 5R', 2C], [2C', 5C', 5R', 5C, 2C], [2C', 4C', 5R', 4C, 2C], [2C', 5R, 2C], [2C', 5C', 5R, 5C, 2C], [2C', 4C', 5R, 4C, 2C], [2C', 5R, 5R, 2C], [2C', 5C', 5R, 5R, 5C, 2C], [2C', 3C', 5R, 5R, 3C, 2C], [0C, 4R, 0C'], [0C, 5C, 4R, 5C', 0C'], [0C, 4C, 4R, 4C', 0C'], [1C', 2C', 5R, 2C, 1C], [0C, 3C, 4R, 3C', 0C'], [0C, 2C, 4R, 4R, 2C', 0C'], [1C', 3C', 5R, 5R, 3C, 1C], [0C, 4R, 4R, 0C'], [0C, 5C, 4R, 4R, 5C', 0C'], [0C, 4C, 4R, 4R, 4C', 0C'], [0C, 2C, 4R', 4R', 2C', 0C'], [1C', 5C', 5R', 5R', 5C, 1C], [0C, 4R', 4R', 0C'], [0C, 4C, 4R', 4R', 4C', 0C'], [0C, 3C, 4R', 4R', 3C', 0C'], [0C, 4R', 0C'], [0C, 5C, 4R', 5C', 0C'], [0C, 4C, 4R', 4C', 0C'], [1C', 2C', 5R', 2C, 1C], [0C, 3C, 4R', 3C', 0C'], [1C', 5R', 1C], [1C', 5C', 5R', 5C, 1C], [1C', 4C', 5R', 4C, 1C], [0C, 2C, 4R', 2C', 0C'], [1C', 3C', 5R', 3C, 1C], [1C', 5R, 1C], [1C', 5C', 5R, 5C, 1C], [1C', 4C', 5R, 4C, 1C], [0C, 2C, 4R, 2C', 0C'], [1C', 3C', 5R, 3C, 1C], [1C', 5C', 5R, 5R, 5C, 1C], [1C', 5R, 5R, 1C], [1C', 4C', 5R, 5R, 4C, 1C], [0C, 3C, 4R, 4R, 3C', 0C'], [1C', 2C', 5R, 5R, 2C, 1C], [1C', 3C', 5R', 5R', 3C, 1C], [1C', 5R', 5R', 1C], [1C', 4C', 5R', 5R', 4C, 1C], [0C, 5C, 4R', 4R', 5C', 0C'], [1C', 2C', 5R', 5R', 2C, 1C], [4R], [0C', 1C', 5R, 1C, 0C], [2C, 3C, 4R, 3C', 2C'], [2C, 4R, 2C'], [2C, 5C, 4R, 5C', 2C'], [2C, 4C, 4R, 4C', 2C'], [1C, 3C, 4R, 4R, 3C', 1C'], [1C, 4R, 4R, 1C'], [1C, 5C, 4R, 4R, 5C', 1C'], [0C', 2C', 5R, 5R, 2C, 0C], [1C, 4C, 4R, 4R, 4C', 1C'], [1C, 3C, 4R', 4R', 3C', 1C'], [1C, 4R', 4R', 1C'], [1C, 5C, 4R', 4R', 5C', 1C'], [0C', 4C', 5R', 5R', 4C, 0C], [1C, 2C, 4R', 4R', 2C', 1C'], [2C, 4R', 4R', 2C'], [2C, 3C, 4R', 4R', 3C', 2C'], [2C, 5C, 4R', 4R', 5C', 2C'], [4R'], [2C, 3C, 4R', 3C', 2C'], [2C, 4R', 2C'], [2C, 4C, 4R', 4C', 2C'], [0C', 5C', 5R', 5C, 0C], [1C, 2C, 4R', 2C', 1C'], [1C, 4R', 1C'], [1C, 4C, 4R', 4C', 1C'], [1C, 3C, 4R', 3C', 1C'], [0C', 5C', 5R, 5C, 0C], [0C', 5R, 0C], [0C', 4C', 5R, 4C, 0C], [1C, 2C, 4R, 2C', 1C'], [0C', 3C', 5R, 3C, 0C], [1C, 4R, 1C'], [1C, 5C, 4R, 5C', 1C'], [1C, 4C, 4R, 4C', 1C'], [0C', 2C', 5R, 2C, 0C], [1C, 3C, 4R, 3C', 1C'], [0C', 4C', 5R, 5R, 4C, 0C], [0C', 5R, 5R, 0C], [0C', 5C', 5R, 5R, 5C, 0C], [1C, 2C, 4R, 4R, 2C', 1C'], [0C', 3C', 5R, 5R, 3C, 0C], [2C, 4R, 4R, 2C'], [2C, 4C, 4R, 4R, 4C', 2C'], [2C, 5C, 4R, 4R, 5C', 2C'], [2C, 3C, 4R, 4R, 3C', 2C'], [0C', 1C', 5R, 5R, 1C, 0C], [0C', 2C', 5R', 5R', 2C, 0C], [1C, 4C, 4R', 4R', 4C', 1C'], [0C', 5R', 5R', 0C], [0C', 5C', 5R', 5R', 5C, 0C], [0C', 3C', 5R', 5R', 3C, 0C], [2C, 4C, 4R', 4R', 4C', 2C'], [0C', 1C', 5R', 5R', 1C, 0C], [0C', 1C', 5R', 1C, 0C], [2C, 5C, 4R', 5C', 2C'], [0C', 5R', 0C], [0C', 4C', 5R', 4C, 0C], [0C', 3C', 5R', 3C, 0C], [1C, 5C, 4R', 5C', 1C'], [0C', 2C', 5R', 2C, 0C], [2C, 5C', 4R, 5C, 2C'], [1C, 5C', 4R, 5C, 1C'], [0C, 5C', 4R, 4R, 5C, 0C'], [2C, 5C', 4R, 4R, 5C, 2C'], [0C, 5C', 4R', 4R', 5C, 0C'], [2C, 5C', 4R', 4R', 5C, 2C'], [1C, 5C', 4R', 4R', 5C, 1C'], [2C, 5C', 4R', 5C, 2C'], [1C, 5C', 4R', 5C, 1C'], [0C, 5C', 4R', 5C, 0C'], [0C, 5C', 4R, 5C, 0C'], [1C, 5C', 4R, 4R, 5C, 1C'], [1C, 4C', 4R, 4R, 4C, 1C'], [2C, 4C', 4R, 4R, 4C, 2C'], [1C, 4C', 4R', 4R', 4C, 1C'], [0C, 4C', 4R', 4R', 4C, 0C'], [0C, 4C', 4R', 4C, 0C'], [2C, 4C', 4R', 4C, 2C'], [1C, 4C', 4R', 4C, 1C'], [0C, 4C', 4R, 4C, 0C'], [2C, 4C', 4R, 4C, 2C'], [1C, 4C', 4R, 4C, 1C'], [0C, 4C', 4R, 4R, 4C, 0C'], [2C, 4C', 4R', 4R', 4C, 2C'], [0C, 3C', 4R', 4R', 3C, 0C'], [2C, 3C', 4R', 4R', 3C, 2C'], [0C, 3C', 4R', 3C, 0C'], [1C, 3C', 4R', 3C, 1C'], [0C, 3C', 4R, 3C, 0C'], [2C, 3C', 4R, 3C, 2C'], [1C, 3C', 4R, 3C, 1C'], [0C, 3C', 4R, 4R, 3C, 0C'], [1C, 3C', 4R, 4R, 3C, 1C'], [2C, 3C', 4R, 4R, 3C, 2C'], [1C, 3C', 4R', 4R', 3C, 1C'], [2C, 3C', 4R', 3C, 2C'], [0C, 1C, 3R, 1C', 0C'], [0C, 1C, 3R, 4R, 1C', 0C'], [0C, 1C, 3R, 4R', 1C', 0C'], [2C', 3C', 4R, 3C, 2C], [2C', 3C', 4R, 5R, 3C, 2C], [2C', 3C', 4R, 5R', 3C, 2C], [2C', 4C', 4R, 4R, 4C, 2C], [0C, 1C, 3R, 3R, 1C', 0C'], [2C', 4C', 4R', 4R', 4C, 2C], [1C, 2C', 4R', 4R', 2C, 1C'], [2C', 4R', 4R', 2C], [2C', 3C, 4R', 4R', 3C', 2C], [2C', 5C, 4R', 4R', 5C', 2C], [2C', 4C, 4R', 4R', 4C', 2C], [2C', 5C', 4R', 4R', 5C, 2C], [0C, 1C, 3R', 3R', 1C', 0C'], [2C', 3C', 4R', 4R', 3C, 2C], [0C, 1C, 3R', 1C', 0C'], [0C, 1C, 3R', 4R, 1C', 0C'], [0C, 1C, 3R', 4R', 1C', 0C'], [2C', 3C', 4R', 3C, 2C], [2C', 3C', 4R', 5R, 3C, 2C], [2C', 3C', 4R', 5R', 3C, 2C], [0C, 2C', 4R', 2C, 0C'], [2C', 4R', 2C], [2C', 4C, 4R', 4C', 2C], [2C', 3C, 4R', 3C', 2C], [2C', 4R', 5R', 2C], [2C', 4R', 5R, 2C], [2C', 5C, 4R', 5C', 2C], [2C', 5C', 4R', 5C, 2C], [2C', 5C', 4R', 5R', 5C, 2C], [2C', 5C', 4R', 5R, 5C, 2C], [2C', 4C', 4R', 4C, 2C], [2C', 4C', 4R', 5R', 4C, 2C], [2C', 4C', 4R', 5R, 4C, 2C], [0C, 2C', 4R, 2C, 0C'], [2C', 4R, 2C], [2C', 5C, 4R, 5C', 2C], [2C', 4C, 4R, 4C', 2C], [2C', 4R, 5R', 2C], [2C', 4R, 5R, 2C], [1C, 2C', 4R, 2C, 1C'], [2C', 5C', 4R, 5C, 2C], [2C', 5C', 4R, 5R', 5C, 2C], [2C', 5C', 4R, 5R, 5C, 2C], [2C', 4C', 4R, 4C, 2C], [2C', 4C', 4R, 5R', 4C, 2C], [2C', 4C', 4R, 5R, 4C, 2C], [1C, 2C', 4R, 4R, 2C, 1C'], [2C', 4R, 4R, 2C], [2C', 5C, 4R, 4R, 5C', 2C], [2C', 3C, 4R, 4R, 3C', 2C], [0C, 2C', 4R, 4R, 2C, 0C'], [2C', 5C', 4R, 4R, 5C, 2C], [2C', 3C', 4R, 4R, 3C, 2C], [2C', 2C', 5R', 5R', 2C, 2C], [0C, 2C', 4R', 4R', 2C, 0C'], [2C', 2C', 5R', 2C, 2C], [1C, 2C', 4R', 2C, 1C'], [2C', 2C', 5R, 2C, 2C], [2C', 3C, 4R, 3C', 2C], [2C', 4C, 4R, 4R, 4C', 2C], [2C', 2C', 5R, 5R, 2C, 2C], [0C, 3R, 0C'], [0C, 3R, 4R, 0C'], [0C, 3R, 4R', 0C'], [0C, 0C, 3R, 0C', 0C'], [0C, 5C, 3R, 5C', 0C'], [0C, 5C, 3R, 4R, 5C', 0C'], [0C, 5C, 3R, 4R', 5C', 0C'], [0C, 4C, 3R, 4C', 0C'], [0C, 4C, 3R, 4R, 4C', 0C'], [0C, 4C, 3R, 4R', 4C', 0C'], [1C', 2C', 4R, 2C, 1C], [1C', 2C', 4R, 5R, 2C, 1C], [1C', 2C', 4R, 5R', 2C, 1C], [0C, 3C, 3R, 3C', 0C'], [0C, 3C, 3R, 4R, 3C', 0C'], [0C, 3C, 3R, 4R', 3C', 0C'], [0C, 2C, 3R, 3R, 2C', 0C'], [1C', 3C', 4R, 4R, 3C, 1C], [0C, 3R, 3R, 0C'], [0C, 0C, 3R, 3R, 0C', 0C'], [0C, 5C, 3R, 3R, 5C', 0C'], [0C, 4C, 3R, 3R, 4C', 0C'], [0C, 2C, 3R', 3R', 2C', 0C'], [1C', 5C', 4R', 4R', 5C, 1C], [0C, 3R', 3R', 0C'], [0C, 4C, 3R', 3R', 4C', 0C'], [0C, 3C, 3R', 3R', 3C', 0C'], [0C, 0C, 3R', 3R', 0C', 0C'], [0C, 3R', 0C'], [0C, 3R', 4R, 0C'], [0C, 3R', 4R', 0C'], [0C, 5C, 3R', 5C', 0C'], [0C, 5C, 3R', 4R, 5C', 0C'], [0C, 5C, 3R', 4R', 5C', 0C'], [0C, 4C, 3R', 4C', 0C'], [0C, 4C, 3R', 4R, 4C', 0C'], [0C, 4C, 3R', 4R', 4C', 0C'], [1C', 2C', 4R', 2C, 1C], [1C', 2C', 4R', 5R, 2C, 1C], [1C', 2C', 4R', 5R', 2C, 1C], [0C, 3C, 3R', 3C', 0C'], [0C, 3C, 3R', 4R, 3C', 0C'], [0C, 3C, 3R', 4R', 3C', 0C'], [1C', 4R', 1C], [1C', 4C, 4R', 4C', 1C], [1C', 3C, 4R', 3C', 1C], [1C', 2C, 4R', 2C', 1C], [1C', 4R', 5R', 1C], [1C', 4R', 5R, 1C], [1C', 5C, 4R', 5C', 1C], [1C', 5C', 4R', 5C, 1C], [1C', 5C', 4R', 5R', 5C, 1C], [1C', 5C', 4R', 5R, 5C, 1C], [1C', 4C', 4R', 4C, 1C], [1C', 4C', 4R', 5R', 4C, 1C], [1C', 4C', 4R', 5R, 4C, 1C], [0C, 2C, 3R', 2C', 0C'], [0C, 2C, 3R', 4R', 2C', 0C'], [0C, 2C, 3R', 4R, 2C', 0C'], [1C', 3C', 4R', 3C, 1C], [1C', 3C', 4R', 5R', 3C, 1C], [1C', 3C', 4R', 5R, 3C, 1C], [1C', 4R, 1C], [1C', 5C, 4R, 5C', 1C], [1C', 4C, 4R, 4C', 1C], [1C', 3C, 4R, 3C', 1C], [1C', 4R, 5R', 1C], [1C', 4R, 5R, 1C], [0C, 1C', 4R, 1C, 0C'], [1C', 5C', 4R, 5C, 1C], [1C', 5C', 4R, 5R', 5C, 1C], [1C', 5C', 4R, 5R, 5C, 1C], [1C', 4C', 4R, 4C, 1C], [1C', 4C', 4R, 5R', 4C, 1C], [1C', 4C', 4R, 5R, 4C, 1C], [0C, 2C, 3R, 2C', 0C'], [0C, 2C, 3R, 4R', 2C', 0C'], [0C, 2C, 3R, 4R, 2C', 0C'], [1C', 3C', 4R, 3C, 1C], [1C', 3C', 4R, 5R', 3C, 1C], [1C', 3C', 4R, 5R, 3C, 1C], [1C', 5C', 4R, 4R, 5C, 1C], [0C, 1C', 4R, 4R, 1C, 0C'], [1C', 4R, 4R, 1C], [1C', 5C, 4R, 4R, 5C', 1C], [1C', 4C, 4R, 4R, 4C', 1C], [1C', 2C, 4R, 4R, 2C', 1C], [1C', 4C', 4R, 4R, 4C, 1C], [0C, 3C, 3R, 3R, 3C', 0C'], [1C', 2C', 4R, 4R, 2C, 1C], [1C', 3C', 4R', 4R', 3C, 1C], [0C, 1C', 4R', 4R', 1C, 0C'], [1C', 4R', 4R', 1C], [1C', 3C, 4R', 4R', 3C', 1C], [1C', 2C, 4R', 4R', 2C', 1C], [1C', 4C, 4R', 4R', 4C', 1C], [1C', 4C', 4R', 4R', 4C, 1C], [0C, 5C, 3R', 3R', 5C', 0C'], [1C', 2C', 4R', 4R', 2C, 1C], [0C, 0C, 3R', 0C', 0C'], [0C, 1C', 4R', 1C, 0C'], [1C', 1C', 5R', 1C, 1C], [1C', 2C, 4R, 2C', 1C], [1C', 1C', 5R, 1C, 1C], [1C', 1C', 5R, 5R, 1C, 1C], [1C', 3C, 4R, 4R, 3C', 1C], [1C', 1C', 5R', 5R', 1C, 1C], [1C', 5C, 4R', 4R', 5C', 1C], [3R], [0C', 1C', 4R, 1C, 0C], [0C', 1C', 4R, 5R, 1C, 0C], [0C', 1C', 4R, 5R', 1C, 0C], [2C, 3C, 3R, 3C', 2C'], [2C, 3C, 3R, 4R, 3C', 2C'], [2C, 3C, 3R, 4R', 3C', 2C'], [2C, 3R, 2C'], [2C, 3R, 4R, 2C'], [2C, 3R, 4R', 2C'], [2C, 5C, 3R, 5C', 2C'], [2C, 5C, 3R, 4R, 5C', 2C'], [2C, 5C, 3R, 4R', 5C', 2C'], [2C, 4C, 3R, 4C', 2C'], [2C, 4C, 3R, 4R, 4C', 2C'], [2C, 4C, 3R, 4R', 4C', 2C'], [2C, 2C, 3R, 2C', 2C'], [1C, 3C, 3R, 3R, 3C', 1C'], [1C, 3R, 3R, 1C'], [1C, 1C, 3R, 3R, 1C', 1C'], [1C, 5C, 3R, 3R, 5C', 1C'], [0C', 2C', 4R, 4R, 2C, 0C], [1C, 4C, 3R, 3R, 4C', 1C'], [1C, 3C, 3R', 3R', 3C', 1C'], [1C, 3R', 3R', 1C'], [1C, 5C, 3R', 3R', 5C', 1C'], [1C, 1C, 3R', 3R', 1C', 1C'], [0C', 4C', 4R', 4R', 4C, 0C], [1C, 2C, 3R', 3R', 2C', 1C'], [2C, 3R', 3R', 2C'], [2C, 2C, 3R', 3R', 2C', 2C'], [2C, 3C, 3R', 3R', 3C', 2C'], [2C, 5C, 3R', 3R', 5C', 2C'], [3R'], [2C, 3C, 3R', 3C', 2C'], [2C, 3C, 3R', 4R, 3C', 2C'], [2C, 3C, 3R', 4R', 3C', 2C'], [2C, 3R', 2C'], [2C, 3R', 4R, 2C'], [2C, 3R', 4R', 2C'], [2C, 4C, 3R', 4C', 2C'], [2C, 4C, 3R', 4R, 4C', 2C'], [2C, 4C, 3R', 4R', 4C', 2C'], [2C, 2C, 3R', 2C', 2C'], [0C', 5C', 4R', 5C, 0C], [0C', 5C', 4R', 5R', 5C, 0C], [0C', 5C', 4R', 5R, 5C, 0C], [1C, 2C, 3R', 2C', 1C'], [1C, 2C, 3R', 4R', 2C', 1C'], [1C, 2C, 3R', 4R, 2C', 1C'], [1C, 3R', 1C'], [1C, 3R', 4R', 1C'], [1C, 3R', 4R, 1C'], [1C, 4C, 3R', 4C', 1C'], [1C, 4C, 3R', 4R', 4C', 1C'], [1C, 4C, 3R', 4R, 4C', 1C'], [1C, 3C, 3R', 3C', 1C'], [1C, 3C, 3R', 4R', 3C', 1C'], [1C, 3C, 3R', 4R, 3C', 1C'], [1C, 1C, 3R', 1C', 1C'], [0C', 5C', 4R, 5C, 0C], [0C', 5C', 4R, 5R', 5C, 0C], [0C', 5C', 4R, 5R, 5C, 0C], [0C', 4R, 0C], [0C', 5C, 4R, 5C', 0C], [0C', 4C, 4R, 4C', 0C], [0C', 3C, 4R, 3C', 0C], [0C', 2C, 4R, 2C', 0C], [0C', 4R, 5R, 0C], [0C', 4R, 5R', 0C], [0C', 4C', 4R, 4C, 0C], [0C', 4C', 4R, 5R, 4C, 0C], [0C', 4C', 4R, 5R', 4C, 0C], [1C, 2C, 3R, 2C', 1C'], [1C, 2C, 3R, 4R', 2C', 1C'], [1C, 2C, 3R, 4R, 2C', 1C'], [0C', 3C', 4R, 3C, 0C], [0C', 3C', 4R, 5R, 3C, 0C], [0C', 3C', 4R, 5R', 3C, 0C], [1C, 3R, 1C'], [1C, 3R, 4R', 1C'], [1C, 3R, 4R, 1C'], [1C, 5C, 3R, 5C', 1C'], [1C, 5C, 3R, 4R, 5C', 1C'], [1C, 5C, 3R, 4R', 5C', 1C'], [1C, 4C, 3R, 4C', 1C'], [1C, 4C, 3R, 4R', 4C', 1C'], [1C, 4C, 3R, 4R, 4C', 1C'], [0C', 2C', 4R, 2C, 0C], [0C', 2C', 4R, 5R, 2C, 0C], [0C', 2C', 4R, 5R', 2C, 0C], [1C, 3C, 3R, 3C', 1C'], [1C, 3C, 3R, 4R', 3C', 1C'], [1C, 3C, 3R, 4R, 3C', 1C'], [0C', 4C', 4R, 4R, 4C, 0C], [0C', 1C, 4R, 4R, 1C', 0C], [0C', 4R, 4R, 0C], [0C', 5C, 4R, 4R, 5C', 0C], [0C', 4C, 4R, 4R, 4C', 0C], [0C', 3C, 4R, 4R, 3C', 0C], [0C', 5C', 4R, 4R, 5C, 0C], [1C, 2C, 3R, 3R, 2C', 1C'], [0C', 3C', 4R, 4R, 3C, 0C], [2C, 3R, 3R, 2C'], [2C, 4C, 3R, 3R, 4C', 2C'], [2C, 5C, 3R, 3R, 5C', 2C'], [2C, 3C, 3R, 3R, 3C', 2C'], [0C', 1C', 4R, 4R, 1C, 0C], [0C', 2C', 4R', 4R', 2C, 0C], [1C, 4C, 3R', 3R', 4C', 1C'], [0C', 1C, 4R', 4R', 1C', 0C], [0C', 4R', 4R', 0C], [0C', 3C, 4R', 4R', 3C', 0C], [0C', 2C, 4R', 4R', 2C', 0C], [0C', 5C, 4R', 4R', 5C', 0C], [0C', 5C', 4R', 4R', 5C, 0C], [0C', 3C', 4R', 4R', 3C, 0C], [2C, 4C, 3R', 3R', 4C', 2C'], [0C', 1C', 4R', 4R', 1C, 0C], [0C', 1C', 4R', 1C, 0C], [0C', 1C', 4R', 5R, 1C, 0C], [0C', 1C', 4R', 5R', 1C, 0C], [2C, 5C, 3R', 5C', 2C'], [2C, 5C, 3R', 4R, 5C', 2C'], [2C, 5C, 3R', 4R', 5C', 2C'], [0C', 4R', 0C], [0C', 4C, 4R', 4C', 0C], [0C', 3C, 4R', 3C', 0C], [0C', 2C, 4R', 2C', 0C], [0C', 1C, 4R', 1C', 0C], [0C', 4R', 5R, 0C], [0C', 4R', 5R', 0C], [0C', 4C', 4R', 4C, 0C], [0C', 4C', 4R', 5R, 4C, 0C], [0C', 4C', 4R', 5R', 4C, 0C], [0C', 3C', 4R', 3C, 0C], [0C', 3C', 4R', 5R, 3C, 0C], [0C', 3C', 4R', 5R', 3C, 0C], [1C, 5C, 3R', 5C', 1C'], [1C, 5C, 3R', 4R, 5C', 1C'], [1C, 5C, 3R', 4R', 5C', 1C'], [0C', 2C', 4R', 2C, 0C], [0C', 2C', 4R', 5R, 2C, 0C], [0C', 2C', 4R', 5R', 2C, 0C], [0C', 0C', 5R, 0C, 0C], [0C', 1C, 4R, 1C', 0C], [1C, 1C, 3R, 1C', 1C'], [0C', 0C', 5R, 5R, 0C, 0C], [0C', 2C, 4R, 4R, 2C', 0C], [2C, 2C, 3R, 3R, 2C', 2C'], [0C', 0C', 5R', 5R', 0C, 0C], [0C', 4C, 4R', 4R', 4C', 0C], [0C', 5C, 4R', 5C', 0C], [0C', 0C', 5R', 0C, 0C], [2C, 5C', 3R, 5C, 2C'], [2C, 5C', 3R, 4R, 5C, 2C'], [2C, 5C', 3R, 4R', 5C, 2C'], [1C, 5C', 3R, 5C, 1C'], [1C, 5C', 3R, 4R, 5C, 1C'], [1C, 5C', 3R, 4R', 5C, 1C'], [0C, 5C', 3R, 3R, 5C, 0C'], [2C, 5C', 3R, 3R, 5C, 2C'], [0C, 5C', 3R', 3R', 5C, 0C'], [2C, 5C', 3R', 3R', 5C, 2C'], [1C, 5C', 3R', 3R', 5C, 1C'], [2C, 5C', 3R', 5C, 2C'], [2C, 5C', 3R', 4R, 5C, 2C'], [2C, 5C', 3R', 4R', 5C, 2C'], [1C, 5C', 3R', 5C, 1C'], [1C, 5C', 3R', 4R, 5C, 1C'], [1C, 5C', 3R', 4R', 5C, 1C'], [0C, 5C', 3R', 5C, 0C'], [0C, 5C', 3R', 4R', 5C, 0C'], [0C, 5C', 3R', 4R, 5C, 0C'], [0C, 5C', 3R, 5C, 0C'], [0C, 5C', 3R, 4R', 5C, 0C'], [0C, 5C', 3R, 4R, 5C, 0C'], [1C, 5C', 3R, 3R, 5C, 1C'], [1C, 4C', 3R, 3R, 4C, 1C'], [2C, 4C', 3R, 3R, 4C, 2C'], [1C, 4C', 3R', 3R', 4C, 1C'], [0C, 4C', 3R', 3R', 4C, 0C'], [0C, 4C', 3R', 4C, 0C'], [0C, 4C', 3R', 4R', 4C, 0C'], [0C, 4C', 3R', 4R, 4C, 0C'], [2C, 4C', 3R', 4C, 2C'], [2C, 4C', 3R', 4R', 4C, 2C'], [2C, 4C', 3R', 4R, 4C, 2C'], [1C, 4C', 3R', 4C, 1C'], [1C, 4C', 3R', 4R', 4C, 1C'], [1C, 4C', 3R', 4R, 4C, 1C'], [0C, 4C', 3R, 4C, 0C'], [0C, 4C', 3R, 4R', 4C, 0C'], [0C, 4C', 3R, 4R, 4C, 0C'], [2C, 4C', 3R, 4C, 2C'], [2C, 4C', 3R, 4R', 4C, 2C'], [2C, 4C', 3R, 4R, 4C, 2C'], [1C, 4C', 3R, 4C, 1C'], [1C, 4C', 3R, 4R', 4C, 1C'], [1C, 4C', 3R, 4R, 4C, 1C'], [0C, 4C', 3R, 3R, 4C, 0C'], [2C, 4C', 3R', 3R', 4C, 2C'], [0C, 3C', 3R', 3R', 3C, 0C'], [2C, 3C', 3R', 3R', 3C, 2C'], [0C, 3C', 3R', 3C, 0C'], [0C, 3C', 3R', 4R', 3C, 0C'], [0C, 3C', 3R', 4R, 3C, 0C'], [1C, 3C', 3R', 3C, 1C'], [1C, 3C', 3R', 4R', 3C, 1C'], [1C, 3C', 3R', 4R, 3C, 1C'], [0C, 3C', 3R, 3C, 0C'], [0C, 3C', 3R, 4R', 3C, 0C'], [0C, 3C', 3R, 4R, 3C, 0C'], [2C, 3C', 3R, 3C, 2C'], [2C, 3C', 3R, 4R, 3C, 2C'], [2C, 3C', 3R, 4R', 3C, 2C'], [1C, 3C', 3R, 3C, 1C'], [1C, 3C', 3R, 4R', 3C, 1C'], [1C, 3C', 3R, 4R, 3C, 1C'], [0C, 3C', 3R, 3R, 3C, 0C'], [1C, 3C', 3R, 3R, 3C, 1C'], [2C, 3C', 3R, 3R, 3C, 2C'], [1C, 3C', 3R', 3R', 3C, 1C'], [2C, 3C', 3R', 3C, 2C'], [2C, 3C', 3R', 4R, 3C, 2C'], [2C, 3C', 3R', 4R', 3C, 2C'], [0R, 0R, 3C, 0R', 0R'], [0R, 1R', 4C, 1R, 0R'], [1R', 1R', 5C, 1R, 1R], [0R, 3R', 3C, 4C, 3R, 0R'], [0R, 4R', 3C, 4C, 4R, 0R'], [0R, 5R', 3C, 4C, 5R, 0R'], [0R, 3C, 4C, 0R'], [0R, 5R, 3C, 4C, 5R', 0R'], [0R, 4R, 3C, 4C, 4R', 0R'], [0R, 3R, 3C, 4C, 3R', 0R'], [1R', 2R', 4C, 5C, 2R, 1R], [0R, 2R, 3C, 4C, 2R', 0R'], [1R', 3R', 4C, 5C, 3R, 1R], [1R', 4R', 4C, 5C, 4R, 1R], [1R', 5R', 4C, 5C, 5R, 1R], [1R', 4C, 5C, 1R], [1R', 5R, 4C, 5C, 5R', 1R], [1R', 4R, 4C, 5C, 4R', 1R], [1R', 3R, 4C, 5C, 3R', 1R], [1R', 5R, 4C, 5C', 5R', 1R], [0R, 5R', 3C, 4C', 5R, 0R'], [0R, 3R', 3C, 4C', 3R, 0R'], [0R, 4R', 3C, 4C', 4R, 0R'], [0R, 3C, 4C', 0R'], [0R, 4R, 3C, 4C', 4R', 0R'], [0R, 3R, 3C, 4C', 3R', 0R'], [0R, 2R, 3C, 4C', 2R', 0R'], [1R', 5R', 4C, 5C', 5R, 1R], [0R, 5R, 3C, 4C', 5R', 0R'], [1R', 2R', 4C, 5C', 2R, 1R], [1R', 3R', 4C, 5C', 3R, 1R], [1R', 4R', 4C, 5C', 4R, 1R], [1R', 4C, 5C', 1R], [1R', 4R, 4C, 5C', 4R', 1R], [1R', 3R, 4C, 5C', 3R', 1R], [0R, 3R', 3C, 3R, 0R'], [0R, 4R', 3C, 4R, 0R'], [0R, 5R', 3C, 5R, 0R'], [0R, 3C, 0R'], [0R, 5R, 3C, 5R', 0R'], [0R, 4R, 3C, 4R', 0R'], [0R, 3R, 3C, 3R', 0R'], [1R', 2R', 4C, 2R, 1R], [0R, 2R, 3C, 2R', 0R'], [1R', 3R', 4C, 3R, 1R], [1R', 4R', 4C, 4R, 1R], [1R', 5R', 4C, 5R, 1R], [1R', 4C, 1R], [1R', 5R, 4C, 5R', 1R], [1R', 4R, 4C, 4R', 1R], [1R', 3R, 4C, 3R', 1R], [1R', 2R, 4C, 2R', 1R], [2C', 3C, 5R', 5R', 3C', 2C], [0C', 3C, 5R', 5R', 3C', 0C], [2R, 5R', 3C', 4C, 5R, 2R'], [1R, 5R', 3C', 4C, 5R, 1R'], [2R, 5R', 3C', 4C', 5R, 2R'], [1R, 5R', 3C', 4C', 5R, 1R'], [2R, 5R', 3C', 5R, 2R'], [1C', 3C, 5R', 3C', 1C], [0C', 3C, 5R', 3C', 0C], [1C', 3C, 4R', 5R', 3C', 1C], [1C', 3C, 4R, 5R', 3C', 1C], [0C', 3C, 4R, 5R', 3C', 0C], [0C', 3C, 4R', 5R', 3C', 0C], [1R, 5R', 3C', 5R, 1R'], [2R, 3R', 3C', 4C, 3R, 2R'], [2R, 4R', 3C', 4C, 4R, 2R'], [2R, 3C', 4C, 2R'], [2R, 4R, 3C', 4C, 4R', 2R'], [2R, 3R, 3C', 4C, 3R', 2R'], [1R, 3R', 3C', 4C, 3R, 1R'], [1R, 4R', 3C', 4C, 4R, 1R'], [1R, 3C', 4C, 1R'], [1R, 4R, 3C', 4C, 4R', 1R'], [1R, 3R, 3C', 4C, 3R', 1R'], [1R, 2R, 3C', 4C, 2R', 1R'], [0R', 5R', 4C', 5C, 5R, 0R], [2R, 3R', 3C', 4C', 3R, 2R'], [2R, 4R', 3C', 4C', 4R, 2R'], [2R, 3C', 4C', 2R'], [2R, 4R, 3C', 4C', 4R', 2R'], [2R, 3R, 3C', 4C', 3R', 2R'], [1R, 3R', 3C', 4C', 3R, 1R'], [1R, 4R', 3C', 4C', 4R, 1R'], [1R, 3C', 4C', 1R'], [1R, 4R, 3C', 4C', 4R', 1R'], [1R, 3R, 3C', 4C', 3R', 1R'], [1R, 2R, 3C', 4C', 2R', 1R'], [0R', 5R', 4C', 5C', 5R, 0R], [2R, 2R, 3C', 2R', 2R'], [2R, 3R', 3C', 3R, 2R'], [2R, 4R', 3C', 4R, 2R'], [2R, 3C', 2R'], [2R, 4R, 3C', 4R', 2R'], [2R, 3R, 3C', 3R', 2R'], [3C'], [1R, 1R, 3C', 1R', 1R'], [1R, 3R', 3C', 3R, 1R'], [1R, 4R', 3C', 4R, 1R'], [1R, 3C', 1R'], [1R, 4R, 3C', 4R', 1R'], [1R, 3R, 3C', 3R', 1R'], [1R, 2R, 3C', 2R', 1R'], [0R', 5R', 4C', 5R, 0R], [2R, 5R, 3C', 4C, 5R', 2R'], [0R', 1R', 4C', 5C, 1R, 0R], [1R, 5R, 3C', 4C, 5R', 1R'], [0R', 2R', 4C', 5C, 2R, 0R], [0R', 3R, 4C', 5C, 3R', 0R], [0R', 3R', 4C', 5C, 3R, 0R], [0R', 4R, 4C', 5C, 4R', 0R], [0R', 4R', 4C', 5C, 4R, 0R], [0R', 4C', 5C, 0R], [2R, 5R, 3C', 4C', 5R', 2R'], [0R', 1R', 4C', 5C', 1R, 0R], [1R, 5R, 3C', 4C', 5R', 1R'], [0R', 2R', 4C', 5C', 2R, 0R], [0R', 3R, 4C', 5C', 3R', 0R], [0R', 3R', 4C', 5C', 3R, 0R], [0R', 4R, 4C', 5C', 4R', 0R], [0R', 4R', 4C', 5C', 4R, 0R], [0R', 4C', 5C', 0R], [2R, 5R, 3C', 5R', 2R'], [0R', 1R', 4C', 1R, 0R], [2C', 3C, 5R, 3C', 2C], [1C', 3C, 5R, 3C', 1C], [0C', 3C, 5R, 3C', 0C], [2C', 3C, 4R', 5R, 3C', 2C], [2C', 3C, 4R, 5R, 3C', 2C], [1C', 3C, 4R', 5R, 3C', 1C], [1C', 3C, 4R, 5R, 3C', 1C], [0C', 3C, 4R, 5R, 3C', 0C], [0C', 3C, 4R', 5R, 3C', 0C], [0R', 1R, 4C', 1R', 0R], [1R, 5R, 3C', 5R', 1R'], [0R', 2R', 4C', 2R, 0R], [0R', 3R', 4C', 3R, 0R], [0R', 4R', 4C', 4R, 0R], [0R', 4C', 0R], [0R', 4R, 4C', 4R', 0R], [0R', 3R, 4C', 3R', 0R], [0R', 2R, 4C', 2R', 0R], [0R', 5R, 4C', 5C, 5R', 0R], [0R', 5R, 4C', 5C', 5R', 0R], [2C', 3C, 5R, 5R, 3C', 2C], [1C', 3C, 5R, 5R, 3C', 1C], [0C', 3C, 5R, 5R, 3C', 0C], [0R', 0R', 5C', 0R, 0R], [0R', 5R, 4C', 5R', 0R], [2R, 3R', 3C, 4C, 3R, 2R'], [2R, 4R', 3C, 4C, 4R, 2R'], [2R, 5R', 3C, 4C, 5R, 2R'], [2R, 3C, 4C, 2R'], [2R, 5R, 3C, 4C, 5R', 2R'], [2R, 4R, 3C, 4C, 4R', 2R'], [2R, 3R, 3C, 4C, 3R', 2R'], [0R', 1R', 4C, 5C, 1R, 0R], [2R, 5R', 3C, 4C', 5R, 2R'], [2R, 3R', 3C, 4C', 3R, 2R'], [2R, 4R', 3C, 4C', 4R, 2R'], [2R, 3C, 4C', 2R'], [2R, 4R, 3C, 4C', 4R', 2R'], [2R, 3R, 3C, 4C', 3R', 2R'], [2R, 5R, 3C, 4C', 5R', 2R'], [0R', 1R', 4C, 5C', 1R, 0R], [3C], [2R, 3R', 3C, 3R, 2R'], [2R, 4R', 3C, 4R, 2R'], [2R, 5R', 3C, 5R, 2R'], [2R, 3C, 2R'], [2R, 5R, 3C, 5R', 2R'], [2R, 4R, 3C, 4R', 2R'], [2R, 3R, 3C, 3R', 2R'], [0R', 1R', 4C, 1R, 0R], [2R, 2R, 3C, 2R', 2R']]
cost_freq={1=12, 3=48, 4=96, 5=384, 6=720}
ri2loc=[3, 4, 5, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35] loc2ri=[-1, -1, -1, 0, 1, 2, -1, -1, -1, 3, 4, 5, -1, -1, -1, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
bridge=[3, 9, 15, 18, 19, 20, 21]
nconfigs=4475671200
dist=0 size=1
dist=1
out_dp_cost=12 in_dp_cost=5639345710740
time=9867 work=0 dist=1
time=20859 work=12 dist=1
dist=1 size=4 t=29337
dist=2
out_dp_cost=48 in_dp_cost=5639345705700
time=39860 work=0 dist=2
time=49694 work=48 dist=2
dist=2 size=20 t=57648
dist=3
out_dp_cost=288 in_dp_cost=5639345680500
time=67511 work=0 dist=3
time=76385 work=288 dist=3
dist=3 size=129 t=84552
dist=4
out_dp_cost=1836 in_dp_cost=5639345517960
time=96964 work=0 dist=4
time=102009 work=1536 dist=4
time=107258 work=1836 dist=4
dist=4 size=754 t=115128
dist=5
out_dp_cost=10776 in_dp_cost=5639344567920
time=136351 work=10776 dist=5
dist=5 size=4038 t=143482
dist=6
out_dp_cost=58824 in_dp_cost=5639339480040
time=162987 work=58824 dist=6
dist=6 size=21094 t=169804
dist=7
out_dp_cost=312264 in_dp_cost=5639312901600
time=190017 work=312264 dist=7
dist=7 size=106159 t=196607
dist=8
out_dp_cost=1604052 in_dp_cost=5639179141260
time=207750 work=0 dist=8
time=218048 work=1604052 dist=8
dist=8 size=510034 t=225099
dist=9
out_dp_cost=7902984 in_dp_cost=5638536498420
time=247854 work=7902984 dist=9
dist=9 size=2319261 t=254817
dist=10
out_dp_cost=37045260 in_dp_cost=5635614229560
time=282728 work=37045260 dist=10
dist=10 size=9859651 t=291117
dist=11
out_dp_cost=163996164 in_dp_cost=5623191069300
time=302025 work=0 dist=11
time=330097 work=163996164 dist=11
dist=11 size=38429865 t=337315
dist=12
out_dp_cost=677398908 in_dp_cost=5574769439400
time=400000 work=403182336 dist=12
time=434763 work=677398908 dist=12
dist=12 size=132335913 t=444427
dist=13
out_dp_cost=2556230796 in_dp_cost=5408026189020
time=500000 work=391334016 dist=13
time=600000 work=1293796608 dist=13
time=700000 work=2098855680 dist=13
time=760416 work=2556230796 dist=13
dist=13 size=378171435 t=771877
dist=14
out_dp_cost=8587037940 in_dp_cost=4931530180920
time=800001 work=88603776 dist=14
time=900000 work=913649280 dist=14
time=1000000 work=1730964864 dist=14
time=1780092 work=8587037940 dist=14
dist=14 size=821654445 t=1793041
dist=15
out_dp_cost=25357218108 in_dp_cost=3896245580220
time=2000000 work=1838127360 dist=15
time=3000000 work=11001480960 dist=15
time=4000000 work=21360769536 dist=15
time=4366074 work=25357218108 dist=15
dist=15 size=1232821035 t=4381385
dist=16
out_dp_cost=67506345828 in_dp_cost=2342891076120
time=5473084 work=5373325824 dist=16
time=6989756 work=5517647616 dist=16
time=7000003 work=5625167232 dist=16
time=8000000 work=16421769984 dist=16
time=9000000 work=28241685120 dist=16
time=10000000 work=39864890112 dist=16
time=12380779 work=67506345828 dist=16
dist=16 size=1152840978 t=12395085
dist=17
out_dp_cost=168064456248 in_dp_cost=890311443840
time=20000000 work=91828374528 dist=17
time=26340433 work=168064456248 dist=17
dist=17 size=574622292 t=26350713
dist=18
out_dp_cost=385449392304 in_dp_cost=166287355920
time=30000001 work=46274296320 dist=18
time=39845457 work=166287355920 dist=18
dist=18 size=124010567 t=39854784
dist=19
out_dp_cost=762974053188 in_dp_cost=10034041500
time=40000004 work=1286651520 dist=19
time=40794619 work=10034041500 dist=19
dist=19 size=7911451 t=40801104
dist=20
out_dp_cost=1203344019156 in_dp_cost=65613240
time=40838597 work=65613240 dist=20
dist=20 size=52074 t=40845058
time=40864908
diameter=20
depth_freq={0=1, 1=4, 2=20, 3=129, 4=754, 5=4038, 6=21094, 7=106159, 8=510034, 9=2319261, 10=9859651, 11=38429865, 12=132335913, 13=378171435, 14=821654445, 15=1232821035, 16=1152840978, 17=574622292, 18=124010567, 19=7911451, 20=52074}
[0, 1, 2, 6, 7, 8, 12, 13, 14, 3, 9, 15, 18, 19, 20, 21]-->[0, 1, 2, 6, 7, 8, 12, 13, 14, 3, 4, 5, 30, 32, 25, 11]
sample antipode:
1 2 3 4 10 16
7 8 9 . . 22
13 14 15 . . .
. . . . . .
. 21 . . . .
19 . 20 . . .
sol (right-to-left): [[3R'], [3R'], [3C'], [5C'], [3R'], [3C'], [5R], [5R], [5C'], [4C'], [4R'], [5C'], [4R'], [5C'], [5R'], [1R, 3C, 3C, 1R'], [4C]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment