Group Abstract Group Abstract

Message Boards Message Boards

How to calculate the digits of the MKB constant

34 Replies

Since the original formula for the MKB constant is an integral, its domain is continuous. So, we have the following comparison of it to the original formula of the MRB constant which is a sum. (MKB has many more pairs of terms that are equal to each other.)

The MRB constant = Limit[Sum[(-1)^n n^(1/n),{n,1,2N}],N->Infinity]

In the domain of terms of the MRB constant ask, when are the pairs of terms equal?

•   Limit[x^(1/x) - (x + h)^(1/(x + h)) ,h->Infinity]  == 0 when x=1 because Limit[x^(1/x),x->Infinity]=1.
•   x^(1/x) - (x + 2)^(1/(x + 2)) == 0 when x=2 because 2^(1/2)=4^(1/4).
•   I think there are no more.

The MKB constant = Limit[Integrate[(-1)^x x^(1/x),{x,1,2N}],N->Infinity].

Compare the previous list to one using the domain of terms of the MKB constant, and ask when pairs of terms are equal?

•   For x != 0, x^(1/x) - (x + 0)^(1/(x + 0)) == 0 because, for example, Limit[x^(1/x) - (x + 10^-h)^(1/(x + 10^-h)), h -> Infinity]=0; see last line a special such x.
•   x^(1/x) - (x + 1)^(1/(x + 1)) == 0 when x= 2.2931662874… (By definition Foias’ second constant. See second constant at http://mathworld.wolfram.com/FoiasConstant.html).
•   x^(1/x) - (x + 2)^(1/(x + 2)) == 0 when x=2.
•   x^(1/x) - (x + 3)^(1/(x + 3)) == 0 when x= 1.801627661…
•   x^(1/x) - (x + 4)^(1/(x + 4)) == 0 when x= 1.6647142806…
•   x^(1/x) - (x + 10)^(1/(x + 10)) == 0 when x= 1.3295905071…
•   …
•   x^(1/x) - (x + 100)^(1/(x + 100)) == 0 when x= 1.00697415301373…
•   …
•   Limit[x^(1/x) - (x + h)^(1/(x + h)) ,h->Infinity]  == 0 when x=1 because Limit[x^(1/x),x->Infinity]=1, and that is where the sequence very slowly goes to.
•   Many more.
•   x^(1/x) - (x + 10^-1)^(1/(x +10^- 1)) == 0 when x 2.669048059942…
•   x^(1/x) - (x + 10^-2)^(1/(x + 10^-2)) == 0 when x= 2.713289492595…
•   x^(1/x) - (x + 10^-3)^(1/(x + 10^-3)) == 0 when x= 2.71778190…
•   x^(1/x) - (x + 4)^(1/(x + 4)) == 0 when x= 2.71823182922…
•   …
•   x^(1/x) - (x + 10^-10)^(1/(x + 10^-10)) == 0, when x= 2.718281828…
•   …
•   Many more.
•   Limit[x^(1/x) - (x +10^- h)^(1/(x + 10^-h)) ,h->Infinity]  == 0 when x=E, because that is where the sequence very rapidly goes to!

With

enter image description here

and

enter image description here

Latest:

ClearSystemCache[]; Timing[
  Quiet[NIntegrate[
      Exp[Pi I x] Sum[(Log[x]/x)^n/n!, {n, 1, Infinity}], {x, 1, 
        Infinity I}, WorkingPrecision -> 4453, 
   Method -> "Trapezoidal", 
      MaxRecursion -> 11]]]

gives {134.516,...

More details and results to come.

Latest speed records for the MKB constant

(digits and seconds)

                                                                     [ 2021  Method ]       
           V 10.1.2   V10.3       v11.3   V12.0         V12.1         V12.3       V13.0
1000                                                                    3.3        3.1
 2000        437      256            67      67           58            21          20                
 3000        889      794           217     211          186           84            ?                
4000                   1633         514     492          447           253*          259 (248*)        
 5000                  2858         1005    925          854           386          378                
10000                 17678         8327    7748        7470          2800         2748                
20000                 121,431       71000   66177
40000                                      362,945                   148,817      134,440

* means from a fresh kernel.

V13.0 computations are worked with the 2021 method in this Cloud notebook.

(So, for example, my 10,000 digit computations went from 17,678 seconds to 2,748 seconds.)

They all have been checked to give accurate results.

2022 verification Method is as follows, where prec is the number of digits to be verified by "quenching" Integral] with 1,5,...,4n+1 iterations of the partial integration.

Cloud notebook here. It doesn't work too well in the "Add Notebook" button: enter image description here

Instructions\[IndentingNewLine] with the following hyperlink, go down to "ReMBK200k=" and shift+enter

prec=2000;Quiet[Print["integrating without parts took ",(Timing[(cc=NIntegrate[(Exp[Log[t]/t-Pi t/I]),{t,1,Infinity I},WorkingPrecision->prec,Method->"Trapezoidal",MaxRecursion->Floor[Log[prec]/Log[2]]]-I/Pi)])[[1]], "sec. ","check with 200K ",N[ReMBK200k-Re[cc],20]]];Table[Quiet[Print["integrating by parts for ",4n+1," iteration(s) took ",Timing[Block[{d,h,g,$MaxExtraPrecision=200},f[x_]=x^(1/x);\[IndentingNewLine]d=n*4+1;\[IndentingNewLine]h[n_]:=Sum[StirlingS1[n,k]*Sum[(-j)^(k-j)*Binomial[k,j],{j,0,k}],{k,1,n}];\[IndentingNewLine]h[0]=1;\[IndentingNewLine]g=2 I/Pi-Sum[-I^(n+1) h[n]/Pi^(n+1),{n,1,d}];\[IndentingNewLine]expplus1:=NIntegrate[Simplify[Exp[I Pi*x]*D[f[x],{x,d+1}]],{x,1,Infinity I},WorkingPrecision->prec,PrecisionGoal->prec,Method->"Trapezoidal",MaxRecursion->Floor[Log[prec]/Log[2]]];\[IndentingNewLine]c[n_]=(-g-(1/Pi)^(d+1)*expplus1)]][[1]]," sec.","check with 200K ",N[ReMBK200k-Re[c[n]],20]]],{n,0,1}];\[IndentingNewLine]Print[]

I finally found a sum for the MKB constant! enter image description here enter image description here

See this cloud notebook. In there we see the sixth partial sum:

In[16]:= N[
 MeijerG[{{}, {1, 1}}, {{0, 0, 0}, {}}, -I \[Pi]] - 
  I \[Pi] MeijerG[{{}, {1, 1, 1}}, {{-1, 0, 0, 
      0}, {}}, -I \[Pi]] - \[Pi]^2 MeijerG[{{}, {1, 1, 1, 1}}, {{-2, 
      0, 0, 0, 0}, {}}, -I \[Pi]] + 
  I \[Pi]^3 MeijerG[{{}, {1, 1, 1, 1, 1}}, {{-3, 0, 0, 0, 0, 
      0}, {}}, -I \[Pi]] + \[Pi]^4 MeijerG[{{}, {1, 1, 1, 1, 1, 
      1}}, {{-4, 0, 0, 0, 0, 0, 0}, {}}, -I \[Pi]] - 
  I \[Pi]^5 MeijerG[{{}, {1, 1, 1, 1, 1, 1, 1}}, {{-5, 0, 0, 0, 0, 0, 
      0, 0}, {}}, -I \[Pi]]]

Out[16]= 0.070776 - 0.0473807 I

So now we have sum and integral notation for both the MRB and MKB constants.

enter image description here

In[135]:= 
f[n_] := MeijerG[{{}, 
   Table[1, {n + 1}]}, {Prepend[
    Table[0, n + 1], -n + 1], {}}, -I \[Pi]];

In[144]:= N[Sum[(I/\[Pi])^(1 - n) f[n], {n, 1, 16}]]

Out[144]= 0.070776 - 0.0473806 I

More code and how well it works is at the bottom of this cloud notebook.

Here is the Notebook I used to discover it.

I finally computed 200,000 digits of the MKB constant (0.070776 - 0.684 I...) Started ‎Saturday, ‎May ‎15, ‎2021, ‏‎10 : 54 : 17 AM, and finished 9:23:50 am EDT | Friday, August 20, 2021, for a total of 8.37539*10^6 seconds or 96 days 22 hours 29 minutes 50 seconds.

The full computation, verification to 100,000 digits, and hyperlinks to various digits are found below at 200k MKB A.nb. The code was

g[x_] = x^(1/x); u := (t/(1 - t)); Timing[
 MKB1 = (-I Quiet[
      NIntegrate[(g[(1 + u I)])/(Exp[Pi u] (1 - t)^2), {t, 0, 1}, 
       WorkingPrecision -> 200000, Method -> "DoubleExponential", 
       MaxRecursion -> 17]] - I/Pi)]

I have 2 other codes running to verify all 200,000 digits.

Attachments:

I presented M1 and M2 in the above messages. Some of the formulae mentioned below are new ones for M2 (part 1) as mentioned in the immediately previous message and M1 (part2-i/Pi). enter image description here

we look at formulas previously used for the MKB constant.

The following subtle changes transform M2 to M1.

Here is a summary of my speed records.

First a full quote from a message summarizing the Burns-Mathar method I derived from the work in this paper.

I made a quicker program for calculating the digits of the MKB constant (also called M1, I{2N} or MKB) in V12.1.0 enter image description here

Module[{$MaxExtraPrecision = 200, sinplus1, cosplus1, middle, end, a, 
  b, c, d, g, h}, prec = 5000; f[x_] = x^(1/x);
  Print[DateString[]];
  Print[T0 = SessionTime[]];

   d = Ceiling[0.264086 + 0.00143657 prec];
  h[n_] := 
    Sum[StirlingS1[n, k]*
        Sum[(-j)^(k - j)*Binomial[k, j], {j, 0, k}], {k, 1, n}];
  h[0] = 1;
  g = 2 I/Pi - Sum[-I^(n + 1) h[n]/Pi^(n + 1), {n, 1, d}];
  sinplus1 := Module[{},
     NIntegrate[
       Simplify[Sin[Pi*x]*D[f[x], {x, d + 1}]], {x, 1, Infinity}, 
       WorkingPrecision -> prec*(105/100), 
       PrecisionGoal -> prec*(105/100)]];
  cosplus1 := Module[{},
     NIntegrate[
       Simplify[Cos[Pi*x]*D[f[x], {x, d + 1}]], {x, 1, Infinity}, 
       WorkingPrecision -> prec*(105/100), 
       PrecisionGoal -> prec*(105/100)]];
  middle := Module[{}, Print[SessionTime[] - T0, " seconds"]];
  end := Module[{}, Print[SessionTime[] - T0, " seconds"];
      Print[N[Sqrt[a^2 - b^2], prec]]; Print[DateString[]]];
  If[Mod[d, 4] == 0, 
    Print[N[a = -Re[g] - (1/Pi)^(d + 1)*sinplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] - (1/Pi)^(d + 1)*cosplus1), prec]];
    end];
  If[Mod[d, 4] == 1, 
    Print[N[a = -Re[g] - (1/Pi)^(d + 1)*cosplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] + (1/Pi)^(d + 1)*sinplus1), prec]]; end];
  If[Mod[d, 4] == 2, 
    Print[N[a = -Re[g] + (1/Pi)^(d + 1)*sinplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] + (1/Pi)^(d + 1)*cosplus1), prec]];
    end];
  If[Mod[d, 4] == 3, 
    Print[N[a = -Re[g] + (1/Pi)^(d + 1)*cosplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] - (1/Pi)^(d + 1)*sinplus1), prec]];
    end];]

Whether it will allow me to calculate more digits is a question that will be answered in a week or two.

Here is a comparison of timings on similar computers.

 digits    seconds

                                              (Impoved code)
            V 10.1.2   V10.3       v11.3   V12.0         V12.1 
 2000        437      256            67      67           58
 3000        889      794           217     211          186
 4000                1633          514     492          447
 5000                2858          1005    925          854
 10000               17678         8327    7748        7470
 20000               121431       71000   66177
 30000               411848      ?        229560
  Seethe following cloud notebook for the results from my improved code.

https://www.wolframcloud.com/obj/bmmmburns/Published/2nd%2040k%20mkb%20prep.nb

Then there are my recent programs from the Abel-Plana formula on V12.0 that computes M2 which is (the MKB constant also called M1, I{2N} or MKB)+C, specifically,

enter image description here

                  Method ( A, B or C)
                      in seconds
digits    A              B                 C
2000 -> 23 ->           20 ->             18
3000 -> 96 ->           80 ->             36
4000 -> 165 ->          141 ->            64
5000 -> 442 ->          418 ->           386
6000 -> 623 ->          591 ->           544
10000 -> 3250 ->       3070 ->           2800
40000 -> 175, 551 ->   164, 005 ->       148,817

(So, for example, my 10,000 digit computations went from 17,678 seconds to 2,800 seconds.)

II predicted the 40000 digit run in method C would finish in (164005/1.09=150463) seconds, about 2 days. It took only 148817 seconds. Here is the work and results with a check against 100,000 computed digits from Method A:

In[32]:= N[(Timing[
   M2 = Quiet[(NIntegrate[(Exp[Log[t]/t - Pi t/I]), {t, 1, 
         Infinity I}, WorkingPrecision -> 40000, 
        Method -> "Trapezoidal", MaxRecursion -> 15] + I/Pi)]]), 20]

Out[32]= {148817., 0.070776039311528803540 - 0.047380617070350786107 I}

In[33]:= M2100k - M2

Out[33]= 0.*10^-40001 + 0.*10^-40001 I

On 9.22.2021 I improved my timing for a 40,000 digit computation of M2 of the MKB constant using Method C by 1/2 an hour:

In[20]:= N[(Timing[(NIntegrate[(Exp[Log[t]/t - Pi t/I]), {t, 1, 
       Infinity I}, WorkingPrecision -> 40000, 
      Method -> "Trapezoidal", MaxRecursion -> 15] + I/Pi)])]

Out[20]= {147079., 0.070776 - 0.0473806 I}

200,000 digits of M2 are being computed using the MRB constant supercomputer in Methods A, B, and C.

Method A

  g[x_] = 
x^(1/x); t = (Timing[
test3 = -(I NIntegrate[(g[(1 + t I)])/(Exp[Pi t]), {t, 0, 
Infinity}, WorkingPrecision -> 40000, 
Method -> "Trapezoidal", MaxRecursion -> 15] + I/Pi)])[[1]];

Method B :

f[x_] = E^(I \[Pi] x) (1 - (1 + x)^(1/(1 + x))); Timing[NIntegrate[I (f[I t]), {t, 0, Infinity}, 
WorkingPrecision -> 40000, Method -> "Trapezoidal", 
MaxRecursion -> 15]]

Method C :

N[(Timing[(NIntegrate[(Exp[Log[t]/t - Pi t/I]), {t, 1, Infinity I}, 
WorkingPrecision -> 40000, Method -> "Trapezoidal", 
MaxRecursion -> 15] + I/Pi)])]

Where the MaxRecursion (M.R.) was no less than shown in this table. enter image description here

Some of the AbelPlana records are shown here.

Wolfram Notebook updated with the new version of the miraculous algorithm on 6/16/2021.

Here is the improvement we get from using i f(i t) as an integrand from 0 to infinity vs the Exp[I Pi t] g[t].

New speed records up to 40k digits.

enter image description here

test3 is M1. M1 +2i/pi = M2 (the result from method 2). This is a great proof of the accuracy of those digits!

All worked out at

https://www.wolframcloud.com/obj/bmmmburns/Published/MKB%20fI.nb

That includes a check of 100K digits, its time computed by the new version of the miraculous algorithm. See "I computed and confirmed 100,000 digits of the MKB constant" above for where the 100K digits were first computed and confirmed the first time.

Since the MKB constant comes from an oscillating integral, I thought about naming the convergent M2.

Although the MKB constant is slow to converge, I did discover the following fast integral formula for it.

According to Wikipedia, improper integrals like that of the MKB constant can be transformed into proper ones by enter image description here.

So we have the following.

enter image description here

   g[x_] = x^(1/x); Timing[
   MKB = NIntegrate[Exp[I Pi t] (g[t]), {t, 1, Infinity}, 
      WorkingPrecision -> 100]
     - I/Pi];



    Timing[
   MKB - (-I NIntegrate[(g[(1 + t I)])/( Exp[Pi t]), {t, 0, Infinity}, 
        WorkingPrecision -> 51] - I/Pi)]

{0.078125, 0.10^-52 - 2.10^-51 I}

    u := (t/(1 - t));Timing[
   MKB - (-I NIntegrate[(g[(1 + u I)])/( Exp[Pi u] (1 - t)^2), {t, 0, 
         1}, WorkingPrecision -> 51] - I/Pi)]

{0.140625, 0.10^-52 - 2.10^-51 I}

Here is what the region of the proper integral's function looks like.

g[x_]=x^(1/x);u:=(t/(1-t));Plot[{Re[-I(g[(1+u I)])/( Exp[Pi u](1-t)^2)-I/Pi],Im[-I(g[(1+u I)])/( Exp[Pi u](1-t)^2)-I/Pi]},{t,0,1},TicksStyle->Directive[FontSize->6],Ticks->{0,1/4,1/2,3/4,1},PlotLabels->"Expressions",PlotStyle->{Red,Blue},PlotRange->{-2,.3}]

enter image description here

In[24]:= N[{Re[MKB],Im[MKB]}]

Out[24]= {0.070776,-0.684}

This gives some improvement on timings, as shown below.

Timing[MKB = (-I NIntegrate[(g[(1 + t I)])/( Exp[Pi t]), {t, 0, 
        Infinity}, WorkingPrecision -> 1000, MaxRecursion -> 11] - 
     I/Pi)][[1]]

82.296875

u := (t/(1 - t)); Timing[
 MKB - (-I NIntegrate[(g[(1 + u I)])/( Exp[Pi u] (1 - t)^2), {t, 0, 
       1}, WorkingPrecision -> 1250, Method -> "DoubleExponential"] - 
    I/Pi)]

{8.046875, 0.10^-1001 + 0.10^-1001 I}

I will follow up on this soon.

EDIT

The following notebook was completed in V 12.1 to show the precise differences in the computed integrals. V12.2 doesn't show that detail.

I tried to make sure Mathematica did not use the same formula for any of the last 3 integrals, so that any 2 of them combined may be sufficient to prove the accuracy of a calculation of the MKB constant digits.

MaxRecursion guide

     max digits M.R.   

       1309  default
       2410      10
       4453      11   
       8275      12
       15442     13
       28932     14
    54286          15
   102600          16
   193914          17

I am presently computing 200,000 digits from the following 2 different codes from the cyan (light blue)-colored methods mentioned above. They should agree to, and prove to be accurate 193,914 digits.

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)]) (Exp[-Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 200000, 
          Method -> "Trapezoidal", MaxRecursion -> 17] + 
        I/Pi)])[[1]]; Print["Timing for calculation=", t]

and

g[x_] = x^(1/x); u := (t/(1 - t)); Timing[
 MKB1 = (-I Quiet[
      NIntegrate[(g[(1 + u I)])/(Exp[Pi u] (1 - t)^2), {t, 0, 1}, 
       WorkingPrecision -> 200000, Method -> "DoubleExponential", 
       MaxRecursion -> 17]] - I/Pi)]

I computed and confirmed 100,000 digits of the MKB constant.

The original computation took 417.327 hours, or 17 and 1/3 days. The confirmation took 529.92, or 22 days. See attached "verify MKB by derivative.nb" for work and digits.

100, 000 digits of CMKB

calculated here are saved as "test."

Compute 100,000--- 16

In[84]:=
g[x_]=x^(1/x);t=(Timing[test=-(I NIntegrate[(g[(1+t I)]) (Exp[-Pi t]),{t,0,Infinity},WorkingPrecision->100000,Method->"Trapezoidal",MaxRecursion->16]+I/Pi)])[[1]];Print["Timing for calculation=",t]

Timing for calculation=", 1502377.625`

Finished  sometime between May 6, 2021 10:00 pm and  May 7, 2021 8:21 am EST



In[95]:=1502377.625/3600

Out[95]=417.327

In[96]:=test

