algDict = {0: '0 ', 1: 'U ', 2: 'U ', 3: 'H ', 4: 'Z ', 5: 'A ',
6: 'A ', 7: 'E ', 8: 'J ', 9: 'J ', 10: 'R ', 11: 'R ',
12: 'G ', 13: 'G ', 14: 'G ', 15: 'G ', 16: 'N ', 17: 'N ',
18: 'T ', 19: 'Y ', 20: 'F ', 21: 'V '}
highest = 0
algs = ["",
"R' U R' U' R' U' R' U R U R2",
"R U' R U R U R U' R' U' R2",
"R2 U2 R U2 R2 U2 R2 U2 R U2 R2",
"R2 U R2 U' R2 F2 R2 U' F2 U R2 F2",
"R U' R F2 R' U R' U' R2 F2 R2",
"R2 F2 R2 U R U' R F2 R' U R'",
"R U R' U R' U' R F' R U R' U' R' F R2 U' R2 U R",
"F' U2 R' U F U' F' U' R U' F",
"R U R' F' R U R' U' R' F R2 U' R'",
"R' U2 R U2 R' F R U R' U' R' F' R2",
"F' R' U' R F' R' U F' U' F' U F R F2",
"F2 R2 U' R' U' R F2 R' U R F2 U R2 F2",
"F2 R2 U' F2 R' U' R F2 R' U R U R2 F2",
"R' U' R2 U' R2 U' R U2 R2 F U R' U' R F' R",
"R' F R' U R U' F' R2 U2 R' U R2 U R2 U R",
"F' R U R' U' R' F R2 F U' R' U' R U F' R",
"R' U R' F R F' R U' R' F' U F R U R' U' R",
"R U R' U' R' F R2 U' R' U' R U R' F'",
"F R U' R' U' R U R' F' R U R' U' R' F R F'",
"F' U2 F' U' R' F' R2 U' R' U R' F R U' F",
"R U' R U F R F2 U F U' F R' F' R'"]
def tryOne(aTemp, this): #string of alg trying, string of alg trying to solve
wtf = MyCube(); wtf.doAlg(this); wtf.doUp()
for try1 in range(4):
wtf.doU(); wtf2 = wtf
wtf2.doAlg(aTemp)
if wtf2.checkSolved(): return True
return False
def tryTwo(aTemp, bTemp, this):
now = MyCube(); now.doAlg(this); now.doUp()
for try1 in range(4):
now.doU(); mow = now
mow.doAlg(aTemp)
for try2 in range(4):
mow.doU(); oow = mow
oow.doAlg(bTemp)
if oow.checkSolved(): return True
return False
def tryCombo(a, b, listNow):
for alg in range(0, len(algs)):
if listNow[alg] == False:
aCube = MyCube(); aCube.doAlg(algs[alg])
## if aCube.checkSolved(): #basically, check if it's already good (case algs[0])
## listNow[alg] = True; print 'try000 solved: ', algs[alg]; continue
##
## if tryOne(a, algs[alg]): listNow[alg] = True; print 'try1 a solved: ', algs[alg]; continue
## if tryOne(b, algs[alg]): listNow[alg] = True; print 'try1 b solved: ', algs[alg]; continue
##
## if tryTwo(a, b, algs[alg]): listNow[alg] = True; print 'try2ab solved: ', algs[alg]; continue
## if tryTwo(b, a, algs[alg]): listNow[alg] = True; print 'try2ba solved: ', algs[alg]; continue
##
## if tryTwo(a, a, algs[alg]): listNow[alg] = True; print 'try2aa solved: ', algs[alg]; continue
## if tryTwo(b, b, algs[alg]): listNow[alg] = True; print 'try2bb solved: ', algs[alg]; continue
if aCube.checkSolved(): #basically, check if it's already good (case algs[0])
listNow[alg] = True; continue
elif tryOne(a, algs[alg]): listNow[alg] = True; continue
elif tryOne(b, algs[alg]): listNow[alg] = True; continue
elif tryTwo(a, b, algs[alg]): listNow[alg] = True; continue
elif tryTwo(b, a, algs[alg]): listNow[alg] = True; continue
elif tryTwo(a, a, algs[alg]): listNow[alg] = True; continue
elif tryTwo(b, b, algs[alg]): listNow[alg] = True; continue
#else: return listNow
return listNow
##################################################
class MyCube:
"""A virtual 3x3x3 matrix"""
def __init__(self):
self.uSide = ['U', 'U', 'U', 'U', 'U', 'U', 'U', 'U'] #URF, UF, etc
self.fSide = ['F', 'F', 'F', 'F', 'F', 'F', 'F', 'F'] #FRD, FD, etc
self.lSide = ['L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'] #LFD, LD, etc
self.bSide = ['B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'] #BRD, BD, etc
self.rSide = ['R', 'R', 'R', 'R', 'R', 'R', 'R', 'R'] #RBD, RD, etc
self.dSide = ['D', 'D', 'D', 'D', 'D', 'D', 'D', 'D'] #DBR, DR, etc
def doU(self):
self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5], self.uSide[6], self.uSide[7] = self.uSide[6], self.uSide[7], self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5]
self.fSide[5], self.lSide[5], self.bSide[1], self.rSide[5] = self.rSide[5], self.fSide[5], self.lSide[5], self.bSide[1]
self.fSide[6], self.lSide[6], self.bSide[2], self.rSide[6] = self.rSide[6], self.fSide[6], self.lSide[6], self.bSide[2]
self.fSide[7], self.lSide[7], self.bSide[3], self.rSide[7] = self.rSide[7], self.fSide[7], self.lSide[7], self.bSide[3]
def doUp(self):
self.uSide[6], self.uSide[7], self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5] = self.uSide[0], self.uSide[1], self.uSide[2], self.uSide[3], self.uSide[4], self.uSide[5], self.uSide[6], self.uSide[7]
self.rSide[5], self.fSide[5], self.lSide[5], self.bSide[1] = self.fSide[5], self.lSide[5], self.bSide[1], self.rSide[5]
self.rSide[6], self.fSide[6], self.lSide[6], self.bSide[2] = self.fSide[6], self.lSide[6], self.bSide[2], self.rSide[6]
self.rSide[7], self.fSide[7], self.lSide[7], self.bSide[3] = self.fSide[7], self.lSide[7], self.bSide[3], self.rSide[7]
def doR(self):
self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5], self.rSide[6], self.rSide[7] = self.rSide[6], self.rSide[7], self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5]
self.fSide[7], self.uSide[7], self.bSide[7], self.dSide[7] = self.dSide[7], self.fSide[7], self.uSide[7], self.bSide[7]
self.fSide[0], self.uSide[0], self.bSide[0], self.dSide[0] = self.dSide[0], self.fSide[0], self.uSide[0], self.bSide[0]
self.fSide[1], self.uSide[1], self.bSide[1], self.dSide[1] = self.dSide[1], self.fSide[1], self.uSide[1], self.bSide[1]
def doRp(self):
self.rSide[6], self.rSide[7], self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5] = self.rSide[0], self.rSide[1], self.rSide[2], self.rSide[3], self.rSide[4], self.rSide[5], self.rSide[6], self.rSide[7]
self.dSide[7], self.fSide[7], self.uSide[7], self.bSide[7] = self.fSide[7], self.uSide[7], self.bSide[7], self.dSide[7]
self.dSide[0], self.fSide[0], self.uSide[0], self.bSide[0] = self.fSide[0], self.uSide[0], self.bSide[0], self.dSide[0]
self.dSide[1], self.fSide[1], self.uSide[1], self.bSide[1] = self.fSide[1], self.uSide[1], self.bSide[1], self.dSide[1]
def doF(self):
self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5], self.fSide[6], self.fSide[7] = self.fSide[6], self.fSide[7], self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5]
self.uSide[1], self.rSide[3], self.dSide[5], self.lSide[7] = self.lSide[7], self.uSide[1], self.rSide[3], self.dSide[5]
self.uSide[2], self.rSide[4], self.dSide[6], self.lSide[0] = self.lSide[0], self.uSide[2], self.rSide[4], self.dSide[6]
self.uSide[3], self.rSide[5], self.dSide[7], self.lSide[1] = self.lSide[1], self.uSide[3], self.rSide[5], self.dSide[7]
def doFp(self):
self.fSide[6], self.fSide[7], self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5] = self.fSide[0], self.fSide[1], self.fSide[2], self.fSide[3], self.fSide[4], self.fSide[5], self.fSide[6], self.fSide[7]
self.lSide[7], self.uSide[1], self.rSide[3], self.dSide[5] = self.uSide[1], self.rSide[3], self.dSide[5], self.lSide[7]
self.lSide[0], self.uSide[2], self.rSide[4], self.dSide[6] = self.uSide[2], self.rSide[4], self.dSide[6], self.lSide[0]
self.lSide[1], self.uSide[3], self.rSide[5], self.dSide[7] = self.uSide[3], self.rSide[5], self.dSide[7], self.lSide[1]
def doAlg(self, algString):
ialg = algString.replace('(', '') #get rid of unwanted
ialg = ialg.replace(')', '') # or otherwise unneeded characters
ialg = ialg.replace("2'", '2') # incl. whitespace, paren., 2's
ialg = ialg.replace(' ', ' ')
parts = ialg.split(' ') #Divide the alg up into individual moves
for part in parts:
if part == 'U': self.doU()
elif part == 'U2': self.doU(); self.doU()
elif part == "U'": self.doUp()
elif part == 'F': self.doF()
elif part == 'F2': self.doF(); self.doF()
elif part == "F'": self.doFp()
elif part == 'R': self.doR()
elif part == 'R2': self.doR(); self.doR()
elif part == "R'": self.doRp()
def printCube(self):
print
print " ", self.bSide[5] + self.bSide[6] + self.bSide[7]
print " ", self.bSide[4] + "b" + self.bSide[0]
print " ", self.bSide[3] + self.bSide[2] + self.bSide[1] + '\n'
print " ", self.uSide[5] + self.uSide[6] + self.uSide[7]
print " ", self.uSide[4] + "u" + self.uSide[0]
print " ", self.uSide[3] + self.uSide[2] + self.uSide[1] + '\n'
print "" + self.lSide[5] + self.lSide[6] + self.lSide[7], self.fSide[5] + self.fSide[6] + self.fSide[7], self.rSide[5] + self.rSide[6] + self.rSide[7]
print "" + self.lSide[4] + 'l' + self.lSide[0], self.fSide[4] + 'f' + self.fSide[0], self.rSide[4] + 'r' + self.rSide[0]
print "" + self.lSide[3] + self.lSide[2] + self.lSide[1], self.fSide[3] + self.fSide[2] + self.fSide[1], self.rSide[3] + self.rSide[2] + self.rSide[1] + '\n'
print " ", self.dSide[5] + self.dSide[6] + self.dSide[7]
print " ", self.dSide[4] + "d" + self.dSide[0]
print " ", self.dSide[3] + self.dSide[2] + self.dSide[1] + '\n'
def printMin(self):
print
print " ", self.bSide[3] + self.bSide[2] + self.bSide[1] + '\n'
print " ", self.uSide[5] + self.uSide[6] + self.uSide[7]
print " ", self.uSide[4] + "u" + self.uSide[0]
print " ", self.uSide[3] + self.uSide[2] + self.uSide[1] + '\n'
print "" + self.lSide[5] + self.lSide[6] + self.lSide[7], self.fSide[5] + self.fSide[6] + self.fSide[7], self.rSide[5] + self.rSide[6] + self.rSide[7]
def checkSolved(self):
if self.uSide[0] == self.uSide[1] == self.uSide[2] == self.uSide[3] == self.uSide[4] == self.uSide[5] == self.uSide[6] == self.uSide[7]:
if self.fSide[5] == self.fSide[6] == self.fSide[7]:
if self.lSide[5] == self.lSide[6] == self.lSide[7]:
if self.rSide[5] == self.rSide[6] == self.rSide[7]:
if self.bSide[3] == self.bSide[2] == self.bSide[1]:
return True
return False
##################################################
for l1 in range(6):
#for l1 in range(len(algs)):
print "L1: ", l1
for l2 in range(l1):
for l3 in range(l2):
algsDone = [False]*len(algs)
algsDone = tryCombo(algs[l1], algs[l2], algsDone)
algsDone = tryCombo(algs[l1], algs[l3], algsDone)
algsDone = tryCombo(algs[l2], algs[l3], algsDone)
if sum(algsDone) >= highest:
print "Algs used: ", l1, l2, l3
print "Cases solved: " + str(sum(algsDone)) + " out of " + str(len(algs))
print algsDone; print
highest = sum(algsDone)
YWxnRGljdCA9IHswOiAgJzAgJywgMTogICdVICcsIDI6ICAnVSAnLCAzOiAgJ0ggJywgNDogICdaICcsIDU6ICAnQSAnLAogICAgICAgICAgIDY6ICAnQSAnLCA3OiAgJ0UgJywgODogICdKICcsIDk6ICAnSiAnLCAxMDogJ1IgJywgMTE6ICdSICcsCiAgICAgICAgICAgMTI6ICdHICcsIDEzOiAnRyAnLCAxNDogJ0cgJywgMTU6ICdHICcsIDE2OiAnTiAnLCAxNzogJ04gJywKICAgICAgICAgICAxODogJ1QgJywgMTk6ICdZICcsIDIwOiAnRiAnLCAyMTogJ1YgJ30KaGlnaGVzdCA9IDAKCmFsZ3MgPSBbIiIsCiJSJyBVIFInIFUnIFInIFUnIFInIFUgUiBVIFIyIiwKIlIgVScgUiBVIFIgVSBSIFUnIFInIFUnIFIyIiwKIlIyIFUyIFIgVTIgUjIgVTIgUjIgVTIgUiBVMiBSMiIsCiJSMiBVIFIyIFUnIFIyIEYyIFIyIFUnIEYyIFUgUjIgRjIiLAoiUiBVJyBSIEYyIFInIFUgUicgVScgUjIgRjIgUjIiLAoiUjIgRjIgUjIgVSBSIFUnIFIgRjIgUicgVSBSJyIsCiJSIFUgUicgVSBSJyBVJyBSIEYnIFIgVSBSJyBVJyBSJyBGIFIyIFUnIFIyIFUgUiIsCiJGJyBVMiBSJyBVIEYgVScgRicgVScgUiBVJyBGIiwKIlIgVSBSJyBGJyBSIFUgUicgVScgUicgRiBSMiBVJyBSJyIsCiJSJyBVMiBSIFUyIFInIEYgUiBVIFInIFUnIFInIEYnIFIyIiwKIkYnIFInIFUnIFIgRicgUicgVSBGJyBVJyBGJyBVIEYgUiBGMiIsCiJGMiBSMiBVJyBSJyBVJyBSIEYyIFInIFUgUiBGMiBVIFIyIEYyIiwKIkYyIFIyIFUnIEYyIFInIFUnIFIgRjIgUicgVSBSIFUgUjIgRjIiLAoiUicgVScgUjIgVScgUjIgVScgUiBVMiBSMiBGIFUgUicgVScgUiBGJyBSIiwKIlInIEYgUicgVSBSIFUnIEYnIFIyIFUyIFInIFUgUjIgVSBSMiBVIFIiLAoiRicgUiBVIFInIFUnIFInIEYgUjIgRiBVJyBSJyBVJyBSIFUgRicgUiIsCiJSJyBVIFInIEYgUiBGJyBSIFUnIFInIEYnIFUgRiBSIFUgUicgVScgUiIsCiJSIFUgUicgVScgUicgRiBSMiBVJyBSJyBVJyBSIFUgUicgRiciLAoiRiBSIFUnIFInIFUnIFIgVSBSJyBGJyBSIFUgUicgVScgUicgRiBSIEYnIiwKIkYnIFUyIEYnIFUnIFInIEYnIFIyIFUnIFInIFUgUicgRiBSIFUnIEYiLAoiUiBVJyBSIFUgRiBSIEYyIFUgRiBVJyBGIFInIEYnIFInIl0KCgpkZWYgdHJ5T25lKGFUZW1wLCB0aGlzKToJI3N0cmluZyBvZiBhbGcgdHJ5aW5nLCBzdHJpbmcgb2YgYWxnIHRyeWluZyB0byBzb2x2ZQogICAgd3RmID0gTXlDdWJlKCk7IHd0Zi5kb0FsZyh0aGlzKTsgd3RmLmRvVXAoKQogICAgZm9yIHRyeTEgaW4gcmFuZ2UoNCk6CiAgICAgICAgd3RmLmRvVSgpOyB3dGYyID0gd3RmCiAgICAgICAgd3RmMi5kb0FsZyhhVGVtcCkKCiAgICAgICAgaWYgd3RmMi5jaGVja1NvbHZlZCgpOiByZXR1cm4gVHJ1ZQoKICAgIHJldHVybiBGYWxzZQoKZGVmIHRyeVR3byhhVGVtcCwgYlRlbXAsIHRoaXMpOgogICAgbm93ID0gTXlDdWJlKCk7IG5vdy5kb0FsZyh0aGlzKTsgbm93LmRvVXAoKQogICAgZm9yIHRyeTEgaW4gcmFuZ2UoNCk6CiAgICAgIG5vdy5kb1UoKTsgbW93ID0gbm93CiAgICAgIG1vdy5kb0FsZyhhVGVtcCkKICAgICAgZm9yIHRyeTIgaW4gcmFuZ2UoNCk6CiAgICAgICAgICBtb3cuZG9VKCk7IG9vdyA9IG1vdwogICAgICAgICAgb293LmRvQWxnKGJUZW1wKQogICAgICAgICAgaWYgb293LmNoZWNrU29sdmVkKCk6IHJldHVybiBUcnVlCiAgICAKICAgIHJldHVybiBGYWxzZQoKZGVmIHRyeUNvbWJvKGEsIGIsIGxpc3ROb3cpOgogICAgZm9yIGFsZyBpbiByYW5nZSgwLCBsZW4oYWxncykpOgogICAgICAgIGlmIGxpc3ROb3dbYWxnXSA9PSBGYWxzZToKICAgICAgICAgICAgCiAgICAgICAgICAgIGFDdWJlID0gTXlDdWJlKCk7IGFDdWJlLmRvQWxnKGFsZ3NbYWxnXSkKCiMjICAgICAgICAgICAgaWYgYUN1YmUuY2hlY2tTb2x2ZWQoKTogCQkjYmFzaWNhbGx5LCBjaGVjayBpZiBpdCdzIGFscmVhZHkgZ29vZCAoY2FzZSBhbGdzWzBdKQojIyAgICAgICAgICAgICAgICBsaXN0Tm93W2FsZ10gPSBUcnVlOyBwcmludCAndHJ5MDAwIHNvbHZlZDogJywgYWxnc1thbGddOyBjb250aW51ZQojIyAgICAgICAgICAgICAgICAKIyMgICAgICAgICAgICBpZiB0cnlPbmUoYSwgYWxnc1thbGddKTogICAgbGlzdE5vd1thbGddID0gVHJ1ZTsgcHJpbnQgJ3RyeTEgYSBzb2x2ZWQ6ICcsIGFsZ3NbYWxnXTsgIGNvbnRpbnVlCiMjICAgICAgICAgICAgaWYgdHJ5T25lKGIsIGFsZ3NbYWxnXSk6ICAgIGxpc3ROb3dbYWxnXSA9IFRydWU7IHByaW50ICd0cnkxIGIgc29sdmVkOiAnLCBhbGdzW2FsZ107ICBjb250aW51ZQojIwojIyAgICAgICAgICAgIGlmIHRyeVR3byhhLCBiLCBhbGdzW2FsZ10pOiBsaXN0Tm93W2FsZ10gPSBUcnVlOyBwcmludCAndHJ5MmFiIHNvbHZlZDogJywgYWxnc1thbGddOyBjb250aW51ZQojIyAgICAgICAgICAgIGlmIHRyeVR3byhiLCBhLCBhbGdzW2FsZ10pOiBsaXN0Tm93W2FsZ10gPSBUcnVlOyBwcmludCAndHJ5MmJhIHNvbHZlZDogJywgYWxnc1thbGddOyBjb250aW51ZQojIwojIyAgICAgICAgICAgIGlmIHRyeVR3byhhLCBhLCBhbGdzW2FsZ10pOiBsaXN0Tm93W2FsZ10gPSBUcnVlOyBwcmludCAndHJ5MmFhIHNvbHZlZDogJywgYWxnc1thbGddOyAgY29udGludWUKIyMgICAgICAgICAgICBpZiB0cnlUd28oYiwgYiwgYWxnc1thbGddKTogbGlzdE5vd1thbGddID0gVHJ1ZTsgcHJpbnQgJ3RyeTJiYiBzb2x2ZWQ6ICcsIGFsZ3NbYWxnXTsgIGNvbnRpbnVlCgogICAgICAgICAgICBpZiBhQ3ViZS5jaGVja1NvbHZlZCgpOiAJCSNiYXNpY2FsbHksIGNoZWNrIGlmIGl0J3MgYWxyZWFkeSBnb29kIChjYXNlIGFsZ3NbMF0pCiAgICAgICAgICAgICAgICBsaXN0Tm93W2FsZ10gPSBUcnVlOyBjb250aW51ZQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIGVsaWYgdHJ5T25lKGEsIGFsZ3NbYWxnXSk6ICAgIGxpc3ROb3dbYWxnXSA9IFRydWU7ICBjb250aW51ZQogICAgICAgICAgICBlbGlmIHRyeU9uZShiLCBhbGdzW2FsZ10pOiAgICBsaXN0Tm93W2FsZ10gPSBUcnVlOyAgY29udGludWUKCiAgICAgICAgICAgIGVsaWYgdHJ5VHdvKGEsIGIsIGFsZ3NbYWxnXSk6IGxpc3ROb3dbYWxnXSA9IFRydWU7IGNvbnRpbnVlCiAgICAgICAgICAgIGVsaWYgdHJ5VHdvKGIsIGEsIGFsZ3NbYWxnXSk6IGxpc3ROb3dbYWxnXSA9IFRydWU7IGNvbnRpbnVlCgogICAgICAgICAgICBlbGlmIHRyeVR3byhhLCBhLCBhbGdzW2FsZ10pOiBsaXN0Tm93W2FsZ10gPSBUcnVlOyAgY29udGludWUKICAgICAgICAgICAgZWxpZiB0cnlUd28oYiwgYiwgYWxnc1thbGddKTogbGlzdE5vd1thbGddID0gVHJ1ZTsgIGNvbnRpbnVlCgogICAgICAgICAgICAjZWxzZTogcmV0dXJuIGxpc3ROb3cKICAgICAgICAgICAgCiAgICByZXR1cm4gbGlzdE5vdwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKY2xhc3MgTXlDdWJlOgogICIiIkEgdmlydHVhbCAzeDN4MyBtYXRyaXgiIiIKICBkZWYgX19pbml0X18oc2VsZik6CiAgICBzZWxmLnVTaWRlID0gWydVJywgJ1UnLCAnVScsICdVJywgJ1UnLCAnVScsICdVJywgJ1UnXSAjVVJGLCBVRiwgZXRjCiAgICBzZWxmLmZTaWRlID0gWydGJywgJ0YnLCAnRicsICdGJywgJ0YnLCAnRicsICdGJywgJ0YnXSAjRlJELCBGRCwgZXRjCiAgICBzZWxmLmxTaWRlID0gWydMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnXSAjTEZELCBMRCwgZXRjCiAgICBzZWxmLmJTaWRlID0gWydCJywgJ0InLCAnQicsICdCJywgJ0InLCAnQicsICdCJywgJ0InXSAjQlJELCBCRCwgZXRjCiAgICBzZWxmLnJTaWRlID0gWydSJywgJ1InLCAnUicsICdSJywgJ1InLCAnUicsICdSJywgJ1InXSAjUkJELCBSRCwgZXRjCiAgICBzZWxmLmRTaWRlID0gWydEJywgJ0QnLCAnRCcsICdEJywgJ0QnLCAnRCcsICdEJywgJ0QnXSAjREJSLCBEUiwgZXRjCgoKICBkZWYgZG9VKHNlbGYpOgoKICAgIHNlbGYudVNpZGVbMF0sIHNlbGYudVNpZGVbMV0sIHNlbGYudVNpZGVbMl0sIHNlbGYudVNpZGVbM10sIHNlbGYudVNpZGVbNF0sIHNlbGYudVNpZGVbNV0sIHNlbGYudVNpZGVbNl0sIHNlbGYudVNpZGVbN10gPSBzZWxmLnVTaWRlWzZdLCBzZWxmLnVTaWRlWzddLCBzZWxmLnVTaWRlWzBdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLnVTaWRlWzJdLCBzZWxmLnVTaWRlWzNdLCBzZWxmLnVTaWRlWzRdLCBzZWxmLnVTaWRlWzVdCgogICAgc2VsZi5mU2lkZVs1XSwgc2VsZi5sU2lkZVs1XSwgc2VsZi5iU2lkZVsxXSwgc2VsZi5yU2lkZVs1XSA9IHNlbGYuclNpZGVbNV0sIHNlbGYuZlNpZGVbNV0sIHNlbGYubFNpZGVbNV0sIHNlbGYuYlNpZGVbMV0KICAgIHNlbGYuZlNpZGVbNl0sIHNlbGYubFNpZGVbNl0sIHNlbGYuYlNpZGVbMl0sIHNlbGYuclNpZGVbNl0gPSBzZWxmLnJTaWRlWzZdLCBzZWxmLmZTaWRlWzZdLCBzZWxmLmxTaWRlWzZdLCBzZWxmLmJTaWRlWzJdCiAgICBzZWxmLmZTaWRlWzddLCBzZWxmLmxTaWRlWzddLCBzZWxmLmJTaWRlWzNdLCBzZWxmLnJTaWRlWzddID0gc2VsZi5yU2lkZVs3XSwgc2VsZi5mU2lkZVs3XSwgc2VsZi5sU2lkZVs3XSwgc2VsZi5iU2lkZVszXQoKICBkZWYgZG9VcChzZWxmKToKICAgIHNlbGYudVNpZGVbNl0sIHNlbGYudVNpZGVbN10sIHNlbGYudVNpZGVbMF0sIHNlbGYudVNpZGVbMV0sIHNlbGYudVNpZGVbMl0sIHNlbGYudVNpZGVbM10sIHNlbGYudVNpZGVbNF0sIHNlbGYudVNpZGVbNV0gPSBzZWxmLnVTaWRlWzBdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLnVTaWRlWzJdLCBzZWxmLnVTaWRlWzNdLCBzZWxmLnVTaWRlWzRdLCBzZWxmLnVTaWRlWzVdLCBzZWxmLnVTaWRlWzZdLCBzZWxmLnVTaWRlWzddCgogICAgc2VsZi5yU2lkZVs1XSwgc2VsZi5mU2lkZVs1XSwgc2VsZi5sU2lkZVs1XSwgc2VsZi5iU2lkZVsxXSA9IHNlbGYuZlNpZGVbNV0sIHNlbGYubFNpZGVbNV0sIHNlbGYuYlNpZGVbMV0sIHNlbGYuclNpZGVbNV0KICAgIHNlbGYuclNpZGVbNl0sIHNlbGYuZlNpZGVbNl0sIHNlbGYubFNpZGVbNl0sIHNlbGYuYlNpZGVbMl0gPSBzZWxmLmZTaWRlWzZdLCBzZWxmLmxTaWRlWzZdLCBzZWxmLmJTaWRlWzJdLCBzZWxmLnJTaWRlWzZdCiAgICBzZWxmLnJTaWRlWzddLCBzZWxmLmZTaWRlWzddLCBzZWxmLmxTaWRlWzddLCBzZWxmLmJTaWRlWzNdID0gc2VsZi5mU2lkZVs3XSwgc2VsZi5sU2lkZVs3XSwgc2VsZi5iU2lkZVszXSwgc2VsZi5yU2lkZVs3XQoKICBkZWYgZG9SKHNlbGYpOgoKICAgIHNlbGYuclNpZGVbMF0sIHNlbGYuclNpZGVbMV0sIHNlbGYuclNpZGVbMl0sIHNlbGYuclNpZGVbM10sIHNlbGYuclNpZGVbNF0sIHNlbGYuclNpZGVbNV0sIHNlbGYuclNpZGVbNl0sIHNlbGYuclNpZGVbN10gPSBzZWxmLnJTaWRlWzZdLCBzZWxmLnJTaWRlWzddLCBzZWxmLnJTaWRlWzBdLCBzZWxmLnJTaWRlWzFdLCBzZWxmLnJTaWRlWzJdLCBzZWxmLnJTaWRlWzNdLCBzZWxmLnJTaWRlWzRdLCBzZWxmLnJTaWRlWzVdCiAgICAgIAogICAgc2VsZi5mU2lkZVs3XSwgc2VsZi51U2lkZVs3XSwgc2VsZi5iU2lkZVs3XSwgc2VsZi5kU2lkZVs3XSA9IHNlbGYuZFNpZGVbN10sIHNlbGYuZlNpZGVbN10sIHNlbGYudVNpZGVbN10sIHNlbGYuYlNpZGVbN10KICAgIHNlbGYuZlNpZGVbMF0sIHNlbGYudVNpZGVbMF0sIHNlbGYuYlNpZGVbMF0sIHNlbGYuZFNpZGVbMF0gPSBzZWxmLmRTaWRlWzBdLCBzZWxmLmZTaWRlWzBdLCBzZWxmLnVTaWRlWzBdLCBzZWxmLmJTaWRlWzBdCiAgICBzZWxmLmZTaWRlWzFdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLmJTaWRlWzFdLCBzZWxmLmRTaWRlWzFdID0gc2VsZi5kU2lkZVsxXSwgc2VsZi5mU2lkZVsxXSwgc2VsZi51U2lkZVsxXSwgc2VsZi5iU2lkZVsxXQoKICBkZWYgZG9ScChzZWxmKToKICAgIHNlbGYuclNpZGVbNl0sIHNlbGYuclNpZGVbN10sIHNlbGYuclNpZGVbMF0sIHNlbGYuclNpZGVbMV0sIHNlbGYuclNpZGVbMl0sIHNlbGYuclNpZGVbM10sIHNlbGYuclNpZGVbNF0sIHNlbGYuclNpZGVbNV0gPSBzZWxmLnJTaWRlWzBdLCBzZWxmLnJTaWRlWzFdLCBzZWxmLnJTaWRlWzJdLCBzZWxmLnJTaWRlWzNdLCBzZWxmLnJTaWRlWzRdLCBzZWxmLnJTaWRlWzVdLCBzZWxmLnJTaWRlWzZdLCBzZWxmLnJTaWRlWzddCgogICAgc2VsZi5kU2lkZVs3XSwgc2VsZi5mU2lkZVs3XSwgc2VsZi51U2lkZVs3XSwgc2VsZi5iU2lkZVs3XSA9IHNlbGYuZlNpZGVbN10sIHNlbGYudVNpZGVbN10sIHNlbGYuYlNpZGVbN10sIHNlbGYuZFNpZGVbN10KICAgIHNlbGYuZFNpZGVbMF0sIHNlbGYuZlNpZGVbMF0sIHNlbGYudVNpZGVbMF0sIHNlbGYuYlNpZGVbMF0gPSBzZWxmLmZTaWRlWzBdLCBzZWxmLnVTaWRlWzBdLCBzZWxmLmJTaWRlWzBdLCBzZWxmLmRTaWRlWzBdCiAgICBzZWxmLmRTaWRlWzFdLCBzZWxmLmZTaWRlWzFdLCBzZWxmLnVTaWRlWzFdLCBzZWxmLmJTaWRlWzFdID0gc2VsZi5mU2lkZVsxXSwgc2VsZi51U2lkZVsxXSwgc2VsZi5iU2lkZVsxXSwgc2VsZi5kU2lkZVsxXQoKICBkZWYgZG9GKHNlbGYpOgogICAgc2VsZi5mU2lkZVswXSwgc2VsZi5mU2lkZVsxXSwgc2VsZi5mU2lkZVsyXSwgc2VsZi5mU2lkZVszXSwgc2VsZi5mU2lkZVs0XSwgc2VsZi5mU2lkZVs1XSwgc2VsZi5mU2lkZVs2XSwgc2VsZi5mU2lkZVs3XSA9IHNlbGYuZlNpZGVbNl0sIHNlbGYuZlNpZGVbN10sIHNlbGYuZlNpZGVbMF0sIHNlbGYuZlNpZGVbMV0sIHNlbGYuZlNpZGVbMl0sIHNlbGYuZlNpZGVbM10sIHNlbGYuZlNpZGVbNF0sIHNlbGYuZlNpZGVbNV0KCiAgICBzZWxmLnVTaWRlWzFdLCBzZWxmLnJTaWRlWzNdLCBzZWxmLmRTaWRlWzVdLCBzZWxmLmxTaWRlWzddID0gc2VsZi5sU2lkZVs3XSwgc2VsZi51U2lkZVsxXSwgc2VsZi5yU2lkZVszXSwgc2VsZi5kU2lkZVs1XQogICAgc2VsZi51U2lkZVsyXSwgc2VsZi5yU2lkZVs0XSwgc2VsZi5kU2lkZVs2XSwgc2VsZi5sU2lkZVswXSA9IHNlbGYubFNpZGVbMF0sIHNlbGYudVNpZGVbMl0sIHNlbGYuclNpZGVbNF0sIHNlbGYuZFNpZGVbNl0KICAgIHNlbGYudVNpZGVbM10sIHNlbGYuclNpZGVbNV0sIHNlbGYuZFNpZGVbN10sIHNlbGYubFNpZGVbMV0gPSBzZWxmLmxTaWRlWzFdLCBzZWxmLnVTaWRlWzNdLCBzZWxmLnJTaWRlWzVdLCBzZWxmLmRTaWRlWzddCiAgICAKICBkZWYgZG9GcChzZWxmKToKICAgIHNlbGYuZlNpZGVbNl0sIHNlbGYuZlNpZGVbN10sIHNlbGYuZlNpZGVbMF0sIHNlbGYuZlNpZGVbMV0sIHNlbGYuZlNpZGVbMl0sIHNlbGYuZlNpZGVbM10sIHNlbGYuZlNpZGVbNF0sIHNlbGYuZlNpZGVbNV0gPSBzZWxmLmZTaWRlWzBdLCBzZWxmLmZTaWRlWzFdLCBzZWxmLmZTaWRlWzJdLCBzZWxmLmZTaWRlWzNdLCBzZWxmLmZTaWRlWzRdLCBzZWxmLmZTaWRlWzVdLCBzZWxmLmZTaWRlWzZdLCBzZWxmLmZTaWRlWzddCiAKICAgIHNlbGYubFNpZGVbN10sIHNlbGYudVNpZGVbMV0sIHNlbGYuclNpZGVbM10sIHNlbGYuZFNpZGVbNV0gPSBzZWxmLnVTaWRlWzFdLCBzZWxmLnJTaWRlWzNdLCBzZWxmLmRTaWRlWzVdLCBzZWxmLmxTaWRlWzddCiAgICBzZWxmLmxTaWRlWzBdLCBzZWxmLnVTaWRlWzJdLCBzZWxmLnJTaWRlWzRdLCBzZWxmLmRTaWRlWzZdID0gc2VsZi51U2lkZVsyXSwgc2VsZi5yU2lkZVs0XSwgc2VsZi5kU2lkZVs2XSwgc2VsZi5sU2lkZVswXQogICAgc2VsZi5sU2lkZVsxXSwgc2VsZi51U2lkZVszXSwgc2VsZi5yU2lkZVs1XSwgc2VsZi5kU2lkZVs3XSA9IHNlbGYudVNpZGVbM10sIHNlbGYuclNpZGVbNV0sIHNlbGYuZFNpZGVbN10sIHNlbGYubFNpZGVbMV0KCgogICAgCiAgZGVmIGRvQWxnKHNlbGYsIGFsZ1N0cmluZyk6CiAgICBpYWxnID0gYWxnU3RyaW5nLnJlcGxhY2UoJygnLCAnJykgICAgICNnZXQgcmlkIG9mIHVud2FudGVkCiAgICBpYWxnID0gaWFsZy5yZXBsYWNlKCcpJywgJycpICAgICAgICAgICMgb3Igb3RoZXJ3aXNlIHVubmVlZGVkIGNoYXJhY3RlcnMKICAgIGlhbGcgPSBpYWxnLnJlcGxhY2UoIjInIiwgJzInKSAgICAgICAgIyBpbmNsLiB3aGl0ZXNwYWNlLCBwYXJlbi4sIDIncwogICAgaWFsZyA9IGlhbGcucmVwbGFjZSgnICAnLCAnICcpCiAgICBwYXJ0cyA9IGlhbGcuc3BsaXQoJyAnKSAgICAgICAgICAgICAgICNEaXZpZGUgdGhlIGFsZyB1cCBpbnRvIGluZGl2aWR1YWwgbW92ZXMKICAgIAogICAgZm9yIHBhcnQgaW4gcGFydHM6CiAgICAgIGlmIHBhcnQgPT0gICAnVSc6ICBzZWxmLmRvVSgpCiAgICAgIGVsaWYgcGFydCA9PSAnVTInOiBzZWxmLmRvVSgpOyBzZWxmLmRvVSgpCiAgICAgIGVsaWYgcGFydCA9PSAiVSciOiBzZWxmLmRvVXAoKQogICAgICAgICAgICAKICAgICAgZWxpZiBwYXJ0ID09ICdGJzogIHNlbGYuZG9GKCkKICAgICAgZWxpZiBwYXJ0ID09ICdGMic6IHNlbGYuZG9GKCk7IHNlbGYuZG9GKCkKICAgICAgZWxpZiBwYXJ0ID09ICJGJyI6IHNlbGYuZG9GcCgpCiAgICAgIAogICAgICBlbGlmIHBhcnQgPT0gJ1InOiAgc2VsZi5kb1IoKQogICAgICBlbGlmIHBhcnQgPT0gJ1IyJzogc2VsZi5kb1IoKTsgc2VsZi5kb1IoKQogICAgICBlbGlmIHBhcnQgPT0gIlInIjogc2VsZi5kb1JwKCkKICAgICAgICAgICAgCiAgZGVmIHByaW50Q3ViZShzZWxmKToKICAgIHByaW50CiAgICBwcmludCAiICAgIiwgc2VsZi5iU2lkZVs1XSArIHNlbGYuYlNpZGVbNl0gKyBzZWxmLmJTaWRlWzddCiAgICBwcmludCAiICAgIiwgc2VsZi5iU2lkZVs0XSArICJiIiArIAkgIHNlbGYuYlNpZGVbMF0KICAgIHByaW50ICIgICAiLCBzZWxmLmJTaWRlWzNdICsgc2VsZi5iU2lkZVsyXSArIHNlbGYuYlNpZGVbMV0gKyAnXG4nCgogICAgcHJpbnQgIiAgICIsIHNlbGYudVNpZGVbNV0gKyBzZWxmLnVTaWRlWzZdICsgc2VsZi51U2lkZVs3XQogICAgcHJpbnQgIiAgICIsIHNlbGYudVNpZGVbNF0gKyAidSIgKyAJICBzZWxmLnVTaWRlWzBdCiAgICBwcmludCAiICAgIiwgc2VsZi51U2lkZVszXSArIHNlbGYudVNpZGVbMl0gKyBzZWxmLnVTaWRlWzFdICsgJ1xuJwoKICAgIHByaW50ICIiICsgc2VsZi5sU2lkZVs1XSArIHNlbGYubFNpZGVbNl0gKyBzZWxmLmxTaWRlWzddLCBzZWxmLmZTaWRlWzVdICsgc2VsZi5mU2lkZVs2XSArIHNlbGYuZlNpZGVbN10sIHNlbGYuclNpZGVbNV0gKyBzZWxmLnJTaWRlWzZdICsgc2VsZi5yU2lkZVs3XQogICAgcHJpbnQgIiIgKyBzZWxmLmxTaWRlWzRdICsgJ2wnICsgICAgICAgICAgIHNlbGYubFNpZGVbMF0sIHNlbGYuZlNpZGVbNF0gKyAnZicgKyAgICAgICAgICAgc2VsZi5mU2lkZVswXSwgc2VsZi5yU2lkZVs0XSArICdyJyArICAgICAgICAgICBzZWxmLnJTaWRlWzBdCiAgICBwcmludCAiIiArIHNlbGYubFNpZGVbM10gKyBzZWxmLmxTaWRlWzJdICsgc2VsZi5sU2lkZVsxXSwgc2VsZi5mU2lkZVszXSArIHNlbGYuZlNpZGVbMl0gKyBzZWxmLmZTaWRlWzFdLCBzZWxmLnJTaWRlWzNdICsgc2VsZi5yU2lkZVsyXSArIHNlbGYuclNpZGVbMV0gKyAnXG4nCgogICAgcHJpbnQgIiAgICIsIHNlbGYuZFNpZGVbNV0gKyBzZWxmLmRTaWRlWzZdICsgc2VsZi5kU2lkZVs3XQogICAgcHJpbnQgIiAgICIsIHNlbGYuZFNpZGVbNF0gKyAiZCIgKyAJICBzZWxmLmRTaWRlWzBdCiAgICBwcmludCAiICAgIiwgc2VsZi5kU2lkZVszXSArIHNlbGYuZFNpZGVbMl0gKyBzZWxmLmRTaWRlWzFdICsgJ1xuJwoKICBkZWYgcHJpbnRNaW4oc2VsZik6CiAgICBwcmludAoKICAgIHByaW50ICIgICAiLCBzZWxmLmJTaWRlWzNdICsgc2VsZi5iU2lkZVsyXSArIHNlbGYuYlNpZGVbMV0gKyAnXG4nCgogICAgcHJpbnQgIiAgICIsIHNlbGYudVNpZGVbNV0gKyBzZWxmLnVTaWRlWzZdICsgc2VsZi51U2lkZVs3XQogICAgcHJpbnQgIiAgICIsIHNlbGYudVNpZGVbNF0gKyAidSIgKyAJICBzZWxmLnVTaWRlWzBdCiAgICBwcmludCAiICAgIiwgc2VsZi51U2lkZVszXSArIHNlbGYudVNpZGVbMl0gKyBzZWxmLnVTaWRlWzFdICsgJ1xuJwoKICAgIHByaW50ICIiICsgc2VsZi5sU2lkZVs1XSArIHNlbGYubFNpZGVbNl0gKyBzZWxmLmxTaWRlWzddLCBzZWxmLmZTaWRlWzVdICsgc2VsZi5mU2lkZVs2XSArIHNlbGYuZlNpZGVbN10sIHNlbGYuclNpZGVbNV0gKyBzZWxmLnJTaWRlWzZdICsgc2VsZi5yU2lkZVs3XQoKICBkZWYgY2hlY2tTb2x2ZWQoc2VsZik6CiAgICBpZiBzZWxmLnVTaWRlWzBdID09IHNlbGYudVNpZGVbMV0gPT0gc2VsZi51U2lkZVsyXSA9PSBzZWxmLnVTaWRlWzNdID09IHNlbGYudVNpZGVbNF0gPT0gc2VsZi51U2lkZVs1XSA9PSBzZWxmLnVTaWRlWzZdID09IHNlbGYudVNpZGVbN106CiAgICAgIGlmIHNlbGYuZlNpZGVbNV0gPT0gc2VsZi5mU2lkZVs2XSA9PSBzZWxmLmZTaWRlWzddOgogICAgICAgIGlmIHNlbGYubFNpZGVbNV0gPT0gc2VsZi5sU2lkZVs2XSA9PSBzZWxmLmxTaWRlWzddOgogICAgICAgICAgaWYgc2VsZi5yU2lkZVs1XSA9PSBzZWxmLnJTaWRlWzZdID09IHNlbGYuclNpZGVbN106CiAgICAgICAgICAgIGlmIHNlbGYuYlNpZGVbM10gPT0gc2VsZi5iU2lkZVsyXSA9PSBzZWxmLmJTaWRlWzFdOgogICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICByZXR1cm4gRmFsc2UKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmZvciBsMSBpbiByYW5nZSg2KToKI2ZvciBsMSBpbiByYW5nZShsZW4oYWxncykpOgogICAgcHJpbnQgIkwxOiAiLCBsMQogICAgZm9yIGwyIGluIHJhbmdlKGwxKToKICAgICAgICBmb3IgbDMgaW4gcmFuZ2UobDIpOgogICAgICAgICAgICBhbGdzRG9uZSA9IFtGYWxzZV0qbGVuKGFsZ3MpCiAgICAgICAgICAgIAogICAgICAgICAgICBhbGdzRG9uZSA9IHRyeUNvbWJvKGFsZ3NbbDFdLCBhbGdzW2wyXSwgYWxnc0RvbmUpCiAgICAgICAgICAgIGFsZ3NEb25lID0gdHJ5Q29tYm8oYWxnc1tsMV0sIGFsZ3NbbDNdLCBhbGdzRG9uZSkKICAgICAgICAgICAgYWxnc0RvbmUgPSB0cnlDb21ibyhhbGdzW2wyXSwgYWxnc1tsM10sIGFsZ3NEb25lKQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgc3VtKGFsZ3NEb25lKSA+PSBoaWdoZXN0OgogICAgICAgICAgICAgICAgcHJpbnQgIkFsZ3MgdXNlZDogIiwgbDEsIGwyLCBsMwogICAgICAgICAgICAgICAgcHJpbnQgIkNhc2VzIHNvbHZlZDogIiArIHN0cihzdW0oYWxnc0RvbmUpKSArICIgb3V0IG9mICIgKyBzdHIobGVuKGFsZ3MpKQogICAgICAgICAgICAgICAgcHJpbnQgYWxnc0RvbmU7IHByaW50CiAgICAgICAgICAgICAgICBoaWdoZXN0ID0gc3VtKGFsZ3NEb25lKQogICAgICAgICAgICAgICAgCg==
L1: 0
L1: 1
L1: 2
Algs used: 2 1 0
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
L1: 3
Algs used: 3 1 0
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Algs used: 3 2 1
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
L1: 4
Algs used: 4 1 0
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Algs used: 4 2 0
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Algs used: 4 2 1
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Algs used: 4 3 1
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
Algs used: 4 3 2
Cases solved: 5 out of 22
[True, True, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
L1: 5
Algs used: 5 1 0
Cases solved: 12 out of 22
[True, True, True, False, True, True, True, True, True, False, False, False, False, False, False, True, False, False, True, True, True, False]
Algs used: 5 2 1
Cases solved: 13 out of 22
[True, True, True, True, True, True, True, False, True, False, False, False, True, False, False, True, False, False, True, True, True, False]
Algs used: 5 3 1
Cases solved: 13 out of 22
[True, True, True, True, True, True, True, True, True, False, False, False, False, False, False, True, False, False, True, True, True, False]
Algs used: 5 4 1
Cases solved: 13 out of 22
[True, True, True, True, True, True, True, False, True, False, False, False, False, False, False, True, False, True, True, True, True, False]