-
-
Save coolcomputery/49f9d579e80044824bbc30593bbe8635 to your computer and use it in GitHub Desktop.
6x6 (SSSP DP + syllable conjugations): 3x3->4x4 GN<=20
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
% 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