Out[96]=0.0707760393115288035395280218302820013657546962033630275831727881636184572643820365808318812661772382094407339691097179269990446453847536429225844386065219333047122290612020548398576433662343489843827071049989705395231226917848529903218507274354522005125732810542217424931317767029586377171448965877929118571617511540562365603991484881752820025072306153573457106503145899219683164868123907954938255650974196758814736254874320591902869577457241143992751659339102999273310798274679484513088932825130726310257008303152743086102342833436910409821702262269045940297055093272952022662549075225941956559080574835998923469310063614655255062971317960148313404503841687805492907298185104582941328637784284366753787303942475197280648872877809986710218877979777725224197655941725692774900310719381777491848349627938468198411955193898347075098152638657614980900350262780319142430252921925131515239611841070722530473939496294305264627977744876814858325335947117076721493110160508928494597906728688873533031986215124467678736429981544321187124269147141804397293341468345902382977472975053271988386946291215512340931334841526712825988330652119397517437992225419804561517899441213313555349094245152157337720540864293004858914416964903391069077239158225378137007134225157259436267756749980892097547020923938358076198570370106085596863039832425037481494682633055245925697703500997321958201037926268378037273021499168580036766118335796488501619742893070662953852922641481467895325340185006631153014589399140567464642817322554124276739871343784769014864816430102142673821103099429482190262551342893689261414565078351300454655173124597023403312281112674354963160553141145567801875089895942712157634242627126275368184624967147795406349712434902034403655110657336828783643528206451755699785097293845034301399072335418076018544901955694165639769553876705231326512333366413569309147544153147040751278651787331897291338831573491539276810505393193420241588397347561526288661290728125579362948181618288086569973506768636781006386650904534717662131801845803474823423298157834525912125581020582196401078634352065556973647371001379876626633998647899439636865809171008260727796700323541873379525993158697583430323304307895358482051309957606629650194455591037743888293996355687016945561468756667810137028618261442580752084968748790834555683286810992293714710797655441238658361507793595620533974776960070520467919307350751324617559160904358483933727879354374654770015405315934911669904273679391713646599364840768394803265618888420669169340277261914455191828151652360399692719061991655729677744654356588953602124646688591824365597199025929668876773171577235647694709665048098037194956104125531479498893907745459337858730796977515966494235608105257022978810125350663109530591734669918469930734550933587377397856349258234049411471938885385086011030918278312344618497246818765182307767075040597982052236224255617202772645301508653393621700356912690450255099693218917315607411892180967322579047180170212691588040910818933109805057252902227931659575733486175457651130811956867582907068883066723837899816837670787899360869933819422195746218699516733809670530135357903631293882837719370519875606291578527801296043186418096608100829755823649276027221806346169998542692832027777478286102979116280990177760284464151299277101106571545737336647958718244776566375647148433054675834244246049240504686922677421785867393122980814858147770340450055348706971250452311783103291070960442874005786179693433856757309587531165347866491655486207901573141523303786002863792972865839185688715489251955650764768156301356832542206804033891636152122872196025946652394388825789606358890573428609585537496268723416265793405419332522961262899388287613272932643580198488578410174917159464026574904398378971234285839661098451230709606672960619995390673778745129567435608627407535165639492342814598465513325229158297855621032058214589809423668291556295887639710813223944274544167064098025396411543916290237014533917149169483476622031228574697692918713580737506511407117582506728840988888074054055934499302628227680333113686549406661239659616820976280517875331534322694779737254088486125685747595241916484864002361545611943780570928984411850636638301876692911986568788899781245790836746487815578571823069378238812926865586054135110536907550731839669350369536726293157768346744826914689888536348280593839639957976255287167025109445684566374844266250483803708843748086884823875989693565118278311572584575298761592829286644326132928050305343153340295009519351250276941240999102097108172247762101699561990672658392475126406421957642149794708906768699521141796843009144561558991084217593388165600461619443309023081233134177200242449067379025519367627993751891259848132865170792298023534989757166091846307971735507935649237134095369073515522625004852361881197688473136967266486011415928178699739867900043295539132809209633250700991770019123867928787809549244848085823552628380482647071957029239246989790013207813481779922878178396640604845035638202002586563349657265372363599780267257915041051575161407978839505560254219847148069951828787186533312689134010191662281340947732136723324387995948506833756789695438322203233884906388395104930821094347570237214580936005238696478587956025976750521023655292583857934793367423766525642816539810981192629489311571647849060257913405281316012620317553415572682453356531036427669480828397622886673731817148406580692630280449926479081640764398060553993021462714495586831001757448073992464252544990083972011061126548589539795389516683888692889907424919942413696472044430689449440391865796253024651225593279414996717676061896565639181765662049174634030311211328441501618190528085618342551577790892808875775854364653359770206669355724552538891795737952132990434787982448737923176015481240298619918553231506835247995681218652445725395471889427753101305108339632778004366646947427598193933019005784671835879850755484042713695783539424225561077404010324081704039268675417114259323173543110142490918498216082315451914137797120154130884753638706879885591439745584277332912093051406179451641999408869841135689269669609339087680556571421902378820542407663415630160468324122352580785112066391476210129701445039509679589915643310628327728123026088023116406090213509321278001452316527462085975773823888536874897619228525034814563116540403768328732192274154248578282064124285324789478523813763093973403110544403402453787864257817912098994778446441559012136751169183629261969526859819945595113917622705475596793845766557337633262265645045339829809112542944936499532923996167659691918973101236786124706269720495357388623103422132252732518662755438604016044437344972664178584934544285525755031995909065728974532761447112988859970833372887954468495518694867483388315026244090110303989684510951839277846918586919520528951273123270073188090309392103813856677623068745622994950942058430463291643078806353073584689242372756834308639074025179059689616917279466651189025660011107870901066138130145827783895617962308392942664545030639107767320606865412029988067447703913450290833043769890335516013253427030670075031164262884393881143239828889738048569822510927881672881780775538054671929430215556239138697686309061067171077053421689101056536091111356658502837152328050606309945902430933356979768816802057754319268551613037148605946193719637740225998501954409585958851855225386163472479236013509692155285388982889006632567295085190178940805131103108863640493719060655426162180587185527431814942395297449020512165492921258737552491097589621077373622782792342078851623177849907069275061845073370789375491125928995069891535416826926116166869934464235851948595479483492719502868555187692193376849014659498705430190732535232117171594482094177789419576077855728376349389918105781609846088918839223542121053038738404028736475412986088647994642009930217412706119316947955306942344154042358246624860953262619029971865472777072860440972709470367679651890392608196054890981834956498867023776309399761560867380487193166580793617327316017863536528614014311431271932912574126672417812203768820779172414391384908760523110822917239546688390435722030056556953869422212171097601275518895370417124841925479662884809229389017176034003863112045601619831541316810399502475853575830921415190672319107078529612989486509361382347561809863736681678413503354536826958814683396916590423612609502001954196665231336193563298825000155241508148755036577891174745570894360122772580180263572959365891979644432146922063642911694695838159198321596868994360570132073078367191871117993413903078935886565641039125182447642391172755265687639879457104216262353224945186028498050595039126015511075188382253783248630851701388181161449925998226676441301733080038061311699232280176860277853818547211685138254939261280811416716689951169565755588378641287597366948984280249201410502383632880592061725969420219646745514172173293524540660514928104522684370426731471405682206678020815485623026954350073952252469465573881868012013532623137257216801858429288306621360409724294736107880670725953271116589106444902479198621852948487494820483822887126596935777703969331746482669822660347031512384622797271616082117494443897311713204460643650277069950285954148414567979166253754842199676715539266850345229857016416518684384021773883460331951344069189357549216491543019002670145662441709767228932087875236286885357050425072109480434937449855443188324141594255788000063529036599677376497564428399884089474648457227079255730799430486708960980163839348019169128363994662227930172283427279895597085760582891286558356399797897974518257254415621682800754079541003609014337630012783339214677464059264767074447404171328152740204166148870349797849692045301711672025460878822809132235598339062023279766094626636385532993394839666137519130965654247785398197550841089173176570190880507196311805955719700925143021349306185906520884629597449555580769655603705205006636887238895655901638441098069446369635275833193836223856028398223629613605335919846218022953977916766927635269322560676216862358842492768236522445749273035712229800612339417690420871023962509460364213382893282577764006589552742590213449758310518602930033026713756336457722819485464273284864753678004724650583195638524507724307223460028947060915305863605426212466590129585542189668557291479472018391034646651543496187808126857571449432773463422311345292858141417330259251800222088072036886199341389548816919946250152831679398532229866157207646473251695328229906459192025938465583715672571752669781635805433450026788084771427477994464569052409168362876194980831146654720520865971893598522127849983611314609486926483822968159396157903018148065408298795596677493270006936640365923282499999454773679781993105873598482047400909222317226170217140324996974455908150167051005623440623920526135283751558512569012675073271220304975482574815268861063732637451534562313392283664739356343767134383093613140923728796867527675341272849619117840023188876588042219034775659277282318766661989032775874156776735528315771744557611801004717469692280151230154319909283812138926516522380128993123663224092667225163417301424329377690964586958415994098736643541098333353256853288614279032501189991098825069715712814572397994064307423781448154515668780705883213173559016153568382015629222016930957301956779197218581619061741947554029394031689849342881366047546865242088621447937082706254836986182993570863655005816984995964351534947163992139614462133094871815882395081885565649964548171855472338011530700698909595241002706634848337645389598290829260124609588662419599098638041479082952636154523854077728686714898231062827203717953030954682267833955618229455221519508570955241961189085667060117810517316481747010790081598309906390372193615318862021654696418464371093292756436700775161736755945584662711843683378854081568605566678991722054276580149985212589696080958158667010619439839742766853413359135280792743618058112711560085552151305284539817495332432340744871155359544433784596559432956161298163059166902699905568584245278708511340227475755637309180488226442185332226559300179237100081253800801881772093750005823622041472947732472974689890276578465656599939879834425555291610674920079214040358791095379336438402674613937042697477577494623113498960865019594918737790140501875660476300136466238498508125858343844705301421827225712059313266350736017877577841749601746139159502818546059644791463454081679842711209080323828142403847885914483127154981586081148965753120914740786016443919688172555293174437455966794266298050398873342953372285042221998330943246789348175873213227758269965134433997145916494644106960865817330886927127196418583349881312206782013459917569651083966025900941880296411999543705226118732693548319885751490452227603122218641978563237171943713503837551311583481106820583749237564036526890408987060453490909377878578965747675521959241822072655459977270635652724433333465891715508203013614691837351550384578876536370275571704170657550990488678043334247804072699238822312233465872806376822049429820539845554258892148295448813684566314468597031781947399104728601832451514242656649540028866242859520728829066147139225006921099963863599236632293763914511727828723554554714488404290285551607456774248222166366695854535378564682279803522417846458919329595028341756775029091737958100869039699562164747044175456053128801411476518870228804701657326791908811407678043042858019512270222180756278668191421811563889669509156968300428709059687510959042090623878734972017305175016566295386485451318844575863610148086145535187732660713852146003993467019901332628398652669734078866219650212463649351017125932279847077948810108752565016145453993827556494454814195840260998160172908882284352769537861159789514440577750415353747392520990106858306343758429671924587937373124756549056352214790391900722282047479563528639254444527179942383999987138701574229416511069999145846557061769603166862600802631956988256811944322816612641902716204028341417765129495450591135503734419089547227051185480360077069375792569540917254150775201036365788989629048168067342817180406705262359927608419713445284176271994613406803300665982959855228529704733438417736916632896677351720981064591494757701931690566652126747895602914542673480715565942537894514014359899311046125486783625121599069177985609509813892985268940317862428017983462681969370951657232503302506070000875208094870700447838168053610786444859082568429253543995162689618054935605300285409425731523390315452619086455609571507589567322350854494245792905143487855166322644684126269814845310879849268632140463841783031338119287205493792345745172872735850072735404275068743305473550545733553910763754023806508304047600634859380186793259775552285920859632713380572001384356432814146120245376964556387164838982648660170259096891982813739375556176560106830103872981598794989199139474291703397194995802618675367678460219372802069762894799387405342033611549915051101132512709606444316369124462525167278788920205962912348661682425969306961073289318949458810611024023274969469631467503482200292654618883080666393586371068565868564206486236276830153347482915715351778664323771367526484083315257156051186379386235576873617787022396929153211192422997605227224041455386282784730729263753821538578928303642656060352021409019241503918952917075110872539591987131459764120252446432582159786497906315689260898398052226899306873989409190664470516350284564432665530102696725806910572412014029103674180391618532797861956462091644514109404418624535682160861353548274643525684330853872776414321487557090042442757007776717295482575349941124591899108834335910049654733789644181480461159984372968483155635250005270672187417175009374711074250912823778978158597063616254567619877765645124842958094467854241403981376863809925488951273103707496145289427394926999163958231842525325986222921756836366729771510117365129660301045943789568591443574430993933986721672705090319929860549309115907430786948864464379524384758113782713112271242388910311169935723208417045344498744729546925388856890380703635929941693496361917285828722206607288683394150734698776152344193002090654785829124830518916989290458479417144738058356648956718823909880297446960251656031118218026772961888046951646478644990015538099684004984412230182058745870557383439139756611021997416405544860765351419032373775904189811577741549887427353139347885470293584055958502948527536355874056956347350920466707983640702176419296107899640309645835897207708272668753312367136368662291007761493038210964223099159863665320159136554151254740650074319186794471549484111111755183214313402723134808109721777326077338784039623384867384275588013828665468381702376424713517259776474397889555122643768653958292786046743263033318964736256210941361157435048106158819579506274990789240494430020027419806148062597946078215347339598498205152835894006905557649335896911210634120803595690482345573591102292005856404939089420672260185129913665955210813827605004998715975326617612682495829698729833522518264620729712326651425342777608192235647536673799924298465526762569850155652096970657820529018208517274691742132702856892763649139366272237549508227572480532863600085926804138466924005317086540236320680368826189669299525050792369553973256927455121527281943021579209692487235389673750428360036425156759340214670382961555740761190431813755872804001886339342429096888283406066379481895236268626099227777385791716709837412427023439714245950512588324975080635332064237479556838376816703035189359020908118212096367248427439260331146092363454280322688168715542331341713364741344879195991024127597597876276218216425050526834849648784588233939945284713143748360939496834003873561739447737830347034215659833128994393394260292937930936064023250478209452416781879355751590049153977289310321160693915764394945844016255422858980228374225839456099072498330737810155136240880014039862439369103153178743188064496317909607467559431630287006617530356830500397682082547455831600646077329676538432792646647299822078144446580704521529417603985138667394708613628525530267031763659938118701722683716140195003058405220417652800063011024682218918176735371117406414557475448511722089751611559367278363165616337263532217549628505514343073244732297279864879022753120921943282456556690150616425078061225391036829884323519354219076999685187512960092922320696776312293483308356950635307077781603487013570327922793331202172073276374229289791460637228783274941334939430869013542492579265201816295047590789887617788632568706082377729224179676391875623827254386155597744454364892170029725981267570029414156192493623112071107786515809279831489235245366977731779878716553037678088278827857861820094059256018659833973203364295634715933631331650878569647604425079100643815222941241006584128263595964197885525440508032469962135076865730659381922372367293580295257153603109736746187432634299887326566312372581353754704790341993168939482796157212693267859854872303671594831696104485082952608533407884936256621705452365148910188857228452281690636849359478819802431126763554000256611659783228577898740156497984532706992509808708335632842642585176813289636042343090689426493461314139506400048358815664613689565838461896925236720745578410876397904112223709936522894095751172248687198628151120779828421076542973731102007338688297635666058086283552309669325340730066698392896991927812203896075395740241764560054403441972517038614447845372638644445687186704125078091202216181674235036681364462391233412593399340544910400700928870939810501138575422420790851298226940235731228558510040023376698840034523619010874636735470188070422188572872436618495553806948806462923150857469349869147312561736199531902086703932528045949414695083865394895035357249015652670349543226517476913070291419659084564710050638364769491130559550467560279742193940030629056586404376396534567871277983670432899723015153432904436483185985112411992903130598284171620269843601583816100222661496464660961287550582937642702016389011284533561920769957684798846252556926818374077547827416987253362642706218580459826170299460445463933799699973081508078707894923951707312147900808329350868600693821492630864682037071505659816269140954173426599630934048437660807509166302669191041762154632370647800988412225791592407476078046878560889001379049131442567555181715343270250950322056910063086927550317452446261972439660368392034990998237591085006763079460428931159916023527113567357931861857593994025084837530155752376016953707393305806850932586662239482552535920127437518429547047557501549410966917604459831256837439120229841888122933127258706995672883805396902300343996522273852681283958911462963604651663707110613827885510407291642274867527712619467305584051289675225661320367548476681889200113878036888071699854202831282296416722608290048850099467494764775463889825553661917840063543250990254841311661687151900152892149351448917283879658136881663800373743189177802472146736584375122988594395343109831943963095796747192390507433100128321240101377017628946672352355513588559431830763812152196008642923156906967509004358426966471255566588999720701109671384359725938916328968989643588519367107373436798235662423956234981099535661312337764347045464138124786246737199581448412000797769791202628994652636979018953539077775750664843830978333113857273628602683659410337476702532718825644269889790205471737656137870724355466920969476185450107521285651173936897199181921539137606636263537710488798655082196923888039515047550034581801005586558106945877194276133823160380585834275481657941954077971394693661706119106972658580392225782243171381693331482650093216333709113407254543122085321332971942158830312647766906022335063165067948113729890904801096215868955779434431872761564721249053507550762344707014741847353003760745223463617248867119655285575226106314675935967906594415943563805763082505598087374022202984492922868079438507724228355295113478485394125744399750811004177630605723658961574357815328899541651995764709123453251946014693829644532819639218414260472198716270033553058032322126265884198765275732136241792745673547074508211702161888128863860594678665917835148038673803052610882694714277484289575750901203778651888745604456853330318095862707786489215255019411454045598818962392608988051251692901677821547987577104570693956583705881522173641286906815128947777178523510059648021353669062529400718243355080383374585907455798627082728648996856381806472986390409716619926685207856453770868386365655518624909086431529689879276906828039607770602324168466623659286227382603980889273363438031930069430361566007792031148803098086076075135819034403814729076456062519254111701387777441032407471877792026075073882791104270736440893179752022054528644050155117677721995190546912403421432438870928968117483344809220819848870474899797007582656900077414935992156795708559074850997014407073733828208602289786287900146781630944499705724046205714128613452151610353450201470183387081614114071874733575389657743567560244582077009533792855030443219432883153165189829971144403684293841247964825040119332939149043923790003927190863738161128072147825737297291592592348579142171519749821836325910055606534421633267072359791173596434266760436952536906957732504296059102429633528013201323954885775476136410452720104328312173896124071872086648956593069428622678925548434460239367046566078485279211147519222467300739401738284845449724443189594150173278709350851285521700244405381855680762608495906363451506255180613819884607562502106203406297002380584121893489622938090870674781456471340450940188735037973180787699452476967591361046865384433732286798854635828134593344638591088106063164622403308932369382612025711299677840213623022267074720140379751201641690041728121629216136485691004064163608065276094655380075293625331266558970918558856353504204039947617049161896678312702971298795167292819385246680975262689201459342299128289523510879145628296425633177697019652057173234633575686261502574432339772787646762599844307595718434761737271018632122113948633661919114100647721642170775600912305823965330343708851914726898327224180667708765636995939505229202497292437999012091179179333361941197172962468859282902707270296941193696556775801874485647168576323495854993702523728438945338292029831638009289288229116302740980249298316431621182825270823112428975433853616434308875850337916242050505363124808263531855090605396610009377751603479975448649678309505293621842878598610609444073112117296243693743555162390640280837974253055470421803178395427928793757355720769675832638150808869750986476473099913495611007347526586820080841001346503252977063405801955976722089870021814646074839474534012705540908188672248726877545492313721350004176457421840543535917061126007561743408871178390261245721868991654371593183071149630159068170128132146018567402559761907547308758917554419950110697643048965097078646934375727576342224712211892607321092767967830498825367847833008106061288946512947052400826020867618491646868393937681075403978767585334653737779178507354269862841258439560527951371674921847190255362433875046005119775225360427160256253612869539085334231830943601837919900551654564669753933323756209676513736333626126518145433924591588369761914801052023737715494137151143346532514715329105648570443527211374465268123472978449573449927513248401260766561971581789105880047714056224330010476705599238722318707532288656905724884136198032201361598992948536839327643153315989381325037619353247482132174337321203817503704249300218026208457113124399941288876185091058816963556806744185830176623238914552024779887976337875720942226395336727037852163021931871293726236869489461021821630547374383564951427394853018970638838022914966194917290762290176305719356459124713133951801454855803295229870862860825707797202273948634187235938997452180540405070411682617168809432412853957233041098062694922456702905010154077769789748994239012834805511951274429591865402525457550403259863510394167449590994552088696239703215889907685979635465894512116614637650935738579209542910006443112016514434055442213575347990607602564424117977599861195993484349775345571746872364810707090775147023525926213062361437064426059893747631811037996357032428143470399452205679684377155506559213673228280739752417173372365169776596640835862447903738086947064723349489603950029422173049969283683388117654962780330964111006076896137163086519562904447816996326177592874384295416416927963482163626751442719135791021614164860805804978715466942789995991745723994150013656553274303236273687936937452099179557902041862715617578373767746454266341067217786455954543513955122615877469938615340577938596224151723842336115682893695717757265537167494013489228898000286140841697310904920076873652464364207970733273761901563542920152132549813140873463304503374221517174107177954954976816184370006674214388866552697441462330889785691122534788602973625513504838163654806453771934903041253917070810513888101638024283466308982685893495784906085914606669227108136319912115330047949494058083793698572597520239535099473253905697325558116358870271507141330043360574791249975670978430519215124331336825561495646922382122794191272078543436884275649106325092208288532512937303898325260482078195836636038445048276315832053592618516669724434666100334041425958353507345963347184927567614711288683278104920488384877274404446705046481376687513842063027664008906699698008520847503922370502473859366692841285594287533314404709744355636736662623903742099161569751928424120590427922547575824505752388352995848717114294309155109799465835117527730406552178795220550549144418544339726451212713722468957543595614536474726694779419030209598478743301586715120366208572261148419327420923752134250583651261704148494787274771817865374860695918539811889003142669861253675862366866088527046763477522811718772296035770606799007002341201424651174089408862996803346658248853151112304993106410211232755336886136479210072967702762697029054158742628625529881120596452472367184249798573189539101319533836611248099538997375634260727798655675012798695070970754590623195020814996090190058617195333584825755084600655372018853637121437609815143586001825840043951046854571455712132486681244449882249509572951720782919672741341814086084305913375684550722026266064039790192186701423631513760195524366485772174207822757847374170464110208510265122781595803629030401101462723314376199450401965763774951448349255476975609291623610929449291677457838024612536746571836909522522615102951296385956850030777247949276745705180842811920949629620114142535032219008221076498570546886266871410417983824975749014017694598834143226996062245383865394646764488727309846185293848368040601671380135057336885733430604851638242912936639069640810447212362682719987838894655189341945895413819443607814185954361853431478322144946311620942448322108576144309130187715039937205614651460665730293121912841896527562267697346915584126401519805671489089034232788374897935294224579950801298486273567691150550896785099846544543619893419952594472784250722270516519131468545214146761603478460831439665269396890428499148107883276877749204187077656077143356720296061990548994528849463551022577454655611932869238857198751150303398587494915301259824990769212501383201630202583357854423174385542588832502992862830188921992419413326576465649612437706322967381700800974352533395300134751481106179110192601701097964145527254724500067082757782075689118518701423148859462393424539697063988788849936238578812356793921912986447744407099059421619478008523785728723933713616762987673344145094426090057080690006413333483984262536029740981576955135914587645912883981857211084146577194975452574751233404192230154742920028027870087575537754432254347838262339080520034949459210073877684802405577973570418152257526270534300193049368459765283551427603567019944304865373965025096184842369631607780224195151749568462657581139103549109911688587766341990805693312828208754947367908384230665189161784078309915493785697348154060638807822933697653222259980762447612776386404517436904552594904064222913752649275672463882293344094800972402324407395269905818047999537415562868701155339663378762506111235260728088467452510234623115837746568111463274426209780082325252846354609441972731123464895739092321947249664731279268093095282896934253907067030032863376706140515725659349196715440474050639791883086280570896272370212968496984174083709927099134382030964732637447095314606862979224301241097542593264339096890134797448286089981773081607421076237256785710563135533906947366837032184010946003118911763019020485076017073144280225562710809851538183076232619266952700258723482832902258356562102241104558948641626384804837681967867113899396938594988621081973873985649204975932178609758825046011063482100303955913677582587394537928989557498936763937574744657669318605540991572174386567087590697534380447489951801928232985225319731670375017897348637067471823654700030303049257370753098382152975518768426729704904023777096045025473609708377036997119156504428205365177777399474431133059960975029557375466629588313548959878582752455080636500643307908324771518639070726523401815061429194613839439209134227289909757908230690031148152557465006880650600131807977626671615136780162600249727336578488709787935453442875794545304133849654057755074724668895541453026338493039889047338096050678223946336010276642347254745826867054741713295489214242659123937776243717944038541156658664886722097656411159287809239349730394112999226821380755371674370405864011922989068730699575419261641278705073314092873709532928281244678416573833991454122356404443427329993309919009164373116889747541824231681691584535717324815635762707874625192208017146289884739706337191903495899746900925886277914810305152943952912787806619544980690786963958101624729724999092604579282573013894950071764048216235459793031703111267235504174145199574168711969866208954411412505135736407123177624816739843463728017335601068750251918347831293111601410507632957854654839869792227516523103663636310751675068841169774271934122046489377350144708657597021751690014609001881085157341602264084928059897084130631600956236342775012543070521919557014790610488184360474565206646828487707131642572217561736135955383135944824151780434790489376277355544017556493645707736126738145554036555616463583778005023446691372774954080971802282642956794424390567922853663605459043392333375960818232785280527313941309688775932229352852253234638964074365418906948525860626516115354684451551388811088978792874381470938037656589737337593851521923712996761152838482722278355237718062029260395208117616183433093664442587874015135045438607866127603918916050053273459576367069510553126944918109815863863214218447266154897988801982045909880468626445664159574238138428395067677520157325888768671673225987510192381880021634081136558696003456167324955150242335421053627002874757991699212748542941266711270519599381705207807221410910633600024745242861536765200714552531314153727366516654076674283704654858444161825740212015310189663942184837873570494500390220423411648293568225145393521838658337072932898833825494377888661134698032134011939967201175222364509978870083935139649988024721359719924013799502369386041568300002161862955666708123081186878231029980251814162553138377681065061486333055326418291661522769595613227485547766102764711007845032363170047855590840589141804256006008006392314230187481501295101445523313444528560942751638997275568516523418144427622367379155116375982048448565608202811486987957912199386040212417735683184288605480877132154710235064379913738742984663597156351199028159943094789499931949761476996890299060597119728247764833511013972311584962016832987184264900593908602973032946998974197181206784781305645961693534542735741382342449689947413062739677069914846183700019736295586244625434616493480588010458393270033530892290763776949393849005657837925874990620134649923847405142574199504660061643481720366717880639983572725750300289487637386530641425397834127246696434725732428222136186998302836537279874229715096467288798950859410191338709062273762250727166260488810952650858261032230916019039234384498588643430534530684933840478047184593859819905418646765118424056633889080118505372264116967052635950275952390446743086159344335565954932887871476092904359028875572543455778601438171485058777696065528786015388383383849367369624138128456308016171586649241134224039715384346969903205485229917096722389415965394877746326650766198105726598479203174208396162577956603065863725372677065695115406118363367199679733080653257302325366181352801304635191813385833302965155598305612648242283877574467818216040207331817221864536819300736520992460830658646957235658201261537937035206774565413223004215421127211155746912066127139555312552887798775046394896014961550668933517419072519127221150540189431988802780388147724500275641849277600008783619590408923946640451527864820000342637550120939648994118544511845290204256443191500337971451931953651860437972599324350785429343940680086323877481386551676727553107615183069018111874326772176051258687856891104208647008172082667824719383168071825717757874501483831956527389162605403510594894559596288106449930690514060335442631524875051903633078014556248164264647233673219026466185192433460360727273184229221624696247352757984946315072248527938058641834249101971494553812516922479101534841973992492458849575952772518045718933265849130224758984368087288667671380992774697432632649191207937965915496646549910020813130305208895352255661762933735434186482127455045647401354530947722850674797122775862999382256695325524484225008939717137918483034994123710125898877515266385452664284131444404390783476990677381958497629307644233148473922886730553845472185011783402424301697259808974822201330607945619711577254142775444244619718139807355411672733010344554681900773049939440643894785854382849029163801917913647744210019980290481607229255511143247132015813860138819941301053257406949234137720393081050733061195344840889776249772479073778099347816627048300578460338695192068956957342722062786883295105611366439786083615081228923834919332067237405946193289201183198635426289638723021130398329096222172056588882424434465093935287817976039929946028601108573580713098052228003421290644125850212365724701889600105741852887061761328517869887640349479362988503916884668471194389555567799357578156744578946929190571223174898621256795180500714148131906080806889297042227476017073056217379376718826729331745754214420164209662357155844656533217372378276562926007109562311008158661877470587613898166912779041955560644129496416097241822349316875818968190657878295086529111194109420427584073381890312096681967454334116153969366888806234884746724484158729512627860379826611015258839497494656509700061784571387440062272631732780439104355841988460191306736795995065366093391773836217311609639715199367278507437484085763081165185657399867360585661865723784985476414036821977151534063933106047012089758384588317159763618532806247171888819322483721756665029932234547444105193386589584055151954980872966938956134346313250945815711559214867826689314921712053341492181966250078014283319005690455701227725469836858409145360165730851557418582567142892882602241563133110350687504365290210770723867291046339744485907739428946167552534586782935562729824883637677235253041911318203222374940042559586451256133714480398301104779790557569405423683947675951429692169699325626106990245957395081336875589496720333345352069764537127200406796865694238440411054964087031919439183170498842180826369598747767842229045791127992948877924640773239876082033661310502591905024012605344791207060126861366087050690106821440186416890798502708805971160774711382800633684699037653782772326857707345395993805386946342426080372069312327269084763013141354052104457632993001286491987987486292703765660970330549469982286582941288156938096043164766104426447737176843079136739054517750890039352319983556205368027388787940452822671185429167183431705900590586338676711129122736091233150713423120583054622723964961669904362378247195762619744712297444988245647141043979273179103621554924775972805459314410694227454942191282378504988477943628319635744590704474600061785561502596486194535533227118746188691293466799837696023110304067163270211905906799664743440166446011158439920225371118022077044304762822851121397156376669281816451971676747678812722658199328316029406256952921683283889280929585898217755257236197073666701446176396318167827478942030822833313536173305509849241238531719584384361670158112933951186335656052873912758595032413311966860865209241167105432598378085858805972824195866799305159268320341491112177973253512094463015791852364643070334531938597928953776486193958654202116997280443889409438383714104464555266854972167992058979217654090307829608593428470205836731322176684493233105086018652041809172164013394347074938624127188646262140079469581469017538013911759965518608770531125919330171089737981108739174093463946449121251370357883669392366861287639593109679174853954794811541848983318168433444219014965520634009230534276771178435600630204637769403012243948619073917953545899149124706667669950204978603846223233980793118702183500369965731426467346590354137696086010536638626554735095944339201043986614042389537591734170966291535981501904283433208052170990603809163986615583383683470805908606874149807731803316684544954462496970088085576989862006896335025275441384030933367863146060369721274271043367220940194134612345186992770415873398312281191122770608524401543491799418530483994285821024566750257541504079538244683493157316862151164217197204862923147917467167709315964986325993611874951573118491492638255854340558493706444035055881342827000081531795003468729557022278830373853719500136078604514877047221394208049821498156273265561290380604086327888986671051518908452935760754699689832543821478137043887921339107000947778022600611841021115901446894079606543201886067048077025373398062398697048427414863306777259729257242224560048281197684122385541785305940244237066184073520140106178724057893897126023027500721057670326234577176967031959146521589155900916384996743085023530120508143032420758721687494306848734017745458432973519793307363574751071797433137361717434046695539895834013136071882340493438577345390653511341109503738952943922969122793206672544869052587644892747845229822129452180570324164978667821255955145763239600929532602062608001751152115828027135497330775065062853856016530229788140940140841842865358693012701091963329846455706998488672771737476843212694897679161411870233629252985833190269474251936571154299489176424882725024466618133175639074954197977748655757721801612832709445430275794249375789027816682077463241986048585551919662345354648101244487266399354599660738860095238239861831150178698680137969627206600403115956921091017587765279365801065363723799934001191592689340726236364948784285443639427123719168173428206843912387982559527895916403393382589538613181022478587620257448921949142654746204527428633286059572268288034549370443650696304988517584386374535900507495011884140622614722871291558808527481396329517368902312164584043366061950889035771818930781931217123203391449959725846295520938145278807978305462510127447151906410061504243762813560176185842177287605438139095433218925722805604490446441269479603656075697051743441021949033978383100379560888170752820289733349753277443622312502905512590133706713820881336164460723280728921441801021638948860473163608175239744896088083976303094145527905775894382737628943321432288341453316301678094058157386450706489077964404606171610311029499652664220117874219144631777372149610499992269982038971302572973783552326512904178867164259825440610220273346324201446838992105298437922367852282808783241668160290438132577534671253390846251813322556227680806203400834188890381386879070322449522758086605843634923583687223534565252340075341801341243340389048672250343560775162027506860719475046827927952653793460900225494412558113688903389020145632331216781949096838861543665257215190612356918433253471238755619926284864759619713602998001652301724073472044198232755092596901871696291471132892071766678123395387223167902567082952622863367353824414997781261994981698944417906075094521991828549782148542007819278896306298049991656306624930647226138016158960776198999306213781316211302579611178906520494296378036979620409004571567889056786173669483829328207497832094147092427567733654028279526316293461713480682851501252682619086140171919387121189529066273110252001840932818548903994053838537817195338258186326603839058838304827238478796331435428197403209877122114479964852632170271430805519680106119289602899695387275538377748051088668045808404402649263432189225312657311878728337518440080343039669326181388402160923336733362236873565205673296354392127579347930268749046841366374349847092857884748077654481746256779840554051916228402231334195073669017148537515424129503801127677672926855577681143122239653639897849228696683019472199053675732654821183373236018681274593357324614315558830708866157340673393727930941172268210140625304191845645590193276501466806936456318011799776905040664491484252018413163320335837534206564398348074760971274983765470608771945362714046156782407272987487765364859328080448766311796019039043610773854909723621395327002072528820508822438715843332754961072788390956865546737471674013272168040327997651753230088124406642696918186616005699757381068628455237306871708375414415615142769978086969206828918627940273805176775060906266535600313916307945220307644183234680924519569978070190166199446776493125947485350483499227834927420114053962499355814668610245117889564046552810179324927308957205380039061107112768256988873214424611226434934376122905930708894142032321315543172232697090896774040246166370130385952331120318356520370339999294890019146156183455537721321798655543244968786573909013364059246873091648391570596383839661209609766002590132347097640428377628939310140800324803722279935422284574570835268737846921839785440079880855239267658062866247398891480163636398478089990121309747160127426973619633183300235679737548006772540884062932911571940670790003739311224183211872463265491875626645252116091625711812010109122501566470933997126944866709580570905183000215563352202240897117996710276240528272170920571380729530675812143806633868905982143456802933213925350896297588277304793774883185364302489630186448808125037450274914261827324756371305204826046627161806015766935146212720190705467769062690614787926641282448308431652833342177148827419320782571082056937292142774734079170953599634779629153424149403065962357916034895675309655279192879636735352240486942092227188549801566340475322975857976471619705006230676007564182129503969984143566879680323686664111850913767765415171103481921386125576393970415202652231397946892793492212512097537706215054601938508467702149760040680680370630454731240506620978423622246759050316006875773410333039888970763774134672156921878129771749304121464097339887786048175154167664104094008661145586989390442794771671986608408036317956030116095798665112301646931793889147870133783280468279537599952891420875388461531209903653580580589152847947584101429132449159625768953636144529264157267707800392151223791108365617087664055187554980018970059739566845415677594059232292871592696748437513387155801104179363877681608238129471533486919114937592581414607647272351415417597475652375930017737851310130658078083302187853170897539998607766539826080238862702485656340414980938644094032532218391685589123834507189035339163420835567060911284616706375423722866837112434996635344496277833794160435059865228161971904814907352025701682522589815446159871132694038433920849938406669020975565695261335044387097594728197658612420071363253319172974320582738841524170410592929604558637316098961530948076499870437014862842629241305470339776017081269212337305823827220461093261249188566526411456341055510592006418800216093296675618770051156325943519658159502228399106770910983437887084261405171688901079186901276542343518945877971591588083871751067519347036430720528978418295854895093381872699989660507640719516478589195083100779110107453508541749363429000343844424497316160899269927070825657117333684758748651567227187092942787247264530158741717036145073765810689721010235216500430676728307475988663755475038960913049247974053400042751071455465091510161102407028972251354228752760264938081467286964875899167720387202980112819741193742334090210412589600466777342867588601461472970251559291234804139986517635245911802453123697508460476515919028762613259896689189042556929180368249234946465666224923553352866118667898348274132048543997132785774220819733895402877700446742368413675982879193148371502186439247518622121832095077412276452153181025333655238004169469807335778765132060482594204504932308409189408063335431452930721440662546992733632907709651500388338603942024385592244882812556114599054038178301714690772068199979209078027706234396250689964476554856621562802123930142944238258418842227234980980673048372518951947627763643746805389640541407036126876544115173066781903571583252976764572975676681239634316455970871115157670164278135805066898065371039866220174909709657409610687564793896401226107223880613791502107211952531626332659044730500927450638523098312618337871923712185788755964055926346769319673507910834432004952163514829178032996833974678606492678317404779414213669629129623433198076360733326336787868540012252502439084065501473084146390408161010760133318257298733635334819071951527663616982512415618127388373377450685697707965456137612033400310011009113910008924870744808152225420273410857926159516046458820155155639436169197634722048216528725745076562404874984985158818582738264537504397773796547279158422754470624660322609310775198394890739399843078339626458442527071348870573809173920908433964700100557910729047533110484254194471368161341461861315899566375659407905593655291512719433346079874606854648086607603770035511988184971263147522649434893086398781182302474733471089194109635114216903775664961564950834240395213166335563959536775061261414721033361877881157931048431060525415314804381990570957943085835237786357381341369624872926989712860894289622550454441085320895363640559374808995245413402144430608366905970970515662437174424721783152313455022806504066913253818320247789522333346967937333796292127457606133896372549645211420139264638923603429840273430851226071044194097997515719942604369906312952199028011758109477206882434045557708578567982725951018759963245927642817848368081555785273626407515364272244500501691817410301625137835560319775775033387947203621566312142463180218472312962488956634138360978448418957535420772926249227020039966575595429667941102104826515046381768702480340483274857497408974850271307919998810323775603777962276131068404555610178278753902668792415289473080631027030613933580133820720449550791625560058513947474021022257267437449319969439534988214493007382809924086605020034925922582606040528599242312374811625566865988298561454425176696291505838917893809701006776268846272751394148462271837085958173333567196188065237770334661110460267504504309629522783690910305817380961877017810228242643173408707655445253285834579931600153904990857281283075604627341508431364342804950119370531540942005246831321259279076801311818373084014481394802832443642180569320086488449677724785365774568499611099048231431999714172228410950254278455465759530353384580260000987801157002766680628242982522066281952244504917218353081877455637837891927154187835112604092227235515856157789673876062091088501359420889740294826139026491212037981815948116533337323086707779188890691245639257606393555820093522866416224463513727870618089352135633999355399217593308815568972962846816711424005717702136513532063546814057450974284978429354327205767531665021135970579208836435918127521223382483664413732098991027671005601282371767379098453386721975761743598046282869316659107069506760668122121267075715326739423639631154483544629511634676775824036523025068681426274152040478932659333363910100999585330983022795011951530358631802690814955899142677220319150187314481694483962560587265559123780479958511904352381529540589694718082768912545231506987045745598497839748667642922248903553765044738075926046036970396187741974888144835319803790963814313273398868524383831666417832117068154977953827245794065730008045840438836005051644056809539124150047489123358897655712525423498263165001868535820527615214984081681551762428483771071658777851447396429539294102883741979010914078884126808671898417430492539080703475392045340318132366824377772980266330114272102761045550228546972384258054323582597510773036010937675875015171410473278185917863224182823412650335640578401203673531286074731797206923781217858245042232245650919113660178990661940166951074863246062216760538395368891382123122459719929271241135690432819228388008475287459812010275716347131039593222925885629054024716624978401327569178158696384528631993067033746891006404105174494965500193772486880875805553983699105776144020460857098528871499391380325607360031401679025101803111065729928805768817831258648970750197484689762075708462671884663536659462294461873694131874753255944101440480169831771841377085368855074691389565837043439814831418049259774583638846494662464055088275929610766844079248697034484759447352452108544536949022717381108919851457490496755549458366833488264215356602870360943465960603548232622820808691082148044687456517020314207416963357309251326008261819266692715744864633772194730882872054811675904210028802458580257930789500757553127753951686757939696251525119336436016479289693627042431071392274170962657534282166295260367279274707532041630826484275906439559026316771190185232417703671281784819046647373113014962047474941564719238893124661735611111699223877286628848597376055355225441322401526084563153729732229095327028844067102160016169508423632744241953605541039558159466794945615067286713726780061389792267568413758708137610705477629258839449371922533257411547659579683638001919308775814091963862012972898081519466820712190777756204177806410094479811684834069651620771325628126363157043448039365580009776118620763244767694114929801817256988701600533425923306776417918795130933736926042959063634930342724222595015098145659787625556628759955928915845713527579983613748425767183427680426688675680735367751399049853203257464274799343043808476644166897015794081075290893214236203053523642382230052529792483081798826098994656260946335745561971515855490751246697795218663338423103805469860707885500064811734299596257857024466076150820672395668856070595594244702470845302908396835336221427348555406074686713811971834606422830541470325558411502452160173838761181681395203154731942608748810044299721997306661960639201492961280983166548948665220669505742088450012976881161660273870787394505121524222084287088339461826096172069269002242984071274752128215640494189969822499450859549928967733616595133309884159277072423966414178025377436609760793130853438214116330042999677685078415457272386084388723918178950636970173573829867774533005613122718510375326500358782335546746171154001999040022465108119309602716245509241549677536893994468999152440071270155449935087264401409690093365650399010129851150140381759278100922173662004587001578245738093716623045462278043017924125130627133502844526157942827528064949839246291377190582775901146155786302858600823112761457365439377094626767473511267625339526175034716242872664060325847638888677452416385008944081240512140977472788307721047091174115965428589856018823232348789770675925356553923818115746180394475398762560118419526980759183866848043936048723754570303676097371127697379235490838193152022302825202713398174810771597565983887438959234570847469746960648358945287579383306287214592644206510468440071755290460885392026877251274283222683662400757227564014707493750755390935214065681907802156642128864518796941964283579459522195031653864776602622587134900336423466192123280372241680603932002744828079960620142724035561305274885732118416101805797911696603981313878498108704531467791327946544011699466478814681105828580045256868014250431562158172708241004431990186147904488687587074015911713042507719738766520383159180471232460558739080712729028555302005009080333534308023826411962521279380497969898017345485822648992875709364560258568529018361805909641861512225147898714317416583431376651971650117053448047749142618881428921555899748879889628705136289432038563467622261263650896334843018195393911549786147079199135919451796758013270043561013157355656955841539592256212884228130780188854265746331355419937577916938861289539483111753814821969180627556040693637733252361306323944584679998796018497799612052631966717141564611244821974099164850888713775050340208513168891629074801333216944128715044466157419906026183851183069528557885904707488926385064052122765303669157659741995003955930178677645299016447624962107041711693656108325101814810890799464352449144437880450995696321354619329045734185470667877519037751036493084961876172348922203631985961085598153910019032174258179137434721333675559961897295365166789640296304589344659584160465962443423959982558596076341617367856732416581553258926078701980858625950952916277646142643016152109137916949947877745609128180275071264216570487370712376206207779016899647251894047657977405212345309422863163439502747965123644933157892556149438804163759472534274950549699365892661046818607456712937233079397912504327360169267951187285969783082132713069167564885673536099550621898631084143310941271391404075063276872106104554427860243124933904106133214066404696491487547893742245608382995941801548856012870104774322053820442580442558904452168826711520078970384939549122616386677584308393171110953639400774579915343861574679934421005118963023060998726823861780440655172109003808742023172870862629315598352114206775250340412775879794881425729061831606554816134825067055173246488452235569842527928117427958718169151517066831086220165800123413029289936248683099323481112786169751805859849710959248019431643541356924856685329917009865609281469892056563917751149028459410788371755009665649380682319389990135318365564895935072898213124665771923348957343675399503766835842897611328814871182212294710373045762522336780159923403382959506825681219895512362531677089909287636443888235919641666025819525134537715835734751767638056097128731390443270575057829470281635867229088456814056326193635453689268380009718140287047720875001761485587322260361967363547400653579186321690409699260996798761551690871519991464459126631802574262702901699906858490474209077188324408713949561748002972651576796513657580465426689652510933074240273558858594302646458403625987549459396239209877897211887555474234801911779967379691361686412671899373650691870538186218915899147590931551015329792311062419418723223393517459677957930489266400258301535028399613862191660730898085382281154731621124996393184451164828542648790342921140736855859093806036176359733797974643893206791471005884190627326356933813512488247493209526411367957773658507456742898254516126109941993605925589585230003264227929696984548389200174208489853881956597415763992442850737891500643879773644951240008272021610949138848552667131446612842588117387107702007670815721883043910934837929712522079880791256685142912789109351132098328666472509211608621900083042701578489883407524086296351207892362975700829415156306287873069471650623771815607073725922758280704331786963262610230267542122057339527862132801297705556062858837167098442703724367499909891281910024531292011623688267355708891341035999312377829435045102282536885072119500490412814636006515937784757033344675417585669173402244368784730298288637236817972798056614821636284340348289116797638215777866936216053862558486160627850828415905904134038569450943200580041716545377886795647971972489964432940360409969917975535372158350994518351774124258169745520984055695433685192047297006411836933888804752371329426292517246533885357926158624566607804449898596818134405375164915721826536281402650129009078724257658073557837649657895854440553798496547872553714722762992090064308939466902439554696874498557064269110812638951028736458713847290236860496490747587825465794094388192672373126997173897976763793182441948754350032492723989914611142022213070241728794948045431817084871888403960689385990356276705961345391497777341064208213717052825203104376932178460275894024451979151099788026663105194720298049289903178764926025720921679137178590140209708930815664723264705220426059653568602129597144743441190075359181108785088900866093191450636585923468482617195589582020297354227627555729631309891897447228954580761243914796057928683302068886322888836035723131958283055075781577856462910844945741252472545943053128839967295727358193606958004301890072377426591193236147036076963431826945185775245124410349636276855127924355573460135919105089463047304731332914221863063911330281497258704061737134250557368723108695186533934726505063924402958631731580426333329928504832129863528832456776412018699640635489699390869135095146879296226179645544527917263538782149811190301115827178474506926181875768999495215718014789337202494435291476122007311430887754443373367514172001690445261688332537189215114089946238403196452569729647205030790495218735477313582768766731384166800840113187144401400075477661414283412441687330513245584004128409581541474060980818889776692945861160794575020178047379866008136561930193674247713117362829922166370953886643299681006929279459808665638063716430937237374580570900056350525502916512072047311687959707426051049770616501859650552798786607530359672622095256576556406138519291476704355036517686732916281943984791396509367447076671941881608569238699926873250185820712306208710715193500683776909425902777951620749119684770744352903495253008768691339643851767376250244568582869063992703390948634036076799633201997159663013097695792151281922272344333139668741649297578846385035768790076535368707996045135384040408971329614044233639198987069147727620230138197030247352068537299233507399708859566111365759315624036918969463683396349342479360300170170990387716115739710258465060366533149350204472180232117671476565925641589439082785736665497068740429624731943886616758737560134496696556742826491641130056578427358713135954993269648659295376459643766623784802265845678245941974284659880516510525194723336253228208036099656012368801663828519022340806013090475445874033218040814925364748875742241247669275370133440830736934411277596006759525995843012982217823066464720576596359521818953603349261242187022025428116517629418674127935160270264316993833187960428161971088164274564358769497432310050062825360618309817591600530935761001955620109502804593751494278009207525757564157358028460388644738216029328894937191569243367744436091010810010083127921082339480744748719215693264608874690270127784799704176430428495915288159624090595043045494434549218942135135286272284407937403913239625012065250822684141056764834595374985441614935344881645686981791739009194139022592394217470317147584118067363330212702338743871579378316117604420940110273151566811702385744274095137378645406745776245871516170865536267653711772312164343045719947421721790190221034307155039134594867803726352482860979102477963537139058634998171391651704318640363015452639734201136390366983594198604047233299599713035822814485231603259974580621067527711846696121988623425083682324948803690813274101310802555803860052375356855215468601424652367946833701545657657286296848569490361036479737223077232578759381604046943378739807722971313091224618463663622471367765137369367740044856875630194903380661993809955221818994449235651706534806814147508116970480857563242065164650121778387371658043244465133605732975759393057218628680782741852765646442974559357142094529622453701815091442390477563259736775605838054474608680442422306713386454185665329610068702278456309849688305928537490597182679289206789645276359910680731371937809530577121811711289557439369149136992820899371545955814390184245871632369891662115731111315621598771158856231237869275780966122086917457176693697658094151756337695844943307490599216691122906720337388773697473641895841774110540069814141156636490003813016915240140956406971824326388485052480579555959639057774246524884456935633396826299204243574578718076977266139377899632667698092993010144401947989672874898826649998699456042797586015553265681315790117117448014287836008731570064492372243594660271946381000357936060569330602066234193059191084821204596463483179776857573488950804919331786426076853855565245438545255853793832395199431879000575645594997074884365184772261002236589741588078138180890953122323684021744721064827074502135936672763798350037793463289539960254510549289353167576155746681793974425792624529166024562216548167773095813505119607357948883722582458326769022643780390470593842634772040850289947020970624023494564756476990893425389625568975107671993951597692338906657591386101017781794933096581472503287050501078095341113747407807675024564757574701092041571840167860013912548904285641401688408169442514976597333371834974732509380701462710938004869472201190484434807643651659253353496421417405664422676445880755661647904539469559304362965317616425205763208615326518020047724117914504427435798372944654430720948431168364880977968563426599636283055271235545489256304316114509796856288596124382103187774603073871861648922324751753633458731703449354314231638381687491127954846533196563091625616992859569170398647822050500640075393065598689830027069810964264247703840226021131501130463608717935016709627557173132478942892981525316395411452453146384207960330567765656025397807424561602285833938025301901425300653672474958136813041846869438026312675892183926487537593078969992326616554990393558021448737929324850200769216252598447832872785455317682129579340720935284827385211416814486384949355746742507703128025846662769051922963410243663759831197991708688674305395931988988734851332131951741347984256381897560286672739739056021400926656583665519911460350250126836744827845430257403676709150801201296650079492301730290720972941089109069447974813158494155674646898480289895059562759197790570468087190275637140514307440047409960765125920055785016762293819272134889403168795245300461866235439879419194658560846918504857100781941075279198705611396727357333446280547941782241531867995184870004352336763770321154414426750657490148937517691228881685014693222053678379884923447233511248881467992345612755050942676817169427387672947711520070488642475720041293076573201350081483864209705788150630189884187264078193057288197364643129924741942949396611187595440050121024968256964387192234754388573390246300142466637015896997313312149295354519841472397190718799051245686068166343569728233473519901079155628438446357695058316052350081516644624377971498510826793617891247866830908944363807095561714483255822459014019752625947530313845100488231053430999702981637861248227373024564345458517064947554227740996520320967652872817350493100949012034110600224811819545389135259720296657471960979963676639739023050570211881875708358790945720787937179552408316968220822265040932446161858798259273055468247391137793798305691398619867454879015721624885818822342952186449453375832651721693284057062219599631015944917427797638734919423859075825077373956534976543953553933781169307484686930015079018926262475725588139433942069431009884592212388814192933489372525978671920142970342529140095990682235399467760020896467457765790448970732010545897618426917874677924525789373902088384107113367115707354243990509061031411582311399702784774774936777956507966366552688905539185184369702905088234074463019366637596000681100374525740714579284016092174841118854408058491840113685748504868069021384826841639900392389623036249359907115371145146862811755103536103752689852342585631930863837557813762131069627776586842923480997864583048610831317437908194434698430449825655822894475033875528297519223213761561568444489733049254698996311519107734533876296104858569049791595835830307545541946024681592023769751648000002393634135003886764513728320372686963584125205865985105164212917868678068383398007600714173486748380558601541179233736727154931546966627544666689702081786780588981099486652561872876530401226518196100247308549063925342618925742760367832711937484080626813959996726919085129830042247958815113183582428748214849281450677277402674780556351896410910269350925051301758684627257532173291964436232461033107461561526843778859633326654371233434929513161154992829449229924256605657102884010647811995829405092902294118666351863870288609610598106166259081312134623942907276104928987518688354460138134271527239492006003447097733246047578705909846135702707798267210148671168182287512533875032475514936170002736989921790324097982373628729225787377153908370787831890011506264645226731704305482906170895417123052634787275545081092096670369304128238203511642705940678969910509346134698781068482390550000929118170836668756388542729294863671948657613690764526422024776097856765328846811856788776250270564990408115372730774724059277246848649390544912010423966540228461548298669641042510084451900675140382923279028005996977320281294149694926929200580990433655156630147149931893928070520102256508611490426390836711777061655393032146903321716734066382057074159343600024635920055591957026923233025135577116754193360216420240219606650719186485335737003717324959703750509650555693503114167047026015931057303272295466250819584289972146242719304914543207448795404688538150231021440610556567851856063349029446320225905887293064749653231127603385168745194093389231365239769597872043442518698591386719477918021247133614905994971480135783811064828853399773508730640505444423570015423370133896588685962866483397563475759210873007500034183512179274019757666926224583058074978491993715357340149443528886512249935766092755943002277058759005090533247957913156788972287793812300681518182815721125665213256113923072625833179901872772190767565183863114710265444135790101716916123161823040328221297007382471996159905603684319281095100853824359918265808848284408903086167170540102150526419865355162350751754881509786467058557313423593596383591429322212793416464032123282421789191996706382703291705366067003503592907349299589891151437365906487336832990022404967141567875790587224008719315037706125043190660740633764353444908348669902393128969329639669938259698875057920694603602042684795229601342820764804290052144942428967894631945338923356515958118318719383287723513414088854611257045268837080301898667742577413948503836502899684476593188982102725999906600851136736704788398587549669108961944535845683813004638249416192538572923533515140326421533222095473344361038884150425140563469036821468460091642839163206180922220081076336641206536333733238582303100167018673401755714003453854496436440096990787133208215322604419290638840176936483684384969725844688251882674115326547351226413022117890166919762743700828972189915222849610751575924280132592960130010967412015525546355985192503254123974596171054622844265862057787414350184949386562630170327582613594523604601956514559099514405895023956772681280313957329687612539493609564178865311751129562797880269875941478467402878700769146697461753824538816170071349048362462985523933744102957604571335203225996083783949814977680477364686963374926498214981443413162723006264151767769975672347439606996832845892616492791758751159364977694306171994743416251679687391186693426024308610339947173458005168640423160212192866512404296763186058643278737530905428729781652559248030903036169142856796758482183606706244876401865922549200755403827607568641687584138914254444973939598339544243917186216120594201665153999417791390528874260432075949031413623630921371128941903189987838116775040824592746165593845924491602110765452268962732977714091342495023331728341008151417374754932219273681755903286713786745397468790318161473678245045594800205228820593620028055717480597385435157342172739930277791914124103750815947472154730427549655329004426409656501312039600129794098136757893857479445862687000880234779056656283839678040700334191029952090939612180569903041683872355593349763715161061990905101854088864062335374556232373029267427733659902514770575122758435628807570611274348271596019438485679691396143460408220741898506375051822912331141822635952347931976418682728706230542381446181727766455984583275788690031618925541925473866219342710014797467297361002437613612240644723726182731356494454571524339116295581294546010726737321938612136455877887166725407762126212213598824223972001608853934474964239229756743542092798869509191105865533796608134243892390181911088094446479704794909051180996457060352217727473983354760936047744339250746987063441813681445509327043758818019684625799481189501792424057523953816309080273886349841989499736164690407675057939928873636573605893041447166460384865787170135445532925322255538715206412410426488026216547276583426271083829641934952585552594971717453518361344231863000652290674919419730710478607095446784309720295909585108495652840620836887637535902559018155857900104528518402625439741514442497262170792454240469755931739637191608956569319814361099854614095543877731142537059354967393850202057372241949478500292854894299855323958913225256009556677230746361448558057069671010664698885388789479566834832151217194059661993505490764648657085673121233373515715525266557784773669253754016550768051404256822942909417083006083775154434564384021622032582617041949163429877042956343798865744488705654947701479962706811855840321399912961278647850656429191408394008174962519593937562845494975882524048880700044869014473880857888989960858102723699708218080538477238349879285722103430046873642733631898531856104165666462771902754607418657442220249164723657169913407979012611411990391032449465811773772808072037462073079193756242814707930394039059375822507249566364224724284321075686365550093979539386990938442087351697058779989935241735948707174402423804720634422544045040282324650365759958423641690521669896434408587045269686281885374090125996880676966502310979174700498533127136938862350795455320190797111059901721459897515419471248307499428623926003022316131016059599804271416756293682158240620770355222172868571154259734979898748545708095911713708073328414241141974261131153494342862733491925881893792630834687655829476763674460620253320415197990322461402639674938233854710214558542400087107695704401704599482138184221681063824143711265950979310652824199716746111635624499261819385027145715458312076075963882817985112638274186971352767055626290503198736833344047131185312749718645416385803787012167101854437075692877004688306233606855596641184434293183885709930423034314348930834241765612831109451338283462533785484886332972778751560952279353088316188111899194769803023027912061866117747472226677486465893698423664705971444198801136421245723272038563546278490991650729922587727760704357522959484785881993689465672020825762026722951252024720178126769903743009700908957543579886651487470810206023201570712079802311201810204170998805685745848380974482198164276907793114785841681849744417316479804865115415335585291601642382976591384946072639428617907559351881325958580963527388124739831715612316825230454386331178721687779147706482209859191034731185982333964251679649095965404337748584254491800752995759512889212640192153144216895462344466026466381740163770519541774738810015307503374684780039254087085953015165177810234747292494791634407646972069811929951252279534999610512975445064247087784521826924258128680388023418435180442659219803752460870267396375145847202999900973506529654412841658268709473073330030538794871613772159740568070983268052944130978490400917949773031692296920657216134047466895752023567771811005014402035790439298165692645151327985585265393099989359423113462016289403967940278535469842884210461372070189082686875323981346694705819228257418036688446317267713266268385389505926433567232602533271753528722050182217877754456823228954161281193032035732488541266785543654270317561543933045926672856015467882611436514014664848546446778904988932300610467548407513218753867057072214340782747720232552328621368386959914230381793400661401083356232217978504743417161359883252367150159120409423667957092083129078256306824349675147916668401016602473932608785384647734472490288569029840737107487945001068877427944486833871029376155439921679631541689595894742222581268328804613646794766869468877281837858192791875381618329482674685030851343204043364008401668871376323132789535326581625696364843732597992981104069748404973477703275450245126254083060867231912517922754119572275710238248071429776059527330582927558067438092511973468006820931949420569007048902744592607327469547597269768572312182357828641273654945027156318479161039829706989099876555063019601493402494155491864403234026911125848832476349277824606034626568382551922214362309485141891875238672735525930274399412678538927989654199117635756110442436107227994094243499443988690490837073375187352454765724546038393162132086080314375061934929181135852753764235360180047997336975559391369597619880996581511129802105800173454484576539147321939588864611719433120553622610891928300397370353529408527534865764357634006115408913322518183628088187910132169249494486016765362667139737627609251389910625067113180693364199608867134159634897162019125478121591328104222522374572624313233223579088028511132862396420930560857049368202728082607786617818849693767887619857690339735262551430430951494095933534350444150683461199834949261113975673269939547539221724712920910045539053167938224362334838794279388608457128535830237021141026666409572178486585803638828600149865262858385897745312777464573976253848489382830723197571309251014227288838941925587929944012731527320179580237022806126948834521914057867780993878006352875476817547312262811618242221110753111574101774158718117348039375296842076774438710972023979898960389724075092719031954504952594177370831187872477875732663973559554005914563791716193932243741707278158676299504760007491295652980544831906285195227020124537618539003449838681389774089383373715093195496413906921246495535999257741540829464523453338937492312033704517775918638515167538339870538666503445462463500166622344546127544472375867738432367300482641658800636112981023921828223954453682255389931603604575667490500921139208674857330604057499294249997354775887290629205056399653103343375537948461475280524608718128928673989356529571482344494349673254064626191519367991390489736728797448426144532303623129329505377572853801535415074432005288708417634797968044684635108897842220845743824646583623214489387578192340025259025496376979644907126334956498363018166544086771106559263327062821705737682321255627976233304107375546064076559624196712458542445925387387650277102800908273020450950161355518475554804835313781009642286557702727271230239677171755832190197545279072544766287054521265091075709060085350440411119395597123561058699116319765086687470421550839725074826089917448433745313370483881327468452671128156962311176870144361279694386100093000020208012711901788606699373878633060046024476457636206834253343867290771103523751874775306773161773773945098471492028288776234502767272611656204406740727369618151868565579990895361221692813193955797896336199341847242307346282294714721206792164741086411458503055670824268906805153985104177012313854366747429462791109435984822171635498207980533205711021327572212858658937573635033762843446126169552794758783796194684143081115420675044312005662364308954907312221691251164148601288893031890733089538180118874758693217507680923034697207895261751625412521765782648329246404830428731892528259965017422042481972682607551383651744816770156881100620722895676023994068642198387966961428934137920475445634217306215725148682687326645727480761079827671615181482003159008622348302522815154876761877797984513315030363251758019033783968121309276673654844330429867569498714859202834273488888264330568217728254855559364899082801073521919771634623431493816559890668556954335352485394587976964895632809354311705233588646092652421867187317643568805860348917521143412091617212182570110202371825346658540904973681940726385273404301239774129100084656627923353434790430765258628424604212113894763495698378352964655642830041542010443617995614775662395978340479042592329748792293073045109246627731819199450749221677378486249182611763882854968467822854768884117574492668572483961213165073281673546797760709998116053390335168057080852481421476738499260727927153841318489966826753368636256973193553984493984971349101124796949732105080151244267458244943921112430542450757537271996694279352262481855558083445534721429733531704846853614478028658036326363165686126685707436405030857516530327543079993692683881004970409672829277529062396429702942497468681391261999200262217293881615272871782668081731551301903642708851475494609067981137931465080431614529145639813778017315707836687486435069953362062833734365902064642947075530075586559121990054582920915001316533117832283095808173623508264966636151731649063805307564933360388811510652509842553861037400132206440739284413639477326482169986455076065908882746245274468722373558099498641374947136827832421188293209658195171202914530682971607334474377456053217698745190996416429524294149721167211803844773090554326708600943536125699936249505185054933731521866521587316746340359459819734701645289065365594638956328943296439820480060200379051176101643914486342400560417799505106027703218481437128693611654290475616356161776748165435999727155279308437571386191262025271954816778775157358210699054810283187896096246631743795002859342774660611446709153949181936582936240968734691777823564110873761035009827227136008102130035657723972709209187557164840702389876747806047317661733025856095971547042368693062855131461502497632623541382676326411240420479104373827737676057415754560662047068075108073300772104894253553193575388478558389469787935908184170100783519579942710078494048424247270279792931312176948601632488320590182827589610150304560627345778941741803800324506480450133750186928034397574303067754253444072791886804749858119132567096336208007503831111245811705312834639930011378001423275226696848111926433474568306820986089881258796408010382317198298469962449062784954582098032586839418509514568425044223827069276327215640459056410706463492523094820301960148204181268838073618731001063943848081911542309250990426760222038843132013767341394322526929693953097862106229247991001254667552046453476276049817818811743436241796965458397445966685426630285841817517402112978291625297374432358821791158493133571903905432881374895202093214495209700718775658142418449242292857274062338955648824140128197994060443806846528283013853969284136296061119323603178292984760486870362021336104375624655281611826286849402411674219250662190466194762742915284962677368047710249960227638004735095457029682007636866482653876159272705229999749423317412257860662919194727539885989937351627873622353198846013063746338975258518507823103959445395527782337017013374776886998146017852206564663758629792418265784478529245696559365793223270643042392153804847516065005487522071351817123514767685961134110253221466974151399745254794726548485134762002638857283055032525750927784605740977883209440115847172278968904039664823853465133239659859755423207477328502626131691381686136461853329014186574476019966043663139512315550628249374079414981485730257477439367335639080485504514746108805091390261684921274840636885279431053904600225968888583781663745094030335301287238758126339127591966927732995141884457179595735406724651296545060805896541633676105168572669757546531530489084180098600747828128157414708735508591005984499319478966268786028717842817096468676129853706285399551759891891613262805379989565717977216238829095138670134840096800238236108897981540331215529626805734741160989015253043237313771326515184677673691637049801019964646355982301888048552682514663179930614398165889026782470633807122843784090593311126424699712859232337031095401188524011137906259234404582370026873076134103260790338448529760452310362127627576798980414162201853625488883909138098653563737815332684509599674551158158321495251755979214455389544231331298114308772466425447789572811994204048576715993710865927856918576550261839207220678107263829102899295219977456004897979531243438308600776099025269972149420692965295102148941446697374104427848810596933886461325488014752229371342521112516930399302542982597635582032710172177648987293680849919096753083686216667137608311636502022927546526280145339932017715817309805639387431800956026534511231040588039615893055237689440260963675199088194279932301631612832475499566094853513399450887723977272384885155238952474559496447269354908873384862692094374951674308661386158948630432168332670413971072517170330586982521353299852754758525994489548770361409580459718753953057188795877113538004444434736124319941474492751019524981011267717692969527451896230889775165840506053607936956564839776660585806174596070512417640474238465006653595966788688799021780003451654422904380222830639098676711704962542207950678933165367092420912676948382507253072200831496233464522057629965969426906691643584038218073104211702973931868931821977226801794639936588239985924235314743222361965174941651617729300604070553526876177235214686027030713651561289350194129580605406674294724632755193729015363996361314732105467881237387614973797578639709691468280028708794533678196279756310484258382563321639153841159889547298316961721588349029285448633158947961673476070394611694095838854940978780494403511716618671312006534715726918454948516474139079754493815349800475789627975959068649344002571339379877282492534757618524345901352284643275562744476574774485120746726713417173619464192537130133848349715034723009848065829720753327279361449423494282723060890707578534662221668606829043177176089323593868310870099295990632537703889434930483274511634938603872522689393033953700560480374584488530473789726373783302267965564123076941353783437768921986309577795960622086882406892257763544066193604995352539889505999186299642063470025003320226917071196431336094318428439623643057750963802722492924717538152256559523760517359674997592173206851062130715206074033584445759350337547072257346158885404881534229496248974376302288925029069281584743057142948864823771806171604626835849631319012880432265692005091915145174306638263572521375080611113657172506743635827895434512496237822989860610090821641087986611288105418537139757134375379962989374781081194337589819358223790297147336971284903133081946995966795792461137549531683556273346532900655604048170683344228151070257192347678118330544936303267598473576400457496160924677010588721829759457020375633807157478106940002483778888171699036924847005492477729880306118194771437246039283694109368802760594560749847939681222109824397461533763258944227259012041582641707011251735497232626929177991968437378475332737272507876147406821628398891179466406826220930895039966947182937860332731757780421776050278397478201722468339085068502245172268539295846858357779461378500122243136022445532445068001463054786008330533209630339593460664261902521988861583583761868967399934238946793280699266090722143315425929615274279195999142504681956498034859668836864162271566200269599823198120647683201336530940086958140706791641402869417426749875184953448364918826565687835621846816998712361397696351927901130915049504084062720341861146572793965928089067982709235289898908819255571446730287688773169547360513748028930971086202375426811572199912882407984954781224113686324922613609907490848593635942856961922631999799102751493702822038613752571652127761360944923175086470961273083111087311893844335688265556493983813296623853199576891150025748765409390632625228301064623838239253663746990693869271146393413235150340862655263947456915605181606281497663181032702265549028903226553691683999068620672751833770276115446289016808641301286440971224906938213727388178713973943144632804539353865854057385270530162673840064829941357074182938124596702059560983736453203275560941073475741394526651507056465897873290233207506471073136724878770295084317342414850375589268662480495981253093746159616568908802165214985426514456395069626420023438925742840635613349977709472577815987370561657878186374397576507643682512745192865793941449748137078387573050429431722365796236221726702388707901546566129055433210599614057570294306292559485239682902626347462298262779049206415947247879438686239923427130545365348722573877940463554368416946166208970301620389247266972427197343167767308260070193915163304742410702609067725201610752939388990917750858935025960468013968558093687492488118375195850663401817139963802075205946797355904818939538216379803643389350829298128274133525979727099464174234935607251642539813291986499601896353733807365620394852028302951324044709522874887307505341876517038642181454369750218689426286059247008199234514926642333492401882928648118734765049046637641857632616584675351375786392122742743644143040309620614138690373939392469502238027072233424592530115675158508732900666299339913496137132617491165495715341979507516501729975145436613938154734555542107050552525570604535120720531311697854687833249681772123767859317773832425907834778528191340960000696354727478546266451511885324757834264302458941927096731138102699640697668904950920539229659024079259676744079790761298421001579713706675997811269005232795565353854756097692115136285725701713546887791899739874212206973189755842940340272436435102855658591519376224543925685674139990236728718873403226093653620541613799378988942809675577650884211956444116811920509127713048935879881413402532420898169153969435006422573378744625237178447677855787190981494250537976474517724051594254468393240334734297539699897461745842906760675906381541685759878026992629466305615935800710052168592784351543265433313456781713074267548597144360399840105246737245453152711461508218933527807133843525585049686531164038004875494796748033517425179096002734567803781063402415312291473025175225271370401981832026678148251718875730044417076692974344566216363695436600062879336613392918671319261507408051768907842454281167220273684327575217819174714890344819000810337061242298066894890782572344338698128763903519704299543296414543068362062119010601236933495795700627638547129892264088806491133893027547285854300223306380676319350471916080051937646169856731047593714802087806686474586413538349508833667145473464656759330314698926118167014190396369965431749069004989827816039093980610537834205220817384020921452916902670428023488263184767394142605933267312787235922873494816422763110529321596358802865594539679462608736855600712792558683657604669503100539611026587659890047275475130969601840155562342545790215841208433477096071379335092862416541120748674687612291542680940028640943189174773847066461186330427869157540000979925890534924604985899423054153385932228698214327209299786854200188786149540556012535735075091384969443169000296639167679439041210801068328162321881833959073066137256312195957238160790139635045632549106251511960561013795020808250938383858945481134260792500651186273602641575120937067185840495691579936507059671702387102272426736672890394776189740718620491333818930329185974167555628763209835430149691401813373557776616826173437061641110298448068938845068783116252585873468844104588503641903214273311193150482402643739728666524232006026601908271578921532420966445748181559101118659679045359247216577373240692765789586258584082698669974076144641689901488970351961997475355811457734720402674049610733730645818409318513227459267613215879305686502677457537257734393756735454555996372831089529781973136010741088815190957723084364498490910350986376935240164397149941751283808321072697258345492051560086845292352905663583247343412217131710391846831044190489556108888098584118997498238900099772027271121157330613080523068619659412085746891510291156111148318711967539945751249288957675692955150660417294598342807337210710662938482935448909553127959726781259962568979181393827117880856732300366077380068243184791117260107850858064260302684763247717377081800203240027818864659034494755267393664221913494534112199848705398255957575960641941062723022095438250031226569440771038412798015209519588589070286234038070206150744662589921160994595975390111140802918759818744781354108716600099412159704922405897465782440266924415159382731579242690671170976582221819704374734122444806221538066844198824198666750251168496708004655046656741088746580199069745043526809199798809415351662357102860765108704682733134596378423306268090709657475580174701367001763092799591482328619367709471156512520902049589623975527057786313821106138715763765617271579603339999729490500334173113832362219550021793281425033620004906433806021619000025342307681308191677875005160207067862374236858733923836218835190375802050288168416566239508868712055153434294519592720021626114343690532514301016635889670377723693542144552468918790740278549302113081560245177508193240687894498178405144197536284609697644840845644762628255843017497974235139883869374570109105493452303522969340779251358323590778528457510789559310412577347989331446829014048528625827669576108376542736974763986762944854364386672619831911869940919962252976362237396560319931394228971430410500609179463045577538276917987287066872433661705764695277156292160671540177846646433782509269441445022855544817542618803258430313791724970030879441060093620935983916351770024142401824348916936046607821483807659292456684772326150668492583942523630099379743085369422491809075115190813976124385226546313644249899227898423913342684049583208376697057091391740225069224324741494809536871343905070640631610288417827822937033332916701305207962270833134114240465617462357067592494081399331163186496106844864637842367126994120979669719058702379977331121588362589850247220848704878364743547154592666352309139895210840270646428332386596370322155626369342038608751322203308801461954431042288665665282153129539758385136858969941639385098472016606544112224891319721890347594725147612647197755098779368340081711748941579003836531840275067283953711462308339606830185117264406308041992825584916446931704078968655046404659187373571499742986146970815947215928556671631712759372302315512773601458921439374013327659576442908400483955761775811106170130561393398422447362261530751754428857484266285903120626835243605671238258810599360030765181102229297169495759640068503220414134476663800531011995022611449031672095446291894723482573283539796484293879242703472066257594416048184965882121906357472260752312247778856159305434808769068803389128436216902788601596319990065296048168848303423915520926463438491955763768466282539888708871065849860612627423361027779937663145626964812986389712052650232100403342904122660424352641452317441103933660392340498537830856955144318256973997081138869850577488637691631629438608191146304870864682275183751972551046197495651801609727196215290845109644390313048989199602032774689774608262353297995541579223953408791428805351776273416892065976178111310950082756893111276568002885378675948094103450488210407995580180765878300723536251588233894288565205273590777171030707394245960927750784184878049978018841875486949404415142877332116531317994977905026363279141817864909142217461718102621917966529640281091163227015564361272444363179106442410232254605187195103997813314367178666085934616207626120605588449730201635680828281147607369614132387111516340338635421571237745538404554646455368452070663835739299788276293760106050641639372544683190338431833845799160331147078860959920835493837994493104221583194258795022084534246220488139169151069926372283178952741112159276642404357904237254350864159113059671367372295817591347506955403118726969084623866007592608253261150620507991130961710994490366154896013296498081014174259183286881438813481608571605357527551734173326161386172461026738105514389569715555354694566860368164087081221242026711525877182670714782402195144772150552497673114816794755802717853796232756892096753608990839335793099690628827382594596019388299905215493193072298564526621422536095618193815761223291019468439762240907642529628296259395646891370926120279074059064251258468780289814402358843910059843927084842278001351641893983392421696576057938177429607981901089220581727712609699230617217236671164239230660981538849385901843866895630752285915615308766814095692304821427226440885412521496980984888379700051263462603696683842810176390222662627569325815379530390358172366788591260229912150118871497771603687898448949168687108874717658272098535731066157648073531672708474423862501716090641740148427448397386288031582086706905266882809413329768687503200025847748260041075926523375364006940842831527542485509396123835314689197440507294472744777885928251891679739848199156751169314722539975954151185118412913273084813265304653097955493790088596313861782784726371426058695730000439201741392893982880277823201624329277025009317802599960593132526985183092119487356268792744363645550177251185522196767984824839031211722140304776513800318052292552555722152911834719432060912856565717203421399097783917910781827212278318549315783915133571149054755075681928579205050757193017313905889871453822167246644965758981954390460041428386077683435527629677818970884754773250986416941820355856663532155215374680085969647778669493321796887352266116510262698738989255071180771762923462235997603953170418091504007791528636449200641135887998590621459811239165719256608905381919532460043786783689085792495049260063057810493563556345543219063376587369757494305862704307792531117862993257424317003154689777292431019788761562761258077153907110376329957567419057734989532061618875692488733721060765402226267262128906359869766692814658847678195729134136566279323380146624823802868311006581076522547448042434698375928078989206279616720102857400430239707089554361815405249108240455964980656382807417893767603276218898784949716484951127827663377266710919672514708301830851042318605759939966540584501672552570386063538794639531960912320011013786224200555879456328444128958000709784252336531497977102641827008112901845476205651484676295192714477031519464224255026818510095441433113722561689735325087969001256767874663004107216862569404851369181013047715559318580875459544045784234902350577087391823874235238553884762218023220011716142369672671154243153409883810711364394841076858107276316149184505693351671621422737189518514078426743548536529787237970682584409130509941637090079458830165537492262918097339917103075567703800523232017902121660966037372744475919496874848974604328551546933300975328646114041187842913371023633824852535604154434974208233720910500245004203358096386049594453727594410964772325518714139863113516134881512678435249786662344149500291788629692141722309734166672632142181177664685796319499178123235792964459219057726252312746284802789075889985854068186951298297630531053635762077952742897731415008265610036500405620707401000517978672360109875750527681530055931973396682225050955394955290223613170448449651642729057664709920947861920149763205972428792426540748041471475116143871990489126675658808906828552461461361223506604590031218058182953540237694376214751816253146884659880597753069075227462129203417550585217680967927195833234638354919536035772865565340073575061022598949941925386800907486895558878337098490978351825017262783839950756225581217532177681170668915538740908774955179302012110369076625568575408639974755427028192803639179558645383531970772489735379720545683794517030573531121030370867960321519072362044989631169495093922488994366548722292907028348431811906052054735313539119825918256056607749733980208225293909931913093555877521032594150234557533182110171164211286307951749253291439793806823919916034235459201636613251595983032349961588797964569507894257023105693177323397916303725817286647475441277427908860105104193492988648709884309510033908725870740631130760524169399827357339505720232855051325602923203518264763233040118265774012035636357947263547594323618130857890597261061401596022257464632379103176701832223673698108351139273504868189749303071675540922318116314585342734491165942461280807238860025909274343497175569061926231243277456985026491804874964489458180001187931686134861048964865743719638240268065723062824111479895999922268305028398681486078745618812621737824625544026698552159820217008837296701772893192265439562707372301657902337352318797553454002963194424332864399619562953566023718746047149043444141426282040818055092873100365101404922480998321400337202332053614727887468862333852059637695522368764844060241866372457189839887191174292749101150007373215101689671433744525358528516561083512116308431880290444134644738506068116773409702361636763384733521774070348473140508266620986047610836026351401864696216478034648811455887159615033020110496623354911112476383210558854815058755877003499876356839089852890085081266469227950143887213078660505660664845921312893726735145895632727156288965090382717757804908473915936076588488884404766987437848660974218339871430811104003832064902397235571567276086516684660696318970904850129976258098256186121833572731258072355398589350487848843709942091492921321918484080516911696925645995724071975138733278520271651694738047478581180813759100133798065226352232136915090879684474459605283586551526165176187160950962101137735901425155938144792743074114582724346165958163206242692252054052982551784299366938551160378293985952979308654723440601190353180535318526419516907446189812583954511845801806231938932454492834382599889583503784480885799262868730468754824918734477496883433309168796866019889498973855864010301402324908853313565724216822303554288970547674613915536452495944328021340361683867659605811069417226325313538381610144793129795232595177712795644135990657781924093548889806465008233652590410661570283873794470792131653306020017738137940821199382795907780307962634484728233028449390673972711584197176801393242135371727239987838370852818680570959508264116627888042809529172074177333459563794210188798555904866363959143409850615498196003491675611247639279684144533802076413802446331560177083939446929001641835289514091343588231544022118044530036328508955467607859581320710868915877210038976703362190175386753556296542398416424486256617416117909837243204460182233697378477444487134935749401601972464198623767717634328961063247077631960543850692525729493891734788982125640902581781523027637997191007338972087319867247910425088491839523817305142642679013151395912186420034193200889442398939242609593946068276927343716623130105314254874328614136572835474409564620532212310502739301011460353806369315075772259555079589519878439513904968319392925250461220452570690888695481149115597063339013147614231179941870470084592446412687445437843315110346699280124138144054044520973339639935898226843268633485715838635327009648532028227361457242309599449-0.68400038943793212918274445999266112671099148265499943432263037713815305812497663815095983421272147867223796451609148860995867804988314557940873905191188799883519183662118270858837799181911957942513854361008447824625285978694213906207961130230534396425823258922029111833260915122103671247169010471326011087527649463858304381567543786948780468083128685419611662057442804617762323459229053136582595762128096540220160302445831485873524743391305055400807997746196835725402929712588664502011018708357030603143493964914020649326448135645453452198688875201195035381817763595772650993023895661354755794681448497632617794526659552462586998679271659049208654746533234375478909962633090080006358213908728990850502675954992893502920644263742578600503604809859830409299675314558901264547453361707037686708654522822306094043493521925288533329839027234223495287088330411664040942145276528460936494120534412256978163478250836864112676652870701995734089506193624664506575310191678125455700698981840928331714583716734597151697084911609607703063578838916538106605599270842847024731543038002768039085600802049978032410584141889020183572020629532415382916822796942734253441520784640814155687968986766443021927163624935478697371795500444154908567339210555669208107564738820422789697814839787546859217582943182703853125971775989779126507155489945624617011553879109152932039370312241134127950112036269188660519350584627066913492587827820904871731608862932135327410151930740159463599005810417547430064147577672795528747577211274733023919090010208573019799984438003502961409280275043125556599521620045097356160834695413280188646798489040137637492451450834808286836572309267149722428811283919059270586193413375708112207196796100632266165992094655463447384455084923126684735763619603618658677613508235551926399435432335855340874970417590296269937584675822180884630975727167996170041156917614279457235179934083835867238785064092068574980839610211088043858862898096210960564497941815320304088536820486232037922401786916408929546804773696647294645346050497533838613687281687940888036941361300820872655197423504623465638275574931525299152757456982298067032740056758966773931796515909324355966311917239611789657027781446736193022092856907158124613309089764013644517623899657078413117551550268904491722071864244199033932975312109856798156007173953099883327321149663538863850139469206652754568287704308114205702954220578339135785097113701872137378952010279282797040224960903729924449564383217019522293442122558083204037679738642445320577848977287524256968144287999797437844184642347562096244658894248933475194785307547265860010438522813703638767590220948846202554707796819458689103074501770335918986534430260617846420739703293012732482796699253375454327779742539659488766007286183162913750263438812661274936208683053811441486020378826153557820156438817422921696852511002573140030360849300310062222133784468545513908061552716116948829069180123539251497542997093933466600210069851139576711541382055865276222614381015434847888315672181139689778856542397455980472551051617253918142037424847377940505693372626456605729203747745602063013467594771275133467385512897960206146190276562358697374509510942891475833132326898543689200288201153283823961487207074569127787543337610244361446341893012750960856485029157227946745253560495285722994253206534781235182186676096735604416436631561090999734586380424523313417343559866998326912967509644861915279300181083908059686372177765339770519713177859952997390714739199089389181064559644288939323779311368866022256463780421556509024962981844541590569617803915806390643341454417276493865691116461992936698042225210746002020696234821859425324259203734372869324535617885323536789089380087533345116077896149676524689109179373947259854565440891957304586270389565093102492787252020411499503718246438933671990211637684510087890690548055481714519922042523730008315675511316966105092466501991850451838812656776519800243315244363960256967576985807271113068953019419867754047590774474044313736822536222246018414975107885623165246115169182342970403056512509476682108712155753525486394586233044937472138746754302650809315263710508066435910266031473274056055464829219879842190313725005042054163695264662173665611635215739341343124566647437679535761842809030391774967645735367659836511651787754277962726195787307787129934436056930914168237091272332417339914383754258867023742645576995447102920790606749461854181937869770566276270270788029490287735604259753270241579342711794105139656664297148199729115574047217795683829197879310304011132631798322812549281200614891069399350415133287800475586233335544324670955649050224840141572400454856876680030581305186983662563187167726057568943419127005249585485898195098893697161892635967559497483864030042026978892579975828412709651394016254407286472829248029913821415718617922657936965351460132268347924056720560755869056803115977172403160738516860873806226804289120716725002484153649734966568864584920493805069823450385918485323892930688895929127784199419320254254659895648314268781576346275943964747674917700959835975201168046288562237818390958043776760535649365442238846681221968486716825092217404018293721350395979700975595294021351862604209034624819798330357322153900013451229764394683404706374573545977593025527104508577613280762528476965518320012027419095436307792618995689574254022438989854596530128528326630549600975267347205809398562866531869862144551125466082094134856285837695148121579544596396029410308420466288068764866740655402689574607986012527442314004003761454366689141447834864404888378146098897876156530315305101351620101683076924925886561059251069667391736164017059616078900911849504871742848332731353062492274954313931545108387842086416515388480523473511920146677016371887173871154680299400994616282901104223737984374775774021766836388067783958050224690640846845097589966944529508769963558124645914666863454376741967353040129487008925216102514018124957638067387761339976786716390576038235394505089811675675779113913998383014733101942530466129894336086406034193027608586855091575294700018449114269971719064858509439274952166592574903302221560383266269579161208001214399080005736751393231043335132512177346087184507355675717261545878967972416390778443841578420930683422502750085139064048118194145258909943655554683396356558528958604371303549436589119517352480449265663710633040829758330103276899974541318489061832923766375457830872278785658018930585640566366703252579026351095600161664769093203613048888339496538678633876782946033281660177850617246066195768258408085990722400222483045394144500692012107022613087261565696785135542068765144756388877562826424483857946123439624309087989348935711485795093770789372212869783221932133486385000128611952696272071982017762223663034026726799582508769912995658341455146132324980950766811581182691724647704707271738848323862184700824891598224646472212060529999321396756288661227336198846440711254889513716621332868572498052249349495231645762759247158037077764650411983292229432666532415860247045934272976484084385922977052935408619818340534144704021607496986219036883984368410296008769654021212963043599298076294012243012711099279578304990762776498564607974631367222375120547188016891052586054939966155221047888169849316532118718406421805975975862565806179288637589876021630597919564272590803682250541112049503127583382717741908759648050882321927775538095759903317216570245567350803139788930005582921036412523654503980053235063447321334053696114816435198403243584811910103231448771825632489624066859847856139017965795587109424550233092657115317118691737220189725791281202616578442346654176085490768219328010206147263516835515970854196539627025580956986422425733890222732209010065065596271923375220180033171151179494599035086909247254862410744445137612899765081570740383852690513620230919982422821440208354245599143423387545916395305996617515339954306663651023241430794452180457525797276153084772794580139552619306124873062360502642430940374473048861462115115778521071854830105088299950775086238615505019071858630491086520022940759216391059244867755488493240021662640001960280264374856409212437675445764148295479544425212099440019941507651472297539338361454196015764723603620047493269826582194090441953980067870696357150972389685595022979664165380599724153747697224961537612164520547920903987202496146878871619560983255532325909146130315041484141021712946349917778985131804113256409133659561995681817958276165619973448148323238925304207736085819678881778781901898567796014916990978850793094271730000792275482491576816654256149915980101094593635063036125592396743475659095113317100257702272307194029700431803465328506845412364271164166316570023776046018638824148914163738585313419908960544281524238461795488266332349960681744907712354255745935544251397252871453722288341452963558630938242078471644604523205712438018028690628884500719137765260904615262664033311337836971955200993048822774453461808631956372605283404790460558284173870306291155167356318466415665348818391394336429446804877418041211821695931925048254063200592062768510571345574464130183364892793384593305591300595119705151449031411369581162622769293545563840399381857558884182766569874905025654260102575860880180461974221064684946170372492584429206181808907053023568829384439847701503097216283462384166902649352487306631281936810914811652550331016221880186743079957138400622716898603504793207505039094686372279425766488110125336352403073403339922901592598203381954027293022159039100159820553901324768985947681112923096540443242601080781433975806205170620232151271016903139791499117108392234795730331986315695890163886542543547384197912693752616887981142000734397226499392417749896327577184916011733908037083489999765789407253443744555571196661871244914913065750427175952273624293457136602940173158931001755991979039297553635094716130058231525264641987954972366669334468833827178570601794220131916302674743443996258982320258449735804279557993162986407172942313808965253898930877041601691254989341271164042907519205050209986233439257699293830765929031364921006190880985309269751178758929734741436024218222955921760626896689606408103058089503912699537615056570656197738181945930053955762618483813513710294705029246053155175002306504839480175225241676468817976795350434054821279817542880056148488553163735699856738817218074997262583432304371855460539547863844657754182971396959556577030545699238796885704062105583812741042879200642258403409583934648971687553580256057350594468444977790852427336172112539166907114367511949978918187226701657100095253699534548781205654161021640200055960535504799499383454631707953560477997500727479417377428755421770669199403804745162079006624223385222127453978040392424202203401050128196860754735758455204203138554279541289833387617823681090525840779706117335695783922803931412784725248404897640824566114400004688449654335840294133483437272285915240856287163778807807248320032969677720753756068580809170412985360783584265899632448613731568951853518578872353140702884361640623860789489885380833134930208724175463142989042819927259378008844777341877547134599604082712549295429326547018207602075911265370798819025353558997033854904593197124548551979591740156047955949053501411085254223794936687568208859441544614849553004865042036272029915812768184586234822834743596163978200747781542612718439911166474008397072816700982091786170948369159082092890658130404879710044097885365418834610300294407095283972712665648526952205435002057290820711359498582675134990429004800929077342543523446506866547614712270480107908327025182270660939988315644003638176270721694208806903477209989780885458079283279378615267101665748566734201401611420028297247357549247232942071399873690564237782130103261591408212527826084100764632242933055317304295672019245017152811268982402382368232988070805501905425153136256475368508091067830997227980474476609107301610163824359642717911567384730967387701198751093092862003784339017864416944852553814291634359349775860651849177748054694609937011863201242384685108388590601189114297209335613573040199726929773194064590029497018048819646858344208310884242307732657145176448552198916299438472236883944093505923169613371633455111692910436939527993050294817952236823956567776826917381477545680739026612986030234863636738851690306166865789229615972004450179368712344521388939396908486322554780544371368965215153043140332846885837630035505366829146611197758892050860548528316503425293989523288488741578337327122845569483140784174824124462610427171017481318945384121534287225325227904244881756279994527354302383064806982183906183497838620764991263743036555197539675562812421546422614047393216011271355046588654674024784018868371459741496408198301738484710144463397397959171200730818849194735862119855649481326484088824566043002451258724752368897476057619749944608571812863614684229696779312592180614256345642251044107179103705891791402097861926450028168479139110402999437733067876693934898275768155590597170549327016135838260919898935655260182320837596331989097091385876733534248028384458767821469709226754005094936638268371396712565173516287606641336811109211653361213220081250843765212051855508855643891087293690081008033176021865127854355727259838302551817209293177053259722917689318252611699194839418997634866745747078814092468379300422471136863436877584527826089789832236921903802326191055268325091750198654756119249596345763882631358254936615572129953911638929581168739788536439586375564154736211895602880915836579893694256518291199160407781994992008622536949591293245918035011362779895993588398199999414609491423841257576823030458847894690206911184133023315408831553083846381251286099544540932835374057423278665628027476712051196662708445417565888895450161333474840230400448999793232707974668245691750081143309575668323188878742838270976598641108406468251509701862270530856325812938778588774853530424310236120206677298483767978435592344244574707731148315670099317149963815831565980296614486690736166927024052934840546311298673975389596672936089048722214935873061690661583958176435634602202131383944287000259060090682527406805358392589158625078101135355748496451916790515306727173024036727816192675724490485266896207729565720817745253882552435795704040751369999058541762718017636119702881082414544153713938551297102114695921795655289613476788829969880672404641436946644002282930050983920493182425295087558538256986646608577914349513919481036959816833746663963837781729875732221709144756427884379051003697560903701261026545214963910770504011719874419187370539548449566436927237880554314649259918264083875430393070889194011565414523529430555955707663685568510544646894390690532706251946657607598488249964119978451709762231070799895087836252303928405625397791486091726584904287480603484341073027193957823102751140179592617502425257280157582853664021593946364738120297299240647536853819813156854592478686035613302403294358109120992168768767478827969006156767992615438471433176604117275599261737070066453921809462364916264066764258081042060368258909547820412651933879492348288824614535277393435879931782079005362201867451714282753802343477954806917322438262062382235213990831727319436983645485030214390874905475607444184525254383681858670951613110973952571794755258962391888541330473461571676300833835472524142154804960909773907982864644849548727540516281217623992203141778040398459899160842418575247983172096719968873209752593744260114861676904266950312219793939942310372598544420708024222101365055866534807090598482355968583938751797637260681503525269378797501998729234183112055464356763326247250955675329143316015805412413149808831257405411635763240567903593062309505216942753550007731337969955700932915325814420555517229529296990975191750497872197937859699638188152544327907072795412329393897952417323231009958950299458064875430908703859926657292760563956782824435938499454892120526460960506187362839718117678393585705233091743145316450717904665802377978499473471661854909756569461048524980897127288060634514642899892886967385655117435552308219492642623601890122632266931794039667818349714755127643129431989981598660669144893351170028271602122739029326782117095936563930463587149027917561271010933371250284432576870018625186131457127799991032336174891994779012759309336379886406203358460105532213183057970505700529800343213277167377927435427786082599810554450636483923879691028920398788144292294605044677192674573708034304525057696100867983173768955009499082184062499091013714677899046524488016226771429115319741340252575741605272730130128923568791644846167285791595845248261598980948960292278920521383349533365783080274926907678193524183728764908337294115764364826440084737674265861004101120867487332344220743543441519682142488141391674106675014860654680394085660753681518235409864168632349606625919967875920224160758420053704908018500528439516620818917074718275120385858364722343466542374477847358245640380101632849332825490087823926618485547688075357754626268405216946748524147357197621393723558283473135914475526261843863470481631927173573374443080337499312519046253154418191076108478963758979251605601923185729322020291084695481590724295074677293623432494042347163877380542824229221851668093769039425876791762622877159908603483788831443089315331526306351947345425618968694643821071993712480298808486281096851668702074875513871802232659751191577891793960362522157308879163016788576644374488315667656717079023967707611889655725675627655052765058498041676853208721480137270618067803191885225802639759873501489584796670179311207741567178668235709288439370812408686818268655221127152717125004062890782712909869827023429810417396513021177042405079812475733605738290510092101249936390757854589585133912437096632108058406628121285577010282958499451324708782153440055793862600164669282557208032756186629540045108815995274346103937170566156939861252959874802620854903108882328040813538282446033406172714196720045598936159079647246302853243862623660684290617006619108620454537890763462748488298110019707025917629556882467166146116809845002018138370842154361807427717969061809607542280577938788339275497125075920406303625677222778990154611267751315417323873985430059811038246681149906791141657469402281005925491462055393060769862420196674345722830549064949326635381707486814159865396300235304056015095715057253908170467474602538736982450383178509110737674419317025595145443663868748602368596056458843818025996452171357992529677787073715249538591768680167247379327127977435544296363726942438781021527565296782047094674657469418960861756391673804527862613828094457106190444652959049169104872378762897682461263682512121336758999400839504459373119671775414444656371444334929829493570319045967443857218021034469847490769773907985867000351549040923398265670203166583928320313764866178700965766829685894876848990543633288269634190385589972647118713182098044715802261750256745446340673137043097805887323334620064951989560479801680086712716406760164315032269914553728286409661717738284859469448514696413413632765091569447340053583548275439188406170742315537089990529518299357107534502794178655614482362941195811743082700239256081420055653988315738632682611892325285906359682454888405525383672850907875611444885142527106098230612184892775340453347667838443859624527617361460421753318761612240367733793767935276305163945624869589475259630986187223166934086934787465117733334816400244073764918919269645023716005747021275518597623049293688705630065752664679099894461123010703989015851263631629137183534632007126793707755175998238408302877123034461224725555317624463404219125236678771931939594953012830174235647484618297180982148944379122593872464575687922847912509332238242324336365658612772793720458558419169071236593082477336752299138559663316745731032375667555467793240117235864446792600142064372760671520107928826573682954883878924018038947987676611971735942041278051578335620858824685946178540003534086338152281256532418404307510401672126949167996727130263949927559831252452258110332984876191925938679872318167304742739362227402252737328154822958597152669239511674377769246458066627514613972411096056379679827989122530774174317775526889807017609228797619783585893659122266054625805362298125558349319692914487412814154667992133989690147246329552300236571797625527572382542282529426507161601176155825200076022333457411397303050779906180960124919324805901554216432599413974473163679247842709801734899135300042503614663727578815223072925040658215601960144080983383323223028841881435282913553931608252996319414449097643308765321879046135641808346472741820273739496313000829756288604741760757485806632568200144599920657531804019367367585986239698102714166047671774376473955650382369820844367841936295150860015260802104271974548426670619998837780269110596307732821337445289282298501621166303225754246045401133154531130402218107404387450435427348843814350483508856372825442582733247418976874267199632960469405351868448967881904264121846412367688912488200253525745581376615712558033550979499465573682499090733747051684873683146280841478071631513041217423733811825474605734381873354091307915927182170498565117101802849716192806005921066231747132559149247526628198838626363629734048594208902752185166957677800587073753211102164481179146984985529882695516876401894822267702712456175811233819470239663919518367994273206053002100391390051376175244401648195249485306889737425807421308071673533231874190868695557887635133824064253665091273320388688062165104254859438269337633005332838844968964102342269099754622397088668408044470171591684514980463210481350906614015580449402183103246437974779601584179473862055327755641408472061645079579543315721276322753356737274589001714055092806470534303864748510016513646490590490106130553481423747628773889311220878862409303059265312242777410506533747068522086711233517688859106201737699442422118501177822865867196096177794823136169921306948354142237333998382824977499341514597001404121649822883998836368889109887997433537844403952464598521720328520110058881853539470605558943490891857745737415125444190199206239186051968120304821078131144312023066903778495403973183736240530705773971153719806435887988954697945434952487604440428125131410104912297045153085527513562445151470713364866670738952650232797157983269298007955324116520776367934080426868527666311200740245854765031957093576203266421412769232851730698781456976907966022104616350741320364618827380054615019482866118846882835338596582147802711057134928499316787642948370355277087463987518274737889126134840095071344468146276770506584321100919953240176048402948685074371760729158562561991363268916659418139147541843662030774156111043819536912983156706329640527699876166958738432914376818304288847310676033062342090239316421555244640202471001912599893783437254696708241908857104005605564169521236488016878509182875588436227800173820799553574467492436400045310947210498059513882481817295533864342267527233596219928575258224925494878069126773977344280645732923211107340402028665420801969691065928885492550299636016328163174588329807636941559236527614953605936751182695175406483108675993628002048264942595829379331491907733975053213624389613700137692824985001464326798020452120639517640389809841795876337295102900004100124703894847579237995979335781066543829031366539948113267527794630192215595926431413928605058300514720451152463031860119835528511821703535248558998552425781000987770232248095336214441137134052464962961273750092237169485020236342346022023188018879163178254012892450993988172722770153080198412326658790025275742468403979401588441340761267713426944538401622962797192233889191431765969901440675269607739722266544172620057715470891476834489509442960112381591138102842784878432663751379273656910329299986327284989672782126978676806494885403805587701647732874463548866490061296822340113237065756105691520331998134322735901303931687827089869706662147945226446765435051397635888362709453025520539629726350735173898490951547400963930240961026472706740416759195190194002395169837643216426170981863334046886626784064652209988791150155957212511153732337023768385736433743396778905121903308459111742948965973153210733946029570158921645956707480694000091034136521111422807079254329521137799224053585115371160198463849664918262784345385850091928429485248179320156371174316436852248533181877092846237443369502915027028978544326431550962427864674030800898932183151421122722071176039229145136483104243082648479234900615129386857726310927082116072114494641718744986125707379007418466728521597482336970067378644379908652074695823062691125572638977000711548613941367470521252251186235252849575838184335640314354610356606907562132510725397329385075045247851393339756101425796830968809858682055192312398261243566436476049424299985789948446415371249931764617901671378912037851500170862080431416294722577011776567946371164145606861775570302077759409513172381675062817907221845441012722553942269595455732924997166166268188118282570009870379611017940181605254678768855244050483210572756362645468326239127458736318626571399258645850696079263133975240186169459467461417548347673393432744449769939065649085112067982349517872087709206183188376992843698902762354714762910510646823598507613606081563804757968244101001762135911812333680623278373762312378406182163070362400967886479630046102647012701473474587630048979402294325454846753315840976477069216913455320706254665241435497630079062097761199158676762317341400470320709841750258224615931688772050783526902052636606512336229283076393171273101199704902924250072493252809878226811820546879392464544131317929341720878741115146609350340138581825711534234818052458503853315543000303933446225378968528434696505560830029530888604924167278649349932703385195146499471337413762319780131149049574236041762395780928715208518978634703056460944603294119285066942181548034184957277218919345718755172339035998427139256988553360274872994806540665475351878127208254170145314920926766583771776417961898150519239232024379738107703202746635669076474606047971392674245666102492551232414948617307935919970951709422276552962456744989815210294305666981238222639741946787331393218022983690715925470201294601213475051824651404177714617563660177694509124496002785074651372194563326525685278690353048653193601923141451011139303056754357299105804248624974440702580399314794695481776698917597990392255238593240009379801792904045965902049173035779360107643633634580384366564818012549982929643979893518146508570200595379831259421967343622676900275289763410166278847783880887621137950036124611607748776022403371194253257781503139900015074487734358107774395240956685815617510658189262886503521381123811399770161971826031255503244715699486631308164358235310495615543216975159565757299173484574374381210994203982022665999671708661857979522643224704631176843076079144733355964573837910363625355108168080698653934261831259612116040977252636847725768260480506837523069660497657217959999717850592850315772080525523799580001453856172580293993457582982035746118919622216251379280962474483931191683995274723374266402710466885590518000296593922544284192689681791546901702814184173717413343020567149461249079916328638338390147578475914661349161153391503787219414902060353035289969546888281735283488897378947232749500676118712705776326789433955742447930261607779844479828324533646110467616660440549273673444112267319083261798467859709209012340086790047744417496289926165676491452579656789594073640717172364478827813531493951554659309381767558508836709547083304496550640205090357415110240775847802841904596869010155122650948766677579246750696077814994280813029795348808831811395030430058049017344904335039805342051579251381164508692482423387700371303243513403874382504102328555352511522850954519890750201271871293000887839422314307329805427388490172240422793461021852360966297590973675363953695241498798055173638358844541954929446235978334157364980877395827288273114213125114826902259085482696273451154138411087747304633016979524910726798839387584924883536423047733601581963142434809228333485395818043222274246707280373767394806255738706131978972143540866599253256811699649365023610884073189394510830055278024768078176587694550562439117623760165810991100577703692075235065992090034482201284374838991598839428254599274305793648565391828376026161452946746628714514818085958608460044506002055353614437062131979294613421449289017830275685290619111261853970032269142285089115749190398492345899989131328811143729321774780055783234417211968844098065021690391881438163999229655916718773161706924783320015567268455381780100906353470903171340643505959230417227058684596556908234150296611027901509236669484466512208705061951581109908961842754876212821761452492676406129648302149373250978861371268077374138211324593976868748800880040926230259725670966343692936680114387638802562092900787784245383718913632966667769198691602554097259411749299153276755874509728348485995260269442264281009105249533580630118272469226044085700512874158078184108157048249031985758540498229551035122199035570318925162634640231753613336041140834356568899395440589591780029386320997187397528797121403484412760273454277742392264813086967812258893646513478034421934900902074865939279678652825014957958526183589204324447434131295718235146160427190567212573485888164210973236212741601674804177496013380850731506356636049338401971253012322613826007780687385255555416560709484386005075269031197286193570038381972436436626184225114045347355535518010791340539417880060251026437811533526666893826340378697309725858620365871658075859565440444668816535106200754436450051025141442353413282998549526411308365139177073044481555771664975064354517111459771179483130041738814554161624132909810836756313456498169023543974811534295728437422180559542601090278260681202461735373253462990160218268861709927810362885718802348770679497438155374566997868400200920314542944316295468007992283909197250503149500349633307872735054422235649513438770275012627736110558760582585802464975154231741722120969010045855778715330021497535686292837491653878908950042055195048572731638095357731994169038474378635510224903591288371831205979338667901150142324231938005212317560961275554081600645862750621961432542936796391833968207396806793676094968101061335939296840979418139093803676399551141529105266989317899911414184090822011670572172710507310059433379012154858276782655169050088499521350562699789476869310412589850415510841228636396260974108199792897685619070332805273701401060877648424133632445674659152859227540512476528543718397343159729269885983386034021535231044182144836920239461850774546698855179152176716469791956650224153469538861871570399895819335421362394006115974571319021127165384588244587518847010491130865506020849542597412347069847791454438557796865273161262266463487855725825959003037078797396695628846048892538777106433629685800645189810008908455546010796405568480119366020488322451638582188684885370388046618086494067975520338774469312345665917292626121427122224417002077662959555420746948494886635670176734419261215377180906996245886587411796324609645316950682928555762606498719217740853231740086453878500713767847684226695776999382803539887431138344158239400664553303394743747633496976893657063374065824580265872290296848081212026356209634417422176625777998411208248501878629904566590231173551251351661887885884148384242089041903843348492926379616346041349789894354776570508990795157707516049356223259841338526168944479095834536309132507236293211764439139217151530580682926103614284971969999012852676729368919523227834903771544879595503942769484348391980215895332474168012396180446972161368776313313520382562323335562715872297238851178031734302575430314088188517373579364196737268980037427232014755480244867701882130038055140602447731694767898797875953897480070133718048408761235588153463990413703352038652901732106460212600999023645725646018576534868152523807455294142248505172054650124384114864874597860737518633217147589677162024984675814505658113656516806202808707613362465088436281361142173726625048650148539702811475143447297604612575216691837866264556246134689091967417245500570164429011646962988117461462690728448067939338845799122523526064845220273333225519591056112478135934276613284499106651682900044975956610619980808836935318906982352985913265183747815858500635272401204792075196087724145883276892232662112988316224422071903222940394603080389265042301009748702102766757190580766975015658718483689310491428044623536351950046284083642502545896414083314692755336281637057292656344742268376414409453849633110862286689477543266740039512715881410846897960942700939643383561734357249275714184238721195047673641908092583222212066566260121200464088665187968619651322031788300377920056001364800359089780616627712443099812705385446075897032084183077528381195483118523313444880355253559923781982719245698478262091486152936843363749173524007074093991061417020061640141711950740353428684467073353779754580813759447929405216821965677166195795486694634800122433494451234368796966658299057530020194999744334320339441641080100701599925887413782062292116073678378675443128650004545762066984254786308056936713558526291376574240334780283018052780996845417973502503074247763295044957191569026719775236529210288382266533179044483516655064333448723943167005657418921948593938665515538199867441129501020575961563195377303561930825993688468733289729387992756358022590705931478112148319652427766942860301133591568888531353932304005138333467899985210303432229730535457033111007609449320762579834888409046268174520566811485720016294208839238334500620623481088759189348847700126483379344905875086185706256658905271654541642798038630831797537852751121373833125333871282181607125589942019446430599796806055795540310126552195314843958528085088827993510841540852007053065584893258150962466599744542338158667179979731079843010917050310374555082079207015269539125707140541822556821615094493056733276075376665478759258350282657656931180654559036802189948035257121115705634362182922037304637034185501831812029312734957956775236800922926581701930830059299443598280132951846227127503469283776984450695511698917016000021699767833246500302455564323123748357406919358227633775095026683379031632681760465361195068018540691144430079461146305064515009162051451123064182073481324168665311388661877202426650121010443381248458945031010790764856659648681307090765786175921949506151094510508864377214490275912977323891118036021777142814842471619821179063182597299239181823812387241722497835553091195535583172497501140253666764827400222804582203318220085413845236883778402036573281794131539543866139289898850167375037907092143656205003711822408349458721735820083368062407633920864288681718307072037986756103842065458195207686735171626714133452224620624966137850515966672880042922084775875934864361854669621293127244488717569622164067435912245869158698378048199004520034170914969033595738852581915906316355797962071682954684717812975061027394432785363191477833065914336445870943411259287312457547027077423690793727878990060425524548294268433837652354640622036206872409244824357927746543846111163053005706278671766037312089007812823468495612431665622204183883592139598400174523681765247258097495117185986295571879035363672214789113724342540240929122054415882755932491378275950894827089410715873249774484608801528896097185650336937258892307114786335728794469447990556053882027846363028476903340343703894544025458320291021374315649862299522786315597039923797833584948956979947732844107131012829804624929217999547232783517033122580331835414237746113361512885162346015881306660031679733569096406692279431775182814875621768759709105120890919519474778251540993988101503244378082050390788122368448360230967393645439137083613234914703475392989647516437277958461557649289815893775868212654016398183280565952164221718379036678656824318461966904875225197545450104254909870066859594993626292189005489381501096439113359457789865284694970592069681235398120855447783145457666822987944548292443170806596176247829426355656719522944250043457909515319464110487888468200845209098807328333835929953319097203356146057774170944206159647652848931662935670844351739529778134418548824896716142932315425175992159333615844913544763131187940984120664604630611644549256300917689897417927701280307133325969161597254536268833171559437358148461630034398456612252009856207175884164840837667864060083862179567666554730260982399441461580852594010299005557607617082503449861176604416052290361533093641791913453504275404452771711521983327772746458719815787626739413003539562155777605318315536626746368946947602567987996926245237853529954802287149183920015176691982170044311237721037606229019212324195081431200191451193069025819846709033147903181720247503988594123337460219635701499659903668007820432973620071667663409620318017933321437003090090605174227883551991406871441912817117998291079905882776112161735141865303790226442924260876800760270753740997464940298570192880748740501308378130673589517143263951041792663697869278564147751516427653686733949541313899405322993465417565531277621718175188334793102606504223239466396487634298696248849402824491287897041298366112935578654102824757709302602535734616965886714885921869506213062260951894965971632079502927353663722364778004666875646556320820140523791659696958510838169271279031351015415724839240639009927662606721248494850238119678347029414538799921785146721302014137592642051838936427268593324804994829906865568326960804835579728609948010070941582430056263437166891435743786905576808724902133229756923795860213601879836666269816969996606405623491349978133605927916841732652137081637251646015588733630096123473328472666531693853520846435865689506088757256971435057954448221069951261443434372128444712784157401936473474376706909085788071677710134210216667909821922601492482583731693566707610702835365188414365931713683232914846437940027973618489020101742624980546283794202953153723267151979149016242451545382159204013108537717311305017517565836590632179590567566810107822540032189841775326444347337400678580088530553010357842127365762955144784373697046332050733458928676649808158332409900732125405846199980933064874714837742981631432476603937223716244161325531763203486684579989769255260327500635820551314455815881004291432401236165668049116447558188837745841456896725401494768101043232385727086908135364259563426088856631414639866670528607360718496430161364348360172690734709026345180749597477077580465104124965463800058911824649079677600056936570839407458103591754956022368897603147133915981084892893067144393256734057481326314963773217724172490347926143483884666928073578000617058693445561268935054751595379043872282630299561260846242944618530163234289857393903698015866485128578432427310685439702041792610563235356467238647692566069870196261544140150442579741904796221765560004659303246011427314668353553465167733074068360059416538663951534958660794703571033673395245142262958449206434864439239820673513517862372360595718588350963673389580011684666868635205621622999324783820045468319013699463183427854889774890103191044106712833919989898663088211194696484599057826896180029175700500897604998606388186209110484314803410710294903677054929646366323045253697083831858234495553554760187854134820599170526031135602956052868058091141478070598866086761368607616712286730339275468414193201652296998198057627804258100934895364444670726820131411305784130133818372186993075073253809482284448572669017480456070473104250703900932325722621770499290814283226913955837266210440891739051695480366357101761930689751680112716242453277398081112905516232891186011261560606536214835546195812576098329081689729291008035419972900642669706275559930083117011002472554834084300112431363411348464285205972156670541872818749438947786821672199730925962768485260550321036250919919651679918931843862610004089815544619654225251918250504936923351346734356672704597358718204581680636574043980988083445831881130991654753116238922012838173148067338037580494977340480632599191817045158688105782262486087878785867714547438726973951192339699064987805193068492848581204895411037767969614487467007199345025986353232827370431230813771265299166598845910859027605295524239086589231884114812438643696872064245071335237513513133793958479986458717347777095730092835842823226520188154990414046997441160129335705494108684786775924351457865781354127982571129787966796993782988017899522110726579111972512834185038923085819452130540862307601121191164891470722997737862859416475758519025819065591728516281883014289734443329117244951933372236684267320151912233813248347644871789082949990603058200251112521930098839113721247797175449219093776980277818904739849260235847990276492414473729920548509283152926631987909985834422243088224447307493873178189002031022465790627617913721403686442460845674570054983021214307313147961901634624525216285152089720073414635359337554119281724307514460781877489751612135750615609019425736245925704523245866649026843879362839116449993853815645461989390305463560270104818259569881655367868112602596447081122381626636126882245288624472566870471293545042453262101815188747079989283082707756032845282348596632416613080815098245294674227545511027534700397902095996154886876965571181661665607433872770945574591563156760054090917969642447624673774026405700578616197619802909158477560873502003061937880391632608284541659117868458622054404728761827861999629927317562678060136632830977817543905722018065206192047629370861520135006661835656963760081961291890822073475245345226484518272244679913610985135280124133012212899519365428919640989354171536402064678416881898457554344057526318172572138216489079706368099148388342168649155324084005983113457195760844129559399507086979735877966212617532959483303831824119669314282111526108642947623086034779563382518471453126142308974096641661517744096307285189221485657237826731819324439613580383089904942795073542097900789735397696002591533767041939673065457342914430675751847855496214212258247151186921363880250531869233146083497888049026381093512857834307655398697362103173270254470218037223383660365243327040521113556637119187366488233647133595585162476028326724027371005558575178324069640857819653029090236982580396496153675279973319136694350760251754456126498803670441703272265209199235960763215473095092623024852683793770660157066952547980895767780294376773987360674178309529354976582151391244791012798183118887619340804851570623485355933694575629247786819138098679587447577863757688384556642705845752023323392563219878989456900718179530318790801270109020052650094422280069560385673689570456044849673683747005393225300771539955191342966068185459340124589406774938721425615455841294382172642328671731722985223770633979906402528613769149026147865475940092837232647996386875232395284670038361183678524711749032956295432815425943266524371773656173207848973751268253093553782166927271312882973565920757626756057877823006230459808131452559517220152705233074139042652302664697433026812602792117926457781302233118399192729221596733433544814681319951149759405371414332107586536549663413428162694503723261327899622180606957882136710984246966107138703909717382478720325458917399093834311701044300380376137908503769504507339840458645898680380555484937298627239299143879971996215537860730309549245096227047247194092261568841797795971030564649535371611934295215828615004492003869027204013937567035736471305008828218754706703053886573543402077123445709188357825554540981191229423414465199023745843807925885329514435608108804435040986287382949771002218538170415966605047975683935953889100406970961982366569485065226708026578419308940507950738166617032168175843090878553769859771173312309483713873543096354677352451062104299105368533154550396543621824940150693215076367182332184933605507789267636889799592924972845628858475757050961940283195250863329397830848490194388553231711940002846808897758797743969689578706832041584080489833538978498393332891808050743638774720574617825778394522464624962694475563660575623631468919321974129759835431724141730451939552932109540801941512333871266709408782011646119814964787265473983341993449335742519008935209993846718380024698957414602805028392197031119549040441283036680363416384410897377037361218840608375055911401453410710423789153073087838536274537648867927151395444180831951245161554760867046993737782069874691546793810848503682586685269355092129942602440829498488802255213285951734599067450271396039765628870619799214565417038715349632218241964441100654196298076247439282430028928547322879195595668656194047321862208628956705029056860401377915151714904968560359765147582502450334901794643771600562594819030363535465478272261855363886171489762888766319059601750142356069777534118970533584417454957499134105062996854449874613668938728047585417255580706149542709861403024763082428473582640410555720250329937672685687630066033892901999782485344848572089869593868377251880142889779377054407612410719491981441648675089575328808130629208413292575418229749545200058741595527890831432016391419085642696651296074501675558914832778429439662743805576516981926672546022974310134685730776022322784708853619958886546739704725836274947000631320711649462870393392711919728674196249368397726689337255468820194927959373359364824149317570105194243971913358311978817363165395384974415694777767791581055291180014970868739117327250048880979756644757234210476776805320974075008541359947350548205733058846137903671847097305779680724514369368798326054782016450814727671303102821027527806127478224576296955565213639998317861911742544270068407066947304346200180149319695420166432615749335082732290982708573321682385178536283924938796808008154004585595005169469972565371287293251584730124814992317088256557547363872237706813258778053152203262539572906317571391975044962335517547815031496837047817416639209928392989302512439822827824939639665407014878759583011295879416878152955244423661727296210110600368680141638503164340720098372900886214127665741066826688215584735691840620881484190643087604936148798790390466990746981825923031639406790492341746160171490667219037032140804117904966143008401473067513552835361158370367048071957844188274758662689011281993966177206949776372845922773702087606395159462809383868428534452887526722114471424551748527552347313767699968676308966396431323966087023560862937317852445309944413495434114367475318722435388696510400439950519224846887893356946377208162475181533640351383278064210620128778481418045113771272892439311144866934202122092720521589403338677253905448403324735879134397457261728487054958223730352709652884668217542077055330179041986140303420409481204457306497964793044387427203537864017219912263860156677577913464101163014865000995618897620596932394344753932070640001003590868988361949900788085430972118726466336166572922167855084320095626699355897878739682856280577997520879734092573823168324329330830495052838668163891231474957273489575711747931288884662492878462829273752651393681371220732669767936502834082811805002930002424126553035589886267659176807600257102399663719091392151924948803230922399755887279881367864686787662430133439346148967643340678507818166741820656331405729004456823145551750721520761349767056986968768993460515044420750919963447907736489503597272210681644766452547225046331712608158467354053854186007513991334906586536153447908666118576568405236302854045182430825778391241190897415107537552163148162046006341361714925260616310780086280354379772910864713311200715249919016201934583661484813011778896638178723829611247069329769857860235985816033168114341099385723540744291289333576085901625308711500164128352615073931856150229807690613918750105827029400596277892658828735704653310559873617784713898992735104334232534228193473324561787725965504326011164028595844227526761160885319475638441612961687187131288167416889247573106319293512480887697860632692950830431744053042524736379564736127203322145099159281603838770710111159551687271572727639021478062839494855736924329139761581044877706740676923028949439270192095469369709929496805607752284757966931113116250706498974656034909633648097076290378828198600499136603031864154682413017057908909682391669196018912355099546011688504977847583097377045716126587527505115172657847354415160438803986853679623749254877145191551512774490449053771833523188240725546558619159860909515722737707378580249106535031613187225273082510543701289101511325661672547265459327444340431343775852817503726838148780314140726825951992816400247323979452398183327084019782750106399939584620425626960081057316808470281232556473340856317204047906751184752412727004589642635262132156287546666108136345233606913016126069304843553788919687997608492659243945819511118080436677517859234738707371007254058526887715114506510546563689102609968373633351421777336903450207312946984893276722780548615297655507718134846067894363756300283687255968067488822301409189486319709051099867261608272994930551227343032982209204054651714975156093558110233272784453916702479824709134031506341355710317337759177203167008591955663021524187084232545009659669703235655733508773609923814656718752603454327473399893901682685802851894033531077972691201905453254580403943779877649794043178466349923854150379895921842397035560492673463403222714012090473333351776647866621540055234591399341693802211110576977896498101524652516252973442613113328151569105898145089913580002141441611415168616462443641924319367678669924249548819066485757884819349843664563790752376029422478320220014897660752324940731810945543656874323503105043755271424006487760442186781386956402164518473151000255169296739673235091615987915441837882366909835890736777995265955007315853653555772688183259886484826404549331488494108387220772083826625577147659499689118153214178173293689022246441152354488590762952751681211813686895393414792250123076735075842572030782190022913556767049584143795986227271886228904439136195578959076540146751439342543222799834145183464870072770841574271344832396213825500703808819355826294145130217045863422345414412535919460931143456055986481276348175681266987119517313098390968465606845625971584305845144909338766397811071725595229429744569497733826102354397930974572280102561044319401881479993380039573698030970021126719915973405574065547936345792048843263122388057434129181926802374747323269420040251603458479637079751395987638778507952130926003487697843222176315838846644945595215899439053213603443876956001427963218498311909497867398282713006064909768002005890759259069489234276749705862480140459419159650584897006893728941877262606511823050369245884901556085186742375579220141321381239286936876409808013538829328670642006475881558637015896421470079179408008643439202321648558260694564551066563587340230257238065953146654086338855885473473525534878412355075286886543876750204895799146688298812706191962185689889765513564018491303584141708786186284692702548949172866605124124133108778735336345614729944185026295228835335636862671809152173039111850421190648551872837474293478251391094736452569660281636127899188935948640218203445318338886696687384076052281563937005842365438978726017725633780662102630912735604536993377280279231115914178280251286154106771858851810821822077087362544685348124259302165236602411196632933982948468267056893819361339428922088910797847533626179573643420383454866305100187127835896013044280182394339206837910288524656140964274635283899879102638419354099181464765229353318897092460506898181474783092018829610618328812809519104865453584009083946172436802548043740207984374757156772087553870503860668348328436141319086161660787214479555863170608742157731124757200846601765405745137848682904005450765766986056697084078501395393319728248542738342248112569674137853103602969984851325524263927087078101236061791471360401385588198052923671212654234310979554728347514631881787585534165339977962956692640366090549235394115428643242061529152574956988477037770690416534005163643050969279481634139249571000225544125444879488819475697326983511181878407921798799990749285255823090181827931864416828693545778465899793830113243141961699137654755001342843764249285063602312811959543171865682064406360613390688897033093808816731493736262208112656670057916159511937705974789696223386341413800870164543964561503595320043867452448837669289397131049547915459927034823023462312984187931871814631619918292039024878906891407235041422261867686314709247914542066220497279592629733520358688593742801462218569182464369899665187681272530943268804069170919836746247676939794744906882428772305639318983186143626661198041088518856845622152225217074266086630001372538277735692798671108607452693048294948440864976806333673487165159699704455763800825688052593253991024092641230626720875629540088573149747889238214482685157184270030833034826191124607504107056747846814699275952677812704942668970776916679378723653589962387208162629760763243609164124059261997717280883590476030563492033344107060264108412063714556282613910146257894935353960388264624040092141463735310046359169602359472734096666871857764980243639887860646465199616678636057359484559695720601050796533201807910066608514718726672889012187170728139511805787722517745214199836972452676037413598041748983576493943955356314349078753460125941693075770238681824723583752553380780388646614172054007824548271576462698245751029910290030724778670922368317555957266153685120512940502820766505066460260751050577443141379108165879188215825591496028327039836616068939349436084302409143260535554730865771268221399487920784324329348118572373780125562482201434216712281716852135014106706359659851718272557418762204522241483118091989950399988831782804174757123681519208678104355384423337260025669934695425866391575371566771490701874085830847176990452302602538771810127539993967640053879041816329641180494234385977562743251528830609142193025915476068134212393723747648355855273161478014651095231447913027839806357342186552404462653664189665803416687052394190489609452948724615042788343010881945486801234202356957862453800484016804853162268657207308701272393927223607388681952979117507766989096432560496001517207933175263427029087378318492411199353388780385271274049888994999601424474234088160447921725179476777558861769548809326031445533385009497616054735603780736179338873012315231685489870362437832679938546702884991276093217453717634302298334090914684292499058007736077031190629340033494752749871763159463020610793208973480386623912208842396379860349644631744284223922079283654743798219551656021187666291910985149908555404303530692222454994491979744304269586387689700305895050967646633076660652964144527300089206543514900621451490775290069478782155898060580035612436292468009471667707889662248402377450381022058971572657723594330445691173513870295390812665516681034929939148640629491132918311611497756814534689157417734376925589951681636613870681297572702085287838828156173760168616668509049488935409943558192299420970826864151885313413357116019623004350485049283656744048133485973632809895418923874157388699649462262559585384262102783962258867758248824359564320455001992659640029161082070701649074926705531701033521210972620116382709706795779889392173242557302349961037154599325167957517654313867465741656988556953638079418962866880377829311590307997085409109776909436819154484139644343198228029330062721882749090123727991078935545634574570932392300846433952160392651425164104399157957518950515652725126246718622446156736920221693505126117493890777069043355645435748319349893272428325583323436632721509799298806179458730264602364542961550834160508275973916040847211498529200236051461276602212634513020134830787625182551276001455391291676949086028510488676270940566971058187566411527086210034849199420621986758566005804839024346621383920363064496670106561003877943183486502204776168804139661334544927276899916596774878208441279651754416232348548185173968375929032638033754483412965025740204172341903495942638783434596227195721620826120936695994555597761704451358108753345068352832171916890178141460354891463144011775939297738845992219824501644089667746436130571571994639170928666771554859998428264562990316672747999553950932495532951745337963062082274294908080653061983537097055604279647328547761967764419041368596752414989100627911596037620392593658195638674421652407760237386891050524962429740874362560215041411571920513626188104086922794551095688665559336711920654535213796168218952498305614901450764212485312954211327611523771244881950146983394562564667040935123774050468940890111262350794515681879130022099000683759652601755655220620530227316883759602173542648247271776853608351908520655381480439119125115984357624528954525034274068420164191640136864358255055821576129350907541820885788841161340486414192761503205268851774126043316409940274822115177569258546016261927216226318868621287333335250216340025982004015407347470976891467135175256306596028395252149396537771525078041301124346437353853863771289871977213721697895494485390108212106020026381759541329077400305793381960529052200310989715583976046459755016001459147992946090658295358207411202189137257253498279778956661581995085809890402460389190465377404541429116984345274188599053671218668566667733916658600076971911812027158261641635655942763100346958876291935156804332770511055104779835598279806150591107351406360136526866261145412114962968485144804703716451843529216192447363942339011669913599947834131923715734819640733047135422683585862366308731784240144966043267385923412881967683137009610215817423939074293104773227653466443905740468365723405683331490071604496881457420598269999375590918578166106299830664220548283672918669143859015616741855097799347639201061022431695123392633919292561367100585156083975825869032306138929619917475953381366028122045034864286382897332126082226109946989283461413135360118803075494258239214135922598209908852337629311711260026763761477697962150510375205324756416754599415768983325850359695554478946944094506125424156724202626087322430923408301938512911487824975215372558723412028948751199547347497055596601315787351106335013348398847628158465864171144086326568120614573057586737023098652021872355693249552373717541411707904865673857043282526760741707892970131831549092318277573095459747067010269860541677924462307230090756064005421491856473634160401713082508271527365320892005040743845148481056296506935445681604394840692458464168390689721296433851701107711644022934288338458127140123807603914817956723239561666445636100271246355628042884269716609541726491643510622432182729255526394412842191541812499354321755081426108359799275796387198936322178076490982990296781498598441469876612766324491121938687837241973056917216073265966873766254729005525359640794723006856859199526436312760508413302463582511223623559358946342353656175861476702585297213086040291605356160559975071421056789118152739484395232371359024702629451942656228574479861067803348623243088806506577370379231601942248682442596173265709994893635210543130364841732171554587094768412391500701491080197660709252298723614024122524719961659055915787504931621991153362418428461037597958546722405884900172910746817659572563728052496672613063231808513128779116010890483079420762274408106715308493087935671548005586848858298191300071732276528712232139412526670390730983310079565627791388009708952832290806426238741923304659500068570917756203991657034163145455232913772968770946651194944770141443161731965844887803978551490222792067207065786723071004887947140216577455219163320168856571356524445194756044102805127770512516123258174810433666242181167958327242435950956126044346254246469427921089860993027165922732150585693843626374091422305191442969493147690945148452184774404119683354379850939246595097378336463333417150748086107790183558715539187210438751991090232325930340896580331206642364558403863830959048993392513711038616431928560582594169833685349474971807836020703637956458528352023234609338220436360171133769341750734985886358071640116525788289371254232466377903541336345030859154264040309723717075454641864395344481480051856794393940011621972076445190966139578303580101164518942000233323898928547442727482270408080996503075062557442396024679707222180670897295453838655013935611140330210275137707801196114873364581633120838382435390168085402068344444836040742301413789843441294808334561379870649870089347869796514307196189408943948309430069869134049025700434482026821919263965709021006124500713562312134035212215422357085908488189859095944846440726656409271234935951627004317571270889311343194295996382850557003889992264827024872024161196228569182506083369883593025841464762823306071682240714632459088093738314455268210708466773814979399426293542365313772281584259588669115198741966352136481748189955444808884567843080108448704678473739750793335532083154024100998297214679796795508610598893032578529510363769800877412202857817630330551954095762410621166815168516947692520489266357748440248628325165971120089213641731388019848289913102970480507224825454521676235740542299101547003039215575125403005068014694523283442044985899187412942125477605386597401965207492251585534054352549053875646001703175622011819981266311946033739173640070729227023559006149692045672143545068328653315444155446375774059072334273521934932625638872264109063311831982665425819416400370150110386054340646024193799217533713330120439626130068353298953532734794723503387987310782998433846591682183457404389317366898018409039457989926356051124305288434545477017323808727095027674258548554340908389977844774638152936066126812723160768306294335075735189310824053399615965286588369570979240598338198386600357061340225997716475113227044617386802591793632480933381177611298395129839680682418126490556630361101941959344766930204321425573555727733023038870143819027001510616984890462191053599744182832506721477188173849831529953708750796962098480019082005212973619936096291720875126552666613789160770605423269409747225215365658076999474049162760060349626138761616267937730145122989432940936026471368770983559283180078547342066439002730351501122744182475657369285123360380260903128733494386591850795853281977073610599716796239071402106671800046215156957646268450297161364853868524124261005548362559741651718113815480652600838836335365280875503916957066240696607409309857948207895799834010909187869258830709144980098838620364714542466466037401509960924536011532923231766710346818044223596980038518679533767005055791131721094366096946836406853109525619605978559954058397658115561798022656350088068197088288874382231494257159512640143742758061304485389399090960929744544230894097815516547009800389325486849267775830288592652388790822248235119768710682349359385047789420285362496758108369613778964062435534412968598618352270501463593155293351108985585712006560115774618295015955226826462714613633420725118794220506231058534542267712362115208828412787445138133028721884876176557502808833381892092028150136183741987477931664113002854201396779700672192225264594723940324967747358785840653346559718058348554765632130495312716528770535101317043699167008641258889639370512012779701988236322930405694603536171331562527272592625533261762600323528375626880830194371818841847280361163740153206674217859070258941095830983526779851017643473472657224860440156681172562828305803736978628824399861236377685034484638887495836666318085754505651243394509410388147302651119449138225591016071313720048486027755269570282383516938913583017502427857696677084508723984014718466001711769158404616779520100866655346113274970353992686476487243146336147909573147306031602325401192281469335917800440775946554717707239566844998497793567456725434873208110079870554309305051853311137796641020718748981348165856516628837823956226540388389065345404707786781187338089471322869736815302221156112332482328308336891521399347960767208816280134008635838678432306564949685067833224823867806872142559248701383312189209817226879937285163737071620173466113341126486183413177349733939047846123950101648821342440076479105039738723551477426846494492380934589470659360079773099041729306998958174894661735437891003908379346587066412319893051529847102624803764643049684799767717883907661639080632341882316989798040709888378603305269897138848414550689950156554616016725788422659929751692775182483404378258672459218322546645627311032277525870307421556398142732536435353337606435685354856334366794736242198989482736508546498085521690724704576779369629002634703087189741160818804962735409465377146854062282718497632072923370924026113563389368592180020979406962912100717709718619314904203235466136800379810863121624698624099158451758103657052336559932797065481345898733876169746787544935492498664089665955132239489956386008675446437760633968017310586947894489461541083224936629784441984607381658715154176408135000615023472665965783423779136869238775320744006488923863375690402454553032003366217017223091511265457224428691972755589196589906720611858875247348450482340493514323852258781531108858970045024680865254677146294178339629010019538419173279511254062952415801528394159924133593304894449328454950187197554755951248221214030201875797469060822073889181178349613158227333187703874430943084988479664489303053010688029998905012578029863471483658951125822818535334415272931085038642754812765579100946234408213388938763561042397336191752939535930362980854362363117876219094063278406095470111088706352709980098863304639117797361967681636489594170598110683012638553852244657080280842673848796791498796722636929501340276385906322796621732523673725957462322953374003936862447489502205487734975504995298522301200041846817215149691633265545988197351476928918660072679838570804745641926997721016467685495394917681475550448398715421375395492464300670651707720932863045846609708303043630427797410171448824440078725643183950318316437095154133016548851180379165294720640345617184850595127726762938178280166001050562188276190517854563874552137655086219766315183957078396334280749421747184681774331551011488053200504026407973194189251835504465071805433726008838098065832243000545727333433683561542686123061195235757123958894933589909836018748103794639932024978881545415575379580563952789463462883265263707813820118063047112096988874744326992823989128723552181370813383848618692125956891400171847007297730639387376121699619700111677639568504990313855381961107661279285354481978123336154916566285085404223702713936303442567045835370015193227830970946650683175618112235072692441434694824062264670777656724248707905317757430800171796982840585706360046709750338794273680698202838236191793405258105434708648800655746331559702596811488536042595691169679870423146273785787875824781056082822568374145059791229868047807936401086857237438312956698568534842883237020847694206698675490510319738928364944275320131812124511193564605168299687668446806687958001281459797092219383794207635795206836782159345147574092597774876039367852959594054516781014434594839270944410429048324744982162917070368353657444143465984589770219904375801755211992946460398755874052926986831974665438335851537864557786321880036213419375388948956115421457440212146478862672167881390915554069020283656571940176252329235210028566049883759149873765548932445966749078188687780757128237295458490328411727405101954857609063197873633314222937878718328711881591874357527460155244581053989036836669547504234902049645088663064810834976037874704522324380566276964065590093611995868564230889292290167843263770429052623345152517648806859247506598233318068527700049651341028459572559416956209572207189434426907829202282581610047682680809784499290704682476673309469724256710805999078481088919357435828390322665955990797841573489096190990049771529344739263729457379481896493466660995411861307375818859113721478147646240675678519940342119119322061869489595644988071530643107344234492201879549587601265488466076170209067973117863499622049570115027492882754855532174922949569743477052949104582294332682800124006440106028696946719790198597966800596070573810760820718342083317825154179469076997950331715557779465693129109557797888741018317465744014284624533300969089546337273494685285824487164270738657488506056202606550343696649368713877439622182388412883892188814769500447428531231426564656884205204788770411968453207537971269907670335815964492731401529072545111002829097805058375817588105346049374757782925621478888257121266169448693674385215238119323943393725974635403453491710872360713837389178079179531301865098166920265369003017214294940709669547715624090231417761623698876035007341383834671188936677877715688791709407761245447134048364368435400786669237594840177849709376940472630644576203504736576780201657233170275603671289545772194739487689744351792677958534378514564933685177516133655655524292702523128720351855597984769035404733714269354971323578527387950643860964662805786291044701313307100713463096768338418664835267313976780375695047576992572795748106067267417188776630063460278902373645407446075230094676265479281356142747692721225177240119542626170384844844584963035257201494199398485184986214913305343638489569962037822154920179807247262187511709388754120573820590503762953748899351849199142203032561430753013162673275595837704230580125674157022780163126848429689685267859463941369953261027427875870214669700544359053927114432326242797276390699013194227023640320840626826485143954141079734752187423030468251589341302052305969327149567540477505484482490220012990738114586835915238278583749831059331359619059955322423580726271809613175859643666118353864815319273205789402450693195424296631170961879073172547809385055812135172644441500090240490826979827950080470974084385231204632106696446602024412126076019754148620842650936064096073149253945133413911835978345106211238275535260275674776416589827695870579815643073927603098494383425117001558813447081260553925348330827831969784150579751225128799246067540493118799806903639105855671245567265691608814388298236520213257177152972895217611638458199027736404927600039279471334028470664539838895646874407073488030414866174902763688495854279432910385823096347016671238588909675073585324318512862720538193073651164732219439149323308629824778884358141057122973387444232248726180196112532365654979876154211803748536351659417369906957133859641175983498469709250822038065101283088417130212398018575620103796540978762281032159916734179603369701920480310316677399549593783435349201305552332285197908078113862724432436168511353607120535658738035122651405409025226537790160672672454351456802898793643630064582787577231818612634588635230048248443377550730210393633915316072211199492992466325751188246907072737226562170697767098311880355575660197112657296229404331561490623713202228894118463959445437676436388038506171452425254970419655563434174753404469802162439168465013702576412308340600943168349132751372442449903708291479099322008590561789705525179932703995548993507279278869117077960050373171649942683009007761489256062728603405065564607715078152855474187364594046479508647069233216078741725683687659274824190824540488200124548088443885497154789290462740854782390783403975768729271349099102032523468577303946298178095687604658491586220017661456864772570763852724234830136199540244504283940674313100883064172777247675144637142688310197769363656044495445577872118332150531037806617804271851171692852065437050719864240759423303227757376109966815860911828022497256317360550593515745254856571561678928349250181880216944140311342701665203143492117183642001150585011784700235614641708519826862852349629325024418733333535176050611782040791334645809222443714660678893740148720027658253918958157804237494462031032528394975996440188386694871504570198390787851664530430485878781787534728851491844282499345187748971092984994374625660609185345676522977761636603752251800184857523465541620983755555995441384012504638831563283364900406965606551296999062127591112943421862487616163224897048441676347656010734000613496278648970412975417122605452982027279059051201159597794093275341168701717003761730143404986664120642558187132068156180691340340408043456680447031043768716047504270925972453010385201526390333761318698695551461021700649479845185920137005733318116374100343572264808069446367834466569217467422984753569418324673178838709236919091916274937165046008755511488266538919820357002046966601768641394002750176219607508224288792090107087683444194926483281175242901907152412270354816855386309555697046628293493680866866690283372806485478304876644020899633241661188902422840030988332171659994947244599155767537055364860461768230140562995973786745112749729216419269802783036470141525081228299281302009699528026921907154694426817749076976946488138031050135900458921693143176199564100031545532519629358836184684613786803633630933285648616142382680378596389700836657396056826333702080250644786287992441922667516007070457789893333336518062477587822864917025621725964983658694641217771774835171886348337803520644177405762559233607458779437028699669481661791542710063570495497383231122904281957678857276853159216441590680299828294630092761443345424441642500590449081676444284947129089151220216387942709246707979469294197909697493490834754957640523280373725218167851391755536278932102768553302336407720072428061330605038462004271850969672019169247808139664225591370102135829546730357780730835998203294503955419053457456680634126081209923324628218039755450508423638909532695944539901220823883619668235100605164526547202572764893990199447203800316234323251584690392659801696071585401670372772857509052908438155644476883965204098047069529868155804571061156055169643824613896980259229931020873034012284774378122663704857612195220485302802858555102864028267650652494154048025246648223737747122111704394814646924493568730297808106115763367058337123830325997772759500063877488686541846689230642307182762455928006008753859815478843174638238265475933665172160268310436945272436619360089282121485606465381742224382991472722605798739157420205611652844442564631397292492834031339733987727265123483856651973488689385976860764287761185344553305937863089262631144658601327340811138713210108167368731379177539937242468135646755555849901886785532410963964068623816377827668187435285759994381455724587937834265514719558470579334219607739698943560643710205888036305045485705277687541504906209354599427502016896162257079585607102019823300495675650647751401372852602727997673408847450637402072452741887938985349349916358530382347069005792225446215493897770732481312953038583371668267989614956567449081218406983656400138914856350422019552077562710593602138795440162532976512243632502490227143916191006120744299009768771294881389833192780807004149555681922366284883058776039640019621304703891183040566707241448613854013284449188802468362581750962332074801951231536935108009082281707495465867963726478442895032967340389454575860208539925649885914588682053668421507123886991429293559980175215550804904806570478174522619547228295643194915918785322824831042243295970019904968529876161815012976368239703737627389198374719995146796872532016318473138631330509730451519612444737855217998336003751294949051310312515754558001437254120420671158171735714886231565766467302327927703910331895877814507617951526189031723163887989540005000887816579860944914714977457372878729241267994619426430063899361792326853830171501221339015726954411868700104223851216504305511730392607589211210821417244134320662462659151650258316062211901820384131057574858851548120779826200847073651569328313881198279237450393834900496905607126207670913873702910481527729568073691573388098212640126521066786196463950230836710781024464465637135656015638545724681154302982583515400780281443660452859764237712869494731558754796702395596138253934478136634660155599531922420994632275455386805164167187113939868630389189177258849894540887547602901658666139296106760443668939866765272511075045603996433259306500565964257178297271830970565983615214819075061119244898708640060231763172290502030393067000550011834288209513784122726865573789105453800070912907292843563867657554721594345872013715052786473368423046959568306897160896452037388472123418213787759686152761616504419047472174157870525417459253130302014829725336283085303556185487554466867436602160529277560469743263943718267431535635443935513268336796706241832361055588240907822038199331205718244907395020787683114202837337864064200651211643888323284990443216364146597849905813874958431125710112277951432988145543800715628593199210571136489732503931996152038046743512664070451196008390993588448104608991465528188733630602467545625883017302070339925401248686734831278313778926263488234470821200443848668750590501277311903671824168622560758782031469999645405180920762568997841760833026078782830327915273960031337558069352988060349664799729333920326165572610491287486298640699412904427283674962216103203465233376290068453029362350939639610260297144067826051608800466589633524930048230218269480527060697065075762324679807951935712613933125592402491152540227164421738411696358507143320933495178472723251843602273961217319162705229288546811440419034384301783233117646672014599621655422038005911777056966940135593186969842541424135580482176069848551282562433567599644420208978356642784238257677297808660270805940112950938934993956955236215509946904917639708243326896552677222141896856267886740586145253082034077810967948106438410635374834228771653799907121902998617157733059935008539895372584360094491277135466006795779933263133627722445551617066871276537420032293546773688488668285513692562077872657475356650070215443645255051353033896506320959484081263445068890000135685202799398704536892601153781509542161474896339801009938575916694884833777593654048627770541365142557252144007342488491179333437170957182801123687242434276020704029098590327210864276598901188808562479578158866952729941396485772703621258065916058268120128096224404302814537929629107013295481259819739527678267422779829586836763723881077758501170198515011552600068317091257345319410530674422491157737597899976218233090181162025877584798059619506853360384946636639740336682740605539535307758688449553767886810858620517095915671189687952021180299008202905544764473067194274746975546515450366378119379982206239493370179691021579664608940821573722250409342075406210560380627211108402568752051965201343346893295080733024513094431949823816538703217057331754344298766500432877210205184709262159698519556097336029215653709725990535038298436995434472791424824388937439596974289062119367637842497036494198712460815201948689444181038828648008657024179249485231183810493555259750222182019365090649949570109543657352673993886556602035124770186337772802743840736428111800758267434336847989552308515822457600002445145649280244642496474329933782084948165717183718910444078559928227531543033125223906815827897586603192793128553077459375502609719859032395900096088256707113357323386048683454584234196237932402916681018944452902305762474052279259674023994516674232147909171933302913079328559152395389001824399732239201268919847947910727488659471627027293648689942440261834434703857719411252450678646337612685375359153847344968875168304761677214431849506414727996260459731783111453444045980772642237786304210505078612637925346206729631443734066641767036916597275697029337559629987042727653634260966612325909320926285500711589531135436542032355895075041566713220312649885796186958145439763000163074469656731372464865591229947553763409223314987852245847197711656067390566965016893691219178190587532442249172611433679383067897928187944530004145139852574416915152774349339361363232196033758652786193623961542685808940434062593248251465134290279174339353260327212797639844790682789067020457415636359034624638374001374467732205029149887230491201713773614374294581558788191859934285851897917659833703674334246999017477495653850532641329746082840659617313714508544255787762194066909563686214465130607044935656003098221575740537562964859714646183759527665708654623747535522164879122260494923625889008095312411999570242880492840937515858411051728072882942333336789384869459566876978817713921272231704235943677015234950680542502419220746393603966159829975785308928928590674695715551657562266636621243394441060522712296074810279420507914244127640955783928665749646432190401119280366390711304441340308290577792112024377253931144027307029541176441694035978541312184710103129244904036272117576312516954263918283016953735885428441303096063912257474409282492067021094984816558830341341831819599523935049351254286623709750078361551088680793878303993278401717588295777111002630579902994970130513317067897130941806799120670867481479435624935129781637094024891031094245002596130110312199920374873408863103638137496498328115682280029062980742887850804839674380519017308931139476149935705572150056610621138154131384934689730407191933483540872985279481480034588765748706700439783780117205748872488636176680081398548501942021554950212927678821911640343579497605339063884198629350196930695556233226421440918569483636582237669567456783052382896195817563160295269845973674546089967694457063492981568515814637374608705755065952710429714658735515579264009491183093610659259033646498574426548749699203211009518836542463533739416879872776576574134895810915816142762943389911787472974759827969687547763538714861720285803428423658687921619712249640617336217486207922369560088826849562272286605341004563970875882180913080303532101510123015542173795820358028405356558155286231154387583979505617273946752643325451460962207841071043463931943369879943120160776720150086783648945856404003211771423860098758257100093137954514449317545053873906611728905653768443062446125519375882689593741092075995160667141720022319469359846797134388443907473551438494175068965314561651059617517781938992574401405580300277455722841694062812345452997132448364040143260521282242965617243050907390865913591678510803961586295552108857027962850610977871454566591646475030524229891672669282212404548594771056526026776269980235975755104010097548913196824097370583730556520391070572057730352699464242060477943311426600506896330020350811488171376369493747003113584804596050569031162341726258804620062710708956337107850451209818656099407871828889747346651458578747337564419950948561994464373247601302073754982480728120361516373209153421003319338362687065911052708604855750700653968229079488786688157016387164063060145038786127209233433009871107691390121703736224132230289720174183931402073860047672673731134725916447067948557668111718629599799761172497982060665432558929341429124421369214408484432736846573747843626385661759904162764919529672548208039902402879140695793301900819103537087075724383429114619596696652479899982477609893721475387182096900824926277185632637128459346028571262485304437952661370556726867800769550810279427030272276004698602035767524098960839544286366799266805321215598863302194871844182752045772081778451182952221076173612391712701324431369893987471314040892830208990592872442744506639138989049500651916448332980448636548627875717902868269801078952304960120253069936449926832324164489348104167325427474854854104795173341113853925576624817282889002699736474694034196572153501993073812234548941648185785143199406782283118925001572861160711303505795205310811840792895525169420152958229518664707945101775609769555258380094910471442914321968646113719599950830840716254246070252167532522470331981295664838458571690522321898670608455310485184247220619065749674321485480660238300830738033537207532523300093784504515034526989892429913327097153484179192772302480766748844899762996180646023483207785339180606987260832967759550074093704091456232934187411722739620072851905945252687341282312694778174554438735548539804991922500509365850745187999563174779393281799187364549586187786325505538172934956374032667193825480353833990678100903455644033810403269410992955800709137359624697189469392099804435585661088988333983333211876802300001259193154410901486887103760230126899141515391125027588078496166647599997171650122964258232741534490076872767068801524153160067730198201422035446577690773374700365291499899803036690236759517149949769137056271038897547732813433975734590823455655142706766081692774820193687602648915483520096705489844063222479207803422503358951630144125749343042279842444841406049410274631419155612743103781980074334258860673794633037926436564120787527581512732066245432585564706512813816596659108189422164123025350276876862694032964728839576168263233893946694083636721678030261821218023106324085236879532835168435885924343639196111449898898700242691169693248085083136219107770513075264292952826567542295922559368723693213204426328042664920649002383552241467836656021872018511104792872991343297184221425703861290270990757701975638320927634075238624885931502554395128844360828102154554074035554001162941406078831219385956268425143396314355898079171578837694339368907601575524747919538815470524985385758802203319709021943738451715767438825129665351713584746934669447896421746357121421151019047630353873944865533167019912673890413825439526838043732243769905724367734400974012808246436333641001872616159544822112084022378189452027237490302695200004432644360025910165754597696284326489126674844353345012091787413525415055105528318074258489661105353909061208304878057863460735442793178213190754350060629663189738195778252897368179098668764242748965540766666554329593318733894526091506487372254344969067356117189847579153728366190748107015695761405210392851593548054810261262434391268467382602950486839402295713869949161126907218440623158051057204738410302551304686152349143780687807410290611535429145939237576909881706332529058832189243983635907174590871004372029527815470480480330094974439293508352522052297367462654251224918675322141399206176954745082622741762695329920331218181220890547522082153173143875217081016078991078799577373112195948622872992096718859121334435566572722342673239817212205578699709956602016691065820007876405071828800765471715272965444854578736726685495164152628622152908053366977479740030224363523972872304745743159325047269839037587690971743742349437144731029130966156215919119259070471800864338928455296455326351409749614918988775895338908461116559697219771908321093248398904838342023941815940879795418543424342513722880839821849293321091598736467361803131250541803342992735532428990963908752224503546697170341249600104331554569870799532502802248074709018985191736101790605280594040619042201408019361003260617942119486815807542782287682244990970977969782142253760452539527619605579085950496602812218350391467706224552615557456682630326237020272353816753048498101514612236997567385887807885069332778099050005785941809680395747393490950997528759950520550719529232601119577408352536426205568202422587293430830180043976383258852373628924324866200774001358048084607706229355872570537998357319174431068122188949667841982562586339434779516419858436081351921599868419848103023035458254649599904543376351689572020143830914535905565816015393769008909012683759914840704081638465841647762257633926529661170954257872834835905248429178761234329869698325214628938038024247627820803833500243594041228389284680134269866194528941058403703393403340805310564221028640192510819020652374081294574433030412991655842464139111629907902238797397887890538563625295781148650064542039116117828884066525548900124826663653541928856906556146151172300379346199858242028263363571514575178127084465043373056809602806352741274418044874397092870241144827350676446876778846078179355899264055596108630809181461697491599204418126371585660552391117690876055842871954213628662026516555815921117618075818279232694748687084657460708985326307717838882989311632800109183723647685815173680946979222260461891125950321921270303229586839549545543268350067664103708906392889385720931602918186504732997400320506251528998745330744487802941871006975270546697795165548250507278533653095914405276435319490993172166621716179725104610092138863085045273227204410875676736837891017633141830572368775326406328281267407652565648624944484308598670564700005455245301570213291049389335055303349101154395774143092395997351228646074720676297872872049741125189773359152663756190740041276244460238075366998915354398473812768409330688357179558296782893936175249806582084510066558087062492203247821818293614130769718261998484406443428765699602224713997740730544735678584620287656813851814689657022018211440958202312008945326830189815522380376282070706602573062181372107541394459185006983207479054689312832016659040996017656796807409076445480359177411969652614989151459187594051390310038776314533435492903150090329131867957630434479183971040342561152232883582157754651465223016889815638132523958887543116483897405207243493168119897517027986499235813357099010156202671455071757438600585060005217541605066558807012181318878925958790955522352903573764068151311028283798618603110991187906242037455584347100635016349610495687609386485516185161299387669748550089385870469809435091975105305745481079713269225055485439799239273315591713783176733339589527510720389879391941100243394666885139242543226191054124842231862393933274725258646306286220394089385037834955482845829480620698987486337471945855585906974602774057014367533590622654502346537305691363709206225375873296647749535422786374135551773711847959134266827960698374400162515304556646065396586809602376712697848249466536585439418387148035954478506582724212221553991385407022462471713565931734165583059692943888480884662563892822011809739322952025680516170945850798636696145253910673046773692342781467588682065240809825281398837756491746955231395443824978845751763081484738453923074158716071634970656845443596149496705671437763241804663845799912400573605639629906097575174859249221320606118334072237317914553903181778537637885488531879210444683432660513111215985002148625746792534062049814545817158149547557063141868437596491313539257597378096812381329569575702662807276883642791737304690572831082057550242903946461573330379235107026150789465464520786220819212299186038937582278630931819326331920892634970092666704153701296153367027693939936112503847656747391833862818799277995882216899607256286007159165998683284610456146018535100266368056048747730574495792716362880867151168440747073377036602296405615278988281544127688417010411843725127693172963767251243332951739062790477993500917558024323873139811281828790607011169606838360416463298060110399265068417868435084796455386900425268400225734043548347259744361382973603654361550406714225895150439002542136773826871455363581775354162333530137057498093664262365590016615542876755297715639906037525242395375795972344578873822190686800321681318995412583557250012613018105743744423880829126891542038710299911864327162308684464062910980914262251866183163316581087628546581182660503928526486127158560543178623534648190167357786638677781113783232578346341366569914151971590916916210140415927675898486110275851634142884968831624070030300706169041446932224226647761293981440930239203891101200474742199121545432343512289217600602797635862549403808221537642439116609002162564079430802263183303825416120823092037324952907627142104198066806325342822380728951805432743141207591990266978712010078641109029539370060574672537266975639314155032586965435707952313922870526197858376750965939062013684065119652556279979217270770472251638959454682915857019294862737844981922262897578954550707664489981145836966228854761809458462749514845667726037282141163494588201380970680318382787256470563379663879233644985986005874861152677492830156506683929879518760278105134082209977938794671769593035792767940989350312617509743312896811976510877319037061996819297302254977152286149357439497060173245183420399288087349096608858802433329310206084641708483925320248469794852458894378921767138555096714784776924231829469604967599611743094358146636977793672621342208316349481724025444514863252089387964992772522146944519701855824721769405399587698920271766399165632194301874696105163106152523721468261147578571391873566799753973235677245689213217766492173824996905199177730432805682299059292548987732842776231405637800652781323871390926202269950502989319918199082239967083042433653348274330758614465161529621844344655959483479607150934826494708733818699388642325348639217649740224650713171949946018250781095455492063811401104431380125730847760139281029365818088047655950920794106069095875593808701744401100422148770450945314759220668184746174555348710860394471927498799495983146582362457562446385092802218065493036777106677641199854669486627234521641275962723351270281145664239989830666813975255394334506829173268340169951956714513667792786920153093819557492110149478873709429456747332012701616688019291160309512718951032306464240667326405139737698860052571021418762856226319666471005120532793487894221542958420994053885855129852748538272749058253678673554417916612183580951298182339410053816727782986587770322501004142291227926348964424606551146950949847372932326778347342841933925186384999039389501312604804374546612197617170673121122356868648514339665169562230319296864558080607651426465316405624696688157035869000984974607161295024315154709061711464602239192757822854617590555134645162597069812340663731822273010736999883393922272262179535138363624468899966433416924401106215834210581382735329327933179781831194462384920440880569884853689644839436816744350230280072378425428812642377763339601486220461458461547926298013233775063289027247265270213732483034928379513681469151973358516440355270200033179297920868859824643648997641864725206145220023208459947243276491053668744832706199644145143184044716398513303810370248275559207512531438556879045990719111035617859785973063048947429487582609960829477120785609896887861070547434577098695782170901737808147000630798507134811036283049870031504342495761204483668618176924090124800924498048171996433797963993124969127698064837419042665305237295571786062319931550879072104289765809353501966952615636801529208803315245931513029615956895008606155123576995564646459361384753666691005398976418240687127442707909543690347065086185913152801375043117792131016657386414329639482519079537803433361764472853069141513769227620867189469380902016822870419585920071864410724958451434809449066272129146089084099885348864970359722005422946733295509630006682928137217389275716928283307326521178143929473359456966190580072931583650233690762332324622690958006781428990859056437076005103470919478595608536997200551478580831512508159481530777609369420140661720331352103085082154820789539513616535169143003882422781869634621592777099924159182589397650480387285740145298205019631418635428571328414433009350180249488770487465746703057126414235535509308522588946369042524915967446701583696373051401108890414548833973155012367191994480285450867404976055984998045230340943472020286556219234123280106242976026069529494831835330929146086256339464593349388937341103119556847820662388495525748309214683270938779277938352877096190542770968038765066379894466952378330174679381630709337954659072138570291091751280597233263160792815576199385563355659777711644074494833735540259569949391292364339467256114687538791020966783722885546534400727376530442941156216125374045040793450542443860390733948704379138335795866793811187209006467376655538786686785048122907262777314475840101426259276350128497349335833579121838582270829225905539788142460866890337786700010322696498507805252155716151216932354722418505423112111346921782207423006625571911961553044770912698892719666686574613932210137314250163621023266140168651364366178416001019322391667400887911430793173120661170185365501088111788279482172778578080814734168520837832360923665019655066667299107249253528405623754330638241804233466539644237412721901945744000916462156434232298823637365017995127737835721155685143558530111730336110052249787893105571127156074466194473501416466778734163657601833144408343503260794877525940200567538596797328083753020870529262748696717284036826299168008266191681402917328309479952345883426944033048138373055985664726920169858677299734448630950682026151933146682553071213494173995744445390002488465450756346155921817529686295465229196380065104484823018533239596071391956322852705158174047827542834952487466736130215362181867298841297385641214242354594376481497755727101704555984607117054562718677731435466601360926278106076196321397406172687598561113310798298015986625491914429148898300557670806652445686919933125030465068441005199079467905564949257944983462858522663704254934025140479932175363195175434104703271659735353805349183904841249408220614939847250445582437911760701730171099657415723621265727356900655688592759668819252997208407913992367505492715148371437785306844843224247843296357563322241421187385254340796890365627332635238304930672364050210201294634982532469996796262504896959554707884417955712995686380382191857273526481759233840365086623586547578856590350293249769613167669855875889859517708924818800134950366780032893404636672704577907807219477615191725531138783477510550672218111063870580203761406298814476346577142399442601597702051078716135840435043555249663949311416034626032283982770240106376279024614965338935912875395935753000612461685575381238618065873264849069121423629172820122884231052977548605627499910368745345035433760122276913509201736738307978362134640773396138060079989657066188225493493901804742353524101410061574171943954531952171439835270076115677146630548169607938665232035058116805376375597490098903478890250621458531979344034002346130282153614498797450095058963577805226841356010999217255638349032797885730460242970582480251625931725821631147256070632255906215297642523442124871236261870587203972826970764446288949620693474510659807976942471611744350971890202209477772582324395604222852041630490441932074725091119754172475580856422749699319930934934633585267508971967633659330382089418148556418508542468449024592248276844008282847718761146422870567651024430480911234725262048716177344617043552146750444146819859668800829811728290818661167021621093412775360689228879895623166423543524943576575652650464101628144443951479595330001141822868505045066377431406119293278941259144894013255603806665095601430623118879991876927451594611140657068680804213338542835426073248139094512404305899143246239768812628969976539316639592969445014753408475318737146844029800131549793485306115712929609991816857819646258750109459152265616559347866290637152421346416653299105670827338758482602409293755292505995402257851631274084724226343020390476348772666977773364226774314594969095946580438421167839159399205966360330370222713291948918628130286999543075743990603188081784154275669843261013152746966099504290452777418210859183987762950801236387668470423289581442337889878929517339344960656604625514974536479312201880848220950267358025251160403978583630129148189328578097557356752908093272681441055171582829250993297279137582685236108121448707422450729893928381623690910960506346139685012044609080965342370402937423220342730983743653838699558421194451744421002437344507677911187293875602433734921631156923590617392827112852816096202612756765231941172917008294295423290264198051639533576748646128463187367572039416341651093781219956985087978722894516207585274095086603009560761309780941255163468216136318194810342720984178637501313703837332272944603553269229042691161042782098931463017961679655470949195459124601061859181195006442073361742414657955482145931674400180628999556687058748641695730752852343170287229050255133035044288223003860142574654377803379518515824874609714253132111455072258394201944972501650306637962825380051448338118016976796071424169802398237315987296296830466435032643214729348639424311555911527821655916129404419118042310812521445621250059523249938594500443951208758500812900612499691197791434121485505758119165794142128935280172998711333012267635871119594879259568333347573967215504458114419390605073019524278565424111945851655736104283047223730215416045315873761591073546869815465263125916050328300782017479025324718893321345428606979240636796220042264068398299566171035954084040707792466749786799768730619009769543638657140989007314474683730353920576217434084809682617657361309399808848945832779683866912747636525531991439280008364430707481364686148467134138846036615578832653396174984469406103471064456080272409593332818737934319991226570765481505007015734329197601331152490777662651202152266933523974378630032585817781668135094789010232086824402636004100881710867515784949141168980266319448899920134126052740808505413319535780991305133150946568779827019870268986959175881227913575676384590127895251165900691349665255195128578928004069134146151479663209291822431894287396509281327536949371993162513768489357019936323725167992523984399734058952451876825377336819686783434886996882956022027318838022900891749843342457165730690993527816680115859296254792377502263942856962597691696037800914456457130970883304781756`100000.41447239257 \[ImaginaryI] 

Verify 100, 000 MaxRecursion -> 16

In[42]:= t = (Timing[
    test2 = (1/Pi NIntegrate[g'[1 + I t] Exp[-Pi t], {t, 0, Infinity},
          WorkingPrecision -> 100000, Method -> "Trapezoidal", 
         MaxRecursion -> 16] - 
       2 I/Pi)])[[1]]; Print["Timing for verification=", t];


  Timing for verification=1.90774*10^6

In[50]:=  1.9077364375`*^6/3600

