const shifts = [
[1, 2, 3, 4, 5, 6, 7, 8],
[1, 2, 3, 4, 5, 6, 7, 6],
[1, 2, 3, 4, 5, 6, 5, 6],
[1, 2, 3, 4, 5, 6, 5, 4],
[1, 2, 3, 4, 5, 4, 5, 6],
[1, 2, 3, 4, 5, 4, 5, 4],
[1, 2, 3, 4, 5, 4, 3, 4],
[1, 2, 3, 4, 5, 4, 3, 2],
[1, 2, 3, 4, 3, 4, 5, 6],
[1, 2, 3, 4, 3, 4, 5, 4],
[1, 2, 3, 4, 3, 4, 3, 4],
[1, 2, 3, 4, 3, 4, 3, 2],
[1, 2, 3, 4, 3, 2, 3, 4],
[1, 2, 3, 4, 3, 2, 3, 2],
[1, 2, 3, 4, 3, 2, 1, 2],
[1, 2, 3, 4, 3, 2, 1, 0],
[1, 2, 3, 2, 3, 4, 5, 6],
[1, 2, 3, 2, 3, 4, 5, 4],
[1, 2, 3, 2, 3, 4, 3, 4],
[1, 2, 3, 2, 3, 4, 3, 2],
[1, 2, 3, 2, 3, 2, 3, 4],
[1, 2, 3, 2, 3, 2, 3, 2],
[1, 2, 3, 2, 3, 2, 1, 2],
[1, 2, 3, 2, 3, 2, 1, 0],
[1, 2, 3, 2, 1, 2, 3, 4],
[1, 2, 3, 2, 1, 2, 3, 2],
[1, 2, 3, 2, 1, 2, 1, 2],
[1, 2, 3, 2, 1, 2, 1, 0],
[1, 2, 3, 2, 1, 0, 1, 2],
[1, 2, 3, 2, 1, 0, 1, 0],
[1, 2, 3, 2, 1, 0, -1, 0],
[1, 2, 3, 2, 1, 0, -1, -2],
[1, 2, 1, 2, 3, 4, 5, 6],
[1, 2, 1, 2, 3, 4, 5, 4],
[1, 2, 1, 2, 3, 4, 3, 4],
[1, 2, 1, 2, 3, 4, 3, 2],
[1, 2, 1, 2, 3, 2, 3, 4],
[1, 2, 1, 2, 3, 2, 3, 2],
[1, 2, 1, 2, 3, 2, 1, 2],
[1, 2, 1, 2, 3, 2, 1, 0],
[1, 2, 1, 2, 1, 2, 3, 4],
[1, 2, 1, 2, 1, 2, 3, 2],
[1, 2, 1, 2, 1, 2, 1, 2],
[1, 2, 1, 2, 1, 2, 1, 0],
[1, 2, 1, 2, 1, 0, 1, 2],
[1, 2, 1, 2, 1, 0, 1, 0],
[1, 2, 1, 2, 1, 0, -1, 0],
[1, 2, 1, 2, 1, 0, -1, -2],
[1, 2, 1, 0, 1, 2, 3, 4],
[1, 2, 1, 0, 1, 2, 3, 2],
[1, 2, 1, 0, 1, 2, 1, 2],
[1, 2, 1, 0, 1, 2, 1, 0],
[1, 2, 1, 0, 1, 0, 1, 2],
[1, 2, 1, 0, 1, 0, 1, 0],
[1, 2, 1, 0, 1, 0, -1, 0],
[1, 2, 1, 0, 1, 0, -1, -2],
[1, 2, 1, 0, -1, 0, 1, 2],
[1, 2, 1, 0, -1, 0, 1, 0],
[1, 2, 1, 0, -1, 0, -1, 0],
[1, 2, 1, 0, -1, 0, -1, -2],
[1, 2, 1, 0, -1, -2, -1, 0],
[1, 2, 1, 0, -1, -2, -1, -2],
[1, 2, 1, 0, -1, -2, -3, -2],
[1, 2, 1, 0, -1, -2, -3, -4],
[1, 0, 1, 2, 3, 4, 5, 6],
[1, 0, 1, 2, 3, 4, 5, 4],
[1, 0, 1, 2, 3, 4, 3, 4],
[1, 0, 1, 2, 3, 4, 3, 2],
[1, 0, 1, 2, 3, 2, 3, 4],
[1, 0, 1, 2, 3, 2, 3, 2],
[1, 0, 1, 2, 3, 2, 1, 2],
[1, 0, 1, 2, 3, 2, 1, 0],
[1, 0, 1, 2, 1, 2, 3, 4],
[1, 0, 1, 2, 1, 2, 3, 2],
[1, 0, 1, 2, 1, 2, 1, 2],
[1, 0, 1, 2, 1, 2, 1, 0],
[1, 0, 1, 2, 1, 0, 1, 2],
[1, 0, 1, 2, 1, 0, 1, 0],
[1, 0, 1, 2, 1, 0, -1, 0],
[1, 0, 1, 2, 1, 0, -1, -2],
[1, 0, 1, 0, 1, 2, 3, 4],
[1, 0, 1, 0, 1, 2, 3, 2],
[1, 0, 1, 0, 1, 2, 1, 2],
[1, 0, 1, 0, 1, 2, 1, 0],
[1, 0, 1, 0, 1, 0, 1, 2],
[1, 0, 1, 0, 1, 0, 1, 0],
[1, 0, 1, 0, 1, 0, -1, 0],
[1, 0, 1, 0, 1, 0, -1, -2],
[1, 0, 1, 0, -1, 0, 1, 2],
[1, 0, 1, 0, -1, 0, 1, 0],
[1, 0, 1, 0, -1, 0, -1, 0],
[1, 0, 1, 0, -1, 0, -1, -2],
[1, 0, 1, 0, -1, -2, -1, 0],
[1, 0, 1, 0, -1, -2, -1, -2],
[1, 0, 1, 0, -1, -2, -3, -2],
[1, 0, 1, 0, -1, -2, -3, -4],
[1, 0, -1, 0, 1, 2, 3, 4],
[1, 0, -1, 0, 1, 2, 3, 2],
[1, 0, -1, 0, 1, 2, 1, 2],
[1, 0, -1, 0, 1, 2, 1, 0],
[1, 0, -1, 0, 1, 0, 1, 2],
[1, 0, -1, 0, 1, 0, 1, 0],
[1, 0, -1, 0, 1, 0, -1, 0],
[1, 0, -1, 0, 1, 0, -1, -2],
[1, 0, -1, 0, -1, 0, 1, 2],
[1, 0, -1, 0, -1, 0, 1, 0],
[1, 0, -1, 0, -1, 0, -1, 0],
[1, 0, -1, 0, -1, 0, -1, -2],
[1, 0, -1, 0, -1, -2, -1, 0],
[1, 0, -1, 0, -1, -2, -1, -2],
[1, 0, -1, 0, -1, -2, -3, -2],
[1, 0, -1, 0, -1, -2, -3, -4],
[1, 0, -1, -2, -1, 0, 1, 2],
[1, 0, -1, -2, -1, 0, 1, 0],
[1, 0, -1, -2, -1, 0, -1, 0],
[1, 0, -1, -2, -1, 0, -1, -2],
[1, 0, -1, -2, -1, -2, -1, 0],
[1, 0, -1, -2, -1, -2, -1, -2],
[1, 0, -1, -2, -1, -2, -3, -2],
[1, 0, -1, -2, -1, -2, -3, -4],
[1, 0, -1, -2, -3, -2, -1, 0],
[1, 0, -1, -2, -3, -2, -1, -2],
[1, 0, -1, -2, -3, -2, -3, -2],
[1, 0, -1, -2, -3, -2, -3, -4],
[1, 0, -1, -2, -3, -4, -3, -2],
[1, 0, -1, -2, -3, -4, -3, -4],
[1, 0, -1, -2, -3, -4, -5, -4],
[1, 0, -1, -2, -3, -4, -5, -6],
[-1, 0, 1, 2, 3, 4, 5, 6],
[-1, 0, 1, 2, 3, 4, 5, 4],
[-1, 0, 1, 2, 3, 4, 3, 4],
[-1, 0, 1, 2, 3, 4, 3, 2],
[-1, 0, 1, 2, 3, 2, 3, 4],
[-1, 0, 1, 2, 3, 2, 3, 2],
[-1, 0, 1, 2, 3, 2, 1, 2],
[-1, 0, 1, 2, 3, 2, 1, 0],
[-1, 0, 1, 2, 1, 2, 3, 4],
[-1, 0, 1, 2, 1, 2, 3, 2],
[-1, 0, 1, 2, 1, 2, 1, 2],
[-1, 0, 1, 2, 1, 2, 1, 0],
[-1, 0, 1, 2, 1, 0, 1, 2],
[-1, 0, 1, 2, 1, 0, 1, 0],
[-1, 0, 1, 2, 1, 0, -1, 0],
[-1, 0, 1, 2, 1, 0, -1, -2],
[-1, 0, 1, 0, 1, 2, 3, 4],
[-1, 0, 1, 0, 1, 2, 3, 2],
[-1, 0, 1, 0, 1, 2, 1, 2],
[-1, 0, 1, 0, 1, 2, 1, 0],
[-1, 0, 1, 0, 1, 0, 1, 2],
[-1, 0, 1, 0, 1, 0, 1, 0],
[-1, 0, 1, 0, 1, 0, -1, 0],
[-1, 0, 1, 0, 1, 0, -1, -2],
[-1, 0, 1, 0, -1, 0, 1, 2],
[-1, 0, 1, 0, -1, 0, 1, 0],
[-1, 0, 1, 0, -1, 0, -1, 0],
[-1, 0, 1, 0, -1, 0, -1, -2],
[-1, 0, 1, 0, -1, -2, -1, 0],
[-1, 0, 1, 0, -1, -2, -1, -2],
[-1, 0, 1, 0, -1, -2, -3, -2],
[-1, 0, 1, 0, -1, -2, -3, -4],
[-1, 0, -1, 0, 1, 2, 3, 4],
[-1, 0, -1, 0, 1, 2, 3, 2],
[-1, 0, -1, 0, 1, 2, 1, 2],
[-1, 0, -1, 0, 1, 2, 1, 0],
[-1, 0, -1, 0, 1, 0, 1, 2],
[-1, 0, -1, 0, 1, 0, 1, 0],
[-1, 0, -1, 0, 1, 0, -1, 0],
[-1, 0, -1, 0, 1, 0, -1, -2],
[-1, 0, -1, 0, -1, 0, 1, 2],
[-1, 0, -1, 0, -1, 0, 1, 0],
[-1, 0, -1, 0, -1, 0, -1, 0],
[-1, 0, -1, 0, -1, 0, -1, -2],
[-1, 0, -1, 0, -1, -2, -1, 0],
[-1, 0, -1, 0, -1, -2, -1, -2],
[-1, 0, -1, 0, -1, -2, -3, -2],
[-1, 0, -1, 0, -1, -2, -3, -4],
[-1, 0, -1, -2, -1, 0, 1, 2],
[-1, 0, -1, -2, -1, 0, 1, 0],
[-1, 0, -1, -2, -1, 0, -1, 0],
[-1, 0, -1, -2, -1, 0, -1, -2],
[-1, 0, -1, -2, -1, -2, -1, 0],
[-1, 0, -1, -2, -1, -2, -1, -2],
[-1, 0, -1, -2, -1, -2, -3, -2],
[-1, 0, -1, -2, -1, -2, -3, -4],
[-1, 0, -1, -2, -3, -2, -1, 0],
[-1, 0, -1, -2, -3, -2, -1, -2],
[-1, 0, -1, -2, -3, -2, -3, -2],
[-1, 0, -1, -2, -3, -2, -3, -4],
[-1, 0, -1, -2, -3, -4, -3, -2],
[-1, 0, -1, -2, -3, -4, -3, -4],
[-1, 0, -1, -2, -3, -4, -5, -4],
[-1, 0, -1, -2, -3, -4, -5, -6],
[-1, -2, -1, 0, 1, 2, 3, 4],
[-1, -2, -1, 0, 1, 2, 3, 2],
[-1, -2, -1, 0, 1, 2, 1, 2],
[-1, -2, -1, 0, 1, 2, 1, 0],
[-1, -2, -1, 0, 1, 0, 1, 2],
[-1, -2, -1, 0, 1, 0, 1, 0],
[-1, -2, -1, 0, 1, 0, -1, 0],
[-1, -2, -1, 0, 1, 0, -1, -2],
[-1, -2, -1, 0, -1, 0, 1, 2],
[-1, -2, -1, 0, -1, 0, 1, 0],
[-1, -2, -1, 0, -1, 0, -1, 0],
[-1, -2, -1, 0, -1, 0, -1, -2],
[-1, -2, -1, 0, -1, -2, -1, 0],
[-1, -2, -1, 0, -1, -2, -1, -2],
[-1, -2, -1, 0, -1, -2, -3, -2],
[-1, -2, -1, 0, -1, -2, -3, -4],
[-1, -2, -1, -2, -1, 0, 1, 2],
[-1, -2, -1, -2, -1, 0, 1, 0],
[-1, -2, -1, -2, -1, 0, -1, 0],
[-1, -2, -1, -2, -1, 0, -1, -2],
[-1, -2, -1, -2, -1, -2, -1, 0],
[-1, -2, -1, -2, -1, -2, -1, -2],
[-1, -2, -1, -2, -1, -2, -3, -2],
[-1, -2, -1, -2, -1, -2, -3, -4],
[-1, -2, -1, -2, -3, -2, -1, 0],
[-1, -2, -1, -2, -3, -2, -1, -2],
[-1, -2, -1, -2, -3, -2, -3, -2],
[-1, -2, -1, -2, -3, -2, -3, -4],
[-1, -2, -1, -2, -3, -4, -3, -2],
[-1, -2, -1, -2, -3, -4, -3, -4],
[-1, -2, -1, -2, -3, -4, -5, -4],
[-1, -2, -1, -2, -3, -4, -5, -6],
[-1, -2, -3, -2, -1, 0, 1, 2],
[-1, -2, -3, -2, -1, 0, 1, 0],
[-1, -2, -3, -2, -1, 0, -1, 0],
[-1, -2, -3, -2, -1, 0, -1, -2],
[-1, -2, -3, -2, -1, -2, -1, 0],
[-1, -2, -3, -2, -1, -2, -1, -2],
[-1, -2, -3, -2, -1, -2, -3, -2],
[-1, -2, -3, -2, -1, -2, -3, -4],
[-1, -2, -3, -2, -3, -2, -1, 0],
[-1, -2, -3, -2, -3, -2, -1, -2],
[-1, -2, -3, -2, -3, -2, -3, -2],
[-1, -2, -3, -2, -3, -2, -3, -4],
[-1, -2, -3, -2, -3, -4, -3, -2],
[-1, -2, -3, -2, -3, -4, -3, -4],
[-1, -2, -3, -2, -3, -4, -5, -4],
[-1, -2, -3, -2, -3, -4, -5, -6],
[-1, -2, -3, -4, -3, -2, -1, 0],
[-1, -2, -3, -4, -3, -2, -1, -2],
[-1, -2, -3, -4, -3, -2, -3, -2],
[-1, -2, -3, -4, -3, -2, -3, -4],
[-1, -2, -3, -4, -3, -4, -3, -2],
[-1, -2, -3, -4, -3, -4, -3, -4],
[-1, -2, -3, -4, -3, -4, -5, -4],
[-1, -2, -3, -4, -3, -4, -5, -6],
[-1, -2, -3, -4, -5, -4, -3, -2],
[-1, -2, -3, -4, -5, -4, -3, -4],
[-1, -2, -3, -4, -5, -4, -5, -4],
[-1, -2, -3, -4, -5, -4, -5, -6],
[-1, -2, -3, -4, -5, -6, -5, -4],
[-1, -2, -3, -4, -5, -6, -5, -6],
[-1, -2, -3, -4, -5, -6, -7, -6],
[-1, -2, -3, -4, -5, -6, -7, -8]
];
const snlook = [
0.0,
0.5236816406249994,
0.7855224609374982,
0.9540880210697628,
1.0760159511119103,
1.1703795885492223,
1.2467156021243369,
1.3104304755968557,
1.3648656002348538,
1.4122187219792046,
1.4540046650257359,
1.4913070772186618,
1.524925686349654,
1.555466892408545,
1.5834016083086482,
1.6091032627214368,
1.6328733792111176,
1.6549591827052488,
1.6755659893279085,
1.6948661230625561,
1.713005479755239,
1.7301084681239605,
1.7462818088933272,
1.761617513495797,
1.7761952602791684,
1.7900843184684145,
1.8033451254170796,
1.816030592805064,
1.8281871971995631,
1.839855896464578,
1.8510729037394256,
1.8618703437232706,
1.8722768109007824,
1.8823178455348473,
1.8920163403470796,
1.901392888546651,
1.9104660820776924,
1.919252767515187,
1.9277682658651745,
1.936026561557611,
1.9440404651161078,
1.9518217533157969,
1.9593812900743632,
1.9667291308429764,
1.9738746128584548,
1.9808264332736207,
1.9875927168897807,
1.9941810749654583,
2.000598656362484,
2.006852192108625,
2.0129480343005706,
2.0188921901382435,
2.024690351767919,
2.030347922514503,
2.0358700400002636,
2.0412615965762826,
2.046527257432066,
2.0516714766967445,
2.056698511800745,
2.061612436328714,
2.066417151561829,
2.07111639687969,
2.0757137591680856,
2.0802126813583945,
2.0846164702068744,
2.088928303407021,
2.0931512361153204,
2.097288206959665,
2.101342043590216,
2.1053154678244357,
2.109211100430972,
2.113031465591184,
2.116778995071893,
2.1204560321386077,
2.124064835234638,
2.127607581448302,
2.1310863697875804,
2.134503224279241,
2.1378600969073016,
2.1411588704039803,
2.14440136090469,
2.14758932047735,
2.150724439535086,
2.153808349140441,
2.156842623208322,
2.1598287806141805,
2.162768287213258,
2.1656625577761672,
2.1685129578455893,
2.1713208055184197,
2.1740873731573362,
2.176813889035413,
2.1795015389171106,
2.1821514675787324,
2.1847647802711805,
2.1873425441276666,
2.1898857895188306,
2.192395511357564,
2.194872670355703,
2.1973181942345987,
2.1997329788914786,
2.2021178895233864,
2.204473761710403,
2.206801402459753,
2.2091015912123253,
2.2113750808130592,
2.213622598446569,
2.215844846539335,
2.2180425036297056,
2.2202162252069244,
2.2223666445203154,
2.2244943733597373,
2.226600002808357,
2.228684103968744,
2.230747228663279,
2.2327899101097715,
2.2348126635732157,
2.2368159869945177,
2.238800361597038,
2.240766252471733,
2.2427141091416622,
2.2446443661066025,
2.2465574433684714,
2.248453746938246,
2.25033366932503,
2.2521975900079103,
2.254045875891204,
2.2558788817436857,
2.2576969506223725,
2.259500414281393,
2.2612895935664863,
2.263064798795627,
2.2648263301262683,
2.2665744779096806,
2.2683095230328285,
2.2700317372482393,
2.2717413834922784,
2.27343871619224,
2.2751239815626483,
2.2767974178911543,
2.278459255814381,
2.2801097185840855,
2.2817490223239716,
2.2833773762774805,
2.2849949830468828,
2.2866020388239723,
2.2881987336126577,
2.2897852514437402,
2.2913617705821534,
2.2929284637269234,
2.2944854982041036,
2.2960330361529557,
2.2975712347055697,
2.2991002461602013,
2.3006202181485143,
2.302131293796954,
2.303633611882463,
2.305127306982731,
2.3066125096211607,
2.308089346406773,
2.309557940169178,
2.311018410088826,
2.3124708718226827,
2.3139154376255022,
2.3153522164668403,
2.31678131414397,
2.3182028333908327,
2.3196168739831697,
2.3210235328399684,
2.3224229041213604,
2.3238150793230665,
2.3252001473675534,
2.3265781946919866,
2.3279493053330946,
2.3293135610090743,
2.3306710411986096,
2.3320218232171364,
2.3333659822904274,
2.334703591625601,
2.336034722479646,
2.3373594442255445,
2.338677824416081,
2.3399899288454145,
2.3412958216085014,
2.342595565158433,
2.3438892203617683,
2.345176846551933,
2.3464585015807473,
2.3477342418681544,
2.349004122450206,
2.3502681970253776,
2.3515265179992517,
2.352779136527655,
2.3540261025582736,
2.355267464870827,
2.3565032711158254,
2.3577335678519886,
2.358958400582344,
2.3601778137890714,
2.3613918509671357
];