(* This file accompanies the paper "Frobenius classes in alternating groups",
by David P. Roberts.  The main command is FrobA, which computes not only 
standard factorization partitions for a given polynomial pol, but also some
associated signs, these signs being what the paper is about. *)

(* In FrobA, pol has to be a polynomial in the variable x 
with integer coefficients and square discriminant.   The 
inputs _start_ and _stop_ index the first and last prime at which computations
are to be done.

As an example,

In[1] := FrobA[x^7 - 7 x + 3,1,10]

returns

Out[1]//TableForm= 2   7 *
                   3   *
                   5   7 -
                   7   *
                   11  7 -
                   13  4 2 1
                   17  3 3 1
                   19  3 3 1
                   23  3 3 1
                   29  7 +

At the primes 5, 11, and 29 the factor partition 7 is ambiguous and FrobA
returns the factor partition and also the associated sign.  At the primes,
13, 17, 19, and 23, the factor partition is not ambiguous and FrobA
just returns it.  The primes 3 and 7 divide the polynomial discriminant,
so FrobA just returns "*".  The star at the prime 2 indicates there is a sign
to be computed; however FrobA does not compute signs at p=2. 

Note that we have tried only to keep the code short.  FrobA is not at 
all optimized for run-time.
*)

FrobA[pol_,start_,stop_] := Module[{d},
d = Sqrt[disc[pol]];
TableForm[
Table[{Prime[k],FrobA1[pol,Prime[k],d]},{k,start,stop}],
TableDirections->{Column,Row,Row},TableSpacing->{0,2,1}]]

(*The next block of commands are called by FrobA.  The commands
disc and factorpattern are
of independent interest *)

FrobA1[pol_,p_,d_] := Module[{fp},
fp = factorpattern[pol,p];
Which[IntegerQ[d/p],{"*"},
ambig[fp] && p==2,Join[fp,{"*"}],
ambig[fp],Join[fp,{sign[pol,p,d]}],
True,fp]]

centerform[x_,p_] := Module[{posform},
posform = Mod[x,p];
If[posform>p/2,posform-p,posform]]

semidisc[pol_,p_] := Module[{exp,root,d},
exp = Exponent[pol,x];
ar = AlgebraicRules[pol==0,x];
root[1] = x;
Table[root[i] = PolynomialMod[root[i-1]^p /. ar,p],{i,2,exp}];
PolynomialMod[
Product[root[i] - root[j],{i,1,exp-1},{j,i+1,exp}] /. ar,p]]

sign[pol_,p_,d_] := 
Module[{fl},
fl = Transpose[Drop[FactorList[pol,Modulus->p],1]][[1]];
centerform[PowerMod[d,-1,p]*
Product[semidisc[fl[[i]],p],{i,1,Length[fl]}]*
Product[Resultant[fl[[i]],fl[[j]],x],
{i,1,Length[fl]-1},{j,i+1,Length[fl]}],p]] //nice

nice[1] = "+"

nice[-1]="-"

ambig[part_] := 
OddQ[Apply[Times,part]] && Length[part]==Length[Union[part]]

disc[pol_] := If[Mod[Exponent[pol, x], 4] <= 1, Resultant[pol, D[pol, x], x], 
    -Resultant[pol, D[pol, x], x]]
 