Out[50]= 529.927

  err = test - test2; Print["Error=", N[err, 20]]

Error=0.10^-100000+0.10^-100001 I

In[48]:= DateString[]  
Out[48]= "Wed 12 May 2021 06:04:32"
Print[Abs[test2]]

...
Attachments:

left=right

Using this new, fast method, I computed and proved to be correct 64,000 digits of the MKB constant

!

The computation time for the original calculation was 784,937 seconds, 9.08492 days. The computation time for the check was 900,860 seconds,10.42662 days. See attached "64k MKB proven.nb" for the work and digits.

The code for the calculation:

g[x_] = x^(1/x); t = 
 Timing[MKB64k = -(I NIntegrate[(g[(1 + t I)])/(Exp[Pi t]), {t, 0, 
          Infinity}, WorkingPrecision -> 64000, 
         Method -> "Trapezoidal", MaxRecursion -> 16] + I/Pi)][[1]];
t



DateString[]

The formula for the check: right

The code for the check:

g[x_] = x^(1/x); t = (Timing[
    test2 = (1/Pi  NIntegrate[
         g'[1 + I t] Exp[-Pi t], {t, 0, Infinity}, 
         WorkingPrecision -> 64000, Method -> "Trapezoidal", 
         MaxRecursion -> 16] - 2 I/Pi)])[[
  1]]; Print["Timing for verification=", t];

