 
######################################################################
##Chomp3Rows: Save this file as Chomp3Rows. To use it, stay in the   #
##same directory, get into Maple (by typing: maple <Enter> )         #
##and then type:  read Chomp3Rows : <Enter>                          #
##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]<k, given by the`):
print(`table T, finds the set of symbolic losers`):
print(`for 3-rowed positions for which POS[1]=k`):
fi:
 
 
if nops([args])=1 and op(1,[args])=PlayChomp then
print(`PlayChomp(POS): `):
print(`plays 3-row CHOMP, starting at position POS`):
print(`and the human is first-to-move. It uses pre-computed `):
print(`data, computed by procesures Losers `):
print(`It can only handle positions where the smallest row has `):
print(` length <= 115. However, the other two rows can be as large `):
print(` as you wish. For example try Chomp([2000,2000,30]`):
fi:
 
if nops([args])=1 and op(1,[args])=PlayChompP then
print(`PlayChompP(POS): Pictorial version of PlayChomp `):
print(`plays 3-row CHOMP, starting at position POS`):
print(`and the human is first-to-move. It uses pre-computed `):
print(`data, computed by procesures Losers `):
print(`It can only handle positions where the smallest row has `):
print(` length <= 115. However, the other two rows can be as large `):
print(` as you wish. For example try Chomp([20,20,20]`):
print(`POS[3] should be <=20 `):
fi:
 
if nops([args])=1 and op(1,[args])=PTable then
print(`PTable(k): for k<=115, describes the P positions`):
print(`in 3-rowed Chomp with positions (gamma,beta,alpha)`):
fi:
 
if nops([args])=1 and op(1,[args])=RF then
print(`RF(kv,a,b,x,y): given a set, kv,  of symbolic triples where`):
print(`the second componet features a and the third component`):
print(`features b, finds the generating function of the complement`):
print(`in terms of the variables x and y`):
fi:
 
if nops([args])=1 and op(1,[args])=T115 then
print(`T115(a,k) the table of pre-computed symbolic losers up to last row=k`):
print(`k must be an integer 1<=k<=115 , a is a symbol`):
fi:
 
if nops([args])=1 and op(1,[args])=Winners then
print(`Winners(a,b,k,T): The symbolic sets, in terms of`):
print(`a table S, such that S[i] is the set of`):
print(`symbolic winners with POS[1]=i in the form [winner,loser]`):
print(`T is the precomputed table of losers`):
fi:
 
if nops([args])=1 and op(1,[args])=WINNERS then
print(`WINNERS(a,b,k): The symbolic set of Winners, in terms of`):
print(`a table S, such that S[i] is the set of`):
print(`symbolic winners with POS[1]=i in the form [winner,loser]`):
print(`where loser denotes the "right move" `):
print(`and a and b are generic (symbolic) non-negative integers`):
fi:
 
if nops([args])=1 and op(1,[args])=WinningMove then
print(`WinningMove(a,k,T,POS): In 3-Rowed (2D) Chomp `):
print(`Given a symbol a, an integer k,`):
print(`a (pre-computed) Losers' table T, where T[i] `):
print(` is the set of symboalic losers`):
print(`with POS[1]=i, for i=1,..., k, and given a position, POS`):
print(`expressed in the conjugate notaion [#3's, #2's, #1's] `):
print(`finds a winning move, if it exists, otherwise returns 0`):
fi:
 
if nops([args])=1 and op(1,[args])=WinningMove1 then
print(`WinningMove1(POS): Given a position POS, finds a winning move,`):
print(`using pre-computed data. nops(POS)<=3 and POS[1]<=115`):
fi:
 
if nops([args])=1 and op(1,[args])=yafe then 
print(`yafe(resh,a): given a list of triples`):
print(`all with the`):
print(`same first component, and using the symbol a,`):
print(`that denotes outputs a list `):
print(`whose (i+1)^th entry is the POS[3] of the P position with`):
print(`POS[2]=i if the last entry is a *, then it goes for ever`):
print(`with the last entry`):
fi:
 
end:
 
 
 
#CheckNegative(f,x,y): Given a rational function of the form
#P(x,y)+Q(y)/(1-x), checks that all its power-series
#coefficient are non-positive
#if also returns false if the test can't be applied
CheckNegative:=proc(f,x,y)
local P,Q,P1,degx,degy,coe1,coe2,i:
Q:=expand(subs(x=1,normal((1-x)*f))):
 
if denom(normal(Q))<>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)<c0 and 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<nops(T1) then
ERROR(`bad input`):
fi:
 
T:=T1: 
for i from nops(T1)+1 to k do 
T:=[op(T),NewLosers(T,a,i)]
od:
 
T:
end:
 
 
 
#LosersDoubleCheck(a,k): Like Loses, but at the end double-checks
#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
LosersDoubleCheck:=proc(a,k) 
local T,i,W,j,gu,lu,S,f:
 
for i from 1 to k do 
T[i]:=NewLosers(T,a,i):
od:
 
W:=Winners(a,b,k,T):
 
for i from 1 to k do
lu:=convert(T[i],set):
gu:={seq(W[i][j][1],j=1..nops(W[i]))}:
f:=RF(lu union gu,a,b,x,y):
 
if (not CheckNegative(f,x,y)) or DoesFit4(lu,gu,a,b) then
print(`The conjectured list of losers failed when the number`):
print(`of 3's (first component) is`, i):
print(`Up to then, it is rigorously proved `):
for j from 1 to i-1 do
S[j]:=T[j]:
od:
RETURN(S):
fi:
od:
 
T:
end:
 
 
#NewLosers(T,a,k) : Knowing the losers for
#3-rowed Chomp with POS[1]<k, given by the
#table T, finds the set of symbolic losers
#for 3-rowed positions for which POS[1]=k
#K is the "confidence level"
NewLosers:=proc(T,a,k) 
local Losers,Winners,i,lu,b,n,mua,W,f,x,y:
Losers:=[]:
Winners:=Ini(T,k,a):
 
lu:=HK(Winners,a,b,k):
while lu<>{} 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;<CR>`):
 
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;<CR>`):
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;<CR>`):
 
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;<CR>`):
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
 
 