factorpattern[pol_,p_] := Module[{fl,tab},
fl = FactorList[pol,Modulus -> p];
tab = Table[Exponent[fl[[k,1]],x],{k,1,Length[fl]}] //Sort //Reverse;
Select[tab,# > 0 &]]

(* Finally, we present rminus and rplus, two polynomials figuring into
Section 6 of the paper.  The command
factorpattern[rminus,11] gets one started in 
making the final comparison of Section 6.*)

rminus = 
19521329636677221646902778344500731950886918796853808436432879209617955572786\
21588514339758940612510372636373574511605183066625319201419941119329185631635\
48664104971087244224797159462614727695802531229132773577678405592810612253152\
546744092987560403279235349389757751147208686954449207296 - 
 4304507049516663451918830746954451094165503041479535451774899739056076010613\
40527750186577218498961399831837842218677791810183289815200869271102474506345\
59432298128947772182579553389410023096676045232319177361604827296419417787334\
87339864898686456868157523790754940386941430190770749440*x - 
 6006031177062804277921898210878420415580274183500624554684459360322374215055\
03949087826040583791612894767348274420332840900174969601307312398204126227376\
15693500175083826710196944565367099965608099860585858605235807666547176022064\
1328261155133363894118910830395178905129813313549500416*x^2 - 
 1162042262387371551191893677052571598727896077463299408234686777314716505685\
95502872916948787001592554334652330062375063329769016260528197236289964934407\
29604858348081100880707738062798616099360689718418539474713501913396988211504\
331526092813510053223597950867938331056626611519488000*x^3 - 
 3022999746770412954281793566110406759233003112316183810890246542845504113361\
97685771481081813023479742612406705771431013753903130504449745425101865017559\
72106466592214241999302851758078883007423915695600342095298078268747756230122\
547178336238814823386138484897748272923447266377728*x^4 - 
 1582886580673258319796436636143518788956806366578268989727522305667837692766\
30566566191776550781778117734265245641344846228076509454284309514527385666795\
12066846775189215214472283212211885603176850561236699112386594853774679953321\
63014372351872208823264482575447373880629219295232*x^5 - 
 1238209994692220297910325088450134143776509573649459940050025465198415725587\
56284971116740844833502793666714143747021148009572946167721214241415519032492\
23785350166660341799476869477840354019345235372527499234887293733553212409036\
9548547207254591950155755075107478284805097914368*x^6 - 
 3033487608535449158291965045840943050896290837328551598654361551677088769106\
12648896062327996393997033627695726640194303619189519257336489955025018193586\
76644750425136436068280368506943827447445586693830928991280227165540419086934\
14416881148520636223255619461087003538207277056*x^7 - 
 5091053923193107691926687274158787444747233314702410235315654825740601919010\
16772665368078439573056134399178410825335731142852741131012847402333112380959\
85142030426410853252118795809792198815210249613319348469890731370625404338197\
504202174471026905603805152101053934759575552*x^8 - 
 8660263604604477845774845478796100209843951370259362775360037973662104681734\
37438098672907961900273054034230695254249555255087382624993122018336396934540\
18429804915003113707612585763539676190993676634823212029195152666168020685127\
8371669578210358381755527776549574629392384*x^9 - 
 1464252485999798723292695709581916934373591527496479083412172675602198495959\
81837387537460470267151866742505751549046696389993455808721868090883595981137\
86026887521379536783800372481648229526367666027045711771718936141715674964992\
580808086242432780931843202410970810941440*x^10 - 
 2186537831423241857702865354733751105654081440280352404831425180251452387248\
68519983243702242160377485243486340643198874070722832558760529889129447546375\
07367153323638357810471469823809197060285887008605014381470574553290335292424\
8175001011507926281585850187532998803456*x^11 - 
 2941744084084332816925868297809808274036875128459243839140942337978252832093\
02221472522935026066138488889900408818552301971348588053890126089153963423724\
76673995102156116722208301195371485233653007876566107014860848823233911450773\
76016212254660030892451091302869630976*x^12 - 3469784694709478134518979762635\
81952451869168888375707952410268728900687360957465935208375388861580568279319\
65599414415765523441619914763115256996028466723876025632583768125103857870150\
91747545828004365338033002560878399885239164546102947909063434059804031895941\
9392*x^13 - 30615493304148161021195481809103718323801815612816091034497905371\
19601018605870541883588624073790984319271627409780287911574627650811890759566\
05777785172001873921187818993519622194899241876305253786240712103123208011041\
604711971497004852862520253709332798853087232*x^14 - 
 1537029632597562901799666643524538904478029277607740555789984379322127072947\
86997651740975399787576870669631976774446236949326894762207943365659279398517\
67597651812854590082321618517243814515576576353302917375410743732166062690400\
51056179694402555814073769918464*x^15 - 2866133667736670868395647768851558375\
34527590520961362107476801673133779571388315642986579459956769789112367033629\
45455676298657021526918409673400082586531697896930600428311872643200407493820\
8440388235604356367245956026093247863679637283510839602896107995136*x^16 + 
 5455102999485181050766294872053111424484829080308809656048934584579167206065\
10788396698911532910789260564778612400883114184733934000720073318780187833219\
56028951143609837163445104912226464791366610530586054543826580252994744753512\
090443358944437378889023488*x^17 + 105675052937715378132717572307963750507652\
38328534687210647200095014808359281198861105797834376595004399531990068144606\
98611722424553519157574074232327709866709318576692570531134320653249564392684\
666481488464759036333292407434779042875636193328518207111168*x^18 + 
 2714433808108203347109235760173905179235085300869470295745697760021055617753\
44378433148112209616268423417940513173566848933579226460401461142584534544424\
97667893712393732175657407099995125734319793438404908311939226095822942066438\
551984324598139090632704*x^19 + 477723231147978355993214215295443755599756321\
81319281046682660600190859585040010557023875548661136166002931364631640156246\
81962056421880379359813810588749727961139810240016643577008947939526815531944\
64090573847793038233934526967650211443801540953899008*x^20 + 
 5326558831609295256767033019925250856495211056261554427256991548769502921303\
75776479067528075851861094493070829396107205439710856156078734361268707888744\
66930536565015829976827754385673163022329934218179742169321163122663888831306\
02122059280614948864*x^21 + 3936589726765020223028456216929092015148380935613\
29422298589162031074476557161176846092094073362076686865123537196980009122488\
98654229635516563478429261327201579125569072310286758059707035039168618000841\
380284516365743234064073339035779443212681216*x^22 + 
 2114936946574000318962584458114014359262766165534506241650335832436253781202\
85011482133386173126360137688712168185391222731561347970736973029573540058472\
55684511679174040975334500572717020852754684620530408546600524558605112576959\
1759310208106496*x^23 + 11383310902230908572082083701489477722271371000076631\
73744185666877154672136252021638576153032269370211075634298320437390099314989\
98756066474913042940378485344790588595600125156190776479336109056244242898329\
2835177615643421833457532645018697728*x^24 + 65075348719359160377211255806424\
28710691756170606255051471367591552906148690945980559086274258995039569189313\
21961930195058621363388862482557335239917109175027016142932994265171498757610\
0273989015101600741846533920877795995446608688882647040*x^25 - 
 3294530055648355305836960939909888399687553856545094691547282397653761144375\
47546076047932905529145719273663018481965815432480154192399036443618942799370\
14000652975611560375978164032985542185079552322903611922291457897411118550273\
883111424*x^26 - 184288185858539001900296283820652415931987383494920482279992\
44929517192552771016607217948843100625754725551320739584623504904621809030156\
67352656586206578117544299372090837107116113492291843477396881867921472835487\
002556396412419193176064*x^27 - 292514382107104669461871014937317448455333505\
87541694818204773253695833613046131122761176976712319230592289328463494146632\
08565893882927421911865104273338768606767772425091031057007305142501693960639\
1137237532868308930696622369996275712*x^28 - 27763856511151064427768993827655\
65272754756803430625861800796808001978496119955441584559335021854029484523949\
02000681211358020091437742129769427571976263953306630430428367049083619493186\
663820947699565317131424065093122710368321273856*x^29 - 
 1574212714875731758807689969994433138914012109872558449986094682956488796003\
55143314344963566912440688665887492490521067482665524221835973027968432664979\
47735033129992772883562890288678312469470384647504316286175316357153116295004\
16*x^30 - 1777136707606060671503235703431806003768214818139521655720221231454\
42231040789059709592678940409634997028014974711635438096470442133197245804088\
33411218180889619043278289242428623259472695115252172091855982165192552655822\
14283264*x^31 + 6800392309020827449258073724125749347847055199011304583908438\
64032731335727353190436461705425953748056226431098523007483646326048962516602\
92072304746395485083773174890523614470963163985398603008093464511970866965872\
260449042432*x^32 + 838337714462774482556429596243319279065178790957718793177\
25869197297243271456081516157506100301757335176507025148739188820317652693942\
76796245721572135893030073779069844781709409215970028894105346692993941151687\
59471392423936*x^33 + 5742620993543999146456767443969279180953004517090134915\
16551750306964871304179376959125467949865326509347066008645680327010862993377\
42776565762706101471672222427759492355627126364133450508274557847221019359906\
61945778765824*x^34 + 2376830389706934169590284093868177892835545772059632479\
22965539211926285962084094972308309247382624808989618611244174228132309825908\
25957132926234615053480937312110076516851899989931072092014901756312382836073\
320754970624*x^35 + 203625648074590747515392742173011449247747496183368488732\
85326615522473119272104717302494331449698625412866424942318854524628770005114\
10977980681828336683888132150776693485909889383228033294166228714776504943415\
1321600*x^36 - 57366142391349261132400044613181423409330030731987569821799778\
15165541397635318797589481801953658136079472828472429957168832855396055823234\
42976970752808374113963681113588196070878944069409954392216452362937858785280*
  x^37 - 54282352633964565003741872319403669778983685074590996492690792923652\
43817289133905958639523119878596013863174221813130567672886170580178964122656\
122634404330326278035191862804158589906579640696507332414811439890432*x^38 - 
 2832373018405232270977785007118573610270014940935427272241967520133416833332\
38595575230088864416986971237468450965519035881373010788417253234347613440167\
93420995543639639008651131095857619609344543456349988585472*x^39 - 
 8167947527286058250703062341060512606789048127184383737183909822101050823141\
14936995619581834673883539735605846731201887500513663237695211300471896546274\
92670874646327094832822771823313090687513476736598671360*x^40 + 
 8244502411393134552719282663229280831596878478535657973834357683501519842607\
85591725276311261413266308190019000064306202580374390860179835186159798817794\
26923147247548629084556166410762594177900705015136256*x^41 + 
 2662406261969305885045404178929252800623136775873454538651185468870988953593\
86365755074684016127936437680305706047222875916453233606828079936041218581070\
1012294425348213833192066252396241958294351834513408*x^42 + 
 1874799957282085207108478296290562711030418348708135604530902110458172413470\
96131819640136336591112845727584207510301200984225705569854662116202059933153\
52749460768278998501728371224653074785739663736832*x^43 + 
 8490087095401696641372893739610130469461595848507373934013697280169486502520\
34368089367528185744387032099368526527745750180427728004898914291771918693434\
40785747381621622859027034434894554958210793472*x^44 + 
 2533500739536628419584389998079195304820024315096389405411488439757076903102\
90377484675213699657300568185709225707141787585763578262006134186325790835594\
598774041048440932855245920246567204986814464*x^45 + 
 2516171414550193865773918228473896889649421394599572782851971443031787181367\
82951268535715054769698470912375422040699227932488576274956116741039718035832\
068629776112065842881096417190478520254464*x^46 - 
 2589993326933629827754546876727510548921476252479352836757104532070999334032\
09590682239780651739428270557767632737524758574581698160102652735204920231171\
8129463002581656208539916894669608321024*x^47 - 
 2155044473718944817379957450677597057457386709585651901961881918136148766993\
78794259990618179755620024298651147827859815062640908730406917948949521133422\
58607413180517797529042008235409670144*x^48 - 1017743540919607970733831174392\
39644242800064940830439171521060197196735322164255412294812555884653566861743\
00353521001723943955631803230974716826795041113632138598631630217366044192591\
0528*x^49 - 32867602997311764337567922857613172236066664143909737059119874096\
34235950905452748368751339667310982850946613496727372804578444086163906241469\
81635463019869587849802768369370014513364992*x^50 - 
 5376594883506457752731269122278000466565450536462336735737580043678277383502\
41775546383378097464702101006579118861326832407696538505136033076429671772171\
013863067667067696824950194176*x^51 + 172158020843877032990677304760713998689\
08481220248007375897974168236494399575532410857939802013646644615656953270061\
44925151850616172249456939700878353744678799997623299785984311296*x^52 + 
 1965424563348900012598128121440925760641459173216291616469400228052457309565\
78836685439318975285729447266624683258758838584998281592648822819462600659480\
31977591774111737338396672*x^53 + 9797473720193380775639129927577884537601535\
65363296877270852410461419459409342028692757016234184948151395442411479927094\
74603555782008704943634592610279515747966607285412691968*x^54 + 
 3005322241421284290417762780928387680285406654713056487329599183993225456859\
43368132125449110059691883670480579660146805229166541598062161883113004313230\
059445989819272921088*x^55 + 273645062555468339714231893483053171474664294550\
65505082344741566512999256941037671568508980381268196122777769486638419312327\
6907604692360267729458711829695360265512550400*x^56 - 
 3150622017888069634451570690076206918713064612842973288619982614624318576137\
35352236021925748749597344711795350713089040029760566354238585475310868194127\
6039002661584896*x^57 - 22367003044578288635848904730372732993983127832635932\
46341142725483852478769692541465764370819875437539017412380672156096569754450\
6827567706169791648737329493550563328*x^58 - 75732425913704250140839328377230\
57257998269984757363978561145633332361528554613372262467136768312557793598407\
6435221510368347728662698138052063116676243898259996672*x^59 - 
 7299282525111568686276923640490542018608477061373195662013359914363473153066\
76338016229741665299553226055177444440997229087011752247621052787022310492931\
03366144*x^60 + 7074988145041952682149251889131701746920669715429458219771336\
19349842681793200810016617034963063540504711858533777856639331163283021712935\
884847353515059707904*x^61 + 450923576021732765913492054714832840577808274882\
32314520565030845883900750170134750460283496321314348330934341764728587812929\
82015798880892158392073891872768*x^62 + 1207359870922506662545119979636559132\
57475931825196577153436448005648755268247841005658925876730206416118685914949\
30077457177390039103146785277048927551488*x^63 - 
 3477966165360769984899077546488536770525714622101105743402214854065717966473\
191313678961584420798971500071237417243822222945823264914387683205563023360*
  x^64 - 17736658457153607554603057633433813589578277065491717052216852987912\
68392984369299845729637696977093572879235756165441634873155394115582487738324\
09088*x^65 - 7619156524876193226669164675674761449829950608844315643968356994\
79085362603881039858540019835343255496679249400067086927899780954786587079102\
955520*x^66 - 940035186066993849305739309105620427866670897734014042087438551\
01079123916353086493968281517942337347377362699598720194589684699225769336268\
3904*x^67 + 66855075373181790592975034774348897359982941856928598891905337920\
93908761288677336769173219964822893575126140210973102378846037149155030204416*
  x^68 + 40102904475388040875862270398553100487240306993581837521673950641529\
265171412133912766804749438577828306243130521003094482315544201544073216*
  x^69 + 57236474414426976915986283323527277568778188906244186550906312403697\
061877834155741215065195485987597728650051371830367011513407998263296*x^70 - 
 3414233688112934290862974156384990177446536021546848066730012037774045522866\
12077163836014836506415628684567929866175473841405259939840*x^71 - 
 1827506866515771467190098311038218316439139258967562295970201050184460222156\
637688067153148383643365710806476728490535739476813021184*x^72 - 
 1181856884408308983240614638226155067133692933819935354791661059120775450224\
969126025038499445396756458607378420714481492795850752*x^73 + 
 1838371528068774276194288968689819308206559631635397739678228437028899012881\
7628869400471837022636857694599293622896063487672320*x^74 + 
 6171008293044701145188975725002528042519361234838803992151975986099169450051\
3807770143243100805204311200419306782385974018048*x^75 - 
 4480621020810501233892072248272772720274079985563234481727440728393163494898\
7679970186627877384771890780367804312745672704*x^76 - 
 7486374320367786904681721938389325718740710577822351470912686109812510972873\
54588278365045247883502948167312135329677312*x^77 - 
 1287515637998338098742676882053063815523224165043417457717065309683200223613\
914034116852748972686619163943667029245952*x^78 + 
 4270101120192662765858264695419089632680719221570438817707957847134805936418\
651558884976063704777225965602198257664*x^79 + 
 2102291063282857677388365813050999865957336308762660858584760709438214384734\
9760530333277697018822892444928966656*x^80 + 61645484700802144759399717281315\
24664094697436567439141360722419327121114719576833161623924582564828052193280*
  x^81 - 16566733047498188897862588282191571511033927687635431827023838563197\
8801542431012589534431336182924726763520*x^82 - 
 3686336459620576837530835487489490348099760811700674129674503982045032243377\
73284387369900822003038814208*x^83 + 6204915893498130332871159409332083235190\
81301317581141183452108565923372886953714083135658532884447232*x^84 + 
 3871906010330229175570121334136481253261388582400655064608478496822965230610\
181248484216116692910080*x^85 + 198848044820242546962445534419024208743625414\
4388624379735262550796101671934137787975271553433600*x^86 - 
 2390358725426733153390789401910589687449923094398688892082806906832268097103\
3855052644358291456*x^87 - 50182623473351771754046506219607850133112171959629\
975798025946187087056508980578543565012992*x^88 + 
 8045052939594436767804287321061253613514703404685690067654077270065966535750\
0430036238336*x^89 + 42724420565904920228341721956681020456565411726489014969\
4778471343971647975939356229632*x^90 + 11559611813635956011741766414760357038\
7353333936789835009664032067885194687555829760*x^91 - 
 2272084674062038222717653254732792029113362234370640833536538301332898595771\
252736*x^92 - 363378910380799483768779811755140506230596406758503494981831097\
2321819399290880*x^93 + 
 6975831559053977582077718317797415595458697786088953692977587173301774450688*
  x^94 + 
 26540656330364017635013649812904245792795058495266306631883667582111186944*
  x^95 + 
 833782292199729109880606795743567606773934610930024554451008707624960*x^96 - 
 114292865644036854504205811258104219759163112806718632895203921362944*x^97 - 
 139736920217613430203203636123120514174488371275214405645564379136*x^98 + 
 276654402805347196895705335216994579053628588967349152638828544*x^99 + 
 823821369469205608534111005759281167280394105512382563352576*x^100 - 
 8014675507120744759169308591011788153255583109657657344*x^101 - 
 2631485136364337115824332178731050003671379457798569984*x^102 - 
 2871773608674000653638321990572211024565490199560192*x^103 + 
 4191529626089116434058227647448948399694348812288*x^104 + 
 11961312695035541006858477607091402939557740544*x^105 + 
 2737873336380276264163250046333220621910016*x^106 - 
 23703688354029640775757781515479480795136*x^107 - 
 30800349911480524512146396484835737600*x^108 + 
 11929635406858716568100394230611968*x^109 + 65440488830828855064922540081152*
  x^110 + 50757199630919250855771635712*x^111 - 
 37442688809224173092868096*x^112 - 102552959460705747075072*x^113 - 
 68134685203144507392*x^114 + 23894191417098240*x^115 + 
 79574334142464*x^116 + 69208390656*x^117 + 32814720*x^118 + 8640*x^119 + 
 x^120

rplus = 
-5700046964646274990217291317671069522311792786419021311344593542460377369177\
39720837075414564472270423822880124484954163050766013963723339299850104271636\
12678423544372907234844685516968626279134244144094520689249194689091232568836\
0023684865803917333044454815533239052690854455978806476800 - 
 6080034961754277331683886048831466515182226914251379345728485642474912236544\
64150043281446031699553138198794480657229895171106648929936824959484915052237\
92170588899074189421465507434709493891583133379671168740369556245310832040470\
527402023146210118916643453148608588041637203586140078080*x - 
 3433613195101678691608490770080592916974818333380392841705305086069408134840\
41132054082974496830987093563454743846579798490884387238337696969804265970608\
12615691895762630742581229816713260114886342244656248151256338998851533187685\
31312055636925902247036577843788868874310284285390618624*x^2 - 
 1086508521338265889509419927809881496198833008617795642486664718839434485030\
51956828220524095715101840977881872761512890910086643889390635058393817122347\
55442215766012296985505529772648507531746171361025021419155300066993302152545\
9900455959731174887890839451381020867071263994120503296*x^3 - 
 2022718921621889941282343147525540370907502773356395677409389230726685226211\
25077114446688727871349568472665212877960517318327946480870587694045486101334\
58878501009197187419518070701987874713960736994637999894878372710005895442031\
67324690303835126822851667224250637707491687515815936*x^4 - 
 2432607801655227646439162368248419140515013301956407358994172899514615305258\
87565474189474480443494184197486564964378814984361004877412138381299076181196\
40131055853732504352321102786709617510451276724201629158845763348706835852459\
786809254549196574816564740720859288430206710185984*x^5 - 
 2075691163371414116271116103382685616346080717646632703709160825407472078297\
20310195995801083029113577565825535199698100356776154707008515014543440749070\
88109273245389081518168464143280583603535037994763987881668412409596309884740\
3318096009638364777409281760689098883843533832192*x^6 - 
 9685658286895691058492781422676927488858607348984971084918947795399570973228\
67903193077537536742973190899650341658681384260652209734396985948755616977510\
13981115825323313471308098917221252791214005375013558924220472912186266364584\
2853182126892362207467370035547457566403461120*x^7 - 
 8318964183639509222304542928375652806196836120350551813759001226851261221870\
08495115550776220900256657801000739245675094066838360120778418500235414605824\
45577087022527957404876242411758283048812862089884967153827910616468953437290\
68364326144929912387309898163370600089780224*x^8 - 
 9698132518181571301654372472939450319171763939854097112419379722154107665797\
66912150246870330869125224522617895508621747662251543910553597124851345143949\
54575150881410301664594803302580261011113797996160604905048345454550288528420\
1361812887373300122393566447332136610430976*x^9 - 
 3432512421141411236901017256287825865545434510159633109828467789755023656493\
67658502694842482508430179668322563823101236455547676041010914149990092971221\
73607120696868604470636657197060748773706422978300905492334142877109423845780\
120888063597825219032276936295474882674688*x^10 - 
 5370082711575720808873186265423940264123217999472193864986204882614383689051\
80403687952213365328161824328173743404252042071300433897233135719069862479104\
04353811538882880556412395943905400768638859899123557445173027320396140264125\
3518839333031551711529290738383330476032*x^11 - 
 1862791963183437514900638058684880990920319024596590393725279926215558336160\
32376280285911943988175921953376958670139392944000020319354156270906070224535\
63863481964292274272546131267698850566298284745169044573204908109425633412928\
88596134664772786893151171659572445184*x^12 + 7648518513527892947426051319593\
65839234007614753170396893850526362028917395910029907023324316532651237451226\
44998497464401323438725710687067278509845628988126117542284336095062297727831\
73433563527983908884410359365916678986334808148394945152232590217184009670937\
8048*x^13 + 12967120699990037717410531241198972680073346937976685391345600064\
53666315117478222620867661481953591367486425901243102127498458127287522665912\
52170732477107338619858115567757827206521971570492559024353601724851473049242\
0379025981816779479534131765259947360187842560*x^14 + 
 2652645476869037237006293230260683416965296695843290210165009030690540721357\
54058599093569873184188692591384077117754803652006864870461588317760470412634\
41157524804251546207109833485961119390342324077908338992916979626721581134555\
78930641598435410198681704464384*x^15 - 1661868089133741116365938467887568429\
80312738552845676775333546862607448013999488671052005678153984848149950254402\
06739244717833593251931428579699699208302565072932991077809631074577719645147\
4228053044052076066101947940157080569229129071144062862033962863165440*x^16 - 
 2073151547314292600478524932786370580963698613426093983406864764474510887561\
35149536073772932438603681559550128463419719177347101905847828762112969803040\
94534541248420637486368018419392459540518459576988603784113409285688487897005\
94424431546585708148499152896*x^17 + 2389395733635996643822986327664843114062\
03257166571492123197976770870200221128361298523648439737557421709260720716479\
38053323360242449858998759923897878670442325041201397893089245065148120121391\
53195786987518196138373806304485607856351363334476306451529728*x^18 + 
 3163318856084819794335204191324801190671732250200787043504470700622366801189\
72115890114676675307103813395124736788865037238611564042747858355376255470764\
27868972339569547861007283709283000131553334987639965270261315292734181880690\
3481346751099141785387008*x^19 + 33998822143494711116316531413676366418566326\
84906966633026281664678656755434341530770081039090243246756474542016643095558\
60681206052549489915797352125664136534312588215290956116738823140080431908386\
5666941876883916725916744604263341787067745777945149440*x^20 + 
 4822104869377965627766566089593340429667301212964912041987859309154587774980\
54042943916077439978443353843943931234174796809665425144885415986464726606343\
51991649501402198173825128256738484085851648887611487974043833716555103196265\
72135260279944511488*x^21 - 2558997140757313533555622913208924108982888585882\
01060843176482430977689789962791562994679054214348415265377454902233292015868\
93450323004434491048353853997243965342387495608758863775819602603328128782722\
0739117292196282641429858661990206747812298752*x^22 - 
 2776973242786800514936724622241812415415623483481111985237474091146053472093\
99766723369714145991715901992278476799725482743304810228835830235018801499717\
94315987318391705377731299531740102748245413164854595740873156270188501986785\
45111918539964416*x^23 - 5442192669684828659693801559187861465435893426075594\
79367011962562741203142330733735045693336650249764973403973345033045266034921\
66924484557835759910446575131957396599161395965700282607626320716062987595786\
56196573865132535860260857661584572416*x^24 + 1385715521510129614266708916020\
67277749183422289746582204288229967787712102352334581615089444806945012972736\
70087075133682872828428170510411390859743997871329796508864613082666550903508\
9089871827497216223012795910323334546228812407271046774784*x^25 + 
 1311562458759457584791796594609604637921378591492589988607432950871660076178\
29314677360940743708797610042191545109720702273847676584908166123256611139419\
83508344169088256186269827678784028383175393607711788758284665710648344403795\
90888128512*x^26 + 8057056076383003061296945848123227201276755796879748845670\
64626362221558495332971321891764494799562123463113480592278813967926662908658\
86521973417207736168961951169781218809410076543243341033901058548861755862477\
3727062986918218707238912*x^27 - 62783547955968207144752946081365673159617112\
25555059772725590063586961519124458452085221820783645903665347090567839472154\
92652580275622761039963349568535376759592802438542750822111398789170244372796\
03156959160387482429135906552915427328*x^28 - 3739327980881051783506001062125\
83912608565744809611594412039846186021675327356277772263057692750949330640121\
18023191003474789238226901066296823161939404138732683838150512652325986409180\
8991058182183693031317476712365884642199750049792*x^29 + 
 1000828893853304647864505646971206331120935430094207004528696306607119613204\
95781582122469386011879155101375210004871136631052744286543965334138564277302\
32445052736925843021955927277218785168735749867388903633120159470659190380298\
24*x^30 + 2013564462733980452017706134370082420604834772483834469636233722601\
54183411337895015014425127791436346820655135152436338066875005415165042330039\
66583095630591887530180555797228329615596908336730308023114495130929495168657\
024614400*x^31 + 421736634822581302061721797329036311441462694408327430299620\
56420751843172772840514605762637575355139136502611652217805164955199943456058\
14209394574241604808226901254582093060937923159251874471506787748708483096264\
5697805942784*x^32 - 58235871397471574980457969271137123825130906964304765702\
65604740607671496582543492588843882324186520525911072919252199178026115631643\
07504603003894440375516824063081831269691438524047789881308845599434060059848\
506374008864768*x^33 - 339379909914632640043429528045564417445272729547783303\
80471967171378681997654348435501785582572985391012542588213954507661048548742\
92345026742286891054800604542471077865875486247169686277604573343503216099221\
842787456516096*x^34 + 847625995470128594468580793175914299415319124311158533\
17133531648507963001926778059830038697645070094581253973791273579007030384187\
38545564301494582179876306357414401696440085289351690944289112389371110342001\
301022310400*x^35 + 127736364993543136711649165712418053808990712647444684948\
06800869246609215237670802516902407474433870621224946501506929899535379521756\
70547511578520063157666146463850052482203338869444554559274609768741673331568\
73568256*x^36 + 9000165973822015087050126322584296617186287667635713898378639\
68458136079144223043240545243628174570677806724513649504621449811392453298288\
97303238934797985227794090688595110599283118480251370884063290180183458316288*
  x^37 - 33067336101398624733872717309882600737002373490139846908200236564024\
41493803708110040636183196632641044118911646380814990848264807919619691158505\
812859730089041474259879591998826696676522884659144013466216012185600*x^38 - 
 1036361229599094329284000484801470763988204672038025961290033390084304295616\
50606541608468109421407977194499109804231816105530026279196019307723884861768\
55404010022017014033124387479080887331884500245621514436608*x^39 + 
 5846880032907070563240454766667227905217658130744377549114390406849659778738\
27644346107385861007627142459469009801129953335075342420180806754348312533473\
21794971140868836197668084600178115644903314692193124352*x^40 + 
 3884203042910339958609002577195459602323830040019257055228987406050827442340\
20454114077052076841514628815639547056790299673153049250870346276969483160334\
993491477178230539939454854612600544643071830407512064*x^41 - 
 3886119156189960508741095376188382869088705642028055825047737892076862961850\
39805026402381267475908497125167923537607367677345492254973252673542002931309\
446344032210394959585788099594318886894622772035584*x^42 - 
 9422564999411430565881799192024350625055414611491470785299154466642265990281\
23148386494267761249514036498834297579251012810071305113647645481303479735386\
0627405451887351370382566839455187897441400651776*x^43 - 
 1655219707715692829129226842125917156706413963854789844101752056425645771610\
00556817238112686703433342336764209578041903022284128520981578781928596344759\
61776207496978002522399237196313513840351379456*x^44 + 
 1409365356811162520197844659673280387227254795930083795108148922821477714233\
67936520637311017710176028760859544644107933116953906076983219286723303708356\
395550957483837920094767398156731154733989888*x^45 + 
 7127469635133458341162269304267223026093705161148319460922690259048703757131\
55961267812502745064377108645715886617505767936571438070725462137550234312092\
154169239728698253646147263141249208549376*x^46 - 
 4590915485949155926691256205242848630609560231808799989686088984452002343430\
44854996369041357336976818960189782457162396645717442772605685065172211508775\
907159760218538118117612755192907825152*x^47 - 
 1395125980542702267170342834173396208836861619118218118406052833296164223452\
16703813007248097288790675334015586414436234891455081441634232169230110353597\
92111336306929795175640728073033220096*x^48 - 3574468709161486830576223239715\
68738512921321246385426682548778454923115901211913936908365290993586460976514\
49485143114419636710384039300907271677665214993048432413605793406347771207745\
536*x^49 + 119227358362517473782720833260699568425741818511458653603157281842\
31267696474294244969021769093102474039854257907669323932424114233916220152296\
8336622387613412884777818147509259588337664*x^50 + 
 9563333780576305963495689791460201066883463671180588399429713059311217068748\
71157704514595141689017826503428725651925669146967774357885268427571119054046\
717846598984098741896072921088*x^51 + 115472831573020110173649341580605048541\
51218543124211608517232555545891642525146357640803464438115933661426989691611\
37557495754466615717763092364946915456386000246296481783097589760*x^52 - 
 1085929474299766146132506757479899053911683166062930929066275942662317824130\
31481772835033879454396880661511467712804487837158922505453709230517359046263\
99665236004489843437469696*x^53 - 5123138158203799897548697038433983375191969\
86409684296489494978515990562787661661662138065085573391329726184025911323427\
62479943845819300971072127581651247853951254857504522240*x^54 - 
 6672893838711716950851992999356682274571920399404862484025605236532387149465\
42464347340443358095784589837278158631310139538913224273821508103371092438259\
7765007616048627712*x^55 + 70632215794059258754652294382501044677027655111687\
23111499048663863939546604878584165271453333163424226091492317898663642878464\
08020124804749340842530807010421203462520832*x^56 + 
 2370824959671454283086821070391806920921945703362650668363357113825825903697\
67621297556878932332270994071953089803177345586367971832140533248692844421420\
5710855506493440*x^57 - 24616152378925671730023513721869861860362108846180674\
40915416977647646470541650983745125118479666991901136301199757510799707117132\
988722144555997558772549159573520384*x^58 - 411915993648757256662265135981569\
04341015350225303274390420771763067841057495181661620688402362529072388044469\
931431074477095901779471867087006349349069860919836672*x^59 - 
 8834639181612180321258394043502267381795135765716073150462578560956156594128\
53938411771093626816860458816285144585618058932811497842476846003786857192444\
20677632*x^60 + 3066348779381474704218018972874148947959144651958690651760382\
50272211574866384491689356888465693838431767386228123748480628990512214681943\
721139792661165637632*x^61 + 197261738534335993303820745433300802190113890643\
10801312169614897613205877653725365235800648269959301882243978013783491095424\
02717791113550291363470430437376*x^62 + 1295544572865972896709995479537082371\
06984367588123313359928578746520508482409909773203000000535531517310654290465\
4070400662793324458209569007335332904960*x^63 - 
 2020100160307105228932337380548322057447359726456781066929019177333547760018\
2083357602423555222103847431821591531897698934610427683304252920429576978432*
  x^64 - 65423533986701105688620015587632946076503424529299706661192723441117\
58338926666352753021499850438284642956124505782987203064461262707694786359119\
0528*x^65 + 60985849053626645528240765542926135473900306480129771753365122152\
58361720745721559416620330624846381028398606211260852095539199373382961600659\
4560*x^66 + 87524779293929000777039350809569180991914972852091261098547893272\
52175248440165178096134734400950610702612993083896966309406962763396700490956\
80*x^67 + 1590110317646669622394214659258377516723236378175676734008178074630\
437927064586578292167620632747617849478365123232290174878762669408190988288*
  x^68 - 54636021023402371719440564837465320930280127385858771610914942214899\
53680876276339295345036679800610345897499084840764569906553124120690688*
  x^69 - 31504431010512451475979084098871206879844245271079541017436524899174\
482803374686242608974303287977015255998168495603671329831475803586560*x^70 - 
 2150930295853385056026154790457336809599271167880942491871211657608410425268\
8123243753793573856010571939499003342702175740834938355712*x^71 + 
 2793174464379655169414730811624593157780200416342961258377073168476917058065\
24121454272345933462710107705330611456238687113623633920*x^72 + 
 9251011316076657185918243612651985756178071309917147912315037035354402519082\
59793851207539192518925792728423216420999854353809408*x^73 - 
 4558752950054646007789041086458452502499416190085824664604200676676735395512\
18433044572192307299036822139330103203253796732928*x^74 - 
 1030632194027146488998831221568849145204611836184992831870291635418337523978\
4025264659601742327441918870400437296154556760064*x^75 - 
 2335469920459678621361082808399307245988563214149756615692358057637074782006\
1110530310946932440057678546148534180202414080*x^76 + 
 3645333301202753417015686799124955122524431583038608415819203540147462107383\
7490847407835275645975891579144749954629632*x^77 + 
 3395113949124229327793061498370030854197502206371667768702624655028147530810\
76958319641820061461421698388504759762944*x^78 + 
 6002100605079608448210059918898105103780035419425451554213039104354726558177\
21735530179094933390510339510841114624*x^79 - 1818555180285952529852178182302\
60053053822575719062399772209235026592424389386378105012431435144664285701157\
6832*x^80 - 11036689012703585253207243192156298370743786675070169714008689714\
099763520440339721180982072447241144688967680*x^81 - 
 1034051796107905614899790524306412967889845691870348931802015511806482870191\
4973196384461234257300610351104*x^82 + 80511825938634738037899654872311478480\
511224916305256976390904403342219458470938665697603141327938125824*x^83 + 
 2846761898515002339715605331051135452398978368082504825190367796057989824292\
46322485435017699006611456*x^84 - 6711785473182938257180082378426738333844844\
7749613056775346997289626781007189728674456156093022208*x^85 - 
 2560720169842453591415765502578258674290368717390750730684823872285383813207\
566650637913784582144*x^86 - 488107583132386002267430438864760070773143504716\
8870969463041805187198087665970180637444800512*x^87 + 
 9982571954314078902863096938154449202514431221416179680150651059478065953108\
106936034787328*x^88 + 563185296262960314439483124516395329053357017656011469\
14230999802249295071489813725052928*x^89 + 3559594508919865062256509133782638\
7358365193520096544959769255492911015818645613838336*x^90 - 
 3229907031209891919165531354487268428781495729598740736371359353722954228453\
11254528*x^91 - 8073743585490407827360533399293821865974224363340767859645142\
22403459740975759360*x^92 + 6499333158038229358863105729620020055950332034098\
32113901007899922889369976832*x^93 + 
 5894700734565894323828918312115762756430685053003433982333786818380629540864*
  x^94 + 
 5719821895279533249877151535184322402642538613028925828656133312828407808*
  x^95 - 
 22729051780761950338873403556289654029201151603694374514097275717812224*
  x^96 - 63131575309043616931291728397715287563876696044693268526720880738304*
  x^97 + 15105201366192867712223980213428780192048349144407490632100085760*
  x^98 + 302333046129737801817718098577401521911391197256375139827712000*
  x^99 + 361507416994955815361071004048526200551309065660978211848192*x^100 - 
 674142153105709528262643761586784057109253450699651416064*x^101 - 
 2212429289403193237155290106798670601907035587800465408*x^102 - 
 684992248321422338928586013578560568999506176114688*x^103 + 
 5924852535865625724418150897471844640917620260864*x^104 + 
 9523326448443356570094328457531102468184735744*x^105 - 
 3454816341056899280602972119241523724288000*x^106 - 
 26948604248472932864783303242216227471360*x^107 - 
 25279173693397949783888336426624876544*x^108 + 
 22700427238690660967467799918149632*x^109 + 71486815861883282910103609933824*
  x^110 + 46953235735322217910292054016*x^111 - 
 46813422306120230170791936*x^112 - 110461405662167087185920*x^113 - 
 71885294402909110272*x^114 + 22895518509858816*x^115 + 
 79456787896320*x^116 + 69208390656*x^117 + 32814720*x^118 + 8640*x^119 + 
 x^120;