The code for the comparison:

  MKB64k - test2

 (* 0.*10^-64000 + 0.*10^-64000 I *)

Here are the new speed records

digits       seconds
2000        23
3000        96
4000       165
5000        442
6000        623
10000      3250
40000      175,551=49  hours
64000      784,937=218  hours, half a day longer than the 35,000 using the long code.

The 35,000 digit computation finished on Sun 14 Jun 2015 06:52:29, taking 727,844 seconds, 8.42412 days.

Attachments:

Here is part of the reason this new method of computing the MKB constant is so productive.

The integrated of enter image description here

is extremely oscillatory and does not converge.

Here is its plot:

g[x_]=x^(1/x); ReImPlot[Exp[Pi I x] g[x], {x, 1, 20}]

enter image description here

I said it does not converge because

g[x_] = x^(1/x); Limit[Exp[Pi I x] g[x], x -> Infinity]

gives Indeterminate.

On the other hand, the plot of the converging integrand we are now using to compute more digits looks like this. ReImPlot[Exp[-Pi t] g'[1 + I t], {t, 1, 20}] enter image description here And the verification formula looks like this. ReImPlot[Exp[-Pi t] g'[1 + I t], {t, 1, 20}] enter image description here

I said it is convergent because

g[x_] = x^(1/x); Limit[Exp[-Pi t] g'[1 + I t], t -> Infinity]

gives 0.

On Tue 6 Apr 2021 04:13:58, I computed 64,000 digits of the MKB constant using the following code.

g[x_] = x^(1/x); t = 
 Timing[t64k = -(I NIntegrate[(g[(1 + t I)])/(Exp[Pi t]), {t, 0, 
          Infinity}, WorkingPrecision -> 64000, 
         Method -> "Trapezoidal", MaxRecursion -> 15] + I/Pi)][[1]];
t
(*393847*)

I verified it to 40,000 digits, See attached 64KMKB.nb.

Later I found it was accurate only to 54,390 decimal places.

Attachments:

Here is proof of the faster integral I'm using is indeed exactly equal to the MKB constant integral. In the following hypothesis, the MKB constant integral=LHS and the faster integral I'm using=RHS.

g(x)=x^(1/x), M1=hypothesis Which is the same as

enter image description here because Changing the upper limit to 2N + 1 increases MI by 2i/π.

by Ariel Gershon.

Iimofg->1

Cauchy's Integral Theorem

Lim surface h gamma r=0

Lim surface h beta r=0

limit to 2n-1

limit to 2n-

Plugging in equations [5] and [6] into equation [2] gives us:

leftright

Now take the limit as N→∞ and apply equations [3] and [4] : QED He went on to note that

enter image description here

I found the 64,000 digit computation was accurate only to 54,390 decimal places; see attached 54390 confirmed MKB digits.nb.

The new recommended setting for MaxRecursion (M.R.), as hypothesized, is found in the following table. It starts out at digits around 2^(M.R.+1).

       digits    M.R.   
      1309  default
      2410      10
      4453      11    
      8182      12
      19734     13
      31286     14
      54390     15
Attachments:

Today I followed a lots of links about your work on internet. And this is the first time I post in Mathematica community! Since I very interested in your efforts, I wish to become a successful man like you in mathematics so that my name remains eternal ... My dear friend Marvin Ray Burns. Your sincerely, Fereydoon Shekofte

@Fereydoon Shekofte: All it takes to leave a legacy is to keep planting seeds! A million baby steps >a mile.

I found out how to verify my MKB constant calculations beyond any shadow of a doubt. Use one iteration of partial integration, because for g(x)=x^(1/x),

enter image description here.

The following computation will show that the calculation was right by leaving a small error.

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)]) ( Exp[-Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 2410, 
          Method -> "Trapezoidal", MaxRecursion -> 10] + I/Pi)])[[
  1]]; Print["Timing for calculation=", t]; t = (Timing[
    test2 = (1/Pi  NIntegrate[
         g'[1 + I t] Exp[-Pi t], {t, 0, Infinity}, 
         WorkingPrecision -> 2410, Method -> "Trapezoidal", 
         MaxRecursion -> 10] - 2 I/Pi)])[[
  1]]; Print["Timing for verification=", t]; err = 
 test - test2; Print["Error=", N[err, 20]]
