UNPKG

finitedomain

Version:

A fast feature rich finite domain solver

153 lines (125 loc) 231 kB
import expect from '../fixtures/mocha_proxy.fixt'; import { fixt_assertStrings, fixt_dom_empty, fixt_dom_nums, fixt_dom_range, fixt_dom_ranges, fixt_dom_solved, fixt_domainEql, fixt_strdom_empty, } from '../fixtures/domain.fixt'; import { SUP, } from '../../src/helpers'; import { domain__debug, } from '../../src/domain'; import domain_plus from '../../src/doms/domain_plus'; describe('src/plus.spec.js', function() { this.timeout(60000); // takes long under istanbul / even longer under travis describe('domain_plus unit tests', function() { it('should exist', function() { expect(domain_plus).to.be.a('function'); }); it('should require domains', function() { expect(() => domain_plus()).to.throw('ONLY_NORDOM'); expect(() => domain_plus(fixt_dom_empty())).to.throw('ONLY_NORDOM'); expect(() => domain_plus(null, fixt_dom_empty())).to.throw('ONLY_NORDOM'); }); it('should accept empty domains', function() { expect(domain_plus(fixt_dom_empty(), fixt_dom_empty())).to.eql(fixt_dom_empty()); }); it('should throw for empty strdoms', function() { expect(_ => domain_plus(fixt_strdom_empty(), fixt_dom_empty())).to.throw('empty domains are always numdoms'); expect(_ => domain_plus(fixt_dom_empty(), fixt_strdom_empty())).to.throw('empty domains are always numdoms'); expect(_ => domain_plus(fixt_strdom_empty(), fixt_strdom_empty())).to.throw('empty domains are always numdoms'); }); describe('with array', function() { it('should add two ranges', function() { let A = fixt_dom_range(5, 10); let B = fixt_dom_range(50, 60); let E = fixt_dom_range(55, 70); fixt_assertStrings(domain_plus(A, B), E); }); it('should add two domains', function() { let A = fixt_dom_ranges([5, 10], [20, 35]); let B = fixt_dom_ranges([50, 60], [110, 128]); let E = fixt_dom_ranges([55, 95], [115, 163]); fixt_assertStrings(domain_plus(A, B), E); }); it('should add two domains', function() { let A = fixt_dom_ranges([0, 1], [4, 12], [15, 17], [100, 100]); let B = fixt_dom_ranges([0, 1], [4, 12], [15, 17], [100, 100]); let E = fixt_dom_ranges([0, 2], [4, 34], [100, 101], [104, 112], [115, 117], [200, 200]); fixt_assertStrings(domain_plus(A, B), E); }); it('should not exceed SUP (SUP+1)', function() { // since [SUP, SUP] + [1, 1] would be [SUP+1, SUP+1] the result is OOB and empty // let's hope this never really hurts us irl... but we must have this protection // or it may introduce inconsistent domains into the internals, which is bad. let A = fixt_dom_solved(SUP); let B = fixt_dom_solved(1); let E = fixt_dom_empty(); expect(domain_plus(A, B)).to.eql(E); }); it('should not exceed SUP (1+SUP)', function() { // since [1, 1] + [SUP, SUP] would be [SUP+1, SUP+1] the result is OOB and empty // let's hope this never really hurts us irl... but we must have this protection // or it may introduce inconsistent domains into the internals, which is bad. let A = fixt_dom_solved(1); let B = fixt_dom_solved(SUP); let E = fixt_dom_empty(); expect(domain_plus(A, B)).to.eql(E); }); }); describe('with numbers', function() { it('should add two ranges', function() { let A = fixt_dom_range(5, 10); let B = fixt_dom_range(50, 60); let E = fixt_dom_range(55, 70); fixt_assertStrings(domain_plus(A, B), E); }); it('should add two domains (1)', function() { let A = fixt_dom_ranges([5, 10], [20, 35]); let B = fixt_dom_ranges([50, 60], [110, 128]); let E = fixt_dom_ranges([55, 95], [115, 163]); fixt_assertStrings(domain_plus(A, B), E); }); it('should add two domains (2)', function() { let A = fixt_dom_ranges([0, 1], [4, 12], [15, 17]); let B = fixt_dom_ranges([0, 1], [4, 12], [15, 17]); let E = fixt_dom_ranges([0, 2], [4, 34]); fixt_assertStrings(domain_plus(A, B), E); }); it('should add small numbers to a small domain', function() { // regression. numbers 0 ~ 3 are hardcoded explicitly, 4+ is loop // make sure total does not exceed the small domain cap for (let i = 0; i < 7; ++i) { for (let j = 0; j < 8; ++j) { if (i !== 8 || j !== 8) { // 16 expect(domain_plus(1 << i, 1 << j), i + ' + ' + j).to.eql(1 << (i + j)); } } } }); }); }); describe('red herrings', function() { describe('small domains', function() { let inputs = [ // randomly generated 134258832, 1141243913, 277057, 807420480, 29696008, 134357520, 50351424, 1275596820, 54525952, 537997320, 18891266, 281018896, 144715916, 40517721, 37290240, 37879816, 134514689, 1648492544, 78118912, 3171072, 685277253, 1476608577, 16391, 655508, 1073807616, // all permutations of the first 5 bits 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, // only one bit set for all bits 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7, 1 << 8, 1 << 9, 1 << 10, 1 << 11, 1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16, 1 << 17, 1 << 18, 1 << 19, 1 << 20, 1 << 21, 1 << 22, 1 << 23, 1 << 24, 1 << 25, 1 << 26, 1 << 27, 1 << 28, 1 << 29, 1 << 30, ]; //console.log(inputs.map(a=>inputs.map(b=>JSON.stringify(domain_plus(a, b)).replace(/"/g, ''))).join(', ')) // these are the outcomes when crossing each input with each other input (or itself), ordered. // they were generated from a more rigid version of the code. they serve as canaries. let outcomes = [ [8, 8, 11, 11, 14, 14, 17, 17, 19, 20, 22, 22, 26, 26, 28, 28, 30, 31, 34, 34, 40, 40, 42, 42, 54, 54], [4, 4, 7, 7, 10, 10, 13, 13, 15, 16, 18, 18, 21, 22, 24, 25, 27, 27, 30, 34, 37, 37, 39, 39, 41, 41, 43, 45, 53, 53, 57, 57], [4, 4, 7, 7, 10, 10, 13, 13, 15, 22, 24, 28, 31, 31, 33, 33, 36, 36, 38, 40, 45, 45], [10, 10, 13, 13, 16, 16, 18, 19, 21, 22, 24, 25, 27, 29, 32, 36, 41, 44, 48, 48, 55, 56], [7, 7, 10, 10, 16, 18, 20, 20, 22, 23, 25, 31, 33, 33, 35, 40, 43, 43, 45, 45, 49, 51], [8, 8, 11, 11, 13, 13, 16, 17, 19, 22, 24, 24, 26, 26, 28, 28, 30, 32, 34, 34, 36, 36, 40, 40, 42, 42, 44, 44, 54, 54], [10, 10, 12, 15, 17, 19, 21, 21, 23, 29, 31, 33, 35, 35, 37, 41, 51, 52], [6, 6, 8, 9, 11, 11, 15, 17, 19, 19, 23, 23, 25, 27, 29, 34, 37, 37, 39, 43, 45, 46, 53, 54, 57, 57], [26, 26, 28, 29, 31, 32, 35, 35, 37, 40, 49, 49, 51, 52], [7, 7, 10, 10, 16, 20, 23, 31, 33, 33, 35, 36, 39, 40, 42, 44, 47, 47, 56, 56], [5, 5, 8, 8, 13, 14, 16, 16, 18, 18, 21, 22, 24, 25, 27, 29, 31, 31, 34, 34, 36, 37, 39, 39, 41, 41, 48, 48, 51, 51], [8, 8, 11, 11, 13, 13, 16, 17, 19, 19, 22, 22, 24, 24, 26, 27, 29, 32, 35, 38, 41, 41, 43, 43, 49, 50, 55, 55], [6, 7, 9, 11, 14, 20, 22, 22, 25, 31, 34, 34, 36, 36, 38, 40, 42, 42, 48, 48, 50, 50, 54, 54], [4, 4, 7, 8, 10, 11, 13, 13, 15, 19, 21, 21, 23, 38, 40, 41, 44, 44, 46, 46, 48, 49, 52, 52], [12, 12, 15, 15, 20, 21, 23, 29, 31, 36, 38, 38, 40, 40, 43, 43, 46, 48, 52, 52], [7, 7, 10, 10, 16, 16, 18, 18, 21, 21, 24, 24, 26, 26, 29, 30, 32, 32, 35, 35, 37, 38, 40, 40, 44, 44, 49, 49, 52, 52], [4, 4, 7, 7, 13, 13, 15, 15, 18, 19, 22, 22, 24, 28, 30, 31, 33, 34, 38, 38, 40, 40, 42, 42, 45, 45, 54, 54], [21, 21, 24, 24, 26, 26, 29, 30, 32, 38, 40, 40, 42, 45, 49, 49, 52, 52, 56, 57], [23, 23, 25, 28, 30, 30, 32, 34, 36, 36, 38, 39, 41, 41, 46, 46, 48, 48, 50, 50, 53, 53], [12, 13, 15, 18, 20, 29, 33, 36, 40, 41, 47, 48], [4, 4, 6, 7, 9, 10, 13, 13, 15, 15, 17, 17, 19, 19, 21, 24, 26, 38, 40, 40, 42, 42, 44, 44, 46, 47, 49, 50, 54, 54, 56, 56], [4, 4, 7, 7, 10, 10, 13, 13, 15, 16, 18, 24, 27, 27, 29, 37, 40, 45, 54, 55, 57, 57], [4, 9, 13, 18, 21, 21, 27, 29, 41, 41], [6, 6, 8, 9, 11, 11, 14, 15, 17, 17, 19, 24, 26, 26, 29, 32, 34, 34, 44, 44, 46, 46], [12, 12, 15, 15, 20, 21, 23, 23, 29, 29, 31, 31, 34, 35, 37, 37, 43, 43, 45, 45, 57, 57], 134258832, 268517664, 402776496, 537035328, 671261392, 805552992, 939779056, 1074070656, 1208329360, 1342522784, 1476781488, 1611105984, 1745331920, 1879558112, 2013784048, [8, 8, 11, 11, 17, 17, 19, 19, 31, 31], [4, 4, 7, 8, 11, 11, 13, 13, 15, 15, 17, 17, 19, 19, 27, 27, 31, 31], [5, 5, 8, 8, 11, 11, 14, 14, 16, 17, 19, 19, 28, 28, 31, 31], [4, 5, 7, 8, 11, 11, 13, 17, 19, 19, 27, 28, 31, 31], [6, 6, 8, 9, 11, 11, 15, 15, 17, 17, 19, 19, 29, 29, 31, 31], [4, 4, 6, 9, 11, 11, 13, 13, 15, 15, 17, 17, 19, 19, 27, 27, 29, 29, 31, 31], [5, 6, 8, 9, 11, 11, 14, 17, 19, 19, 28, 29, 31, 31], [4, 9, 11, 11, 13, 17, 19, 19, 27, 29, 31, 31], [7, 8, 10, 11, 16, 19, 30, 31], [4, 4, 7, 8, 10, 11, 13, 13, 15, 19, 27, 27, 30, 31], [5, 5, 7, 8, 10, 11, 14, 14, 16, 19, 28, 28, 30, 31], [4, 5, 7, 8, 10, 11, 13, 19, 27, 28, 30, 31], [6, 11, 15, 19, 29, 31], [4, 4, 6, 11, 13, 13, 15, 19, 27, 27, 29, 31], [5, 11, 14, 19, 28, 31], [4, 11, 13, 19, 27, 31], 134258832, 268517664, 537035328, 1074070656, [8, 8, 11, 11, 17, 17, 19, 19, 31, 31], [9, 9, 12, 12, 18, 18, 20, 20, 32, 32], [10, 10, 13, 13, 19, 19, 21, 21, 33, 33], [11, 11, 14, 14, 20, 20, 22, 22, 34, 34], [12, 12, 15, 15, 21, 21, 23, 23, 35, 35], [13, 13, 16, 16, 22, 22, 24, 24, 36, 36], [14, 14, 17, 17, 23, 23, 25, 25, 37, 37], [15, 15, 18, 18, 24, 24, 26, 26, 38, 38], [16, 16, 19, 19, 25, 25, 27, 27, 39, 39], [17, 17, 20, 20, 26, 26, 28, 28, 40, 40], [18, 18, 21, 21, 27, 27, 29, 29, 41, 41], [19, 19, 22, 22, 28, 28, 30, 30, 42, 42], [20, 20, 23, 23, 29, 29, 31, 31, 43, 43], [21, 21, 24, 24, 30, 30, 32, 32, 44, 44], [22, 22, 25, 25, 31, 31, 33, 33, 45, 45], [23, 23, 26, 26, 32, 32, 34, 34, 46, 46], [24, 24, 27, 27, 33, 33, 35, 35, 47, 47], [25, 25, 28, 28, 34, 34, 36, 36, 48, 48], [26, 26, 29, 29, 35, 35, 37, 37, 49, 49], [27, 27, 30, 30, 36, 36, 38, 38, 50, 50], [28, 28, 31, 31, 37, 37, 39, 39, 51, 51], [29, 29, 32, 32, 38, 38, 40, 40, 52, 52], [30, 30, 33, 33, 39, 39, 41, 41, 53, 53], [31, 31, 34, 34, 40, 40, 42, 42, 54, 54], [32, 32, 35, 35, 41, 41, 43, 43, 55, 55], [33, 33, 36, 36, 42, 42, 44, 44, 56, 56], [34, 34, 37, 37, 43, 43, 45, 45, 57, 57], [4, 4, 7, 7, 10, 10, 13, 13, 15, 16, 18, 18, 21, 22, 24, 25, 27, 27, 30, 34, 37, 37, 39, 39, 41, 41, 43, 45, 53, 53, 57, 57], [0, 0, 3, 3, 6, 6, 17, 18, 20, 21, 26, 26, 29, 30, 33, 36, 43, 44, 47, 48, 52, 52, 56, 56, 60, 60], [0, 0, 3, 3, 6, 6, 9, 9, 11, 18, 21, 21, 23, 24, 26, 32, 35, 39, 41, 44, 48, 48], [6, 6, 9, 9, 12, 12, 14, 14, 17, 17, 21, 21, 23, 24, 26, 29, 31, 32, 35, 36, 38, 40, 44, 47, 51, 51, 54, 55, 58, 59], [3, 3, 6, 6, 13, 13, 16, 16, 18, 27, 29, 31, 33, 36, 39, 44, 46, 46, 48, 50, 52, 54], [4, 4, 7, 7, 9, 9, 12, 13, 16, 17, 20, 22, 26, 27, 30, 31, 34, 35, 39, 39, 43, 45, 47, 47, 53, 53, 57, 57], [6, 6, 8, 11, 13, 14, 17, 17, 23, 29, 31, 32, 34, 34, 36, 38, 40, 44, 50, 51, 54, 55], [2, 2, 4, 5, 7, 7, 12, 12, 15, 15, 19, 22, 26, 30, 32, 34, 36, 38, 42, 45, 47, 49, 52, 53, 56, 57, 60, 60], [22, 22, 24, 25, 27, 28, 39, 43, 48, 48, 50, 52, 54, 55], [3, 3, 6, 6, 12, 13, 15, 16, 19, 21, 23, 23, 29, 34, 37, 39, 42, 43, 46, 47, 50, 50, 55, 55, 59, 59], [1, 1, 4, 4, 9, 9, 12, 12, 14, 14, 17, 19, 21, 21, 24, 24, 26, 27, 31, 32, 35, 35, 38, 42, 44, 44, 47, 47, 50, 51, 54, 54], [4, 4, 7, 7, 9, 9, 12, 12, 21, 23, 25, 28, 30, 31, 34, 35, 39, 41, 45, 46, 48, 49, 52, 54, 58, 58], [2, 3, 5, 7, 10, 10, 12, 13, 15, 16, 19, 21, 23, 33, 37, 45, 47, 47, 49, 49, 51, 51, 53, 53, 57, 57], [0, 0, 3, 4, 6, 7, 9, 9, 14, 14, 17, 26, 28, 40, 42, 45, 47, 49, 51, 52, 55, 55], [8, 8, 11, 11, 16, 16, 19, 26, 28, 28, 33, 34, 36, 39, 42, 43, 45, 47, 49, 51, 55, 55], [3, 3, 6, 6, 17, 17, 20, 22, 25, 25, 28, 29, 33, 35, 39, 40, 42, 43, 47, 48, 51, 52, 55, 55], [0, 0, 3, 3, 11, 11, 14, 15, 17, 18, 21, 21, 26, 30, 32, 33, 35, 37, 41, 41, 44, 45, 48, 48, 53, 53, 57, 57], [17, 17, 20, 20, 22, 22, 25, 25, 28, 30, 32, 35, 39, 40, 42, 43, 46, 48, 51, 52, 55, 56, 59, 60], [19, 19, 21, 24, 26, 26, 29, 29, 36, 41, 43, 45, 47, 47, 49, 49, 51, 53, 56, 56], [8, 9, 11, 14, 16, 17, 20, 21, 23, 27, 30, 32, 34, 35, 37, 40, 43, 44, 46, 47, 50, 51], [0, 0, 2, 3, 5, 6, 9, 9, 15, 15, 17, 20, 22, 30, 32, 33, 36, 41, 44, 50, 52, 53, 55, 55, 57, 57, 59, 59], [0, 0, 3, 3, 6, 6, 9, 9, 12, 12, 14, 14, 16, 20, 23, 24, 26, 28, 30, 36, 39, 40, 42, 48, 53, 54, 56, 58, 60, 60], [0, 5, 14, 14, 17, 20, 26, 28, 30, 32, 40, 40, 44, 44], [2, 2, 4, 5, 7, 7, 10, 10, 17, 17, 19, 22, 24, 25, 28, 28, 30, 30, 32, 37, 43, 43, 45, 45, 47, 47, 49, 49], [8, 8, 11, 11, 16, 16, 19, 19, 25, 26, 30, 30, 33, 34, 38, 38, 42, 42, 46, 48, 56, 56, 60, 60], 1141243913, [1, 1, 4, 4, 18, 19, 27, 27, 31, 31], [0, 1, 3, 4, 17, 19, 26, 27, 30, 31], [2, 2, 5, 5, 19, 20, 28, 28, 32, 32], [0, 0, 2, 3, 5, 5, 17, 20, 26, 26, 28, 28, 30, 30, 32, 32], [1, 2, 4, 5, 18, 20, 27, 28, 31, 32], [0, 5, 17, 20, 26, 28, 30, 32], [3, 3, 6, 6, 20, 21, 29, 29, 33, 33], [0, 0, 3, 3, 6, 6, 17, 18, 20, 21, 26, 26, 29, 30, 33, 33], [1, 1, 3, 4, 6, 6, 18, 21, 27, 27, 29, 29, 31, 31, 33, 33], [0, 1, 3, 4, 6, 6, 17, 21, 26, 27, 29, 31, 33, 33], [2, 3, 5, 6, 19, 21, 28, 29, 32, 33], [0, 0, 2, 3, 5, 6, 17, 21, 26, 26, 28, 30, 32, 33], [1, 6, 18, 21, 27, 29, 31, 33], [0, 6, 17, 21, 26, 33], [4, 4, 7, 7, 21, 22, 30, 30, 34, 34], [0, 0, 3, 4, 7, 7, 17, 18, 21, 22, 26, 26, 30, 30, 34, 34], [1, 1, 4, 4, 7, 7, 18, 19, 21, 22, 27, 27, 30, 31, 34, 34], [0, 1, 3, 4, 7, 7, 17, 19, 21, 22, 26, 27, 30, 31, 34, 34], [2, 2, 4, 5, 7, 7, 19, 22, 28, 28, 30, 30, 32, 32, 34, 34], [0, 0, 2, 5, 7, 7, 17, 22, 26, 26, 28, 28, 30, 30, 32, 32, 34, 34], [1, 2, 4, 5, 7, 7, 18, 22, 27, 28, 30, 32, 34, 34], [0, 5, 7, 7, 17, 22, 26, 28, 30, 32, 34, 34], [3, 4, 6, 7, 20, 22, 29, 30, 33, 34], [0, 0, 3, 4, 6, 7, 17, 18, 20, 22, 26, 26, 29, 30, 33, 34], [1, 1, 3, 4, 6, 7, 18, 22, 27, 27, 29, 31, 33, 34], [0, 1, 3, 4, 6, 7, 17, 22, 26, 27, 29, 31, 33, 34], [2, 7, 19, 22, 28, 30, 32, 34], [0, 0, 2, 7, 17, 22, 26, 26, 28, 30, 32, 34], [1, 7, 18, 22, 27, 34], [0, 7, 17, 22, 26, 34], 1141243913, [1, 1, 4, 4, 18, 19, 27, 27, 31, 31], [2, 2, 5, 5, 19, 20, 28, 28, 32, 32], [3, 3, 6, 6, 20, 21, 29, 29, 33, 33], [4, 4, 7, 7, 21, 22, 30, 30, 34, 34], [5, 5, 8, 8, 22, 23, 31, 31, 35, 35], [6, 6, 9, 9, 23, 24, 32, 32, 36, 36], [7, 7, 10, 10, 24, 25, 33, 33, 37, 37], [8, 8, 11, 11, 25, 26, 34, 34, 38, 38], [9, 9, 12, 12, 26, 27, 35, 35, 39, 39], [10, 10, 13, 13, 27, 28, 36, 36, 40, 40], [11, 11, 14, 14, 28, 29, 37, 37, 41, 41], [12, 12, 15, 15, 29, 30, 38, 38, 42, 42], [13, 13, 16, 16, 30, 31, 39, 39, 43, 43], [14, 14, 17, 17, 31, 32, 40, 40, 44, 44], [15, 15, 18, 18, 32, 33, 41, 41, 45, 45], [16, 16, 19, 19, 33, 34, 42, 42, 46, 46], [17, 17, 20, 20, 34, 35, 43, 43, 47, 47], [18, 18, 21, 21, 35, 36, 44, 44, 48, 48], [19, 19, 22, 22, 36, 37, 45, 45, 49, 49], [20, 20, 23, 23, 37, 38, 46, 46, 50, 50], [21, 21, 24, 24, 38, 39, 47, 47, 51, 51], [22, 22, 25, 25, 39, 40, 48, 48, 52, 52], [23, 23, 26, 26, 40, 41, 49, 49, 53, 53], [24, 24, 27, 27, 41, 42, 50, 50, 54, 54], [25, 25, 28, 28, 42, 43, 51, 51, 55, 55], [26, 26, 29, 29, 43, 44, 52, 52, 56, 56], [27, 27, 30, 30, 44, 45, 53, 53, 57, 57], [28, 28, 31, 31, 45, 46, 54, 54, 58, 58], [29, 29, 32, 32, 46, 47, 55, 55, 59, 59], [30, 30, 33, 33, 47, 48, 56, 56, 60, 60], [4, 4, 7, 7, 10, 10, 13, 13, 15, 22, 24, 28, 31, 31, 33, 33, 36, 36, 38, 40, 45, 45], [0, 0, 3, 3, 6, 6, 9, 9, 11, 18, 21, 21, 23, 24, 26, 32, 35, 39, 41, 44, 48, 48], [0, 0, 6, 6, 9, 9, 11, 13, 15, 15, 17, 27, 29, 31, 36, 36], [6, 6, 9, 9, 12, 12, 14, 15, 17, 30, 32, 35, 37, 42, 46, 47], [3, 3, 9, 9, 12, 16, 18, 19, 21, 37, 40, 42], [4, 4, 9, 10, 13, 13, 15, 31, 33, 33, 35, 36, 38, 40, 45, 45], [6, 6, 8, 8, 10, 12, 14, 38, 42, 43], [2, 2, 4, 4, 8, 8, 10, 28, 30, 33, 35, 45, 48, 48], [22, 22, 24, 25, 28, 28, 30, 31, 33, 38, 40, 40, 42, 43], [3, 3, 9, 9, 12, 16, 18, 35, 38, 38, 40, 42, 47, 47], [1, 1, 7, 7, 9, 10, 12, 15, 18, 27, 30, 30, 32, 37, 39, 39, 42, 42], [4, 4, 9, 10, 13, 13, 15, 18, 20, 23, 27, 29, 31, 37, 39, 41, 46, 46], [2, 3, 7, 9, 11, 16, 18, 27, 29, 36, 38, 41, 45, 45], [0, 0, 3, 4, 6, 6, 9, 40, 43, 43], [8, 8, 14, 14, 16, 17, 19, 22, 25, 34, 36, 39, 43, 43], [3, 3, 9, 9, 12, 12, 14, 17, 21, 23, 25, 26, 28, 31, 33, 38, 40, 40, 43, 43], [0, 0, 6, 6, 9, 9, 11, 13, 15, 15, 17, 18, 20, 24, 26, 31, 33, 33, 36, 36, 38, 40, 45, 45], [17, 17, 22, 23, 25, 26, 28, 31, 33, 43, 47, 48], [19, 19, 21, 21, 23, 23, 25, 39, 41, 41, 44, 44], [8, 9, 13, 15, 17, 27, 29, 34, 38, 39], [0, 0, 2, 2, 6, 6, 8, 9, 11, 15, 17, 42, 45, 45, 47, 47], [0, 0, 6, 6, 9, 9, 11, 30, 32, 43, 45, 46, 48, 48], [0, 2, 6, 15, 18, 20, 23, 23, 25, 27, 32, 32], [2, 2, 4, 4, 7, 8, 10, 11, 13, 20, 22, 23, 25, 26, 28, 32, 35, 35, 37, 37], [8, 8, 14, 14, 16, 17, 19, 22, 25, 30, 34, 34, 36, 36, 39, 39, 41, 43, 48, 48], 277057, 554114, 818883, 1108228, 1375045, 1637766, 1900487, 2216456, 2488905, 2750090, 3014347, 3275532, 3537741, 3800974, 4063183, 4432912, 4701777, 4977810, 5242579, 5500180, 5766997, 6028694, 6291415, 6551064, 6815321, 7075482, 7339739, 7601948, 7864157, 8126366, 8388575, 277057, 554114, 1108228, 2216456, 4432912, 8865824, 17731648, 35463296, 70926592, 141853184, 283706368, 567412736, 1134825472, [13, 13, 19, 19, 22, 22, 24, 26, 31, 31], [14, 14, 20, 20, 23, 23, 25, 27, 32, 32], [15, 15, 21, 21, 24, 24, 26, 28, 33, 33], [16, 16, 22, 22, 25, 25, 27, 29, 34, 34], [17, 17, 23, 23, 26, 26, 28, 30, 35, 35], [18, 18, 24, 24, 27, 27, 29, 31, 36, 36], [19, 19, 25, 25, 28, 28, 30, 32, 37, 37], [20, 20, 26, 26, 29, 29, 31, 33, 38, 38], [21, 21, 27, 27, 30, 30, 32, 34, 39, 39], [22, 22, 28, 28, 31, 31, 33, 35, 40, 40], [23, 23, 29, 29, 32, 32, 34, 36, 41, 41], [24, 24, 30, 30, 33, 33, 35, 37, 42, 42], [25, 25, 31, 31, 34, 34, 36, 38, 43, 43], [26, 26, 32, 32, 35, 35, 37, 39, 44, 44], [27, 27, 33, 33, 36, 36, 38, 40, 45, 45], [28, 28, 34, 34, 37, 37, 39, 41, 46, 46], [29, 29, 35, 35, 38, 38, 40, 42, 47, 47], [30, 30, 36, 36, 39, 39, 41, 43, 48, 48], [10, 10, 13, 13, 16, 16, 18, 19, 21, 22, 24, 25, 27, 29, 32, 36, 41, 44, 48, 48, 55, 56], [6, 6, 9, 9, 12, 12, 14, 14, 17, 17, 21, 21, 23, 24, 26, 29, 31, 32, 35, 36, 38, 40, 44, 47, 51, 51, 54, 55, 58, 59], [6, 6, 9, 9, 12, 12, 14, 15, 17, 30, 32, 35, 37, 42, 46, 47], [12, 12, 15, 15, 18, 18, 20, 20, 23, 23, 27, 28, 30, 30, 34, 35, 37, 38, 42, 43, 49, 50, 56, 58], [9, 9, 12, 12, 17, 17, 19, 19, 22, 22, 24, 25, 27, 34, 36, 39, 41, 47, 50, 53], [10, 10, 13, 13, 15, 15, 18, 19, 22, 23, 25, 27, 30, 34, 36, 38, 41, 42, 45, 46, 48, 48, 55, 56], [12, 12, 14, 17, 19, 20, 22, 25, 27, 40, 42, 43, 45, 46, 52, 54], [8, 8, 10, 11, 13, 13, 16, 16, 18, 18, 21, 21, 23, 23, 25, 26, 28, 28, 30, 33, 35, 36, 39, 41, 44, 44, 47, 48, 51, 51, 54, 56, 58, 59], [28, 28, 30, 31, 33, 34, 36, 36, 38, 39, 43, 43, 45, 46, 50, 54], [9, 9, 12, 12, 17, 19, 21, 22, 24, 27, 29, 35, 37, 38, 40, 45, 48, 50, 57, 58], [7, 7, 10, 10, 15, 15, 18, 18, 20, 20, 22, 23, 27, 30, 33, 33, 35, 35, 37, 38, 42, 43, 45, 45, 49, 50, 52, 53], [10, 10, 13, 13, 15, 15, 18, 18, 23, 23, 25, 25, 28, 34, 36, 38, 42, 44, 49, 52, 56, 57], [8, 9, 11, 13, 16, 19, 21, 24, 26, 37, 40, 42, 44, 44, 48, 52, 55, 56], [6, 6, 9, 10, 12, 15, 17, 18, 20, 21, 23, 36, 38, 40, 42, 43, 45, 51, 53, 54], [14, 14, 17, 17, 22, 22, 25, 31, 33, 37, 39, 42, 44, 50, 53, 54], [9, 9, 12, 12, 17, 17, 23, 24, 26, 26, 28, 28, 31, 32, 34, 34, 36, 36, 38, 39, 43, 43, 45, 46, 50, 51, 53, 54], [6, 6, 9, 9, 14, 14, 17, 17, 20, 21, 24, 25, 27, 29, 32, 33, 36, 36, 39, 41, 43, 44, 46, 48, 55, 56], [23, 23, 26, 26, 28, 28, 31, 31, 34, 36, 38, 39, 43, 46, 50, 51, 53, 54, 57, 59], [25, 25, 27, 30, 32, 33, 35, 35, 37, 37, 40, 40, 42, 42, 44, 44, 47, 52, 54, 55], [14, 15, 17, 20, 22, 23, 26, 30, 34, 38, 41, 43, 48, 50], [6, 6, 8, 9, 11, 12, 14, 16, 20, 21, 23, 38, 40, 41, 43, 44, 47, 52, 55, 58], [6, 6, 9, 9, 12, 12, 14, 15, 18, 18, 20, 23, 25, 31, 33, 39, 41, 46, 48, 49, 51, 51, 55, 59], [6, 11, 14, 16, 20, 23, 28, 31, 35, 35, 42, 43], [8, 8, 10, 11, 13, 13, 16, 16, 18, 18, 21, 21, 23, 23, 25, 26, 28, 28, 30, 33, 35, 36, 38, 38, 40, 40, 45, 48], [14, 14, 17, 17, 22, 22, 25, 25, 29, 30, 36, 37, 39, 39, 44, 45, 51, 51, 58, 59], 807420480, 1614840960, 1885390528, [8, 8, 11, 11, 16, 16, 23, 23, 30, 31], [6, 6, 8, 9, 11, 11, 14, 14, 16, 16, 21, 21, 23, 23, 28, 31], [7, 8, 10, 11, 15, 16, 22, 23, 29, 31], [6, 11, 14, 16, 21, 23, 28, 31], [9, 9, 12, 12, 17, 17, 24, 24, 31, 32], [6, 6, 9, 9, 12, 12, 14, 14, 17, 17, 21, 21, 24, 24, 28, 29, 31, 32], [7, 7, 9, 10, 12, 12, 15, 15, 17, 17, 22, 22, 24, 24, 29, 32], [6, 7, 9, 10, 12, 12, 14, 15, 17, 17, 21, 22, 24, 24, 28, 32], [8, 9, 11, 12, 16, 17, 23, 24, 30, 32], [6, 6, 8, 9, 11, 12, 14, 14, 16, 17, 21, 21, 23, 24, 28, 32], [7, 12, 15, 17, 22, 24, 29, 32], [6, 12, 14, 17, 21, 24, 28, 32], [10, 10, 13, 13, 18, 18, 25, 25, 32, 33], [6, 6, 9, 10, 13, 14, 18, 18, 21, 21, 25, 25, 28, 29, 32, 33], [7, 7, 10, 10, 13, 13, 15, 15, 18, 18, 22, 22, 25, 25, 29, 30, 32, 33], [6, 7, 9, 10, 13, 15, 18, 18, 21, 22, 25, 25, 28, 30, 32, 33], [8, 8, 10, 11, 13, 13, 16, 16, 18, 18, 23, 23, 25, 25, 30, 33], [6, 6, 8, 11, 13, 14, 16, 16, 18, 18, 21, 21, 23, 23, 25, 25, 28, 33], [7, 8, 10, 11, 13, 13, 15, 16, 18, 18, 22, 23, 25, 25, 29, 33], [6, 11, 13, 16, 18, 18, 21, 23, 25, 25, 28, 33], [9, 10, 12, 13, 17, 18, 24, 25, 31, 33], [6, 6, 9, 10, 12, 14, 17, 18, 21, 21, 24, 25, 28, 29, 31, 33], [7, 7, 9, 10, 12, 13, 15, 15, 17, 18, 22, 22, 24, 25, 29, 33], [6, 7, 9, 10, 12, 15, 17, 18, 21, 22, 24, 25, 28, 33], [8, 13, 16, 18, 23, 25, 30, 33], [6, 6, 8, 14, 16, 18, 21, 21, 23, 25, 28, 33], [7, 13, 15, 18, 22, 25, 29, 33], [6, 18, 21, 25, 28, 33], 807420480, 1614840960, [8, 8, 11, 11, 16, 16, 23, 23, 30, 31], [9, 9, 12, 12, 17, 17, 24, 24, 31, 32], [10, 10, 13, 13, 18, 18, 25, 25, 32, 33], [11, 11, 14, 14, 19, 19, 26, 26, 33, 34], [12, 12, 15, 15, 20, 20, 27, 27, 34, 35], [13, 13, 16, 16, 21, 21, 28, 28, 35, 36], [14, 14, 17, 17, 22, 22, 29, 29, 36, 37], [15, 15, 18, 18, 23, 23, 30, 30, 37, 38], [16, 16, 19, 19, 24, 24, 31, 31, 38, 39], [17, 17, 20, 20, 25, 25, 32, 32, 39, 40], [18, 18, 21, 21, 26, 26, 33, 33, 40, 41], [19, 19, 22, 22, 27, 27, 34, 34, 41, 42], [20, 20, 23, 23, 28, 28, 35, 35, 42, 43], [21, 21, 24, 24, 29, 29, 36, 36, 43, 44], [22, 22, 25, 25, 30, 30, 37, 37, 44, 45], [23, 23, 26, 26, 31, 31, 38, 38, 45, 46], [24, 24, 27, 27, 32, 32, 39, 39, 46, 47], [25, 25, 28, 28, 33, 33, 40, 40, 47, 48], [26, 26, 29, 29, 34, 34, 41, 41, 48, 49], [27, 27, 30, 30, 35, 35, 42, 42, 49, 50], [28, 28, 31, 31, 36, 36, 43, 43, 50, 51], [29, 29, 32, 32, 37, 37, 44, 44, 51, 52], [30, 30, 33, 33, 38, 38, 45, 45, 52, 53], [31, 31, 34, 34, 39, 39, 46, 46, 53, 54], [32, 32, 35, 35, 40, 40, 47, 47, 54, 55], [33, 33, 36, 36, 41, 41, 48, 48, 55, 56], [34, 34, 37, 37, 42, 42, 49, 49, 56, 57], [35, 35, 38, 38, 43, 43, 50, 50, 57, 58], [36, 36, 39, 39, 44, 44, 51, 51, 58, 59], [7, 7, 10, 10, 16, 18, 20, 20, 22, 23, 25, 31, 33, 33, 35, 40, 43, 43, 45, 45, 49, 51], [3, 3, 6, 6, 13, 13, 16, 16, 18, 27, 29, 31, 33, 36, 39, 44, 46, 46, 48, 50, 52, 54], [3, 3, 9, 9, 12, 16, 18, 19, 21, 37, 40, 42], [9, 9, 12, 12, 17, 17, 19, 19, 22, 22, 24, 25, 27, 34, 36, 39, 41, 47, 50, 53], [6, 6, 16, 16, 19, 19, 21, 21, 25, 27, 29, 29, 31, 32, 34, 42, 44, 48], [7, 7, 12, 12, 16, 17, 20, 20, 22, 22, 25, 33, 35, 37, 39, 41, 43, 43, 45, 45, 49, 51], [9, 9, 11, 11, 13, 14, 17, 17, 19, 19, 21, 24, 26, 38, 40, 43, 46, 49], [5, 5, 7, 7, 15, 15, 17, 18, 20, 20, 22, 22, 24, 30, 32, 37, 39, 46, 48, 54], [25, 25, 27, 28, 35, 35, 37, 38, 40, 49], [6, 6, 15, 16, 19, 19, 21, 21, 23, 23, 25, 40, 42, 45, 47, 47, 51, 53], [4, 4, 12, 12, 14, 14, 17, 17, 19, 19, 22, 25, 27, 27, 30, 34, 36, 40, 42, 48], [7, 7, 12, 12, 17, 17, 20, 20, 22, 22, 25, 28, 31, 33, 35, 36, 38, 41, 44, 47, 50, 52], [5, 6, 10, 10, 15, 16, 18, 21, 23, 31, 34, 37, 39, 41, 43, 47, 49, 51], [3, 3, 6, 7, 9, 9, 13, 13, 16, 30, 32, 49], [11, 11, 19, 19, 21, 24, 26, 26, 28, 45, 47, 49], [6, 6, 16, 16, 19, 21, 25, 28, 30, 30, 33, 33, 35, 35, 38, 41, 43, 49], [3, 3, 13, 14, 16, 16, 18, 18, 21, 24, 27, 31, 33, 43, 45, 45, 49, 51], [20, 20, 25, 25, 28, 28, 30, 30, 32, 33, 35, 35, 38, 49, 51, 54], [22, 22, 24, 24, 26, 26, 29, 29, 32, 32, 34, 37, 39, 39, 41, 50], [11, 12, 16, 17, 21, 27, 29, 39, 42, 45], [3, 3, 5, 5, 9, 9, 13, 13, 15, 16, 18, 20, 22, 26, 28, 33, 35, 47, 49, 53], [3, 3, 9, 9, 12, 13, 16, 20, 22, 25, 27, 41, 43, 46, 48, 54], [3, 5, 13, 20, 22, 27, 30, 30, 32, 32, 36, 38], [5, 5, 7, 7, 10, 10, 15, 15, 17, 18, 20, 20, 22, 33, 35, 35, 37, 37, 39, 43], [11, 11, 19, 19, 21, 21, 24, 24, 26, 26, 29, 34, 38, 40, 43, 43, 46, 46, 48, 48, 52, 54], 29696008, 59392016, 63922200, 118784032, 131440680, 127844400, 132112440, 237568064, 267198536, 262881360, 267346008, 255688800, 268279912, 264224880, 268427384, 475136128, 500637832, 534397072, 534732952, 525762720, 534225064, 534692016, 534765752, 511377600, 536813768, 536559824, 536830168, 528449760, 536846568, 536854768, 536862968, 29696008, 59392016, 118784032, 237568064, 475136128, 950272256, 1900544512, [10, 10, 20, 20, 23, 23, 25, 25, 29, 31], [11, 11, 21, 21, 24, 24, 26, 26, 30, 32], [12, 12, 22, 22, 25, 25, 27, 27, 31, 33], [13, 13, 23, 23, 26, 26, 28, 28, 32, 34], [14, 14, 24, 24, 27, 27, 29, 29, 33, 35], [15, 15, 25, 25, 28, 28, 30, 30, 34, 36], [16, 16, 26, 26, 29, 29, 31, 31, 35, 37], [17, 17, 27, 27, 30, 30, 32, 32, 36, 38], [18, 18, 28, 28, 31, 31, 33, 33, 37, 39], [19, 19, 29, 29, 32, 32, 34, 34, 38, 40], [20, 20, 30, 30, 33, 33, 35, 35, 39, 41], [21, 21, 31, 31, 34, 34, 36, 36, 40, 42], [22, 22, 32, 32, 35, 35, 37, 37, 41, 43], [23, 23, 33, 33, 36, 36, 38, 38, 42, 44], [24, 24, 34, 34, 37, 37, 39, 39, 43, 45], [25, 25, 35, 35, 38, 38, 40, 40, 44, 46], [26, 26, 36, 36, 39, 39, 41, 41, 45, 47], [27, 27, 37, 37, 40, 40, 42, 42, 46, 48], [28, 28, 38, 38, 41, 41, 43, 43, 47, 49], [29, 29, 39, 39, 42, 42, 44, 44, 48, 50], [30, 30, 40, 40, 43, 43, 45, 45, 49, 51], [31, 31, 41, 41, 44, 44, 46, 46, 50, 52], [32, 32, 42, 42, 45, 45, 47, 47, 51, 53], [33, 33, 43, 43, 46, 46, 48, 48, 52, 54], [8, 8, 11, 11, 13, 13, 16, 17, 19, 22, 24, 24, 26, 26, 28, 28, 30, 32, 34, 34, 36, 36, 40, 40, 42, 42, 44, 44, 54, 54], [4, 4, 7, 7, 9, 9, 12, 13, 16, 17, 20, 22, 26, 27, 30, 31, 34, 35, 39, 39, 43, 45, 47, 47, 53, 53, 57, 57], [4, 4, 9, 10, 13, 13, 15, 31, 33, 33, 35, 36, 38, 40, 45, 45], [10, 10, 13, 13, 15, 15, 18, 19, 22, 23, 25, 27, 30, 34, 36, 38, 41, 42, 45, 46, 48, 48, 55, 56], [7, 7, 12, 12, 16, 17, 20, 20, 22, 22, 25, 33, 35, 37, 39, 41, 43, 43, 45, 45, 49, 51], [8, 8, 13, 13, 17, 18, 21, 22, 26, 26, 30, 31, 34, 34, 36, 36, 40, 40, 44, 44, 54, 54], [10, 10, 12, 12, 14, 15, 17, 21, 23, 25, 27, 29, 31, 31, 33, 35, 37, 38, 41, 42, 51, 52], [6, 6, 8, 8, 11, 11, 13, 13, 15, 17, 19, 19, 21, 21, 23, 23, 25, 25, 28, 32, 34, 36, 39, 40, 43, 44, 46, 47, 53, 54, 57, 57], [26, 26, 28, 29, 31, 31, 33, 35, 37, 39, 41, 42, 49, 49, 51, 52], [7, 7, 12, 12, 16, 17, 20, 22, 24, 26, 29, 30, 33, 33, 37, 40, 42, 43, 46, 47, 56, 56], [5, 5, 10, 10, 13, 14, 18, 18, 22, 23, 25, 28, 30, 31, 33, 34, 36, 38, 41, 41, 48, 48, 51, 51], [8, 8, 13, 13, 17, 18, 21, 22, 26, 27, 31, 32, 35, 37, 39, 41, 45, 45, 49, 50, 55, 55], [6, 7, 11, 12, 15, 17, 19, 22, 24, 27, 29, 32, 34, 34, 36, 36, 38, 40, 44, 44, 48, 48, 50, 50, 54, 54], [4, 4, 7, 10, 12, 13, 15, 21, 23, 23, 25, 36, 38, 39, 41, 42, 44, 44, 46, 46, 48, 49, 52, 52], [12, 12, 17, 17, 20, 21, 23, 25, 28, 30, 32, 38, 42, 43, 46, 48, 52, 52], [7, 7, 12, 12, 16, 16, 20, 21, 26, 26, 29, 31, 34, 35, 38, 39, 42, 42, 44, 44, 49, 49, 52, 52], [4, 4, 9, 9, 13, 13, 15, 15, 17, 17, 19, 20, 22, 22, 24, 24, 27, 28, 31, 32, 35, 36, 38, 38, 40, 40, 42, 42, 44, 45, 54, 54], [21, 21, 26, 26, 29, 31, 33, 35, 38, 39, 42, 44, 46, 47, 49, 49, 52, 52, 56, 57], [23, 23, 25, 25, 27, 28, 30, 30, 32, 32, 34, 36, 38, 40, 43, 43, 46, 46, 48, 48, 50, 50, 53, 53], [12, 13, 17, 18, 21, 27, 29, 31, 33, 38, 40, 41, 47, 48], [4, 4, 6, 6, 9, 11, 13, 13, 15, 15, 17, 17, 19, 19, 23, 24, 26, 29, 31, 33, 35, 40, 42, 42, 44, 44, 46, 47, 49, 50, 54, 54, 56, 56], [4, 4, 9, 10, 13, 13, 15, 15, 17, 23, 25, 27, 29, 34, 36, 37, 39, 41, 43, 45, 47, 47, 54, 55, 57, 57], [4, 6, 9, 11, 13, 15, 17, 19, 23, 23, 27, 29, 31, 31, 41, 41], [6, 6, 8, 8, 11, 11, 13, 13, 15, 17, 19, 21, 23, 24, 26, 26, 28, 32, 34, 34, 36, 36, 44, 44, 46, 46], [12, 12, 17, 17, 20, 21, 25, 25, 29, 29, 33, 35, 39, 39, 43, 43, 47, 47, 57, 57], 134357520, 268715040, 403072560, 537430080, 671787600, 806145120, 940502640, 1074860160, 1209217680, 1343575200, 1477932720, 1612290240, 1746647760, 1881005280, 2015362800, [8, 8, 13, 13, 17, 17, 21, 21, 31, 31], [4, 4, 8, 9, 13, 13, 17, 17, 21, 21, 27, 27, 31, 31], [5, 5, 8, 8, 10, 10, 13, 14, 17, 18, 21, 21, 28, 28, 31, 31], [4, 5, 8, 10, 13, 14, 17, 18, 21, 21, 27, 28, 31, 31], [6, 6, 8, 8, 11, 11, 13, 13, 15, 15, 17, 17, 19, 19, 21, 21, 29, 29, 31, 31], [4, 4, 6, 6, 8, 9, 11, 11, 13, 13, 15, 15, 17, 17, 19, 19, 21, 21, 27, 27, 29, 29, 31, 31], [5, 6, 8, 8, 10, 11, 13, 15, 17, 19, 21, 21, 28, 29, 31, 31], [4, 6, 8, 11, 13, 15, 17, 19, 21, 21, 27, 29, 31, 31], [7, 8, 12, 13, 16, 17, 20, 21, 30, 31], [4, 4, 7, 9, 12, 13, 16, 17, 20, 21, 27, 27, 30, 31], [5, 5, 7, 8, 10, 10, 12, 14, 16, 18, 20, 21, 28, 28, 30, 31], [4, 5, 7, 10, 12, 14, 16, 18, 20, 21, 27, 28, 30, 31], [6, 8, 11, 13, 15, 17, 19, 21, 29, 31], [4, 4, 6, 9, 11, 13, 15, 17, 19, 21, 27, 27, 29, 31], [5, 8, 10, 21, 28, 31], [4, 21, 27, 31], 134357520, 268715040, 537430080, 1074860160, [8, 8, 13, 13, 17, 17, 21, 21, 31, 31], [9, 9, 14, 14, 18, 18, 22, 22, 32, 32], [10, 10, 15, 15, 19, 19, 23, 23, 33, 33], [11, 11, 16, 16, 20, 20, 24, 24, 34, 34], [12, 12, 17, 17, 21, 21, 25, 25, 35, 35], [13, 13, 18, 18, 22, 22, 26, 26, 36, 36], [14, 14, 19, 19, 23, 23, 27, 27, 37, 37], [15, 15, 20, 20, 24, 24, 28, 28, 38, 38], [16, 16, 21, 21, 25, 25, 29, 29, 39, 39], [17, 17, 22, 22, 26, 26, 30, 30, 40, 40], [18, 18, 23, 23, 27, 27, 31, 31, 41, 41], [19, 19, 24, 24, 28, 28, 32, 32, 42, 42], [20, 20, 25, 25, 29, 29, 33, 33, 43, 43], [21, 21, 26, 26, 30, 30, 34, 34, 44, 44], [22, 22, 27, 27, 31, 31, 35, 35, 45, 45], [23, 23, 28, 28, 32, 32, 36, 36, 46, 46], [24, 24, 29, 29, 33, 33, 37, 37, 47, 47], [25, 25, 30, 30, 34, 34, 38, 38, 48, 48], [26, 26, 31, 31, 35, 35, 39, 39, 49, 49], [27, 27, 32, 32, 36, 36, 40, 40, 50, 50], [28, 28, 33, 33, 37, 37, 41, 41, 51, 51], [29, 29, 34, 34, 38, 38, 42, 42, 52, 52], [30, 30, 35, 35, 39, 39, 43, 43, 53, 53], [31, 31, 36, 36, 40, 40, 44, 44, 54, 54], [32, 32, 37, 37, 41, 41, 45, 45, 55, 55], [33, 33, 38, 38, 42, 42, 46, 46, 56, 56], [34, 34, 39, 39, 43, 43, 47, 47, 57, 57], [10, 10, 12, 15, 17, 19, 21, 21, 23, 29, 31, 33, 35, 35, 37, 41, 51, 52], [6, 6, 8, 11, 13, 14, 17, 17, 23, 29, 31, 32, 34, 34, 36, 38, 40, 44, 50, 51, 54, 55], [6, 6, 8, 8, 10, 12, 14, 38, 42, 43], [12, 12, 14, 17, 19, 20, 22, 25, 27, 40, 42, 43, 45, 46, 52, 54], [9, 9, 11, 11, 13, 14, 17, 17, 19, 19, 21, 24, 26, 38, 40, 43, 46, 49], [10, 10, 12, 12, 14, 15, 17, 21, 23, 25, 27, 29, 31, 31, 33, 35, 37, 38, 41, 42, 51, 52], [12, 12, 14, 14, 16, 22, 24, 25, 28, 28, 30, 36, 38, 39, 48, 50], [8, 8, 10, 10, 12, 16, 18, 18, 20, 20, 22, 23, 25, 30, 32, 38, 40, 41, 43, 44, 50, 52, 54, 55], [28, 28, 30, 36, 38, 39, 46, 50], [9, 9, 11, 11, 13, 14, 17, 24, 26, 28, 30, 31, 34, 41, 43, 45, 53, 54], [7, 7, 9, 9, 11, 12, 15, 15, 17, 17, 19, 20, 22, 35, 38, 39, 45, 46, 48, 49], [10, 10, 12, 12, 14, 15, 17, 20, 23, 23, 28, 34, 36, 39, 42, 42, 46, 48, 52, 53], [8, 24, 26, 29, 31, 38, 41, 41, 45, 48, 51, 52], [6, 6, 8, 18, 20, 20, 22, 25, 27, 33, 35, 36, 38, 39, 41, 47, 49, 50], [14, 14, 16, 16, 18, 19, 22, 22, 24, 36, 39, 41, 43, 46, 49, 50], [9, 9, 11, 11, 13, 14, 17, 17, 23, 23, 25, 25, 27, 28, 30, 33, 35, 36, 39, 39, 41, 42, 46, 47, 49, 50], [6, 6, 8, 8, 10, 11, 14, 14, 17, 17, 19, 19, 21, 26, 28, 29, 32, 33, 35, 43, 51, 52], [23, 23, 25, 25, 27, 28, 30, 33, 35, 44, 46, 47, 49, 50, 53, 55], [25, 25, 27, 27, 29, 37, 40, 40, 43, 48, 50, 51], [14, 35, 37, 39, 44, 46], [6, 6, 8, 8, 10, 14, 16, 17, 20, 21, 23, 41, 43, 48, 51, 54], [6, 6, 8, 8, 10, 12, 14, 17, 19, 20, 22, 28, 30, 31, 33, 42, 44, 44, 51, 55], [6, 16, 20, 20, 22, 22, 24, 28, 38, 39], [8, 8, 10, 10, 12, 18, 21, 21, 23, 23, 25, 33, 41, 44], [14, 14, 16, 16, 18, 19, 22, 22, 24, 24, 26, 27, 30, 30, 32, 33, 36, 36, 38, 38, 40, 41, 44, 44, 54, 55], 50351424, 100702848, 117497792, 201405696, 251755840, 234995584, 251789248, 402811392, 453144384, 503511680, 520290240, 469991168, 520322880, 503578496, 520355776, 805622784, 855956800, 906288768, 923066304, 1007023360, 1057357120, 1040580480, 1057357760, 939982336, 990314304, 1040645760, 1057423296, 1007156992, 1057488704, 1040711552, 1057488832, 50351424, 100702848, 201405696, 402811392, 805622784, 1611245568, [12, 12, 14, 14, 16, 17, 20, 20, 30, 31], [13, 13, 15, 15, 17, 18, 21, 21, 31, 32], [14, 14, 16, 16, 18, 19, 22, 22, 32, 33], [15, 15, 17, 17, 19, 20, 23, 23, 33, 34], [16, 16, 18, 18, 20, 21, 24, 24, 34, 35], [17, 17, 19, 19, 21, 22, 25, 25, 35, 36], [18, 18, 20, 20, 22, 23, 26, 26, 36, 37], [19, 19, 21, 21, 23, 24, 27, 27, 37, 38], [20, 20, 22, 22, 24, 25, 28, 28, 38, 39], [21, 21, 23, 23, 25, 26, 29, 29, 39, 40], [22, 22, 24, 24, 26, 27, 30, 30, 40, 41], [23, 23, 25, 25, 27, 28, 31, 31, 41, 42], [24, 24, 26, 26, 28, 29, 32, 32, 42, 43], [25, 25, 27, 27, 29, 30, 33, 33, 43, 44], [26, 26, 28, 28, 30, 31, 34, 34, 44, 45], [27, 27, 29, 29, 31, 32, 35, 35, 45, 46], [28, 28, 30, 30, 32, 33, 36, 36, 46, 47], [29, 29, 31, 31, 33, 34, 37, 37, 47, 48], [30, 30, 32, 32, 34, 35, 38, 38, 48, 49], [31, 31, 33, 33, 35, 36, 39, 39, 49, 50], [32, 32, 34, 34, 36, 37, 40, 40, 50, 51], [33, 33, 35, 35, 37, 38, 41, 41, 51, 52], [34, 34, 36, 36, 38, 39, 42, 42, 52, 53], [35, 35, 37, 37, 39, 40, 43, 43, 53, 54], [36, 36, 38, 38, 40, 41, 44, 44, 54, 55], [6, 6, 8, 9, 11, 11, 15, 17, 19, 19, 23, 23, 25, 27, 29, 34, 37, 37, 39, 43, 45, 46, 53, 54, 57, 57], [2, 2, 4, 5, 7, 7, 12, 12, 15, 15, 19, 22, 26, 30, 32, 34, 36, 38, 42, 45, 47, 49, 52, 53, 56, 57, 60, 60], [2, 2, 4, 4, 8, 8, 10, 28, 30, 33, 35, 45, 48, 48], [8, 8, 10, 11, 13, 13, 16, 16, 18, 18, 21, 21, 23, 23, 25, 26, 28, 28, 30, 33, 35, 36, 39, 41, 44, 44, 47, 48, 51, 51, 54, 56, 58, 59], [5, 5, 7, 7, 15, 15, 17, 18, 20, 20, 22, 22, 24, 30, 32, 37, 39, 46, 48, 54], [6, 6, 8, 8, 11, 11, 13, 13, 15, 17, 19, 19, 21, 21, 23, 23, 25, 25, 28, 32, 34, 36, 39, 40, 43, 44, 46, 47, 53, 54, 57, 57], [8, 8, 10, 10, 12, 16, 18, 18, 20, 20, 22, 23, 25, 30, 32, 38, 40, 41, 43, 44, 50, 52, 54, 55], [4, 4, 6, 6, 8, 8, 14, 14, 16, 16, 21, 21, 23, 24, 28, 32, 34, 34, 38, 39, 42, 42, 45, 46, 49, 49, 52, 54, 56, 57, 60, 60], [24, 24, 26, 29, 34, 34, 36, 37, 41, 41, 43, 44, 48, 52, 54, 55], [5, 5, 7, 7, 14, 18, 20, 20, 22, 22, 24, 25, 28, 33, 35, 35, 38, 43, 46, 48, 50, 50, 55, 56, 59, 59], [3, 3, 5, 5, 11, 11, 13, 13, 16, 16, 18, 18, 20, 21, 23, 23, 25, 28, 31, 31, 33, 33, 35, 36, 39, 41, 43, 44, 47, 48, 50, 51, 54, 54], [6, 6, 8, 8, 11, 11, 13, 13, 16, 16, 21, 21, 23, 28, 30, 32, 34, 36, 39, 42, 47, 50, 52, 55, 58, 58], [4, 7, 9, 9, 11, 11, 14, 17, 19, 19, 21, 35, 37, 40, 42, 43, 46, 51, 53, 54, 57, 57], [2, 2, 4, 8, 10, 10, 12, 12, 15, 16, 18, 19, 21, 27, 29, 34, 36, 38, 40, 41, 43, 49, 51, 52, 55, 55], [10, 10, 12, 12, 18, 18, 20, 25, 27, 29, 31, 35, 37, 40, 42, 52, 55, 55], [5, 5, 7, 7, 15, 15, 19, 19, 21, 22, 24, 24, 26, 27, 29, 30, 33, 34, 36, 37, 41, 41, 43, 44, 47, 49, 51, 52, 55, 55], [2, 2, 4, 4, 12, 13, 15, 15, 17, 17, 19, 20, 22, 23, 26, 27, 29, 31, 34, 34, 37, 39, 41, 42, 44, 46, 48, 48, 53, 54, 57, 57], [19, 19, 21, 21, 24, 24, 26, 27, 29, 29, 31, 34, 36, 37, 41, 44, 47, 49, 51, 52, 55, 57, 59, 60], [21, 21, 23, 23, 25, 25, 27, 28, 30, 31, 33, 33, 35, 35, 38, 38, 40, 40, 42, 42, 45, 53, 56, 56], [10, 13, 15, 18, 20, 28, 32, 36, 38, 41, 43, 44, 46, 48, 50, 51], [2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 17, 19, 21, 36, 38, 39, 41, 42, 45, 50, 52, 57, 59, 59], [2, 2, 4, 4, 8, 8, 10, 13, 16, 16, 18, 21, 25, 36, 39, 44, 46, 47, 49, 49, 53, 58, 60, 60], [2, 6, 12, 14, 16, 16, 18, 21, 26, 33, 40, 41, 44, 44], [4, 4, 6, 6, 8, 9, 11, 11, 14, 14, 16, 16, 19, 19, 21, 21, 23, 23, 26, 26, 28, 34, 36, 38, 43, 47, 49, 49], [10, 10, 12, 12, 18, 18, 20, 20, 27, 28, 32, 32, 34, 35, 38, 38, 42, 43, 46, 46, 49, 49, 56, 57, 60, 60], 1275596820, [3, 3, 5, 5, 13, 13, 20, 20, 27, 28, 31, 31], [2, 5, 12, 13, 19, 20, 26, 28, 30, 31], [4, 4, 6, 6, 14, 14, 21, 21, 28, 29, 32, 32], [2, 2, 4, 4, 6, 6, 12, 12, 14, 14, 19, 19, 21, 21, 26, 30, 32, 32], [3, 6, 13, 14, 20, 21, 27, 29, 31, 32], [2, 6, 12, 14, 19, 21, 26, 32], [5, 5, 7, 7, 15, 15, 22, 22, 29, 30, 33, 33], [2, 2, 4, 5, 7, 7, 12, 12, 15, 15, 19, 19, 22, 22, 26, 27, 29, 30, 33, 33], [3, 3, 5, 5, 7, 7, 13, 13, 15, 15, 20, 20, 22, 22, 27, 31, 33, 33], [2, 5, 7, 7, 12, 13, 15, 15, 19, 20, 22, 22, 26, 31, 33, 33], [4, 7, 14, 15, 21, 22, 28, 30, 32, 33], [2, 2, 4, 7, 12, 12, 14, 15, 19, 19, 21, 22, 26, 30, 32, 33], [3, 7, 13, 15, 20, 22, 27, 33], [2, 7, 12, 15, 19, 22, 26, 33], [6, 6, 8, 8, 16, 16, 23, 23, 30, 31, 34, 34], [2, 2, 4, 4, 6, 6, 8, 8, 12, 12, 16, 16, 19, 19, 23, 23, 26, 27, 30, 31, 34, 34], [3, 3, 5, 6, 8, 8, 13, 13, 16, 16, 20, 20, 23, 23, 27, 28, 30, 31, 34, 34], [2, 6, 8, 8, 12, 13, 16, 16, 19, 20, 23, 23, 26, 28, 30, 31, 34, 34], [4, 4, 6, 6, 8, 8, 14, 14, 16, 16, 21, 21, 23, 23, 28, 32, 34, 34], [2, 2, 4, 4, 6, 6, 8, 8, 12, 12, 14, 14, 16, 16, 19, 19, 21, 21, 23, 23, 26, 32, 34, 34], [3, 6, 8, 8, 13, 14, 16, 16, 20, 21, 23, 23, 27, 32, 34, 34], [2, 6, 8, 8, 12, 14, 16, 16, 19, 21, 23, 23, 26, 32, 34, 34], [5, 8, 15, 16, 22, 23, 29, 31, 33, 34], [2, 2, 4, 8, 12, 12, 15, 16, 19, 19, 22, 23, 26, 27, 29, 31, 33, 34], [3, 3, 5, 8, 13, 13, 15, 16, 20, 20, 22, 23, 27, 31, 33, 34], [2, 8, 12, 13, 15, 16, 19, 20, 22, 23, 26, 31, 33, 34], [4, 8, 14, 16, 21, 23, 28, 34], [2, 2, 4, 8, 12, 12, 14, 16, 19, 19, 21, 23, 26, 34], [3, 8, 13, 16, 20, 23, 27, 34], [2, 8, 12, 16, 19, 23, 26, 34], 1275596820, [3, 3, 5, 5, 13, 13, 20, 20, 27, 28, 31, 31], [4, 4, 6, 6, 14, 14, 21, 21, 28, 29, 32, 32], [5, 5, 7, 7, 15, 15, 22, 22, 29, 30, 33, 33], [6, 6, 8, 8, 16, 16, 23, 23, 30, 31, 34, 34], [7, 7, 9, 9, 17, 17, 24, 24, 31, 32, 35, 35], [8, 8, 10, 10, 18, 18, 25, 25, 32, 33, 36, 36], [9, 9, 11, 11, 19, 19, 26, 26, 33, 34, 37, 37], [10, 10, 12, 12, 20, 20, 27, 27, 34, 35, 38, 38], [11, 11, 13, 13, 21, 21, 28, 28, 35, 36, 39, 39], [12, 12, 14, 14, 22, 22, 29, 29, 36, 37, 40, 40], [13, 13, 15, 15, 23, 23, 30, 30, 37, 38, 41, 41], [14, 14, 16, 16, 24, 24, 31, 31, 38, 39, 42, 42], [15, 15, 17, 17, 25, 25, 32, 32, 39, 40, 43, 43], [16, 16, 18, 18, 26, 26, 33, 33, 40, 41, 44, 44], [17, 17, 19, 19, 27, 27, 34, 34, 41, 42, 45, 45], [18, 18, 20, 20, 28, 28, 35, 35, 42, 43, 46, 46], [19, 19, 21, 21, 29, 29, 36, 36, 43, 44, 47, 47], [20, 20, 22, 22, 30, 30, 37, 37, 44, 45, 48, 48], [21, 21, 23, 23, 31, 31, 38, 38, 45, 46, 49, 49], [22, 22, 24, 24, 32, 32, 39, 39, 46, 47, 50, 50], [23, 23, 25, 25, 33, 33, 40, 40, 47, 48, 51, 51], [24, 24, 26, 26, 34, 34, 41, 41, 48, 49, 52, 52], [25, 25, 27, 27, 35, 35, 42, 42, 49, 50, 53, 53], [26, 26, 28, 28, 36, 36, 43, 43, 50, 51, 54, 54], [27, 27, 29, 29, 37, 37, 44, 44, 51, 52, 55, 55], [28, 28, 30, 30, 38, 38, 45, 45, 52, 53, 56, 56], [29, 29, 31, 31, 39, 39, 46, 46, 53, 54, 57, 57], [30, 30, 32, 32, 40, 40, 47, 47, 54, 55, 58, 58], [31, 31, 33, 33, 41, 41, 48, 48, 55, 56, 59, 59], [32, 32, 34, 34, 42, 42, 49, 49, 56, 57, 60, 60], [26, 26, 28, 29, 31, 32, 35, 35, 37, 40, 49, 49, 51, 52], [22, 22, 24, 25, 27, 28, 39, 43, 48, 48, 50, 52, 54, 55], [22, 22, 24, 25, 28, 28, 30, 31, 33, 38, 40, 40, 42, 43], [28, 28, 30, 31, 33, 34, 36, 36, 38, 39, 43, 43, 45, 46, 50, 54], [25, 25, 27, 28, 35, 35, 37, 38, 40, 49], [26, 26, 28, 29, 31, 31, 33, 35, 37, 39, 41, 42, 49, 49, 51, 52], [28, 28, 30, 36, 38, 39, 46, 50], [24, 24, 26, 29, 34, 34, 36, 37, 41, 41, 43, 44, 48, 52, 54, 55], [44, 44, 46, 50], [25, 25, 27, 28, 34, 38, 40, 42, 44, 45, 51, 51, 53, 54], [23, 23, 25, 26, 31, 31, 33, 34, 36, 36, 38, 39, 43, 43, 45, 46, 48, 49], [26, 26, 28, 29, 31, 31, 33, 34, 44, 48, 50, 50, 52, 53], [24, 29, 31, 32, 34, 38, 43, 43, 45, 49, 51, 52], [22, 22, 24, 31, 36, 36, 38, 39, 41, 47, 49, 50], [30, 30, 32, 33, 38, 38, 40, 47, 49, 50], [25, 25, 27, 28, 39, 39, 41, 42, 44, 44, 46, 47, 49, 50], [22, 22, 24, 25, 33, 33, 35, 37, 39, 40, 42, 43, 49, 49, 51, 52], [39, 39, 41, 42, 44, 44, 46, 47, 49, 55], [41, 41, 43, 48, 50, 51], [30, 39, 42, 46], [22, 22, 24, 28, 30, 31, 37, 37, 39, 49, 51, 54], [22, 22, 24, 25, 28, 28, 30, 31, 33, 34, 36, 36, 38, 42, 49, 55], [22, 27, 36, 36, 38, 39], [24, 24, 26, 29, 31, 32, 39, 39, 41, 44], [30, 30, 32, 33, 38, 38, 40, 41, 52, 52, 54, 55], 54525952, 109051904, 130023424, 218103808, 255852544, 260046848, 264241152, 436207616, 457179136, 511705088, 532676608, 520093696, 524288000, 528482304, 532676608, 872415232, 926941184, 914358272, 935329792, 1023410176, 1061158912, 1065353216, 1069547520, 1040187392, 1061158912, 1048576000, 1069547520, 1056964608, 1061158912, 1065353216, 1069547520, 54525952, 109051904, 218103808, 436207616, 872415232, 1744830464, [28, 28, 30, 31], [29, 29, 31, 32], [30, 30, 32, 33], [31, 31, 33, 34], [32, 32, 34, 35], [33, 33, 35, 36], [34, 34, 36, 37], [35, 35, 37, 38], [36, 36, 38, 39], [37, 37, 39, 40], [38, 38, 40, 41], [39, 39, 41, 42], [40, 40, 42, 43], [41, 41, 43, 44], [42, 42, 44, 45], [43, 43, 45, 46], [44, 44, 46, 47], [45, 45, 47, 48], [46, 46, 48, 49], [47, 47, 49, 50], [48, 48, 50, 51], [49, 49, 51, 52], [50, 50, 52, 53], [51, 51, 53, 54], [52, 52, 54, 55], [7, 7, 10, 10, 16, 20, 23, 31, 33, 33, 35, 36, 39, 40, 42, 44, 47, 47, 56, 56], [3, 3, 6, 6, 12, 13, 15, 16, 19, 21, 23, 23, 29, 34, 37, 39, 42, 43, 46, 47, 50, 50, 55, 55, 59, 59], [3, 3, 9, 9, 12, 16, 18, 35, 38, 38, 40, 42, 47, 47], [9, 9, 12, 12, 17, 19, 21, 22, 24, 27, 29, 35, 37, 38, 40, 45, 48, 50, 57, 58], [6, 6, 15, 16, 19, 19, 21, 21, 23, 23, 25, 40, 42, 45, 47, 47, 51, 53], [7, 7, 12, 12, 16, 17, 20, 22, 24, 26, 29, 30, 33, 33, 37, 40, 42, 43, 46, 47, 56, 56], [9, 9, 11, 11, 13, 14, 17, 24, 26, 28, 30, 31, 34, 41, 43, 45, 53, 54], [5, 5, 7, 7, 14, 18, 20, 20, 22, 22, 24, 25, 28, 33, 35, 35, 38, 43, 46, 48, 50, 50, 55, 56, 59, 59], [25, 25, 27, 28, 34, 38, 40, 42, 44, 45, 51, 51, 53, 54], [6, 6, 15, 16, 19, 19, 23, 26, 28, 29, 32, 33, 36, 36, 40, 42, 45, 45, 49, 49, 58, 58], [4, 4, 12, 14, 17, 17, 21, 22, 24, 27, 29, 30, 33, 34, 36, 38, 40, 41, 43, 44, 50, 50, 53, 53], [7, 7, 12, 12, 16, 17, 20, 22, 24, 26, 29, 29, 31, 31, 33, 36, 38, 44, 48, 48, 51, 52, 57, 57], [5, 6, 10, 10, 14, 16, 18, 20, 22, 37, 39, 43, 47, 47, 50, 50, 52, 52, 56, 56], [3, 3, 6, 7, 9, 9, 12, 13, 15, 20, 22, 35, 37, 39, 41, 43, 45, 46, 48, 48, 50, 51, 54, 54], [11, 11, 19, 24, 28, 29, 31, 41, 45, 45, 48, 50, 54, 54], [6, 6, 15, 16, 19, 20, 23, 23, 25, 25, 28, 30, 32, 35, 37, 38, 41, 42, 45, 46, 51, 51, 54, 54], [3, 3, 12, 14, 16, 16, 18, 18, 20, 21, 23, 24, 27, 31, 34, 35, 38, 40, 43, 44, 47, 47, 56, 56], [20, 20, 25, 25, 28, 30, 32, 35, 37, 38, 41, 43, 45, 46, 49, 51, 54, 54, 58, 59], [22, 22, 24, 24, 26, 26, 29, 29, 31, 39, 41, 43, 46, 46, 48, 48, 50, 50, 52, 52, 55, 55], [11, 12, 16, 17, 20, 30, 32, 34, 36, 38, 40, 43, 49, 50], [3, 3, 5, 5, 9, 9, 12, 16, 18, 20, 22, 23, 25, 36, 38, 45, 47, 49, 51, 52, 56, 56, 58, 58], [3, 3, 9, 9, 12, 13, 16, 22, 25, 48, 50, 50, 56, 57, 59, 59], [3, 5, 12, 18, 20, 22, 26, 27, 29, 31, 34, 34, 43, 43], [5, 5, 7, 7, 10, 10, 14, 20, 22, 24, 27, 27, 29, 33, 35, 37, 39, 39, 46, 46, 48, 48], [11, 11, 19, 21, 24, 24, 28, 29, 32, 33, 36, 37, 42, 43, 45, 46, 50, 50, 59, 59], 537997320, 1075994640, 1613983768, [5, 5, 14, 15, 18, 18, 22, 22, 31, 31], [3, 3, 5, 5, 12, 16, 18, 18, 20, 20, 22, 22, 29, 29, 31, 31], [4, 5, 13, 15, 17, 18, 21, 22, 30, 31], [3, 5, 12, 18, 20, 22, 29, 31], [6, 6, 15, 16, 19, 19, 23, 23, 32, 32], [3, 3, 6, 6, 12, 13, 15, 16, 19, 20, 23, 23, 29, 29, 32, 32], [4, 4, 6, 6, 13, 17, 19, 19, 21, 21, 23, 23, 30, 30, 32, 32], [3, 4, 6, 6, 12, 17, 19, 21, 23, 23, 29, 30, 32, 32], [5, 6, 14, 16, 18, 19, 22, 23, 31, 32], [3, 3, 5, 6, 12, 16, 18, 20, 22, 23, 29, 29, 31, 32], [4, 6, 13, 19, 21, 23, 30, 32], [3, 6, 12, 23, 29, 32], [7, 7, 16, 17, 20, 20, 24, 24, 33, 33], [3, 3, 7, 7, 12, 13, 16, 17, 20, 20, 24, 24, 29, 29, 33, 33], [4, 4, 7, 7, 13, 14, 16, 17, 20, 21, 24, 24, 30, 30, 33, 33], [3, 4, 7, 7, 12, 14, 16, 17, 20, 21, 24, 24, 29, 30, 33, 33], [5, 5, 7, 7, 14, 18, 20, 20, 22, 22, 24, 24, 31, 31, 33, 33], [3, 3, 5, 5, 7, 7, 12, 18, 20, 20, 22, 22, 24, 24, 29, 29, 31, 31, 33, 33], [4, 5, 7, 7, 13, 18, 20, 22, 24, 24, 30, 31, 33, 33], [3, 5, 7, 7, 12, 18, 20, 22, 24, 24, 29, 31, 33, 33], [6, 7, 15, 17, 19, 20, 23, 24, 32, 33], [3, 3, 6, 7, 12, 13, 15, 17, 19, 20, 23, 24, 29, 29, 32, 33], [4, 4, 6, 7, 13, 17, 19, 21, 23, 24, 30, 30, 32, 33], [3, 4, 6, 7, 12, 17, 19, 21, 23, 24, 29, 30, 32, 33], [5, 7, 14, 20, 22, 24, 31, 33], [3, 3, 5, 7, 12, 20, 22, 24, 29, 29, 31, 33], [4, 7, 13, 24, 30, 33], [3, 7, 12, 24, 29, 33], 537997320, 1075994640, [5, 5, 14, 15, 18, 18, 22, 22, 31, 31], [6, 6, 15, 16, 19, 19, 23, 23, 32, 32], [7, 7, 16, 17, 20, 20, 24, 24, 33, 33], [8, 8, 17, 18, 21, 21, 25, 25, 34, 34], [9, 9, 18, 19, 22, 22, 26, 26, 35, 35], [10, 10, 19, 20, 23, 23, 27, 27, 36, 36], [11, 11, 20, 21, 24, 24, 28, 28, 37, 37], [12, 12, 21, 22, 25, 25, 29, 29, 38, 38], [13, 13, 22, 23, 26, 26, 30, 30, 39, 39], [14, 14, 23, 24, 27, 27, 31, 31, 40, 40], [15, 15, 24, 25, 28, 28, 32, 32, 41, 41], [16, 16, 25, 26, 29, 29, 33, 33, 42, 42], [17, 17, 26, 27, 30, 30, 34, 34, 43, 43], [18, 18, 27, 28, 31, 31, 35, 35, 44, 44], [19, 19, 28, 29, 32, 32, 36, 36, 45, 45], [20, 20, 29, 30, 33, 33, 37, 37, 46, 46], [21, 21, 30, 31, 34, 34, 38, 38, 47, 47], [22, 22, 31, 32, 35, 35, 39, 39, 48, 48], [23, 23, 32, 33, 36, 36, 40, 40, 49, 49], [24, 24, 33, 34, 37, 37, 41, 41, 50, 50], [25, 25, 34, 35, 38, 38, 42, 42, 51, 51], [26, 26, 35, 36, 39, 39, 43, 43, 52, 52], [27, 27, 36, 37, 40, 40, 44, 44, 53, 53], [28, 28, 37, 38, 41, 41, 45, 45, 54, 54], [29, 29, 38, 39, 42, 42, 46, 46, 55, 55], [30, 30, 39, 40, 43, 43, 47, 47, 56, 56], [31, 31, 40, 41, 44, 44, 48, 48, 57, 57], [32, 32, 41, 42, 45, 45, 49, 49, 58, 58], [33, 33, 42, 43, 46, 46, 50, 50, 59, 59], [5, 5, 8, 8, 13, 14, 16, 16, 18, 18, 21, 22, 24, 25, 27, 29, 31, 31, 34, 34, 36, 37, 39, 39, 41, 41, 48, 48, 51, 51], [1, 1, 4, 4, 9, 9, 12, 12, 14, 14, 17, 19, 21, 21, 24, 24, 26, 27, 31, 32, 35, 35, 38, 42, 44, 44, 47, 47, 50, 51, 54, 54], [1, 1, 7, 7, 9, 10, 12, 15, 18, 27, 30, 30, 32, 37, 39, 39, 42, 42], [7, 7, 10, 10, 15, 15, 18, 18, 20, 20, 22, 23, 27, 30, 33, 33, 35, 35, 37, 38, 42, 43, 45, 45, 49, 50, 52, 53], [4, 4, 12, 12, 14, 14, 17, 17, 19, 19, 22, 25, 27, 27, 30, 34, 36, 40, 42, 48], [5, 5, 10, 10, 13, 14, 18, 18, 22, 23, 25, 28, 30, 31, 33, 34, 36, 38, 41, 41, 48, 48, 51, 51], [7, 7, 9, 9, 11, 12, 15, 15, 17, 17, 19, 20, 22, 35, 38, 39, 45, 46, 48, 49], [3, 3, 5, 5, 11, 11, 13, 13, 16, 16, 18, 18, 20, 21, 23, 23, 25, 28, 31, 31, 33, 33, 35, 36, 39, 41, 43, 44, 47, 48, 50, 51, 54, 54], [23, 23, 25, 26, 31, 31, 33, 34, 36, 36, 38, 39, 43, 43, 45, 46, 48, 49], [4, 4, 12, 14, 17, 17, 21, 22, 24, 27, 29, 30, 33, 34, 36, 38, 40, 41, 43, 44, 50, 50, 53, 53], [2, 2, 10, 10, 15, 15, 18, 18, 22, 23, 25, 25, 28, 28, 30, 30, 33, 33, 35, 35, 38, 38, 42, 42, 45, 45, 48, 48], [5, 5, 10, 10, 13, 13, 18, 18, 23, 25, 28, 33, 36, 37, 42, 44, 46, 47, 49, 49, 52, 52], [3, 4, 8, 8, 11, 14, 16, 17, 21, 24, 26, 28, 30, 37, 41, 42, 44, 45, 47, 48, 51, 51], [1, 1, 4, 5, 7, 7, 9, 9, 12, 15, 17, 18, 20, 28, 30, 31, 33, 36, 38, 43, 45, 46, 49, 49], [9, 9, 17, 17, 20, 22, 25, 26, 28, 30, 32, 35, 37, 37, 39, 46, 49, 49], [4, 4, 12, 12, 17, 18, 23, 24, 26, 27, 31, 31, 34, 34, 36, 36, 38, 39, 41, 41, 43, 43, 46, 46, 49, 49], [1, 1, 9, 9, 12, 12, 14, 14, 16, 16, 19, 21, 24, 25, 27, 29, 32, 32, 35, 36, 39, 39, 41, 42, 48, 48, 51, 51], [18, 18, 23, 23, 26, 26, 30, 31, 34, 34, 36, 36, 38, 39, 41, 41, 43, 44, 46, 46, 49, 51, 53, 54], [20, 20, 22, 22, 24, 24, 27, 28, 30, 30, 32, 33, 35, 35, 37, 37, 40, 40, 42, 45, 47, 47, 50, 50], [9, 10, 14, 15, 17, 18, 21, 23, 27, 30, 32, 35, 37, 38, 41, 42, 44, 45], [1, 1, 3, 3, 7, 7, 9, 9, 11, 11, 14, 16, 20, 21, 23, 24, 26, 34, 36, 41, 43, 44, 46, 48, 50, 51, 53, 53], [1, 1, 7, 7, 9, 10, 14, 15, 17, 18, 20, 21, 23, 31, 33, 33, 35, 42, 44, 44, 48, 49, 51, 52, 54, 54], [1, 3, 9, 11, 14, 16, 21, 26, 28, 28, 35, 35, 38, 38], [3, 3, 5, 5, 8, 8, 11, 11, 13, 13, 16, 16, 18, 18, 20, 21, 23, 23, 25, 26, 28, 28, 31, 31, 33, 33, 38, 38, 40, 41, 43, 43], [9, 9, 17, 17, 22, 22, 25, 25, 29, 32, 37, 37, 39, 40, 44, 44, 51, 51, 54, 54], 18891266, 37782532, 56673798, 75565064, 94456330, 113347596, 132238862, 151130128, 153244178, 188912660, 191026710, 226695192, 228809242, 264477724, 266591774, 302260256, 321151522, 306488356, 325379622, 377825320, 396716586, 382053420, 400944686, 453390384, 455504434, 457618484, 459732534, 528955448, 531069498, 533183548, 535297598, 18891266, 37782532, 75565064, 151130128, 302260256, 604520512, 1209041024, [8, 8, 16, 16, 21, 21, 28, 28, 31, 31], [9, 9, 17, 17, 22, 22, 29, 29, 32, 32], [10, 10, 18, 18, 23, 23, 30, 30, 33, 33], [11, 11, 19, 19, 24, 24, 31, 31, 34, 34], [12, 12, 20, 20, 25, 25, 32, 32, 35, 35], [13, 13, 21, 21, 26, 26, 33, 33, 36, 36], [14, 14, 22, 22, 27, 27, 34, 34, 37, 37], [15, 15, 23, 23, 28, 28, 35, 35, 38, 38], [16, 16, 24, 24, 29, 29, 36, 36, 39, 39], [17, 17, 25, 25, 30, 30, 37, 37, 40, 40], [18, 18, 26, 26, 31, 31, 38, 38, 41, 41], [19, 19, 27, 27, 32, 32, 39, 39, 42, 42], [20, 20, 28, 28, 33, 33, 40, 40, 43, 43], [21, 21, 29, 29, 34, 34, 41, 41, 44, 44], [22, 22, 30, 30, 35, 35, 42, 42, 45, 45], [23, 23, 31, 31, 36, 36, 43, 43, 46, 46], [24, 24, 32, 32, 37, 37, 44, 44, 47, 47], [25, 25, 33, 33, 38, 38, 45, 45, 48, 48], [26, 26, 34, 34, 39, 39, 46, 46, 49, 49], [27, 27, 35, 35, 40, 40, 47, 47, 50, 50], [28, 28, 36, 36, 41, 41, 48, 48, 51, 51], [29, 29, 37, 37, 42, 42, 49, 49, 52, 52], [30, 30, 38, 38, 43, 43, 50, 50, 53, 53], [31, 31, 39, 39, 44, 44, 51, 51, 54, 54], [8, 8, 11, 11, 13, 13, 16, 17, 19, 19, 22, 22, 24, 24, 26, 27, 29, 32