summaryrefslogtreecommitdiff
path: root/2018
diff options
context:
space:
mode:
Diffstat (limited to '2018')
-rw-r--r--2018/23_draw.html1050
-rw-r--r--2018/Cargo.lock150
-rw-r--r--2018/Cargo.toml1
-rw-r--r--2018/input/23.txt1000
-rw-r--r--2018/src/day23.rs492
-rw-r--r--2018/src/main.rs4
6 files changed, 2696 insertions, 1 deletions
diff --git a/2018/23_draw.html b/2018/23_draw.html
new file mode 100644
index 0000000..a4335dc
--- /dev/null
+++ b/2018/23_draw.html
@@ -0,0 +1,1050 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<script>
+const bots = [
+ [[136613456,-512820,-739737],87427481],
+ [[-53697593,55277802,49040699],86116187],
+ [[3220880,75515511,53337027],50746552],
+ [[88414078,70781701,66277674],98943677],
+ [[-17988814,83735639,57607927],84446784],
+ [[7905695,86080636,69893638],73183217],
+ [[-106237978,86340882,82036549],85944614],
+ [[-39951484,51796765,70217077],87079969],
+ [[-41339171,48697955,55193194],73297553],
+ [[-42571382,53083825,53317409],74087026],
+ [[-7368751,52027496,-9560976],95138965],
+ [[-8239116,41812660,62596194],54485758],
+ [[-1137951,49037154,75388024],52951810],
+ [[7650881,79141366,92778865],89383763],
+ [[-17148778,67167319,69069673],78500152],
+ [[-34682895,65463074,55433727],80694128],
+ [[92864435,72243385,52889446],91467469],
+ [[23342790,57278342,66486606],96631618],
+ [[16097469,22492567,11010000],76930041],
+ [[-27239715,74048890,47983162],79486831],
+ [[48014242,79716366,40015768],62251861],
+ [[511676,64398402,63621216],52622716],
+ [[-29486239,66238746,61923874],82763569],
+ [[92097957,57353083,58524935],81446016],
+ [[-2615864,64900611,68273820],60905066],
+ [[17304995,87864295,58127670],53801410],
+ [[36460810,70793722,116450849],97175553],
+ [[91303570,59210855,59663955],83648530],
+ [[17400055,51714900,106525287],65954578],
+ [[-9201950,68270611,75924360],78511311],
+ [[10184185,63093052,93307967],71331241],
+ [[24739666,43259195,5573675],52957566],
+ [[-18267592,52724555,76111483],72218039],
+ [[-35598801,54737022,27433735],89083529],
+ [[35813819,73515444,94558754],77358361],
+ [[6642272,22056475,91067625],87832335],
+ [[17645774,89603262,67321149],64393217],
+ [[-10216980,27634811,38770566],70341591],
+ [[12799318,81249393,71992414],65556938],
+ [[-10218046,74437078,62070349],71839923],
+ [[-1309123,20674953,59788059],65885225],
+ [[-27217791,66526827,53078642],71937695],
+ [[-34737368,44315647,75994929],91879642],
+ [[30808903,39024070,99557972],65161437],
+ [[18233335,72395211,90831029],70107346],
+ [[37186749,-678419,57742780],69426693],
+ [[-9615179,80576697,64086230],79392664],
+ [[33935621,102484176,52277559],62167524],
+ [[21730454,116532754,59523052],79439730],
+ [[-44299553,51849314,52674431],73937932],
+ [[98820726,52369354,56304096],80964285],
+ [[-14670863,53307196,63286058],56378495],
+ [[21141579,52692533,60648771],77839132],
+ [[106030705,57863782,38674931],99756568],
+ [[3660762,56362269,113500773],91316727],
+ [[-407093,36114871,62900059],52655349],
+ [[17300250,90851621,82759279],81425029],
+ [[3552610,79637006,46529196],55736575],
+ [[19340107,84837235,62352207],52963786],
+ [[8521013,89819722,24371259],83109002],
+ [[14563407,28673587,78383971],60610219],
+ [[105274857,48490223,59505360],90108685],
+ [[6522669,68013196,92958454],79563377],
+ [[61441811,62255240,63607848],60775173],
+ [[-30662880,72201886,57781685],85760834],
+ [[-5704121,74191612,91679671],96690023],
+ [[22440794,115302243,29587291],89455675],
+ [[16846226,85850758,26219592],68966703],
+ [[-11181912,74609397,43701422],68271328],
+ [[112019147,48094141,55257089],93000920],
+ [[-58029664,63702221,52791218],99637517],
+ [[56546279,54927537,104557578],89501416],
+ [[13690470,51265122,54792423],53548975],
+ [[-20863525,78114651,44421611],80738144],
+ [[20071309,136046599,55636529],96726219],
+ [[-9825817,54458897,71973514],61373140],
+ [[-13643977,45813902,94182312],87475383],
+ [[4214048,57552549,55230473],97407755],
+ [[-44465852,38322072,54656647],86263523],
+ [[-8532222,52266115,71351598],57264679],
+ [[15789835,78397136,91588786],79310551],
+ [[87644233,71738261,52393733],85246435],
+ [[24700943,90988926,103171122],94573621],
+ [[-16261249,63121025,87229161],91725871],
+ [[-52294570,67135761,48053370],97558456],
+ [[18918374,81332072,97803514],85331838],
+ [[11760283,82388891,26779326],70030661],
+ [[19928626,82449711,96833465],84469124],
+ [[-18348975,19999142,52648068],76460901],
+ [[-12075601,71251550,85024678],93466308],
+ [[80062151,62500897,78775775],94808908],
+ [[12337661,103647294,81418622],97842757],
+ [[-11115387,60112851,66531714],62874491],
+ [[16906477,63764749,85558216],57530991],
+ [[-4672303,54855285,1301903],84407059],
+ [[-37982464,58456898,68225299],89779132],
+ [[-17681001,71939994,60038525],74774035],
+ [[-11837172,58467855,79274314],74693725],
+ [[29729949,7390010,64977794],61136429],
+ [[-12679395,87224461,58161931],83180457],
+ [[-11559100,72144044,77817800],86635361],
+ [[-2084469,25684278,55681143],57544326],
+ [[20590016,129914590,49426051],86080032],
+ [[-7571416,69794846,69085384],71566033],
+ [[-34145880,48469543,51820255],62959690],
+ [[-8692081,31985652,52581756],54751347],
+ [[-24455978,69065733,52902609],71539034],
+ [[-2667941,59922398,71227376],58932198],
+ [[-38020475,72881338,61644325],97660532],
+ [[-21527600,53755812,51653194],52050984],
+ [[-8830611,33006975,78898650],80185902],
+ [[19025250,113913931,63618165],83621311],
+ [[8387089,77230233,57248610],51206312],
+ [[9535513,118434510,37136580],97943806],
+ [[78992433,58822717,31347868],81004338],
+ [[-16906193,77442482,52709412],72172536],
+ [[22311017,63448797,51701106],94242941],
+ [[43179406,2818296,30763106],84483777],
+ [[-363630,57933199,98730777],82142085],
+ [[-3421442,71654138,81584493],81774527],
+ [[105294101,47765605,48049117],84365008],
+ [[-14236037,92920841,48040781],85297524],
+ [[5696945,87936599,71179435],78533668],
+ [[70714071,41126802,64803849],68209814],
+ [[-18725349,54598292,52699640],51138183],
+ [[59897823,71653281,71202033],76223304],
+ [[48123775,102241419,73882598],97717918],
+ [[-27257912,59427348,52360090],64159728],
+ [[7347141,78617861,96938400],93323519],
+ [[98970812,42594863,66538549],96733304],
+ [[60136017,76634280,74781184],85021510],
+ [[-38514792,65847495,52025409],81502116],
+ [[-5508508,4887248,43864104],83287138],
+ [[21727987,54693625,95057154],53137390],
+ [[-15479704,40894383,53779209],53827666],
+ [[-50001012,42594012,56389944],89260340],
+ [[-49970116,64164073,53317682],92566258],
+ [[-56357341,55323528,59446041],96241383],
+ [[625968,53683329,98614903],76786891],
+ [[21482773,117944535,70699492],92275780],
+ [[16203712,73330825,69917915],52159463],
+ [[13906226,70337776,30608175],52004893],
+ [[-21655059,68530571,79036384],94336614],
+ [[-6379112,70074314,96974691],98542673],
+ [[37257281,88232345,55974220],54934223],
+ [[-153042,61570334,64745296],51583144],
+ [[75744358,74770786,74235757],98220949],
+ [[2593526,12576425,76209878],86502916],
+ [[-3213601,79186838,80823018],88337919],
+ [[-9431288,52885294,66308318],53739421],
+ [[39457172,77981561,77781961],68690851],
+ [[3658726,45027232,78570696],55347772],
+ [[19540854,59560050,33221913],66437344],
+ [[-23991955,53819675,65495637],68421679],
+ [[-15925338,62003166,71681923],74724861],
+ [[179979,95055064,72345095],92334745],
+ [[32084825,113714994,57462206],76732047],
+ [[-79456713,-30995940,73253681],71108738],
+ [[-5085269,56556449,63274512],50030649],
+ [[-1823099,53617693,74353439],54908645],
+ [[-21582671,87360226,64824893],98882268],
+ [[-54047120,52572271,45012396],87788501],
+ [[-621964,40254302,67623764],53454465],
+ [[10705962,52178757,-10564055],78218262],
+ [[-27052117,72974854,68996532],94137885],
+ [[-5333720,61326896,75858050],67633053],
+ [[-442860,-7927774,60719749],94553540],
+ [[20190232,59561903,101548027],66034633],
+ [[-7907411,40629427,68521654],61262635],
+ [[-9455107,66611005,94728621],95909233],
+ [[22122168,62372400,119686289],85051023],
+ [[-16418814,91187751,60788730],93509810],
+ [[-12210203,71963130,19080036],91275101],
+ [[-16069946,54585553,55218935],50988886],
+ [[73589783,36919962,51760461],62248915],
+ [[10988236,47525791,7585386],60430836],
+ [[10516253,63819008,75162627],53580091],
+ [[54978561,77777004,81843099],88068740],
+ [[843965,59034530,26718598],57653476],
+ [[8390445,51933284,106893232],75550828],
+ [[55468357,41898786,6292104],82163240],
+ [[-15657432,59791539,54996025],55559386],
+ [[21925705,56064114,98432334],57685472],
+ [[2045205,54926092,91406478],69401804],
+ [[18964578,82009106,68170256],56329266],
+ [[-5020873,58135455,83138917],71409692],
+ [[11206282,18758794,90297569],85795593],
+ [[60429823,65420118,62455940],61775922],
+ [[-50071054,65142864,56916609],97245137],
+ [[37522973,119514287,68154460],98661779],
+ [[-24546116,79951244,52341069],81952965],
+ [[-42895143,51426102,49103721],71398899],
+ [[19847811,70965352,88276453],64508398],
+ [[31969885,74676586,119451667],99568484],
+ [[43133639,79493715,70091589],66189023],
+ [[3536597,70013464,59700142],51291540],
+ [[-43456481,62212963,55178319],85962366],
+ [[66908155,61377553,55147564],56903339],
+ [[-6338837,64186892,67392177],63032325],
+ [[24582754,12428156,39119902],50399652],
+ [[19622738,107750729,55849974],69092525],
+ [[-50422280,58990076,62168244],96695006],
+ [[58134510,61311825,96239969],89156504],
+ [[-30966037,57564421,54587595],68232489],
+ [[12569803,83417760,58547639],54510046],
+ [[16028817,91085624,85099394],85270691],
+ [[26948233,79274928,118354187],98047375],
+ [[-52310680,47522666,64367435],94618457],
+ [[-6416427,79465208,59490450],70486528],
+ [[20092186,68488461,91337971],64848774],
+ [[-15142198,42300705,54605738],52910257],
+ [[-27837357,69166421,45527549],77657747],
+ [[-40369484,73666973,51836487],90987378],
+ [[85019354,56875805,38052709],78379725],
+ [[-4826865,73385493,74154124],77481047],
+ [[-44327050,62980445,57928726],90350601],
+ [[2268051,71674062,18320627],77266756],
+ [[7560942,23918555,95582539],89566155],
+ [[-40522661,58387981,55190926],79216025],
+ [[17493703,92481489,21602524],79566649],
+ [[-549853,30548349,59679581],55144150],
+ [[-11540623,61439486,75747954],73842446],
+ [[-27425143,66943956,51613022],71096670],
+ [[7492358,52336684,59482404],62591245],
+ [[8199261,52115157,61979910],52924169],
+ [[-5227038,75473558,53223397],59038494],
+ [[69304179,60217316,90678830],93670829],
+ [[-27825322,58595174,52943775],64478650],
+ [[-3930520,44822324,83076659],67647944],
+ [[-15669371,56863526,61131713],58778995],
+ [[28136546,52898534,69587237],88623606],
+ [[-65393666,51826191,55613912],97948204],
+ [[-15477551,51180735,42248775],50591359],
+ [[40449375,72513414,96662908],83095857],
+ [[-33924420,53998875,71917916],84955612],
+ [[10793863,52565615,51767299],98060212],
+ [[9995273,60527127,91707845],67354108],
+ [[-60284471,51756689,57993530],95149079],
+ [[18376558,10452573,62217674],58851640],
+ [[6437033,60403963,76732508],55814249],
+ [[-28335460,51550727,67141191],72141764],
+ [[-20795148,56783730,53199338],55892601],
+ [[12754662,84841524,53799805],51001164],
+ [[9355656,37410878,81929957],60626411],
+ [[70162685,52698231,62479018],58810202],
+ [[3593617,1103985,61329203],82094839],
+ [[-11110833,76403444,81998629],94627295],
+ [[-2911501,68332204,55930359],52288511],
+ [[-5611352,24754525,54946306],61266149],
+ [[8852382,71155727,68890982],56308709],
+ [[61447488,68409236,69588689],72915436],
+ [[7800512,89666253,65758055],72738393],
+ [[10592995,54945607,58732681],89051922],
+ [[42798128,-12649279,56562836],85829241],
+ [[11562554,75630041,86875504],76057543],
+ [[77961659,71510466,54153352],77095503],
+ [[31055259,54921299,-9869494],70383159],
+ [[-27501669,62023219,47541351],68164946],
+ [[42374475,68761335,72601978],57207824],
+ [[-33321254,51983321,59677321],70096300],
+ [[24068578,39736961,60654009],88299248],
+ [[-19116561,56737201,34200348],67834972],
+ [[22969648,52249055,100644454],55038258],
+ [[-42911185,51860830,61376355],81262991],
+ [[-42633368,44611772,66190367],89674954],
+ [[-3829240,75255688,21232601],84033808],
+ [[5934856,57988042,76585113],53752725],
+ [[-32964350,68530123,57108410],83717261],
+ [[43876005,92164898,87846839],97357843],
+ [[-2417792,58943300,65531206],52006718],
+ [[54964722,89070986,53056518],70562253],
+ [[-290623,31446470,65443341],59750487],
+ [[7639935,101059316,58888687],77422498],
+ [[-28253746,62612782,71235848],87217278],
+ [[-7422094,56693858,109005575],98235920],
+ [[61189820,88854622,44952918],79628549],
+ [[-16010449,60503569,67814188],69442584],
+ [[31995549,99041054,92811203],97317853],
+ [[14407890,68606212,88656048],67968926],
+ [[3797019,93897803,59385476],74600640],
+ [[89982687,70799922,58816742],93069386],
+ [[-47391381,58920806,47022977],85470601],
+ [[-18682541,52396968,60465510],56659507],
+ [[-33603071,56312429,61658802],76688781],
+ [[-1966320,58483882,29754668],56877265],
+ [[-6876331,35253483,65966223],63052064],
+ [[-39772638,75789985,47508955],94235051],
+ [[-24980812,-1938691,-46278539],50540858],
+ [[-14975005,78724644,39316097],80565111],
+ [[-2885944,65589513,76516656],70106553],
+ [[3541691,72547980,70693895],64814600],
+ [[-44510906,63214333,63320805],96160422],
+ [[185135951,79371810,69897884],92278734],
+ [[-15712941,69417771,56680209],66925482],
+ [[3371300,64063926,70577995],56385028],
+ [[20093270,89812250,83966344],78799702],
+ [[-44882626,56482809,44012736],83534067],
+ [[7807097,59338218,93406346],70052015],
+ [[83206185,54254511,65285920],76216650],
+ [[-9128452,31764042,52408460],55235957],
+ [[9273140,58063106,84328894],58233459],
+ [[12730173,65723179,86216535],64323934],
+ [[-5370160,21333035,52408548],61908782],
+ [[-50412106,36708544,57003999],96170823],
+ [[-12428116,56614507,59912876],54070441],
+ [[23530187,55890018,101558624],59032841],
+ [[24076853,75872593,84021081],60931262],
+ [[66742911,53159306,102755650],96128101],
+ [[52985633,69568131,100732548],96756344],
+ [[21276856,95454549,27263024],73096105],
+ [[18634979,90055348,78648309],75183223],
+ [[59296178,97443382,58785611],88995359],
+ [[-9151924,60937196,63129967],58333507],
+ [[-131439802,11932397,63801725],91099003],
+ [[-15182359,51945676,96531706],88774362],
+ [[37456150,58413739,90785927],60125884],
+ [[55535275,58675694,68529536],56210588],
+ [[-23901453,82911425,51765843],83693104],
+ [[20400242,84135488,38426476],51490217],
+ [[86127079,53137259,73699744],86434146],
+ [[-37504970,65330192,58356041],86305590],
+ [[-36229876,54144877,76073195],91562525],
+ [[7122807,47260000,60037998],92003347],
+ [[14241003,60321844,84135837],55331088],
+ [[-58054472,54730510,42664262],96302105],
+ [[11128985,-3179856,61388093],78901954],
+ [[-86171724,81676146,128118766],65629454],
+ [[-32477909,54111811,66095298],77799414],
+ [[16473884,29685000,94881174],74185298],
+ [[-39673388,54367240,60656362],79811579],
+ [[-36820899,56003364,51780853],69719509],
+ [[33393407,80286458,76512600],63663115],
+ [[18145724,41961673,52085548],82246846],
+ [[773269,56344730,109740475],90426345],
+ [[23227623,20924988,89657454],70967862],
+ [[29769636,51258040,101968164],56466105],
+ [[-3255302,91302711,53052997],72725506],
+ [[63288029,31756890,15053302],91363738],
+ [[-696254,82267064,54884033],62961850],
+ [[24224162,74018463,80725407],55634090],
+ [[-31583375,35116342,57915541],79845595],
+ [[-20265647,61458300,53421504],60260040],
+ [[-3625510,70617596,85973701],85331222],
+ [[38592662,72038274,107230244],91331550],
+ [[20947230,95753333,5848876],95138602],
+ [[65256974,42508621,53997591],50564655],
+ [[56144525,-47809394,138757109],88873477],
+ [[12536114,44878759,53725314],86437546],
+ [[-20301103,44075250,52762962],54451813],
+ [[-461902,80465125,84487814],90529307],
+ [[7130680,32413231,68883794],54802893],
+ [[-50296082,60195477,45850842],90822087],
+ [[-14564832,72623628,17948114],95421720],
+ [[-22686155,63096629,54372268],65269532],
+ [[69844001,61172133,56055801],60541966],
+ [[-52847704,61819166,58790940],98572688],
+ [[14547281,53614270,69916715],64925594],
+ [[11858628,69801510,83476504],66533825],
+ [[-19237228,57038668,55663966],57054287],
+ [[-2272553,98539746,62554872],88481774],
+ [[-8556006,44686979,74145414],63477536],
+ [[2504323,61605769,51711818],54478689],
+ [[47588454,79992799,94986516],96037851],
+ [[103658947,51685093,57082700],85896762],
+ [[-30259191,60236324,60596487],76206463],
+ [[-16899083,75972745,75204218],93190621],
+ [[-16138352,72149890,57424797],70827421],
+ [[-32022269,39108198,51836967],70214052],
+ [[-253386,60377315,87086253],72831391],
+ [[70319029,58272431,24333949],78795019],
+ [[98140448,55305455,54099422],81015347],
+ [[-9894221,46215061,90692267],79835086],
+ [[8135694,75227546,75981649],68187909],
+ [[3050471,53586527,55188089],52075619],
+ [[1872493,96006217,77781926],97030112],
+ [[33059309,107988331,79210607],93728745],
+ [[16673776,69427534,108363123],86231293],
+ [[-55714690,52582577,37933926],96544709],
+ [[593835,83505567,68365123],76391300],
+ [[43486018,76414497,67060559],60431122],
+ [[-103710,79781165,51942827],56942322],
+ [[10133283,63186363,55221028],90994744],
+ [[23438290,54031653,67704842],75155252],
+ [[-67769695,52775484,52431198],98090761],
+ [[-18104986,52809731,54267642],50296769],
+ [[109991188,53156356,60594209],97211931],
+ [[-13768977,54140486,59831889],52855852],
+ [[-12489665,47714331,86555741],76794067],
+ [[-26482316,33973790,58911081],76882915],
+ [[-160197435,53199007,15047334],72701562],
+ [[23358129,69976926,85439610],57172786],
+ [[24201045,82557215,112270801],95741523],
+ [[72394082,20781518,37930394],88568308],
+ [[45145254,31095571,82460069],70328402],
+ [[-24815015,78740100,66702713],95372303],
+ [[-11180118,63194518,51850772],51339974],
+ [[-30260369,77069699,58001879],90446543],
+ [[12841613,54905801,60405944],69102701],
+ [[69379484,75759864,80677420],99286807],
+ [[-19898305,56022498,52114906],53150117],
+ [[23972174,63400531,63593334],88610729],
+ [[-7853869,55653210,30754191],58934358],
+ [[40004815,92174613,37712106],69004511],
+ [[-18970401,64246847,57001969],65333603],
+ [[-55945729,46641309,41200961],94633445],
+ [[10448314,60832634,-13979245],90545188],
+ [[104420953,54797004,51761342],84449325],
+ [[-7833268,56419777,64966118],54333552],
+ [[-41600051,53218447,75060610],94993621],
+ [[-23285697,51988784,62294935],62683806],
+ [[-6906170,52717101,66490995],51228649],
+ [[-36994277,58578684,69447528],90134897],
+ [[13894089,90601100,71559173],73380713],
+ [[5549488,90598003,63587583],73750520],
+ [[27986859,65318406,569711],67272566],
+ [[11420671,52635330,54320974],70384136],
+ [[58986016,64249155,26039401],71732796],
+ [[5530635,65978466,18218016],68411191],
+ [[-5385393,46216210,79409449],64041818],
+ [[-21799629,90568144,46789063],91760239],
+ [[-36265254,58098351,59809891],79287875],
+ [[-85146141,88950855,-3714880],50044292],
+ [[38619326,-4038243,77668519],94144770],
+ [[2694518,54614333,-4908892],83010409],
+ [[5313262,51345161,59838196],72136128],
+ [[14843630,-1349878,43928227],69108117],
+ [[22464636,120847792,40757992],83806553],
+ [[-9865777,51214858,90863194],77058488],
+ [[19167267,52510615,54852693],90699829],
+ [[14593457,70653650,97885859],79060557],
+ [[-8818822,61716404,18373136],78343826],
+ [[1060,70746123,74820827],70680268],
+ [[2440131,63910700,77731744],64316854],
+ [[9446148,94030616,72483361],82182217],
+ [[99080786,67236493,59091021],98878926],
+ [[-1302538,90260423,63215145],79892689],
+ [[8394619,77120518,104185074],98025497],
+ [[8809237,89970368,88703357],94978937],
+ [[61696969,53031317,25103817],64161515],
+ [[-17945953,52730115,54562544],50352996],
+ [[5573049,75894102,57995185],53430728],
+ [[1734159,18182439,88390315],93936719],
+ [[16427148,60790813,57255534],77938471],
+ [[-5794985,58712237,72538823],62160526],
+ [[114104963,48165299,48341508],92483804],
+ [[66162561,63632542,48965213],55367138],
+ [[-10848319,68498736,72425408],76886851],
+ [[35960404,57952302,83825949],51208802],
+ [[-7537899,63784540,26119781],71384092],
+ [[7597577,78226192,54364713],50108075],
+ [[-4944468,85203935,56866419],72129314],
+ [[-31664056,74767063,66581879],98127721],
+ [[-30554637,64050408,69381798],89101226],
+ [[15180605,89452073,84996875],84382933],
+ [[24727280,106040899,27094989],80399998],
+ [[-32937600,57802552,41091533],75830264],
+ [[-24285878,55135192,45900921],59701557],
+ [[99942558,60451396,53076615],86940865],
+ [[-8142431,63656427,70896708],67810159],
+ [[19572931,72289003,88954380],66784918],
+ [[17178080,32326459,98036814],73995977],
+ [[-40327597,60321955,30752519],96078407],
+ [[-26708621,51303087,68660841],71786962],
+ [[5298440,71150886,98998933],89965866],
+ [[-26727384,52712004,60606804],65160630],
+ [[-42515019,36860711,54621755],85739222],
+ [[-19692936,52880476,53505130],51192967],
+ [[-2862751,72059619,56687442],56724369],
+ [[23309701,73678498,90297260],65780546],
+ [[103591531,51292218,54785000],83139488],
+ [[13334478,40067215,41788503],53285143],
+ [[-19529026,52222981,57621425],54488069],
+ [[-1797950,83874608,63370131],74157238],
+ [[-25984963,45705100,63968004],69711376],
+ [[-24664085,26439550,59809899],83497673],
+ [[19736100,80301464,65388701],51068468],
+ [[-25320635,61777368,77622402],89834801],
+ [[-17286284,77658389,79260938],99320666],
+ [[70330963,53068965,53858287],50728428],
+ [[-3076230,90554067,55114683],73859363],
+ [[-20974395,51855715,72542126],70486673],
+ [[1092644,-4119326,69709754],98199427],
+ [[15938133,59416689,58855448],92943839],
+ [[-9112976,52910350,69896190],57034132],
+ [[52773451,30360939,79247967],75479113],
+ [[-6680030,26114817,19182073],87913270],
+ [[1482965,86244061,74533437],84409063],
+ [[24689402,71291292,83726812],55443483],
+ [[30350862,66160075,106804338],76785312],
+ [[-4063590,84853935,56872509],70904417],
+ [[5856723,68860058,67443259],55561024],
+ [[-7092718,83599936,62097932],77904977],
+ [[-10322894,95735574,63377690],94550544],
+ [[19921997,12113475,95509859],88937502],
+ [[11534894,57463560,99207505],70250571],
+ [[12352413,63309310,95136075],71207369],
+ [[41175395,95875663,40694251],70893868],
+ [[59891986,74136560,19271752],89293819],
+ [[-23086309,46188709,61304958],63666046],
+ [[-35534522,46755845,63454442],77696176],
+ [[-17431848,55911646,61066276],59524206],
+ [[19833014,98941413,53373702],57596603],
+ [[-28451505,62393147,51769902],67729137],
+ [[8178175,-29195966,48404389],99143478],
+ [[-10800811,66052879,72255412],74223622],
+ [[7592515,82345414,73497606],73364887],
+ [[18762382,82447623,97073423],85873084],
+ [[-10487671,31987978,73584470],77547158],
+ [[-9056504,62925961,53357292],50454349],
+ [[27999580,85878361,92076324],79424309],
+ [[51800702,30641723,78124579],73102228],
+ [[12642813,82894579,64946494],60312761],
+ [[-61807304,47686811,53275056],92858540],
+ [[-7276796,60434304,88907028],81732530],
+ [[-29599217,39708375,83129734],98483597],
+ [[-23520152,26844092,62214412],84353826],
+ [[-28877325,61946397,69770777],85708879],
+ [[-14608106,72848679,65361364],77932548],
+ [[-36824990,70391000,43020520],90376960],
+ [[44969927,68147155,35692982],51961138],
+ [[19011433,65149442,-12540316],84859740],
+ [[18764314,69338844,96926694],72615606],
+ [[-25391985,54173991,76565456],81246468],
+ [[-37132499,58605126,57299821],78151951],
+ [[317469,47901411,90999015],68243137],
+ [[4732566,82416141,64829451],67627448],
+ [[-4438337,64068128,59428063],53049034],
+ [[-7510390,65454288,58686238],56765295],
+ [[13297331,71022908,83309651],66149656],
+ [[-2443890,-1053307,49146976],80880201],
+ [[18424959,-25894837,57469563],90402436],
+ [[19134835,37687041,81457411],50098606],
+ [[30727267,74338302,16287433],63315163],
+ [[76426391,60025595,56674928],66597034],
+ [[-37764165,64665026,63738632],91282254],
+ [[73841307,45244034,7979885],95503095],
+ [[8518776,102619990,65620373],84836052],
+ [[33279437,-14820526,57737587],79656722],
+ [[-12641079,64685181,53396171],55837091],
+ [[-9951596,57691018,18966738],74857701],
+ [[11705830,39289792,103172595],77639987],
+ [[32755328,86575935,59301361],52102968],
+ [[-56381974,51244757,51903260],84644396],
+ [[10573573,67254309,71343991],53139256],
+ [[23178882,99249505,53062798],54247805],
+ [[-30438220,43249726,63852895],76504484],
+ [[-18008082,91354098,61662797],96139463],
+ [[58130621,-5410250,53763204],91122775],
+ [[38376500,5309795,68536851],75422199],
+ [[40568207,55819371,111949414],81807094],
+ [[13385608,58751181,87916220],58396316],
+ [[10652780,62923714,16913699],61538816],
+ [[66584605,90471059,59953467],90479328],
+ [[23828597,9229466,82674549],75079685],
+ [[-2374305,51653149,81806283],60948119],
+ [[15686944,101308548,58364945],69100929],
+ [[12725742,68880644,106967805],88237088],
+ [[17716933,53898766,92455242],53751453],
+ [[-33372359,56824192,52416697],67727660],
+ [[4982549,62244620,102018278],84394819],
+ [[9097870,2277106,23511783],91643276],
+ [[104095420,52061506,57103657],86730620],
+ [[38111501,86440374,53482963],51504912],
+ [[58344818,61400907,63284974],56500739],
+ [[16884807,19231253,82990003],72336956],
+ [[-42692945,65946169,41961384],92859217],
+ [[-28034754,55487947,62126726],70763811],
+ [[19274376,79870506,35147693],51629912],
+ [[21320145,55312624,92060702],51167634],
+ [[-36291008,37650308,58389536],82493243],
+ [[-10796796,41489105,66097601],60868304],
+ [[-40177150,63607920,46375716],83590789],
+ [[16877383,57508433,130889109],96634562],
+ [[78035795,47558838,61699900],65995510],
+ [[-12157529,59079739,94459705],90811614],
+ [[-14719298,67293961,58776388],65904037],
+ [[23165472,48319134,141014934],94993386],
+ [[14483307,55545491,83869510],50046127],
+ [[-13975465,72281297,75555056],86926409],
+ [[54944081,54012748,104500519],86928029],
+ [[15118634,63975046,120649575],94620419],
+ [[18002868,89743987,46547787],51375023],
+ [[118470960,53314916,47200144],99123142],
+ [[-18823495,55420905,53701803],53060582],
+ [[-5467064,58554591,77050896],66186932],
+ [[22160794,74878846,55706389],70447601],
+ [[-27826743,71164171,56998262],81103878],
+ [[-60219520,57279767,54018988],96632668],
+ [[11765030,64865953,25690628],53591753],
+ [[-77604253,51195582,160265663],82321239],
+ [[8895376,94389845,70206097],80814976],
+ [[72068955,61735419,61931626],69206024],
+ [[71294850,57747925,61258998],63771982],
+ [[-12500311,87983348,41185110],85480069],
+ [[13165281,58734390,57751380],71578498],
+ [[-16519504,56287098,41988135],57000006],
+ [[15702065,59567300,125776377],94756321],
+ [[104067037,56353806,59893063],93783989],
+ [[-2443051,34066815,59811244],53650485],
+ [[78659016,53301646,58395591],63826456],
+ [[-5395135,51489915,53108186],54457449],
+ [[43783348,70786755,68608325],56648600],
+ [[15861882,75526752,70870247],55649551],
+ [[-21433110,60201366,71144216],77893311],
+ [[16927373,30534856,57344675],79447115],
+ [[-23582240,51182170,53671182],53550212],
+ [[48377124,87322307,57807776],66977272],
+ [[-24658235,34774969,55408108],70754558],
+ [[-57025118,51608427,56368656],90116625],
+ [[-40956808,54872377,58233637],79177201],
+ [[-7940696,64406847,65491844],62954392],
+ [[18514021,116278681,67137430],90016641],
+ [[43358506,27845033,68486380],57818557],
+ [[1110894,83500413,68255453],75759354],
+ [[-37948234,63772147,53141588],79976703],
+ [[13559648,85475298,69747661],66777842],
+ [[52847535,100951259,70145575],97414722],
+ [[-21363508,51195381,52333138],50006604],
+ [[42775136,24331657,88882389],81144757],
+ [[-1933203,45916056,85330850],66811316],
+ [[-57987412,55995732,52031150],91128682],
+ [[-42000373,57698338,58535687],83348916],
+ [[-22415966,68748566,55301911],71580898],
+ [[63130941,60546452,58913823],56061251],
+ [[-25360,94955513,32263639],88899014],
+ [[16041791,46748455,54886958],52853925],
+ [[21841806,63659499,51701479],64043047],
+ [[1507336,30781882,86426870],79600758],
+ [[-61462214,51930278,59048201],97555074],
+ [[5596619,62910768,103402603],85831362],
+ [[-17947167,60351558,52786859],56199984],
+ [[8310608,110445624,30715607],97601075],
+ [[57809969,62546762,83913036],77739845],
+ [[-4243002,78023652,59272973],66654140],
+ [[-38346139,46279251,81595137],99125137],
+ [[-39505659,59077659,30772250],93992534],
+ [[70748692,61615798,69299886],75134429],
+ [[-8927983,72196971,41805506],65500828],
+ [[18230519,71253951,55091105],51783470],
+ [[-82741,89299947,70860177],85357733],
+ [[19408526,70959236,391121],77341247],
+ [[-118838868,96481794,83622656],81565538],
+ [[7699857,77112966,58676603],53204091],
+ [[-5285832,98989634,54909145],84299424],
+ [[-9949091,79675756,62952022],77691300],
+ [[6548040,71704033,79332787],69603175],
+ [[41519552,70838659,77663756],63492002],
+ [[24672816,51183711,105057962],56683540],
+ [[26979282,57437475,67725517],91990453],
+ [[-146316585,60113902,86014018],74912650],
+ [[72430683,58332575,69349806],73583276],
+ [[20029551,67957881,114673401],87716194],
+ [[-12896053,72374875,79141839],89527418],
+ [[10238771,77142540,70645372],62663967],
+ [[-3216297,27169332,60070123],61580077],
+ [[-23930209,54633761,66648944],70327317],
+ [[-18679703,21196655,30842395],93170631],
+ [[44655563,9533925,46538296],63469153],
+ [[-59378193,54454082,43217955],96795689],
+ [[24496603,92577304,64368811],57563942],
+ [[-27053938,59501992,52024839],63695171],
+ [[-9529140,74055507,52153025],60852050],
+ [[44555529,104038871,53349626],75414106],
+ [[-14679818,88223002,52168606],80185804],
+ [[4552719,62659754,92650998],75872423],
+ [[-19881238,63944538,24064643],85942719],
+ [[16076790,55601668,101552666],66191930],
+ [[21912528,118540961,52911368],74654179],
+ [[-42123089,64929314,59158052],91325104],
+ [[10936357,81890391,20134023],77001665],
+ [[10351597,9179596,62138956],68070751],
+ [[92774311,53165517,56634384],76044462],
+ [[14950682,78188149,16646479],72772458],
+ [[-36369450,41148166,38468120],83283873],
+ [[78960321,78942802,53919616],85293057],
+ [[-158664912,45952974,29905855],62185933],
+ [[114294274,47756105,53682861],94039744],
+ [[20046552,73002532,57617045],54110780],
+ [[-29832468,53561561,86264939],94773352],
+ [[5152614,124285693,53684633],97932108],
+ [[31373573,67528454,85096814],57468866],
+ [[-34521748,54572314,66408185],80616625],
+ [[21670677,109269914,16882176],96898951],
+ [[-13862893,59818682,65331199],64127296],
+ [[17318835,71965542,106868073],86629159],
+ [[78142676,48758577,56205332],59408131],
+ [[-23340878,51182474,58635784],58273523],
+ [[-26740311,87129579,52453722],91438117],
+ [[4303903,69818029,63437040],54065753],
+ [[3266332,71031490,81452081],74331764],
+ [[13702746,18039813,44354215],50433215],
+ [[-3482754,38377262,76574157],67142882],
+ [[-9228255,63064015,42837554],55636176],
+ [[-50838633,55818579,60038300],91809905],
+ [[12044855,110909031,26804479],98241104],
+ [[3069579,54401690,81614434],58061261],
+ [[-55632341,51473141,61974878],94194739],
+ [[47405039,61876630,72051227],54803065],
+ [[-54699622,62927561,51595043],94336968],
+ [[-5193725,62373908,96721874],89403908],
+ [[39277912,51487063,98292773],62527889],
+ [[28453914,55902735,104745928],62572701],
+ [[70028230,51756434,45557821],50764114],
+ [[6794251,79565242,72837497],70723039],
+ [[-13346572,55208620,19942682],74793897],
+ [[-26551619,52981805,64542889],69190740],
+ [[-43505598,52177986,74471561],95270055],
+ [[-36730243,57166097,70373519],89384321],
+ [[67837280,44038045,5154880],93530016],
+ [[24819569,59550660,112300422],72145934],
+ [[22889616,60439671,109383201],72047709],
+ [[16010141,59272902,95102320],63479459],
+ [[45785695,3672162,40921594],76077574],
+ [[52634264,230093674,55591446],92328001],
+ [[-1093816,65699672,61755421],53663391],
+ [[-2927319,46551949,115336543],97175126],
+ [[9846871,97494787,27660769],86168853],
+ [[14575046,54156478,106441784],71137652],
+ [[3693372,64829888,65085318],51336253],
+ [[-14475986,58191102,40490687],58358086],
+ [[-32625219,54193671,54687567],66620839],
+ [[19841368,112790310,53953991],72017337],
+ [[-36529548,56646542,73106232],91396775],
+ [[21383461,52564742,65263630],69168248],
+ [[-25544951,69296904,55993281],75949615],
+ [[5520910,41049609,87926413],66818890],
+ [[78361286,55145660,70961730],77938767],
+ [[-12502650,52118530,26315830],64486867],
+ [[-8502681,43100643,60553969],51419015],
+ [[30788480,91079544,72453023],67791399],
+ [[-41582270,52471539,51548548],70716745],
+ [[22495328,56368486,39214022],54868649],
+ [[629350,38620684,-5628651],92908951],
+ [[54092772,69401105,92313004],89276951],
+ [[-5909105,43864786,12211016],76363299],
+ [[3912827,52322153,79041627],52565376],
+ [[-58023857,53967358,52040730],89146355],
+ [[-31872996,52197859,61603944],70789344],
+ [[15997340,97237977,68995404],75350443],
+ [[-47277488,55104503,30071304],98492088],
+ [[-8126606,68416175,57612004],59269187],
+ [[-41526057,70666640,40848412],97525664],
+ [[73462661,56792015,64535899],68260624],
+ [[17561494,61650408,18024697],52245702],
+ [[18999409,83239866,79157013],68511878],
+ [[-17147426,82949543,58049486],83260838],
+ [[-18999109,63366752,88314976],95795304],
+ [[22782196,90426553,59952512],52711323],
+ [[3870299,63602471,24263373],61650297],
+ [[-28961118,57302888,47585264],64860112],
+ [[-54015783,52509914,54351945],85992387],
+ [[-31431674,55933418,55746724],68226308],
+ [[6227367,990142,64669121],82914608],
+ [[5035135,38115972,99202791],81514672],
+ [[-33418983,63482456,38640418],84442392],
+ [[-10795967,62940846,61879242],60730704],
+ [[109337482,53196724,58133710],94138173],
+ [[24242369,44107239,101663495],58776882],
+ [[13836970,62942011,18092686],57193751],
+ [[22307447,72298904,83902781],59008632],
+ [[61542152,47395133,73538238],61503948],
+ [[-24075040,59046188,54656470],62892239],
+ [[2709891,16928362,83441813],89266699],
+ [[18108186,51788474,56989142],80851857],
+ [[8783157,59841041,97619446],73792049],
+ [[-11464337,-1808695,45620039],94183197],
+ [[-27362762,61729073,63812346],78018926],
+ [[-16479685,60701430,70404170],72700118],
+ [[18072359,95490781,46478814],57121005],
+ [[22305099,61060570,52457431],91124722],
+ [[-3144103,35052829,41802786],52818565],
+ [[14700849,76137475,4759707],82858288],
+ [[24087216,72433922,86093140],59554341],
+ [[78515636,57323047,62505044],71813766],
+ [[-24840821,74681746,64511653],89148740],
+ [[-23826296,65180883,55787778],69909354],
+ [[75346962,35126022,80923207],94962783],
+ [[17008079,55328336,57579351],53041203],
+ [[-7356211,68676554,73449531],74596693],
+ [[-17162496,73932992,66248811],82458915],
+ [[-136511398,24674918,81631631],52044146],
+ [[17677665,60697644,59711178],87163127],
+ [[-23195799,53013298,81013306],82336819],
+ [[-11747126,98444482,59328815],94634945],
+ [[5844912,56397886,77450074],53117462],
+ [[-34509639,55837799,78666373],94128480],
+ [[5904302,91792190,56962332],67964633],
+ [[-17032381,59374519,60271759],61793041],
+ [[126401,73284278,37689172],61650102],
+ [[13058035,58217638,117787893],88061922],
+ [[13828494,55793337,5715352],62430875],
+ [[-38076711,68063369,58208411],89462874],
+ [[11310783,64077677,47800713],90266880],
+ [[71295692,59864191,53931657],58561571],
+ [[-28401409,54456913,64786142],72758897],
+ [[7099165,104942769,74968888],97926943],
+ [[-13995801,56919587,69332174],65361965],
+ [[-26207717,59423657,75475224],86221043],
+ [[6284415,23177140,26461281],70607154],
+ [[215192914,61945607,54981371],57239098],
+ [[570884,53692018,83080045],61315597],
+ [[82035008,70009886,45451263],81130714],
+ [[56491702,68916341,58674725],57552984],
+ [[41387757,67423761,76216212],58497788],
+ [[-13813748,54323195,39213241],55105070],
+ [[-6283377,38226161,58990807],52511441],
+ [[-26649360,45588196,46247152],61344017],
+ [[-14376863,65982584,89020987],94494818],
+ [[-3323474,29138548,66137005],65784968],
+ [[58981819,73400065,67082387],72934311],
+ [[-24602073,59590457,54064654],63371721],
+ [[36151757,93220459,79425935],82268360],
+ [[87119215,67120469,66106290],93816049],
+ [[-48564056,44611797,43001926],87480464],
+ [[-184831138,45972224,52522771],50154575],
+ [[-15029762,39315381,53334088],54511484],
+ [[-63442720,56809824,159032480],72599634],
+ [[60777021,86337479,55149072],75733594],
+ [[92444973,55329391,26343979],95967763],
+ [[-21559036,59753239,49501583],57992092],
+ [[9746816,62098999,110099681],87566354],
+ [[10180395,73435400,84209682],72579076],
+ [[9869506,63811097,-18666569],98789533],
+ [[-13838113,59406279,58751626],57110750],
+ [[64073559,55987760,56938593],50470036],
+ [[122002455,-29528127,89467426],76860378],
+ [[933085,106082663,68426376],98690342],
+ [[-2675758,105102702,49288669],84671159],
+ [[21148930,85952702,88820154],78738465],
+ [[-20327181,54015158,64694298],64151435],
+ [[1808162,74371192,54758455],52436239],
+ [[42135947,69930651,489911],86113750],
+ [[-12374999,90510715,64743102],92743325],
+ [[-4294480,65880302,57264170],52553487],
+ [[-11380714,79284188,78361214],94140720],
+ [[-18741699,56843996,93948119],94648195],
+ [[-15112925,57666102,84178102],82071526],
+ [[48905117,61145192,67255382],50775815],
+ [[22577383,65607571,119314309],87458960],
+ [[15014461,96714632,60980637],67795269],
+ [[47428343,39689983,86775385],68333041],
+ [[-28078465,61095714,45936858],69419061],
+ [[-23524262,42214714,78362442],85135301],
+ [[11059849,57287793,87820074],59162425],
+ [[3565314,29345958,18633562],74985191],
+ [[66387470,53690251,35786796],58828200],
+ [[3116731,79442759,52841036],54281677],
+ [[-19604720,61128015,61910900],67758297],
+ [[57308392,70794674,32711619],69928478],
+ [[12845664,78795191,27148691],64982288],
+ [[80886361,60430853,61195181],75982584],
+ [[23065226,55203444,121115562],78368206],
+ [[-1767172,87142211,34592050],80499249],
+ [[13751120,55697434,59007891],91399024],
+ [[-21912028,56562619,52196254],55785461],
+ [[24434582,75675617,15708816],61713746],
+ [[-752271,77413609,96554782],99835052],
+ [[17710144,89394902,70841612],67640873],
+ [[-29164492,60989567,53774351],69042803],
+ [[65721828,57739878,71302517],68234456],
+ [[51294874,74255591,89905897],88926704],
+ [[122447102,164387501,54549178],86167801],
+ [[-2233409,26924269,59265799],60037952],
+ [[3711632,67371720,79918709],68693447],
+ [[-39313716,47720889,55898562],72954666],
+ [[-29988637,48099743,66238336],73590241],
+ [[7092311,93600756,55598390],67221312],
+ [[94926391,52295037,52035414],72727059],
+ [[58322954,64494143,14681677],82672475],
+ [[-30606897,52115517,55916025],63752817],
+ [[33683678,52234183,65402997],77026018],
+ [[2893581,30919431,63800326],55450312],
+ [[-10073625,68787754,42712060],62330691],
+ [[-13226028,58548045,37442239],60513212],
+ [[13341702,123874963,58254419],93902154],
+ [[682234,97911898,48242929],75168144],
+ [[18722317,56674681,90606505],53673250],
+ [[90077460,56726877,60520864],80795256],
+ [[11265077,100200311,67941274],81990966],
+ [[10217162,21958720,59276183],52563693],
+ [[82134787,48069587,56864579],64748411],
+ [[20010404,57114507,56739832],95448884],
+ [[298850,62853941,18970195],69766264],
+ [[-34773033,48567904,55236028],66904149],
+ [[3075957,26623236,63055783],58819651],
+ [[16457975,57122257,70087795],86513850],
+ [[90103819,53683092,69699596],86956610],
+ [[-17689799,58550974,60782619],62138075],
+ [[9338392,37129212,14441408],65620968],
+ [[10278172,104026582,58505957],77369117],
+ [[-36648669,53313763,57070182],72147006],
+ [[3644850,75873038,60944199],58286859],
+ [[-55768152,64438408,48348049],98040163],
+ [[23966354,61323517,66723852],63170986],
+ [[83907332,75993772,60160048],93531174],
+ [[-49160977,51421296,51777959],77474735],
+ [[-19554495,83185945,68889433],96744324],
+ [[4083844,61211766,78812607],61054908],
+ [[-28740891,76035877,59783586],89674749],
+ [[1477390,92187674,62374371],78199589],
+ [[27555445,100617770,28346459],74363771],
+ [[61157488,92524005,67778649],94930233],
+ [[44509108,57672466,-14457614],91176410],
+ [[-49301441,57583231,64690420],96689478],
+ [[6254148,63730492,98438208],81029012],
+ [[-65249177,51697848,46584216],96544404],
+ [[-18251430,74523624,66136947],84026579],
+ [[-38032746,59650424,49516347],74348754],
+ [[1025165,71664650,57908627],53662668],
+ [[-47108245,52145065,40842431],84592249],
+ [[-48768564,66546374,54932017],95361722],
+ [[-21610139,44024485,61168243],64217401],
+ [[10087091,107246375,62170269],84443931],
+ [[51033289,57777223,79683838],61964875],
+ [[-1515410,54504740,89312112],70446642],
+ [[6955077,59969833,119903931],98033598],
+ [[-22531794,48719765,58184485],57459504],
+ [[-5094294,59314583,76395596],65919004],
+ [[76187323,83948474,38225082],96447759],
+ [[-21294072,54806425,61700229],62915134],
+ [[22543466,42317235,91615254],52217555],
+ [[28314112,89701628,91872856],83358628],
+ [[-4228579,64941150,75051735],69335866],
+ [[50966330,77605764,84252544],86294744],
+ [[-6737743,107415917,54338071],93606463],
+ [[23145972,65757098,91211071],58936588],
+ [[19007479,87503572,82855617],76466297],
+ [[-14765231,68331156,77316912],85528263],
+ [[-949424,70946763,65236949],62247745],
+ [[-32803143,52738611,60060225],70716401],
+ [[66822816,56906431,65665714],62865107],
+ [[9680974,91968172,80327678],87729365],
+ [[8343767,56768063,52291322],57842575],
+ [[38074555,75932657,94592379],82069623],
+ [[-19059954,72759195,75265940],92199655],
+ [[17867950,85793108,72307124],65346674],
+ [[4765057,109187888,51558662],81095880],
+ [[-18597182,56282648,71097542],71091807],
+ [[-53544594,48732733,55083403],85358259],
+ [[-14162311,76553349,71226487],87056545],
+ [[-47205943,48535879,60516002],84649054],
+ [[-51865413,61371035,54334719],92685802],
+ [[-10560072,67389213,73620186],76683871],
+ [[18319316,72506183,-3063602],83431987],
+ [[-3588999,72423545,64377299],65504222],
+ [[11888209,56845438,49310444],80146809],
+ [[21726851,54782153,26405131],94721944],
+ [[-21291084,56654299,74535249],77595146],
+ [[936181,103600381,67588131],95367106],
+ [[-13782512,64133232,74692014],77722142],
+ [[-36410139,62335051,70838270],94697845],
+ [[-13219359,55905482,102146596],96385842],
+ [[7982302,72795551,71059219],60987001],
+ [[14814723,60392314,88790377],59482349],
+ [[-46730374,59535255,39966466],92480718],
+ [[-12683668,63360272,34527358],67698165],
+ [[34918460,61167889,51688378],99658139],
+ [[65522795,5172637,52395633],86564425],
+ [[21631208,32413943,104746960],76164801],
+ [[-11979634,65490331,75294207],77878552],
+ [[6957102,71949660,103009238],93116178],
+ [[16501855,87396298,22166944],74908909],
+ [[-3903540,38079649,95576440],86863330],
+ [[20206463,69766028,75938015],50611973],
+ [[4305930,14987890,73560026],79729291],
+ [[-7564317,16601205,60800573],77226681],
+ [[78960025,77022559,51882781],81335395],
+ [[-2691592,55376094,83330088],66512406],
+ [[-47250869,37081123,43153632],93546119],
+ [[8536338,15031904,58255252],60150014],
+ [[60376108,86278760,75828759],95953668],
+ [[-6882477,55533881,67317545],54848322],
+ [[9678384,78681532,76529906],70647662],
+ [[10075511,91722489,53804756],60566307],
+ [[21285284,59022109,91758839],54610451],
+ [[-37992414,58278309,25526337],96925765],
+ [[-2709806,59275400,67729392],54828981],
+ [[7011597,20313939,78973760],77111391],
+ [[-52588778,60847764,58672703],97223909],
+ [[-15256628,22229514,41271494],78285813],
+ [[34156359,101451279,54422671],63500492],
+ [[21509300,111056381,53419268],68080733],
+ [[14593452,57851278,-19237975],88677170],
+ [[1781540,75186457,59902472],58421778],
+ [[-33041189,51450575,51533175],61139326],
+ [[15782750,66980930,90439887],66752517],
+ [[-36107313,40071259,65952487],87451603],
+ [[-14638698,63394833,75249799],78397768],
+ [[-22832073,77228624,62320318],87495607],
+ [[87393628,62821666,29411048],95341264],
+ [[-16740099,42436581,56244211],56010749],
+ [[20445816,54943259,60909642],73012739],
+ [[15983434,51447682,96599706],57178341],
+ [[-1059151,70062397,74572375],70808526],
+ [[-35739090,59134133,40541874],80512741],
+ [[22868206,41119100,92637902],54114178],
+ [[13457096,20227235,89352457],81131188],
+ [[53583940,59655001,69818825],56527814],
+ [[37367140,55788282,41622861],90197118],
+ [[12409098,92091021,58284823],63081300],
+];
+</script>
+<script>
+function project(pt) {
+ return [pt[0], pt[1]];
+}
+
+function scale(pt) {
+ return add([pt[0] / 2.3e8 * 250, pt[1] / 2.3e8 * 250], [250, 250]);
+}
+
+function add(p1, p2) {
+ const res = new Array(p1.length);
+ for (let i = 0; i < p1.length; i++) res[i] = p1[i] + p2[i];
+ return res;
+}
+
+function neg(pt) {
+ const res = new Array(pt.length);
+ for (let i = 0; i < pt.length; i++) res[i] = -pt[i];
+ return res;
+}
+
+window.addEventListener("load", function() {
+ const cvs = document.getElementById("c");
+ const ctx = cvs.getContext("2d");
+
+ ctx.fillStyle = "rgba(0, 0, 255, 0.005)";
+
+ for (const bot of bots) {
+ ctx.beginPath();
+ ctx.moveTo(...scale(add(project(bot[0]), [-bot[1], 0])));
+ ctx.lineTo(...scale(add(project(bot[0]), [0, bot[1]])));
+ ctx.lineTo(...scale(add(project(bot[0]), [bot[1], 0])));
+ ctx.lineTo(...scale(add(project(bot[0]), [0, -bot[1]])));
+ ctx.fill();
+ }
+});
+</script>
+</head>
+<body>
+<canvas id="c" width=500 height=500></canvas>
+</body>
+</html>
diff --git a/2018/Cargo.lock b/2018/Cargo.lock
index 1d233ab..32017f4 100644
--- a/2018/Cargo.lock
+++ b/2018/Cargo.lock
@@ -12,6 +12,7 @@ version = "0.1.0"
dependencies = [
"argparse 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -21,11 +22,38 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "bitflags"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "cfg-if"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "fuchsia-zircon-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "lazy_static"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -46,6 +74,71 @@ dependencies = [
]
[[package]]
+name = "rand"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "regex"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -66,6 +159,27 @@ dependencies = [
]
[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "thread_local"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -88,16 +202,52 @@ name = "version_check"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+[[package]]
+name = "winapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
[metadata]
"checksum aho-corasick 0.6.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1e9a933f4e58658d7b12defcf96dc5c720f20832deebe3e0a19efd3b6aaeeb9e"
"checksum argparse 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3f8ebf5827e4ac4fd5946560e6a99776ea73b596d80898f357007317a7141e47"
+"checksum bitflags 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "228047a76f468627ca71776ecdebd732a3423081fcf5125585bcd7c49886ce12"
"checksum cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "082bb9b28e00d3c9d39cc03e64ce4cea0f1bb9b3fde493f0cbc008472d22bdf4"
+"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
"checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1"
"checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311"
"checksum memchr 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a3eb002f0535929f1199681417029ebea04aadc0c7a4224b46be99c7f5d6a16"
+"checksum rand 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ae9d223d52ae411a33cf7e54ec6034ec165df296ccd23533d671a28252b6f66a"
+"checksum rand_chacha 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "771b009e3a508cb67e8823dda454aaa5368c7bc1c16829fb77d3e980440dd34a"
+"checksum rand_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0905b6b7079ec73b314d4c748701f6931eb79fd97c668caa3f1899b22b32c6db"
+"checksum rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+"checksum rand_isaac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+"checksum rand_pcg 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "086bd09a33c7044e56bb44d5bdde5a60e7f119a9e95b0775f545de759a32fe05"
+"checksum rand_xorshift 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "effa3fcaa47e18db002bdde6060944b6d2f9cfd8db471c30e873448ad9187be3"
"checksum regex 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37e7cbbd370869ce2e8dff25c7018702d10b21a20ef7135316f8daecd6c25b7f"
"checksum regex-syntax 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4e47a2ed29da7a9e1960e1639e7a982e6edc6d49be308a3b02daf511504a16d1"
+"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
"checksum ucd-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535c204ee4d8434478593480b8f86ab45ec9aae0e83c568ca81abf0fd0e88f86"
"checksum utf8-ranges 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "796f7e48bef87609f7ade7e06495a87d5cd06c7866e6a5cbfceffc558a243737"
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
+"checksum winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "92c1eb33641e276cfa214a0522acad57be5c56b10cb348b3c5117db75f3ac4b0"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/2018/Cargo.toml b/2018/Cargo.toml
index 484f482..33eca25 100644
--- a/2018/Cargo.toml
+++ b/2018/Cargo.toml
@@ -8,3 +8,4 @@ edition = "2018"
argparse = "0.2.2"
regex = "1"
lazy_static = "1.2.0"
+rand = "0.6.1"
diff --git a/2018/input/23.txt b/2018/input/23.txt
new file mode 100644
index 0000000..f762f20
--- /dev/null
+++ b/2018/input/23.txt
@@ -0,0 +1,1000 @@
+pos=<136613456,-512820,-739737>, r=87427481
+pos=<-53697593,55277802,49040699>, r=86116187
+pos=<3220880,75515511,53337027>, r=50746552
+pos=<88414078,70781701,66277674>, r=98943677
+pos=<-17988814,83735639,57607927>, r=84446784
+pos=<7905695,86080636,69893638>, r=73183217
+pos=<-106237978,86340882,82036549>, r=85944614
+pos=<-39951484,51796765,70217077>, r=87079969
+pos=<-41339171,48697955,55193194>, r=73297553
+pos=<-42571382,53083825,53317409>, r=74087026
+pos=<-7368751,52027496,-9560976>, r=95138965
+pos=<-8239116,41812660,62596194>, r=54485758
+pos=<-1137951,49037154,75388024>, r=52951810
+pos=<7650881,79141366,92778865>, r=89383763
+pos=<-17148778,67167319,69069673>, r=78500152
+pos=<-34682895,65463074,55433727>, r=80694128
+pos=<92864435,72243385,52889446>, r=91467469
+pos=<23342790,57278342,66486606>, r=96631618
+pos=<16097469,22492567,11010000>, r=76930041
+pos=<-27239715,74048890,47983162>, r=79486831
+pos=<48014242,79716366,40015768>, r=62251861
+pos=<511676,64398402,63621216>, r=52622716
+pos=<-29486239,66238746,61923874>, r=82763569
+pos=<92097957,57353083,58524935>, r=81446016
+pos=<-2615864,64900611,68273820>, r=60905066
+pos=<17304995,87864295,58127670>, r=53801410
+pos=<36460810,70793722,116450849>, r=97175553
+pos=<91303570,59210855,59663955>, r=83648530
+pos=<17400055,51714900,106525287>, r=65954578
+pos=<-9201950,68270611,75924360>, r=78511311
+pos=<10184185,63093052,93307967>, r=71331241
+pos=<24739666,43259195,5573675>, r=52957566
+pos=<-18267592,52724555,76111483>, r=72218039
+pos=<-35598801,54737022,27433735>, r=89083529
+pos=<35813819,73515444,94558754>, r=77358361
+pos=<6642272,22056475,91067625>, r=87832335
+pos=<17645774,89603262,67321149>, r=64393217
+pos=<-10216980,27634811,38770566>, r=70341591
+pos=<12799318,81249393,71992414>, r=65556938
+pos=<-10218046,74437078,62070349>, r=71839923
+pos=<-1309123,20674953,59788059>, r=65885225
+pos=<-27217791,66526827,53078642>, r=71937695
+pos=<-34737368,44315647,75994929>, r=91879642
+pos=<30808903,39024070,99557972>, r=65161437
+pos=<18233335,72395211,90831029>, r=70107346
+pos=<37186749,-678419,57742780>, r=69426693
+pos=<-9615179,80576697,64086230>, r=79392664
+pos=<33935621,102484176,52277559>, r=62167524
+pos=<21730454,116532754,59523052>, r=79439730
+pos=<-44299553,51849314,52674431>, r=73937932
+pos=<98820726,52369354,56304096>, r=80964285
+pos=<-14670863,53307196,63286058>, r=56378495
+pos=<21141579,52692533,60648771>, r=77839132
+pos=<106030705,57863782,38674931>, r=99756568
+pos=<3660762,56362269,113500773>, r=91316727
+pos=<-407093,36114871,62900059>, r=52655349
+pos=<17300250,90851621,82759279>, r=81425029
+pos=<3552610,79637006,46529196>, r=55736575
+pos=<19340107,84837235,62352207>, r=52963786
+pos=<8521013,89819722,24371259>, r=83109002
+pos=<14563407,28673587,78383971>, r=60610219
+pos=<105274857,48490223,59505360>, r=90108685
+pos=<6522669,68013196,92958454>, r=79563377
+pos=<61441811,62255240,63607848>, r=60775173
+pos=<-30662880,72201886,57781685>, r=85760834
+pos=<-5704121,74191612,91679671>, r=96690023
+pos=<22440794,115302243,29587291>, r=89455675
+pos=<16846226,85850758,26219592>, r=68966703
+pos=<-11181912,74609397,43701422>, r=68271328
+pos=<112019147,48094141,55257089>, r=93000920
+pos=<-58029664,63702221,52791218>, r=99637517
+pos=<56546279,54927537,104557578>, r=89501416
+pos=<13690470,51265122,54792423>, r=53548975
+pos=<-20863525,78114651,44421611>, r=80738144
+pos=<20071309,136046599,55636529>, r=96726219
+pos=<-9825817,54458897,71973514>, r=61373140
+pos=<-13643977,45813902,94182312>, r=87475383
+pos=<4214048,57552549,55230473>, r=97407755
+pos=<-44465852,38322072,54656647>, r=86263523
+pos=<-8532222,52266115,71351598>, r=57264679
+pos=<15789835,78397136,91588786>, r=79310551
+pos=<87644233,71738261,52393733>, r=85246435
+pos=<24700943,90988926,103171122>, r=94573621
+pos=<-16261249,63121025,87229161>, r=91725871
+pos=<-52294570,67135761,48053370>, r=97558456
+pos=<18918374,81332072,97803514>, r=85331838
+pos=<11760283,82388891,26779326>, r=70030661
+pos=<19928626,82449711,96833465>, r=84469124
+pos=<-18348975,19999142,52648068>, r=76460901
+pos=<-12075601,71251550,85024678>, r=93466308
+pos=<80062151,62500897,78775775>, r=94808908
+pos=<12337661,103647294,81418622>, r=97842757
+pos=<-11115387,60112851,66531714>, r=62874491
+pos=<16906477,63764749,85558216>, r=57530991
+pos=<-4672303,54855285,1301903>, r=84407059
+pos=<-37982464,58456898,68225299>, r=89779132
+pos=<-17681001,71939994,60038525>, r=74774035
+pos=<-11837172,58467855,79274314>, r=74693725
+pos=<29729949,7390010,64977794>, r=61136429
+pos=<-12679395,87224461,58161931>, r=83180457
+pos=<-11559100,72144044,77817800>, r=86635361
+pos=<-2084469,25684278,55681143>, r=57544326
+pos=<20590016,129914590,49426051>, r=86080032
+pos=<-7571416,69794846,69085384>, r=71566033
+pos=<-34145880,48469543,51820255>, r=62959690
+pos=<-8692081,31985652,52581756>, r=54751347
+pos=<-24455978,69065733,52902609>, r=71539034
+pos=<-2667941,59922398,71227376>, r=58932198
+pos=<-38020475,72881338,61644325>, r=97660532
+pos=<-21527600,53755812,51653194>, r=52050984
+pos=<-8830611,33006975,78898650>, r=80185902
+pos=<19025250,113913931,63618165>, r=83621311
+pos=<8387089,77230233,57248610>, r=51206312
+pos=<9535513,118434510,37136580>, r=97943806
+pos=<78992433,58822717,31347868>, r=81004338
+pos=<-16906193,77442482,52709412>, r=72172536
+pos=<22311017,63448797,51701106>, r=94242941
+pos=<43179406,2818296,30763106>, r=84483777
+pos=<-363630,57933199,98730777>, r=82142085
+pos=<-3421442,71654138,81584493>, r=81774527
+pos=<105294101,47765605,48049117>, r=84365008
+pos=<-14236037,92920841,48040781>, r=85297524
+pos=<5696945,87936599,71179435>, r=78533668
+pos=<70714071,41126802,64803849>, r=68209814
+pos=<-18725349,54598292,52699640>, r=51138183
+pos=<59897823,71653281,71202033>, r=76223304
+pos=<48123775,102241419,73882598>, r=97717918
+pos=<-27257912,59427348,52360090>, r=64159728
+pos=<7347141,78617861,96938400>, r=93323519
+pos=<98970812,42594863,66538549>, r=96733304
+pos=<60136017,76634280,74781184>, r=85021510
+pos=<-38514792,65847495,52025409>, r=81502116
+pos=<-5508508,4887248,43864104>, r=83287138
+pos=<21727987,54693625,95057154>, r=53137390
+pos=<-15479704,40894383,53779209>, r=53827666
+pos=<-50001012,42594012,56389944>, r=89260340
+pos=<-49970116,64164073,53317682>, r=92566258
+pos=<-56357341,55323528,59446041>, r=96241383
+pos=<625968,53683329,98614903>, r=76786891
+pos=<21482773,117944535,70699492>, r=92275780
+pos=<16203712,73330825,69917915>, r=52159463
+pos=<13906226,70337776,30608175>, r=52004893
+pos=<-21655059,68530571,79036384>, r=94336614
+pos=<-6379112,70074314,96974691>, r=98542673
+pos=<37257281,88232345,55974220>, r=54934223
+pos=<-153042,61570334,64745296>, r=51583144
+pos=<75744358,74770786,74235757>, r=98220949
+pos=<2593526,12576425,76209878>, r=86502916
+pos=<-3213601,79186838,80823018>, r=88337919
+pos=<-9431288,52885294,66308318>, r=53739421
+pos=<39457172,77981561,77781961>, r=68690851
+pos=<3658726,45027232,78570696>, r=55347772
+pos=<19540854,59560050,33221913>, r=66437344
+pos=<-23991955,53819675,65495637>, r=68421679
+pos=<-15925338,62003166,71681923>, r=74724861
+pos=<179979,95055064,72345095>, r=92334745
+pos=<32084825,113714994,57462206>, r=76732047
+pos=<-79456713,-30995940,73253681>, r=71108738
+pos=<-5085269,56556449,63274512>, r=50030649
+pos=<-1823099,53617693,74353439>, r=54908645
+pos=<-21582671,87360226,64824893>, r=98882268
+pos=<-54047120,52572271,45012396>, r=87788501
+pos=<-621964,40254302,67623764>, r=53454465
+pos=<10705962,52178757,-10564055>, r=78218262
+pos=<-27052117,72974854,68996532>, r=94137885
+pos=<-5333720,61326896,75858050>, r=67633053
+pos=<-442860,-7927774,60719749>, r=94553540
+pos=<20190232,59561903,101548027>, r=66034633
+pos=<-7907411,40629427,68521654>, r=61262635
+pos=<-9455107,66611005,94728621>, r=95909233
+pos=<22122168,62372400,119686289>, r=85051023
+pos=<-16418814,91187751,60788730>, r=93509810
+pos=<-12210203,71963130,19080036>, r=91275101
+pos=<-16069946,54585553,55218935>, r=50988886
+pos=<73589783,36919962,51760461>, r=62248915
+pos=<10988236,47525791,7585386>, r=60430836
+pos=<10516253,63819008,75162627>, r=53580091
+pos=<54978561,77777004,81843099>, r=88068740
+pos=<843965,59034530,26718598>, r=57653476
+pos=<8390445,51933284,106893232>, r=75550828
+pos=<55468357,41898786,6292104>, r=82163240
+pos=<-15657432,59791539,54996025>, r=55559386
+pos=<21925705,56064114,98432334>, r=57685472
+pos=<2045205,54926092,91406478>, r=69401804
+pos=<18964578,82009106,68170256>, r=56329266
+pos=<-5020873,58135455,83138917>, r=71409692
+pos=<11206282,18758794,90297569>, r=85795593
+pos=<60429823,65420118,62455940>, r=61775922
+pos=<-50071054,65142864,56916609>, r=97245137
+pos=<37522973,119514287,68154460>, r=98661779
+pos=<-24546116,79951244,52341069>, r=81952965
+pos=<-42895143,51426102,49103721>, r=71398899
+pos=<19847811,70965352,88276453>, r=64508398
+pos=<31969885,74676586,119451667>, r=99568484
+pos=<43133639,79493715,70091589>, r=66189023
+pos=<3536597,70013464,59700142>, r=51291540
+pos=<-43456481,62212963,55178319>, r=85962366
+pos=<66908155,61377553,55147564>, r=56903339
+pos=<-6338837,64186892,67392177>, r=63032325
+pos=<24582754,12428156,39119902>, r=50399652
+pos=<19622738,107750729,55849974>, r=69092525
+pos=<-50422280,58990076,62168244>, r=96695006
+pos=<58134510,61311825,96239969>, r=89156504
+pos=<-30966037,57564421,54587595>, r=68232489
+pos=<12569803,83417760,58547639>, r=54510046
+pos=<16028817,91085624,85099394>, r=85270691
+pos=<26948233,79274928,118354187>, r=98047375
+pos=<-52310680,47522666,64367435>, r=94618457
+pos=<-6416427,79465208,59490450>, r=70486528
+pos=<20092186,68488461,91337971>, r=64848774
+pos=<-15142198,42300705,54605738>, r=52910257
+pos=<-27837357,69166421,45527549>, r=77657747
+pos=<-40369484,73666973,51836487>, r=90987378
+pos=<85019354,56875805,38052709>, r=78379725
+pos=<-4826865,73385493,74154124>, r=77481047
+pos=<-44327050,62980445,57928726>, r=90350601
+pos=<2268051,71674062,18320627>, r=77266756
+pos=<7560942,23918555,95582539>, r=89566155
+pos=<-40522661,58387981,55190926>, r=79216025
+pos=<17493703,92481489,21602524>, r=79566649
+pos=<-549853,30548349,59679581>, r=55144150
+pos=<-11540623,61439486,75747954>, r=73842446
+pos=<-27425143,66943956,51613022>, r=71096670
+pos=<7492358,52336684,59482404>, r=62591245
+pos=<8199261,52115157,61979910>, r=52924169
+pos=<-5227038,75473558,53223397>, r=59038494
+pos=<69304179,60217316,90678830>, r=93670829
+pos=<-27825322,58595174,52943775>, r=64478650
+pos=<-3930520,44822324,83076659>, r=67647944
+pos=<-15669371,56863526,61131713>, r=58778995
+pos=<28136546,52898534,69587237>, r=88623606
+pos=<-65393666,51826191,55613912>, r=97948204
+pos=<-15477551,51180735,42248775>, r=50591359
+pos=<40449375,72513414,96662908>, r=83095857
+pos=<-33924420,53998875,71917916>, r=84955612
+pos=<10793863,52565615,51767299>, r=98060212
+pos=<9995273,60527127,91707845>, r=67354108
+pos=<-60284471,51756689,57993530>, r=95149079
+pos=<18376558,10452573,62217674>, r=58851640
+pos=<6437033,60403963,76732508>, r=55814249
+pos=<-28335460,51550727,67141191>, r=72141764
+pos=<-20795148,56783730,53199338>, r=55892601
+pos=<12754662,84841524,53799805>, r=51001164
+pos=<9355656,37410878,81929957>, r=60626411
+pos=<70162685,52698231,62479018>, r=58810202
+pos=<3593617,1103985,61329203>, r=82094839
+pos=<-11110833,76403444,81998629>, r=94627295
+pos=<-2911501,68332204,55930359>, r=52288511
+pos=<-5611352,24754525,54946306>, r=61266149
+pos=<8852382,71155727,68890982>, r=56308709
+pos=<61447488,68409236,69588689>, r=72915436
+pos=<7800512,89666253,65758055>, r=72738393
+pos=<10592995,54945607,58732681>, r=89051922
+pos=<42798128,-12649279,56562836>, r=85829241
+pos=<11562554,75630041,86875504>, r=76057543
+pos=<77961659,71510466,54153352>, r=77095503
+pos=<31055259,54921299,-9869494>, r=70383159
+pos=<-27501669,62023219,47541351>, r=68164946
+pos=<42374475,68761335,72601978>, r=57207824
+pos=<-33321254,51983321,59677321>, r=70096300
+pos=<24068578,39736961,60654009>, r=88299248
+pos=<-19116561,56737201,34200348>, r=67834972
+pos=<22969648,52249055,100644454>, r=55038258
+pos=<-42911185,51860830,61376355>, r=81262991
+pos=<-42633368,44611772,66190367>, r=89674954
+pos=<-3829240,75255688,21232601>, r=84033808
+pos=<5934856,57988042,76585113>, r=53752725
+pos=<-32964350,68530123,57108410>, r=83717261
+pos=<43876005,92164898,87846839>, r=97357843
+pos=<-2417792,58943300,65531206>, r=52006718
+pos=<54964722,89070986,53056518>, r=70562253
+pos=<-290623,31446470,65443341>, r=59750487
+pos=<7639935,101059316,58888687>, r=77422498
+pos=<-28253746,62612782,71235848>, r=87217278
+pos=<-7422094,56693858,109005575>, r=98235920
+pos=<61189820,88854622,44952918>, r=79628549
+pos=<-16010449,60503569,67814188>, r=69442584
+pos=<31995549,99041054,92811203>, r=97317853
+pos=<14407890,68606212,88656048>, r=67968926
+pos=<3797019,93897803,59385476>, r=74600640
+pos=<89982687,70799922,58816742>, r=93069386
+pos=<-47391381,58920806,47022977>, r=85470601
+pos=<-18682541,52396968,60465510>, r=56659507
+pos=<-33603071,56312429,61658802>, r=76688781
+pos=<-1966320,58483882,29754668>, r=56877265
+pos=<-6876331,35253483,65966223>, r=63052064
+pos=<-39772638,75789985,47508955>, r=94235051
+pos=<-24980812,-1938691,-46278539>, r=50540858
+pos=<-14975005,78724644,39316097>, r=80565111
+pos=<-2885944,65589513,76516656>, r=70106553
+pos=<3541691,72547980,70693895>, r=64814600
+pos=<-44510906,63214333,63320805>, r=96160422
+pos=<185135951,79371810,69897884>, r=92278734
+pos=<-15712941,69417771,56680209>, r=66925482
+pos=<3371300,64063926,70577995>, r=56385028
+pos=<20093270,89812250,83966344>, r=78799702
+pos=<-44882626,56482809,44012736>, r=83534067
+pos=<7807097,59338218,93406346>, r=70052015
+pos=<83206185,54254511,65285920>, r=76216650
+pos=<-9128452,31764042,52408460>, r=55235957
+pos=<9273140,58063106,84328894>, r=58233459
+pos=<12730173,65723179,86216535>, r=64323934
+pos=<-5370160,21333035,52408548>, r=61908782
+pos=<-50412106,36708544,57003999>, r=96170823
+pos=<-12428116,56614507,59912876>, r=54070441
+pos=<23530187,55890018,101558624>, r=59032841
+pos=<24076853,75872593,84021081>, r=60931262
+pos=<66742911,53159306,102755650>, r=96128101
+pos=<52985633,69568131,100732548>, r=96756344
+pos=<21276856,95454549,27263024>, r=73096105
+pos=<18634979,90055348,78648309>, r=75183223
+pos=<59296178,97443382,58785611>, r=88995359
+pos=<-9151924,60937196,63129967>, r=58333507
+pos=<-131439802,11932397,63801725>, r=91099003
+pos=<-15182359,51945676,96531706>, r=88774362
+pos=<37456150,58413739,90785927>, r=60125884
+pos=<55535275,58675694,68529536>, r=56210588
+pos=<-23901453,82911425,51765843>, r=83693104
+pos=<20400242,84135488,38426476>, r=51490217
+pos=<86127079,53137259,73699744>, r=86434146
+pos=<-37504970,65330192,58356041>, r=86305590
+pos=<-36229876,54144877,76073195>, r=91562525
+pos=<7122807,47260000,60037998>, r=92003347
+pos=<14241003,60321844,84135837>, r=55331088
+pos=<-58054472,54730510,42664262>, r=96302105
+pos=<11128985,-3179856,61388093>, r=78901954
+pos=<-86171724,81676146,128118766>, r=65629454
+pos=<-32477909,54111811,66095298>, r=77799414
+pos=<16473884,29685000,94881174>, r=74185298
+pos=<-39673388,54367240,60656362>, r=79811579
+pos=<-36820899,56003364,51780853>, r=69719509
+pos=<33393407,80286458,76512600>, r=63663115
+pos=<18145724,41961673,52085548>, r=82246846
+pos=<773269,56344730,109740475>, r=90426345
+pos=<23227623,20924988,89657454>, r=70967862
+pos=<29769636,51258040,101968164>, r=56466105
+pos=<-3255302,91302711,53052997>, r=72725506
+pos=<63288029,31756890,15053302>, r=91363738
+pos=<-696254,82267064,54884033>, r=62961850
+pos=<24224162,74018463,80725407>, r=55634090
+pos=<-31583375,35116342,57915541>, r=79845595
+pos=<-20265647,61458300,53421504>, r=60260040
+pos=<-3625510,70617596,85973701>, r=85331222
+pos=<38592662,72038274,107230244>, r=91331550
+pos=<20947230,95753333,5848876>, r=95138602
+pos=<65256974,42508621,53997591>, r=50564655
+pos=<56144525,-47809394,138757109>, r=88873477
+pos=<12536114,44878759,53725314>, r=86437546
+pos=<-20301103,44075250,52762962>, r=54451813
+pos=<-461902,80465125,84487814>, r=90529307
+pos=<7130680,32413231,68883794>, r=54802893
+pos=<-50296082,60195477,45850842>, r=90822087
+pos=<-14564832,72623628,17948114>, r=95421720
+pos=<-22686155,63096629,54372268>, r=65269532
+pos=<69844001,61172133,56055801>, r=60541966
+pos=<-52847704,61819166,58790940>, r=98572688
+pos=<14547281,53614270,69916715>, r=64925594
+pos=<11858628,69801510,83476504>, r=66533825
+pos=<-19237228,57038668,55663966>, r=57054287
+pos=<-2272553,98539746,62554872>, r=88481774
+pos=<-8556006,44686979,74145414>, r=63477536
+pos=<2504323,61605769,51711818>, r=54478689
+pos=<47588454,79992799,94986516>, r=96037851
+pos=<103658947,51685093,57082700>, r=85896762
+pos=<-30259191,60236324,60596487>, r=76206463
+pos=<-16899083,75972745,75204218>, r=93190621
+pos=<-16138352,72149890,57424797>, r=70827421
+pos=<-32022269,39108198,51836967>, r=70214052
+pos=<-253386,60377315,87086253>, r=72831391
+pos=<70319029,58272431,24333949>, r=78795019
+pos=<98140448,55305455,54099422>, r=81015347
+pos=<-9894221,46215061,90692267>, r=79835086
+pos=<8135694,75227546,75981649>, r=68187909
+pos=<3050471,53586527,55188089>, r=52075619
+pos=<1872493,96006217,77781926>, r=97030112
+pos=<33059309,107988331,79210607>, r=93728745
+pos=<16673776,69427534,108363123>, r=86231293
+pos=<-55714690,52582577,37933926>, r=96544709
+pos=<593835,83505567,68365123>, r=76391300
+pos=<43486018,76414497,67060559>, r=60431122
+pos=<-103710,79781165,51942827>, r=56942322
+pos=<10133283,63186363,55221028>, r=90994744
+pos=<23438290,54031653,67704842>, r=75155252
+pos=<-67769695,52775484,52431198>, r=98090761
+pos=<-18104986,52809731,54267642>, r=50296769
+pos=<109991188,53156356,60594209>, r=97211931
+pos=<-13768977,54140486,59831889>, r=52855852
+pos=<-12489665,47714331,86555741>, r=76794067
+pos=<-26482316,33973790,58911081>, r=76882915
+pos=<-160197435,53199007,15047334>, r=72701562
+pos=<23358129,69976926,85439610>, r=57172786
+pos=<24201045,82557215,112270801>, r=95741523
+pos=<72394082,20781518,37930394>, r=88568308
+pos=<45145254,31095571,82460069>, r=70328402
+pos=<-24815015,78740100,66702713>, r=95372303
+pos=<-11180118,63194518,51850772>, r=51339974
+pos=<-30260369,77069699,58001879>, r=90446543
+pos=<12841613,54905801,60405944>, r=69102701
+pos=<69379484,75759864,80677420>, r=99286807
+pos=<-19898305,56022498,52114906>, r=53150117
+pos=<23972174,63400531,63593334>, r=88610729
+pos=<-7853869,55653210,30754191>, r=58934358
+pos=<40004815,92174613,37712106>, r=69004511
+pos=<-18970401,64246847,57001969>, r=65333603
+pos=<-55945729,46641309,41200961>, r=94633445
+pos=<10448314,60832634,-13979245>, r=90545188
+pos=<104420953,54797004,51761342>, r=84449325
+pos=<-7833268,56419777,64966118>, r=54333552
+pos=<-41600051,53218447,75060610>, r=94993621
+pos=<-23285697,51988784,62294935>, r=62683806
+pos=<-6906170,52717101,66490995>, r=51228649
+pos=<-36994277,58578684,69447528>, r=90134897
+pos=<13894089,90601100,71559173>, r=73380713
+pos=<5549488,90598003,63587583>, r=73750520
+pos=<27986859,65318406,569711>, r=67272566
+pos=<11420671,52635330,54320974>, r=70384136
+pos=<58986016,64249155,26039401>, r=71732796
+pos=<5530635,65978466,18218016>, r=68411191
+pos=<-5385393,46216210,79409449>, r=64041818
+pos=<-21799629,90568144,46789063>, r=91760239
+pos=<-36265254,58098351,59809891>, r=79287875
+pos=<-85146141,88950855,-3714880>, r=50044292
+pos=<38619326,-4038243,77668519>, r=94144770
+pos=<2694518,54614333,-4908892>, r=83010409
+pos=<5313262,51345161,59838196>, r=72136128
+pos=<14843630,-1349878,43928227>, r=69108117
+pos=<22464636,120847792,40757992>, r=83806553
+pos=<-9865777,51214858,90863194>, r=77058488
+pos=<19167267,52510615,54852693>, r=90699829
+pos=<14593457,70653650,97885859>, r=79060557
+pos=<-8818822,61716404,18373136>, r=78343826
+pos=<1060,70746123,74820827>, r=70680268
+pos=<2440131,63910700,77731744>, r=64316854
+pos=<9446148,94030616,72483361>, r=82182217
+pos=<99080786,67236493,59091021>, r=98878926
+pos=<-1302538,90260423,63215145>, r=79892689
+pos=<8394619,77120518,104185074>, r=98025497
+pos=<8809237,89970368,88703357>, r=94978937
+pos=<61696969,53031317,25103817>, r=64161515
+pos=<-17945953,52730115,54562544>, r=50352996
+pos=<5573049,75894102,57995185>, r=53430728
+pos=<1734159,18182439,88390315>, r=93936719
+pos=<16427148,60790813,57255534>, r=77938471
+pos=<-5794985,58712237,72538823>, r=62160526
+pos=<114104963,48165299,48341508>, r=92483804
+pos=<66162561,63632542,48965213>, r=55367138
+pos=<-10848319,68498736,72425408>, r=76886851
+pos=<35960404,57952302,83825949>, r=51208802
+pos=<-7537899,63784540,26119781>, r=71384092
+pos=<7597577,78226192,54364713>, r=50108075
+pos=<-4944468,85203935,56866419>, r=72129314
+pos=<-31664056,74767063,66581879>, r=98127721
+pos=<-30554637,64050408,69381798>, r=89101226
+pos=<15180605,89452073,84996875>, r=84382933
+pos=<24727280,106040899,27094989>, r=80399998
+pos=<-32937600,57802552,41091533>, r=75830264
+pos=<-24285878,55135192,45900921>, r=59701557
+pos=<99942558,60451396,53076615>, r=86940865
+pos=<-8142431,63656427,70896708>, r=67810159
+pos=<19572931,72289003,88954380>, r=66784918
+pos=<17178080,32326459,98036814>, r=73995977
+pos=<-40327597,60321955,30752519>, r=96078407
+pos=<-26708621,51303087,68660841>, r=71786962
+pos=<5298440,71150886,98998933>, r=89965866
+pos=<-26727384,52712004,60606804>, r=65160630
+pos=<-42515019,36860711,54621755>, r=85739222
+pos=<-19692936,52880476,53505130>, r=51192967
+pos=<-2862751,72059619,56687442>, r=56724369
+pos=<23309701,73678498,90297260>, r=65780546
+pos=<103591531,51292218,54785000>, r=83139488
+pos=<13334478,40067215,41788503>, r=53285143
+pos=<-19529026,52222981,57621425>, r=54488069
+pos=<-1797950,83874608,63370131>, r=74157238
+pos=<-25984963,45705100,63968004>, r=69711376
+pos=<-24664085,26439550,59809899>, r=83497673
+pos=<19736100,80301464,65388701>, r=51068468
+pos=<-25320635,61777368,77622402>, r=89834801
+pos=<-17286284,77658389,79260938>, r=99320666
+pos=<70330963,53068965,53858287>, r=50728428
+pos=<-3076230,90554067,55114683>, r=73859363
+pos=<-20974395,51855715,72542126>, r=70486673
+pos=<1092644,-4119326,69709754>, r=98199427
+pos=<15938133,59416689,58855448>, r=92943839
+pos=<-9112976,52910350,69896190>, r=57034132
+pos=<52773451,30360939,79247967>, r=75479113
+pos=<-6680030,26114817,19182073>, r=87913270
+pos=<1482965,86244061,74533437>, r=84409063
+pos=<24689402,71291292,83726812>, r=55443483
+pos=<30350862,66160075,106804338>, r=76785312
+pos=<-4063590,84853935,56872509>, r=70904417
+pos=<5856723,68860058,67443259>, r=55561024
+pos=<-7092718,83599936,62097932>, r=77904977
+pos=<-10322894,95735574,63377690>, r=94550544
+pos=<19921997,12113475,95509859>, r=88937502
+pos=<11534894,57463560,99207505>, r=70250571
+pos=<12352413,63309310,95136075>, r=71207369
+pos=<41175395,95875663,40694251>, r=70893868
+pos=<59891986,74136560,19271752>, r=89293819
+pos=<-23086309,46188709,61304958>, r=63666046
+pos=<-35534522,46755845,63454442>, r=77696176
+pos=<-17431848,55911646,61066276>, r=59524206
+pos=<19833014,98941413,53373702>, r=57596603
+pos=<-28451505,62393147,51769902>, r=67729137
+pos=<8178175,-29195966,48404389>, r=99143478
+pos=<-10800811,66052879,72255412>, r=74223622
+pos=<7592515,82345414,73497606>, r=73364887
+pos=<18762382,82447623,97073423>, r=85873084
+pos=<-10487671,31987978,73584470>, r=77547158
+pos=<-9056504,62925961,53357292>, r=50454349
+pos=<27999580,85878361,92076324>, r=79424309
+pos=<51800702,30641723,78124579>, r=73102228
+pos=<12642813,82894579,64946494>, r=60312761
+pos=<-61807304,47686811,53275056>, r=92858540
+pos=<-7276796,60434304,88907028>, r=81732530
+pos=<-29599217,39708375,83129734>, r=98483597
+pos=<-23520152,26844092,62214412>, r=84353826
+pos=<-28877325,61946397,69770777>, r=85708879
+pos=<-14608106,72848679,65361364>, r=77932548
+pos=<-36824990,70391000,43020520>, r=90376960
+pos=<44969927,68147155,35692982>, r=51961138
+pos=<19011433,65149442,-12540316>, r=84859740
+pos=<18764314,69338844,96926694>, r=72615606
+pos=<-25391985,54173991,76565456>, r=81246468
+pos=<-37132499,58605126,57299821>, r=78151951
+pos=<317469,47901411,90999015>, r=68243137
+pos=<4732566,82416141,64829451>, r=67627448
+pos=<-4438337,64068128,59428063>, r=53049034
+pos=<-7510390,65454288,58686238>, r=56765295
+pos=<13297331,71022908,83309651>, r=66149656
+pos=<-2443890,-1053307,49146976>, r=80880201
+pos=<18424959,-25894837,57469563>, r=90402436
+pos=<19134835,37687041,81457411>, r=50098606
+pos=<30727267,74338302,16287433>, r=63315163
+pos=<76426391,60025595,56674928>, r=66597034
+pos=<-37764165,64665026,63738632>, r=91282254
+pos=<73841307,45244034,7979885>, r=95503095
+pos=<8518776,102619990,65620373>, r=84836052
+pos=<33279437,-14820526,57737587>, r=79656722
+pos=<-12641079,64685181,53396171>, r=55837091
+pos=<-9951596,57691018,18966738>, r=74857701
+pos=<11705830,39289792,103172595>, r=77639987
+pos=<32755328,86575935,59301361>, r=52102968
+pos=<-56381974,51244757,51903260>, r=84644396
+pos=<10573573,67254309,71343991>, r=53139256
+pos=<23178882,99249505,53062798>, r=54247805
+pos=<-30438220,43249726,63852895>, r=76504484
+pos=<-18008082,91354098,61662797>, r=96139463
+pos=<58130621,-5410250,53763204>, r=91122775
+pos=<38376500,5309795,68536851>, r=75422199
+pos=<40568207,55819371,111949414>, r=81807094
+pos=<13385608,58751181,87916220>, r=58396316
+pos=<10652780,62923714,16913699>, r=61538816
+pos=<66584605,90471059,59953467>, r=90479328
+pos=<23828597,9229466,82674549>, r=75079685
+pos=<-2374305,51653149,81806283>, r=60948119
+pos=<15686944,101308548,58364945>, r=69100929
+pos=<12725742,68880644,106967805>, r=88237088
+pos=<17716933,53898766,92455242>, r=53751453
+pos=<-33372359,56824192,52416697>, r=67727660
+pos=<4982549,62244620,102018278>, r=84394819
+pos=<9097870,2277106,23511783>, r=91643276
+pos=<104095420,52061506,57103657>, r=86730620
+pos=<38111501,86440374,53482963>, r=51504912
+pos=<58344818,61400907,63284974>, r=56500739
+pos=<16884807,19231253,82990003>, r=72336956
+pos=<-42692945,65946169,41961384>, r=92859217
+pos=<-28034754,55487947,62126726>, r=70763811
+pos=<19274376,79870506,35147693>, r=51629912
+pos=<21320145,55312624,92060702>, r=51167634
+pos=<-36291008,37650308,58389536>, r=82493243
+pos=<-10796796,41489105,66097601>, r=60868304
+pos=<-40177150,63607920,46375716>, r=83590789
+pos=<16877383,57508433,130889109>, r=96634562
+pos=<78035795,47558838,61699900>, r=65995510
+pos=<-12157529,59079739,94459705>, r=90811614
+pos=<-14719298,67293961,58776388>, r=65904037
+pos=<23165472,48319134,141014934>, r=94993386
+pos=<14483307,55545491,83869510>, r=50046127
+pos=<-13975465,72281297,75555056>, r=86926409
+pos=<54944081,54012748,104500519>, r=86928029
+pos=<15118634,63975046,120649575>, r=94620419
+pos=<18002868,89743987,46547787>, r=51375023
+pos=<118470960,53314916,47200144>, r=99123142
+pos=<-18823495,55420905,53701803>, r=53060582
+pos=<-5467064,58554591,77050896>, r=66186932
+pos=<22160794,74878846,55706389>, r=70447601
+pos=<-27826743,71164171,56998262>, r=81103878
+pos=<-60219520,57279767,54018988>, r=96632668
+pos=<11765030,64865953,25690628>, r=53591753
+pos=<-77604253,51195582,160265663>, r=82321239
+pos=<8895376,94389845,70206097>, r=80814976
+pos=<72068955,61735419,61931626>, r=69206024
+pos=<71294850,57747925,61258998>, r=63771982
+pos=<-12500311,87983348,41185110>, r=85480069
+pos=<13165281,58734390,57751380>, r=71578498
+pos=<-16519504,56287098,41988135>, r=57000006
+pos=<15702065,59567300,125776377>, r=94756321
+pos=<104067037,56353806,59893063>, r=93783989
+pos=<-2443051,34066815,59811244>, r=53650485
+pos=<78659016,53301646,58395591>, r=63826456
+pos=<-5395135,51489915,53108186>, r=54457449
+pos=<43783348,70786755,68608325>, r=56648600
+pos=<15861882,75526752,70870247>, r=55649551
+pos=<-21433110,60201366,71144216>, r=77893311
+pos=<16927373,30534856,57344675>, r=79447115
+pos=<-23582240,51182170,53671182>, r=53550212
+pos=<48377124,87322307,57807776>, r=66977272
+pos=<-24658235,34774969,55408108>, r=70754558
+pos=<-57025118,51608427,56368656>, r=90116625
+pos=<-40956808,54872377,58233637>, r=79177201
+pos=<-7940696,64406847,65491844>, r=62954392
+pos=<18514021,116278681,67137430>, r=90016641
+pos=<43358506,27845033,68486380>, r=57818557
+pos=<1110894,83500413,68255453>, r=75759354
+pos=<-37948234,63772147,53141588>, r=79976703
+pos=<13559648,85475298,69747661>, r=66777842
+pos=<52847535,100951259,70145575>, r=97414722
+pos=<-21363508,51195381,52333138>, r=50006604
+pos=<42775136,24331657,88882389>, r=81144757
+pos=<-1933203,45916056,85330850>, r=66811316
+pos=<-57987412,55995732,52031150>, r=91128682
+pos=<-42000373,57698338,58535687>, r=83348916
+pos=<-22415966,68748566,55301911>, r=71580898
+pos=<63130941,60546452,58913823>, r=56061251
+pos=<-25360,94955513,32263639>, r=88899014
+pos=<16041791,46748455,54886958>, r=52853925
+pos=<21841806,63659499,51701479>, r=64043047
+pos=<1507336,30781882,86426870>, r=79600758
+pos=<-61462214,51930278,59048201>, r=97555074
+pos=<5596619,62910768,103402603>, r=85831362
+pos=<-17947167,60351558,52786859>, r=56199984
+pos=<8310608,110445624,30715607>, r=97601075
+pos=<57809969,62546762,83913036>, r=77739845
+pos=<-4243002,78023652,59272973>, r=66654140
+pos=<-38346139,46279251,81595137>, r=99125137
+pos=<-39505659,59077659,30772250>, r=93992534
+pos=<70748692,61615798,69299886>, r=75134429
+pos=<-8927983,72196971,41805506>, r=65500828
+pos=<18230519,71253951,55091105>, r=51783470
+pos=<-82741,89299947,70860177>, r=85357733
+pos=<19408526,70959236,391121>, r=77341247
+pos=<-118838868,96481794,83622656>, r=81565538
+pos=<7699857,77112966,58676603>, r=53204091
+pos=<-5285832,98989634,54909145>, r=84299424
+pos=<-9949091,79675756,62952022>, r=77691300
+pos=<6548040,71704033,79332787>, r=69603175
+pos=<41519552,70838659,77663756>, r=63492002
+pos=<24672816,51183711,105057962>, r=56683540
+pos=<26979282,57437475,67725517>, r=91990453
+pos=<-146316585,60113902,86014018>, r=74912650
+pos=<72430683,58332575,69349806>, r=73583276
+pos=<20029551,67957881,114673401>, r=87716194
+pos=<-12896053,72374875,79141839>, r=89527418
+pos=<10238771,77142540,70645372>, r=62663967
+pos=<-3216297,27169332,60070123>, r=61580077
+pos=<-23930209,54633761,66648944>, r=70327317
+pos=<-18679703,21196655,30842395>, r=93170631
+pos=<44655563,9533925,46538296>, r=63469153
+pos=<-59378193,54454082,43217955>, r=96795689
+pos=<24496603,92577304,64368811>, r=57563942
+pos=<-27053938,59501992,52024839>, r=63695171
+pos=<-9529140,74055507,52153025>, r=60852050
+pos=<44555529,104038871,53349626>, r=75414106
+pos=<-14679818,88223002,52168606>, r=80185804
+pos=<4552719,62659754,92650998>, r=75872423
+pos=<-19881238,63944538,24064643>, r=85942719
+pos=<16076790,55601668,101552666>, r=66191930
+pos=<21912528,118540961,52911368>, r=74654179
+pos=<-42123089,64929314,59158052>, r=91325104
+pos=<10936357,81890391,20134023>, r=77001665
+pos=<10351597,9179596,62138956>, r=68070751
+pos=<92774311,53165517,56634384>, r=76044462
+pos=<14950682,78188149,16646479>, r=72772458
+pos=<-36369450,41148166,38468120>, r=83283873
+pos=<78960321,78942802,53919616>, r=85293057
+pos=<-158664912,45952974,29905855>, r=62185933
+pos=<114294274,47756105,53682861>, r=94039744
+pos=<20046552,73002532,57617045>, r=54110780
+pos=<-29832468,53561561,86264939>, r=94773352
+pos=<5152614,124285693,53684633>, r=97932108
+pos=<31373573,67528454,85096814>, r=57468866
+pos=<-34521748,54572314,66408185>, r=80616625
+pos=<21670677,109269914,16882176>, r=96898951
+pos=<-13862893,59818682,65331199>, r=64127296
+pos=<17318835,71965542,106868073>, r=86629159
+pos=<78142676,48758577,56205332>, r=59408131
+pos=<-23340878,51182474,58635784>, r=58273523
+pos=<-26740311,87129579,52453722>, r=91438117
+pos=<4303903,69818029,63437040>, r=54065753
+pos=<3266332,71031490,81452081>, r=74331764
+pos=<13702746,18039813,44354215>, r=50433215
+pos=<-3482754,38377262,76574157>, r=67142882
+pos=<-9228255,63064015,42837554>, r=55636176
+pos=<-50838633,55818579,60038300>, r=91809905
+pos=<12044855,110909031,26804479>, r=98241104
+pos=<3069579,54401690,81614434>, r=58061261
+pos=<-55632341,51473141,61974878>, r=94194739
+pos=<47405039,61876630,72051227>, r=54803065
+pos=<-54699622,62927561,51595043>, r=94336968
+pos=<-5193725,62373908,96721874>, r=89403908
+pos=<39277912,51487063,98292773>, r=62527889
+pos=<28453914,55902735,104745928>, r=62572701
+pos=<70028230,51756434,45557821>, r=50764114
+pos=<6794251,79565242,72837497>, r=70723039
+pos=<-13346572,55208620,19942682>, r=74793897
+pos=<-26551619,52981805,64542889>, r=69190740
+pos=<-43505598,52177986,74471561>, r=95270055
+pos=<-36730243,57166097,70373519>, r=89384321
+pos=<67837280,44038045,5154880>, r=93530016
+pos=<24819569,59550660,112300422>, r=72145934
+pos=<22889616,60439671,109383201>, r=72047709
+pos=<16010141,59272902,95102320>, r=63479459
+pos=<45785695,3672162,40921594>, r=76077574
+pos=<52634264,230093674,55591446>, r=92328001
+pos=<-1093816,65699672,61755421>, r=53663391
+pos=<-2927319,46551949,115336543>, r=97175126
+pos=<9846871,97494787,27660769>, r=86168853
+pos=<14575046,54156478,106441784>, r=71137652
+pos=<3693372,64829888,65085318>, r=51336253
+pos=<-14475986,58191102,40490687>, r=58358086
+pos=<-32625219,54193671,54687567>, r=66620839
+pos=<19841368,112790310,53953991>, r=72017337
+pos=<-36529548,56646542,73106232>, r=91396775
+pos=<21383461,52564742,65263630>, r=69168248
+pos=<-25544951,69296904,55993281>, r=75949615
+pos=<5520910,41049609,87926413>, r=66818890
+pos=<78361286,55145660,70961730>, r=77938767
+pos=<-12502650,52118530,26315830>, r=64486867
+pos=<-8502681,43100643,60553969>, r=51419015
+pos=<30788480,91079544,72453023>, r=67791399
+pos=<-41582270,52471539,51548548>, r=70716745
+pos=<22495328,56368486,39214022>, r=54868649
+pos=<629350,38620684,-5628651>, r=92908951
+pos=<54092772,69401105,92313004>, r=89276951
+pos=<-5909105,43864786,12211016>, r=76363299
+pos=<3912827,52322153,79041627>, r=52565376
+pos=<-58023857,53967358,52040730>, r=89146355
+pos=<-31872996,52197859,61603944>, r=70789344
+pos=<15997340,97237977,68995404>, r=75350443
+pos=<-47277488,55104503,30071304>, r=98492088
+pos=<-8126606,68416175,57612004>, r=59269187
+pos=<-41526057,70666640,40848412>, r=97525664
+pos=<73462661,56792015,64535899>, r=68260624
+pos=<17561494,61650408,18024697>, r=52245702
+pos=<18999409,83239866,79157013>, r=68511878
+pos=<-17147426,82949543,58049486>, r=83260838
+pos=<-18999109,63366752,88314976>, r=95795304
+pos=<22782196,90426553,59952512>, r=52711323
+pos=<3870299,63602471,24263373>, r=61650297
+pos=<-28961118,57302888,47585264>, r=64860112
+pos=<-54015783,52509914,54351945>, r=85992387
+pos=<-31431674,55933418,55746724>, r=68226308
+pos=<6227367,990142,64669121>, r=82914608
+pos=<5035135,38115972,99202791>, r=81514672
+pos=<-33418983,63482456,38640418>, r=84442392
+pos=<-10795967,62940846,61879242>, r=60730704
+pos=<109337482,53196724,58133710>, r=94138173
+pos=<24242369,44107239,101663495>, r=58776882
+pos=<13836970,62942011,18092686>, r=57193751
+pos=<22307447,72298904,83902781>, r=59008632
+pos=<61542152,47395133,73538238>, r=61503948
+pos=<-24075040,59046188,54656470>, r=62892239
+pos=<2709891,16928362,83441813>, r=89266699
+pos=<18108186,51788474,56989142>, r=80851857
+pos=<8783157,59841041,97619446>, r=73792049
+pos=<-11464337,-1808695,45620039>, r=94183197
+pos=<-27362762,61729073,63812346>, r=78018926
+pos=<-16479685,60701430,70404170>, r=72700118
+pos=<18072359,95490781,46478814>, r=57121005
+pos=<22305099,61060570,52457431>, r=91124722
+pos=<-3144103,35052829,41802786>, r=52818565
+pos=<14700849,76137475,4759707>, r=82858288
+pos=<24087216,72433922,86093140>, r=59554341
+pos=<78515636,57323047,62505044>, r=71813766
+pos=<-24840821,74681746,64511653>, r=89148740
+pos=<-23826296,65180883,55787778>, r=69909354
+pos=<75346962,35126022,80923207>, r=94962783
+pos=<17008079,55328336,57579351>, r=53041203
+pos=<-7356211,68676554,73449531>, r=74596693
+pos=<-17162496,73932992,66248811>, r=82458915
+pos=<-136511398,24674918,81631631>, r=52044146
+pos=<17677665,60697644,59711178>, r=87163127
+pos=<-23195799,53013298,81013306>, r=82336819
+pos=<-11747126,98444482,59328815>, r=94634945
+pos=<5844912,56397886,77450074>, r=53117462
+pos=<-34509639,55837799,78666373>, r=94128480
+pos=<5904302,91792190,56962332>, r=67964633
+pos=<-17032381,59374519,60271759>, r=61793041
+pos=<126401,73284278,37689172>, r=61650102
+pos=<13058035,58217638,117787893>, r=88061922
+pos=<13828494,55793337,5715352>, r=62430875
+pos=<-38076711,68063369,58208411>, r=89462874
+pos=<11310783,64077677,47800713>, r=90266880
+pos=<71295692,59864191,53931657>, r=58561571
+pos=<-28401409,54456913,64786142>, r=72758897
+pos=<7099165,104942769,74968888>, r=97926943
+pos=<-13995801,56919587,69332174>, r=65361965
+pos=<-26207717,59423657,75475224>, r=86221043
+pos=<6284415,23177140,26461281>, r=70607154
+pos=<215192914,61945607,54981371>, r=57239098
+pos=<570884,53692018,83080045>, r=61315597
+pos=<82035008,70009886,45451263>, r=81130714
+pos=<56491702,68916341,58674725>, r=57552984
+pos=<41387757,67423761,76216212>, r=58497788
+pos=<-13813748,54323195,39213241>, r=55105070
+pos=<-6283377,38226161,58990807>, r=52511441
+pos=<-26649360,45588196,46247152>, r=61344017
+pos=<-14376863,65982584,89020987>, r=94494818
+pos=<-3323474,29138548,66137005>, r=65784968
+pos=<58981819,73400065,67082387>, r=72934311
+pos=<-24602073,59590457,54064654>, r=63371721
+pos=<36151757,93220459,79425935>, r=82268360
+pos=<87119215,67120469,66106290>, r=93816049
+pos=<-48564056,44611797,43001926>, r=87480464
+pos=<-184831138,45972224,52522771>, r=50154575
+pos=<-15029762,39315381,53334088>, r=54511484
+pos=<-63442720,56809824,159032480>, r=72599634
+pos=<60777021,86337479,55149072>, r=75733594
+pos=<92444973,55329391,26343979>, r=95967763
+pos=<-21559036,59753239,49501583>, r=57992092
+pos=<9746816,62098999,110099681>, r=87566354
+pos=<10180395,73435400,84209682>, r=72579076
+pos=<9869506,63811097,-18666569>, r=98789533
+pos=<-13838113,59406279,58751626>, r=57110750
+pos=<64073559,55987760,56938593>, r=50470036
+pos=<122002455,-29528127,89467426>, r=76860378
+pos=<933085,106082663,68426376>, r=98690342
+pos=<-2675758,105102702,49288669>, r=84671159
+pos=<21148930,85952702,88820154>, r=78738465
+pos=<-20327181,54015158,64694298>, r=64151435
+pos=<1808162,74371192,54758455>, r=52436239
+pos=<42135947,69930651,489911>, r=86113750
+pos=<-12374999,90510715,64743102>, r=92743325
+pos=<-4294480,65880302,57264170>, r=52553487
+pos=<-11380714,79284188,78361214>, r=94140720
+pos=<-18741699,56843996,93948119>, r=94648195
+pos=<-15112925,57666102,84178102>, r=82071526
+pos=<48905117,61145192,67255382>, r=50775815
+pos=<22577383,65607571,119314309>, r=87458960
+pos=<15014461,96714632,60980637>, r=67795269
+pos=<47428343,39689983,86775385>, r=68333041
+pos=<-28078465,61095714,45936858>, r=69419061
+pos=<-23524262,42214714,78362442>, r=85135301
+pos=<11059849,57287793,87820074>, r=59162425
+pos=<3565314,29345958,18633562>, r=74985191
+pos=<66387470,53690251,35786796>, r=58828200
+pos=<3116731,79442759,52841036>, r=54281677
+pos=<-19604720,61128015,61910900>, r=67758297
+pos=<57308392,70794674,32711619>, r=69928478
+pos=<12845664,78795191,27148691>, r=64982288
+pos=<80886361,60430853,61195181>, r=75982584
+pos=<23065226,55203444,121115562>, r=78368206
+pos=<-1767172,87142211,34592050>, r=80499249
+pos=<13751120,55697434,59007891>, r=91399024
+pos=<-21912028,56562619,52196254>, r=55785461
+pos=<24434582,75675617,15708816>, r=61713746
+pos=<-752271,77413609,96554782>, r=99835052
+pos=<17710144,89394902,70841612>, r=67640873
+pos=<-29164492,60989567,53774351>, r=69042803
+pos=<65721828,57739878,71302517>, r=68234456
+pos=<51294874,74255591,89905897>, r=88926704
+pos=<122447102,164387501,54549178>, r=86167801
+pos=<-2233409,26924269,59265799>, r=60037952
+pos=<3711632,67371720,79918709>, r=68693447
+pos=<-39313716,47720889,55898562>, r=72954666
+pos=<-29988637,48099743,66238336>, r=73590241
+pos=<7092311,93600756,55598390>, r=67221312
+pos=<94926391,52295037,52035414>, r=72727059
+pos=<58322954,64494143,14681677>, r=82672475
+pos=<-30606897,52115517,55916025>, r=63752817
+pos=<33683678,52234183,65402997>, r=77026018
+pos=<2893581,30919431,63800326>, r=55450312
+pos=<-10073625,68787754,42712060>, r=62330691
+pos=<-13226028,58548045,37442239>, r=60513212
+pos=<13341702,123874963,58254419>, r=93902154
+pos=<682234,97911898,48242929>, r=75168144
+pos=<18722317,56674681,90606505>, r=53673250
+pos=<90077460,56726877,60520864>, r=80795256
+pos=<11265077,100200311,67941274>, r=81990966
+pos=<10217162,21958720,59276183>, r=52563693
+pos=<82134787,48069587,56864579>, r=64748411
+pos=<20010404,57114507,56739832>, r=95448884
+pos=<298850,62853941,18970195>, r=69766264
+pos=<-34773033,48567904,55236028>, r=66904149
+pos=<3075957,26623236,63055783>, r=58819651
+pos=<16457975,57122257,70087795>, r=86513850
+pos=<90103819,53683092,69699596>, r=86956610
+pos=<-17689799,58550974,60782619>, r=62138075
+pos=<9338392,37129212,14441408>, r=65620968
+pos=<10278172,104026582,58505957>, r=77369117
+pos=<-36648669,53313763,57070182>, r=72147006
+pos=<3644850,75873038,60944199>, r=58286859
+pos=<-55768152,64438408,48348049>, r=98040163
+pos=<23966354,61323517,66723852>, r=63170986
+pos=<83907332,75993772,60160048>, r=93531174
+pos=<-49160977,51421296,51777959>, r=77474735
+pos=<-19554495,83185945,68889433>, r=96744324
+pos=<4083844,61211766,78812607>, r=61054908
+pos=<-28740891,76035877,59783586>, r=89674749
+pos=<1477390,92187674,62374371>, r=78199589
+pos=<27555445,100617770,28346459>, r=74363771
+pos=<61157488,92524005,67778649>, r=94930233
+pos=<44509108,57672466,-14457614>, r=91176410
+pos=<-49301441,57583231,64690420>, r=96689478
+pos=<6254148,63730492,98438208>, r=81029012
+pos=<-65249177,51697848,46584216>, r=96544404
+pos=<-18251430,74523624,66136947>, r=84026579
+pos=<-38032746,59650424,49516347>, r=74348754
+pos=<1025165,71664650,57908627>, r=53662668
+pos=<-47108245,52145065,40842431>, r=84592249
+pos=<-48768564,66546374,54932017>, r=95361722
+pos=<-21610139,44024485,61168243>, r=64217401
+pos=<10087091,107246375,62170269>, r=84443931
+pos=<51033289,57777223,79683838>, r=61964875
+pos=<-1515410,54504740,89312112>, r=70446642
+pos=<6955077,59969833,119903931>, r=98033598
+pos=<-22531794,48719765,58184485>, r=57459504
+pos=<-5094294,59314583,76395596>, r=65919004
+pos=<76187323,83948474,38225082>, r=96447759
+pos=<-21294072,54806425,61700229>, r=62915134
+pos=<22543466,42317235,91615254>, r=52217555
+pos=<28314112,89701628,91872856>, r=83358628
+pos=<-4228579,64941150,75051735>, r=69335866
+pos=<50966330,77605764,84252544>, r=86294744
+pos=<-6737743,107415917,54338071>, r=93606463
+pos=<23145972,65757098,91211071>, r=58936588
+pos=<19007479,87503572,82855617>, r=76466297
+pos=<-14765231,68331156,77316912>, r=85528263
+pos=<-949424,70946763,65236949>, r=62247745
+pos=<-32803143,52738611,60060225>, r=70716401
+pos=<66822816,56906431,65665714>, r=62865107
+pos=<9680974,91968172,80327678>, r=87729365
+pos=<8343767,56768063,52291322>, r=57842575
+pos=<38074555,75932657,94592379>, r=82069623
+pos=<-19059954,72759195,75265940>, r=92199655
+pos=<17867950,85793108,72307124>, r=65346674
+pos=<4765057,109187888,51558662>, r=81095880
+pos=<-18597182,56282648,71097542>, r=71091807
+pos=<-53544594,48732733,55083403>, r=85358259
+pos=<-14162311,76553349,71226487>, r=87056545
+pos=<-47205943,48535879,60516002>, r=84649054
+pos=<-51865413,61371035,54334719>, r=92685802
+pos=<-10560072,67389213,73620186>, r=76683871
+pos=<18319316,72506183,-3063602>, r=83431987
+pos=<-3588999,72423545,64377299>, r=65504222
+pos=<11888209,56845438,49310444>, r=80146809
+pos=<21726851,54782153,26405131>, r=94721944
+pos=<-21291084,56654299,74535249>, r=77595146
+pos=<936181,103600381,67588131>, r=95367106
+pos=<-13782512,64133232,74692014>, r=77722142
+pos=<-36410139,62335051,70838270>, r=94697845
+pos=<-13219359,55905482,102146596>, r=96385842
+pos=<7982302,72795551,71059219>, r=60987001
+pos=<14814723,60392314,88790377>, r=59482349
+pos=<-46730374,59535255,39966466>, r=92480718
+pos=<-12683668,63360272,34527358>, r=67698165
+pos=<34918460,61167889,51688378>, r=99658139
+pos=<65522795,5172637,52395633>, r=86564425
+pos=<21631208,32413943,104746960>, r=76164801
+pos=<-11979634,65490331,75294207>, r=77878552
+pos=<6957102,71949660,103009238>, r=93116178
+pos=<16501855,87396298,22166944>, r=74908909
+pos=<-3903540,38079649,95576440>, r=86863330
+pos=<20206463,69766028,75938015>, r=50611973
+pos=<4305930,14987890,73560026>, r=79729291
+pos=<-7564317,16601205,60800573>, r=77226681
+pos=<78960025,77022559,51882781>, r=81335395
+pos=<-2691592,55376094,83330088>, r=66512406
+pos=<-47250869,37081123,43153632>, r=93546119
+pos=<8536338,15031904,58255252>, r=60150014
+pos=<60376108,86278760,75828759>, r=95953668
+pos=<-6882477,55533881,67317545>, r=54848322
+pos=<9678384,78681532,76529906>, r=70647662
+pos=<10075511,91722489,53804756>, r=60566307
+pos=<21285284,59022109,91758839>, r=54610451
+pos=<-37992414,58278309,25526337>, r=96925765
+pos=<-2709806,59275400,67729392>, r=54828981
+pos=<7011597,20313939,78973760>, r=77111391
+pos=<-52588778,60847764,58672703>, r=97223909
+pos=<-15256628,22229514,41271494>, r=78285813
+pos=<34156359,101451279,54422671>, r=63500492
+pos=<21509300,111056381,53419268>, r=68080733
+pos=<14593452,57851278,-19237975>, r=88677170
+pos=<1781540,75186457,59902472>, r=58421778
+pos=<-33041189,51450575,51533175>, r=61139326
+pos=<15782750,66980930,90439887>, r=66752517
+pos=<-36107313,40071259,65952487>, r=87451603
+pos=<-14638698,63394833,75249799>, r=78397768
+pos=<-22832073,77228624,62320318>, r=87495607
+pos=<87393628,62821666,29411048>, r=95341264
+pos=<-16740099,42436581,56244211>, r=56010749
+pos=<20445816,54943259,60909642>, r=73012739
+pos=<15983434,51447682,96599706>, r=57178341
+pos=<-1059151,70062397,74572375>, r=70808526
+pos=<-35739090,59134133,40541874>, r=80512741
+pos=<22868206,41119100,92637902>, r=54114178
+pos=<13457096,20227235,89352457>, r=81131188
+pos=<53583940,59655001,69818825>, r=56527814
+pos=<37367140,55788282,41622861>, r=90197118
+pos=<12409098,92091021,58284823>, r=63081300
diff --git a/2018/src/day23.rs b/2018/src/day23.rs
new file mode 100644
index 0000000..6246ee9
--- /dev/null
+++ b/2018/src/day23.rs
@@ -0,0 +1,492 @@
+use std::io;
+use std::io::{BufRead, Write};
+use std::cmp;
+use std::process::{Command, Stdio};
+use rand::prelude::*;
+
+const LARGE: i64 = i64::max_value() / 16;
+
+#[allow(dead_code)]
+fn leq3<T: Ord>(a: T, b: T, c: T) -> bool {
+ a <= b && b <= c
+}
+
+#[derive(Clone, PartialEq, Eq, Debug)]
+struct Pos { x: i64, y: i64, z: i64 }
+
+impl Pos {
+ fn new(x: i64, y: i64, z: i64) -> Self {
+ Pos { x, y, z }
+ }
+
+ fn new_v(v: i64) -> Self {
+ Pos::new(v, v, v)
+ }
+
+ #[used]
+ fn dist(&self, b: &Pos) -> i64 {
+ (self.x - b.x).abs() + (self.y - b.y).abs() + (self.z - b.z).abs()
+ }
+
+ fn distf(&self, b: &FPos) -> f64 {
+ (self.x as f64 - b.x).abs() + (self.y as f64 - b.y).abs() + (self.z as f64 - b.z).abs()
+ }
+
+ #[used]
+ fn dot(&self, b: &Pos) -> i64 {
+ self.x * b.x + self.y * b.y + self.z * b.z
+ }
+
+ #[used]
+ fn add(&self, b: &Pos) -> Pos {
+ Pos::new(self.x + b.x, self.y + b.y, self.z + b.z)
+ }
+
+ fn max(&self, b: &Pos) -> Pos {
+ Pos::new(cmp::max(self.x, b.x), cmp::max(self.y, b.y), cmp::max(self.z, b.z))
+ }
+
+ fn min(&self, b: &Pos) -> Pos {
+ Pos::new(cmp::min(self.x, b.x), cmp::min(self.y, b.y), cmp::min(self.z, b.z))
+ }
+}
+
+#[derive(Debug)]
+struct Bot {
+ pos: Pos,
+ rad: i64,
+}
+
+fn parse_bot(line: &str) -> Bot {
+ let mut numbers = vec![0];
+ let mut multiplier = 1;
+
+ for c in line.chars() {
+ if c == ',' {
+ numbers.push(0);
+ multiplier = 1;
+ } else if c == '-' {
+ multiplier = -1;
+ } else if let Some(dig) = c.to_digit(10) {
+ let last = numbers.last_mut().unwrap();
+ *last = *last * 10 + multiplier * dig as i64;
+ }
+ }
+
+ assert!(numbers.len() == 4);
+ Bot {
+ pos: Pos { x: numbers[0], y: numbers[1], z: numbers[2] },
+ rad: numbers[3],
+ }
+}
+
+#[derive(Clone, PartialEq, Eq, Debug)]
+struct Intersection {
+ // If p is any point inside the bounds, then order the 8 planes by intersection with the rays:
+ // <(1, 1, 1)>, <(1, 1, -1)>, <(1, -1, 1)>, <(1, -1, -1)>, <(-1, 1, 1)>, <(-1, 1, -1)>, <(-1, -1, 1)>, <(-1, -1, -1)>
+ // Then represent a plane by the x-coordinate of its intersection with the x-axis.
+ // All bounds are inclusive.
+ bounds: [i64; 8],
+}
+
+impl Intersection {
+ fn all() -> Self {
+ let pos = LARGE;
+ let neg = -LARGE;
+ Self { bounds: [pos, pos, pos, pos, neg, neg, neg, neg] }
+ }
+
+ #[used]
+ fn empty() -> Self {
+ let pos = LARGE;
+ let neg = -LARGE;
+ Self { bounds: [neg, neg, neg, neg, pos, pos, pos, pos] }
+ }
+
+ fn is_empty(&self) -> bool {
+ self.bounds[0] < self.bounds[7]
+ || self.bounds[1] < self.bounds[6]
+ || self.bounds[2] < self.bounds[5]
+ || self.bounds[3] < self.bounds[4]
+ }
+
+ fn from_bot(bot: &Bot) -> Self {
+ let pos = bot.pos.add(&Pos::new(bot.rad, 0, 0));
+ let neg = bot.pos.add(&Pos::new(-bot.rad, 0, 0));
+
+ let res = Self {
+ bounds: [
+ pos.dot(&Pos::new(1, 1, 1)),
+ pos.dot(&Pos::new(1, 1, -1)),
+ pos.dot(&Pos::new(1, -1, 1)),
+ pos.dot(&Pos::new(1, -1, -1)),
+ neg.dot(&Pos::new(1, -1, -1)),
+ neg.dot(&Pos::new(1, -1, 1)),
+ neg.dot(&Pos::new(1, 1, -1)),
+ neg.dot(&Pos::new(1, 1, 1)),
+ ]
+ };
+
+ if res.bounds[0] - res.bounds[7] != 2 * bot.rad
+ || res.bounds[1] - res.bounds[6] != 2 * bot.rad
+ || res.bounds[2] - res.bounds[5] != 2 * bot.rad
+ || res.bounds[3] - res.bounds[4] != 2 * bot.rad {
+ println!("bot={:?}", bot);
+ println!("bounds={:?}", res.bounds);
+ assert!(false);
+ }
+
+ res
+ }
+
+ fn intersection(&self, o: &Self) -> Self {
+ Self {
+ bounds: [
+ cmp::min(self.bounds[0], o.bounds[0]),
+ cmp::min(self.bounds[1], o.bounds[1]),
+ cmp::min(self.bounds[2], o.bounds[2]),
+ cmp::min(self.bounds[3], o.bounds[3]),
+ cmp::max(self.bounds[4], o.bounds[4]),
+ cmp::max(self.bounds[5], o.bounds[5]),
+ cmp::max(self.bounds[6], o.bounds[6]),
+ cmp::max(self.bounds[7], o.bounds[7]),
+ ]
+ }
+ }
+
+ fn dist_origin(&self) -> i64 {
+ println!("{:?}", self);
+ let pts = self.all_points();
+ println!("{} points in self", pts.len());
+ let res = pts.iter().map(|p| p.dist(&Pos::new(0, 0, 0))).min().unwrap();
+ println!("{}", res);
+ res
+ }
+
+ fn contains(&self, pos: &Pos) -> bool {
+ leq3(self.bounds[7], pos.dot(&Pos::new(1, 1, 1)), self.bounds[0])
+ && leq3(self.bounds[6], pos.dot(&Pos::new(1, 1, -1)), self.bounds[1])
+ && leq3(self.bounds[5], pos.dot(&Pos::new(1, -1, 1)), self.bounds[2])
+ && leq3(self.bounds[4], pos.dot(&Pos::new(1, -1, -1)), self.bounds[3])
+ }
+
+ fn all_points(&self) -> Vec<Pos> {
+ (self.bounds[5] + self.bounds[6] ..= self.bounds[1] + self.bounds[2]).map(move |p1| {
+ (self.bounds[6] + self.bounds[7] - p1 ..= self.bounds[0] + self.bounds[1] - p1).map(move |p2| {
+ (-self.bounds[3] + p1 - p2 ..= -self.bounds[4] + p1 - p2).map(move |p3| {
+ println!("candidate {:?}", Pos::new(p1, p2, p3));
+ Pos::new(p1, p2, p3)
+ })
+ }).flatten()
+ }).flatten().filter(|p| self.contains(p)).collect()
+ }
+}
+
+#[allow(dead_code)]
+fn backtrack<F: Fn(&Intersection) -> i64>(bots: &[Intersection], selected: &[usize], max_count: &mut i64, min_dist: &mut i64, count: i64, inter: Intersection, dist_func: &F) {
+ // println!("backtrack: max_count={} min_dist={} count={}", max_count, min_dist, count);
+
+ if count > *max_count {
+ *max_count = count;
+ *min_dist = dist_func(&inter);
+ // println!("New max count: {} at dist {}; inter={:?}", count, *min_dist, inter);
+ } else if count == *max_count {
+ let d = dist_func(&inter);
+ if d < *min_dist {
+ *min_dist = d;
+ // println!(" New min dist: {}", d);
+ }
+ }
+
+ let rest = selected.iter().map(|&i| i).filter(|&i| !inter.intersection(&bots[i]).is_empty()).collect::<Vec<_>>();
+ // println!("rest.len() = {}", rest.len());
+
+ if rest.len() as i64 + count < *max_count {
+ return;
+ }
+
+ if rest.len() == 0 {
+ return;
+ }
+
+ let inter2 = inter.intersection(&bots[rest[0]]);
+ backtrack(bots, &rest[1..], max_count, min_dist, count + 1, inter2, dist_func);
+ backtrack(bots, &rest[1..], max_count, min_dist, count, inter, dist_func);
+}
+
+#[allow(dead_code)]
+fn part2_via_backtracking(bots: &[Bot]) -> i64 {
+ let inters = bots.iter().map(|b| Intersection::from_bot(&b)).collect::<Vec<_>>();
+ let mut max_count = 0;
+ let mut min_dist = LARGE;
+ backtrack(&inters, &(0..inters.len()).collect::<Vec<_>>(), &mut max_count, &mut min_dist, 0, Intersection::all(), &|_| 0);
+ min_dist = LARGE;
+ backtrack(&inters, &(0..inters.len()).collect::<Vec<_>>(), &mut max_count, &mut min_dist, 0, Intersection::all(), &|i| i.dist_origin());
+ min_dist
+}
+
+fn partial_min<'a, T: PartialOrd>(a: &'a T, b: &'a T) -> Option<&'a T> {
+ match a.partial_cmp(b) {
+ Some(cmp::Ordering::Less) => Some(a),
+ Some(cmp::Ordering::Equal) => Some(a),
+ Some(cmp::Ordering::Greater) => Some(b),
+ None => None
+ }
+}
+
+fn partial_max<'a, T: PartialOrd>(a: &'a T, b: &'a T) -> Option<&'a T> {
+ match a.partial_cmp(b) {
+ Some(cmp::Ordering::Less) => Some(b),
+ Some(cmp::Ordering::Equal) => Some(a),
+ Some(cmp::Ordering::Greater) => Some(a),
+ None => None
+ }
+}
+
+#[derive(Clone, PartialEq, Debug)]
+struct FPos { x: f64, y: f64, z: f64 }
+
+impl FPos {
+ fn new(x: f64, y: f64, z: f64) -> Self {
+ Self { x, y, z }
+ }
+
+ fn from_pos(pos: &Pos) -> Self {
+ Self { x: pos.x as f64, y: pos.y as f64, z: pos.z as f64 }
+ }
+
+ fn add(&self, b: &Self) -> Self {
+ Self::new(self.x + b.x, self.y + b.y, self.z + b.z)
+ }
+
+ fn scale(&self, b: f64) -> Self {
+ Self::new(self.x * b, self.y * b, self.z * b)
+ }
+
+ fn max(&self, b: &Self) -> Self {
+ Self::new(*partial_max(&self.x, &b.x).unwrap(), *partial_max(&self.y, &b.y).unwrap(), *partial_max(&self.z, &b.z).unwrap())
+ }
+
+ fn min(&self, b: &Self) -> Self {
+ Self::new(*partial_min(&self.x, &b.x).unwrap(), *partial_min(&self.y, &b.y).unwrap(), *partial_min(&self.z, &b.z).unwrap())
+ }
+}
+
+fn dist_weight(bot: &Bot, pos: &FPos) -> f64 {
+ let d = bot.pos.distf(pos);
+ if d <= bot.rad as f64 {
+ 1.0
+ } else {
+ let x = d - bot.rad as f64;
+ 0.0009 / (x + 1.0)
+ }
+}
+
+fn score_function(bots: &[Bot], pos: &FPos) -> f64 {
+ bots.iter().map(|bot| dist_weight(bot, pos)).sum()
+}
+
+fn random_point_in_box(minpt: &FPos, maxpt: &FPos) -> FPos {
+ FPos::new(random::<f64>() * (maxpt.x - minpt.x) + minpt.x,
+ random::<f64>() * (maxpt.y - minpt.y) + minpt.y,
+ random::<f64>() * (maxpt.z - minpt.z) + minpt.z)
+}
+
+fn random_point() -> FPos {
+ random_point_in_box(&FPos::new(-1.0, -1.0, -1.0), &FPos::new(1.0, 1.0, 1.0))
+}
+
+fn improve(bots: &[Bot], pos: FPos, heat: f64) -> (FPos, f64) {
+ let mut best_pos = pos.clone();
+ let mut best_score = score_function(bots, &pos);
+
+ for _ in 0..10 {
+ let pt = pos.add(&random_point().scale(heat));
+ let sc = score_function(bots, &pt);
+ if sc > best_score {
+ best_score = sc;
+ best_pos = pt;
+ }
+ }
+
+ (best_pos, best_score)
+}
+
+fn containing_box(pts: &[FPos]) -> (FPos, FPos) {
+ let minpt = pts.iter().fold(FPos::new(1.0e34, 1.0e34, 1.0e34), |p1, p| p1.min(p));
+ let maxpt = pts.iter().fold(FPos::new(-1.0e34, -1.0e34, -1.0e34), |p1, p| p1.max(p));
+ (minpt, maxpt)
+}
+
+#[allow(dead_code)]
+fn anneal_maximum(bots: &[Bot]) -> FPos {
+ let minpt = FPos::from_pos(&bots.iter().fold(Pos::new_v(LARGE), |p1, bot| p1.min(&bot.pos)));
+ let maxpt = FPos::from_pos(&bots.iter().fold(Pos::new_v(-LARGE), |p1, bot| p1.max(&bot.pos)));
+
+ let num_points = 100;
+
+ let mut pts = Vec::new();
+ for _ in 0..num_points {
+ pts.push(random_point_in_box(&minpt, &maxpt))
+ }
+
+ let mut heat = 1000000.0;
+ for iter in 0..16000 {
+ let mut best_score = 0.0;
+
+ for i in 0..pts.len() {
+ match improve(bots, pts[i].clone(), heat) {
+ (p, s) => {
+ pts[i] = p;
+ if s > best_score {
+ best_score = s;
+ }
+ }
+ }
+ }
+
+ if iter % 100 == 0 {
+ println!("iter={} heat={} best_score={} {:?}", iter, heat, best_score, containing_box(&pts));
+ heat *= 0.9;
+ if heat < 1.0 { heat = 1.0; }
+
+ pts.sort_by(|a, b| score_function(bots, b).partial_cmp(&score_function(bots, a)).unwrap());
+ pts.truncate(num_points / 2);
+
+ for _ in 0..num_points / 2 {
+ pts.push(random_point_in_box(&minpt, &maxpt));
+ }
+ }
+ }
+
+ pts.iter().max_by_key(|pt| score_function(bots, &pt) as i64).unwrap().clone()
+}
+
+fn build_smtlib(bots: &[Bot]) -> String {
+ let mut res = String::new();
+ res.push_str("(define-fun abs ((x Int)) Int (ite (< x 0) (- x) x))\n");
+
+ res.push_str("(declare-const x Int)\n");
+ res.push_str("(declare-const y Int)\n");
+ res.push_str("(declare-const z Int)\n");
+ res.push_str("(declare-const nrange Int)\n");
+ res.push_str("(declare-const distorigin Int)\n");
+
+ for i in 0..bots.len() {
+ res.push_str(&format!("(declare-const eq{} Int)\n", i));
+ }
+
+ for i in 0..bots.len() {
+ res.push_str(&format!("(assert (= eq{} (ite (<= (+ (abs (- x {})) (abs (- y {})) (abs (- z {}))) {}) 1 0)))\n",
+ i, bots[i].pos.x, bots[i].pos.y, bots[i].pos.z, bots[i].rad));
+ }
+
+ res.push_str("(assert (= nrange (+\n");
+ for i in 0..bots.len() {
+ res.push_str(&format!(" (ite (<= (+ (abs (- x {})) (abs (- y {})) (abs (- z {}))) {}) 1 0)\n",
+ bots[i].pos.x, bots[i].pos.y, bots[i].pos.z, bots[i].rad));
+ }
+ res.push_str(")))\n");
+
+ res.push_str("(assert (= distorigin (+ (abs x) (abs y) (abs z))))\n");
+ res.push_str("(maximize nrange)\n");
+ res.push_str("(minimize distorigin)\n");
+ res.push_str("(check-sat)\n");
+ // res.push_str("(get-model)\n");
+ res.push_str("(eval distorigin)\n");
+
+ res
+}
+
+#[allow(dead_code)]
+fn build_cplex(bots: &[Bot]) -> String {
+ let minpt = &bots.iter().fold(Pos::new_v(LARGE), |p1, bot| p1.min(&bot.pos));
+
+ let isign = |c, case| if case & (1 << c) == 0 { "" } else { "-" };
+ let sign = |c, case| if case & (1 << c) == 0 { "+" } else { "-" };
+ let mul = |c, case, n: i64| if case & (1 << c) == 0 { n } else { -n };
+
+ let mut res = String::new();
+ res.push_str("maximize 300000000 nrange - distorigin\n");
+
+ res.push_str("subject to\n");
+ for i in 0..bots.len() {
+ for case in 0..8 {
+ // bC = bot.C - min.C
+ // ±(x - bx) + ±(y - by) + ±(z - bz) <= rad + 1e12 (1 - ei)
+ // ±(x + y + z) - ±(bx + by + bz) <= rad + 1e12 - 1e12 ei
+ // ±(x + y + z) - ±(bx + by + bz) + 1e12 ei <= rad + 1e12
+ // ±x ± y ± z + 1e12 ei <= rad + 1e12 ± bx ± by ± bz
+ res.push_str(&format!(" {}x {} y {} z + 1000000000000 e{} <= {}\n",
+ isign(0, case), sign(1, case), sign(2, case), i,
+ bots[i].rad + 1000000000000 + mul(0, case, bots[i].pos.x - minpt.x) + mul(1, case, bots[i].pos.x - minpt.x) + mul(2, case, bots[i].pos.x - minpt.x)));
+ }
+ }
+
+ res.push_str(" nrange");
+ for i in 0..bots.len() {
+ res.push_str(&format!(" - e{}", i));
+ }
+ res.push_str(" = 0\n");
+
+ for case in 0..8 {
+ // ±(x - mx) + ±(y - my) + ±(z - mz) <= distorigin
+ // ±(x + y + z) - ±(mx + my + mz) <= distorigin
+ // ±x ± y ± z <= distorigin - ±(mx + my + mz)
+ // ±x ± y ± z - distorigin <= - ±mx - ±my - ±mz
+ res.push_str(&format!(" {}x {} y {} z - distorigin <= {}\n",
+ isign(0, case), sign(1, case), sign(2, case),
+ -mul(0, case, minpt.x) - mul(1, case, minpt.y) - mul(2, case, minpt.z)));
+ }
+
+ res.push_str("bounds\n");
+ res.push_str(" 0 <= nrange\n");
+ res.push_str(" 0 <= distorigin\n");
+ res.push_str(" 0 <= x\n");
+ res.push_str(" 0 <= y\n");
+ res.push_str(" 0 <= z\n");
+
+ res.push_str("general\n");
+ res.push_str(" nrange distorigin x y z\n");
+
+ res.push_str("binary\n");
+ for i in 0..bots.len() {
+ res.push_str(&format!(" e{}", i));
+ }
+ res.push_str("\n");
+
+ res.push_str("end\n");
+
+ res
+}
+
+pub fn main<T: BufRead>(reader: T) -> io::Result<(String, String)> {
+ let bots = reader.lines().map(|l| parse_bot(&l.unwrap())).collect::<Vec<_>>();
+
+ // println!("{}", build_smtlib(&bots));
+ // println!("{}", build_cplex(&bots));
+
+ let largest = (0..bots.len()).max_by_key(|&i| bots[i].rad).unwrap();
+
+ let part1 = bots.iter().filter(|bot| bot.pos.dist(&bots[largest].pos) <= bots[largest].rad).count();
+
+ // let part2 = anneal_maximum(&bots);
+ // let part2 = part2_via_backtracking(&bots);
+
+ let mut child = Command::new("z3")
+ .arg("-in")
+ .stdin(Stdio::piped())
+ .stdout(Stdio::piped())
+ .spawn()
+ .unwrap();
+
+ child.stdin.as_mut().unwrap().write_all(build_smtlib(&bots).as_bytes()).unwrap();
+
+ let output = String::from_utf8(child.wait_with_output().unwrap().stdout).unwrap();
+
+ let part2 = output.lines().last().unwrap().to_string();
+
+ // Ok((part1.to_string(), String::new()))
+
+ Ok((part1.to_string(), part2))
+}
diff --git a/2018/src/main.rs b/2018/src/main.rs
index c45b084..aac9302 100644
--- a/2018/src/main.rs
+++ b/2018/src/main.rs
@@ -28,8 +28,9 @@ mod day19;
mod day20;
mod day21;
mod day22;
+mod day23;
-static NUM_DAYS: i32 = 22;
+static NUM_DAYS: i32 = 23;
fn day_switch<T: BufRead>(day: i32, reader: T) -> io::Result<(String, String)> {
match day {
@@ -55,6 +56,7 @@ fn day_switch<T: BufRead>(day: i32, reader: T) -> io::Result<(String, String)> {
20 => day20::main(reader),
21 => day21::main(reader),
22 => day22::main(reader),
+ 23 => day23::main(reader),
_ => Err(Error::new(ErrorKind::Other, "Invalid day"))
}
}