(*Timing for calculation=48.0927

Timing for verification=69.4713

Error=-1.*10^-2410-1.03*10^-2408 I*)

The following will show that the calculation was wrong by leaving a large error.

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)]) ( Exp[-Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 2410, 
          Method -> "Trapezoidal", MaxRecursion -> 9] + I/Pi)])[[
  1]]; Print["Timing for calculation=", t]; t = (Timing[
    test2 = (1/Pi  NIntegrate[
         g'[1 + I t] Exp[-Pi t], {t, 0, Infinity}, 
         WorkingPrecision -> 2410, Method -> "Trapezoidal", 
         MaxRecursion -> 9] - 2 I/Pi)])[[
  1]]; Print["Timing for verification=", t]; err = 
 test - test2; Print["Error=", N[err, 20]]

(* Timing for calculation=14.375
Timing for verification=18.7344
Error=-1.21910183828457949*10^-1311-1.6392815749781077289*10^-1309 I*)

The following proves that MaxRecursion -> 12 is good for calculating and verifying at least 8192 digits.

Compute 8192 with MaxRecursion -> 12

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)]) ( Exp[-Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 8192, 
          Method -> "Trapezoidal", MaxRecursion -> 12] + I/Pi)])[[
  1]]; Print["Timing for calculation=", t]
   (*Timing for calculation=1111.69*)

