###################################################################### ##Chomp3Rows: Save this file as Chomp3Rows. To use it, stay in the # ##same directory, get into Maple (by typing: maple ) # ##and then type: read Chomp3Rows : # ##Then follow the instructions given there # ## # ##Written by Doron Zeilberger, Temple University , # #zeilberg@math.temple.edu. # ####################################################################### #Created: June 8, 2000 #This version: June 8, 2000 #Chomp3Rows: A Maple package to study 3-Rowed 2D-Chomp #It accopmpanies Doron Zeilberger's article: #`Three-Rowed Chomp' #Available from http://www.math.temple.edu/~zeilberg/ #Please report bugs to zeilberg@math.temple.edu print(`This is Chomp3Rows`): print(` A Maple package to study and play 3-Rowed 2D-Chomp`): print(`In accopmanies Doron Zeilberger's article `): print(` Three-Rowed-Chomp`): print(`Available from http://www.math.temple.edu/~zeilberg/`): print(``): print(`Created: June 22, 2000.`): print(`This version: Sept. 1, 2000.`): lprint(``): print(`Written by Doron Zeilberger, zeilberg@math.temple.edu`): lprint(``): print(`Please report bugs to zeilberg@math.temple.edu`): lprint(``): print(`The most current version of this package and paper`): print(` are available from`): print(`http://www.math.temple.edu/~zeilberg/`): print(`For a list of the MAIN procedures type: ezra(); , for help with`): print(`a specific procedure, type: ezra(procedure_name);`): print(`For a list of all procedures type: ezra1(); , for help with`): print(`a specific procedure, type: ezra(procedure_name); `): print(``): ezra1:=proc() if args=NULL then print(`Contains the following procedures: CIW, DoesFit, DoesFit1, DoesFit2 `): print(` DoesFit3 , DoesFit4 , GoodMovef `): print(` GuessSym, hag3, hag3a,HakhiKatanLo,HK,Ini,Losers `): print(` NewLosers, PlayChomp `): print(` PlayChompP,PTable,`): print(` F, T115, Winners, WinningMove, WinningMove1, yafe, `): print(``): print(` With help with any of the above, type: ezra(ProcName); `): fi: end: ezra:=proc() if args=NULL then print(`Contains the following procedures: `): print(` GoodMovef, Losers, PlayChomp, PlayChompP `): print(` PTable, T115, Winners, WINNERS, WinningMove, WinningMove1 `): print(``): fi: if nops([args])=1 and op(1,[args])=CheckNegative then print(`CheckNegative(f,x,y): Given a rational function of the form`): print(`P(x,y)+Q(y)/(1-x), checks that all its power-series`): print(`coefficient are non-positive`): fi: if nops([args])=1 and op(1,[args])=CIW then print(`CIW(POS,a,b): Given a position in 3-rowed-Chomp, `): print(`finds the symbolic implied winners (with same number of 3s),`): print(`using the generic`): print(`symbols a, and b for non-negative integers`): fi: if nops([args])=1 and op(1,[args])=DoesFit1 then print(`DoesFit1(CPOS,SPOS,a,b): Given a concrete position, CPOS,`): print(`and a symbolic position, decides whether CPOS is a`): print(`specialization of SPOS`): fi: if nops([args])=1 and op(1,[args])=DoesFit2 then print(`DoesFit2(CPOS,SPOS,a,b): If DoesFit1(CPOS,SPOS,a,b)`): print(`is true `): print(` returns the substition in the succesful case `): fi: if nops([args])=1 and op(1,[args])=DoesFit3 then print(`DoesFit3(SPOS1,SPOS2,a,b): Given an alleged `): print(` symbolic winning position, SPOS1,`): print(` and an alleged symbolic losing position, SPOS2 `): print(` decides whether they intersect `): fi: if nops([args])=1 and op(1,[args])=DoesFit4 then print(`DoesFit4(SetSPOS1,SetSPOS2,a,b): Given a set of alleged `): print(` symbolic winning positions, SetSPOS1,`): print(`and a set of alleged symbolic losing positions, SetSPOS2`): print(`decides whether one of the former intersects one of the latter`): fi: if nops([args])=1 and op(1,[args])=GoodMovef then print(`GoodMovef(POS): using a pre-comuted table `): print(` T115, computed by procedure Losers,`): print(` Employing the straightforward notation`): print(`for a position, POS, [row1,row2,row3], finds`): print(`a good move (in the same notation), if it exists`): print(`otherwise (i.e. if POS is a losing position), returns 0`): print(` row3 must be <= 115 `): fi: if nops([args])=1 and op(1,[args])=GuessSym then print(`GuessSym(resh,a,L): guesses a symbolic form for a sequence`): print(`of triples, from the first few terms in terms`): print(`of a sequence of the form [c3,c2+a,c1]`): print(`where we need at least L terms at the end`): fi: if nops([args])=1 and op(1,[args])=hag3 then print(`hag3(POS,c0,a): makes the number of 3's c0 more`): print(`and number of 2's (if they exist) c0 less, and`): print(`if they don't the number of 1's c0 less`): print(`otherwise just the number of 3's c0 more`): fi: if nops([args])=1 and op(1,[args])=hag3a then print(`hag3a(POS,c0): Like hag3a(POS,c0,a), but to be`): print(`used in Winners rather than in Ini, so it`): print(`keeps track of the behavior of POS[2]`): print(`POS[3] resp.`): fi: if nops([args])=1 and op(1,[args])=HakhiKatanLo then print(`HakhiKatanLo(kv,a,b,k,K): Given a set of symbolic winners`): print(`with the first component (#of 3's) fixed at k, expressed`): print(`in terms of the symbols a, and b denoting generic`): print(`non-negative integers, finds the smalles tripe [k,i,j]`): print(`s.t. 2*i+j is as small as possible, and 2*i+j<=K`): print(`if it can't find anything, it returns 0`): fi: if nops([args])=1 and op(1,[args])=Ini then print(`Ini(T,k,a): given a table where T[i] is the`): print(`set of symbolic losers with POS[1]=i, for`): print(`i=1..k-1 finds`): print(`all the set of symbolic winners with POS[1]=k`): print(`a denotes a generic (symbolic) non-negative`): print(` integers `): fi: if nops([args])=1 and op(1,[args])=Losers then print(`Losers(a,k): The symbolic lists, in terms of`): print(`a table T, such that T[i] is the list of`): print(`symbolic losers with POS[1]=i`): fi: if nops([args])=1 and op(1,[args])=NewLosers then print(`NewLosers(T,a,k) : Knowing the losers for`): print(`3-rowed Chomp with POS[1]1 then RETURN(false): fi: P:=normal((f-Q/(1-x))): if denom(P)<>1 then RETURN(false): fi: P:=expand(P): for i from 0 to degree(Q,y) do if coeff(Q,y,i)>0 then RETURN(false): fi: od: if type(P,`+`) then for i from 1 to nops(P) do P1:=op(i,P): degx:=degree(P1,x): degy:=degree(P1,y): coe1:=coeff(coeff(P1,x,degx),y,degy): if coe1>0 then coe2:=coeff(Q,y,degy): if coe1+coe2>0 then RETURN(false): fi: fi: od: elif (type(P,`*`) or type(P,`^`) or (type(P,integer) and P<>0)) then P1:=P: degx:=degree(P1,x): degy:=degree(P1,y): coe1:=coeff(coeff(P1,x,degx),y,degy): if coe1>0 then coe2:=coeff(Q,y,degy): if coe1+coe2>0 then RETURN(false): fi: fi: elif P=0 then RETURN(true): else RETURN(false): fi: true: end: #CIW(POS,a,b): Given a position in 3-rowed-Chomp, #finds the symbolic implied winners (with same number of 3s), #using the generic #symbols a, and b for non-negative integers CIW:=proc(POS,a,b) local i: if (POS[3]>0) then {[POS[1],POS[2],POS[3]+b+1], seq([POS[1],POS[2]+i,POS[3]-i],i=1..POS[3])}: else if type(POS[2],integer) then {[POS[1],POS[2]+a+1,POS[3]+b], [POS[1],POS[2],POS[3]+b+1]}: else {[POS[1],POS[2]+1,POS[3]+b], [POS[1],POS[2],POS[3]+b+1]} fi: fi: end: #DoesFit(CPOS,SetSPOS,a,b): Given a concrete position, CPOS, #and a set of symbolic positions, SetSPOS, decides whether CPOS is a #specialization of one of the symbolic positions of SetSPOS DoesFit:=proc(CPOS,SetSPOS,a,b) local i: for i from 1 to nops(SetSPOS) do if DoesFit1(CPOS,SetSPOS[i],a,b) then RETURN(true): fi: od: false: end: #DoesFit1(CPOS,SPOS,a,b): Given a concrete position, CPOS, #and a symbolic position, decides whether CPOS is a #specialization of SPOS DoesFit1:=proc(CPOS,APOS,a,b) local eq,i,var,a0,b0: eq:={seq(CPOS[i]-APOS[i],i=1..nops(APOS))}: var:=solve(eq,{a,b}): a0:=subs(var,a):b0:=subs(var,b): if var=NULL then RETURN(false): fi: if type(a0, integer) then if a0<0 then RETURN(false): fi: fi: if type(b0, integer) then if b0<0 then RETURN(false): fi: fi: true: end: #DoesFit2(CPOS,SPOS,a,b): If DoesFit1(CPOS,SPOS,a,b) #is true #returns the substition in the succesful case DoesFit2:=proc(CPOS,APOS,a,b) local eq,i,var,a0,b0: eq:={seq(CPOS[i]-APOS[i],i=1..nops(APOS))}: var:=solve(eq,{a,b}): a0:=subs(var,a):b0:=subs(var,b): if var=NULL then RETURN(false,0): fi: if type(a0, integer) then if a0<0 then RETURN(false,0): fi: fi: if type(b0, integer) then if b0<0 then RETURN(false,0): fi: fi: true,var: end: #DoesFit3(SPOS1,SPOS2,a,b): Given an alleged # symbolic winning position, SPOS1, #and an alleged symbolic losing position, SPOS2 #decides whether they intersect DoesFit3:=proc(SPOS1,SPOS2,a,b) local eq,i,var,a0,b0,ap,ap0: eq:={seq(SPOS1[i]-subs(a=ap,SPOS2[i]),i=1..nops(SPOS1))}: var:=solve(eq,{a,b,ap}): a0:=subs(var,a):b0:=subs(var,b):ap0:=subs(var,ap): if var=NULL then RETURN(false): fi: if type(a0, integer) then if a0<0 then RETURN(false): fi: fi: if type(b0, integer) then if b0<0 then RETURN(false): fi: fi: if type(ap0, integer) then if ap0<0 then RETURN(false): fi: fi: true: end: #DoesFit4(SetSPOS1,SetSPOS2,a,b): Given a set of alleged # symbolic winning positions, SetSPOS1, #and a set of alleged symbolic losing positions, SetSPOS2 #decides whether one of the former intersects one of the latter DoesFit4:=proc(SetSPOS1,SetSPOS2,a,b) local i,j: for i from 1 to nops(SetSPOS1) do for j from 1 to nops(SetSPOS2) do if DoesFit3(SetSPOS1[i],SetSPOS2[j],a,b) then RETURN(true): fi: od: od: false: end: #FindPos(f,K,x,y,k): given a (2,1)-homog polynomial of #degree K in x,y finds the set of positive terms #and attaches a k at the first component FindPos:=proc(f,K,x,y,k) local i,gu: gu:={}: for i from 0 to K do if coeff(coeff(f,x,i),y,K-2*i)>0 then gu:=gu union {[k,i,K-2*i]}: fi: od: gu: end: #GuessSym(resh,a,L): guesses a symbolic form for a sequence #of triples, from the first few terms in terms #of a sequence of the form [c3,c2+a,c1] #where we need at least L terms at the end GuessSym:=proc(resh,a,L) local i: for i from nops(resh) by -1 to 2 while (resh[i][1]= resh[i-1][1] and resh[i][3]= resh[i-1][3] and resh[i][2]-resh[i-1][2]=1) do od: if nops(resh)-i+1>L then RETURN([op(1..i-1,resh),[resh[i][1],a+resh[i][2], resh[i][3]]]): else RETURN(resh): fi: end: #hag3(POS,c0,a): Given a position, POS, in 3-rowed (2D) Chomp #returns the set of positions #obtained by making the number of 3's one more #and number of 2's (if they exist) one less, and #if they don't the number of 1's one less #a and b are the generic symbols used in POS[2] and #POS[3] resp. hag3:=proc(POS,c0,a) local i: if type(POS[2],integer) then if c0<=POS[2] and POS[2]>0 then RETURN({[POS[1]+c0,POS[2]-c0,POS[3]]}): elif POS[2]=0 and c0<=POS[3] then RETURN({seq([POS[1]+c0,i,POS[3]-i-c0],i=0..POS[3]-c0)}): else RETURN({}): fi: fi: if coeff(POS[2],a,0)>=c0 then RETURN({[POS[1]+c0,POS[2]-c0,POS[3]]}): elif coeff(POS[2],a,0)0 then RETURN({[POS[1]+c0,a,POS[3]]}): else RETURN({[POS[1]+c0,POS[2],POS[3]]} union hag3([POS[1],0,POS[3]],c0,a) ): fi: end: #hag3a(POS,c0,a): Given a position, POS, in 3-rowed (2D) Chomp #returns the set of positions #obtained by making the number of 3's one more #and number of 2's (if they exist) one less, and #if they don't the number of 1's one less #a and b are the generic symbols used in POS[2] and #POS[3] resp. hag3a:=proc(POS,c0,a) local i: if type(POS[2],integer) then if c0<=POS[2] and POS[2]>0 then RETURN({[POS[1]+c0,POS[2]-c0,POS[3]]}): elif POS[2]=0 and c0<=POS[3] then RETURN({seq([POS[1]+c0,i,POS[3]-i-c0],i=0..POS[3]-c0)}): else RETURN({}): fi: fi: if coeff(POS[2],a,0)>0 then RETURN({[POS[1]+c0,POS[2]-c0,POS[3]]}): else RETURN({[POS[1]+c0,POS[2]-c0,POS[3]]} union hag3([POS[1],0,POS[3]],c0,a) ): fi: end: #HakhiKatanLo(kv,a,b,k,K): Given a set of symbolic winners #with the first component (#of 3's) fixed at k, expressed #in terms of the symbols a, and b denoting generic #non-negative integers, finds the smalles triple [k,i,j] #s.t. 2*i+j is as small as possible, and 2*i+j<=K #if it can't find anything, it returns 0 HakhiKatanLo:=proc(kv,a,b,k,K) local i,j,A: for A from 0 to K do for i from 0 to A/2 do j:=A-2*i: if not DoesFit([k,i,j],kv,a,b) then RETURN([k,i,j]): fi: od: od: 0: end: #HK(kv,a,b,k): Given a set of symbolic positions #kv, phrased in terms of a and b, and an integer #k for which all first components of kv are equal #to returns the smallest triple that is not in the #support of kv, if it exists, otherwise returns 0 HK:=proc(kv,a,b,k) local f,f1,x,y,t,lu,i,ld: f:=RF(kv,a,b,x,y): f:=normal(subs({x=t^2*x,y=t*y},f)): ld:=ldegree(numer(f),t): for i from ld do f1:=taylor(f,t=0,i+1): lu:=expand(coeff(f1,t,i)): lu:=FindPos(lu,i,x,y,k): if lu<>{} then RETURN(lu): fi: od: end: #Ini(T,k,a): given a table where T[i] is the #set of symbolic losers with POS[1]=i, for #i=1..k-1 finds #all the set of symbolic winners with POS[1]=k #a denotes generic (symbolic) non-negative #integers Ini:=proc(T,k,a) local gu,c0,i,mu: if k=1 then RETURN({[1,a,1],[1,0,0]}): fi: gu:={[k,a,1]}: for c0 from 1 to k-1 do mu:=T[k-c0]: for i from 1 to nops(mu) do gu:=gu union hag3(mu[i],c0,a): od: od: gu: end: #Losers(a,k): The symbolic lists, in terms of #a table T, such that T[i] is the list of #symbolic losers with POS[1]=i for i=1..k Losers:=proc(a,k) local T,i: T:=[]: for i from 1 to k do T:=[op(T),NewLosers(T,a,i)] od: T: end: #LosersC(T1,a,k): Given the list T of losers up #to nops(T), continues it to k LosersC:=proc(T1,a,k) local T,i: if k{} do Losers:=[op(Losers),op(lu)]: n:=nops(Losers): if n>=2 and Losers[n][1]-Losers[n-1][1]=0 and Losers[n][2]-Losers[n-1][2]=1 and Losers[n][3]-Losers[n-1][3]=0 then mua:=[op(1..n-2,Losers),[Losers[n-1][1],Losers[n-1][2]+a,Losers[n-1][3]]]: W:=Ini(T,k,a): for i from 1 to nops(mua) do W:=W union CIW(mua[i],a,b): od: f:=RF(W union convert(mua,set),a,b,x,y): if CheckNegative(f,x,y) and not DoesFit4(Losers,W,a,b) then RETURN(mua): fi: fi: for i from 1 to nops(lu) do Winners:=Winners union CIW(lu[i],a,b): od: f:=RF(Winners union convert(Losers,set),a,b,x,y): if CheckNegative(f,x,y) and not DoesFit4(Losers,Winners,a,b) then RETURN(Losers): fi: lu:=HK(Winners union convert(Losers,set),a,b,k): od: Losers: end: #PTable(k): for k<=115, describes the P positions #in 3-rowed Chomp with positions (gamma,beta,alpha) PTable:=proc(k) local i,T,a: T:=T115(a,k): print(`The following describe the P-positions`): print(`When the number of 3's is i=1,2, ..`,k): print(` ... means that the last entry repeats for ever`): print(`The lists give the number of 1's `): print(`For number of 2's=0,1,2, 3...`) : for i from 1 to min(9,k) do lprint(`i=`,i,` :`, op(yafe(T[i],a))): od: for i from 10 to min(99,k) do lprint(`i=`,i,` :`, op(yafe(T[i],a))): od: for i from 100 to min(115,k) do lprint(`i=`,i,`:`, op(yafe(T[i],a))): od: end: #RF(kv,a,b,x,y): given a set, kv, of symbolic triples where #the second componet features a and the third component #features b, finds the generating function of the complement #in terms of the variables x and y RF:=proc(kv,a,b,x,y) local f,i,gu,mu: f:=1/(1-x)/(1-y): for i from 1 to nops(kv) do gu:=kv[i]: mu:=x^coeff(gu[2],a,0)*y^coeff(gu[3],b,0): if coeff(gu[2],a,1)=1 then mu:=mu/(1-x): fi: if coeff(gu[3],b,1)=1 then mu:=mu/(1-y): fi: f:=f-mu: od: normal(f): end: #Winners(a,b,k,T): The symbolic sets, in terms of #a table S, such that S[i] is the set of #symbolic winners with POS[1]=i in the form [winner,loser] #T is the precomputed list of symbolic losers Winners:=proc(a,b,k,T) local i,i1,j,gu,Gu,mu,U,lu,r,k0: option remember: for i from 1 to k do gu:=T[i]: Gu:={}: for j from 1 to nops(gu) do mu:=gu[j]: lu:=CIW(mu,a,b): for r from 1 to nops(lu) do Gu:=Gu union {[lu[r],mu]}: od: od: for i1 from 1 to i-1 do gu:=T[i1]: for j from 1 to nops(gu) do mu:=gu[j]: lu:=hag3a(mu,i-i1,a): for r from 1 to nops(lu) do if coeff(mu[2],a,1)=1 and coeff(lu[r][2],a,1)=0 then Gu:=Gu union {[lu[r],subs(a=0,mu)]}: else if coeff(lu[r][2],a,1)=1 then k0:=coeff(lu[r][2],a,0): if k0>=0 then k0:=0: fi: Gu:=Gu union {subs(a=a-k0,[lu[r],mu])}: else Gu:=Gu union {[lu[r],mu]}: fi: fi: od: od: od: Gu:=Gu union {[[i,a,1],[i+a,1]]}: if i=1 then Gu:=Gu union {[[1,0,0],[1]]}: fi: U[i]:=Gu: od: U: end: #WINNERS(a,b,k): The symbolic set of Winners, in terms of #a table S, such that S[i] is the set of #symbolic winners with POS[1]=i in the form [winner,loser] #where loser denotes the `right move' #and a and b are generic (symbolic) non-negative integers WINNERS:=proc(a,b,k) Winners(a,b,k,Losers(a,k)) : end: #WinningMove(a,k,T,POS): Given a symbol a, an integer k, #a Losers' list T, where T[i] is the set of symbolic losers #with POS[1]=i, for i=1,..., k, and given a position, POS #finds a winning move, if it exists, otherwise returns 0 WinningMove:=proc(a,k,T,POS) local b, W,POS1,i,gu,mu: W:=Winners(a,b,k,T) : if nops(POS)=1 then if POS[1]=1 then RETURN(0): else RETURN([1]): fi: fi: if nops(POS)=2 then if POS[2]=1 then RETURN(0): elif POS[2]=0 and POS[1]>1 then RETURN([POS[1]-1,1]): elif POS[2]=0 and POS[1]=1 then RETURN([1]): else RETURN([POS[1],1]): fi: fi: POS1:=POS[1]: gu:=T[POS1]: if DoesFit(POS,gu,a,b) then RETURN(0): fi: gu:=W[POS1]: for i from 1 to nops(gu) do mu:=DoesFit2(POS,gu[i][1],a,b): if mu[1] then RETURN(subs(mu[2],gu[i][2])): fi: od: ERROR(`The Losers table`, op(T), ` is wrong `): end: #yafe(resh,a): given a list of triples #all with the #same first component, and using the symbol a, #that denotes outputs a list #whose (i+1)^th entry is the POS[3] of the P position with #POS[2]=i if the last entry is a *, then it goes for ever #with the last entry yafe:=proc(resh,a) local mu,i,T,lu,lu1: for i from 1 to nops(resh) do T[resh[i][2]]:=resh[i][3]: od: mu:=[]: for i from 1 to nops(resh)-1 do mu:=[op(mu),T[i-1]]: od: lu:=op(nops(resh),resh)[2]: lu1:=op(nops(resh),resh)[3]: if coeff(lu,a,1)=1 then mu:=[op(mu),lu1,lu1,`...`]: else mu:=[op(mu),T[nops(resh)-1]]: fi: mu: end: #WinningMove1(POS): Given a position POS, finds a winning move WinningMove1:=proc(POS) local a,T: if nops(POS)>3 or nops(POS)=3 and POS[1]>115 then ERROR(`Can only handle 3-rowed positions with POS[1]<=115`): fi: T:=T115(a,POS[1]): WinningMove(a,POS[1],T,POS): end: ####Section on playing the game #GoodMovef(POS): Using the straightforward notation #for a position, POS, [row1,row2,row3], finds #a good move (in the same notation), if it exists #otherwise (i.e. if POS is a losing position), returns 0 GoodMovef:=proc(POS) local POS1: if nops(POS)=1 then POS1:=POS: elif nops(POS)=2 then POS1:=[POS[2],POS[1]-POS[2]]: elif nops(POS)>3 or POS[3]>115 then ERROR(`Can only handle 3-rowed positions with smallest part<=115`): else POS1:=[POS[3],POS[2]-POS[3],POS[1]-POS[2]]: fi: POS1:=WinningMove1(POS1): if POS1=0 then RETURN(0): fi: if nops(POS1)=3 then RETURN([POS1[1]+POS1[2]+POS1[3],POS1[1]+POS1[2],POS1[1]]): elif nops(POS1)=2 then RETURN([POS1[1]+POS1[2],POS1[1]]): elif nops(POS1)=1 then RETURN(POS1): else ERROR(`Something is wrong`): fi: end: #Chop(posit,cell):given a position posit (a list of non-increasing #positive integers), finds the result of perfoming the #move of chomping at the cell cell Chop:=proc(posit,cell) local i,j,posit1,j1: i:=cell[1]: j:=cell[2]: #if i>posit[j] or (i=1 and j=1) then ERROR(`Wrong move`): fi: posit1:=[op(1..j-1,posit)]: for j1 from j to nops(posit) while posit[j1]>=i do if i>1 then posit1:=[op(posit1),i-1]: fi:od: [op(posit1),op(j1..nops(posit),posit)]: end: #DrawPos(POS,X): draws the position POS DrawPos:=proc(POS,X) local i,j: for i from 1 to nops(POS) do lprint(seq(X,j=1..POS[i])): od: end: #PlayChomp(POS): plays Chomp starting at position POS #and the human is first-to-move: PlayChomp:=proc(POS) local POS1,i,j,cell,lu: if nops(POS)>3 or ( nops(POS)=3 and POS[3]>115) then ERROR(`Can only handle 3 rows with smallest row <= 115`): fi: if (nops(POS)=3 and not(POS[1]>=POS[2] and POS[2]>=POS[3] and POS[3]>=1) ) or (nops(POS)=2 and not(POS[1]>=POS[2] and POS[2]>=1)) or (nops(POS)=1 and not(POS[1]>=1)) then print(`You should have a non-increasing list of length<=3 of `): print(`positive integers, e.g. PlayChomp([4,4,3]); `): ERROR(`Bad position`): fi: POS1:=POS: print(`The starting position is `): print(POS1): while POS1<>[1] do print(` It is your turn `): lu:=nops(POS1): print(` Which Row?, type an integer between`,1,`and`,lu,`followed by;`): j:=readstat(): if not (1<=j and j<=nops(POS1)) then print(`you must pick an integer between`,1,`and`,nops(POS1)): print(`Try again!`): j:=readstat(): fi: lu:=POS1[j]: print(` Which Column? Type an integer between`,1,`and`,lu,`followed by;`): i:=readstat(): if not (1<=i and i<=POS1[j]) then print(`you must pick an integer between`,1,`and`,POS1[j]): print(`Try again!`): i:=readstat(): fi: print(``): cell:=[i,j]: if cell=[1,1] then print(`Now there is nothing left, you lost!`): RETURN(): fi: POS1:=Chop(POS1,cell): print(`After your move, the new position is`): print(POS1): POS1:=GoodMovef(POS1): if POS1=0 then print(`I can't do anything good, so I am resigning`): RETURN(): fi: print(`I just moved. After my move, the position is `): print(POS1): od: if POS1=[1] then print(`Now the position is`): print(POS1): print(`Yea for me!, I won!, better luck next time.`): RETURN(): fi: end: #PlayChompP(POS): plays Chomp starting at position POS #and the human is first-to-move: FAST VERSION PlayChompP:=proc(POS) local POS1,i,j,cell,X,lu: if nops(POS)>3 or ( nops(POS)=3 and POS[3]>115) then ERROR(`Can only handle 3 rows with smallest row <= 115`): fi: if (nops(POS)=3 and not(POS[1]>=POS[2] and POS[2]>=POS[3] and POS[3]>=1) ) or (nops(POS)=2 and not(POS[1]>=POS[2] and POS[2]>=1)) or (nops(POS)=1 and not(POS[1]>=1)) then print(`You should have a non-increasing list of length<=3 of `): print(`positive integers, e.g. PlayChomp([4,4,3]); `): ERROR(`Bad position`): fi: if POS[nops(POS)]>20 then ERROR(`Too large position to be drawn, use PlayChomp instead `): fi: POS1:=POS: print(`The starting position is `): DrawPos(POS1,X): while POS1<>[1] do print(` It is your turn `): lu:=nops(POS1): print(` Which Row?, type an integer between`,1,`and`,lu,`followed by;`): j:=readstat(): if not (1<=j and j<=nops(POS1)) then print(`you must pick an integer between`,1,`and`,nops(POS1)): print(`Try again!`): j:=readstat(): fi: lu:=POS1[j]: print(` Which Column? Type an integer between`,1,`and`,lu,`followed by;`): i:=readstat(): if not (1<=i and i<=POS1[j]) then print(`you must pick an integer between`,1,`and`,POS1[j]): print(`Try again!`): i:=readstat(): fi: print(``): cell:=[i,j]: if cell=[1,1] then print(`Now there is nothing left, you lost!`): RETURN(): fi: POS1:=Chop(POS1,cell): print(`After your move, the new position is`): DrawPos(POS1,X): POS1:=GoodMovef(POS1): if POS1=0 then print(`I can't do anything good, so I am resigning`): RETURN(): fi: print(`I just moved. After my move, the position is `): DrawPos(POS1,X): od: if POS1=[1] then print(`Now the position is`): DrawPos(POS1,X): print(`Yea for me!, I won!, better luck next time.`): RETURN(): fi: end: #T115(a,k) the precomuted table of symbolic losers up to last row=k #k must be an integer 1<=k<=115 , a is a symbol T115:=proc(a,k) local T: if k>115 or k<1 then ERROR(`1<=k<=115`): fi: T:= [[[1, 0, 2], [1, 1, 0]], [[2, a, 2]], [[3, 0, 3], [3, 2, 0], [3, 1, 3]], [[4, 0 , 4], [4, 1, 4], [4, 3, 0], [4, 2, 4]], [[5, 0, 5], [5, 1, 3], [5, 2+a, 4]], [[ 6, 0, 5], [6, 3, 0], [6, 1, 5], [6, 2, 5]], [[7, 0, 6], [7, 2, 3], [7, 1, 6], [ 7, 3+a, 5]], [[8, 0, 7], [8, 1, 5], [8, 4, 0], [8, 2, 6], [8, 3, 6]], [[9, 0, 7 ], [9, 2, 3], [9, 1, 7], [9, 3+a, 6]], [[10, 0, 8], [10, 4, 0], [10, 1, 8], [10 , 2, 8], [10, 3, 8]], [[11, 0, 9], [11, 1, 7], [11, 3, 3], [11, 2, 9], [11, 4, 8], [11, 7, 3], [11, 5, 8], [11, 6, 8], [11, 8+a, 7]], [[12, 0, 9], [12, 5, 0], [12, 4, 3], [12, 1, 10], [12, 2, 8], [12, 3, 9]], [[13, 0, 11], [13, 1, 9], [13 , 2, 7], [13, 6, 0], [13, 3, 9], [13, 4, 9], [13, 5, 9]], [[14, 2, 7], [14, 0, 11], [14, 1, 11], [14, 5, 3], [14, 3, 10], [14, 4, 10], [14, 6+a, 9]], [[15, 0, 12], [15, 1, 10], [15, 5, 3], [15, 7, 0], [15, 2, 11], [15, 3, 11], [15, 4, 11] , [15, 6, 10]], [[16, 0, 12], [16, 2, 8], [16, 1, 12], [16, 7, 0], [16, 3, 12], [16, 4, 10], [16, 5, 11], [16, 6, 11]], [[17, 0, 13], [17, 2, 10], [17, 1, 13], [17, 6, 3], [17, 3, 12], [17, 4, 12], [17, 5, 12], [17, 7+a, 11]], [[18, 0, 14] , [18, 3, 8], [18, 2, 11], [18, 1, 14], [18, 8, 0], [18, 5, 11], [18, 4, 13], [ 18, 6, 12], [18, 7, 12]], [[19, 0, 15], [19, 1, 13], [19, 4, 8], [19, 7, 3], [ 19, 2, 14], [19, 3, 14], [19, 5, 13], [19, 6, 13], [19, 8+a, 12]], [[20, 0, 15] , [20, 3, 10], [20, 1, 15], [20, 9, 0], [20, 2, 15], [20, 8, 3], [20, 4, 14], [ 20, 5, 14], [20, 6, 14], [20, 7, 14]], [[21, 4, 8], [21, 0, 16], [21, 2, 13], [ 21, 1, 16], [21, 10, 0], [21, 3, 15], [21, 5, 15], [21, 6, 13], [21, 7, 14], [ 21, 8, 14], [21, 9, 14]], [[22, 0, 17], [22, 1, 15], [22, 4, 10], [22, 8, 3], [ 22, 2, 16], [22, 3, 16], [22, 5, 15], [22, 6, 15], [22, 7, 15], [22, 9+a, 14]], [[23, 0, 17], [23, 3, 12], [23, 5, 8], [23, 1, 17], [23, 10, 0], [23, 2, 17], [ 23, 4, 16], [23, 6, 16], [23, 8, 13], [23, 7, 16], [23, 9, 15]], [[24, 0, 18], [24, 4, 10], [24, 1, 18], [24, 9, 3], [24, 2, 18], [24, 7, 10], [24, 3, 18], [ 24, 5, 17], [24, 6, 17], [24, 8, 16], [24, 10+a, 15]], [[25, 5, 8], [25, 0, 19] , [25, 1, 17], [25, 3, 13], [25, 11, 0], [25, 2, 19], [25, 4, 18], [25, 7, 13], [25, 6, 17], [25, 8, 16], [25, 9, 16], [25, 10, 16]], [[26, 0, 19], [26, 4, 13] , [26, 9, 3], [26, 1, 20], [26, 2, 18], [26, 7, 8], [26, 3, 19], [26, 5, 18], [ 26, 6, 18], [26, 8, 17], [26, 10+a, 16]], [[27, 0, 21], [27, 1, 19], [27, 6, 10 ], [27, 11, 0], [27, 4, 15], [27, 2, 20], [27, 3, 20], [27, 5, 19], [27, 7, 18] , [27, 8, 18], [27, 9, 18], [27, 10, 18]], [[28, 0, 21], [28, 3, 16], [28, 7, 8 ], [28, 5, 13], [28, 10, 3], [28, 1, 21], [28, 2, 21], [28, 4, 20], [28, 6, 19] , [28, 8, 19], [28, 9, 17], [28, 11+a, 17]], [[29, 0, 22], [29, 2, 19], [29, 5, 13], [29, 1, 22], [29, 7, 10], [29, 12, 0], [29, 11, 3], [29, 3, 21], [29, 4, 21], [29, 6, 20], [29, 8, 19], [29, 9, 19], [29, 10, 19]], [[30, 0, 23], [30, 1 , 21], [30, 3, 17], [30, 7, 10], [30, 8, 8], [30, 2, 22], [30, 13, 0], [30, 4, 21], [30, 5, 21], [30, 6, 21], [30, 9, 20], [30, 10, 18], [30, 11, 19], [30, 12 , 19]], [[31, 0, 23], [31, 2, 19], [31, 8, 8], [31, 6, 13], [31, 1, 23], [31, 12, 3], [31, 3, 22], [31, 4, 22], [31, 5, 22], [31, 7, 21], [31, 9, 20], [31, 10, 20], [31, 11, 20], [31, 13+a, 19]], [[32, 3, 17], [32, 1, 22], [32, 0, 24], [32, 8, 10], [32, 2, 23], [32, 12, 3], [32, 14, 0], [32, 5, 21], [32, 4, 23], [ 32, 6, 22], [32, 7, 22], [32, 9, 21], [32, 10, 21], [32, 11, 21], [32, 13, 20]] , [[33, 0, 24], [33, 6, 13], [33, 9, 8], [33, 1, 24], [33, 5, 17], [33, 2, 24], [33, 14, 0], [33, 3, 24], [33, 4, 24], [33, 7, 22], [33, 8, 22], [33, 11, 20], [33, 10, 22], [33, 12, 21], [33, 13, 21]], [[34, 0, 25], [34, 1, 23], [34, 8, 10], [34, 3, 23], [34, 2, 25], [34, 13, 3], [34, 11, 10], [34, 4, 24], [34, 5, 24], [34, 6, 24], [34, 7, 24], [34, 9, 23], [34, 10, 23], [34, 12, 22], [34, 14 +a, 21]], [[35, 0, 25], [35, 3, 20], [35, 9, 8], [35, 7, 13], [35, 1, 26], [35, 2, 26], [35, 15, 0], [35, 5, 21], [35, 4, 25], [35, 6, 25], [35, 8, 24], [35, 12, 18], [35, 10, 23], [35, 11, 23], [35, 13, 22], [35, 14, 22]], [[36, 2, 23], [36, 0, 27], [36, 1, 25], [36, 13, 3], [36, 11, 8], [36, 9, 13], [36, 3, 26], [ 36, 5, 23], [36, 4, 26], [36, 6, 25], [36, 7, 25], [36, 8, 25], [36, 10, 24], [ 36, 12, 23], [36, 14+a, 22]], [[37, 0, 27], [37, 2, 23], [37, 1, 27], [37, 15, 0], [37, 6, 18], [37, 11, 10], [37, 3, 27], [37, 5, 24], [37, 4, 27], [37, 8, 24], [37, 7, 26], [37, 9, 25], [37, 10, 25], [37, 12, 24], [37, 13, 24], [37, 14, 24]], [[38, 0, 28], [38, 2, 25], [38, 5, 19], [38, 1, 28], [38, 14, 3], [38 , 12, 8], [38, 10, 13], [38, 4, 26], [38, 3, 28], [38, 7, 25], [38, 6, 27], [38 , 8, 26], [38, 9, 26], [38, 11, 25], [38, 13, 25], [38, 17, 20], [38, 15, 24], [38, 16, 24], [38, 18+a, 23]], [[39, 5, 18], [39, 0, 29], [39, 3, 23], [39, 2, 26], [39, 1, 29], [39, 16, 0], [39, 12, 10], [39, 4, 27], [39, 6, 26], [39, 7, 27], [39, 9, 24], [39, 8, 27], [39, 10, 26], [39, 11, 26], [39, 13, 25], [39, 14, 25], [39, 15, 25]], [[40, 4, 21], [40, 0, 30], [40, 2, 27], [40, 9, 13], [ 40, 5, 22], [40, 1, 30], [40, 15, 3], [40, 13, 8], [40, 3, 29], [40, 6, 28], [ 40, 8, 25], [40, 7, 28], [40, 10, 27], [40, 12, 24], [40, 11, 27], [40, 14, 26] , [40, 16, 25], [40, 19, 20], [40, 17, 25], [40, 18, 25], [40, 20+a, 24]], [[41 , 2, 26], [41, 1, 29], [41, 0, 31], [41, 6, 20], [41, 11, 10], [41, 17, 0], [41 , 3, 29], [41, 4, 29], [41, 14, 10], [41, 5, 29], [41, 7, 28], [41, 8, 28], [41 , 9, 28], [41, 10, 28], [41, 12, 27], [41, 13, 27], [41, 15, 26], [41, 16, 26]] , [[42, 1, 28], [42, 0, 31], [42, 12, 8], [42, 5, 22], [42, 7, 18], [42, 10, 13 ], [42, 2, 30], [42, 16, 3], [42, 3, 30], [42, 4, 30], [42, 6, 29], [42, 8, 29] , [42, 9, 29], [42, 13, 23], [42, 11, 28], [42, 14, 27], [42, 15, 27], [42, 20, 20], [42, 17, 26], [42, 18, 26], [42, 19, 26], [42, 21+a, 25]], [[43, 0, 31], [ 43, 4, 24], [43, 6, 20], [43, 1, 31], [43, 2, 31], [43, 16, 3], [43, 11, 13], [ 43, 18, 0], [43, 14, 8], [43, 3, 31], [43, 5, 30], [43, 7, 30], [43, 9, 27], [ 43, 8, 30], [43, 10, 29], [43, 12, 28], [43, 13, 28], [43, 15, 27], [43, 17, 27 ]], [[44, 7, 18], [44, 0, 32], [44, 1, 32], [44, 4, 27], [44, 9, 18], [44, 2, 32], [44, 18, 0], [44, 13, 10], [44, 3, 32], [44, 5, 31], [44, 6, 31], [44, 8, 30], [44, 10, 29], [44, 11, 29], [44, 12, 29], [44, 14, 28], [44, 15, 28], [44, 16, 28], [44, 17, 28]], [[45, 6, 20], [45, 0, 33], [45, 2, 30], [45, 11, 13], [ 45, 5, 25], [45, 1, 33], [45, 14, 8], [45, 17, 3], [45, 3, 32], [45, 4, 32], [ 45, 7, 31], [45, 9, 28], [45, 8, 31], [45, 10, 30], [45, 12, 29], [45, 13, 29], [45, 16, 27], [45, 15, 29], [45, 18+a, 27]], [[46, 0, 34], [46, 2, 31], [46, 6, 23], [46, 13, 10], [46, 5, 26], [46, 1, 34], [46, 12, 13], [46, 19, 0], [46, 18 , 3], [46, 3, 33], [46, 4, 33], [46, 7, 32], [46, 8, 30], [46, 9, 31], [46, 10, 31], [46, 11, 31], [46, 14, 30], [46, 16, 27], [46, 15, 30], [46, 17, 29]], [[ 47, 2, 30], [47, 1, 33], [47, 0, 35], [47, 14, 8], [47, 7, 23], [47, 10, 18], [ 47, 16, 8], [47, 20, 0], [47, 4, 32], [47, 3, 34], [47, 5, 33], [47, 6, 33], [ 47, 8, 32], [47, 9, 32], [47, 11, 31], [47, 12, 31], [47, 13, 31], [47, 15, 30] , [47, 17, 29], [47, 18, 29], [47, 19, 29]], [[48, 0, 35], [48, 13, 10], [48, 5 , 26], [48, 4, 29], [48, 1, 35], [48, 9, 20], [48, 18, 3], [48, 2, 35], [48, 3, 35], [48, 14, 13], [48, 6, 33], [48, 7, 33], [48, 8, 33], [48, 10, 32], [48, 11 , 32], [48, 12, 32], [48, 15, 30], [48, 16, 30], [48, 17, 30], [48, 19+a, 29]], [[49, 6, 24], [49, 0, 36], [49, 2, 33], [49, 10, 18], [49, 1, 36], [49, 8, 24], [49, 20, 0], [49, 19, 3], [49, 3, 35], [49, 16, 10], [49, 4, 35], [49, 5, 35], [49, 7, 34], [49, 9, 33], [49, 11, 33], [49, 12, 31], [49, 13, 32], [49, 14, 32 ], [49, 15, 32], [49, 17, 31], [49, 18, 31]], [[50, 5, 26], [50, 2, 32], [50, 0 , 37], [50, 1, 37], [50, 4, 32], [50, 11, 18], [50, 14, 13], [50, 17, 8], [50, 21, 0], [50, 3, 36], [50, 7, 33], [50, 6, 35], [50, 8, 34], [50, 9, 34], [50, 10, 34], [50, 12, 33], [50, 13, 33], [50, 15, 32], [50, 16, 32], [50, 18, 31], [50, 19, 31], [50, 20, 31]], [[51, 1, 34], [51, 0, 38], [51, 3, 34], [51, 7, 26 ], [51, 10, 20], [51, 2, 37], [51, 16, 10], [51, 15, 13], [51, 4, 36], [51, 21, 3], [51, 5, 36], [51, 6, 36], [51, 8, 35], [51, 9, 35], [51, 11, 34], [51, 12, 34], [51, 13, 34], [51, 14, 34], [51, 17, 32], [51, 18, 32], [51, 19, 32], [51, 20, 32], [51, 22+a, 31]], [[52, 0, 36], [52, 4, 30], [52, 7, 25], [52, 11, 18], [52, 1, 38], [52, 2, 36], [52, 17, 8], [52, 3, 37], [52, 23, 0], [52, 19, 8], [ 52, 5, 37], [52, 6, 35], [52, 8, 36], [52, 9, 34], [52, 10, 35], [52, 13, 33], [52, 12, 35], [52, 14, 34], [52, 15, 34], [52, 16, 34], [52, 18, 33], [52, 20, 32], [52, 21, 32], [52, 22, 32]], [[53, 6, 27], [53, 1, 37], [53, 2, 35], [53, 0, 39], [53, 11, 20], [53, 16, 10], [53, 3, 37], [53, 15, 13], [53, 21, 3], [53 , 5, 36], [53, 4, 38], [53, 8, 35], [53, 7, 37], [53, 9, 36], [53, 10, 36], [53 , 12, 35], [53, 13, 35], [53, 14, 35], [53, 17, 34], [53, 19, 31], [53, 18, 34] , [53, 20, 33], [53, 22+a, 32]], [[54, 7, 25], [54, 0, 39], [54, 3, 34], [54, 1 , 39], [54, 12, 18], [54, 2, 39], [54, 8, 28], [54, 17, 10], [54, 4, 38], [54, 23, 0], [54, 22, 3], [54, 5, 38], [54, 6, 38], [54, 9, 37], [54, 10, 37], [54, 13, 32], [54, 11, 37], [54, 14, 35], [54, 15, 35], [54, 16, 35], [54, 18, 34], [54, 19, 34], [54, 20, 34], [54, 21, 34]], [[55, 0, 40], [55, 1, 38], [55, 6, 29], [55, 11, 20], [55, 7, 29], [55, 2, 39], [55, 18, 8], [55, 16, 13], [55, 3, 39], [55, 4, 39], [55, 24, 0], [55, 5, 39], [55, 9, 36], [55, 8, 38], [55, 10, 38], [55, 12, 37], [55, 14, 33], [55, 13, 37], [55, 15, 36], [55, 17, 35], [55, 20, 33], [55, 19, 35], [55, 21, 34], [55, 22, 34], [55, 23, 34]], [[56, 0, 40], [56, 12, 18], [56, 8, 26], [56, 7, 28], [56, 1, 40], [56, 5, 33], [56, 2, 40], [56, 3, 40], [56, 18, 10], [56, 22, 3], [56, 4, 40], [56, 6, 39], [56, 10, 36], [56, 9, 39], [56, 11, 36], [56, 13, 36], [56, 14, 37], [56, 15, 35], [56, 16, 36], [56, 17, 36], [56, 19, 35], [56, 20, 35], [56, 21, 35], [56, 23+a, 34]], [ [57, 0, 41], [57, 8, 26], [57, 6, 31], [57, 1, 41], [57, 4, 36], [57, 2, 41], [ 57, 16, 13], [57, 13, 20], [57, 19, 8], [57, 3, 41], [57, 24, 0], [57, 5, 40], [57, 7, 39], [57, 9, 38], [57, 10, 38], [57, 11, 38], [57, 12, 38], [57, 14, 37 ], [57, 15, 37], [57, 17, 36], [57, 18, 36], [57, 20, 36], [57, 22, 33], [57, 21, 36], [57, 23, 35]], [[58, 0, 42], [58, 8, 28], [58, 3, 38], [58, 1, 42], [ 58, 6, 33], [58, 2, 42], [58, 18, 10], [58, 14, 18], [58, 13, 20], [58, 4, 41], [58, 23, 3], [58, 5, 41], [58, 7, 40], [58, 9, 39], [58, 10, 39], [58, 11, 39], [58, 12, 39], [58, 15, 37], [58, 16, 37], [58, 17, 37], [58, 20, 35], [58, 19, 37], [58, 21, 36], [58, 22, 36], [58, 24+a, 35]], [[59, 3, 37], [59, 0, 43], [ 59, 9, 26], [59, 2, 40], [59, 1, 43], [59, 8, 30], [59, 14, 18], [59, 19, 8], [ 59, 18, 13], [59, 25, 0], [59, 5, 40], [59, 4, 42], [59, 6, 41], [59, 7, 41], [ 59, 11, 38], [59, 10, 40], [59, 12, 39], [59, 13, 39], [59, 15, 38], [59, 16, 38], [59, 17, 38], [59, 20, 37], [59, 23, 33], [59, 21, 37], [59, 22, 37], [59, 24, 36]], [[60, 0, 44], [60, 1, 42], [60, 6, 33], [60, 5, 36], [60, 9, 28], [60 , 2, 43], [60, 14, 20], [60, 3, 43], [60, 18, 13], [60, 23, 3], [60, 20, 10], [ 60, 4, 43], [60, 7, 41], [60, 8, 41], [60, 10, 40], [60, 11, 40], [60, 12, 40], [60, 13, 40], [60, 15, 39], [60, 16, 39], [60, 17, 39], [60, 19, 38], [60, 21, 38], [60, 22, 36], [60, 24+a, 36]], [[61, 2, 40], [61, 0, 44], [61, 1, 44], [61 , 8, 30], [61, 10, 26], [61, 7, 33], [61, 15, 18], [61, 25, 0], [61, 20, 10], [ 61, 21, 8], [61, 4, 42], [61, 3, 44], [61, 5, 43], [61, 6, 43], [61, 9, 41], [ 61, 11, 41], [61, 12, 39], [61, 13, 40], [61, 14, 40], [61, 16, 40], [61, 17, 38], [61, 18, 39], [61, 19, 39], [61, 22, 37], [61, 23, 37], [61, 24, 37]], [[ 62, 4, 37], [62, 0, 45], [62, 9, 28], [62, 2, 42], [62, 1, 45], [62, 3, 44], [ 62, 11, 28], [62, 15, 20], [62, 21, 8], [62, 19, 13], [62, 25, 3], [62, 5, 44], [62, 6, 42], [62, 7, 43], [62, 8, 43], [62, 10, 42], [62, 12, 41], [62, 13, 41] , [62, 14, 41], [62, 16, 40], [62, 17, 40], [62, 18, 40], [62, 20, 39], [62, 22 , 38], [62, 23, 38], [62, 24, 38], [62, 26+a, 37]], [[63, 10, 26], [63, 8, 30], [63, 6, 34], [63, 3, 40], [63, 0, 46], [63, 2, 43], [63, 1, 46], [63, 16, 18], [63, 21, 10], [63, 5, 43], [63, 4, 45], [63, 25, 3], [63, 27, 0], [63, 7, 44], [63, 11, 39], [63, 9, 43], [63, 13, 40], [63, 12, 42], [63, 14, 41], [63, 15, 41], [63, 18, 39], [63, 17, 41], [63, 19, 40], [63, 20, 40], [63, 22, 39], [63, 23, 39], [63, 24, 39], [63, 26, 38]], [[64, 2, 42], [64, 0, 47], [64, 5, 37], [ 64, 1, 45], [64, 11, 26], [64, 9, 30], [64, 15, 20], [64, 22, 8], [64, 4, 44], [64, 3, 46], [64, 20, 13], [64, 27, 0], [64, 7, 43], [64, 6, 45], [64, 8, 44], [64, 10, 43], [64, 12, 42], [64, 13, 42], [64, 14, 42], [64, 16, 42], [64, 17, 40], [64, 18, 41], [64, 19, 41], [64, 21, 40], [64, 24, 38], [64, 23, 40], [64, 25, 39], [64, 26, 39]], [[65, 3, 40], [65, 1, 44], [65, 0, 47], [65, 10, 28], [ 65, 16, 18], [65, 2, 47], [65, 4, 44], [65, 11, 30], [65, 22, 10], [65, 18, 18] , [65, 26, 3], [65, 6, 44], [65, 5, 46], [65, 7, 45], [65, 8, 45], [65, 9, 45], [65, 12, 43], [65, 13, 43], [65, 14, 43], [65, 15, 43], [65, 17, 42], [65, 19, 41], [65, 20, 41], [65, 21, 41], [65, 23, 40], [65, 24, 40], [65, 25, 40], [65, 27+a, 39]], [[66, 3, 41], [66, 0, 47], [66, 11, 26], [66, 7, 35], [66, 15, 20], [66, 1, 48], [66, 2, 46], [66, 12, 28], [66, 20, 13], [66, 23, 8], [66, 4, 47], [66, 5, 45], [66, 28, 0], [66, 6, 46], [66, 9, 44], [66, 8, 46], [66, 10, 45], [66, 13, 44], [66, 14, 44], [66, 17, 39], [66, 16, 43], [66, 18, 42], [66, 19, 42], [66, 21, 41], [66, 22, 41], [66, 24, 41], [66, 25, 39], [66, 26, 40], [66, 27, 40]], [[67, 5, 38], [67, 1, 47], [67, 2, 45], [67, 0, 49], [67, 16, 20], [ 67, 13, 26], [67, 11, 30], [67, 3, 48], [67, 4, 46], [67, 22, 10], [67, 21, 13] , [67, 27, 3], [67, 6, 46], [67, 7, 47], [67, 8, 45], [67, 9, 46], [67, 10, 46] , [67, 12, 45], [67, 14, 44], [67, 15, 44], [67, 17, 43], [67, 18, 43], [67, 19 , 43], [67, 20, 43], [67, 24, 40], [67, 23, 42], [67, 25, 41], [67, 26, 41], [ 67, 28+a, 40]], [[68, 1, 46], [68, 0, 49], [68, 5, 41], [68, 9, 33], [68, 12, 28], [68, 17, 18], [68, 3, 47], [68, 2, 49], [68, 23, 8], [68, 18, 20], [68, 4, 48], [68, 29, 0], [68, 25, 8], [68, 7, 46], [68, 6, 48], [68, 8, 47], [68, 10, 46], [68, 11, 46], [68, 13, 45], [68, 14, 45], [68, 15, 45], [68, 16, 45], [68, 20, 42], [68, 19, 44], [68, 21, 43], [68, 22, 43], [68, 24, 42], [68, 26, 41], [68, 27, 41], [68, 28, 41]], [[69, 0, 49], [69, 4, 42], [69, 2, 48], [69, 1, 50 ], [69, 11, 30], [69, 13, 26], [69, 22, 10], [69, 3, 49], [69, 10, 35], [69, 21 , 13], [69, 19, 18], [69, 27, 3], [69, 6, 47], [69, 5, 49], [69, 7, 48], [69, 8 , 48], [69, 9, 48], [69, 12, 46], [69, 15, 44], [69, 14, 46], [69, 16, 45], [69 , 17, 45], [69, 18, 45], [69, 20, 44], [69, 23, 43], [69, 25, 40], [69, 24, 43] , [69, 26, 42], [69, 28+a, 41]], [[70, 0, 51], [70, 1, 49], [70, 2, 47], [70, 7 , 38], [70, 12, 28], [70, 11, 33], [70, 3, 49], [70, 23, 10], [70, 18, 20], [70 , 29, 0], [70, 5, 48], [70, 4, 50], [70, 28, 3], [70, 6, 49], [70, 26, 10], [70 , 9, 47], [70, 8, 49], [70, 10, 48], [70, 13, 47], [70, 15, 44], [70, 14, 47], [70, 16, 46], [70, 17, 46], [70, 19, 45], [70, 20, 45], [70, 21, 45], [70, 22, 45], [70, 24, 44], [70, 25, 44], [70, 27, 43]], [[71, 0, 51], [71, 7, 37], [71, 2, 47], [71, 13, 26], [71, 1, 51], [71, 5, 43], [71, 24, 8], [71, 19, 18], [71, 4, 49], [71, 3, 51], [71, 22, 13], [71, 15, 28], [71, 30, 0], [71, 6, 49], [71, 8, 48], [71, 9, 49], [71, 10, 47], [71, 11, 48], [71, 12, 48], [71, 14, 47], [ 71, 17, 45], [71, 16, 47], [71, 18, 46], [71, 21, 44], [71, 20, 46], [71, 23, 45], [71, 25, 42], [71, 27, 42], [71, 26, 44], [71, 28, 43], [71, 29, 43]], [[ 72, 4, 44], [72, 1, 50], [72, 0, 52], [72, 12, 30], [72, 3, 50], [72, 2, 52], [ 72, 18, 20], [72, 13, 30], [72, 10, 37], [72, 23, 13], [72, 28, 3], [72, 26, 8] , [72, 5, 50], [72, 6, 50], [72, 7, 50], [72, 8, 50], [72, 9, 50], [72, 11, 49] , [72, 14, 47], [72, 15, 48], [72, 16, 46], [72, 17, 47], [72, 19, 47], [72, 21 , 44], [72, 20, 47], [72, 22, 46], [72, 24, 45], [72, 25, 45], [72, 27, 44], [ 72, 29+a, 43]], [[73, 0, 52], [73, 6, 41], [73, 5, 45], [73, 2, 51], [73, 1, 53 ], [73, 19, 18], [73, 14, 28], [73, 15, 26], [73, 3, 52], [73, 13, 33], [73, 4, 52], [73, 30, 0], [73, 25, 10], [73, 7, 51], [73, 8, 49], [73, 9, 50], [73, 10, 50], [73, 11, 50], [73, 12, 50], [73, 17, 46], [73, 16, 48], [73, 18, 48], [73, 20, 45], [73, 22, 45], [73, 21, 47], [73, 23, 46], [73, 24, 46], [73, 26, 45], [73, 27, 45], [73, 28, 45], [73, 29, 45]], [[74, 8, 38], [74, 2, 50], [74, 1, 52], [74, 0, 54], [74, 7, 42], [74, 15, 26], [74, 23, 13], [74, 3, 53], [74, 4, 51], [74, 26, 8], [74, 20, 20], [74, 29, 3], [74, 5, 52], [74, 17, 28], [74, 6, 52], [74, 10, 49], [74, 9, 51], [74, 12, 49], [74, 11, 51], [74, 13, 50], [74, 14, 50], [74, 16, 49], [74, 18, 48], [74, 19, 48], [74, 21, 47], [74, 22, 47], [74, 24, 46], [74, 25, 46], [74, 28, 44], [74, 27, 46], [74, 30+a, 44]], [[75, 1, 51], [75, 0, 54], [75, 5, 46], [75, 12, 33], [75, 9, 39], [75, 3, 52], [75, 2, 54], [75, 14, 30], [75, 25, 10], [75, 21, 18], [75, 20, 20], [75, 4, 53], [ 75, 31, 0], [75, 30, 3], [75, 6, 52], [75, 7, 52], [75, 8, 52], [75, 10, 52], [ 75, 11, 50], [75, 13, 51], [75, 15, 48], [75, 16, 49], [75, 17, 49], [75, 18, 49], [75, 19, 49], [75, 22, 47], [75, 23, 47], [75, 24, 47], [75, 26, 47], [75, 28, 44], [75, 27, 47], [75, 29, 46]], [[76, 0, 54], [76, 4, 47], [76, 1, 55], [ 76, 2, 53], [76, 7, 43], [76, 10, 37], [76, 14, 30], [76, 3, 54], [76, 26, 8], [76, 21, 18], [76, 17, 26], [76, 25, 13], [76, 5, 53], [76, 32, 0], [76, 6, 53] , [76, 8, 52], [76, 9, 53], [76, 12, 49], [76, 11, 52], [76, 13, 51], [76, 15, 50], [76, 16, 50], [76, 19, 48], [76, 18, 50], [76, 20, 49], [76, 22, 48], [76, 23, 48], [76, 24, 48], [76, 27, 46], [76, 29, 45], [76, 28, 47], [76, 30, 46], [76, 31, 46]], [[77, 0, 56], [77, 1, 54], [77, 6, 44], [77, 15, 28], [77, 9, 40 ], [77, 13, 33], [77, 5, 49], [77, 2, 55], [77, 3, 55], [77, 4, 55], [77, 25, 13], [77, 30, 3], [77, 27, 10], [77, 22, 20], [77, 7, 53], [77, 8, 54], [77, 10 , 51], [77, 11, 52], [77, 12, 52], [77, 14, 51], [77, 16, 50], [77, 18, 49], [ 77, 17, 51], [77, 19, 50], [77, 20, 50], [77, 21, 50], [77, 23, 49], [77, 24, 49], [77, 26, 48], [77, 28, 47], [77, 29, 47], [77, 31+a, 46]], [[78, 0, 56], [ 78, 3, 51], [78, 1, 56], [78, 16, 26], [78, 10, 39], [78, 15, 30], [78, 2, 56], [78, 7, 46], [78, 4, 55], [78, 32, 0], [78, 27, 10], [78, 28, 8], [78, 23, 18], [78, 5, 55], [78, 18, 30], [78, 6, 55], [78, 8, 54], [78, 9, 54], [78, 11, 53], [78, 12, 53], [78, 13, 53], [78, 14, 53], [78, 17, 51], [78, 19, 51], [78, 20, 49], [78, 21, 50], [78, 22, 50], [78, 24, 49], [78, 25, 49], [78, 26, 49], [78, 29, 47], [78, 30, 47], [78, 31, 47]], [[79, 0, 57], [79, 5, 48], [79, 2, 54], [ 79, 1, 57], [79, 16, 28], [79, 9, 43], [79, 14, 33], [79, 3, 56], [79, 21, 20], [79, 15, 33], [79, 4, 56], [79, 28, 8], [79, 6, 55], [79, 32, 3], [79, 27, 13], [79, 7, 55], [79, 8, 55], [79, 10, 54], [79, 11, 54], [79, 12, 54], [79, 13, 54 ], [79, 17, 51], [79, 18, 52], [79, 20, 49], [79, 19, 52], [79, 22, 50], [79, 23, 50], [79, 24, 50], [79, 25, 50], [79, 26, 50], [79, 29, 48], [79, 30, 48], [79, 31, 48], [79, 33+a, 47]], [[80, 1, 56], [80, 0, 58], [80, 4, 51], [80, 17, 26], [80, 9, 42], [80, 8, 44], [80, 2, 57], [80, 22, 18], [80, 3, 57], [80, 18, 28], [80, 19, 28], [80, 5, 56], [80, 32, 3], [80, 6, 56], [80, 34, 0], [80, 29, 10], [80, 7, 56], [80, 10, 55], [80, 12, 52], [80, 11, 55], [80, 13, 54], [80, 14, 54], [80, 15, 54], [80, 16, 54], [80, 20, 51], [80, 21, 51], [80, 23, 51], [80, 25, 48], [80, 24, 51], [80, 26, 50], [80, 27, 50], [80, 28, 50], [80, 30, 49], [80, 31, 49], [80, 33, 48]], [[81, 0, 58], [81, 2, 54], [81, 1, 58], [81, 10, 41], [81, 7, 47], [81, 16, 30], [81, 12, 38], [81, 3, 57], [81, 22, 20], [ 81, 19, 26], [81, 26, 13], [81, 4, 57], [81, 5, 57], [81, 34, 0], [81, 30, 8], [81, 6, 57], [81, 8, 56], [81, 9, 56], [81, 11, 55], [81, 14, 53], [81, 13, 55] , [81, 15, 55], [81, 18, 51], [81, 17, 54], [81, 20, 52], [81, 21, 52], [81, 23 , 52], [81, 25, 49], [81, 24, 52], [81, 28, 49], [81, 27, 51], [81, 29, 50], [ 81, 31, 49], [81, 32, 49], [81, 33, 49]], [[82, 0, 59], [82, 4, 51], [82, 2, 56 ], [82, 1, 59], [82, 9, 44], [82, 12, 38], [82, 23, 18], [82, 19, 26], [82, 3, 58], [82, 16, 33], [82, 28, 10], [82, 24, 20], [82, 6, 56], [82, 5, 58], [82, 34, 3], [82, 7, 57], [82, 8, 57], [82, 10, 56], [82, 11, 56], [82, 13, 55], [82 , 14, 56], [82, 15, 54], [82, 17, 54], [82, 18, 54], [82, 20, 53], [82, 21, 53] , [82, 22, 53], [82, 25, 51], [82, 27, 50], [82, 26, 52], [82, 29, 50], [82, 30 , 50], [82, 31, 50], [82, 32, 50], [82, 33, 50], [82, 35+a, 49]], [[83, 0, 60], [83, 1, 58], [83, 7, 47], [83, 4, 53], [83, 10, 42], [83, 2, 59], [83, 16, 33], [83, 3, 59], [83, 18, 30], [83, 29, 8], [83, 27, 13], [83, 24, 20], [83, 25, 18 ], [83, 5, 58], [83, 6, 58], [83, 36, 0], [83, 8, 57], [83, 9, 57], [83, 11, 56 ], [83, 12, 56], [83, 14, 55], [83, 13, 57], [83, 15, 56], [83, 17, 55], [83, 19, 54], [83, 20, 54], [83, 21, 54], [83, 22, 54], [83, 23, 54], [83, 26, 52], [83, 28, 51], [83, 30, 51], [83, 32, 48], [83, 31, 51], [83, 33, 50], [83, 34, 50], [83, 35, 50]], [[84, 0, 60], [84, 1, 60], [84, 6, 50], [84, 4, 54], [84, 10, 43], [84, 13, 38], [84, 2, 60], [84, 3, 60], [84, 18, 30], [84, 19, 28], [ 84, 29, 10], [84, 25, 18], [84, 33, 3], [84, 5, 59], [84, 7, 58], [84, 8, 58], [84, 32, 10], [84, 9, 58], [84, 11, 57], [84, 12, 58], [84, 14, 55], [84, 15, 56], [84, 16, 56], [84, 17, 56], [84, 21, 53], [84, 20, 55], [84, 23, 53], [84, 22, 55], [84, 24, 54], [84, 26, 53], [84, 27, 53], [84, 28, 53], [84, 30, 52], [84, 31, 52], [84, 34, 51], [84, 36, 48], [84, 35, 51], [84, 37+a, 50]], [[85, 0, 61], [85, 5, 52], [85, 3, 57], [85, 1, 61], [85, 8, 47], [85, 2, 61], [85, 14, 38], [85, 19, 28], [85, 20, 26], [85, 17, 33], [85, 4, 60], [85, 30, 8], [ 85, 28, 13], [85, 35, 0], [85, 29, 13], [85, 6, 59], [85, 7, 59], [85, 9, 58], [85, 10, 58], [85, 12, 57], [85, 11, 59], [85, 13, 58], [85, 15, 57], [85, 16, 57], [85, 18, 56], [85, 22, 54], [85, 21, 56], [85, 24, 51], [85, 23, 55], [85, 25, 54], [85, 26, 54], [85, 27, 54], [85, 31, 51], [85, 32, 51], [85, 34, 50], [85, 33, 52]], [[86, 0, 62], [86, 2, 59], [86, 10, 44], [86, 8, 48], [86, 1, 62 ], [86, 7, 52], [86, 20, 26], [86, 3, 61], [86, 19, 30], [86, 4, 61], [86, 18, 33], [86, 25, 20], [86, 34, 3], [86, 5, 61], [86, 31, 10], [86, 32, 8], [86, 6, 61], [86, 9, 59], [86, 11, 58], [86, 12, 59], [86, 13, 57], [86, 14, 58], [86, 15, 58], [86, 16, 58], [86, 17, 58], [86, 21, 55], [86, 22, 56], [86, 23, 54], [86, 24, 55], [86, 27, 53], [86, 26, 55], [86, 28, 54], [86, 29, 54], [86, 30, 54], [86, 33, 52], [86, 35+a, 51]], [[87, 1, 61], [87, 0, 63], [87, 4, 56], [87 , 11, 44], [87, 8, 50], [87, 2, 62], [87, 15, 38], [87, 3, 62], [87, 20, 28], [ 87, 26, 18], [87, 25, 20], [87, 5, 62], [87, 6, 60], [87, 32, 8], [87, 36, 0], [87, 22, 28], [87, 7, 61], [87, 9, 60], [87, 10, 60], [87, 12, 59], [87, 13, 59 ], [87, 14, 59], [87, 17, 57], [87, 16, 59], [87, 18, 58], [87, 19, 58], [87, 21, 57], [87, 23, 56], [87, 24, 56], [87, 27, 55], [87, 28, 53], [87, 29, 55], [87, 30, 53], [87, 31, 54], [87, 33, 53], [87, 34, 53], [87, 35, 53]], [[88, 2, 59], [88, 0, 63], [88, 6, 53], [88, 1, 63], [88, 9, 48], [88, 12, 42], [88, 3, 62], [88, 21, 26], [88, 19, 30], [88, 26, 18], [88, 4, 63], [88, 5, 61], [88, 35, 3], [88, 30, 13], [88, 22, 30], [88, 36, 3], [88, 7, 61], [88, 8, 61], [88, 10, 60], [88, 11, 60], [88, 13, 60], [88, 15, 57], [88, 14, 60], [88, 16, 59], [88, 17, 59], [88, 18, 59], [88, 20, 58], [88, 23, 57], [88, 25, 54], [88, 24, 57], [88, 27, 55], [88, 29, 54], [88, 28, 56], [88, 31, 54], [88, 32, 54], [88, 33, 54], [88, 34, 54], [88, 37+a, 52]], [[89, 6, 52], [89, 0, 64], [89, 1, 64], [89, 3, 60], [89, 7, 53], [89, 12, 44], [89, 15, 38], [89, 2, 64], [89, 18, 33] , [89, 22, 26], [89, 4, 63], [89, 26, 20], [89, 5, 63], [89, 30, 13], [89, 32, 10], [89, 37, 0], [89, 8, 61], [89, 9, 61], [89, 10, 61], [89, 11, 61], [89, 13 , 61], [89, 16, 57], [89, 14, 61], [89, 17, 60], [89, 20, 56], [89, 19, 59], [ 89, 21, 58], [89, 24, 56], [89, 23, 58], [89, 25, 57], [89, 28, 55], [89, 27, 57], [89, 29, 56], [89, 31, 55], [89, 33, 55], [89, 34, 53], [89, 35, 54], [89, 36, 54]], [[90, 0, 65], [90, 1, 63], [90, 3, 59], [90, 8, 51], [90, 10, 47], [ 90, 2, 64], [90, 13, 42], [90, 19, 33], [90, 27, 18], [90, 22, 28], [90, 4, 64] , [90, 5, 62], [90, 37, 0], [90, 33, 8], [90, 32, 10], [90, 6, 63], [90, 29, 18 ], [90, 7, 63], [90, 9, 62], [90, 11, 61], [90, 12, 62], [90, 16, 57], [90, 14, 61], [90, 15, 61], [90, 17, 60], [90, 18, 60], [90, 20, 59], [90, 21, 59], [90, 23, 58], [90, 24, 58], [90, 25, 58], [90, 26, 58], [90, 28, 57], [90, 30, 56], [90, 31, 56], [90, 34, 55], [90, 35, 53], [90, 36, 54]], [[91, 0, 65], [91, 3, 60], [91, 1, 65], [91, 10, 48], [91, 8, 53], [91, 2, 65], [91, 14, 42], [91, 16 , 38], [91, 26, 20], [91, 23, 26], [91, 21, 30], [91, 4, 64], [91, 33, 8], [91, 5, 64], [91, 31, 13], [91, 6, 64], [91, 37, 3], [91, 7, 64], [91, 9, 63], [91, 11, 63], [91, 13, 60], [91, 12, 63], [91, 15, 61], [91, 18, 59], [91, 17, 61], [91, 19, 60], [91, 20, 60], [91, 22, 59], [91, 24, 59], [91, 25, 59], [91, 27, 55], [91, 28, 57], [91, 29, 57], [91, 30, 57], [91, 32, 56], [91, 34, 55], [91, 35, 55], [91, 36, 55], [91, 38+a, 54]], [[92, 0, 66], [92, 1, 64], [92, 8, 52], [92, 7, 55], [92, 2, 65], [92, 12, 45], [92, 3, 65], [92, 17, 38], [92, 22, 28] , [92, 4, 65], [92, 20, 33], [92, 5, 65], [92, 33, 10], [92, 28, 20], [92, 37, 3], [92, 32, 13], [92, 6, 65], [92, 39, 0], [92, 9, 63], [92, 10, 64], [92, 11, 62], [92, 13, 62], [92, 14, 62], [92, 15, 62], [92, 16, 62], [92, 18, 61], [92, 19, 61], [92, 21, 60], [92, 23, 60], [92, 25, 57], [92, 24, 60], [92, 26, 59], [92, 27, 59], [92, 29, 58], [92, 30, 58], [92, 31, 58], [92, 34, 56], [92, 35, 56], [92, 36, 56], [92, 38, 55]], [[93, 0, 66], [93, 1, 66], [93, 8, 53], [93, 6, 58], [93, 2, 66], [93, 14, 42], [93, 11, 48], [93, 3, 66], [93, 23, 26], [93 , 4, 66], [93, 22, 30], [93, 21, 33], [93, 5, 66], [93, 34, 8], [93, 29, 18], [ 93, 39, 0], [93, 7, 65], [93, 36, 8], [93, 9, 65], [93, 10, 65], [93, 12, 64], [93, 16, 57], [93, 13, 64], [93, 15, 63], [93, 17, 62], [93, 18, 62], [93, 19, 62], [93, 20, 62], [93, 24, 59], [93, 26, 58], [93, 25, 60], [93, 27, 59], [93, 28, 59], [93, 31, 57], [93, 30, 59], [93, 32, 58], [93, 33, 58], [93, 35, 57], [93, 37, 56], [93, 38, 56]], [[94, 0, 67], [94, 1, 67], [94, 4, 62], [94, 13, 45], [94, 11, 49], [94, 8, 55], [94, 2, 67], [94, 17, 38], [94, 3, 67], [94, 23 , 28], [94, 28, 20], [94, 33, 10], [94, 5, 66], [94, 25, 28], [94, 6, 66], [94, 38, 3], [94, 7, 66], [94, 36, 10], [94, 9, 66], [94, 10, 64], [94, 12, 65], [94 , 15, 61], [94, 14, 64], [94, 16, 63], [94, 19, 61], [94, 18, 63], [94, 20, 62] , [94, 21, 62], [94, 22, 62], [94, 24, 61], [94, 26, 60], [94, 27, 60], [94, 30 , 58], [94, 29, 60], [94, 31, 59], [94, 32, 59], [94, 34, 58], [94, 35, 58], [ 94, 37, 57], [94, 39+a, 56]], [[95, 0, 68], [95, 11, 48], [95, 5, 60], [95, 1, 68], [95, 4, 63], [95, 15, 42], [95, 2, 68], [95, 22, 30], [95, 24, 26], [95, 3 , 68], [95, 13, 49], [95, 21, 33], [95, 29, 18], [95, 32, 13], [95, 6, 67], [95 , 8, 64], [95, 40, 0], [95, 7, 67], [95, 39, 3], [95, 9, 66], [95, 10, 66], [95 , 12, 65], [95, 14, 64], [95, 16, 63], [95, 17, 64], [95, 19, 61], [95, 18, 64] , [95, 20, 63], [95, 23, 62], [95, 25, 61], [95, 27, 57], [95, 26, 61], [95, 28 , 61], [95, 31, 57], [95, 30, 60], [95, 34, 57], [95, 33, 59], [95, 35, 58], [ 95, 36, 58], [95, 37, 58], [95, 38, 58]], [[96, 0, 69], [96, 4, 62], [96, 13, 45], [96, 10, 51], [96, 3, 65], [96, 1, 69], [96, 8, 56], [96, 2, 69], [96, 18, 38], [96, 23, 30], [96, 25, 26], [96, 29, 20], [96, 5, 68], [96, 6, 66], [96, 33, 13], [96, 36, 8], [96, 7, 67], [96, 41, 0], [96, 9, 67], [96, 11, 64], [96, 12, 65], [96, 14, 64], [96, 15, 64], [96, 17, 63], [96, 16, 65], [96, 19, 64], [96, 21, 61], [96, 20, 64], [96, 22, 63], [96, 24, 62], [96, 26, 61], [96, 28, 60], [96, 27, 62], [96, 30, 60], [96, 31, 60], [96, 32, 60], [96, 34, 59], [96, 35, 59], [96, 38, 57], [96, 37, 59], [96, 39, 58], [96, 40, 58]], [[97, 0, 70], [97, 3, 64], [97, 2, 67], [97, 8, 55], [97, 15, 42], [97, 7, 58], [97, 1, 70], [97, 13, 47], [97, 24, 28], [97, 22, 33], [97, 4, 69], [97, 30, 18], [97, 5, 69 ], [97, 35, 10], [97, 6, 69], [97, 9, 63], [97, 32, 18], [97, 40, 3], [97, 10, 66], [97, 11, 66], [97, 12, 66], [97, 14, 65], [97, 17, 63], [97, 16, 65], [97, 18, 65], [97, 19, 63], [97, 20, 64], [97, 21, 64], [97, 23, 63], [97, 25, 62], [97, 26, 63], [97, 27, 61], [97, 28, 62], [97, 29, 62], [97, 31, 61], [97, 33, 60], [97, 34, 60], [97, 37, 58], [97, 36, 60], [97, 38, 59], [97, 39, 59], [97, 41+a, 58]], [[98, 3, 65], [98, 1, 69], [98, 0, 71], [98, 14, 45], [98, 2, 70], [98, 18, 38], [98, 9, 57], [98, 11, 53], [98, 25, 26], [98, 24, 30], [98, 29, 20], [98, 4, 70], [98, 5, 68], [98, 17, 45], [98, 36, 8], [98, 6, 69], [98, 34, 13], [98, 7, 69], [98, 42, 0], [98, 8, 69], [98, 10, 68], [98, 12, 67], [98, 13 , 67], [98, 15, 66], [98, 16, 66], [98, 19, 65], [98, 21, 62], [98, 20, 65], [ 98, 22, 64], [98, 23, 64], [98, 26, 62], [98, 27, 63], [98, 28, 61], [98, 31, 60], [98, 30, 62], [98, 32, 61], [98, 33, 61], [98, 35, 61], [98, 38, 57], [98, 37, 60], [98, 39, 59], [98, 40, 59], [98, 41, 59]], [[99, 1, 68], [99, 0, 71], [99, 5, 62], [99, 16, 42], [99, 13, 48], [99, 11, 52], [99, 2, 70], [99, 10, 55 ], [99, 3, 71], [99, 22, 33], [99, 25, 28], [99, 4, 71], [99, 30, 20], [99, 7, 66], [99, 6, 70], [99, 36, 10], [99, 40, 3], [99, 35, 13], [99, 8, 69], [99, 9, 69], [99, 12, 68], [99, 15, 64], [99, 14, 67], [99, 17, 65], [99, 18, 66], [99, 20, 63], [99, 19, 66], [99, 21, 65], [99, 23, 64], [99, 24, 64], [99, 26, 64], [99, 28, 61], [99, 27, 64], [99, 29, 63], [99, 31, 62], [99, 32, 62], [99, 33, 62], [99, 34, 62], [99, 37, 60], [99, 38, 60], [99, 39, 60], [99, 41+a, 59]], [ [100, 0, 71], [100, 1, 71], [100, 5, 63], [100, 7, 59], [100, 19, 38], [100, 3, 70], [100, 2, 72], [100, 12, 52], [100, 14, 48], [100, 18, 42], [100, 24, 30], [100, 26, 26], [100, 4, 71], [100, 31, 18], [100, 6, 70], [100, 37, 8], [100, 42, 0], [100, 39, 8], [100, 8, 70], [100, 9, 68], [100, 10, 69], [100, 11, 69], [100, 13, 68], [100, 15, 67], [100, 16, 67], [100, 17, 67], [100, 20, 66], [100 , 22, 63], [100, 21, 66], [100, 23, 65], [100, 25, 65], [100, 27, 62], [100, 28 , 64], [100, 29, 62], [100, 30, 63], [100, 32, 63], [100, 34, 60], [100, 33, 63 ], [100, 35, 62], [100, 36, 62], [100, 38, 61], [100, 40, 60], [100, 41, 60]], [[101, 0, 72], [101, 6, 61], [101, 3, 68], [101, 1, 73], [101, 10, 55], [101, 2 , 73], [101, 16, 45], [101, 14, 49], [101, 5, 68], [101, 25, 28], [101, 23, 33] , [101, 4, 72], [101, 21, 38], [101, 36, 10], [101, 31, 20], [101, 35, 13], [ 101, 8, 69], [101, 7, 71], [101, 41, 3], [101, 9, 70], [101, 11, 69], [101, 12, 69], [101, 13, 69], [101, 15, 68], [101, 17, 67], [101, 18, 67], [101, 19, 67], [101, 20, 67], [101, 22, 66], [101, 24, 66], [101, 26, 63], [101, 28, 63], [101 , 27, 65], [101, 29, 64], [101, 30, 64], [101, 33, 62], [101, 32, 64], [101, 34 , 63], [101, 37, 62], [101, 38, 60], [101, 39, 61], [101, 40, 61], [101, 42+a, 60]], [[102, 2, 70], [102, 1, 72], [102, 0, 74], [102, 10, 56], [102, 14, 48], [102, 7, 63], [102, 13, 51], [102, 18, 42], [102, 26, 26], [102, 4, 71], [102, 3, 73], [102, 25, 30], [102, 32, 18], [102, 5, 72], [102, 6, 72], [102, 37, 10] , [102, 43, 0], [102, 28, 30], [102, 42, 3], [102, 8, 71], [102, 9, 71], [102, 11, 70], [102, 12, 70], [102, 15, 68], [102, 16, 68], [102, 17, 68], [102, 20, 66], [102, 19, 68], [102, 21, 67], [102, 22, 67], [102, 23, 67], [102, 24, 67], [102, 27, 65], [102, 29, 65], [102, 30, 65], [102, 31, 65], [102, 35, 58], [102 , 33, 64], [102, 34, 64], [102, 36, 63], [102, 38, 62], [102, 39, 62], [102, 40 , 62], [102, 41, 62]], [[103, 0, 74], [103, 4, 67], [103, 10, 55], [103, 1, 74] , [103, 5, 67], [103, 16, 45], [103, 9, 60], [103, 2, 74], [103, 15, 48], [103, 3, 74], [103, 21, 38], [103, 26, 28], [103, 24, 33], [103, 31, 20], [103, 6, 72 ], [103, 38, 8], [103, 36, 13], [103, 7, 72], [103, 8, 72], [103, 44, 0], [103, 12, 69], [103, 11, 71], [103, 13, 70], [103, 14, 70], [103, 17, 68], [103, 19, 67], [103, 18, 69], [103, 20, 68], [103, 23, 66], [103, 22, 68], [103, 25, 66], [103, 27, 65], [103, 29, 64], [103, 28, 66], [103, 30, 66], [103, 34, 61], [103 , 32, 65], [103, 33, 65], [103, 35, 64], [103, 37, 63], [103, 40, 61], [103, 39 , 63], [103, 41, 62], [103, 42, 62], [103, 43, 62]], [[104, 3, 68], [104, 0, 75 ], [104, 5, 65], [104, 2, 72], [104, 12, 52], [104, 1, 75], [104, 18, 42], [104 , 11, 57], [104, 17, 45], [104, 27, 26], [104, 4, 73], [104, 32, 18], [104, 25, 33], [104, 28, 28], [104, 6, 73], [104, 8, 70], [104, 38, 10], [104, 7, 73], [ 104, 42, 3], [104, 9, 72], [104, 10, 72], [104, 14, 69], [104, 13, 71], [104, 15, 70], [104, 16, 70], [104, 19, 69], [104, 22, 65], [104, 20, 69], [104, 21, 69], [104, 23, 68], [104, 24, 68], [104, 26, 67], [104, 30, 64], [104, 29, 67], [104, 33, 62], [104, 31, 66], [104, 35, 63], [104, 34, 65], [104, 36, 64], [104 , 37, 64], [104, 39, 63], [104, 40, 63], [104, 41, 63], [104, 43+a, 62]], [[105 , 5, 65], [105, 2, 71], [105, 0, 76], [105, 1, 76], [105, 9, 60], [105, 4, 71], [105, 21, 38], [105, 19, 42], [105, 14, 53], [105, 18, 45], [105, 3, 75], [105, 32, 20], [105, 29, 26], [105, 27, 30], [105, 36, 13], [105, 6, 74], [105, 7, 72 ], [105, 39, 8], [105, 44, 0], [105, 8, 73], [105, 10, 72], [105, 11, 72], [105 , 12, 72], [105, 13, 72], [105, 15, 71], [105, 16, 71], [105, 17, 71], [105, 20 , 70], [105, 22, 67], [105, 24, 67], [105, 23, 69], [105, 25, 68], [105, 26, 68 ], [105, 28, 68], [105, 30, 67], [105, 31, 67], [105, 34, 61], [105, 33, 66], [ 105, 35, 65], [105, 37, 64], [105, 38, 64], [105, 40, 64], [105, 42, 61], [105, 41, 64], [105, 43, 63]], [[106, 1, 73], [106, 4, 68], [106, 0, 77], [106, 2, 74 ], [106, 11, 58], [106, 14, 52], [106, 3, 75], [106, 13, 55], [106, 22, 38], [ 106, 20, 42], [106, 25, 33], [106, 33, 18], [106, 28, 28], [106, 5, 75], [106, 6, 73], [106, 38, 10], [106, 7, 74], [106, 34, 20], [106, 43, 3], [106, 8, 74], [106, 9, 74], [106, 10, 74], [106, 12, 73], [106, 16, 70], [106, 15, 72], [106, 17, 71], [106, 18, 71], [106, 19, 71], [106, 21, 70], [106, 23, 69], [106, 24, 69], [106, 26, 68], [106, 27, 69], [106, 29, 68], [106, 31, 64], [106, 30, 68], [106, 32, 67], [106, 35, 65], [106, 36, 65], [106, 37, 65], [106, 40, 63], [106 , 39, 65], [106, 41, 64], [106, 42, 64], [106, 44+a, 63]], [[107, 0, 75], [107, 5, 66], [107, 1, 76], [107, 2, 76], [107, 12, 56], [107, 17, 48], [107, 15, 52] , [107, 3, 76], [107, 10, 63], [107, 4, 76], [107, 29, 26], [107, 27, 30], [107 , 23, 38], [107, 26, 33], [107, 39, 8], [107, 6, 75], [107, 37, 13], [107, 35, 18], [107, 7, 75], [107, 45, 0], [107, 8, 75], [107, 9, 75], [107, 11, 74], [ 107, 13, 73], [107, 14, 73], [107, 16, 72], [107, 19, 70], [107, 18, 72], [107, 20, 71], [107, 21, 71], [107, 22, 71], [107, 24, 70], [107, 25, 70], [107, 28, 69], [107, 30, 66], [107, 31, 68], [107, 32, 66], [107, 33, 67], [107, 34, 67], [107, 36, 66], [107, 38, 66], [107, 40, 63], [107, 41, 65], [107, 42, 63], [107 , 43, 64], [107, 44, 64]], [[108, 4, 68], [108, 0, 77], [108, 2, 74], [108, 1, 77], [108, 12, 58], [108, 15, 52], [108, 19, 45], [108, 3, 77], [108, 28, 28], [108, 18, 48], [108, 6, 73], [108, 5, 76], [108, 27, 33], [108, 30, 28], [108, 39, 10], [108, 34, 20], [108, 43, 3], [108, 7, 76], [108, 9, 73], [108, 8, 76], [108, 42, 10], [108, 10, 75], [108, 11, 75], [108, 13, 74], [108, 14, 74], [108 , 16, 73], [108, 17, 73], [108, 21, 70], [108, 20, 72], [108, 22, 71], [108, 23 , 71], [108, 24, 71], [108, 25, 71], [108, 26, 71], [108, 29, 69], [108, 31, 68 ], [108, 32, 68], [108, 33, 68], [108, 35, 67], [108, 36, 67], [108, 37, 67], [ 108, 38, 67], [108, 40, 66], [108, 41, 66], [108, 44+a, 64]], [[109, 0, 78], [ 109, 4, 71], [109, 3, 74], [109, 1, 78], [109, 10, 61], [109, 2, 78], [109, 13, 56], [109, 29, 26], [109, 27, 30], [109, 21, 42], [109, 18, 48], [109, 20, 45], [109, 5, 76], [109, 35, 18], [109, 40, 8], [109, 38, 13], [109, 6, 77], [109, 8 , 74], [109, 45, 0], [109, 31, 28], [109, 7, 77], [109, 9, 76], [109, 11, 75], [109, 12, 75], [109, 14, 74], [109, 15, 74], [109, 16, 74], [109, 17, 74], [109 , 19, 73], [109, 22, 72], [109, 25, 68], [109, 23, 72], [109, 24, 72], [109, 26 , 71], [109, 28, 70], [109, 30, 69], [109, 33, 67], [109, 32, 69], [109, 34, 68 ], [109, 36, 68], [109, 37, 66], [109, 39, 67], [109, 41, 66], [109, 44, 61], [ 109, 42, 66], [109, 43, 66]], [[110, 0, 79], [110, 2, 76], [110, 1, 79], [110, 5, 71], [110, 13, 55], [110, 9, 65], [110, 3, 78], [110, 14, 56], [110, 20, 45] , [110, 28, 30], [110, 24, 38], [110, 22, 42], [110, 30, 26], [110, 4, 78], [ 110, 34, 20], [110, 7, 76], [110, 6, 78], [110, 44, 3], [110, 39, 13], [110, 42 , 8], [110, 8, 77], [110, 10, 76], [110, 11, 76], [110, 12, 76], [110, 16, 73], [110, 15, 75], [110, 17, 74], [110, 18, 74], [110, 19, 74], [110, 21, 73], [110 , 23, 73], [110, 25, 70], [110, 26, 71], [110, 27, 71], [110, 29, 70], [110, 32 , 68], [110, 31, 70], [110, 33, 69], [110, 35, 69], [110, 37, 66], [110, 36, 69 ], [110, 38, 68], [110, 40, 67], [110, 41, 67], [110, 43, 66], [110, 45+a, 65]] , [[111, 1, 78], [111, 0, 80], [111, 4, 73], [111, 6, 69], [111, 12, 57], [111, 2, 79], [111, 10, 63], [111, 3, 79], [111, 19, 48], [111, 22, 42], [111, 25, 38 ], [111, 31, 26], [111, 35, 18], [111, 5, 79], [111, 28, 33], [111, 9, 74], [ 111, 7, 78], [111, 46, 0], [111, 41, 10], [111, 37, 18], [111, 8, 78], [111, 11 , 77], [111, 13, 76], [111, 15, 72], [111, 14, 76], [111, 16, 75], [111, 17, 75 ], [111, 18, 75], [111, 20, 74], [111, 21, 74], [111, 23, 73], [111, 24, 73], [ 111, 26, 72], [111, 27, 72], [111, 29, 71], [111, 30, 71], [111, 32, 70], [111, 33, 70], [111, 34, 70], [111, 36, 69], [111, 38, 68], [111, 39, 68], [111, 40, 68], [111, 42, 67], [111, 43, 67], [111, 44, 67], [111, 45, 67]], [[112, 1, 77] , [112, 0, 80], [112, 6, 70], [112, 15, 53], [112, 9, 65], [112, 3, 78], [112, 2, 80], [112, 21, 45], [112, 4, 80], [112, 5, 78], [112, 34, 20], [112, 25, 38] , [112, 17, 55], [112, 30, 30], [112, 29, 33], [112, 39, 13], [112, 42, 8], [ 112, 36, 20], [112, 8, 77], [112, 7, 79], [112, 45, 3], [112, 11, 76], [112, 10 , 78], [112, 12, 77], [112, 13, 77], [112, 14, 77], [112, 16, 76], [112, 18, 75 ], [112, 19, 75], [112, 20, 75], [112, 22, 74], [112, 23, 74], [112, 24, 74], [ 112, 26, 73], [112, 27, 73], [112, 28, 73], [112, 31, 71], [112, 32, 71], [112, 33, 71], [112, 35, 70], [112, 37, 69], [112, 38, 69], [112, 40, 68], [112, 41, 68], [112, 44, 66], [112, 43, 68], [112, 46+a, 66]], [[113, 0, 80], [113, 6, 69 ], [113, 1, 81], [113, 2, 79], [113, 12, 61], [113, 14, 57], [113, 9, 68], [113 , 19, 48], [113, 4, 79], [113, 3, 81], [113, 23, 42], [113, 5, 80], [113, 31, 28], [113, 29, 33], [113, 41, 10], [113, 37, 18], [113, 40, 13], [113, 7, 79], [113, 33, 28], [113, 47, 0], [113, 8, 79], [113, 46, 3], [113, 10, 78], [113, 11, 78], [113, 13, 78], [113, 17, 73], [113, 15, 77], [113, 16, 77], [113, 18, 76], [113, 20, 75], [113, 21, 75], [113, 22, 75], [113, 24, 74], [113, 25, 74], [113, 26, 74], [113, 27, 74], [113, 28, 74], [113, 30, 73], [113, 32, 72], [113 , 34, 71], [113, 35, 71], [113, 36, 71], [113, 38, 70], [113, 39, 70], [113, 42 , 69], [113, 44, 66], [113, 43, 69], [113, 45, 68]], [[114, 5, 71], [114, 1, 80 ], [114, 0, 82], [114, 3, 77], [114, 10, 64], [114, 13, 59], [114, 2, 82], [114 , 4, 79], [114, 17, 53], [114, 21, 45], [114, 32, 26], [114, 30, 30], [114, 26, 38], [114, 7, 78], [114, 6, 80], [114, 42, 8], [114, 31, 30], [114, 8, 79], [ 114, 41, 13], [114, 48, 0], [114, 44, 8], [114, 9, 79], [114, 11, 78], [114, 12 , 79], [114, 16, 74], [114, 14, 78], [114, 15, 78], [114, 18, 76], [114, 19, 76 ], [114, 20, 76], [114, 22, 75], [114, 23, 75], [114, 24, 75], [114, 25, 75], [ 114, 27, 75], [114, 28, 73], [114, 29, 74], [114, 34, 70], [114, 33, 72], [114, 36, 70], [114, 35, 72], [114, 37, 71], [114, 38, 71], [114, 39, 71], [114, 40, 71], [114, 43, 69], [114, 45, 68], [114, 46, 68], [114, 47, 68]], [[115, 0, 82] , [115, 4, 76], [115, 9, 66], [115, 1, 83], [115, 2, 81], [115, 7, 72], [115, 14, 59], [115, 16, 55], [115, 3, 82], [115, 23, 42], [115, 21, 48], [115, 5, 81 ], [115, 41, 10], [115, 32, 28], [115, 33, 26], [115, 30, 33], [115, 6, 81], [ 115, 37, 20], [115, 46, 3], [115, 43, 10], [115, 8, 80], [115, 10, 79], [115, 11, 80], [115, 12, 78], [115, 13, 79], [115, 15, 78], [115, 17, 77], [115, 18, 77], [115, 19, 77], [115, 20, 77], [115, 22, 76], [115, 24, 76], [115, 26, 73], [115, 25, 76], [115, 27, 75], [115, 28, 75], [115, 29, 75], [115, 31, 74], [115 , 35, 71], [115, 34, 73], [115, 36, 72], [115, 39, 70], [115, 38, 72], [115, 40 , 71], [115, 42, 70], [115, 44, 69], [115, 45, 69], [115, 47+a, 68]]] : [op(1..k,T)]: end: ####End of Section on playing the game