############################################## # Involution on trees and Weyl group actions # ############################################## # The following script allows to certify that the involution on the lines on the cubic surface do not come from elements in the Weyl group. # In order to do this, we extend our symbolic action to the 27 lines: ########### # Setting # ########### # A list of variables d_1, ..., d_6 for the coefficients ds = [var("d%s"%i) for i in range(1,7)] # A list of variables E_1, ..., E_6 Es = [var("E%s"%i) for i in range(1,7)] # A list of variables F_12, ..., F_56 Fs = [var("F%s%s"%(i,j)) for i in range(1,7) for j in range(1,7) if i < j] # A list of variables G_1, ..., G_6 Gs = [var("G%s"%i) for i in range(1,7)] EFG = Es+Fs+Gs ######################### # Computation of Action # ######################### # Dictionary recording the action on EFG. We write the entries by hand. It is faster to compute the dictionaries as acting on the indices of EFG, rather than on the symbols themselves. For this reason we record the indices in the keys and values of each dictionary in action EFG. actionEFG = dict() for i in range(1,7): actionEFG[i]=dict() # actionEFG[1] actionEFG[1][EFG.index(SR(G6))] = EFG.index(SR(G6)) actionEFG[1][EFG.index(SR(G5))] = EFG.index(SR(G5)) actionEFG[1][EFG.index(SR(G4))] = EFG.index(SR(G4)) actionEFG[1][EFG.index(SR(G3))] = EFG.index(SR(G3)) actionEFG[1][EFG.index(SR(G2))] = EFG.index(SR(G1)) actionEFG[1][EFG.index(SR(G1))] = EFG.index(SR(G2)) actionEFG[1][EFG.index(SR(F56))] = EFG.index(SR(F56)) actionEFG[1][EFG.index(SR(F46))] = EFG.index(SR(F46)) actionEFG[1][EFG.index(SR(F45))] = EFG.index(SR(F45)) actionEFG[1][EFG.index(SR(F36))] = EFG.index(SR(F36)) actionEFG[1][EFG.index(SR(F35))] = EFG.index(SR(F35)) actionEFG[1][EFG.index(SR(F34))] = EFG.index(SR(F34)) actionEFG[1][EFG.index(SR(F26))] = EFG.index(SR(F16)) actionEFG[1][EFG.index(SR(F25))] = EFG.index(SR(F15)) actionEFG[1][EFG.index(SR(F24))] = EFG.index(SR(F14)) actionEFG[1][EFG.index(SR(F23))] = EFG.index(SR(F13)) actionEFG[1][EFG.index(SR(F16))] = EFG.index(SR(F26)) actionEFG[1][EFG.index(SR(F15))] = EFG.index(SR(F25)) actionEFG[1][EFG.index(SR(F14))] = EFG.index(SR(F24)) actionEFG[1][EFG.index(SR(F13))] = EFG.index(SR(F23)) actionEFG[1][EFG.index(SR(F12))] = EFG.index(SR(F12)) actionEFG[1][EFG.index(SR(E6))] = EFG.index(SR(E6)) actionEFG[1][EFG.index(SR(E5))] = EFG.index(SR(E5)) actionEFG[1][EFG.index(SR(E4))] = EFG.index(SR(E4)) actionEFG[1][EFG.index(SR(E3))] = EFG.index(SR(E3)) actionEFG[1][EFG.index(SR(E2))] = EFG.index(SR(E1)) actionEFG[1][EFG.index(SR(E1))] = EFG.index(SR(E2)) # actionEFG[2] actionEFG[2][EFG.index(SR(G6))] = EFG.index(SR(G6)) actionEFG[2][EFG.index(SR(G5))] = EFG.index(SR(G5)) actionEFG[2][EFG.index(SR(G4))] = EFG.index(SR(G4)) actionEFG[2][EFG.index(SR(G3))] = EFG.index(SR(G2)) actionEFG[2][EFG.index(SR(G2))] = EFG.index(SR(G3)) actionEFG[2][EFG.index(SR(G1))] = EFG.index(SR(G1)) actionEFG[2][EFG.index(SR(F56))] = EFG.index(SR(F56)) actionEFG[2][EFG.index(SR(F46))] = EFG.index(SR(F46)) actionEFG[2][EFG.index(SR(F45))] = EFG.index(SR(F45)) actionEFG[2][EFG.index(SR(F36))] = EFG.index(SR(F26)) actionEFG[2][EFG.index(SR(F35))] = EFG.index(SR(F25)) actionEFG[2][EFG.index(SR(F34))] = EFG.index(SR(F24)) actionEFG[2][EFG.index(SR(F26))] = EFG.index(SR(F36)) actionEFG[2][EFG.index(SR(F25))] = EFG.index(SR(F35)) actionEFG[2][EFG.index(SR(F24))] = EFG.index(SR(F34)) actionEFG[2][EFG.index(SR(F23))] = EFG.index(SR(F23)) actionEFG[2][EFG.index(SR(F16))] = EFG.index(SR(F16)) actionEFG[2][EFG.index(SR(F15))] = EFG.index(SR(F15)) actionEFG[2][EFG.index(SR(F14))] = EFG.index(SR(F14)) actionEFG[2][EFG.index(SR(F13))] = EFG.index(SR(F12)) actionEFG[2][EFG.index(SR(F12))] = EFG.index(SR(F13)) actionEFG[2][EFG.index(SR(E6))] = EFG.index(SR(E6)) actionEFG[2][EFG.index(SR(E5))] = EFG.index(SR(E5)) actionEFG[2][EFG.index(SR(E4))] = EFG.index(SR(E4)) actionEFG[2][EFG.index(SR(E3))] = EFG.index(SR(E2)) actionEFG[2][EFG.index(SR(E2))] = EFG.index(SR(E3)) actionEFG[2][EFG.index(SR(E1))] = EFG.index(SR(E1)) # actionEFG[3] actionEFG[3][EFG.index(SR(G6))] = EFG.index(SR(G6)) actionEFG[3][EFG.index(SR(G5))] = EFG.index(SR(G5)) actionEFG[3][EFG.index(SR(G4))] = EFG.index(SR(G3)) actionEFG[3][EFG.index(SR(G3))] = EFG.index(SR(G4)) actionEFG[3][EFG.index(SR(G2))] = EFG.index(SR(G2)) actionEFG[3][EFG.index(SR(G1))] = EFG.index(SR(G1)) actionEFG[3][EFG.index(SR(F56))] = EFG.index(SR(F56)) actionEFG[3][EFG.index(SR(F46))] = EFG.index(SR(F36)) actionEFG[3][EFG.index(SR(F45))] = EFG.index(SR(F35)) actionEFG[3][EFG.index(SR(F36))] = EFG.index(SR(F46)) actionEFG[3][EFG.index(SR(F35))] = EFG.index(SR(F45)) actionEFG[3][EFG.index(SR(F34))] = EFG.index(SR(F34)) actionEFG[3][EFG.index(SR(F26))] = EFG.index(SR(F26)) actionEFG[3][EFG.index(SR(F25))] = EFG.index(SR(F25)) actionEFG[3][EFG.index(SR(F24))] = EFG.index(SR(F23)) actionEFG[3][EFG.index(SR(F23))] = EFG.index(SR(F24)) actionEFG[3][EFG.index(SR(F16))] = EFG.index(SR(F16)) actionEFG[3][EFG.index(SR(F15))] = EFG.index(SR(F15)) actionEFG[3][EFG.index(SR(F14))] = EFG.index(SR(F13)) actionEFG[3][EFG.index(SR(F13))] = EFG.index(SR(F14)) actionEFG[3][EFG.index(SR(F12))] = EFG.index(SR(F12)) actionEFG[3][EFG.index(SR(E6))] = EFG.index(SR(E6)) actionEFG[3][EFG.index(SR(E5))] = EFG.index(SR(E5)) actionEFG[3][EFG.index(SR(E4))] = EFG.index(SR(E3)) actionEFG[3][EFG.index(SR(E3))] = EFG.index(SR(E4)) actionEFG[3][EFG.index(SR(E2))] = EFG.index(SR(E2)) actionEFG[3][EFG.index(SR(E1))] = EFG.index(SR(E1)) # actionEFG[4] actionEFG[4][EFG.index(SR(G6))] = EFG.index(SR(G6)) actionEFG[4][EFG.index(SR(G5))] = EFG.index(SR(G4)) actionEFG[4][EFG.index(SR(G4))] = EFG.index(SR(G5)) actionEFG[4][EFG.index(SR(G3))] = EFG.index(SR(G3)) actionEFG[4][EFG.index(SR(G2))] = EFG.index(SR(G2)) actionEFG[4][EFG.index(SR(G1))] = EFG.index(SR(G1)) actionEFG[4][EFG.index(SR(F56))] = EFG.index(SR(F46)) actionEFG[4][EFG.index(SR(F46))] = EFG.index(SR(F56)) actionEFG[4][EFG.index(SR(F45))] = EFG.index(SR(F45)) actionEFG[4][EFG.index(SR(F36))] = EFG.index(SR(F36)) actionEFG[4][EFG.index(SR(F35))] = EFG.index(SR(F34)) actionEFG[4][EFG.index(SR(F34))] = EFG.index(SR(F35)) actionEFG[4][EFG.index(SR(F26))] = EFG.index(SR(F26)) actionEFG[4][EFG.index(SR(F25))] = EFG.index(SR(F24)) actionEFG[4][EFG.index(SR(F24))] = EFG.index(SR(F25)) actionEFG[4][EFG.index(SR(F23))] = EFG.index(SR(F23)) actionEFG[4][EFG.index(SR(F16))] = EFG.index(SR(F16)) actionEFG[4][EFG.index(SR(F15))] = EFG.index(SR(F14)) actionEFG[4][EFG.index(SR(F14))] = EFG.index(SR(F15)) actionEFG[4][EFG.index(SR(F13))] = EFG.index(SR(F13)) actionEFG[4][EFG.index(SR(F12))] = EFG.index(SR(F12)) actionEFG[4][EFG.index(SR(E6))] = EFG.index(SR(E6)) actionEFG[4][EFG.index(SR(E5))] = EFG.index(SR(E4)) actionEFG[4][EFG.index(SR(E4))] = EFG.index(SR(E5)) actionEFG[4][EFG.index(SR(E3))] = EFG.index(SR(E3)) actionEFG[4][EFG.index(SR(E2))] = EFG.index(SR(E2)) actionEFG[4][EFG.index(SR(E1))] = EFG.index(SR(E1)) # actionEFG[5] actionEFG[5][EFG.index(SR(G6))] = EFG.index(SR(G5)) actionEFG[5][EFG.index(SR(G5))] = EFG.index(SR(G6)) actionEFG[5][EFG.index(SR(G4))] = EFG.index(SR(G4)) actionEFG[5][EFG.index(SR(G3))] = EFG.index(SR(G3)) actionEFG[5][EFG.index(SR(G2))] = EFG.index(SR(G2)) actionEFG[5][EFG.index(SR(G1))] = EFG.index(SR(G1)) actionEFG[5][EFG.index(SR(F56))] = EFG.index(SR(F56)) actionEFG[5][EFG.index(SR(F46))] = EFG.index(SR(F45)) actionEFG[5][EFG.index(SR(F45))] = EFG.index(SR(F46)) actionEFG[5][EFG.index(SR(F36))] = EFG.index(SR(F35)) actionEFG[5][EFG.index(SR(F35))] = EFG.index(SR(F36)) actionEFG[5][EFG.index(SR(F34))] = EFG.index(SR(F34)) actionEFG[5][EFG.index(SR(F26))] = EFG.index(SR(F25)) actionEFG[5][EFG.index(SR(F25))] = EFG.index(SR(F26)) actionEFG[5][EFG.index(SR(F24))] = EFG.index(SR(F24)) actionEFG[5][EFG.index(SR(F23))] = EFG.index(SR(F23)) actionEFG[5][EFG.index(SR(F16))] = EFG.index(SR(F15)) actionEFG[5][EFG.index(SR(F15))] = EFG.index(SR(F16)) actionEFG[5][EFG.index(SR(F14))] = EFG.index(SR(F14)) actionEFG[5][EFG.index(SR(F13))] = EFG.index(SR(F13)) actionEFG[5][EFG.index(SR(F12))] = EFG.index(SR(F12)) actionEFG[5][EFG.index(SR(E6))] = EFG.index(SR(E5)) actionEFG[5][EFG.index(SR(E5))] = EFG.index(SR(E6)) actionEFG[5][EFG.index(SR(E4))] = EFG.index(SR(E4)) actionEFG[5][EFG.index(SR(E3))] = EFG.index(SR(E3)) actionEFG[5][EFG.index(SR(E2))] = EFG.index(SR(E2)) actionEFG[5][EFG.index(SR(E1))] = EFG.index(SR(E1)) # actionEFG[6] actionEFG[6][EFG.index(SR(G6))] = EFG.index(SR(G6)) actionEFG[6][EFG.index(SR(G5))] = EFG.index(SR(G5)) actionEFG[6][EFG.index(SR(G4))] = EFG.index(SR(G4)) actionEFG[6][EFG.index(SR(G3))] = EFG.index(SR(F12)) actionEFG[6][EFG.index(SR(G2))] = EFG.index(SR(F13)) actionEFG[6][EFG.index(SR(G1))] = EFG.index(SR(F23)) actionEFG[6][EFG.index(SR(F56))] = EFG.index(SR(E4)) actionEFG[6][EFG.index(SR(F46))] = EFG.index(SR(E5)) actionEFG[6][EFG.index(SR(F45))] = EFG.index(SR(E6)) actionEFG[6][EFG.index(SR(F36))] = EFG.index(SR(F36)) actionEFG[6][EFG.index(SR(F35))] = EFG.index(SR(F35)) actionEFG[6][EFG.index(SR(F34))] = EFG.index(SR(F34)) actionEFG[6][EFG.index(SR(F26))] = EFG.index(SR(F26)) actionEFG[6][EFG.index(SR(F25))] = EFG.index(SR(F25)) actionEFG[6][EFG.index(SR(F24))] = EFG.index(SR(F24)) actionEFG[6][EFG.index(SR(F23))] = EFG.index(SR(G1)) actionEFG[6][EFG.index(SR(F16))] = EFG.index(SR(F16)) actionEFG[6][EFG.index(SR(F15))] = EFG.index(SR(F15)) actionEFG[6][EFG.index(SR(F14))] = EFG.index(SR(F14)) actionEFG[6][EFG.index(SR(F13))] = EFG.index(SR(G2)) actionEFG[6][EFG.index(SR(F12))] = EFG.index(SR(G3)) actionEFG[6][EFG.index(SR(E6))] = EFG.index(SR(F45)) actionEFG[6][EFG.index(SR(E5))] = EFG.index(SR(F46)) actionEFG[6][EFG.index(SR(E4))] = EFG.index(SR(F56)) actionEFG[6][EFG.index(SR(E3))] = EFG.index(SR(E3)) actionEFG[6][EFG.index(SR(E2))] = EFG.index(SR(E2)) actionEFG[6][EFG.index(SR(E1))] = EFG.index(SR(E1)) # In order to act by other elements with W(E6), we must be able to compose. The following functions allows us to compose pairs dictionaries: def compose(dict1, dict2): answer = {} for k in dict1.keys(): answer[k] = k.substitute(dict1).substitute(dict2) return answer # The next function allows for inductive composition of multiple elements. We will use it to compose multiple dictionaries. # By convention: # Composition of [d1, d2, ..., dn] is dn o d(n-1) o ... o d2 o d1 def composeAll(allAction,l): answer = {} for d in l: answer = compose(allAction[d], answer) return answer # Next, we create the orbit on range(0,27) = [0,...,26]. For this we define the action on tuples with two elements. The first is the list of images of range(0,26) and the second is the list of generators of W(E6) we compose to get this image. The composition is read from left to right. def computeWe6OnExtremalCurves(homs): equations = set([(tuple(range(0,27)),tuple([]))]) # "Symmetrizing" eq means computing h(eq) for all h in homs. toSymmetrize = equations.copy() toSymmetrize0 = set([x[0] for x in toSymmetrize]) # toSymmetrize keeps a set of equations that are yet to be symmetrized. # In the beginning, it is just a copy of the set of equations. # symmetrized keeps a set of the equations that have been symmetrized symmetrized = set(tuple([])) symmetrized0 = set(tuple([])) while len(toSymmetrize) > 0: # Pick the first equation to be symmetrized eq = toSymmetrize.pop() # Add to equations the previously unseen equations obtained by applying the homomorphisms to eq. # Also add to toSymmetrize these equations. for h in homs.keys(): newEq0 = tuple([homs[h][eq[0][x]] for x in range(0,27)]) newEq1 = tuple(list(eq[1]) + [h]) if newEq0 not in equations: equations.add((newEq0,newEq1)) if newEq0 != eq[0] and newEq0 not in toSymmetrize0 and newEq0 not in symmetrized0: toSymmetrize.add((newEq0,newEq1)) toSymmetrize0.add(newEq0) # Now eq has been symmetrized. Add eq to the set of symmetrized equations and eq0 to the set of symmetrized0 equations symmetrized.add(eq) symmetrized0.add(eq[0]) print "Found: " + str(len(equations)) print "To symmetrize: " + str(len(toSymmetrize)) print "Symmetrized: " + str(len(symmetrized)) print " " return equations # We use the above macros to compute the weyl group elements associated to all the permutation on the 27 (-1)-curves coming from W(E6). We save the data as a sobj file and load it at the end. # allTuplesAction = computeWe6OnExtremalCurves(actionEFG) # There are more tuples than elements in W(E6) since we don't consider relations in W(E6) # print len(list(allTuplesAction)) # 311041 # The projection to the first coordinate gives as many elements as the Weyl group, as we expected. allTuplesValues = list(set([x[0] for x in allTuplesAction])) # print len(allTuplesValues) # 51840 # # We omit redundancies by selecting the shortest combination of generators of W(E6) giving each tuple in 'allTuplesValues' # allTuplesMaps = dict() # i=-1 # for y in allTuplesValues: # print i + 1 # allTuplesMaps[y] = [x[1] for x in allTuplesAction if x[0] == y] # i = i +1 # shortestMaps = dict() # for y in allTuplesMaps.keys(): # shortestMaps[y] = [x for x in allTuplesMaps[y] if len(x) == min([len(z) for z in allTuplesMaps[y]])][0] # allTuplesRepresentatives = [(y,shortestMaps[y]) for y in shortestMaps.keys()] # We save the output as a Sage object: # save(allTuplesRepresentatives, "Input/allTuplesRepresentatives.sobj") # We load the tuples: allTuplesRepresentatives = load("Input/allTuplesRepresentatives.sobj") allAction = load("Input/Symbolic_action_on_everything.sobj") # The keys of this dictionary will be the permutations on the indices of Es+Fs+Gs obtained by the action of W(E6). The values will be the action of the W(E6) on the anticanonical coordinates, the ds the Crosses and Yoshida functions. allTuplesWE6 = {y[0]: composeAll(allAction,list(y[1])) for y in allTuplesRepresentatives} # # We save the data as several sobj files (there's a memory issue to save the dictionary allTuplesWE6): # for l in range(0,51840/640): # save({k[0]: allTuplesWE6[k[0]] for k in allTuplesRepresentatives[640*l:640*(l+1)]}, 'Input/allTuplesWE6_'+str(l)+'.sobj') #################################### # Identifying involution and W(E6) # #################################### # Want to find an element in the Weyl group that corresponds to the involution for the line G1 indicesToTest =[EFG.index(SR(G1)), (EFG.index(SR(E2)), EFG.index(SR(F12))),(EFG.index(SR(E3)), EFG.index(SR(F13))), (EFG.index(SR(E4)), EFG.index(SR(F14))),(EFG.index(SR(E5)), EFG.index(SR(F15))), (EFG.index(SR(E6)), EFG.index(SR(F16)))] # Pick thouse fixing G1: candidatesG1 = [x for x in allTuplesValues if x[indicesToTest[0]] == indicesToTest[0] ] # print len(candidatesG1) # 1920 # Among them, pick those swapping E2 and F12 candidatesG1X21 = [x for x in candidatesG1 if x[indicesToTest[1][0]] == indicesToTest[1][1] if x[indicesToTest[1][1]] == indicesToTest[1][0] ] # print len(candidatesG1X21) # 192 # Among them, pick those swapping E3 and F13 candidatesG1X21X31 = [x for x in candidatesG1X21 if x[indicesToTest[2][0]] == indicesToTest[2][1] if x[indicesToTest[2][1]] == indicesToTest[2][0] ] # print len(candidatesG1X21X31) # 24 # Among them, pick those swapping E4 and F14 candidatesG1X21X31X41 = [x for x in candidatesG1X21X31 if x[indicesToTest[3][0]] == indicesToTest[3][1] if x[indicesToTest[3][1]] == indicesToTest[3][0] ] # print len(candidatesG1X21X31X41) # 4 # Among them, pick those swapping E5 and F15 candidatesG1X21X31X41X51 = [x for x in candidatesG1X21X31X41 if x[indicesToTest[4][0]] == indicesToTest[4][1] if x[indicesToTest[4][1]] == indicesToTest[4][0] ] # print len(candidatesG1X21X31X41X51) # 1 # Among them, pick those swapping E6 and F16 candidatesG1X21X31X41X51X61 = [x for x in candidatesG1X21X31X41X51 if x[indicesToTest[5][0]] == indicesToTest[5][1] if x[indicesToTest[5][1]] == indicesToTest[5][0] ] # print len(candidatesG1X21X31X41X51X61) # 0 # The result is the empty list! # we check what happened up to E5 and F15: # print candidatesG1X21X31X41X51[0] # (26, 6, 7, 8, 9, 5, 1, 2, 3, 4, 10, 18, 16, 15, 22, 13, 12, 23, 11, 24, 25, 21, 14, 17, 19, 20, 0) # We see that the index 5 corresponding to E6 remains invariant. The same for the index 10 corresponding to F16 # CONCLUSION: The involution does not come from an automorphism of the cubic surface. # print candidatesG1X21X31X41X51[0] # (26, 6, 7, 8, 9, 5, 1, 2, 3, 4, 10, 18, 16, 15, 22, 13, 12, 23, 11, 24, 25, 21, 14, 17, 19, 20, 0) # We see that the index 5 corresponding to E6 remains invariant. The same for the index 10 corresponding to F16 print [EFG[x] for x in list(candidatesG1X21X31X41X51[0])] [G6, F12, F13, F14, F15, E6, E2, E3, E4, E5, F16, F45, F35, F34, G2, F25, F24, G3, F23, G4, G5, G1, F26, F36, F46, F56, E1] candidateWe6AllButOne = [x[1] for x in allTuplesAction if x[0] == candidatesG1X21X31X41X51[0]] # print len(candidateWe6AllButOne) # 6 print candidateWe6AllButOne [(5, 4, 3, 6, 2, 1, 4, 3, 4, 6, 5, 1, 2, 4, 3, 5, 1, 2, 1, 3, 4, 5, 6, 2, 3, 2, 4, 3, 6, 1, 5, 2, 3, 4, 6, 1, 5, 2), (5, 4, 3, 6, 2, 1, 4, 3, 4, 6, 5, 1, 2, 4, 3, 5, 1, 2, 1, 3, 4, 5, 6, 2, 3, 2, 4, 3, 6, 1, 5, 2, 3, 4, 6, 1, 5, 2, 6, 6), (5, 4, 3, 6, 2, 1, 4, 3, 4, 6, 5, 1, 2, 4, 3, 5, 1, 2, 1, 3, 4, 5, 6, 2, 3, 2, 4, 3, 6, 1, 5, 2, 3, 4, 6, 1, 2, 5), (5, 1, 2, 3, 1, 4, 3, 1, 6, 5, 4, 2, 1, 2, 3, 6, 2, 3, 4, 3, 5, 6, 4, 2, 1, 2, 5, 3, 2, 4, 1, 5, 4, 3), (5, 1, 2, 3, 1, 4, 2, 1, 6, 3, 4, 2, 5, 6, 1, 4, 3, 6, 5, 2, 3, 4, 5, 1, 3, 6, 4, 3, 2, 1, 3, 4), (5, 1, 2, 3, 1, 4, 2, 1, 6, 3, 4, 2, 5, 6, 1, 4, 3, 6, 5, 2, 3, 4, 5, 1, 3, 6, 4, 3, 5, 2, 3, 2, 5, 4, 2, 1)] [len(list(x)) for x in candidateWe6AllButOne] [38, 40, 38, 34, 32, 36] # We pick the shortest one. winnerWE6 = candidateWe6AllButOne[-2] print winnerWE6 (5, 1, 2, 3, 1, 4, 2, 1, 6, 3, 4, 2, 5, 6, 1, 4, 3, 6, 5, 2, 3, 4, 5, 1, 3, 6, 4, 3, 2, 1, 3, 4) winnerWE6Antic = composeAll(allAction,winnerWE6) print winnerWE6Antic {Cross55: -Cross89, Cross69: -Cross69, Cross67: -Cross112, Yoshida0: -Yoshida0, Cross70: -Cross70, Cross112: -Cross67, Cross12: -Cross126, Yoshida16: -Yoshida25, Cross106: Cross98, X62: -X62, Cross127: -Cross14, Cross85: -Cross117, X32: Y132645, Cross86: -Cross118, X31: -X31, Cross81: Cross23, Cross23: Cross81, Y162534: -Y162534, Cross77: -Cross30, Cross108: -Cross108, X41: -X41, Yoshida5: -Yoshida5, Cross45: Cross45, Yoshida31: -Yoshida31, Cross78: -Cross100, Cross25: -Cross25, Cross88: -Cross54, Cross93: Cross59, Cross17: -Cross39, Cross73: -Cross42, Yoshida9: -Yoshida9, Cross26: -Cross26, X43: Y142536, X35: -Y132456, X46: X14, Yoshida3: -Yoshida3, Cross16: -Cross41, Yoshida11: -Yoshida4, Cross10: -Cross65, Y152436: X53, Yoshida35: -Yoshida35, Cross115: -Cross115, Cross99: -Cross79, Cross27: -Cross120, Y132546: -X34, Cross53: -Cross53, Cross33: -Cross33, X13: X36, Cross110: -Cross110, Yoshida37: -Yoshida37, Cross79: -Cross99, Yoshida10: -Yoshida10, Cross133: Cross104, Cross97: Cross105, Cross2: -Cross2, Yoshida29: -Yoshida36, Y162345: -Y162345, X54: Y152346, Yoshida28: -Yoshida6, Cross130: -Cross5, Cross35: -Cross35, Yoshida18: -Yoshida22, X25: -Y123456, Yoshida27: -Yoshida20, Cross49: Cross90, Cross123: -Cross123, Cross100: -Cross78, Cross122: -Cross28, Cross124: -Cross124, Cross40: -Cross15, Yoshida34: -Yoshida7, X61: X61, Cross18: -Cross18, Cross24: -Cross24, Cross129: -Cross3, Cross61: -Cross61, Cross98: Cross106, Cross95: Cross58, Cross118: -Cross86, Cross90: Cross49, Cross65: -Cross10, Y123645: -X23, X65: -X65, Cross51: -Cross51, Cross5: -Cross130, d3: -1/3*d1 + 1/3*d2 - 2/3*d3 + 1/3*d4 + 1/3*d5, Cross54: -Cross88, Yoshida7: -Yoshida34, Cross94: Cross57, Cross82: Cross22, Yoshida30: -Yoshida30, Yoshida12: -Yoshida14, Yoshida2: -Yoshida2, Cross37: -Cross37, Y132456: -X35, Yoshida39: -Yoshida39, Cross131: -Cross4, d4: -1/3*d1 + 1/3*d2 + 1/3*d3 - 2/3*d4 + 1/3*d5, Yoshida24: -Yoshida24, Cross15: -Cross40, X53: Y152436, X15: X56, X42: Y142635, X52: Y152634, Cross28: -Cross122, Y123456: -X25, Yoshida22: -Yoshida18, Cross63: -Cross11, Cross126: -Cross12, X45: Y142356, Cross119: -Cross84, Yoshida32: -Yoshida32, Yoshida33: -Yoshida17, Yoshida26: -Yoshida26, Cross6: -Cross6, Yoshida8: -Yoshida13, Cross48: Cross92, Cross64: -Cross9, d6: 2/3*d1 + 1/3*d2 + 1/3*d3 + 1/3*d4 + 1/3*d5 + d6, Cross107: Cross96, Cross116: -Cross116, Cross7: -Cross7, Yoshida17: -Yoshida33, Cross50: Cross91, Cross62: -Cross62, Y142536: X43, Cross21: Cross83, Cross52: -Cross52, Yoshida14: -Yoshida12, Yoshida19: -Yoshida23, Cross4: -Cross131, Cross114: -Cross114, Cross9: -Cross64, X24: -Y123546, Cross11: -Cross63, X21: -X21, d1: -1/3*d1 - 2/3*d2 - 2/3*d3 - 2/3*d4 - 2/3*d5, X23: -Y123645, Yoshida23: -Yoshida19, Y142356: X45, Y152634: X52, Cross36: -Cross36, Cross34: -Cross34, Cross14: -Cross127, Cross74: -Cross44, Cross39: -Cross17, Yoshida6: -Yoshida28, Cross91: Cross50, Cross92: Cross48, Cross83: Cross21, Cross30: -Cross77, Cross128: -Cross13, Y152346: X54, Cross38: -Cross38, X63: -X63, Yoshida4: -Yoshida11, Cross109: -Cross109, Cross71: -Cross71, Cross80: -Cross101, Cross41: -Cross16, Cross42: -Cross73, Yoshida13: -Yoshida8, Cross32: -Cross76, Cross102: Cross132, X51: -X51, Cross68: -Cross113, Cross113: -Cross68, Yoshida25: -Yoshida16, Y123546: -X24, Cross134: Cross103, d2: -1/3*d1 - 2/3*d2 + 1/3*d3 + 1/3*d4 + 1/3*d5, Cross57: Cross94, Yoshida38: -Yoshida1, Cross59: Cross93, Cross72: -Cross43, X64: -X64, Cross117: -Cross85, Cross0: -Cross0, Cross29: -Cross121, Cross103: Cross134, X16: -X16, Cross121: -Cross29, Cross20: -Cross20, Cross58: Cross95, Cross1: -Cross1, Yoshida20: -Yoshida27, Y132645: X32, Cross43: -Cross72, Cross44: -Cross74, Cross76: -Cross32, Yoshida15: -Yoshida15, d5: -1/3*d1 + 1/3*d2 + 1/3*d3 + 1/3*d4 - 2/3*d5, Cross105: Cross97, Cross132: Cross102, Cross111: -Cross66, Cross47: Cross47, Cross60: -Cross60, X26: X12, X14: X46, X34: -Y132546, Cross89: -Cross55, Cross96: Cross107, Cross56: -Cross87, Cross3: -Cross129, Cross120: -Cross27, Cross13: -Cross128, X56: X15, Yoshida21: -Yoshida21, Yoshida1: -Yoshida38, Yoshida36: -Yoshida29, Cross104: Cross133, Cross75: -Cross31, Cross101: -Cross80, Cross66: -Cross111, Y142635: X42, Y162435: -Y162435, X36: X13, Cross19: -Cross19, Cross31: -Cross75, Cross125: -Cross125, Cross87: -Cross56, Cross46: Cross46, X12: X26, Cross84: -Cross119, Cross22: Cross82, Cross8: -Cross8} print [winnerWE6Antic[SR(X21)], winnerWE6Antic[SR(X31)], winnerWE6Antic[SR(X41)], winnerWE6Antic[SR(X51)], winnerWE6Antic[SR(X61)]] [-X21, -X31, -X41, -X51, X61]