Verify 8192 with MaxRecursion -> 12

g[x_] = x^(1/x); t = (Timing[
    test2 = (1/Pi NIntegrate[g'[1 + I t] Exp[-Pi t], {t, 0, Infinity},
          WorkingPrecision -> 8192, Method -> "Trapezoidal", 
         MaxRecursion -> 12] - 2 I/Pi)])[[
  1]]; Print["Timing for verification=", t]; err = 
 test - test2; Print["Error=", N[err, 20]]
(*Timing for verification=1419.66

Error=0.*10^-8193+0.*10^-8193 I*)

As time allows, I will post what all this parity-check has to say to confirm or unconfirm my latest table of recommended MaxRecursions (M.R.).

       digits    M.R.   
      1309  default
      2410      10
      4453      11    
      8182      12
      19734     13
      31286     14
      54390     15
      65942     16
      77494     17
      89046     18

We see that 4453 11

is confirmed, although the real part converges to a slightly higher magnitude:

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)]) (Exp[-Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 5000, 
          Method -> "Trapezoidal", MaxRecursion -> 11] + 
        I/Pi)])[[1]]; Print["Timing for calculation=", t]; t = \
(Timing[test2 = (1/Pi NIntegrate[
         g'[1 + I t] Exp[-Pi t], {t, 0, Infinity}, 
         WorkingPrecision -> 5000, Method -> "Trapezoidal", 
         MaxRecursion -> 11] - 
       2 I/Pi)])[[1]]; Print["Timing for verification=", t]; err = 
 test - test2; Print["Error=", N[err, 20]]



