Ticket #14562: trac_14562.patch

File trac_14562.patch, 72.1 KB (added by ncohen, 8 years ago)
  • doc/en/reference/combinat/designs.rst

    # HG changeset patch
    # User Nathann Cohen <nathann.cohen@gmail.com>
    # Date 1368190920 -7200
    # Node ID 603c7c128fa4c44e82126694f8c9947a2bcb5d6a
    # Parent  75a1095ab5b4f6bcb7c8467bb37256d4b1841ae3
    Steiner Quadruple Systems
    
    diff --git a/doc/en/reference/combinat/designs.rst b/doc/en/reference/combinat/designs.rst
    a b  
    88   ../sage/combinat/designs/covering_design
    99   ../sage/combinat/designs/ext_rep
    1010   ../sage/combinat/designs/incidence_structures
     11   ../sage/combinat/designs/steiner_quadruple_systems
    1112   ../sage/combinat/designs/design_catalog
     13
  • sage/combinat/designs/all.py

    diff --git a/sage/combinat/designs/all.py b/sage/combinat/designs/all.py
    a b  
    3434                            "typing designs.best_known_covering_design_from_LJCR"))
    3535
    3636del deprecated_callable_import
     37
     38import sage.combinat.designs.steiner_quadruple_systems
  • sage/combinat/designs/design_catalog.py

    diff --git a/sage/combinat/designs/design_catalog.py b/sage/combinat/designs/design_catalog.py
    a b  
    4242    :meth:`~sage.combinat.designs.block_design.WittDesign`
    4343    :meth:`~sage.combinat.designs.block_design.HadamardDesign`
    4444    :meth:`~sage.combinat.designs.block_design.steiner_triple_system`
     45    :meth:`~sage.combinat.designs.block_design.steiner_quadruple_system`
    4546
    4647And the :meth:`designs.best_known_covering_design_from_LJCR
    4748<sage.combinat.designs.covering_design.best_known_covering_design_www>` function
     
    6263                                                HadamardDesign,
    6364                                                steiner_triple_system)
    6465
     66from sage.combinat.designs.steiner_quadruple_systems import steiner_quadruple_system
     67
    6568from sage.combinat.designs.covering_design import best_known_covering_design_www as best_known_covering_design_from_LJCR
  • new file sage/combinat/designs/steiner_quadruple_systems.py

    diff --git a/sage/combinat/designs/steiner_quadruple_systems.py b/sage/combinat/designs/steiner_quadruple_systems.py
    new file mode 100644
    - +  
     1r"""
     2Steiner Quadruple Systems
     3
     4A Steiner Quadruple System on `n` points is a family `SQS_n \subset \binom {[n]}
     54` of `4`-sets, such that any set `S\subset [n]` of size three is a subset of
     6exactly one member of `SQS_n`.
     7
     8This module implements Haim Hanani's constructive proof that a Steiner Quadruple
     9System exists if and only if `n\equiv 2,4[12]`. Hanani's proof consists in 6
     10different constructions that build a large Steiner Quadruple System from a smaller
     11one, and though it does not give a very clear understanding of why it works (to say the
     12least)... it does !
     13
     14The constructions have been implemented while reading two papers simultaneously,
     15for one of them sometimes provides the informations that the other one does
     16not. The first one is Haim Hanani's original paper [Hanani60]_, and the other
     17one is a paper from Horan and Hurlbert which goes through all constructions
     18[HH12]_.
     19
     20It can be used through the ``designs`` object::
     21
     22    sage: designs.steiner_quadruple_system(8)
     23    ((0, 1, 2, 3), (0, 1, 6, 7), (0, 5, 2, 7), (0, 5, 6, 3), (4, 1, 2, 7),
     24    (4, 1, 6, 3), (4, 5, 2, 3), (4, 5, 6, 7), (0, 1, 4, 5), (0, 2, 4, 6),
     25    (0, 3, 4, 7), (1, 2, 5, 6), (1, 3, 5, 7), (2, 3, 6, 7))
     26
     27REFERENCES:
     28
     29.. [Hanani60] Haim Hanani,
     30  On quadruple systems,
     31  pages 145--157, vol. 12,
     32  Canadadian Journal of Mathematics,
     33  1960
     34  http://cms.math.ca/cjm/v12/cjm1960v12.0145-0157.pdf
     35
     36.. [HH12] Victoria Horan and Glenn Hurlbert,
     37  Overlap Cycles for Steiner Quadruple Systems,
     38  2012,
     39  http://arxiv.org/abs/1204.3215
     40
     41AUTHORS:
     42
     43- Nathann Cohen (May 2013, while listening to "*Le Blues Du Pauvre Delahaye*")
     44
     45Index
     46-----
     47
     48This module's main function is the following :
     49
     50.. csv-table::
     51    :class: contentstable
     52    :widths: 15, 20, 65
     53    :delim: |
     54
     55    | :func:`steiner_quadruple_system` | Returns a Steiner Quadruple System on `n` points
     56
     57This function redistributes its work among 6 constructions :
     58
     59.. csv-table::
     60    :class: contentstable
     61    :widths: 15, 20, 65
     62    :delim: |
     63
     64    Construction `1` | :func:`two_n`                | Returns a Steiner Quadruple System on `2n` points
     65    Construction `2` | :func:`three_n_minus_two`    | Returns a Steiner Quadruple System on `3n-2` points
     66    Construction `3` | :func:`three_n_minus_height` | Returns a Steiner Quadruple System on `3n-8` points
     67    Construction `4` | :func:`three_n_minus_four`   | Returns a Steiner Quadruple System on `3n-4` points
     68    Construction `5` | :func:`four_n_minus_six`     | Returns a Steiner Quadruple System on `4n-6` points
     69    Construction `6` | :func:`twelve_n_minus_ten`   | Returns a Steiner Quadruple System on `12n-10` points
     70
     71It also defines two specific Steiner Quadruple Systems that the constructions
     72require, i.e.`SQS_{14}` and `SQS_{38}` as well as the systems of pairs
     73`P_{\alpha}(m)` and `\overline P_{\alpha}(m)` (see [Hanani60]_).
     74
     75Functions
     76---------
     77"""
     78from sage.misc.cachefunc import cached_function
     79
     80# Construction 1
     81def two_n(n,B):
     82    r"""
     83    Returns a Steiner Quadruple System on `2n` points.
     84
     85    INPUT:
     86
     87    - ``n`` (integer)
     88
     89    - ``B`` -- A Steiner Quadruple System on `n` points.
     90
     91    EXAMPLES::
     92
     93        sage: from sage.combinat.designs.steiner_quadruple_systems import two_n, is_steiner_quadruple_system
     94        sage: for n in xrange(4, 30):
     95        ....:     if (n%6) in [2,4]:
     96        ....:         sqs = designs.steiner_quadruple_system(n)
     97        ....:         if not is_steiner_quadruple_system(2*n, two_n(n, sqs)):
     98        ....:             print "Something is wrong !"
     99
     100    """
     101    Y = []
     102
     103    # Line 1
     104    for x,y,z,t in B:
     105        for a in xrange(2):
     106            for b in xrange(2):
     107                for c in xrange(2):
     108                    d = (a+b+c)%2
     109                    Y.append((x+a*n,y+b*n,z+c*n,t+d*n))
     110
     111    # Line 2
     112    for j in xrange(n):
     113        for jj in xrange(j+1,n):
     114            Y.append((j,jj,n+j,n+jj))
     115
     116    return tuple(Y)
     117
     118# Construction 2
     119def three_n_minus_two(n,B):
     120    """
     121    Returns a Steiner Quadruple System on `3n-2` points.
     122
     123    INPUT:
     124
     125    - ``n`` (integer)
     126
     127    - ``B`` -- A Steiner Quadruple System on `n` points.
     128
     129    EXAMPLES::
     130
     131        sage: from sage.combinat.designs.steiner_quadruple_systems import three_n_minus_two, is_steiner_quadruple_system
     132        sage: for n in xrange(4, 30):
     133        ....:     if (n%6) in [2,4]:
     134        ....:         sqs = designs.steiner_quadruple_system(n)
     135        ....:         if not is_steiner_quadruple_system(3*n-2, three_n_minus_two(n, sqs)):
     136        ....:             print "Something is wrong !"
     137
     138    """
     139    A = n-1
     140    Y = []
     141    # relabel function
     142    r = lambda i,x : (i%3)*(n-1)+x
     143    for x,y,z,t in B:
     144        if t == A:
     145            # Line 2.
     146            for a in xrange(3):
     147                for b in xrange(3):
     148                    c = -(a+b)%3
     149                    Y.append((r(a,x),r(b,y),r(c,z),3*n-3))
     150
     151            # Line 3.
     152            Y.extend([(r(i,x),r(i,y),r(i+1,z),r(i+2,z)) for i in xrange(3)])
     153            Y.extend([(r(i,x),r(i,z),r(i+1,y),r(i+2,y)) for i in xrange(3)])
     154            Y.extend([(r(i,y),r(i,z),r(i+1,x),r(i+2,x)) for i in xrange(3)])
     155
     156        else:
     157            # Line 1.
     158            for a in xrange(3):
     159                for b in xrange(3):
     160                    for c in xrange(3):
     161                      d = -(a+b+c)%3
     162                      Y.append((r(a,x),r(b,y),r(c,z),r(d,t)))
     163
     164    # Line 4.
     165    for j in xrange(n-1):
     166        for jj in xrange(j+1,n-1):
     167            Y.extend([(r(i,j),r(i,jj),r(i+1,j),r(i+1,jj)) for i in xrange(3)])
     168
     169    # Line 5.
     170    for j in xrange(n-1):
     171        Y.append((r(0,j),r(1,j),r(2,j),3*n-3))
     172
     173    Y = tuple(map(tuple,map(sorted,Y)))
     174    return Y
     175
     176# Construction 3
     177def three_n_minus_height(n, B):
     178    """
     179    Returns a Steiner Quadruple System on `3n-8` points.
     180
     181    INPUT:
     182
     183    - ``n`` -- an integer such that `n\equiv 2[12]`.
     184
     185    - ``B`` -- A Steiner Quadruple System on `n` points.
     186
     187    EXAMPLES::
     188
     189        sage: from sage.combinat.designs.steiner_quadruple_systems import three_n_minus_height, is_steiner_quadruple_system
     190        sage: for n in xrange(4, 30):
     191        ....:     if (n%12) == 2:
     192        ....:         sqs = designs.steiner_quadruple_system(n)
     193        ....:         if not is_steiner_quadruple_system(3*n-8, three_n_minus_height(n, sqs)):
     194        ....:             print "Something is wrong !"
     195
     196    """
     197
     198    if (n%12) != 2:
     199        raise ValueError("n must be equal to 2 mod 12")
     200
     201    B = relabel_system(n, B)
     202    r = lambda i,x : (i%3)*(n-4)+(x%(n-4))
     203
     204    # Line 1.
     205    Y = [[x+2*(n-4) for x in B[0]]]
     206
     207    # Line 2.
     208    for s in B[1:]:
     209        for i in xrange(3):
     210            Y.append([r(i,x) if x<= n-5 else x+2*(n-4) for x in s])
     211
     212
     213    # Line 3.
     214    for a in xrange(4):
     215        for aa in xrange(n-4):
     216            for aaa in xrange(n-4):
     217                aaaa = -(a+aa+aaa)%(n-4)
     218                Y.append((r(0,aa),r(1,aaa), r(2,aaaa),3*(n-4)+a))
     219
     220
     221    # Line 4.
     222    k = (n-14)/12
     223    for i in xrange(3):
     224        for b in xrange(n-4):
     225            for bb in xrange(n-4):
     226                bbb = -(b+bb)%(n-4)
     227                for d in xrange(2*k+1):
     228                    Y.append((r(i+2,bbb), r(i, b+2*k+1+i*(4*k+2)-d) , r(i, b+2*k+2+i*(4*k+2)+d), r(i+1,bb)))
     229
     230
     231
     232    # Line 5.
     233    for i in xrange(3):
     234        for alpha in xrange(4*k+2, 12*k+9):
     235            for ra,sa in P(alpha,6*k+5):
     236                for raa,saa in P(alpha,6*k+5):
     237                    Y.append(tuple(sorted((r(i,ra),r(i,sa),r(i+1,raa), r(i+1,saa)))))
     238
     239
     240    Y = tuple(map(tuple,map(sorted,Y)))
     241    return Y
     242
     243# Construction 4
     244def three_n_minus_four(n, B):
     245    """
     246    Returns a Steiner Quadruple System on `3n-4` points.
     247
     248    INPUT:
     249
     250    - ``n`` -- an integer such that `n\equiv 10[12]`
     251
     252    - ``B`` -- A Steiner Quadruple System on `n` points.
     253
     254    EXAMPLES::
     255
     256        sage: from sage.combinat.designs.steiner_quadruple_systems import three_n_minus_four, is_steiner_quadruple_system
     257        sage: for n in xrange(4, 30):
     258        ....:     if n%12 == 10:
     259        ....:         sqs = designs.steiner_quadruple_system(n)
     260        ....:         if not is_steiner_quadruple_system(3*n-4, three_n_minus_four(n, sqs)):
     261        ....:             print "Something is wrong !"
     262
     263    """
     264    if n%12 != 10:
     265        raise ValueError("n must be equal to 10 mod 12")
     266
     267    B = relabel_system(n, B)
     268    r = lambda i,x : (i%3)*(n-2)+(x%(n-2))
     269
     270    # Line 1/2.
     271    Y = []
     272    for s in B:
     273        for i in xrange(3):
     274            Y.append(tuple(r(i,x) if x<= n-3 else x+2*(n-2) for x in s ))
     275
     276    # Line 3.
     277    for a in xrange(2):
     278        for aa in xrange(n-2):
     279            for aaa in xrange(n-2):
     280                aaaa= -(a+aa+aaa)%(n-2)
     281                Y.append((r(0,aa),r(1,aaa), r(2,aaaa),3*(n-2)+a))
     282
     283    # Line 4.
     284    k = (n-10)/12
     285    for i in xrange(3):
     286        for b in xrange(n-2):
     287            for bb in xrange(n-2):
     288                bbb = -(b+bb)%(n-2)
     289                for d in xrange(2*k+1):
     290                    Y.append((r(i+2,bbb), r(i, b+2*k+1+i*(4*k+2)-d) , r(i, b+2*k+2+i*(4*k+2)+d), r(i+1,bb)))
     291
     292    # Line 5.
     293    from sage.graphs.graph_coloring import round_robin
     294    one_factorization = round_robin(2*(6*k+4)).edges()
     295    color_classes = [[] for j in xrange(2*(6*k+4)-1)]
     296    for u,v,l in one_factorization:
     297        color_classes[l].append((u,v))
     298
     299    for i in xrange(3):
     300        for alpha in xrange(4*k+2, 12*k+6+1):
     301            for ra,sa in P(alpha, 6*k+4):
     302                for raa,saa in P(alpha, 6*k+4):
     303                    Y.append(tuple(sorted((r(i,ra),r(i,sa),r(i+1,raa), r(i+1,saa)))))
     304
     305    Y = tuple(map(tuple,map(sorted,Y)))
     306    return Y
     307
     308# Construction 5
     309def four_n_minus_six(n, B):
     310    """
     311    Returns a Steiner Quadruple System on `4n-6` points.
     312
     313    INPUT:
     314
     315    - ``n`` (integer)
     316
     317    - ``B`` -- A Steiner Quadruple System on `n` points.
     318
     319    EXAMPLES::
     320
     321        sage: from sage.combinat.designs.steiner_quadruple_systems import four_n_minus_six, is_steiner_quadruple_system
     322        sage: for n in xrange(4, 20):
     323        ....:     if (n%6) in [2,4]:
     324        ....:         sqs = designs.steiner_quadruple_system(n)
     325        ....:         if not is_steiner_quadruple_system(4*n-6, four_n_minus_six(n, sqs)):
     326        ....:             print "Something is wrong !"
     327
     328    """
     329
     330    f = n-2
     331    r = lambda i,ii,x : (2*(i%2)+(ii%2))*(n-2)+(x)%(n-2)
     332
     333    # Line 1.
     334    Y = []
     335    for s in B:
     336        for i in xrange(2):
     337            for ii in xrange(2):
     338                Y.append(tuple(r(i,ii,x) if x<= n-3 else x+3*(n-2) for x in s ))
     339
     340    # Line 2/3/4/5
     341    k = f/2
     342    for l in xrange(2):
     343        for eps in xrange(2):
     344            for c in xrange(k):
     345                for cc in xrange(k):
     346                    ccc = -(c+cc)%k
     347                    Y.append((4*(n-2)+l,r(0,0,2*c),r(0,1,2*cc-eps),r(1,eps,2*ccc+l)))
     348                    Y.append((4*(n-2)+l,r(0,0,2*c+1),r(0,1,2*cc-1-eps),r(1,eps,2*ccc+1-l)))
     349                    Y.append((4*(n-2)+l,r(1,0,2*c),r(1,1,2*cc-eps),r(0,eps,2*ccc+1-l)))
     350                    Y.append((4*(n-2)+l,r(1,0,2*c+1),r(1,1,2*cc-1-eps),r(0,eps,2*ccc+l)))
     351
     352    # Line 6/7
     353    for h in xrange(2):
     354        for eps in xrange(2):
     355            for ccc in xrange(k):
     356                assert len(barP(ccc,k)) == k-1
     357                for rc,sc in barP(ccc,k):
     358                    for c in xrange(k):
     359                        cc = -(c+ccc)%k
     360                        Y.append((r(h,0,2*c+eps),r(h,1,2*cc-eps),r(h+1,0,rc),r(h+1,0,sc)))
     361                        Y.append((r(h,0,2*c-1+eps),r(h,1,2*cc-eps),r(h+1,1,rc),r(h+1,1,sc)))
     362
     363
     364
     365    # Line 8/9
     366    for h in xrange(2):
     367        for eps in xrange(2):
     368            for ccc in xrange(k):
     369                for rc,sc in barP(k+ccc,k):
     370                    for c in xrange(k):
     371                        cc = -(c+ccc)%k
     372                        Y.append((r(h,0,2*c+eps),r(h,1,2*cc-eps),r(h+1,1,rc),r(h+1,1,sc)))
     373                        Y.append((r(h,0,2*c-1+eps),r(h,1,2*cc-eps),r(h+1,0,rc),r(h+1,0,sc)))
     374
     375
     376    # Line 10
     377    for h in xrange(2):
     378        for alpha in xrange(n-3):
     379            for ra,sa in P(alpha,k):
     380                for raa,saa in P(alpha,k):
     381                    Y.append((r(h,0,ra),r(h,0,sa),r(h,1,raa),r(h,1,saa)))
     382
     383    Y = tuple(map(tuple,map(sorted,Y)))
     384    return Y
     385
     386# Construction 6
     387def twelve_n_minus_ten(n, B):
     388    """
     389    Returns a Steiner Quadruple System on `12n-6` points.
     390
     391    INPUT:
     392
     393    - ``n`` (integer)
     394
     395    - ``B`` -- A Steiner Quadruple System on `n` points.
     396
     397    EXAMPLES::
     398
     399        sage: from sage.combinat.designs.steiner_quadruple_systems import twelve_n_minus_ten, is_steiner_quadruple_system
     400        sage: for n in xrange(4, 15):
     401        ....:     if (n%6) in [2,4]:
     402        ....:         sqs = designs.steiner_quadruple_system(n)
     403        ....:         if not is_steiner_quadruple_system(12*n-10, twelve_n_minus_ten(n, sqs)):
     404        ....:             print "Something is wrong !"
     405
     406    """
     407
     408    B14 = steiner_quadruple_system(14)
     409    r = lambda i,x : i%(n-1)+(x%12)*(n-1)
     410    k = n/2
     411
     412    # Line 1.
     413    Y = []
     414    for s in B14:
     415        for i in xrange(n-1):
     416            Y.append(tuple(r(i,x) if x<= 11 else r(n-2,11)+x-11 for x in s ))
     417
     418    for s in B:
     419        if s[-1] == n-1:
     420            u,v,w,B = s
     421            dd = {0:u,1:v,2:w}
     422            d = lambda x:dd[x%3]
     423            for b in xrange(12):
     424                for bb in xrange(12):
     425                    bbb = -(b+bb)%12
     426                    for h in xrange(2):
     427                        # Line 2
     428                        Y.append((r(n-2,11)+1+h,r(u,b),r(v,bb),r(w,bbb+3*h)))
     429
     430                    for i in xrange(3):
     431                        # Line 38.3
     432                        Y.append((  r(d(i),b+4+i), r(d(i),b+7+i), r(d(i+1),bb), r(d(i+2),bbb)))
     433
     434            for j in xrange(12):
     435                for eps in xrange(2):
     436                    for i in xrange(3):
     437                        # Line 38.4-38.7
     438                        Y.append((  r(d(i),j), r(d(i+1),j+6*eps  ), r(d(i+2),6*eps-2*j+1), r(d(i+2),6*eps-2*j-1)))
     439                        Y.append((  r(d(i),j), r(d(i+1),j+6*eps  ), r(d(i+2),6*eps-2*j+2), r(d(i+2),6*eps-2*j-2)))
     440                        Y.append((  r(d(i),j), r(d(i+1),j+6*eps-3), r(d(i+2),6*eps-2*j+1), r(d(i+2),6*eps-2*j+2)))
     441                        Y.append((  r(d(i),j), r(d(i+1),j+6*eps+3), r(d(i+2),6*eps-2*j-1), r(d(i+2),6*eps-2*j-2)))
     442
     443            for j in xrange(6):
     444                for i in xrange(3):
     445                    for eps in xrange(2):
     446                        # Line 38.8
     447                        Y.append((  r(d(i),j), r(d(i),j+6), r(d(i+1),j+3*eps), r(d(i+1),j+6+3*eps)))
     448
     449            for j in xrange(12):
     450                for i in xrange(3):
     451                    for eps in xrange(4):
     452                        # Line 38.11
     453                        Y.append((  r(d(i),j), r(d(i),j+1), r(d(i+1),j+3*eps), r(d(i+1),j+3*eps+1)))
     454                        # Line 38.12
     455                        Y.append((  r(d(i),j), r(d(i),j+2), r(d(i+1),j+3*eps), r(d(i+1),j+3*eps+2)))
     456                        # Line 38.13
     457                        Y.append((  r(d(i),j), r(d(i),j+4), r(d(i+1),j+3*eps), r(d(i+1),j+3*eps+4)))
     458
     459            for alpha in [4,5]:
     460                for ra,sa in P(alpha,6):
     461                    for raa,saa in P(alpha,6):
     462                        for i in xrange(3):
     463                            for ii in xrange(i+1,3):
     464                                # Line 38.14
     465                                Y.append((  r(d(i),ra), r(d(i),sa), r(d(ii),raa), r(d(ii),saa)))
     466
     467            for g in xrange(6):
     468                for eps in xrange(2):
     469                    for i in xrange(3):
     470                        for ii in xrange(3):
     471                            if i == ii:
     472                                continue
     473                            # Line 38.9
     474                            Y.append((  r(d(i),2*g+3*eps), r(d(i),2*g+6+3*eps), r(d(ii),2*g+1), r(d(ii),2*g+5)))
     475                            # Line 38.10
     476                            Y.append((  r(d(i),2*g+3*eps), r(d(i),2*g+6+3*eps), r(d(ii),2*g+2), r(d(ii),2*g+4)))
     477
     478        else:
     479            x,y,z,t = s
     480            for a in xrange(12):
     481                for aa in xrange(12):
     482                    for aaa in xrange(12):
     483                        aaaa = -(a+aa+aaa)%12
     484                        # Line 3
     485                        Y.append((r(x,a), r(y,aa), r(z,aaa), r(t,aaaa)))
     486    return Y
     487
     488def relabel_system(n,B):
     489    r"""
     490    Relabels the set so that `\{n-4, n-3, n-2, n-1\}` is in `B`.
     491
     492    INPUT:
     493
     494    - ``n`` -- an integer
     495
     496    - ``B`` -- a list of 4-uples on `0,...,n-1`.
     497
     498    EXAMPLE::
     499
     500        sage: from sage.combinat.designs.steiner_quadruple_systems import relabel_system
     501        sage: designs.steiner_quadruple_system(8)
     502        ((0, 1, 2, 3), (0, 1, 6, 7), (0, 5, 2, 7), (0, 5, 6, 3), (4, 1, 2, 7),
     503        (4, 1, 6, 3), (4, 5, 2, 3), (4, 5, 6, 7), (0, 1, 4, 5), (0, 2, 4, 6),
     504        (0, 3, 4, 7), (1, 2, 5, 6), (1, 3, 5, 7), (2, 3, 6, 7))
     505        sage: relabel_system(8,designs.steiner_quadruple_system(8))
     506        ((4, 5, 6, 7), (0, 1, 4, 5), (1, 2, 4, 6), (0, 2, 4, 7), (1, 3, 5, 6),
     507        (0, 3, 5, 7), (2, 3, 6, 7), (0, 1, 2, 3), (2, 3, 4, 5), (0, 3, 4, 6),
     508        (1, 3, 4, 7), (0, 2, 5, 6), (1, 2, 5, 7), (0, 1, 6, 7))
     509    """
     510
     511    label = {
     512        B[0][0] : n-4,
     513        B[0][1] : n-3,
     514        B[0][2] : n-2,
     515        B[0][3] : n-1
     516        }
     517
     518    def get_label(x):
     519        if x in label:
     520            return label[x]
     521        else:
     522            total = len(label)-4
     523            label[x] = total
     524            return total
     525
     526    B = tuple([tuple(sorted(map(get_label,s))) for s in B])
     527    return B
     528
     529def P(alpha, m):
     530    r"""
     531    Returns the collection of pairs `P_{\alpha}(m)`
     532
     533    For more information on this system, see [Hanani60]_.
     534
     535    EXAMPLE::
     536
     537        sage: from sage.combinat.designs.steiner_quadruple_systems import P
     538        sage: P(3,4)
     539        [(0, 5), (2, 7), (4, 1), (6, 3)]
     540    """
     541    if alpha >= 2*m-1:
     542        raise Exception
     543    if m%2==0:
     544        if alpha < m:
     545            if alpha%2 == 0:
     546                b = alpha/2
     547                return [(2*a, (2*a + 2*b + 1)%(2*m)) for a in xrange(m)]
     548            else:
     549                b = (alpha-1)/2
     550                return [(2*a, (2*a - 2*b - 1)%(2*m)) for a in xrange(m)]
     551        else:
     552            y = alpha - m
     553            pairs  = [(b,(2*y-b)%(2*m)) for b in xrange(y)]
     554            pairs += [(c,(2*m+2*y-c-2)%(2*m)) for c in xrange(2*y+1,m+y-1)]
     555            pairs += [(2*m+int(-1.5-.5*(-1)**y),y),(2*m+int(-1.5+.5*(-1)**y),m+y-1)]
     556            return pairs
     557    else:
     558        if alpha < m-1:
     559            if alpha % 2 == 0:
     560                b = alpha/2
     561                return [(2*a,(2*a+2*b+1)%(2*m)) for a in xrange(m)]
     562            else:
     563                b = (alpha-1)/2
     564                return [(2*a,(2*a-2*b-1)%(2*m)) for a in xrange(m)]
     565        else:
     566            y = alpha-m+1
     567            pairs  = [(b,2*y-b) for b in xrange(y)]
     568            pairs += [(c,2*m+2*y-c) for c in xrange(2*y+1,m+y)]
     569            pairs += [(y,m+y)]
     570            return pairs
     571
     572def _missing_pair(n,l):
     573    r"""
     574    Returns the smallest `(x,x+1)` that is not contained in `l`.
     575
     576    EXAMPLE::
     577
     578        sage: from sage.combinat.designs.steiner_quadruple_systems import _missing_pair
     579        sage: _missing_pair(6, [(0,1), (4,5)])
     580        (2, 3)
     581    """
     582    l = [x for X in l for x in X]
     583    for x in xrange(n):
     584        if not x in l:
     585            break
     586
     587    assert not x in l
     588    assert not x+1 in l
     589    return (x,x+1)
     590
     591def barP(eps, m):
     592    r"""
     593    Returns the collection of pairs `\overline P_{\alpha}(m)`
     594
     595    For more information on this system, see [Hanani60]_.
     596
     597    EXAMPLE::
     598
     599        sage: from sage.combinat.designs.steiner_quadruple_systems import barP
     600        sage: barP(3,4)
     601        [(0, 4), (3, 5), (1, 2)]
     602    """
     603    return barP_system(m)[eps]
     604
     605@cached_function
     606def barP_system(m):
     607    r"""
     608    Returns the 1-factorization of `K_{2m}` `\overline P(m)`
     609
     610    For more information on this system, see [Hanani60]_.
     611
     612    EXAMPLE::
     613
     614        sage: from sage.combinat.designs.steiner_quadruple_systems import barP_system
     615        sage: barP_system(3)
     616        [[(4, 3), (2, 5)],
     617        [(0, 5), (4, 1)],
     618        [(0, 2), (1, 3)],
     619        [(1, 5), (4, 2), (0, 3)],
     620        [(0, 4), (3, 5), (1, 2)],
     621        [(0, 1), (2, 3), (4, 5)]]
     622    """
     623    isequal = lambda e1,e2 : e1 == e2 or e1 == tuple(reversed(e2))
     624    pairs = []
     625    last = []
     626
     627    if m % 2 == 0:
     628        # The first (shorter) collections of  pairs, obtained from P by removing
     629        # pairs. Those are added to 'last', a new list of pairs
     630        last = []
     631        for n in xrange(1,(m-2)/2+1):
     632            pairs.append([p for p in P(2*n,m) if not isequal(p,(2*n,(4*n+1)%(2*m)))])
     633            last.append((2*n,(4*n+1)%(2*m)))
     634            pairs.append([p for p in P(2*n-1,m) if not isequal(p,(2*m-2-2*n,2*m-1-4*n))])
     635            last.append((2*m-2-2*n,2*m-1-4*n))
     636
     637        pairs.append([p for p in P(m,m) if not isequal(p,(2*m-2,0))])
     638        last.append((2*m-2,0))
     639        pairs.append([p for p in P(m+1,m) if not isequal(p,(2*m-1,1))])
     640        last.append((2*m-1,1))
     641
     642        assert all(len(pp) == m-1 for pp in pairs)
     643        assert len(last) == m
     644
     645        # Pairs of normal length
     646
     647        pairs.append(P(0,m))
     648        pairs.append(P(m-1,m))
     649
     650        for alpha in xrange(m+2,2*m-1):
     651            pairs.append(P(alpha,m))
     652        pairs.append(last)
     653
     654        assert len(pairs) == 2*m
     655
     656        # Now the points must be relabeled
     657        relabel = {}
     658        for n in xrange(1,(m-2)/2+1):
     659            relabel[2*n] = (4*n)%(2*m)
     660            relabel[4*n+1] = (4*n+1)%(2*m)
     661            relabel[2*m-2-2*n] = (4*n-2)%(2*m)
     662            relabel[2*m-1-4*n] = (4*n-1)%(2*m)
     663
     664        relabel[2*m-2] = (1)%(2*m)
     665        relabel[0] = 0
     666        relabel[2*m-1] = 2*m-1
     667        relabel[1] = 2*m-2
     668
     669    else:
     670        # The first (shorter) collections of  pairs, obtained from P by removing
     671        # pairs. Those are added to 'last', a new list of pairs
     672
     673        last = []
     674        for n in xrange(0,(m-3)/2+1):
     675            pairs.append([p for p in P(2*n,m) if not isequal(p,(2*n,(4*n+1)%(2*m)))])
     676            last.append((2*n,(4*n+1)%(2*m)))
     677            pairs.append([p for p in P(2*n+1,m) if not isequal(p,(2*m-2-2*n,2*m-3-4*n))])
     678            last.append((2*m-2-2*n,2*m-3-4*n))
     679
     680        pairs.append([p for p in P(2*m-2,m) if not isequal(p,(m-1,2*m-1))])
     681        last.append((m-1,2*m-1))
     682
     683        assert all(len(pp) == m-1 for pp in pairs)
     684        assert len(pairs) == m
     685
     686        # Pairs of normal length
     687
     688        for alpha in xrange(m-1,2*m-2):
     689            pairs.append(P(alpha,m))
     690        pairs.append(last)
     691
     692        assert len(pairs) == 2*m
     693
     694        # Now the points must be relabeled
     695        relabel = {}
     696        for n in xrange(0,(m-3)/2+1):
     697            relabel[2*n] = (4*n)%(2*m)
     698            relabel[4*n+1] = (4*n+1)%(2*m)
     699            relabel[2*m-2-2*n] = (4*n+2)%(2*m)
     700            relabel[2*m-3-4*n] = (4*n+3)%(2*m)
     701        relabel[m-1] = (2*m-2)%(2*m)
     702        relabel[2*m-1] = 2*m-1
     703
     704    assert len(relabel) == 2*m
     705    assert len(pairs) == 2*m
     706
     707    # Relabeling the points
     708
     709    pairs = [[(relabel[x],relabel[y]) for x,y in pp] for pp in pairs]
     710
     711    # Pairs are sorted first according to their cardinality, then using the
     712    # number of the smallest point that they do NOT contain.
     713    pairs.sort(key=lambda x: _missing_pair(2*m+1,x))
     714
     715    return pairs
     716
     717@cached_function
     718def steiner_quadruple_system(n, check = False):
     719    r"""
     720    Returns a Steiner Quadruple System on `n` points.
     721
     722    INPUT:
     723
     724    - ``n`` -- an integer such that `n\equiv 2,4[12]`
     725
     726    - ``check`` (boolean) -- whether to check that the system is a Steiner
     727      Quadruple System before returning it (`False` by default)
     728
     729    EXAMPLES::
     730
     731        sage: designs.steiner_quadruple_system(4)
     732        ((0, 1, 2, 3),)
     733        sage: designs.steiner_quadruple_system(8)
     734        ((0, 1, 2, 3), (0, 1, 6, 7), (0, 5, 2, 7), (0, 5, 6, 3), (4, 1, 2, 7),
     735        (4, 1, 6, 3), (4, 5, 2, 3), (4, 5, 6, 7), (0, 1, 4, 5), (0, 2, 4, 6),
     736        (0, 3, 4, 7), (1, 2, 5, 6), (1, 3, 5, 7), (2, 3, 6, 7))
     737
     738    TESTS::
     739
     740        sage: for n in xrange(4, 100):                                      # long time
     741        ....:     if (n%6) in [2,4]:                                        # long time
     742        ....:         sqs = designs.steiner_quadruple_system(n, check=True) # long time
     743    """
     744    n = int(n)
     745    if not ((n%6) in [2, 4]):
     746        raise ValueError("n mod 12 must be equal to 2 or 4")
     747    elif n == 4:
     748        return ((0,1,2,3),)
     749    elif n == 14:
     750        return _SQS14()
     751    elif n == 38:
     752        return _SQS38()
     753    elif (n%12) in [4,8]:
     754        nn = n/2
     755        sqs = two_n(nn,steiner_quadruple_system(nn, check = False))
     756    elif (n%18) in [4,10]:
     757        nn = (n+2)/3
     758        sqs = three_n_minus_two(nn,steiner_quadruple_system(nn, check = False))
     759    elif (n%36) == 34:
     760        nn = (n+8)/3
     761        sqs = three_n_minus_height(nn,steiner_quadruple_system(nn, check = False))
     762    elif (n%36) == 26 :
     763        nn = (n+4)/3
     764        sqs = three_n_minus_four(nn,steiner_quadruple_system(nn, check = False))
     765    elif (n%24) in [2,10]:
     766        nn = (n+6)/4
     767        sqs = four_n_minus_six(nn,steiner_quadruple_system(nn, check = False))
     768    elif (n%72) in [14,38]:
     769        nn = (n+10)/12
     770        sqs = twelve_n_minus_ten(nn, steiner_quadruple_system(nn, check = False))
     771    else:
     772        raise ValueError("This shouldn't happen !")
     773
     774    if check:
     775        if not is_steiner_quadruple_system(n, sqs):
     776            raise RuntimeError("Something is very very wrong.")
     777
     778    return sqs
     779
     780def is_steiner_quadruple_system(n,B):
     781    r"""
     782    Tests if `B` is a Steiner Quadruple System on `0,...,n-1`.
     783
     784    INPUT:
     785
     786    - ``n`` (integer)
     787
     788    - ``B`` -- a list of quadruples.
     789
     790    EXAMPLES::
     791
     792        sage: from sage.combinat.designs.steiner_quadruple_systems import is_steiner_quadruple_system
     793        sage: is_steiner_quadruple_system(8,designs.steiner_quadruple_system(8))
     794        True
     795    """
     796    from sage.rings.arith import binomial
     797    # Cardinality
     798    if len(B)*4 != binomial(n,3):
     799        return False
     800
     801    # Vertex set
     802    V = set([])
     803    for b in B:
     804        for x in b:
     805            V.add(x)
     806
     807    if V != set(range(n)):
     808        return False
     809
     810    # No two 4-sets intersect on 3 elements.
     811    from itertools import combinations
     812    s = set([])
     813    for b in B:
     814        for e in combinations(b,3):
     815            if frozenset(e) in s:
     816                return False
     817            s.add(frozenset(e))
     818
     819    return True
     820
     821
     822def _SQS14():
     823    r"""
     824    Returns a Steiner Quadruple System on 14 points.
     825
     826    Obtained form the La Jolla Covering Repository.
     827
     828    EXAMPLE::
     829
     830        sage: from sage.combinat.designs.steiner_quadruple_systems import is_steiner_quadruple_system, _SQS14
     831        sage: is_steiner_quadruple_system(14,_SQS14())
     832        True
     833    """
     834    return ((0, 1, 2, 5), (0, 1, 3, 6), (0, 1, 4, 13), (0, 1, 7, 10), (0, 1, 8, 9),
     835            (0, 1, 11, 12), (0, 2, 3, 4), (0, 2, 6, 12), (0, 2, 7, 9), (0, 2, 8, 11),
     836            (0, 2, 10, 13), (0, 3, 5, 13), (0, 3, 7, 11), (0, 3, 8, 10), (0, 3, 9, 12),
     837            (0, 4, 5, 9), (0, 4, 6, 11), (0, 4, 7, 8), (0, 4, 10, 12), (0, 5, 6, 8),
     838            (0, 5, 7, 12), (0, 5, 10, 11), (0, 6, 7, 13), (0, 6, 9, 10), (0, 8, 12, 13),
     839            (0, 9, 11, 13), (1, 2, 3, 13), (1, 2, 4, 12), (1, 2, 6, 9), (1, 2, 7, 11),
     840            (1, 2, 8, 10), (1, 3, 4, 5), (1, 3, 7, 8), (1, 3, 9, 11), (1, 3, 10, 12),
     841            (1, 4, 6, 10), (1, 4, 7, 9), (1, 4, 8, 11), (1, 5, 6, 11), (1, 5, 7, 13),
     842            (1, 5, 8, 12), (1, 5, 9, 10), (1, 6, 7, 12), (1, 6, 8, 13), (1, 9, 12, 13),
     843            (1, 10, 11, 13), (2, 3, 5, 11), (2, 3, 6, 7), (2, 3, 8, 12), (2, 3, 9, 10),
     844            (2, 4, 5, 13), (2, 4, 6, 8), (2, 4, 7, 10), (2, 4, 9, 11), (2, 5, 6, 10),
     845            (2, 5, 7, 8), (2, 5, 9, 12), (2, 6, 11, 13), (2, 7, 12, 13), (2, 8, 9, 13),
     846            (2, 10, 11, 12), (3, 4, 6, 9), (3, 4, 7, 12), (3, 4, 8, 13), (3, 4, 10, 11),
     847            (3, 5, 6, 12), (3, 5, 7, 10), (3, 5, 8, 9), (3, 6, 8, 11), (3, 6, 10, 13),
     848            (3, 7, 9, 13), (3, 11, 12, 13), (4, 5, 6, 7), (4, 5, 8, 10), (4, 5, 11, 12),
     849            (4, 6, 12, 13), (4, 7, 11, 13), (4, 8, 9, 12), (4, 9, 10, 13), (5, 6, 9, 13),
     850            (5, 7, 9, 11), (5, 8, 11, 13), (5, 10, 12, 13), (6, 7, 8, 9), (6, 7, 10, 11),
     851            (6, 8, 10, 12), (6, 9, 11, 12), (7, 8, 10, 13), (7, 8, 11, 12), (7, 9, 10, 12),
     852            (8, 9, 10, 11))
     853
     854def _SQS38():
     855    r"""
     856    Returns a Steiner Quadruple System on 14 points.
     857
     858    Obtained form the La Jolla Covering Repository.
     859
     860    EXAMPLE::
     861
     862        sage: from sage.combinat.designs.steiner_quadruple_systems import is_steiner_quadruple_system, _SQS38
     863        sage: is_steiner_quadruple_system(38,_SQS38())
     864        True
     865    """
     866
     867# From the La Jolla Covering Repository
     868    return ((0, 1, 2, 14), (0, 1, 3, 34), (0, 1, 4, 31), (0, 1, 5, 27), (0, 1, 6, 17),
     869            (0, 1, 7, 12), (0, 1, 8, 36), (0, 1, 9, 10), (0, 1, 11, 18), (0, 1, 13, 37),
     870            (0, 1, 15, 35), (0, 1, 16, 22), (0, 1, 19, 33), (0, 1, 20, 25), (0, 1, 21, 23),
     871            (0, 1, 24, 32), (0, 1, 26, 28), (0, 1, 29, 30), (0, 2, 3, 10), (0, 2, 4, 9),
     872            (0, 2, 5, 28), (0, 2, 6, 15), (0, 2, 7, 36), (0, 2, 8, 23), (0, 2, 11, 22),
     873            (0, 2, 12, 13), (0, 2, 16, 25), (0, 2, 17, 18), (0, 2, 19, 30), (0, 2, 20, 35),
     874            (0, 2, 21, 29), (0, 2, 24, 34), (0, 2, 26, 31), (0, 2, 27, 32), (0, 2, 33, 37),
     875            (0, 3, 4, 18), (0, 3, 5, 23), (0, 3, 6, 32), (0, 3, 7, 19), (0, 3, 8, 20),
     876            (0, 3, 9, 17), (0, 3, 11, 25), (0, 3, 12, 24), (0, 3, 13, 27), (0, 3, 14, 31),
     877            (0, 3, 15, 22), (0, 3, 16, 28), (0, 3, 21, 33), (0, 3, 26, 36), (0, 3, 29, 35),
     878            (0, 3, 30, 37), (0, 4, 5, 7), (0, 4, 6, 28), (0, 4, 8, 25), (0, 4, 10, 30),
     879            (0, 4, 11, 20), (0, 4, 12, 32), (0, 4, 13, 36), (0, 4, 14, 29), (0, 4, 15, 27),
     880            (0, 4, 16, 35), (0, 4, 17, 22), (0, 4, 19, 23), (0, 4, 21, 34), (0, 4, 24, 33),
     881            (0, 4, 26, 37), (0, 5, 6, 24), (0, 5, 8, 26), (0, 5, 9, 29), (0, 5, 10, 20),
     882            (0, 5, 11, 13), (0, 5, 12, 14), (0, 5, 15, 33), (0, 5, 16, 37), (0, 5, 17, 35),
     883            (0, 5, 18, 19), (0, 5, 21, 25), (0, 5, 22, 30), (0, 5, 31, 32), (0, 5, 34, 36),
     884            (0, 6, 7, 30), (0, 6, 8, 33), (0, 6, 9, 12), (0, 6, 10, 18), (0, 6, 11, 37),
     885            (0, 6, 13, 31), (0, 6, 14, 35), (0, 6, 16, 29), (0, 6, 19, 25), (0, 6, 20, 27),
     886            (0, 6, 21, 36), (0, 6, 22, 23), (0, 6, 26, 34), (0, 7, 8, 11), (0, 7, 9, 33),
     887            (0, 7, 10, 21), (0, 7, 13, 20), (0, 7, 14, 22), (0, 7, 15, 31), (0, 7, 16, 34),
     888            (0, 7, 17, 29), (0, 7, 18, 24), (0, 7, 23, 26), (0, 7, 25, 32), (0, 7, 27, 28),
     889            (0, 7, 35, 37), (0, 8, 9, 37), (0, 8, 10, 27), (0, 8, 12, 18), (0, 8, 13, 30),
     890            (0, 8, 14, 15), (0, 8, 16, 21), (0, 8, 17, 19), (0, 8, 22, 35), (0, 8, 24, 31),
     891            (0, 8, 28, 34), (0, 8, 29, 32), (0, 9, 11, 30), (0, 9, 13, 23), (0, 9, 14, 18),
     892            (0, 9, 15, 25), (0, 9, 16, 26), (0, 9, 19, 28), (0, 9, 20, 36), (0, 9, 21, 35),
     893            (0, 9, 22, 24), (0, 9, 27, 31), (0, 9, 32, 34), (0, 10, 11, 36),
     894            (0, 10, 12, 15), (0, 10, 13, 26), (0, 10, 14, 16), (0, 10, 17, 37),
     895            (0, 10, 19, 29), (0, 10, 22, 31), (0, 10, 23, 32), (0, 10, 24, 35),
     896            (0, 10, 25, 34), (0, 10, 28, 33), (0, 11, 12, 16), (0, 11, 14, 24),
     897            (0, 11, 15, 26), (0, 11, 17, 31), (0, 11, 19, 21), (0, 11, 23, 34),
     898            (0, 11, 27, 29), (0, 11, 28, 35), (0, 11, 32, 33), (0, 12, 17, 20),
     899            (0, 12, 19, 35), (0, 12, 21, 28), (0, 12, 22, 25), (0, 12, 23, 27),
     900            (0, 12, 26, 29), (0, 12, 30, 33), (0, 12, 31, 34), (0, 12, 36, 37),
     901            (0, 13, 14, 33), (0, 13, 15, 29), (0, 13, 16, 24), (0, 13, 17, 21),
     902            (0, 13, 18, 34), (0, 13, 19, 32), (0, 13, 22, 28), (0, 13, 25, 35),
     903            (0, 14, 17, 26), (0, 14, 19, 20), (0, 14, 21, 32), (0, 14, 23, 36),
     904            (0, 14, 25, 28), (0, 14, 27, 30), (0, 14, 34, 37), (0, 15, 16, 36),
     905            (0, 15, 17, 23), (0, 15, 18, 20), (0, 15, 19, 34), (0, 15, 21, 37),
     906            (0, 15, 24, 28), (0, 15, 30, 32), (0, 16, 17, 32), (0, 16, 18, 27),
     907            (0, 16, 19, 31), (0, 16, 20, 33), (0, 16, 23, 30), (0, 17, 24, 27),
     908            (0, 17, 25, 33), (0, 17, 28, 36), (0, 17, 30, 34), (0, 18, 21, 26),
     909            (0, 18, 22, 29), (0, 18, 23, 28), (0, 18, 25, 31), (0, 18, 30, 35),
     910            (0, 18, 32, 37), (0, 18, 33, 36), (0, 19, 22, 26), (0, 19, 24, 37),
     911            (0, 19, 27, 36), (0, 20, 21, 31), (0, 20, 22, 37), (0, 20, 23, 24),
     912            (0, 20, 26, 30), (0, 20, 28, 32), (0, 20, 29, 34), (0, 21, 22, 27),
     913            (0, 21, 24, 30), (0, 22, 32, 36), (0, 22, 33, 34), (0, 23, 25, 29),
     914            (0, 23, 31, 37), (0, 23, 33, 35), (0, 24, 25, 26), (0, 24, 29, 36),
     915            (0, 25, 27, 37), (0, 25, 30, 36), (0, 26, 27, 33), (0, 26, 32, 35),
     916            (0, 27, 34, 35), (0, 28, 29, 37), (0, 28, 30, 31), (0, 29, 31, 33),
     917            (0, 31, 35, 36), (1, 2, 3, 15), (1, 2, 4, 35), (1, 2, 5, 32), (1, 2, 6, 28),
     918            (1, 2, 7, 18), (1, 2, 8, 13), (1, 2, 9, 37), (1, 2, 10, 11), (1, 2, 12, 19),
     919            (1, 2, 16, 36), (1, 2, 17, 23), (1, 2, 20, 34), (1, 2, 21, 26), (1, 2, 22, 24),
     920            (1, 2, 25, 33), (1, 2, 27, 29), (1, 2, 30, 31), (1, 3, 4, 11), (1, 3, 5, 10),
     921            (1, 3, 6, 29), (1, 3, 7, 16), (1, 3, 8, 37), (1, 3, 9, 24), (1, 3, 12, 23),
     922            (1, 3, 13, 14), (1, 3, 17, 26), (1, 3, 18, 19), (1, 3, 20, 31), (1, 3, 21, 36),
     923            (1, 3, 22, 30), (1, 3, 25, 35), (1, 3, 27, 32), (1, 3, 28, 33), (1, 4, 5, 19),
     924            (1, 4, 6, 24), (1, 4, 7, 33), (1, 4, 8, 20), (1, 4, 9, 21), (1, 4, 10, 18),
     925            (1, 4, 12, 26), (1, 4, 13, 25), (1, 4, 14, 28), (1, 4, 15, 32), (1, 4, 16, 23),
     926            (1, 4, 17, 29), (1, 4, 22, 34), (1, 4, 27, 37), (1, 4, 30, 36), (1, 5, 6, 8),
     927            (1, 5, 7, 29), (1, 5, 9, 26), (1, 5, 11, 31), (1, 5, 12, 21), (1, 5, 13, 33),
     928            (1, 5, 14, 37), (1, 5, 15, 30), (1, 5, 16, 28), (1, 5, 17, 36), (1, 5, 18, 23),
     929            (1, 5, 20, 24), (1, 5, 22, 35), (1, 5, 25, 34), (1, 6, 7, 25), (1, 6, 9, 27),
     930            (1, 6, 10, 30), (1, 6, 11, 21), (1, 6, 12, 14), (1, 6, 13, 15), (1, 6, 16, 34),
     931            (1, 6, 18, 36), (1, 6, 19, 20), (1, 6, 22, 26), (1, 6, 23, 31), (1, 6, 32, 33),
     932            (1, 6, 35, 37), (1, 7, 8, 31), (1, 7, 9, 34), (1, 7, 10, 13), (1, 7, 11, 19),
     933            (1, 7, 14, 32), (1, 7, 15, 36), (1, 7, 17, 30), (1, 7, 20, 26), (1, 7, 21, 28),
     934            (1, 7, 22, 37), (1, 7, 23, 24), (1, 7, 27, 35), (1, 8, 9, 12), (1, 8, 10, 34),
     935            (1, 8, 11, 22), (1, 8, 14, 21), (1, 8, 15, 23), (1, 8, 16, 32), (1, 8, 17, 35),
     936            (1, 8, 18, 30), (1, 8, 19, 25), (1, 8, 24, 27), (1, 8, 26, 33), (1, 8, 28, 29),
     937            (1, 9, 11, 28), (1, 9, 13, 19), (1, 9, 14, 31), (1, 9, 15, 16), (1, 9, 17, 22),
     938            (1, 9, 18, 20), (1, 9, 23, 36), (1, 9, 25, 32), (1, 9, 29, 35), (1, 9, 30, 33),
     939            (1, 10, 12, 31), (1, 10, 14, 24), (1, 10, 15, 19), (1, 10, 16, 26),
     940            (1, 10, 17, 27), (1, 10, 20, 29), (1, 10, 21, 37), (1, 10, 22, 36),
     941            (1, 10, 23, 25), (1, 10, 28, 32), (1, 10, 33, 35), (1, 11, 12, 37),
     942            (1, 11, 13, 16), (1, 11, 14, 27), (1, 11, 15, 17), (1, 11, 20, 30),
     943            (1, 11, 23, 32), (1, 11, 24, 33), (1, 11, 25, 36), (1, 11, 26, 35),
     944            (1, 11, 29, 34), (1, 12, 13, 17), (1, 12, 15, 25), (1, 12, 16, 27),
     945            (1, 12, 18, 32), (1, 12, 20, 22), (1, 12, 24, 35), (1, 12, 28, 30),
     946            (1, 12, 29, 36), (1, 12, 33, 34), (1, 13, 18, 21), (1, 13, 20, 36),
     947            (1, 13, 22, 29), (1, 13, 23, 26), (1, 13, 24, 28), (1, 13, 27, 30),
     948            (1, 13, 31, 34), (1, 13, 32, 35), (1, 14, 15, 34), (1, 14, 16, 30),
     949            (1, 14, 17, 25), (1, 14, 18, 22), (1, 14, 19, 35), (1, 14, 20, 33),
     950            (1, 14, 23, 29), (1, 14, 26, 36), (1, 15, 18, 27), (1, 15, 20, 21),
     951            (1, 15, 22, 33), (1, 15, 24, 37), (1, 15, 26, 29), (1, 15, 28, 31),
     952            (1, 16, 17, 37), (1, 16, 18, 24), (1, 16, 19, 21), (1, 16, 20, 35),
     953            (1, 16, 25, 29), (1, 16, 31, 33), (1, 17, 18, 33), (1, 17, 19, 28),
     954            (1, 17, 20, 32), (1, 17, 21, 34), (1, 17, 24, 31), (1, 18, 25, 28),
     955            (1, 18, 26, 34), (1, 18, 29, 37), (1, 18, 31, 35), (1, 19, 22, 27),
     956            (1, 19, 23, 30), (1, 19, 24, 29), (1, 19, 26, 32), (1, 19, 31, 36),
     957            (1, 19, 34, 37), (1, 20, 23, 27), (1, 20, 28, 37), (1, 21, 22, 32),
     958            (1, 21, 24, 25), (1, 21, 27, 31), (1, 21, 29, 33), (1, 21, 30, 35),
     959            (1, 22, 23, 28), (1, 22, 25, 31), (1, 23, 33, 37), (1, 23, 34, 35),
     960            (1, 24, 26, 30), (1, 24, 34, 36), (1, 25, 26, 27), (1, 25, 30, 37),
     961            (1, 26, 31, 37), (1, 27, 28, 34), (1, 27, 33, 36), (1, 28, 35, 36),
     962            (1, 29, 31, 32), (1, 30, 32, 34), (1, 32, 36, 37), (2, 3, 4, 16),
     963            (2, 3, 5, 36), (2, 3, 6, 33), (2, 3, 7, 29), (2, 3, 8, 19), (2, 3, 9, 14),
     964            (2, 3, 11, 12), (2, 3, 13, 20), (2, 3, 17, 37), (2, 3, 18, 24), (2, 3, 21, 35),
     965            (2, 3, 22, 27), (2, 3, 23, 25), (2, 3, 26, 34), (2, 3, 28, 30), (2, 3, 31, 32),
     966            (2, 4, 5, 12), (2, 4, 6, 11), (2, 4, 7, 30), (2, 4, 8, 17), (2, 4, 10, 25),
     967            (2, 4, 13, 24), (2, 4, 14, 15), (2, 4, 18, 27), (2, 4, 19, 20), (2, 4, 21, 32),
     968            (2, 4, 22, 37), (2, 4, 23, 31), (2, 4, 26, 36), (2, 4, 28, 33), (2, 4, 29, 34),
     969            (2, 5, 6, 20), (2, 5, 7, 25), (2, 5, 8, 34), (2, 5, 9, 21), (2, 5, 10, 22),
     970            (2, 5, 11, 19), (2, 5, 13, 27), (2, 5, 14, 26), (2, 5, 15, 29), (2, 5, 16, 33),
     971            (2, 5, 17, 24), (2, 5, 18, 30), (2, 5, 23, 35), (2, 5, 31, 37), (2, 6, 7, 9),
     972            (2, 6, 8, 30), (2, 6, 10, 27), (2, 6, 12, 32), (2, 6, 13, 22), (2, 6, 14, 34),
     973            (2, 6, 16, 31), (2, 6, 17, 29), (2, 6, 18, 37), (2, 6, 19, 24), (2, 6, 21, 25),
     974            (2, 6, 23, 36), (2, 6, 26, 35), (2, 7, 8, 26), (2, 7, 10, 28), (2, 7, 11, 31),
     975            (2, 7, 12, 22), (2, 7, 13, 15), (2, 7, 14, 16), (2, 7, 17, 35), (2, 7, 19, 37),
     976            (2, 7, 20, 21), (2, 7, 23, 27), (2, 7, 24, 32), (2, 7, 33, 34), (2, 8, 9, 32),
     977            (2, 8, 10, 35), (2, 8, 11, 14), (2, 8, 12, 20), (2, 8, 15, 33), (2, 8, 16, 37),
     978            (2, 8, 18, 31), (2, 8, 21, 27), (2, 8, 22, 29), (2, 8, 24, 25), (2, 8, 28, 36),
     979            (2, 9, 10, 13), (2, 9, 11, 35), (2, 9, 12, 23), (2, 9, 15, 22), (2, 9, 16, 24),
     980            (2, 9, 17, 33), (2, 9, 18, 36), (2, 9, 19, 31), (2, 9, 20, 26), (2, 9, 25, 28),
     981            (2, 9, 27, 34), (2, 9, 29, 30), (2, 10, 12, 29), (2, 10, 14, 20),
     982            (2, 10, 15, 32), (2, 10, 16, 17), (2, 10, 18, 23), (2, 10, 19, 21),
     983            (2, 10, 24, 37), (2, 10, 26, 33), (2, 10, 30, 36), (2, 10, 31, 34),
     984            (2, 11, 13, 32), (2, 11, 15, 25), (2, 11, 16, 20), (2, 11, 17, 27),
     985            (2, 11, 18, 28), (2, 11, 21, 30), (2, 11, 23, 37), (2, 11, 24, 26),
     986            (2, 11, 29, 33), (2, 11, 34, 36), (2, 12, 14, 17), (2, 12, 15, 28),
     987            (2, 12, 16, 18), (2, 12, 21, 31), (2, 12, 24, 33), (2, 12, 25, 34),
     988            (2, 12, 26, 37), (2, 12, 27, 36), (2, 12, 30, 35), (2, 13, 14, 18),
     989            (2, 13, 16, 26), (2, 13, 17, 28), (2, 13, 19, 33), (2, 13, 21, 23),
     990            (2, 13, 25, 36), (2, 13, 29, 31), (2, 13, 30, 37), (2, 13, 34, 35),
     991            (2, 14, 19, 22), (2, 14, 21, 37), (2, 14, 23, 30), (2, 14, 24, 27),
     992            (2, 14, 25, 29), (2, 14, 28, 31), (2, 14, 32, 35), (2, 14, 33, 36),
     993            (2, 15, 16, 35), (2, 15, 17, 31), (2, 15, 18, 26), (2, 15, 19, 23),
     994            (2, 15, 20, 36), (2, 15, 21, 34), (2, 15, 24, 30), (2, 15, 27, 37),
     995            (2, 16, 19, 28), (2, 16, 21, 22), (2, 16, 23, 34), (2, 16, 27, 30),
     996            (2, 16, 29, 32), (2, 17, 19, 25), (2, 17, 20, 22), (2, 17, 21, 36),
     997            (2, 17, 26, 30), (2, 17, 32, 34), (2, 18, 19, 34), (2, 18, 20, 29),
     998            (2, 18, 21, 33), (2, 18, 22, 35), (2, 18, 25, 32), (2, 19, 26, 29),
     999            (2, 19, 27, 35), (2, 19, 32, 36), (2, 20, 23, 28), (2, 20, 24, 31),
     1000            (2, 20, 25, 30), (2, 20, 27, 33), (2, 20, 32, 37), (2, 21, 24, 28),
     1001            (2, 22, 23, 33), (2, 22, 25, 26), (2, 22, 28, 32), (2, 22, 30, 34),
     1002            (2, 22, 31, 36), (2, 23, 24, 29), (2, 23, 26, 32), (2, 24, 35, 36),
     1003            (2, 25, 27, 31), (2, 25, 35, 37), (2, 26, 27, 28), (2, 28, 29, 35),
     1004            (2, 28, 34, 37), (2, 29, 36, 37), (2, 30, 32, 33), (2, 31, 33, 35),
     1005            (3, 4, 5, 17), (3, 4, 6, 37), (3, 4, 7, 34), (3, 4, 8, 30), (3, 4, 9, 20),
     1006            (3, 4, 10, 15), (3, 4, 12, 13), (3, 4, 14, 21), (3, 4, 19, 25), (3, 4, 22, 36),
     1007            (3, 4, 23, 28), (3, 4, 24, 26), (3, 4, 27, 35), (3, 4, 29, 31), (3, 4, 32, 33),
     1008            (3, 5, 6, 13), (3, 5, 7, 12), (3, 5, 8, 31), (3, 5, 9, 18), (3, 5, 11, 26),
     1009            (3, 5, 14, 25), (3, 5, 15, 16), (3, 5, 19, 28), (3, 5, 20, 21), (3, 5, 22, 33),
     1010            (3, 5, 24, 32), (3, 5, 27, 37), (3, 5, 29, 34), (3, 5, 30, 35), (3, 6, 7, 21),
     1011            (3, 6, 8, 26), (3, 6, 9, 35), (3, 6, 10, 22), (3, 6, 11, 23), (3, 6, 12, 20),
     1012            (3, 6, 14, 28), (3, 6, 15, 27), (3, 6, 16, 30), (3, 6, 17, 34), (3, 6, 18, 25),
     1013            (3, 6, 19, 31), (3, 6, 24, 36), (3, 7, 8, 10), (3, 7, 9, 31), (3, 7, 11, 28),
     1014            (3, 7, 13, 33), (3, 7, 14, 23), (3, 7, 15, 35), (3, 7, 17, 32), (3, 7, 18, 30),
     1015            (3, 7, 20, 25), (3, 7, 22, 26), (3, 7, 24, 37), (3, 7, 27, 36), (3, 8, 9, 27),
     1016            (3, 8, 11, 29), (3, 8, 12, 32), (3, 8, 13, 23), (3, 8, 14, 16), (3, 8, 15, 17),
     1017            (3, 8, 18, 36), (3, 8, 21, 22), (3, 8, 24, 28), (3, 8, 25, 33), (3, 8, 34, 35),
     1018            (3, 9, 10, 33), (3, 9, 11, 36), (3, 9, 12, 15), (3, 9, 13, 21), (3, 9, 16, 34),
     1019            (3, 9, 19, 32), (3, 9, 22, 28), (3, 9, 23, 30), (3, 9, 25, 26), (3, 9, 29, 37),
     1020            (3, 10, 11, 14), (3, 10, 12, 36), (3, 10, 13, 24), (3, 10, 16, 23),
     1021            (3, 10, 17, 25), (3, 10, 18, 34), (3, 10, 19, 37), (3, 10, 20, 32),
     1022            (3, 10, 21, 27), (3, 10, 26, 29), (3, 10, 28, 35), (3, 10, 30, 31),
     1023            (3, 11, 13, 30), (3, 11, 15, 21), (3, 11, 16, 33), (3, 11, 17, 18),
     1024            (3, 11, 19, 24), (3, 11, 20, 22), (3, 11, 27, 34), (3, 11, 31, 37),
     1025            (3, 11, 32, 35), (3, 12, 14, 33), (3, 12, 16, 26), (3, 12, 17, 21),
     1026            (3, 12, 18, 28), (3, 12, 19, 29), (3, 12, 22, 31), (3, 12, 25, 27),
     1027            (3, 12, 30, 34), (3, 12, 35, 37), (3, 13, 15, 18), (3, 13, 16, 29),
     1028            (3, 13, 17, 19), (3, 13, 22, 32), (3, 13, 25, 34), (3, 13, 26, 35),
     1029            (3, 13, 28, 37), (3, 13, 31, 36), (3, 14, 15, 19), (3, 14, 17, 27),
     1030            (3, 14, 18, 29), (3, 14, 20, 34), (3, 14, 22, 24), (3, 14, 26, 37),
     1031            (3, 14, 30, 32), (3, 14, 35, 36), (3, 15, 20, 23), (3, 15, 24, 31),
     1032            (3, 15, 25, 28), (3, 15, 26, 30), (3, 15, 29, 32), (3, 15, 33, 36),
     1033            (3, 15, 34, 37), (3, 16, 17, 36), (3, 16, 18, 32), (3, 16, 19, 27),
     1034            (3, 16, 20, 24), (3, 16, 21, 37), (3, 16, 22, 35), (3, 16, 25, 31),
     1035            (3, 17, 20, 29), (3, 17, 22, 23), (3, 17, 24, 35), (3, 17, 28, 31),
     1036            (3, 17, 30, 33), (3, 18, 20, 26), (3, 18, 21, 23), (3, 18, 22, 37),
     1037            (3, 18, 27, 31), (3, 18, 33, 35), (3, 19, 20, 35), (3, 19, 21, 30),
     1038            (3, 19, 22, 34), (3, 19, 23, 36), (3, 19, 26, 33), (3, 20, 27, 30),
     1039            (3, 20, 28, 36), (3, 20, 33, 37), (3, 21, 24, 29), (3, 21, 25, 32),
     1040            (3, 21, 26, 31), (3, 21, 28, 34), (3, 22, 25, 29), (3, 23, 24, 34),
     1041            (3, 23, 26, 27), (3, 23, 29, 33), (3, 23, 31, 35), (3, 23, 32, 37),
     1042            (3, 24, 25, 30), (3, 24, 27, 33), (3, 25, 36, 37), (3, 26, 28, 32),
     1043            (3, 27, 28, 29), (3, 29, 30, 36), (3, 31, 33, 34), (3, 32, 34, 36),
     1044            (4, 5, 6, 18), (4, 5, 8, 35), (4, 5, 9, 31), (4, 5, 10, 21), (4, 5, 11, 16),
     1045            (4, 5, 13, 14), (4, 5, 15, 22), (4, 5, 20, 26), (4, 5, 23, 37), (4, 5, 24, 29),
     1046            (4, 5, 25, 27), (4, 5, 28, 36), (4, 5, 30, 32), (4, 5, 33, 34), (4, 6, 7, 14),
     1047            (4, 6, 8, 13), (4, 6, 9, 32), (4, 6, 10, 19), (4, 6, 12, 27), (4, 6, 15, 26),
     1048            (4, 6, 16, 17), (4, 6, 20, 29), (4, 6, 21, 22), (4, 6, 23, 34), (4, 6, 25, 33),
     1049            (4, 6, 30, 35), (4, 6, 31, 36), (4, 7, 8, 22), (4, 7, 9, 27), (4, 7, 10, 36),
     1050            (4, 7, 11, 23), (4, 7, 12, 24), (4, 7, 13, 21), (4, 7, 15, 29), (4, 7, 16, 28),
     1051            (4, 7, 17, 31), (4, 7, 18, 35), (4, 7, 19, 26), (4, 7, 20, 32), (4, 7, 25, 37),
     1052            (4, 8, 9, 11), (4, 8, 10, 32), (4, 8, 12, 29), (4, 8, 14, 34), (4, 8, 15, 24),
     1053            (4, 8, 16, 36), (4, 8, 18, 33), (4, 8, 19, 31), (4, 8, 21, 26), (4, 8, 23, 27),
     1054            (4, 8, 28, 37), (4, 9, 10, 28), (4, 9, 12, 30), (4, 9, 13, 33), (4, 9, 14, 24),
     1055            (4, 9, 15, 17), (4, 9, 16, 18), (4, 9, 19, 37), (4, 9, 22, 23), (4, 9, 25, 29),
     1056            (4, 9, 26, 34), (4, 9, 35, 36), (4, 10, 11, 34), (4, 10, 12, 37),
     1057            (4, 10, 13, 16), (4, 10, 14, 22), (4, 10, 17, 35), (4, 10, 20, 33),
     1058            (4, 10, 23, 29), (4, 10, 24, 31), (4, 10, 26, 27), (4, 11, 12, 15),
     1059            (4, 11, 13, 37), (4, 11, 14, 25), (4, 11, 17, 24), (4, 11, 18, 26),
     1060            (4, 11, 19, 35), (4, 11, 21, 33), (4, 11, 22, 28), (4, 11, 27, 30),
     1061            (4, 11, 29, 36), (4, 11, 31, 32), (4, 12, 14, 31), (4, 12, 16, 22),
     1062            (4, 12, 17, 34), (4, 12, 18, 19), (4, 12, 20, 25), (4, 12, 21, 23),
     1063            (4, 12, 28, 35), (4, 12, 33, 36), (4, 13, 15, 34), (4, 13, 17, 27),
     1064            (4, 13, 18, 22), (4, 13, 19, 29), (4, 13, 20, 30), (4, 13, 23, 32),
     1065            (4, 13, 26, 28), (4, 13, 31, 35), (4, 14, 16, 19), (4, 14, 17, 30),
     1066            (4, 14, 18, 20), (4, 14, 23, 33), (4, 14, 26, 35), (4, 14, 27, 36),
     1067            (4, 14, 32, 37), (4, 15, 16, 20), (4, 15, 18, 28), (4, 15, 19, 30),
     1068            (4, 15, 21, 35), (4, 15, 23, 25), (4, 15, 31, 33), (4, 15, 36, 37),
     1069            (4, 16, 21, 24), (4, 16, 25, 32), (4, 16, 26, 29), (4, 16, 27, 31),
     1070            (4, 16, 30, 33), (4, 16, 34, 37), (4, 17, 18, 37), (4, 17, 19, 33),
     1071            (4, 17, 20, 28), (4, 17, 21, 25), (4, 17, 23, 36), (4, 17, 26, 32),
     1072            (4, 18, 21, 30), (4, 18, 23, 24), (4, 18, 25, 36), (4, 18, 29, 32),
     1073            (4, 18, 31, 34), (4, 19, 21, 27), (4, 19, 22, 24), (4, 19, 28, 32),
     1074            (4, 19, 34, 36), (4, 20, 21, 36), (4, 20, 22, 31), (4, 20, 23, 35),
     1075            (4, 20, 24, 37), (4, 20, 27, 34), (4, 21, 28, 31), (4, 21, 29, 37),
     1076            (4, 22, 25, 30), (4, 22, 26, 33), (4, 22, 27, 32), (4, 22, 29, 35),
     1077            (4, 23, 26, 30), (4, 24, 25, 35), (4, 24, 27, 28), (4, 24, 30, 34),
     1078            (4, 24, 32, 36), (4, 25, 26, 31), (4, 25, 28, 34), (4, 27, 29, 33),
     1079            (4, 28, 29, 30), (4, 30, 31, 37), (4, 32, 34, 35), (4, 33, 35, 37),
     1080            (5, 6, 7, 19), (5, 6, 9, 36), (5, 6, 10, 32), (5, 6, 11, 22), (5, 6, 12, 17),
     1081            (5, 6, 14, 15), (5, 6, 16, 23), (5, 6, 21, 27), (5, 6, 25, 30), (5, 6, 26, 28),
     1082            (5, 6, 29, 37), (5, 6, 31, 33), (5, 6, 34, 35), (5, 7, 8, 15), (5, 7, 9, 14),
     1083            (5, 7, 10, 33), (5, 7, 11, 20), (5, 7, 13, 28), (5, 7, 16, 27), (5, 7, 17, 18),
     1084            (5, 7, 21, 30), (5, 7, 22, 23), (5, 7, 24, 35), (5, 7, 26, 34), (5, 7, 31, 36),
     1085            (5, 7, 32, 37), (5, 8, 9, 23), (5, 8, 10, 28), (5, 8, 11, 37), (5, 8, 12, 24),
     1086            (5, 8, 13, 25), (5, 8, 14, 22), (5, 8, 16, 30), (5, 8, 17, 29), (5, 8, 18, 32),
     1087            (5, 8, 19, 36), (5, 8, 20, 27), (5, 8, 21, 33), (5, 9, 10, 12), (5, 9, 11, 33),
     1088            (5, 9, 13, 30), (5, 9, 15, 35), (5, 9, 16, 25), (5, 9, 17, 37), (5, 9, 19, 34),
     1089            (5, 9, 20, 32), (5, 9, 22, 27), (5, 9, 24, 28), (5, 10, 11, 29),
     1090            (5, 10, 13, 31), (5, 10, 14, 34), (5, 10, 15, 25), (5, 10, 16, 18),
     1091            (5, 10, 17, 19), (5, 10, 23, 24), (5, 10, 26, 30), (5, 10, 27, 35),
     1092            (5, 10, 36, 37), (5, 11, 12, 35), (5, 11, 14, 17), (5, 11, 15, 23),
     1093            (5, 11, 18, 36), (5, 11, 21, 34), (5, 11, 24, 30), (5, 11, 25, 32),
     1094            (5, 11, 27, 28), (5, 12, 13, 16), (5, 12, 15, 26), (5, 12, 18, 25),
     1095            (5, 12, 19, 27), (5, 12, 20, 36), (5, 12, 22, 34), (5, 12, 23, 29),
     1096            (5, 12, 28, 31), (5, 12, 30, 37), (5, 12, 32, 33), (5, 13, 15, 32),
     1097            (5, 13, 17, 23), (5, 13, 18, 35), (5, 13, 19, 20), (5, 13, 21, 26),
     1098            (5, 13, 22, 24), (5, 13, 29, 36), (5, 13, 34, 37), (5, 14, 16, 35),
     1099            (5, 14, 18, 28), (5, 14, 19, 23), (5, 14, 20, 30), (5, 14, 21, 31),
     1100            (5, 14, 24, 33), (5, 14, 27, 29), (5, 14, 32, 36), (5, 15, 17, 20),
     1101            (5, 15, 18, 31), (5, 15, 19, 21), (5, 15, 24, 34), (5, 15, 27, 36),
     1102            (5, 15, 28, 37), (5, 16, 17, 21), (5, 16, 19, 29), (5, 16, 20, 31),
     1103            (5, 16, 22, 36), (5, 16, 24, 26), (5, 16, 32, 34), (5, 17, 22, 25),
     1104            (5, 17, 26, 33), (5, 17, 27, 30), (5, 17, 28, 32), (5, 17, 31, 34),
     1105            (5, 18, 20, 34), (5, 18, 21, 29), (5, 18, 22, 26), (5, 18, 24, 37),
     1106            (5, 18, 27, 33), (5, 19, 22, 31), (5, 19, 24, 25), (5, 19, 26, 37),
     1107            (5, 19, 30, 33), (5, 19, 32, 35), (5, 20, 22, 28), (5, 20, 23, 25),
     1108            (5, 20, 29, 33), (5, 20, 35, 37), (5, 21, 22, 37), (5, 21, 23, 32),
     1109            (5, 21, 24, 36), (5, 21, 28, 35), (5, 22, 29, 32), (5, 23, 26, 31),
     1110            (5, 23, 27, 34), (5, 23, 28, 33), (5, 23, 30, 36), (5, 24, 27, 31),
     1111            (5, 25, 26, 36), (5, 25, 28, 29), (5, 25, 31, 35), (5, 25, 33, 37),
     1112            (5, 26, 27, 32), (5, 26, 29, 35), (5, 28, 30, 34), (5, 29, 30, 31),
     1113            (5, 33, 35, 36), (6, 7, 8, 20), (6, 7, 10, 37), (6, 7, 11, 33), (6, 7, 12, 23),
     1114            (6, 7, 13, 18), (6, 7, 15, 16), (6, 7, 17, 24), (6, 7, 22, 28), (6, 7, 26, 31),
     1115            (6, 7, 27, 29), (6, 7, 32, 34), (6, 7, 35, 36), (6, 8, 9, 16), (6, 8, 10, 15),
     1116            (6, 8, 11, 34), (6, 8, 12, 21), (6, 8, 14, 29), (6, 8, 17, 28), (6, 8, 18, 19),
     1117            (6, 8, 22, 31), (6, 8, 23, 24), (6, 8, 25, 36), (6, 8, 27, 35), (6, 8, 32, 37),
     1118            (6, 9, 10, 24), (6, 9, 11, 29), (6, 9, 13, 25), (6, 9, 14, 26), (6, 9, 15, 23),
     1119            (6, 9, 17, 31), (6, 9, 18, 30), (6, 9, 19, 33), (6, 9, 20, 37), (6, 9, 21, 28),
     1120            (6, 9, 22, 34), (6, 10, 11, 13), (6, 10, 12, 34), (6, 10, 14, 31),
     1121            (6, 10, 16, 36), (6, 10, 17, 26), (6, 10, 20, 35), (6, 10, 21, 33),
     1122            (6, 10, 23, 28), (6, 10, 25, 29), (6, 11, 12, 30), (6, 11, 14, 32),
     1123            (6, 11, 15, 35), (6, 11, 16, 26), (6, 11, 17, 19), (6, 11, 18, 20),
     1124            (6, 11, 24, 25), (6, 11, 27, 31), (6, 11, 28, 36), (6, 12, 13, 36),
     1125            (6, 12, 15, 18), (6, 12, 16, 24), (6, 12, 19, 37), (6, 12, 22, 35),
     1126            (6, 12, 25, 31), (6, 12, 26, 33), (6, 12, 28, 29), (6, 13, 14, 17),
     1127            (6, 13, 16, 27), (6, 13, 19, 26), (6, 13, 20, 28), (6, 13, 21, 37),
     1128            (6, 13, 23, 35), (6, 13, 24, 30), (6, 13, 29, 32), (6, 13, 33, 34),
     1129            (6, 14, 16, 33), (6, 14, 18, 24), (6, 14, 19, 36), (6, 14, 20, 21),
     1130            (6, 14, 22, 27), (6, 14, 23, 25), (6, 14, 30, 37), (6, 15, 17, 36),
     1131            (6, 15, 19, 29), (6, 15, 20, 24), (6, 15, 21, 31), (6, 15, 22, 32),
     1132            (6, 15, 25, 34), (6, 15, 28, 30), (6, 15, 33, 37), (6, 16, 18, 21),
     1133            (6, 16, 19, 32), (6, 16, 20, 22), (6, 16, 25, 35), (6, 16, 28, 37),
     1134            (6, 17, 18, 22), (6, 17, 20, 30), (6, 17, 21, 32), (6, 17, 23, 37),
     1135            (6, 17, 25, 27), (6, 17, 33, 35), (6, 18, 23, 26), (6, 18, 27, 34),
     1136            (6, 18, 28, 31), (6, 18, 29, 33), (6, 18, 32, 35), (6, 19, 21, 35),
     1137            (6, 19, 22, 30), (6, 19, 23, 27), (6, 19, 28, 34), (6, 20, 23, 32),
     1138            (6, 20, 25, 26), (6, 20, 31, 34), (6, 20, 33, 36), (6, 21, 23, 29),
     1139            (6, 21, 24, 26), (6, 21, 30, 34), (6, 22, 24, 33), (6, 22, 25, 37),
     1140            (6, 22, 29, 36), (6, 23, 30, 33), (6, 24, 27, 32), (6, 24, 28, 35),
     1141            (6, 24, 29, 34), (6, 24, 31, 37), (6, 25, 28, 32), (6, 26, 27, 37),
     1142            (6, 26, 29, 30), (6, 26, 32, 36), (6, 27, 28, 33), (6, 27, 30, 36),
     1143            (6, 29, 31, 35), (6, 30, 31, 32), (6, 34, 36, 37), (7, 8, 9, 21),
     1144            (7, 8, 12, 34), (7, 8, 13, 24), (7, 8, 14, 19), (7, 8, 16, 17), (7, 8, 18, 25),
     1145            (7, 8, 23, 29), (7, 8, 27, 32), (7, 8, 28, 30), (7, 8, 33, 35), (7, 8, 36, 37),
     1146            (7, 9, 10, 17), (7, 9, 11, 16), (7, 9, 12, 35), (7, 9, 13, 22), (7, 9, 15, 30),
     1147            (7, 9, 18, 29), (7, 9, 19, 20), (7, 9, 23, 32), (7, 9, 24, 25), (7, 9, 26, 37),
     1148            (7, 9, 28, 36), (7, 10, 11, 25), (7, 10, 12, 30), (7, 10, 14, 26),
     1149            (7, 10, 15, 27), (7, 10, 16, 24), (7, 10, 18, 32), (7, 10, 19, 31),
     1150            (7, 10, 20, 34), (7, 10, 22, 29), (7, 10, 23, 35), (7, 11, 12, 14),
     1151            (7, 11, 13, 35), (7, 11, 15, 32), (7, 11, 17, 37), (7, 11, 18, 27),
     1152            (7, 11, 21, 36), (7, 11, 22, 34), (7, 11, 24, 29), (7, 11, 26, 30),
     1153            (7, 12, 13, 31), (7, 12, 15, 33), (7, 12, 16, 36), (7, 12, 17, 27),
     1154            (7, 12, 18, 20), (7, 12, 19, 21), (7, 12, 25, 26), (7, 12, 28, 32),
     1155            (7, 12, 29, 37), (7, 13, 14, 37), (7, 13, 16, 19), (7, 13, 17, 25),
     1156            (7, 13, 23, 36), (7, 13, 26, 32), (7, 13, 27, 34), (7, 13, 29, 30),
     1157            (7, 14, 15, 18), (7, 14, 17, 28), (7, 14, 20, 27), (7, 14, 21, 29),
     1158            (7, 14, 24, 36), (7, 14, 25, 31), (7, 14, 30, 33), (7, 14, 34, 35),
     1159            (7, 15, 17, 34), (7, 15, 19, 25), (7, 15, 20, 37), (7, 15, 21, 22),
     1160            (7, 15, 23, 28), (7, 15, 24, 26), (7, 16, 18, 37), (7, 16, 20, 30),
     1161            (7, 16, 21, 25), (7, 16, 22, 32), (7, 16, 23, 33), (7, 16, 26, 35),
     1162            (7, 16, 29, 31), (7, 17, 19, 22), (7, 17, 20, 33), (7, 17, 21, 23),
     1163            (7, 17, 26, 36), (7, 18, 19, 23), (7, 18, 21, 31), (7, 18, 22, 33),
     1164            (7, 18, 26, 28), (7, 18, 34, 36), (7, 19, 24, 27), (7, 19, 28, 35),
     1165            (7, 19, 29, 32), (7, 19, 30, 34), (7, 19, 33, 36), (7, 20, 22, 36),
     1166            (7, 20, 23, 31), (7, 20, 24, 28), (7, 20, 29, 35), (7, 21, 24, 33),
     1167            (7, 21, 26, 27), (7, 21, 32, 35), (7, 21, 34, 37), (7, 22, 24, 30),
     1168            (7, 22, 25, 27), (7, 22, 31, 35), (7, 23, 25, 34), (7, 23, 30, 37),
     1169            (7, 24, 31, 34), (7, 25, 28, 33), (7, 25, 29, 36), (7, 25, 30, 35),
     1170            (7, 26, 29, 33), (7, 27, 30, 31), (7, 27, 33, 37), (7, 28, 29, 34),
     1171            (7, 28, 31, 37), (7, 30, 32, 36), (7, 31, 32, 33), (8, 9, 10, 22),
     1172            (8, 9, 13, 35), (8, 9, 14, 25), (8, 9, 15, 20), (8, 9, 17, 18), (8, 9, 19, 26),
     1173            (8, 9, 24, 30), (8, 9, 28, 33), (8, 9, 29, 31), (8, 9, 34, 36), (8, 10, 11, 18),
     1174            (8, 10, 12, 17), (8, 10, 13, 36), (8, 10, 14, 23), (8, 10, 16, 31),
     1175            (8, 10, 19, 30), (8, 10, 20, 21), (8, 10, 24, 33), (8, 10, 25, 26),
     1176            (8, 10, 29, 37), (8, 11, 12, 26), (8, 11, 13, 31), (8, 11, 15, 27),
     1177            (8, 11, 16, 28), (8, 11, 17, 25), (8, 11, 19, 33), (8, 11, 20, 32),
     1178            (8, 11, 21, 35), (8, 11, 23, 30), (8, 11, 24, 36), (8, 12, 13, 15),
     1179            (8, 12, 14, 36), (8, 12, 16, 33), (8, 12, 19, 28), (8, 12, 22, 37),
     1180            (8, 12, 23, 35), (8, 12, 25, 30), (8, 12, 27, 31), (8, 13, 14, 32),
     1181            (8, 13, 16, 34), (8, 13, 17, 37), (8, 13, 18, 28), (8, 13, 19, 21),
     1182            (8, 13, 20, 22), (8, 13, 26, 27), (8, 13, 29, 33), (8, 14, 17, 20),
     1183            (8, 14, 18, 26), (8, 14, 24, 37), (8, 14, 27, 33), (8, 14, 28, 35),
     1184            (8, 14, 30, 31), (8, 15, 16, 19), (8, 15, 18, 29), (8, 15, 21, 28),
     1185            (8, 15, 22, 30), (8, 15, 25, 37), (8, 15, 26, 32), (8, 15, 31, 34),
     1186            (8, 15, 35, 36), (8, 16, 18, 35), (8, 16, 20, 26), (8, 16, 22, 23),
     1187            (8, 16, 24, 29), (8, 16, 25, 27), (8, 17, 21, 31), (8, 17, 22, 26),
     1188            (8, 17, 23, 33), (8, 17, 24, 34), (8, 17, 27, 36), (8, 17, 30, 32),
     1189            (8, 18, 20, 23), (8, 18, 21, 34), (8, 18, 22, 24), (8, 18, 27, 37),
     1190            (8, 19, 20, 24), (8, 19, 22, 32), (8, 19, 23, 34), (8, 19, 27, 29),
     1191            (8, 19, 35, 37), (8, 20, 25, 28), (8, 20, 29, 36), (8, 20, 30, 33),
     1192            (8, 20, 31, 35), (8, 20, 34, 37), (8, 21, 23, 37), (8, 21, 24, 32),
     1193            (8, 21, 25, 29), (8, 21, 30, 36), (8, 22, 25, 34), (8, 22, 27, 28),
     1194            (8, 22, 33, 36), (8, 23, 25, 31), (8, 23, 26, 28), (8, 23, 32, 36),
     1195            (8, 24, 26, 35), (8, 25, 32, 35), (8, 26, 29, 34), (8, 26, 30, 37),
     1196            (8, 26, 31, 36), (8, 27, 30, 34), (8, 28, 31, 32), (8, 29, 30, 35),
     1197            (8, 31, 33, 37), (8, 32, 33, 34), (9, 10, 11, 23), (9, 10, 14, 36),
     1198            (9, 10, 15, 26), (9, 10, 16, 21), (9, 10, 18, 19), (9, 10, 20, 27),
     1199            (9, 10, 25, 31), (9, 10, 29, 34), (9, 10, 30, 32), (9, 10, 35, 37),
     1200            (9, 11, 12, 19), (9, 11, 13, 18), (9, 11, 14, 37), (9, 11, 15, 24),
     1201            (9, 11, 17, 32), (9, 11, 20, 31), (9, 11, 21, 22), (9, 11, 25, 34),
     1202            (9, 11, 26, 27), (9, 12, 13, 27), (9, 12, 14, 32), (9, 12, 16, 28),
     1203            (9, 12, 17, 29), (9, 12, 18, 26), (9, 12, 20, 34), (9, 12, 21, 33),
     1204            (9, 12, 22, 36), (9, 12, 24, 31), (9, 12, 25, 37), (9, 13, 14, 16),
     1205            (9, 13, 15, 37), (9, 13, 17, 34), (9, 13, 20, 29), (9, 13, 24, 36),
     1206            (9, 13, 26, 31), (9, 13, 28, 32), (9, 14, 15, 33), (9, 14, 17, 35),
     1207            (9, 14, 19, 29), (9, 14, 20, 22), (9, 14, 21, 23), (9, 14, 27, 28),
     1208            (9, 14, 30, 34), (9, 15, 18, 21), (9, 15, 19, 27), (9, 15, 28, 34),
     1209            (9, 15, 29, 36), (9, 15, 31, 32), (9, 16, 17, 20), (9, 16, 19, 30),
     1210            (9, 16, 22, 29), (9, 16, 23, 31), (9, 16, 27, 33), (9, 16, 32, 35),
     1211            (9, 16, 36, 37), (9, 17, 19, 36), (9, 17, 21, 27), (9, 17, 23, 24),
     1212            (9, 17, 25, 30), (9, 17, 26, 28), (9, 18, 22, 32), (9, 18, 23, 27),
     1213            (9, 18, 24, 34), (9, 18, 25, 35), (9, 18, 28, 37), (9, 18, 31, 33),
     1214            (9, 19, 21, 24), (9, 19, 22, 35), (9, 19, 23, 25), (9, 20, 21, 25),
     1215            (9, 20, 23, 33), (9, 20, 24, 35), (9, 20, 28, 30), (9, 21, 26, 29),
     1216            (9, 21, 30, 37), (9, 21, 31, 34), (9, 21, 32, 36), (9, 22, 25, 33),
     1217            (9, 22, 26, 30), (9, 22, 31, 37), (9, 23, 26, 35), (9, 23, 28, 29),
     1218            (9, 23, 34, 37), (9, 24, 26, 32), (9, 24, 27, 29), (9, 24, 33, 37),
     1219            (9, 25, 27, 36), (9, 26, 33, 36), (9, 27, 30, 35), (9, 27, 32, 37),
     1220            (9, 28, 31, 35), (9, 29, 32, 33), (9, 30, 31, 36), (9, 33, 34, 35),
     1221            (10, 11, 12, 24), (10, 11, 15, 37), (10, 11, 16, 27), (10, 11, 17, 22),
     1222            (10, 11, 19, 20), (10, 11, 21, 28), (10, 11, 26, 32), (10, 11, 30, 35),
     1223            (10, 11, 31, 33), (10, 12, 13, 20), (10, 12, 14, 19), (10, 12, 16, 25),
     1224            (10, 12, 18, 33), (10, 12, 21, 32), (10, 12, 22, 23), (10, 12, 26, 35),
     1225            (10, 12, 27, 28), (10, 13, 14, 28), (10, 13, 15, 33), (10, 13, 17, 29),
     1226            (10, 13, 18, 30), (10, 13, 19, 27), (10, 13, 21, 35), (10, 13, 22, 34),
     1227            (10, 13, 23, 37), (10, 13, 25, 32), (10, 14, 15, 17), (10, 14, 18, 35),
     1228            (10, 14, 21, 30), (10, 14, 25, 37), (10, 14, 27, 32), (10, 14, 29, 33),
     1229            (10, 15, 16, 34), (10, 15, 18, 36), (10, 15, 20, 30), (10, 15, 21, 23),
     1230            (10, 15, 22, 24), (10, 15, 28, 29), (10, 15, 31, 35), (10, 16, 19, 22),
     1231            (10, 16, 20, 28), (10, 16, 29, 35), (10, 16, 30, 37), (10, 16, 32, 33),
     1232            (10, 17, 18, 21), (10, 17, 20, 31), (10, 17, 23, 30), (10, 17, 24, 32),
     1233            (10, 17, 28, 34), (10, 17, 33, 36), (10, 18, 20, 37), (10, 18, 22, 28),
     1234            (10, 18, 24, 25), (10, 18, 26, 31), (10, 18, 27, 29), (10, 19, 23, 33),
     1235            (10, 19, 24, 28), (10, 19, 25, 35), (10, 19, 26, 36), (10, 19, 32, 34),
     1236            (10, 20, 22, 25), (10, 20, 23, 36), (10, 20, 24, 26), (10, 21, 22, 26),
     1237            (10, 21, 24, 34), (10, 21, 25, 36), (10, 21, 29, 31), (10, 22, 27, 30),
     1238            (10, 22, 32, 35), (10, 22, 33, 37), (10, 23, 26, 34), (10, 23, 27, 31),
     1239            (10, 24, 27, 36), (10, 24, 29, 30), (10, 25, 27, 33), (10, 25, 28, 30),
     1240            (10, 26, 28, 37), (10, 27, 34, 37), (10, 28, 31, 36), (10, 29, 32, 36),
     1241            (10, 30, 33, 34), (10, 31, 32, 37), (10, 34, 35, 36), (11, 12, 13, 25),
     1242            (11, 12, 17, 28), (11, 12, 18, 23), (11, 12, 20, 21), (11, 12, 22, 29),
     1243            (11, 12, 27, 33), (11, 12, 31, 36), (11, 12, 32, 34), (11, 13, 14, 21),
     1244            (11, 13, 15, 20), (11, 13, 17, 26), (11, 13, 19, 34), (11, 13, 22, 33),
     1245            (11, 13, 23, 24), (11, 13, 27, 36), (11, 13, 28, 29), (11, 14, 15, 29),
     1246            (11, 14, 16, 34), (11, 14, 18, 30), (11, 14, 19, 31), (11, 14, 20, 28),
     1247            (11, 14, 22, 36), (11, 14, 23, 35), (11, 14, 26, 33), (11, 15, 16, 18),
     1248            (11, 15, 19, 36), (11, 15, 22, 31), (11, 15, 28, 33), (11, 15, 30, 34),
     1249            (11, 16, 17, 35), (11, 16, 19, 37), (11, 16, 21, 31), (11, 16, 22, 24),
     1250            (11, 16, 23, 25), (11, 16, 29, 30), (11, 16, 32, 36), (11, 17, 20, 23),
     1251            (11, 17, 21, 29), (11, 17, 30, 36), (11, 17, 33, 34), (11, 18, 19, 22),
     1252            (11, 18, 21, 32), (11, 18, 24, 31), (11, 18, 25, 33), (11, 18, 29, 35),
     1253            (11, 18, 34, 37), (11, 19, 23, 29), (11, 19, 25, 26), (11, 19, 27, 32),
     1254            (11, 19, 28, 30), (11, 20, 24, 34), (11, 20, 25, 29), (11, 20, 26, 36),
     1255            (11, 20, 27, 37), (11, 20, 33, 35), (11, 21, 23, 26), (11, 21, 24, 37),
     1256            (11, 21, 25, 27), (11, 22, 23, 27), (11, 22, 25, 35), (11, 22, 26, 37),
     1257            (11, 22, 30, 32), (11, 23, 28, 31), (11, 23, 33, 36), (11, 24, 27, 35),
     1258            (11, 24, 28, 32), (11, 25, 28, 37), (11, 25, 30, 31), (11, 26, 28, 34),
     1259            (11, 26, 29, 31), (11, 29, 32, 37), (11, 30, 33, 37), (11, 31, 34, 35),
     1260            (11, 35, 36, 37), (12, 13, 14, 26), (12, 13, 18, 29), (12, 13, 19, 24),
     1261            (12, 13, 21, 22), (12, 13, 23, 30), (12, 13, 28, 34), (12, 13, 32, 37),
     1262            (12, 13, 33, 35), (12, 14, 15, 22), (12, 14, 16, 21), (12, 14, 18, 27),
     1263            (12, 14, 20, 35), (12, 14, 23, 34), (12, 14, 24, 25), (12, 14, 28, 37),
     1264            (12, 14, 29, 30), (12, 15, 16, 30), (12, 15, 17, 35), (12, 15, 19, 31),
     1265            (12, 15, 20, 32), (12, 15, 21, 29), (12, 15, 23, 37), (12, 15, 24, 36),
     1266            (12, 15, 27, 34), (12, 16, 17, 19), (12, 16, 20, 37), (12, 16, 23, 32),
     1267            (12, 16, 29, 34), (12, 16, 31, 35), (12, 17, 18, 36), (12, 17, 22, 32),
     1268            (12, 17, 23, 25), (12, 17, 24, 26), (12, 17, 30, 31), (12, 17, 33, 37),
     1269            (12, 18, 21, 24), (12, 18, 22, 30), (12, 18, 31, 37), (12, 18, 34, 35),
     1270            (12, 19, 20, 23), (12, 19, 22, 33), (12, 19, 25, 32), (12, 19, 26, 34),
     1271            (12, 19, 30, 36), (12, 20, 24, 30), (12, 20, 26, 27), (12, 20, 28, 33),
     1272            (12, 20, 29, 31), (12, 21, 25, 35), (12, 21, 26, 30), (12, 21, 27, 37),
     1273            (12, 21, 34, 36), (12, 22, 24, 27), (12, 22, 26, 28), (12, 23, 24, 28),
     1274            (12, 23, 26, 36), (12, 23, 31, 33), (12, 24, 29, 32), (12, 24, 34, 37),
     1275            (12, 25, 28, 36), (12, 25, 29, 33), (12, 26, 31, 32), (12, 27, 29, 35),
     1276            (12, 27, 30, 32), (12, 32, 35, 36), (13, 14, 15, 27), (13, 14, 19, 30),
     1277            (13, 14, 20, 25), (13, 14, 22, 23), (13, 14, 24, 31), (13, 14, 29, 35),
     1278            (13, 14, 34, 36), (13, 15, 16, 23), (13, 15, 17, 22), (13, 15, 19, 28),
     1279            (13, 15, 21, 36), (13, 15, 24, 35), (13, 15, 25, 26), (13, 15, 30, 31),
     1280            (13, 16, 17, 31), (13, 16, 18, 36), (13, 16, 20, 32), (13, 16, 21, 33),
     1281            (13, 16, 22, 30), (13, 16, 25, 37), (13, 16, 28, 35), (13, 17, 18, 20),
     1282            (13, 17, 24, 33), (13, 17, 30, 35), (13, 17, 32, 36), (13, 18, 19, 37),
     1283            (13, 18, 23, 33), (13, 18, 24, 26), (13, 18, 25, 27), (13, 18, 31, 32),
     1284            (13, 19, 22, 25), (13, 19, 23, 31), (13, 19, 35, 36), (13, 20, 21, 24),
     1285            (13, 20, 23, 34), (13, 20, 26, 33), (13, 20, 27, 35), (13, 20, 31, 37),
     1286            (13, 21, 25, 31), (13, 21, 27, 28), (13, 21, 29, 34), (13, 21, 30, 32),
     1287            (13, 22, 26, 36), (13, 22, 27, 31), (13, 22, 35, 37), (13, 23, 25, 28),
     1288            (13, 23, 27, 29), (13, 24, 25, 29), (13, 24, 27, 37), (13, 24, 32, 34),
     1289            (13, 25, 30, 33), (13, 26, 29, 37), (13, 26, 30, 34), (13, 27, 32, 33),
     1290            (13, 28, 30, 36), (13, 28, 31, 33), (13, 33, 36, 37), (14, 15, 16, 28),
     1291            (14, 15, 20, 31), (14, 15, 21, 26), (14, 15, 23, 24), (14, 15, 25, 32),
     1292            (14, 15, 30, 36), (14, 15, 35, 37), (14, 16, 17, 24), (14, 16, 18, 23),
     1293            (14, 16, 20, 29), (14, 16, 22, 37), (14, 16, 25, 36), (14, 16, 26, 27),
     1294            (14, 16, 31, 32), (14, 17, 18, 32), (14, 17, 19, 37), (14, 17, 21, 33),
     1295            (14, 17, 22, 34), (14, 17, 23, 31), (14, 17, 29, 36), (14, 18, 19, 21),
     1296            (14, 18, 25, 34), (14, 18, 31, 36), (14, 18, 33, 37), (14, 19, 24, 34),
     1297            (14, 19, 25, 27), (14, 19, 26, 28), (14, 19, 32, 33), (14, 20, 23, 26),
     1298            (14, 20, 24, 32), (14, 20, 36, 37), (14, 21, 22, 25), (14, 21, 24, 35),
     1299            (14, 21, 27, 34), (14, 21, 28, 36), (14, 22, 26, 32), (14, 22, 28, 29),
     1300            (14, 22, 30, 35), (14, 22, 31, 33), (14, 23, 27, 37), (14, 23, 28, 32),
     1301            (14, 24, 26, 29), (14, 24, 28, 30), (14, 25, 26, 30), (14, 25, 33, 35),
     1302            (14, 26, 31, 34), (14, 27, 31, 35), (14, 28, 33, 34), (14, 29, 31, 37),
     1303            (14, 29, 32, 34), (15, 16, 17, 29), (15, 16, 21, 32), (15, 16, 22, 27),
     1304            (15, 16, 24, 25), (15, 16, 26, 33), (15, 16, 31, 37), (15, 17, 18, 25),
     1305            (15, 17, 19, 24), (15, 17, 21, 30), (15, 17, 26, 37), (15, 17, 27, 28),
     1306            (15, 17, 32, 33), (15, 18, 19, 33), (15, 18, 22, 34), (15, 18, 23, 35),
     1307            (15, 18, 24, 32), (15, 18, 30, 37), (15, 19, 20, 22), (15, 19, 26, 35),
     1308            (15, 19, 32, 37), (15, 20, 25, 35), (15, 20, 26, 28), (15, 20, 27, 29),
     1309            (15, 20, 33, 34), (15, 21, 24, 27), (15, 21, 25, 33), (15, 22, 23, 26),
     1310            (15, 22, 25, 36), (15, 22, 28, 35), (15, 22, 29, 37), (15, 23, 27, 33),
     1311            (15, 23, 29, 30), (15, 23, 31, 36), (15, 23, 32, 34), (15, 24, 29, 33),
     1312            (15, 25, 27, 30), (15, 25, 29, 31), (15, 26, 27, 31), (15, 26, 34, 36),
     1313            (15, 27, 32, 35), (15, 28, 32, 36), (15, 29, 34, 35), (15, 30, 33, 35),
     1314            (16, 17, 18, 30), (16, 17, 22, 33), (16, 17, 23, 28), (16, 17, 25, 26),
     1315            (16, 17, 27, 34), (16, 18, 19, 26), (16, 18, 20, 25), (16, 18, 22, 31),
     1316            (16, 18, 28, 29), (16, 18, 33, 34), (16, 19, 20, 34), (16, 19, 23, 35),
     1317            (16, 19, 24, 36), (16, 19, 25, 33), (16, 20, 21, 23), (16, 20, 27, 36),
     1318            (16, 21, 26, 36), (16, 21, 27, 29), (16, 21, 28, 30), (16, 21, 34, 35),
     1319            (16, 22, 25, 28), (16, 22, 26, 34), (16, 23, 24, 27), (16, 23, 26, 37),
     1320            (16, 23, 29, 36), (16, 24, 28, 34), (16, 24, 30, 31), (16, 24, 32, 37),
     1321            (16, 24, 33, 35), (16, 25, 30, 34), (16, 26, 28, 31), (16, 26, 30, 32),
     1322            (16, 27, 28, 32), (16, 27, 35, 37), (16, 28, 33, 36), (16, 29, 33, 37),
     1323            (16, 30, 35, 36), (16, 31, 34, 36), (17, 18, 19, 31), (17, 18, 23, 34),
     1324            (17, 18, 24, 29), (17, 18, 26, 27), (17, 18, 28, 35), (17, 19, 20, 27),
     1325            (17, 19, 21, 26), (17, 19, 23, 32), (17, 19, 29, 30), (17, 19, 34, 35),
     1326            (17, 20, 21, 35), (17, 20, 24, 36), (17, 20, 25, 37), (17, 20, 26, 34),
     1327            (17, 21, 22, 24), (17, 21, 28, 37), (17, 22, 27, 37), (17, 22, 28, 30),
     1328            (17, 22, 29, 31), (17, 22, 35, 36), (17, 23, 26, 29), (17, 23, 27, 35),
     1329            (17, 24, 25, 28), (17, 24, 30, 37), (17, 25, 29, 35), (17, 25, 31, 32),
     1330            (17, 25, 34, 36), (17, 26, 31, 35), (17, 27, 29, 32), (17, 27, 31, 33),
     1331            (17, 28, 29, 33), (17, 29, 34, 37), (17, 31, 36, 37), (17, 32, 35, 37),
     1332            (18, 19, 20, 32), (18, 19, 24, 35), (18, 19, 25, 30), (18, 19, 27, 28),
     1333            (18, 19, 29, 36), (18, 20, 21, 28), (18, 20, 22, 27), (18, 20, 24, 33),
     1334            (18, 20, 30, 31), (18, 20, 35, 36), (18, 21, 22, 36), (18, 21, 25, 37),
     1335            (18, 21, 27, 35), (18, 22, 23, 25), (18, 23, 29, 31), (18, 23, 30, 32),
     1336            (18, 23, 36, 37), (18, 24, 27, 30), (18, 24, 28, 36), (18, 25, 26, 29),
     1337            (18, 26, 30, 36), (18, 26, 32, 33), (18, 26, 35, 37), (18, 27, 32, 36),
     1338            (18, 28, 30, 33), (18, 28, 32, 34), (18, 29, 30, 34), (19, 20, 21, 33),
     1339            (19, 20, 25, 36), (19, 20, 26, 31), (19, 20, 28, 29), (19, 20, 30, 37),
     1340            (19, 21, 22, 29), (19, 21, 23, 28), (19, 21, 25, 34), (19, 21, 31, 32),
     1341            (19, 21, 36, 37), (19, 22, 23, 37), (19, 22, 28, 36), (19, 23, 24, 26),
     1342            (19, 24, 30, 32), (19, 24, 31, 33), (19, 25, 28, 31), (19, 25, 29, 37),
     1343            (19, 26, 27, 30), (19, 27, 31, 37), (19, 27, 33, 34), (19, 28, 33, 37),
     1344            (19, 29, 31, 34), (19, 29, 33, 35), (19, 30, 31, 35), (20, 21, 22, 34),
     1345            (20, 21, 26, 37), (20, 21, 27, 32), (20, 21, 29, 30), (20, 22, 23, 30),
     1346            (20, 22, 24, 29), (20, 22, 26, 35), (20, 22, 32, 33), (20, 23, 29, 37),
     1347            (20, 24, 25, 27), (20, 25, 31, 33), (20, 25, 32, 34), (20, 26, 29, 32),
     1348            (20, 27, 28, 31), (20, 28, 34, 35), (20, 30, 32, 35), (20, 30, 34, 36),
     1349            (20, 31, 32, 36), (21, 22, 23, 35), (21, 22, 28, 33), (21, 22, 30, 31),
     1350            (21, 23, 24, 31), (21, 23, 25, 30), (21, 23, 27, 36), (21, 23, 33, 34),
     1351            (21, 25, 26, 28), (21, 26, 32, 34), (21, 26, 33, 35), (21, 27, 30, 33),
     1352            (21, 28, 29, 32), (21, 29, 35, 36), (21, 31, 33, 36), (21, 31, 35, 37),
     1353            (21, 32, 33, 37), (22, 23, 24, 36), (22, 23, 29, 34), (22, 23, 31, 32),
     1354            (22, 24, 25, 32), (22, 24, 26, 31), (22, 24, 28, 37), (22, 24, 34, 35),
     1355            (22, 26, 27, 29), (22, 27, 33, 35), (22, 27, 34, 36), (22, 28, 31, 34),
     1356            (22, 29, 30, 33), (22, 30, 36, 37), (22, 32, 34, 37), (23, 24, 25, 37),
     1357            (23, 24, 30, 35), (23, 24, 32, 33), (23, 25, 26, 33), (23, 25, 27, 32),
     1358            (23, 25, 35, 36), (23, 27, 28, 30), (23, 28, 34, 36), (23, 28, 35, 37),
     1359            (23, 29, 32, 35), (23, 30, 31, 34), (24, 25, 31, 36), (24, 25, 33, 34),
     1360            (24, 26, 27, 34), (24, 26, 28, 33), (24, 26, 36, 37), (24, 28, 29, 31),
     1361            (24, 29, 35, 37), (24, 30, 33, 36), (24, 31, 32, 35), (25, 26, 32, 37),
     1362            (25, 26, 34, 35), (25, 27, 28, 35), (25, 27, 29, 34), (25, 29, 30, 32),
     1363            (25, 31, 34, 37), (25, 32, 33, 36), (26, 27, 35, 36), (26, 28, 29, 36),
     1364            (26, 28, 30, 35), (26, 30, 31, 33), (26, 33, 34, 37), (27, 28, 36, 37),
     1365            (27, 29, 30, 37), (27, 29, 31, 36), (27, 31, 32, 34), (28, 30, 32, 37),
     1366            (28, 32, 33, 35), (29, 33, 34, 36), (30, 34, 35, 37))