Timing for calculation=230.391



Timing for verification=299.469

Error=2.8146045128793867*10^-4456+1.6474663184374133246*10^-4453 I

As for MaxRecursion -> 12 where the R.M. table shows up to 8182 digits, r.e.

      8182      12.

Actual inspection from this method shows it is possible to get all the way up to 8278 accurate digits of the real part and 8275 of the imaginary. That is the same difference that exists from it and 35,000 digits computed by a totally different method.

So

      8182      12.

should say

      8275      12.

Here is the work for the verification:

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)]) (Exp[-Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 10000, 
          Method -> "Trapezoidal", MaxRecursion -> 12] + 
        I/Pi)])[[1]]; Print["Timing for calculation=", t]; t = \
(Timing[test2 = (1/Pi NIntegrate[
         g'[1 + I t] Exp[-Pi t], {t, 0, Infinity}, 
         WorkingPrecision -> 10000, Method -> "Trapezoidal", 
         MaxRecursion -> 12] - 
       2 I/Pi)])[[1]]; Print["Timing for verification=", t]; err = 
 test - test2; Print["Error=", N[err, 20]]



Timing for calculation=1764.03



Timing for verification=2247.2

Error=-7.2028204961753149*10^-8278-8.0907462882284574618*10^-8275 I

As for MaxRecursion -> 13 where the R.M. table shows up to 8182 digits, r.e.

      19734      12.

Actual inspection from this method shows it is possible to get all the way up to 15444 accurate digits of the real part and 15442 of the imaginary. That is the same difference that exists from it and 35,000 digits computed by a totally different method.

So

      19734      13

should say

      15442      13.

Here is the work for the verification:

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)]) (Exp[-Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 20000, 
          Method -> "Trapezoidal", MaxRecursion -> 13] + 
        I/Pi)])[[1]]; Print["Timing for calculation=", t]; t = \
(Timing[test2 = (1/Pi NIntegrate[
         g'[1 + I t] Exp[-Pi t], {t, 0, Infinity}, 
         WorkingPrecision -> 20000, Method -> "Trapezoidal", 
         MaxRecursion -> 13] - 
       2 I/Pi)])[[1]]; Print["Timing for verification=", t]; err = 
 test - test2; Print["Error=", N[err, 20]]



Timing for calculation=11440.4



Timing for verification=14435.1

Error=1.269166151550935283*10^-15444-1.34038091454473637998*10^-15442 I

Through actual inspection the next row is

           28932   14.

More to come. But so far through actual inspection, we have the following.

        digits    M.R.   
       1309  default
       2410      10
       4453      11   
       8275      12
       15442     13
       28932     14

So far, the table gives a clear-cut pattern:

            digits     M.R.
1309*1.84 ~=2410         10 
2410*1.85~=4453          11
4453*1.86~=8275          12
8275*1.87~=15442         13
15442*1.875~= 28932      14

Following the growth with an eye on our experience were we proved the next row is

               54286          15

we get

            digits         M.R.

 28932*1.88~=54286          15
54286*1.89~=102600          16

March 30, 2021

I finally computed 40,000 digits of the MKB constant!!!!!

(March 30, 2021, approximately 8:00 am) The new 40,000 digit record took 362945 seconds, while the 35,000 digits old record took 727,844 seconds. That's more 2.29 times as fast: (40000/362945)/(35000/727844.) = 2.291867126660277. See attached first 40 K MKB.nb and 35KMKB (1).nb

Here is the short, very fast code.

g[x_] = x^(1/x); t = (Timing[
    test = -(I NIntegrate[(g[(1 + t I)])/(Exp[Pi t]), {t, 0, 
           Infinity}, WorkingPrecision -> 40000, 
          Method -> "Trapezoidal", MaxRecursion -> 18] + I/Pi)])[[1]];
t

The recommended setting for MaxRecursion (M.R.) is found in the following table.

digits     M.R.
2048      10
3000      11
4096      12

10000     13
40000     18

40000/2048+9 Here are the new speed records

digits       seconds
2000        23
3000        96
4000       165
5000        442
6000        623
10000      3250
40000      362945=101 hours

Documentation is available from the Wolfram Cloud here. (40,000 digits are saved at the bottom by the name of "test.") Here is a redo of the 10K run, where "test" is 40,000 digits of which 35,000 have been computed by very different methods.

 g[x_] =  x^(1/x); t = (Timing[ t10k = -(I NIntegrate[(g[(1 + t I)])/(Exp[Pi t]), {t, 0,  Infinity}, WorkingPrecision -> 10000,  Method -> "Trapezoidal", MaxRecursion -> 13] + I/Pi)])[[1]];t


 (*3250.55*)

 N[test - t10k, 10000]

  (* 0.*10^-10001 + 0.*10^-10001 I*)

"Thu 1 Apr 2021 11:42:14" I computed a much faster 40,000 digits of the MKB constant.

g[x_] = x^(1/x); t = (Timing[
test3 = -(I NIntegrate[(g[(1 + t I)])/(Exp[Pi t]), {t, 0, 
Infinity}, WorkingPrecision -> 40000, 
Method -> "Trapezoidal", MaxRecursion -> 15] + I/Pi)])[[1]];

175,551seconds That's more 473% as fast as the old 35,000 digit record!!!: (40000/175551)/(35000/727844.)=4.738347911921403

Here are the new speed records

digits       seconds
2000        23
3000        96
4000       165
5000        442
6000        623
10000      3250
40000      175551=49  hours

I made a quicker program for calculating the digits of the MKB constant in V12.1.0 enter image description here

Module[{$MaxExtraPrecision = 200, sinplus1, cosplus1, middle, end, a, 
  b, c, d, g, h}, prec = 5000; f[x_] = x^(1/x);
  Print[DateString[]];
  Print[T0 = SessionTime[]];

   d = Ceiling[0.264086 + 0.00143657 prec];
  h[n_] := 
    Sum[StirlingS1[n, k]*
        Sum[(-j)^(k - j)*Binomial[k, j], {j, 0, k}], {k, 1, n}];
  h[0] = 1;
  g = 2 I/Pi - Sum[-I^(n + 1) h[n]/Pi^(n + 1), {n, 1, d}];
  sinplus1 := Module[{},
     NIntegrate[
       Simplify[Sin[Pi*x]*D[f[x], {x, d + 1}]], {x, 1, Infinity}, 
       WorkingPrecision -> prec*(105/100), 
       PrecisionGoal -> prec*(105/100)]];
  cosplus1 := Module[{},
     NIntegrate[
       Simplify[Cos[Pi*x]*D[f[x], {x, d + 1}]], {x, 1, Infinity}, 
       WorkingPrecision -> prec*(105/100), 
       PrecisionGoal -> prec*(105/100)]];
  middle := Module[{}, Print[SessionTime[] - T0, " seconds"]];
  end := Module[{}, Print[SessionTime[] - T0, " seconds"];
      Print[N[Sqrt[a^2 - b^2], prec]]; Print[DateString[]]];
  If[Mod[d, 4] == 0, 
    Print[N[a = -Re[g] - (1/Pi)^(d + 1)*sinplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] - (1/Pi)^(d + 1)*cosplus1), prec]];
    end];
  If[Mod[d, 4] == 1, 
    Print[N[a = -Re[g] - (1/Pi)^(d + 1)*cosplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] + (1/Pi)^(d + 1)*sinplus1), prec]]; end];
  If[Mod[d, 4] == 2, 
    Print[N[a = -Re[g] + (1/Pi)^(d + 1)*sinplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] + (1/Pi)^(d + 1)*cosplus1), prec]];
    end];
  If[Mod[d, 4] == 3, 
    Print[N[a = -Re[g] + (1/Pi)^(d + 1)*cosplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] - (1/Pi)^(d + 1)*sinplus1), prec]];
    end];]

Whether it will allow me to calculate more digits is a question that will be answered in a week or two.

Here is a comparison of timings on similar computers.

 digits    seconds

                                              (Impoved code)
             V10.3       v11.3   V12.0         V12.1 
 2000       256            67      67           58
 3000       794           217     211          186
 4000       1633          514     492          447
 5000       2858          1005    925          854
 10000      17678         8327    7748        7470
 20000      121431       71000   66177
 30000      411848      ?        229560

Seethe following cloud notebook for the results from my improved code. https://www.wolframcloud.com/obj/bmmmburns/Published/2nd%2040k%20mkb%20prep.nb

Here is a comparison between some of the last few versions of Mathematica computing the MKB constant on similar computers.

digits    seconds
            V10.3       v11.3   V12.0
2000       256            67      67
3000       794           217     211
4000       1633          514     492
5000       2858          1005    925
10000      17678         8327    7748
20000      121431       71000   66177
30000      411848      ?        229560

For documentation of the 229560 seconds 30000 digit computation see "mkb 30k v12p0 2020.nb."

For documentation of the 411848 seconds 30000 digit computation see "MKB30K2 (1).nb."

Shutterstock has found the MKB constant, I(2N), at least 2 times! enter image description here enter image description here

enter image description here

June 5, 2018

Mathematica got hung up on the 40k run again! this time it complained about the dynamics stopping working and wouldn't quit complaining. I think it needs a smarter program! Anyone else want to try to beat this world record??

My computer is getting so sluggish that it has become nearly impossible to get snippets of RAM use! I was able to determine that it is, however, still working on the 40,000 digits. I'll let it do its job!

You might get tired of hearing this, but I made another improvement to my MKB computation formula and am trying to get 40,000 digits from it.

Code

 MaxMemoryUsed[(*Other program:For large calculations.Tested for \
 1000-35000 digits-- see post at \
 http://community.wolfram.com/groups/-/m/t/366628?p_p_auth=KA7y1gD4 \
 and search for "analog" to find pertinent replies.Designed to include \
 40000 digits.A157852 is saved as c,the real part as a and the \
 imaginary part as b.*)
  Block[{$MaxExtraPrecision = 200}, 
   prec = 40000(*Replace 40000 with number of desired digits.40000 \
 digits should take two weeks on a 3.5 GH Pentium processor.*);
   f[x_] = x^(1/x);
   ClearAll[a, b, h];
   Print[DateString[]];
   Print[T0 = SessionTime[]];
   If[prec > 35000, d = Ceiling[0.264086 + 0.0019 prec], 
    d = Ceiling[0.264086 + 0.00143657 prec]];
   h[n_] := 
    Sum[StirlingS1[n, k]*
      Sum[(-j)^(k - j)*Binomial[k, j], {j, 0, k}], {k, 1, n}];
   h[0] = 1;
   g = 2 I/Pi - Sum[-I^(n + 1) h[n]/Pi^(n + 1), {n, 1, d}];
   sinplus1 := 
    NIntegrate[
     Simplify[Sin[Pi*x]*Simplify[D[f[x], {x, d + 1}]]], {x, 1, 
      Infinity}, WorkingPrecision -> prec*(105/100), 
     PrecisionGoal -> prec*(105/100)];
   cosplus1 := 
    NIntegrate[
     Simplify[Cos[Pi*x]*Simplify[D[f[x], {x, d + 1}]]], {x, 1, 
      Infinity}, WorkingPrecision -> prec*(105/100), 
     PrecisionGoal -> prec*(105/100)];
   middle := Print[SessionTime[] - T0, " seconds"];
   end := Module[{}, Print[SessionTime[] - T0, " seconds"];
     Print[c = Abs[a + b]]; Print[DateString[]]];
   If[Mod[d, 4] == 0, 
    Print[N[a = -Re[g] - (1/Pi)^(d + 1)*sinplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] - (1/Pi)^(d + 1)*cosplus1), prec]];
    end];
   If[Mod[d, 4] == 1, 
    Print[N[a = -Re[g] - (1/Pi)^(d + 1)*cosplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] + (1/Pi)^(d + 1)*sinplus1), prec]]; end];
   If[Mod[d, 4] == 2, 
    Print[N[a = -Re[g] + (1/Pi)^(d + 1)*sinplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] + (1/Pi)^(d + 1)*cosplus1), prec]];
    end];
   If[Mod[d, 4] == 3, 
    Print[N[a = -Re[g] + (1/Pi)^(d + 1)*cosplus1, prec]];
    middle;
    Print[N[b = -I (Im[g] - (1/Pi)^(d + 1)*sinplus1), prec]];
    end];] (*Marvin Ray Burns,Aug 06 2015*)]

Output so far:

Fri 18 May 2018 08:03:35

65.6633081

Here are the results from the task manager:

enter image description here

I got substantial improvement in calculating the digits of MKB by using V11.3 in May 2018, my new computer (processor Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz, 3601 MHz, 4 Core(s), 8 Logical Processor(s) with 16 GB 2400 MH DDR4 RAM):

Digits  Seconds
2000    67.5503022
3000    217.096312
4000    514.48334
5000    1005.936397
10000   8327.18526
 20000 2*35630.379241 ~71000

They are found in the attached 2018 quad MKB.nb.

They are twice as fast,(or more) as my old records with the same program using Mathematica 10.2 in July 2015 on my old big computer (a six core Intel(R) Core(TM) i7-3930K CPU @ 3.20 GHz 3.20 GHz with 64 GB of 1066 MHz DDR3 RAM):

digits          seconds

2000    256.3853590 
3000    794.4361122
4000       1633.5822870
5000        2858.9390025
10000      17678.7446323 
20000      121431.1895170
40000       I got error msg
Attachments:
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard