Fractals/Computer graphic techniques/2D/plane

From Wikibooks, open books for an open world
Jump to: navigation, search

Coordinate[edit]

There are different 2D coordinate systems :[1]

  • cartesian coordinates ( rectangular, orthogonal)
  • elliptic coordinate ( Curvilinear )
  • parabolic
  • polar
  • Bipolar coordinates

Viewport = part of the plane[edit]

A viewport is a polygon viewing region in computer graphics.[2]

Types[edit]

  • world coordinates ( with floating point valuese )
  • screen coordinates ( with integer values ) used for pixels of the screen or bitmap or array

Relation between these 2 types creates new items :

  • pixel size ( pixel spacing ) related with zoom
  • mapping ( converting) between screen and integer coordinates[3][4]
  • clipping
  • rasterisation

parameter files[edit]

Parameters can be read from both parameter and image files :[5]

Reading parameters[edit]

/*
  from  gui main.c
  https://gitorious.org/maximus/book/source/47ce485c4266b3d5fc62f685f001ce7606ce426f:
  by 
  http://mathr.co.uk/blog/

  loads txt file with parameters
  http://qualapps.blogspot.com/2009/01/unicode-bom-handling-in-c-run-time.html
  http://www.joelonsoftware.com/articles/Unicode.html
  http://programmers.stackexchange.com/questions/102205/should-utf-16-be-considered-harmful
  http://utf8everywhere.org/
  http://www.codeguru.com/cpp/misc/misc/multi-lingualsupport/article.php/c10451/The-Basics-of-UTF8.htm
  http://stackoverflow.com/questions/2113270/how-to-read-unicode-utf-8-binary-file-line-by-line
  http://www.cl.cam.ac.uk/~mgk25/unicode.html

  gcc l.c -lmpfr -lgmp -Wall

*/
#include <stdio.h>
#include <stdlib.h> // malloc
#include <string.h> // strncmp
#include <ctype.h> // isascii
#include <mpfr.h>

struct view {
  mpfr_t cx, cy, radius, pixel_spacing;
};

static struct view *view_new() {
  struct view *v = malloc(sizeof(struct view));
  mpfr_init2(v->cx, 53);
  mpfr_init2(v->cy, 53);
  mpfr_init2(v->radius, 53);
  mpfr_init2(v->pixel_spacing, 53);
  return v;
}

static void view_delete(struct view *v) {
  mpfr_clear(v->cx);
  mpfr_clear(v->cy);
  mpfr_clear(v->radius);
  mpfr_clear(v->pixel_spacing);
  free(v);
}

//http://stackoverflow.com/questions/5457608/how-to-remove-a-character-from-a-string-in-c?rq=1
// Fabio Cabral
void removeChar(char *str, char garbage) {

    char *src, *dst;
    for (src = dst = str; *src != '\0'; src++) {
        *dst = *src;
        if (*dst != garbage) dst++;
    }
    *dst = '\0';
}

// https://en.wikipedia.org/wiki/Serialization
// read data from file 
static int deserialize(const char *filename) {

  // open file in a text mode 
  FILE *in = fopen(filename, "r");

  if (in) {
    printf( "file %s opened\n", filename);
    char *line = 0;
    size_t linelen = 0;
    ssize_t readlen = 0; // bytes_read = length of the line 
    
    // read line 
    while (-1 != (readlen = getline(&line, &linelen, in)))     
      {
        // 
	if (readlen && line[readlen-1] == '\n') { 
	  line[readlen - 1] = 0; }

	// remove BOM 
        while  (! isascii(line[0])) 
               {printf(" removed non-printing char = %c ( non -ASCII char ) = %3d  (signed 8 bit) = %u (unsigned 8 bit) =  0x%.2X (hexadecimal) \n", line[0], line[0], (unsigned char) line[0], (unsigned char) line[0]);
                removeChar(line,line[0]);
                }
                
       
	// size 
	if (0 == strncmp(line, "size ", 5)) 
	  {

	    printf( "size line found :");
    
	    int w = 0, h = 0;
	    sscanf(line + 5, "%d %d\n", &w, &h);
	    printf( "size of image in pixels : width = %d   ; height = %d \n", w,h);
	    // resize_image(w, h); // FIXME TODO make this work...
	  } 
         
        //  view
        else if (0 == strncmp(line, "view ", 5)) 
	  {
	    printf( "view line found : \n");
	    int p = 53;
	    char *xs = malloc(readlen);   
	    char *ys = malloc(readlen);
	    char *rs = malloc(readlen);
	    sscanf(line + 5, "%d %s %s %s", &p, xs, ys, rs);

	    struct view *v = view_new();
	    mpfr_set_prec(v->cx, p);
	    mpfr_set_prec(v->cy, p);
	    mpfr_set_str(v->cx, xs, 0, GMP_RNDN);
	    mpfr_set_str(v->cy, ys, 0, GMP_RNDN);
	    mpfr_set_str(v->radius, rs, 0, GMP_RNDN);
	    //
	    printf ("precision p  =  %d\n", p);
	    printf ("center =  ");
	    mpfr_out_str (stdout, 10, p, v->cx, MPFR_RNDD);
	    printf (" ; ");
	    mpfr_out_str (stdout, 10, p, v->cy, MPFR_RNDD);
	    putchar ('\n');

	    printf ("radius =  ");
	    mpfr_out_str (stdout, 10, p, v->radius, MPFR_RNDD);
	    putchar ('\n');

	    free(xs);
	    free(ys);
	    free(rs);
	    view_delete(v);
        
	  } 
         
	else if (0 == strncmp(line, "ray_out ", 8)) 
	  {
	    printf( "ray_out line found :\n");
	    int p = 53;
	    char *xs = malloc(readlen);
	    char *ys = malloc(readlen);
	    sscanf(line + 8, "%d %s %s", &p, xs, ys);
	    mpfr_t cx, cy;
	    mpfr_init2(cx, p);
	    mpfr_init2(cy, p);
	    mpfr_set_str(cx, xs, 0, GMP_RNDN);
	    mpfr_set_str(cy, ys, 0, GMP_RNDN);
	    free(xs);
	    free(ys);
           
	    mpfr_clear(cx);
	    mpfr_clear(cy);
	  } 
        
        else if (0 == strncmp(line, "ray_in ", 7)) {
	  printf( "ray_in line found : \n");
	  int depth = 1000;
	  char *as = malloc(readlen);
	  sscanf(line + 7, "%d %s", &depth, as);
        
	  free(as);
	} 
      
	else if (0 == strncmp(line, "text ", 20)) {
	  printf( "text line found : \n");
	  //int p = 53;
	  char *xs= malloc(readlen);
	  char *ys = malloc(readlen);
	  char *ss = malloc(readlen);
	  sscanf(line + 20, "%s %s %s \n", xs, ys, ss);
        
       
	  free(xs);
	  free(ys);
	  free(ss);
	}

      
	else if (0 == strncmp(line, "//", 2 )) {
	  printf( "line of comment found : %s\n", line );
        
        }
	else printf( "not-known line found ! Maybe line with BOM ? \n");

      } // while

    free(line);
    fclose(in);
    printf( "file %s closed\n", filename);
    return 0;} 
 
  // if (in)
  else {
    printf( "file %s not opened = error !\n", filename);  
    return 1;}
}

int main (int argc, const char* argv[]) 
{

  if (argc != 2) {
    fprintf(stderr, "program opens text file \n");
    fprintf(stderr, "program input : text file with parameters \n");
    fprintf(stderr, "usage: %s filename\n", argv[0]);
    return 1;
  }

  deserialize(argv[1]);

  return 0;
}

Description[edit]

Rectangle part of 2D plane can be described by :

  • corners ( 4 real numbers or 2 complex numbers = 2D points)
  • center and :
    • width ( 3 real numbers )
    • magnification
    • radius

"People specify fractal coordinates in many ways. Some people use the coordinates of the upper-left and lower-right visible points, specifying the coordinates as four numbers x1, y1, x2, y2. To set the same viewpoint in XaoS, set the real portion of the center to (x1+x2)/2, the imaginary part of center to (y1+y2)/2, and the radius to the greater of x2-x1 and y2-y1." ( from Xaos doc[6] )

Corners[edit]

Standard description in Fractint, Ultra Fractal, ChaosPro and Fractal Explorer are corners. For example initial plane for Mandelbrot set is

 Corners:                X                     Y
 Top-l          -2.5000000000000000    1.5000000000000000
 Bot-r           1.5000000000000000   -1.5000000000000000
 Ctr -0.5000000000000000   0.0000000000000000  Mag 6.66666667e-01
 X-Mag-Factor     1.0000   Rotation    0.000   Skew    0.000

Display window of parameter plane has :

  • a horizontal width of 4 (real)
  • a vertical width (height) of 3 (imag)
  • an aspect ratio (proportion) 4/3 ( also in pixels 640/480 so ther is no distorsion)
  • center z=-0.5

See demo par file :

Mandel_Demo        { ; PAR for initialization of Fractint demo
  reset=1900 type=mandel corners=-2.5/1.5/-1.5/1.5 params=0/0 inside=0
  sound=no
  }

For julia set/ dynamic plane has :

Corners:                X                     Y
Top-l          -2.0000000000000000    1.5000000000000000
Bot-r           2.0000000000000000   -1.5000000000000000
Ctr  0.0000000000000000   0.0000000000000000  Mag 6.66666667e-01
X-Mag-Factor     1.0000   Rotation    0.000   Skew    0.000

Description from documentation of Fractint :

CORNERS=[xmin/xmax/ymin/ymax[/x3rd/y3rd]]

Example: corners=-0.739/-0.736/0.288/0.291

Begin with these coordinates as the range of x and y coordinates, rather than the default values of (for type=mandel) -2.0/2.0/-1.5/1.5. When you specify four values (the usual case), this defines a rectangle: x- coordinates are mapped to the screen, left to right, from xmin to xmax, y-coordinates are mapped to the screen, bottom to top, from ymin to ymax. Six parameters can be used to describe any rotated or stretched parallelogram: (xmin,ymax) are the coordinates used for the top-left corner of the screen, (xmax,ymin) for the bottom-right corner, and (x3rd,y3rd) for the bottom-left. Entering just "CORNERS=" tells Fractint to use this form (the default mode) rather than CENTER-MAG (see below) when saving parameters with the [B] command.


Center and ...[edit]

 "If you use the center, you can change the zoom level and the plot zooms in/out smoothly on the same center point. " Duncan C). 

magnification[edit]

Fractint uses Mag ( compare with Xmagfactor)

 CENTER-MAG=[Xctr/Yctr/Mag[/Xmagfactor/Rotation/Skew]]

This is an alternative way to enter corners as a center point and a magnification that is popular with some fractal programs and publications. Entering just "CENTER-MAG=" tells Fractint to use this form rather than CORNERS (see above) when saving parameters with the [B] command. The [TAB] status display shows the "corners" in both forms. When you specify three values (the usual case), this defines a rectangle: (Xctr, Yctr) specifies the coordinates of the center of the image.

Mag indicates the amount of magnification to use. Initial value ( no zoom ) is 6.66666667e-01.

Six parameters can be used to describe any rotated or stretched parallelogram: Xmagfactor tells how many times bigger the x- magnification is than the y-magnification,

Rotation indicates how many degrees the image has been turned.

Skew tells how many degrees the image is leaning over. Positive angles will rotate and skew the image counter-clockwise.

Parameters can be saved to parmfile called fractint.par

width[edit]

Wolf Jung uses center and width in Mandel:

/* 
   from mndlbrot.cpp  by Wolf Jung (C) 201
   These classes are part of Mandel 5.7, which is free software; you can
   redistribute and / or modify them under the terms of the GNU General
   Public License as published by the Free Software Foundation; either
   version 3, or (at your option) any later version. In short: there is
   no warranty of any kind; you must redistribute the source code as well
*/
void mndlbrot::startPlane(int sg, double &xmid, double &rewidth) const
{  if (sg > 0) 
     { xmid = -0.5; rewidth = 1.6; } // parameter plane
     else { xmid = 0; rewidth = 2.0; } // dynamic plane

width and height[edit]

to describe plane ( view ) Xaos uses:

  • 4 numbers in scripts
  • 3 numbers in menu

Xaos uses to call it "radius" but it is defind as : the greater of (x2-x1= width) and y2-y1=height."

radius[edit]

Claude Heiland-Allen[7] use center and radius for parameter plane of complex quadratic polynomial:

Radius is defined as "the difference in imaginary coordinate between the center and the top of the axis-aligned view rectangle".

view="-0.75 0 1.5" # standard view of parameter plane : center_re, center_im, radius

  // modified code using center and radius to scan the plane 
  int height = 720;
  int width = 1280;
  double dWidth;
  double dRadius = 1.5;
  double complex center= -0.75*I;
  double complex c;
  int i,j;

  double width2; // = width/2.0
  double height2; // = height/2.0
  
  width2 = width /2.0;
  height2 = height/2.0;

complex double coordinate(int i, int j, int width, int height, complex double center, double radius) {
  double x = (i - width /2.0) / (height/2.0);
  double y = (j - height/2.0) / (height/2.0);
  complex double c = center + radius * (x - I * y);
  return c;
}

for ( j = 0; j < height; ++j) {
    for ( i = 0; i < width; ++i) {
      c = coordinate(i, j, width, height, center, dRadius);
      // do smth 
       }
     }

The same in GLSL ( for Shadertoy) :

 
vec2 GiveCoordinate(vec2 center, float radius, vec2 fragCoord, vec3 iResolution)
{
 
  // from pixel to world coordinate   
  // now point (0,0) is left bottom
  // point (iResolution.x, iResolution.y) is right top   
  float x = (fragCoord.x -  iResolution.x/2.0)/ (iResolution.y/2.0);
  float y = (fragCoord.y -  iResolution.y/2.0)/ (iResolution.y/2.0);
  vec2 c = vec2(center.x + radius*x, center.y + radius*y) ;  
  return c ; 
}

Orientation[edit]

Check orientation of the plane by marking first quadrant of Cartesian plane :

if (x>0 && y>0) Color=MaxColor-Color;

It should be in upper right position.

Display Aspect ratio[edit]

The aspect ratio, or more precisely the Display Aspect Ratio (DAR)[8] – the aspect ratio of the image as displayed. For TV:

  • for TV DAR as traditionally 4:3 (a.k.a. Fullscreen)
  • now is 16:9 (a.k.a. Widescreen) now the standard for HDTV

Optimisation[edit]

Quallity[edit]

Scanning[edit]

See :

  • Fractint Drawing Methods[12]
  • Fratal Witchcraft drawing methods by Steven Stoft[13]
  • AlmondBread algorithms [14]
  • rugh set method [15]
  • cell mapping based on interval arithmetic with label propagation in graphs to avoid function iteration and rounding errors [16]

All the pixels[edit]

Scan the plane :

  • all pixels ( plane is scaned pixel by pixel )
  • the same pixel size

Here in Lisp

; common lisp. Here float values can be used,  there is no mapping
(loop for y from -1.5 to 1.5 by 0.1 do
      (loop for x from -2.5 to 0.5 by 0.05 do
            (princ (code-char 42))) ; print char
      (format t "~%")) ; new line

and in C

/* c */
/* screen coordinate = coordinate of pixels */      
int iX, iY, 
iXmin=0, iXmax=1000,
iYmin=0, iYmax=1000,
iWidth=iXmax-iXmin+1,
iHeight=iYmax-iYmin+1;

/* world ( double) coordinate = parameter plane*/
const double ZxMin=-5;
const double ZxMax=5;
const double ZyMin=-5;
const double ZyMax=5;

/* */
double PixelWidth=(ZxMax-ZxMin)/iWidth;
double PixelHeight=(ZyMax-ZyMin)/iHeight;
double Zx, Zy,    /* Z=Zx+Zy*i   */
       Z0x, Z0y,  /* Z0 = Z0x + Z0y*i */

 for(iY=0;iY<iYmax;++iY)
      { Z0y=ZyMin + iY*PixelHeight; /* mapping from screen to world; reverse Y  axis */
        if (fabs(Z0y)<PixelHeight/2) Z0y=0.0; /* Zy = 0 is a special value  */    
        for(iX=0;iX<iXmax;++iX)
         {    /* initial value of orbit Z0 */
           Z0x=ZxMin + iX*PixelWidth;
          }
      }

Plane transformations[edit]

Examples:

Conformal map[edit]

Conformal map

cylindrical projection[edit]

The geometry for the normal (equatorial) tangent projections of the sphere to the cylinder.

Cylindrical projection ( or cylindric p. ) maps from sphere ( without poles) to cylinder [23][24]

Joukowsky transformation (map)[edit]

Description :

Mercator map[edit]

  • "the exponential map[26]
  • (aka log polar or mercator projection)" [27]
  • side scrolling ( side scrolling fractal zoom = logarithmic projection for this location, that gives this interesting side-scrolling plane[28]


" it is a log map toward the target point (or, as some might say, a Mercator projection with the target point as South pole and complex ∞ as North pole); horizontally it is periodic and I have placed two periods side to side, whereas vertically it extends to infinity at the top and at the bottom, which corresponds to zooming infinitely far out or in, at a factor of exp(2π)≈535.5 for every size of a horizontal period. Horizontal lines (“parallels”) on the log map correspond to concentric circles around the target point, and vertical lines to radii emanating from it; and the anamorphosis preserves angles." David Madore [29]

" The idea is to focus on a point in or near the Mandelbrot set, and create an image where one direction is the logarithm of the distance and the other one the angle. The result is very much like the astro-ph/031571 map[30] and theXKCD cartoon versions.[31] This map projection is conformal, so it does not distort local angles, and objects are usually recognizable on all scales." Anders Sandberg[32]

Exponential map by R Munafo [33]

Zoom[edit]

Mandelbrot zoom created using Double-double precision

Zoom can be used for making :


Notation[edit]

If you want to zoom [34]

baseSize // constant value =  extend in real and imaginary axis when zoomLevel is zero.
zoomLevel // inital value = 0.0
zoomFactor = 2^(-zoomLevel) // initial value = 1.0 = no zoom
sizeX = zoomFactor * baseSize
sizeY = zoomFactor * baseSize   
minImaginary = centerY - sizeY/2
maxImaginary = centerY + sizeY/2

Note that base of zoom factor is important when one wants to optimize zooming by using previosly computed pixels.

Usually other notation is used :

baseSize // constant value =  extend in real and imaginary axis when zoomLevel is zero.
zoomLevel // inital value = 0.0
zoomFactor = 10^zoomLevel // initial value = 1.0 = no zoom
sizeX =  baseSize / zoomFactor
sizeY = baseSize / zoomFactor   
minImaginary = centerY - sizeY/2
maxImaginary = centerY + sizeY/2

" Some programs use a power of 2, others use scientific notation. " Dinkydau[35]

magnification = 2^(6901.591) = 3.8539742140068607747447368372813E2077 = 3.8539742140068607747447368372813 *10^(2077)

Pixel size[edit]

Pixel size ( = pixel spacing ) is size of a pixel in a world coordinate. For linear scale and same resolution on both axes :

iSize = iXmax - iXmin ; // width of image in pixels ( integer or screen ) coordinate ; pixels are numbered from iXmin to iXmax; image is rectangular
fSize = CxMax-CxMin // width of image in world ( floating point ) coordinate
PixelWidth = fWidth / iWidth
PixelSize = PixelWidth //
n = Zoom exponent mag = Zoom level [36] Image size in pixels = iSize Image size = fSize PixelSize Decimal digits Binary digits ( precision) radius=fSize/2 = 1/mag
-1 6.66666667e-01 1000 3 0.003 1.5
0 1 = 10^0 = 1.0e0 1000 2.0 0.002 1.0
1 10 = 10^1 =1.0e1 1000 0.2 0.0002 0.1
2 100 = 10^2 = 1.0e2 1000 0.02 0.00002 5 17 0.01
3 1000 = 10^3 = 1.0e3 1000 0.002 0.0000002 6 21 0.001
6 4.42685e+06 = 4.42685*10^6 1000 9 31 0.0000002259
275 2.1*10^{275} = 2.1E275[37] 1000 1.42857142857143*10^{−275} 1.42857142857143*10^{−278} 278 945
2167 1E2167 [38]
n (integer) 10^n iSize (integer) fSize (float) fSize/iSize n+3 (int) 3.4*(n+3) 1/10^n

See also

Maximal zoom[edit]

Maximal zoom factor is :[39]fractalforums : world-record-list-for-deepest-mandelbrot-set-zooms

Maximal zoom is correlated with :

  • precision of number types used for calulations ( single , double, Quadruple precision, multiple-precision (MP) )[47][48]
  • algorithm

Examples[edit]

  • zoom factor for video [49]
  • zoom factor [50]

6 digit exponent kfr file :

Re: -1.969999999999999999999999500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044444444444444442500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000888888888888888849999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999985558904385344834771505275651707439802865308625791427443330961424759071132026487611725176264409179094371281850286917113438299607250345961577776834040923418908323026521472445909620858907123597235796408061112104829389940797357874496983072043361108596678210974101878393833827418203432405591364236464787429443641257262703233829708680476060811818760620304393061558477441803118145519512712850807566279570982844029857325012390628223820360647668258979076878684876647933586691713418555532475943107252624200201117843719319820237728998593220523307985638092826578745883973127945927157612941938540015256558401195389678117288287397954612998659030207519813423887132712433819261169972772109298067248142796946316866058705100737291082807732095780363111450962562079343267811026882573773838496354793320890782640137461142545117708557513660123589001765439851301061094284884073872304237195847405038005997916591772916801905082054713397900347613229812291688379250141337124483592142677167759937799724482826240221889739279958281387305077421373442560239347202548791629370436510861766534283034830864202589150790498977762019504612520470291818352127457836252110336681517705646757068214279824414070539845047517881325284445105964433809260929122239079255918050121522567706631653911648302323533032796630424689525041771421189344380663874187111827069219478298972709421970875259345351121772972763711300102377202567065857955166255382971315211364712616117490303659492346664699018178318939757282423285371419009411046932917234193893334665566266785697167816732950698816207380676919643208737887466548010135906739886544713279474928795412102775844198236983538952116177572951846686666838710699356689377027797001679815018717734895955459486519200023892202323950681805587335167522359330529504205704173643728542575939560971003828113414526575698691129913732523179898217263233958272455436065981398234469378945169211884323238864150274383804877177363999128588151852524167091429287041721025781683195854402987013151539494179399942070837954379868376840304888688772765756982699182853138606096541810368147055220824642167733332303582065232935654904610976025447375850499155271416448037119335456498101873572643058254202148340375698512466253592187450582122935077431697860989751811390714543361724501922749992620211615207824676015180582730553959840651139843421035606530577579627221149308688499239538520850669705730802199362914890392484987366398502414839833002615237785583223205982959803213057392452492444570671293110192112628484057810441703143510704776618655644961976376486110509949468576332171857800004992255214187488106696999616707095508061688644448279603573729548836033166545152382901162649601621009428189024506407699118649361854191603773830467488600581754708749268095852138506034949378773506443393440803256815965231705352182103270841293849407847256209685909063442084968629626050493523740044367584647354733330733201886384557202550779228150071883759512098387139686791273430372152469077730356448931352901442934397313678206485488089038031559756274753485567710813955833606770855720706196838771470938910908698532296697075505629765211317732309642929200848253115453715519095360291650558263546657700594297282688272931980087817921028872169220070484758986258096893709470275898807497564082388667827593977231276475362448139673585412809085835999057626324011810294730524472342254184569960282056932478213459839187121464715687750979519878378045237141799100520648918440329972154768619953890771396009950175016356138123681101882539729612320558413663614516713121630753111516303841536456381862433680231189868485943613039797718554772363141148082576869418438958750452702067515593162420481256139742479361001496625729979989089377253158806465024220779668583944294303870806659181673829986627090636542251875629589916899941848209672671045724817008164386353261418631685581296776980135457053473718269426328964433431478918128701265984073674542237678019741053258785245067204928655062690633097511442536901606964744364196960574324386766699580335133068626311391039126820922829796539859853411080618303860860057538031553134255915065923937927045926771828525954278276684590563789319705847559933001711413840794336600157070833908901689037859022137314849062429600559669422396503674701098657614222932328685977207277143647835445450417824135858666269188707690893051470627679883286904223397921136136673069224709204350315685597894582723043021170927474667714447137680689308675684752590834294599557673541163836317508705607713632802798429207830173231228087551747640958065947319439597887948529189830925626640983133201799873635739206551689905383544027408432426082542348965096949157921000491329985834964774948023045393549512970539353978631358468055061643855163566851279071675110476764157300818187513164251315640000698245669237831820962341772927741462811166679365663197323136591321939695795739948296864670293972288303376281361084057344297754458199654675573645921740187145765892152117631219302872511560222135959665376760094692988962486691135567998831217155451304965341744173935633224289433218234954746731425936634411159797941353987937950408547423884928840768440563453840720004031091301723799472025522686279006929262345092652600581501445367899408505734780548543316738674260694948294575653613247380456688822407909862767635228542281574737898867330723414431353782719167510227554182256585078371561789747487230067836236977749636584233250458178192468987743364578352524422580329033955267457304208336224024322343836577262804210802775901746934268221802580965044033030479280393175706978505685538989674975496260209452837879467695285617415246137694103102860584180883211574599444913353833191871119505872205785075821643062462889807565550953172318779304671952081496886684731463331182210356388785320321977615389968866606662673808808264116774869449821694808441317863649224859211226916536352800891777852790370687469173046632377128624916245072114886631384896198653303388341318262987366628704090734846189559172364496743524465836799969383744411957909954305668866632666405202460226018627502660043388731337465118432775062294109313129324473785489633918313148332192343256104670375455222957965333141703352141063062752389337808342993008194894379868308449749652585383821305576503015658255201326388491305917456674216683899077908060449975833800009486347392453355295497299514087922932359253685270609120589538696424367350237474405726278497541869838932956655993714345595406395932728547009897897097186807352575441023993722290203007098450571054809132384046341900100145489935206375093504105532859337515328816559147891424874837812735422909772532239615471107018521842796747743855341509649561219500460160078339567490600908156741182993381727620918400454614198343399029523031858701248033052622491512165318168354810369959035820781834020199391017900459768547370951957858304385841448599969769224052954661037107249792291040467587252375724592079831876879638414307038611249988415473951042938197277935416753092555994198258733592141066213337908564695911116588914258608588778382343843294332507640004064705272976039166424356231376750870729766313261635178581307416279828163081986597331129963962555801212215114693170725051596042307512320888684903997682000631197751484235940993075543657985344441676681136860888602750220710865500685856834436831075411956579208324104949314038696655635273977916425893794643507872624838776080455963266584552053552017236381872000311360433784324503565454279491532062790406488712498363467185797956518194962526100949598005551487908350789332935816112311229826990923114667492518918898100027317749615260728552745073530888418256667222997623641487798880531433736095822410113120469546512627339094480635124844516197597588535770217195820574871099848717761477292684356847502585706527779641027889139095997490032922647805534168871809839295839342472118271109577169644749827913877081306392865629243362449240641601575604137322821435548154814797344862266693124102466565867577640865888761673667512822066707083400878369052714329277949797938926216265068213081838167422043232670569339134561882613098571047815188607708462425941527872911244147033627854514301373878304875550335260398205375697572816679711198448998270833509501620353321477834854786902839626723277423322751476254530585123011681749447297481435573106981290528516369993914142122191270414326933022830308384406069089901726102856359434396542681086471622542842702559707478272661417038712040850833264028803263807818103881409303235613302161474864412028990446296243729857224059019035883120218126533129458212700565110033945592191506456841169611700043366727759097379685160159009171207672180946566402123114417373597878281352418260259233547145687800792337072501791156364025426972991439066347175925613834380537393588917672359587229534333116116620301264123355161757167128933065613453632437866481287627968837996113588624462613901307004238163051616064239138432816671144277409893910945981492015874947902188242673513657087478027859656955690467033997071220026543593790536175509215872041856647912590502644140179427715623106641651486966290667346648361694789092946353560932589181632519158725779397376824619416832167316917300591440558844839869512949502078604190880945401844669972506300913839550954976761389557087382809454216934298808146810189649300594192258285012007270706740539801087009832527964243918683058110618521169036426574948992845088297456352225886808566593196396455796099080783849876872340936339369904683012017176298627479209603004829579222059117109203349571051843561899991970707027122227372986126572812096327593803701548339757200668506144619164493695709301079909976319339563455250494491216506625188618315272181206591679665598107503098198440888308727236153558900486682153583165204939093808825043050829463856521661770838595129083132261155282340047596915543776555491776282312118799893665262994109955936321676151112413647558668391311466658511059642962476637276247039556958630856026686362983274619531170230172948990231509745993500755375443363703850170852990730229243915595923378713943704376589373948633209712646176812965499663788709106558663091436791645710770668570865080833063751794570181921932448055319774235545519357236245754068568470619328504524097573106645152254157398728877005599949307133052984863467043000510483926520429689621204890684072192626215701633550052511146044259104216191964028658431289313884704050334293870427386436549705758797205729640377791213958272433838738597494960527521249945702284121657196762225278953137130638425349864718178835290097962652321996315222778993059822416128835893815363998723529209222543300404280937304779705070162415311890212131659490371781751516940151136398741705785882897877271111033187511235343787655378051029315503521004641084170920030877433259920739953913884323441786480578324213267281250397978523274376968160435388311622463640872721340493989016515866695642462469013844272101266415380151490807811048155147713134308404693517832110320686805475536320987823073994074799251210538585896290723844301537575163425473723780661036423559921478352227301847504028833943220756238357723414079834382890026695598306138283537987444059885391557732334076797671454260420166913974199883757680726726020961010412930565845563658741869313933939712334094775882229673248912734134058293311907806521212368634002087522251495717549249999533308732751489525307822753337880098980908100439991205408906453499425058324609270622878434609491409695405112141164621314118837466604581466781571591762292458931256880859410682328411067550960213990926235138136791692828519260390831303588138667549995431795786609924465940778986061693142028712125430701691264523250946825430124589896547036930157333792635733354630123841830223750680194589858066008121974516395992376129233089643167128104219881383703412505779479224638369504304280398974884442472107058876518914406737263787085229898215473750839731173805620004625485256832550104012004595654304401524512489298315560090039266599170408728382516022387098514360945957894362451269300898573898475699722930989623624143048253246554954588746877964796926211345595990536053407914530393230630571142739952819811132713987054113001718901505019408939334134265652623511537611603869045016597188194660404217734700360513222701633014371482399840456376498582220793455380540116280556581473457439074287199148931572480571844916477913203198274886325505064543442878964273995838763277470295581990050000652939938136448320235177879630594403571162829209895037050182708664371438770006411265356701849983291353592869376229289429756414162052467197978407419905445586018395369526338547930146763346005542716321023532785536528850533463248627284203372515586892204414869113565228299815564069874370009695337157840986220234636701397840631301400126613551696724548048486269957670490141786775639888676052643272987790399453169410389575477826003131072111890234738035246180339713831024344854124310856300224470532750897086147816151454298231263418757955060726848703810081805290607654429839673086398150000566789864784909774857787922963904819603817415555643130263213378658075653175153722874268513001562034092618008167475249825004601738328520338073084151466228532502981695843316436874206008288627753474460857654728814091761742963685700232587443544754615269397812629472597269282785983950029922395113529019324787799225194604887206749956312017231077162103828103573439104628533933279736077533746466771693548139948341437661555142471294783747211719997396347678830227515072333921775918800690385485665273021775003274465151876006094282696835598918636207156356209496049745485342674351196110937523716950572246055417000653136472117829456279036709804092613366579533755171155661731096686120448595936601635650214890552139295128362969836183443328520511652147142568741133127263769195660417310880552027404310125639102195053873157160099567532219892599006980019567129415709870714598248492303866930054395737389419617790730127855587744622503922678757191673081181864504254181920373941658527747843642074970190080428740268921947974487383377331552887892276938107357249197301910602435452259621416942020950628745393246967054125175548523114703583917462780627123924379837399960649290633144751184049397702158722849568762438450056846985527749236066366035895406077249305552005383875020688021697180652306995015697012585165463922948556675844897549268096968882039021120462787192487674946165325038141313926268684377278675098620553359275249792586664793396955298255074978993929932722761052498223244497032839775952934645051999948433938601258596620942607248490020583925130653422934232159215040977356885481806812570476288901236714810485247143598708547810133270540530015141710877882681647379791513754121780215178477867204223168651211801202546869431230182923746130930479542836253893218420685728071953627098261308796629413350289375706878838992985479876523182896935118851562212195244484495406820225663071814138342300058705395290197504380405523562398123781484515324108177468829022725715584502648380019808231968205357522013010733536280351481935419102545532140502027464578609610307758242002509289126040083969592538955064803566252842088468400498487554446284775653851535713625339844523087041767679468331383631112482955006251490848323381768657137437621104828938185587979809905084779218968164686251448950291030827307624166230916587877107844911280742977282404099994746834432385645254952159602124413725223482003049636737443842327897660842950215230559198471732391138185542049654906524506168929868798726935710016902031155979660985062710336669830556563875142495947594930934087240130937471083751387504434417415764242952793517089354870217296204234201070698847642521613180551730071184607478495350500380614153350940574635937228516301171638562609758363468753171926236522649619034009090495689985074513775096664684549919947425658190385941864871439570638595131258174430103507144984770103625856438053831583788497454429042038198976149898780575656011969537224779979170855424731573554013561418734983125125167789073049465255698023664597304316841849682240651501072830454302163598830504571244132541774700012756038716886772387088777581032715282781594363756475722967726615011086582332411568314844105850774643309395272402828791206107070165411565087340632410405694984306131881859820072535287981206121269056941606903505929725264649925320960081907259798930377999737284978545889192997006323157435019513236481832239126534929528690956341751053545491213083970691221587424104964454899554920373095132462356694112329360105971838289138783537398946312303789729492552656349954771252891561275979247531301803539397396304435589949203946293905112754158764488708284303310231106871995927378426484601916209497694941689436255764428188261874762709290195359180662760553543939404298792626036084186595553469204466486417393520834462136011653525736953338782975006839697576609460730022055451150552961730757493454297108339548334723485093746681025825023569891724516630152725273926540206482099474481248600146541813395093558458736886883687713837710056874125015099836266607661683415109200032882765990198194903376971457321961743718708776920922113321427601005419873290020648457327189290447023160903723549309899284403646148445922524151784307510945587944435131470457638444644068364370034961414679914310043323347431177291570712761275310273134821931751616907161564822943945633053706814088737044864339013514771136663822516622010482891914938991210113632280685743277841110672599253369626853190788238037609863609435629500154617009120597987030490988664218372275466164025659076661306331461178107087469145508022195537735210589848867432293018031412787952516988781425118142018129688558700804643523963940877972182254993081846962768574334663373699793515524899308926274524770965874980732717520288792671897171088837674159974861546749760232696558594883490116436283299932766100752856569041988827455568076238779743067590397661872856127637946687357982852418215521586263566939615897535094830413009591639707788733792571590582657046404405747412636945144582867387068153776631561520928406615861181504288854946523154043731534526082820520247441193341009067251306657169317802938692559209842337895645907886634696153086071066739874176941584690964407649401152960387394524420888164921023928116912184419544396330701460703754513970725717819325645245991828853644112278910582917437181943976616615203411265079996145384428630075077978706178693754819249441582936438649103569058785740497961268414765761775062948825495058780668932447524862001292780037548648387666558173916731697110902370208747015051780194647653543895023743215837828391655161736697562819285338089452334245774601810056555599496122343211807822570213238574667436787470136210084082146659795703737643165009227174705208929302565102682576307736532349225181574313690872267520551889018841194720761876714690354601996159410478009603402509300032706410054766698408862051059722210745191382586256537648112412080303766095484254165707631654296698612939220169844179071194290058564027920115518913756471659978845760997550135684622690868416573730026011201887257214318282571664381100089873791153426135115214331882316801364757691670261067576415718630966636656488739499718965185791094913265638171016439200316763235041854612789275482099582671440071800279076364915947623400384430771165024269726873703710025190957922307835606166923865693071910410879147116015879018481242508060900990104290400168395959566279570278692946247142146262456156737922512726335502728113844918516724850330297370242301906635797017888372282209254604715625971357173733278306865270463793518132255697793968841840627046195243395967435230574839440290168748857135682219147631909799926663151880627146866329039497813655801343347799384105370749988892199681217473720871770733406130326828985726385685404921711692487944446941472279803513962024299668622140469600048762236130900802912760608032392367934751359859655417814030672299945303356115519073365708715719629342246205804650456791795992976624844405076814028358106147815038261811747914922667730697656867746639058779321856531777476310393080813121801249041411929736424072210696255197441467157636153791798155347015806509669345623435929197852271398747601264263147960366096041384988746082820118818142904370125133575611764985606224458739390766136215123035179706729286841410456778485521464109686523539849391559070708953518018595321216953741661624354839994148416770101525007315733746661659482521450888972570766167743149425741902902384740926968633800184851984605281954583395639258992630521121851896450362563391275409682352347120968496953376279177126334768050807914149055368386533499392305668183600110789872876897845457455937968710527944787777255312149530926337707847602727385239218135384523248945607352538892934412439136498691436446956755862287517769001475318954716047307449801682189134811358455857948414524999642144248895543789196710900650717508617197525158190861315328587571038568934468739168751321034897300431653208133174476885759253916559742659425717837249370909605310742838286738937975537302032853879565117191913051672303834318033661616385513897377849125164623810045800582749300329997555748440922177835318981015267271354589235827944990689675818336075455647555768649536103760367970034988747967325523834294355846703159488024201222793794895675476232028755355856036668996425298473606720066891682207071062685653946531561320630040355140177298038630381515188067521009792432464151616654785698241374025513440712352845608501651670625074578837928903400118703264806270377369450696556087021179898720260113853210205280910177802532093874911752864733678236456195001446837345333827862710389398053786491141648852000939216170076762756018904249618347725535103750072251970920949196639470838425137862577118228276700769883059789114152327212350574780628099767925266260116503991511348178104459779633881933284616860579536037450237324199402662022967574586250507286511942453162606450795640883583447852851938581172933336257867591618147087413897309452988151967817757923940209170887358178379066784893259602966302448164668075326580846075569941437746296542163014098235127620071851557447161944278136888030923187044596980885696610758163678679546197741481086314111959257623659405892937142131677510751595618287309802791862319913951613211908225370497067416946904770089737880785087195215286135940865200951940094273882388999419191226279462892173306846122897213505938144066246351201577128198945218435777167449707645697270635773301258483702206443828841097461510584516551592531261759845517990770824392562338818545167822762537237251335563089203506319890804950892773335804525711533561395033484379637938803805034784354388508846411884161075523813634512782433145888107323270572491114279385107733351127525173377253930537377519679456133582411394695254912227003632197194573084395913493677499951849988888748333487148282487476756362130157543841178195250512350723814959333995992687381431549792674357415931489594077023439957308938517518402810215809980684381287651993535388158626225830399876881653225699333656849732902686504420586927008676298338110351044061980989992195864401941985333849064292069310978456385265255385393563508513805290657099865475336514250419656636793023346760274216969822880475029812593633832140262741645001345927523897547310158315869229867360453143154322407615817830544790613786882946359729183769625825561351746186214701791660529408717361805609681398640914112676992674885530158229440387111212240844355656203874789710322439096935886469787322151740986965019075806045714485762616509834898149931652045017121934636308238396914650043905318063215427319462840678109773708523228968713150642620761159707557007859441000891631431185797898856902050983610074362589220739732665622510007095476464294651617998369387165351629310268561784272558802556681103557898790470238511775918744037143266395006685301051638646245504955859831892591356356871809868378059149540372954925914451959990420111916411691369532618737979673986475224609382409168132150419092235237298151311690910938872058672616211349586658683216269110434671517790249142721764894549415572705541227130201090878802800219475911927760946804532399493730899705472839705102909314719279497505161550345064637171035976630437704773273291027613659435349816620168755166534257522405258818912556408184879281464860260194509602933239449158499383533523033820548838582534846355512973979190504593204030817163602269653998159282051713584051467461338498962076859941231770137043858575529777084956391425947780743280664408040036645193754559215518514933360646286362652109026748575585209731765862926058624543862421764589711993851909199178584077293416888970775006068675621244374600201939942146626872646995003207131236126733690189368458527469682600514963367077869472469441634169940127946385912566234981280823872035188749477407268018578202595024178494172541001238752680660960837450194549866410225789639060867189503017901431552117333333466594186719954732353149749338319847093830790377517338945371031729800662127984079308731435312945407847942073024296721219031188113787026801912119189187628080794622908358825814488572447925404906256724034224601464669390658399454699544928072225871480032399199382406389478365156213189906491294032272046510623353796282934244633672396070024461627707934764463623255688181420382930385105190148304054660238679040541757574263588927240095972992265200797167599243662660546624667850373663414997140408890810600270736939677448467859338695312498501507954515018853734006821343328744722506464283012116185076597054221859284808871822620668739508150738401406707654341728717503292105979727417276428447311494513212137905809896618268154795489552237729692590415637454543735360563441667247538686329608997512529885503854921723091188217814213447349382485970432908396267813658876446932451501719863778029348442539974760633190327656597746494208801847389800690667590545699932471652172557360111918885154143593143108058396492611295849747866462468505775752787808600356756208709294060471642062636446704595121725535175787213487893846101420643293716882466595898286025154634849478658491411082720343252978634641833124644841925548517619343176380313842244376199347351291877565272993596522584206021316677713974965671906772609193275367675542228241460305469024011879832939586578764414746157620600519052283292688597534479617523745802542286181586882685469165447131892317206809215318404647359670731569166481842174613280152008696245775183515957984949522517320684722198015272029637752888905020346339072501009715850887719745922307072644118907944522979437678804796566530058436020500621959252028563757984518364109191743892788633122316819891703281659569685253564611212315283821464114195930452291795684514008056577039197781757537610686294379899326823216626249816081353198708369143460178998515363534680738007722230323731261403579093002299685679018063399492804490507495519721879593307473785790620420179437019573846422979689109678459375809370081619820222723356508173615603008281758919854231239372504891133448216711775990425130638876674787529890634287374172596280653920783052445595404130442098646517409825514180032888956230138519029874583811257654265839891231180578475880140874094156659060625472050117249183305454021409531307552022116671256556354724086113329081637922704503144771789703328516765255678669153752343935349717064272484318254880024229214740206825382249836649453355912520376860473388104938984548013822388517720125557009839978399725673636833627757414385627122372512256998514879063769194909550343049574242953669094227837845517488130549631650921649826021611314995470586736752350552399388574643962016520998307754876774643574048860857016846921242352673929154193823896741282884698399741730170808281004271341598441833730075591061079109416221906283044476617972699041309436636512050162195544751905258752550820181804378677883276115928959592705360903709727664296547109781272383427528003505777255536510270692106250955159506130270419548180324332995143285298849199504502912172422083039779768385369935632740198446755499754319144490161522472208384147560404663403099083208480087930846333125966847626687767091285968013501770764977963304489389882899346581003692593330498840582395003861563055263371739054416138652559055818691003340620341234767321030230688739533458480157871140052246992384747594270273978302493491323678843028776162233402393655420656812174494659368840356143807419300776395563129472277668058539798550612392989423107754529520925295770736001931988018206142920271995553114970036238971288203470465191710365472863054202693303527556061624706561357021988328813377135315065161580234229373628278251259625866697745964591126555923979456771857079891554710974498675336378826229062456466683340406899761335389788154277192954484720979327184566494456946280075186263625698849195524145401991031484100037693776583629666796382626235940592512551460046392812924321707092318387827358316653907089315018219057568197017724226621613686917186632043856560884959403038791908619099272546855345123527724390996623474021664095150950755135480288086865965549414633837464835929839342302926361618430840034007623505501432926491638779398760530362681891839259080500267835434802128440468069273442445466534155334476462845634752297357923995450351392026610082923634936912059861734709851082297510924424096779351663203638698697792918737638535392650434722890708478223932363633083544622352568988905218004782424750497598336356432895773504363905829662640242525198357395984630279303004796208321938695617224561692381735300359552841562496645393876201803617874110886605202443764287333198823174872615516838055483684460083503959514250954004775330124931087439961063786276031168115482799993115225287676133438534504449983866376823889473125405421325912142539526906769845571909266825322702372797202869674810175842403206464998254538298577169317206212911913990677988959576385576550509772304349433952962528204606611180357694115127391813326838123716255191589393669814535073076239931442665402329952078213094889401219731014739495472717655377518650240602367150603285506237358013034141987841656299128397694730289488293989237520369386478993634408775449855547247260870890275967281090056987804814667227753892775379672762005929969929739621369612112216464923279823709623223804737063816584256556422800526129291950914211917240141555967120561344981297766881129936774936016815077735647137711804222546047844248773872901937462539365000454223344012977688437365699490299260116757144785555451681078107307343876339809436098508888972501745133366957703216533304027476894995322434167702471328953360967751078509452348783089244599381612149765125466715952065218998138652376994365103982609083337282896418355503503883967825401875500663921079446108874696545066658639920528167320857484770234444668628731980873523487791593254321541271642431515374745039822554637990300930299828863245393813330433657546636267527927990103382399473978010197278838852438755435211590773648326073192059462350701281722522717755275380396259659558017625969911893205177666465846131065429105586998967503095123740064780658083840768450401177125194397764737951422227511378314616677515748313302622372463373481260719242698644230976105378433919532911019882227118459602059769945694927009962430160222485792002805342311186713858447873448115290119969865425422935618146175191323631020500452157016649436795080321728372730313962284110172300650522889897850102081662357400492606075821811772038724461270009301729453613772140017215335913595959978139033103883942630625656828356075478973502620311181506256952405786224127709835929013568932522327360553196827306769394407154752600544908066865165169029640091713269650404404941278941533947217358096548970389308170928489724941670804543095337537721517737184537604752608605989627992023397844650440422153032638008698002449927893167239246966926570523604601329076521207920736532630137660478318394411697209438747499682968847267405010848596328405729675617132859894249705084208168092027746283393591660349345498924359440965423408663848484215123857954185879422772420886680239265483402621038438023451780205524970161652960907487560042023163921058951231059969333655335641645407719352016563656124365961371114755966305125182086741106247341083034111077591667810401777439584764595655747615281969851428291765708317053538048687063080361468797446523613315619801018797631192854709314274783891250864530402627185262187647035253293784521370134472774041860009332964613926927813975917416012745773987823348144140739387400920816450132820586241153508281590049276321277756146566451482155395442766968129626634836785036443508048780389520952891977020373055079621819236715915747171123142389016664925771317816831911244371029602390306904746908430778138644886469832980996415128318669633777903280619502045607868874630258555939163255551808068752128677804586346564399249948295848387727885143194645333536866439521779577713767042891137740711660523538746937422287147880026575596581972449136566072967817126291574623846071524936687360417831375051201389486593024243588676781484301729054657720785809167943452923674227169176831679223970255128578843858149384970847284455575861804350361734187742135692085776899844853421519643765520305123741355038846054658540823642066954870285974155759780774699150609294160614234365973430010647603990886284508885314191836184911444132154945187294007474242567610315453647367155332605726463651887518948301695943999154000423538154272505921995534378773075040292202282896664314401007001715417721459392898590915616529581296005092441935202318277907067338477205416410507062340113201316112402441766522548465840863274707720893800333639482548732418007891180926239635612142816736736812088869386177420536895644334018693384810048391042650584930514607791747004835242597740777333216855467019835509142174117410467868683079730428740089079594602339358028556791801185762616143953296552170039662402355861194211533169287683117724268331446471153643122391367025407372473592058595601818703237699298470976695241430622395825487233229797815665839424187456173279545151327318515819204559325463591206664552166617080821335722223929561771519188476141683192698564115781750223004960851929277234537678587596370970726723088428537802492142504227839472103012096937872232115322172086981052829052569603925131719031464981008185200882082987447116927331160029981307966915068888437096783240827156820434616484831385673139131155725126508102947766370641764642083313261781718533033905595877781236041052794049265351955935432788351198811296454373199992563417068691424062222029861835703671105335493756852760517089000163242634146618831736381373178280966541282080102617284370299638172431465337669090475342159491291318407478012942275085893409486664647636564141415181795554019506303257243228236262038646921716516730264641097260847813583082079891160489778136026867881798698121834869634085064899238172927898694057090028049834264504013897715681955575189007045558712422999318016284722710328696696759477954450007826141879568218036084917664898209032124800477517628006367298878586363109693416284013787437532332773265396803722418242466272466999970683455358141714363872109307674769315207437489664365831251094225285167200701199767885080738135624317219521893628964096504795330713146984127492143807911665489405335258904774677327438780254380742632567941624694511347515724978593293226420348473503109061412285893684868141986816189682369368262635914398237840440684320038255271403529118065731974362763233886633829233934890152176971297965798008364005543449916429175567075528774638599239839589779510895244515537208925631288108175883833899912335469664913601277363170808501016198965028585541318474540682572151798728562395941915323092030091899545412799141366632271148703389935690256710141917188872453167243077933971644639425467986449723709809611563766515894687252327037125314251380095138246039689609636880254944050810535240547049436897306493070925917308990396305861299421943551396098129594644120181376630378112454303788515543084806468577100360955337060759746204998712775722302934868256220396225074609320216375629681618896273780887760927651221477982166753560010410916854638867249783770014517692554779198375818007046886758517803261861416416702269629379693124637592715387414416224410588365004954357736525476141770682755737254486208174125128432467659366063834027228022287015736199202457129700893958920087358952187359041924849256548459355475026098032049882600543735105175782833760502827886412648955498574572831262944826370761073702588792666325002755300252042022650735116762824999449851518078772070920080457286208301228305629513611154376979703662419477799135725757109673312542666930502011321890644602542603815847325441622868331869031946183028984697192278787912816774199817930025481390459077049825083767220256279542464282267729049607329356374343109716796544663154623792217523876036397680115183625352648976884862016957901695404209199444705180511986197372884114753596206972075842290715030372428744806477526335369613694288601814508537252880154263966551890797395705733067051461002675326710627686928245728855939540816301031188549407868651082888778020709763988490601033753772801781073367274184145358951473583178830176646110630710232454955316734815648071078692814854152866086155944637184715001085406242896045661755325641555020390578556835136285268457088505967472982837189568538865013599779512300615954508312367967501823487280934278484283106785188103248871286315288448882753464403690321178702251161003744732480445264730237450431197649119261646694990356443534130044475346398730652345115404278212068562327057876083527350833324602887579956061329797831979468729748887210378173920494004499484080185325571210921090660173911896391946156991425081456329408258287679415182886155875249484814450039381726420359067332868777089930090029378090445077336486925228866198913891354720380814074355132501334203650292289574450188026687369721854823240912764718331994568904360358760842573732914135155597205696632765934808094664987983552903222695608081247394926920265084575881919504673830158734669065069044022093947967494453335841274697636577329114228217570715348067526024437554319041789798329068571180487873887628786599369217487815661577214398725736778978885169171158227727737020303248459155701738117489833474043387922144125495508127489827254180394698679495119928083441208316765101582190259256057674612188150446113901641900996054791574866759419550826539841700484371691616143014752161047686850199538339491936958273555803730228476859179000766445603773606104316369681179502775041140035015327053901000484660163518014988344115774166037703662619207486346226847018631080065622406660612244184699048522725079049930169591939887267402865130084057139685711424259998088830876197920604554598264570521918239515086029065374601847112859887723362275448060520976299610344619023403230678297722703820650058920457214905686609120036258226906850778077755015620745512603011508059024480548440821506951608113843003298005671517537563758639646956265177537174013026619635267860595015400454750399680622643301034496061746660893677531622286488791821408111794227826923920459647537447833058451186465132137970247324959345918429698405220077761266911744944926193253742588324539730423851800145789657777635600313692811072325282258819698216561067926574749635807011436035433066868221458669737474678233393459629245372322954857817867300849310160473112790005761590090681805673313159142244474198073372622517662853000909725317974569472391286637947111868324159858950560745706995670522306020161638448851394429184543166753919957893126566573501740188772980801510852055707575475834845482337962039974228578815833159879732023084066723919288160958386873520656373231448151477950803570722870985297348017171884611723285329562322456459020455298063840050680117711475639305023143676582322708762667044502961820236077830042281403604116656978526348200254450034227413923835615098056994857760669409216455189117523774027890811385760050700346825867689074466552803245710335769860925108726359072814204709860815658636440810372538540885883990624125107990101140311468858608798908525619848944358231393753191668431926096482925761239747844065185902692024039560560445260538671810110184575437426452618493228251620615720351034996729565048403853539726924131544734511939381125095893059761689665030498169796161860137998809355916261066128594453214687337030188460461847820201359201332988055100274987966944224971500827489604786726813524460593559159858183127699337272851998880814955466044739764946808786230057704422718643984725382580431000209224133658051818749982629878020788423926763801074527766378801857396926394923681546216224674466313719897034368709217363531501774398644178607392529231555202054552413545323559842855560102384305170235541148719511241041232704762865309797515733671709971009436387875208260489428749394242381285204255270813065690100689796910255179739796612650854783387880989663441850886997610525874555265237742408966561778174425067269116884310875836665191223347828086755647658192066836957490480891711528502916568842070498409861237270921576001370883705253740587145091001650842158348752533460393257781846173918990330976171485514931568507526450613482660693005166844077342670371354791025045890745360567768596410303875470209679618454976819848522045498371410262828998004064456483217481423284642362763213029533746327412649266282455194271860825379758189655134204725515026936251229491871437023638915530885749914330233807784051113827413018631027222321539292023113020923977053909490578369794319304116687192329962227179057506146169225467473453800310136210718629020568025396811712019146988795670507458156046578792621075902761534708856344492538757596671911338728090290730650146493317711940240012687364652983609299110218007033574363693617509544939591785508307865203529078045969737848719857729576858532701656262786522954247222000847543057765260074043918337710604434717808529432539238803891560214611671907328628184783347905243726036764071949977122243187279371702337359574429939077981620500708492572879858207437317440718170694298277070969912922515962470251205173623395308996791078305223659628228748572693949838318206054685944158112857973282359671837648462610092532207207952261792128857975898852444292042522301620391450160447331879608209496019091784273533686042427847835914296441219682846912204286217639220610330994423067818106296758260425919332949590590404529457310704280095952141917670290718954983254683294807285676748879618892096699379225582812820633354960355351159944807354986501992742101598619282984686080593746964201549833083087166798600912779143410609218872070750722684257972930595880960075421730750454815672482403337511111975564218290592738521514909638653124502508202627760503662876041716701112521849143630178686556572181762739547554424830676403179521725209200818426297659107595768331951192451561313836396480159190384893866614616491394185258154571651380326701136212908135113990518163985727750090345073653831155975977989402791331351199624039968902370497601986266920459422900794863028178062236503644239733056541661674669634937644269454466121900753456803730340214782267487780996149390998003152748269077148437135217424177711501747086604271883252559493302620370859781867757674226867013522025021034574597854598202887486331589812372001394088639151964267294341999659264794970569334346405727503517674225556382613701365689570182325453858893441261905984568090799395495805948766083791364696620773384734568016014400902670548444797091363939373254156312305719956364656458458221048363480485723464612618110325286178950237356376200726521372206506220319664938753088068176676003844077986525810333975218716685059706407858065029114126063978896437918487069754440152104181580230087193011082552303658676014841451983068892747613572091108009723522271092102513886589649932690683641237434679890812919647001853231868848817347178130313437957060950508811335127212549389578768018619956666942553188672364968293281519455651092224614721331895787216738074535789466386816012814505756483986905553657837507879923974312336021382409826380277492459423105210362140164737344045457735287272159324000886314114991385417508344159942650777616964099052184922179654947818552878656809079032847067150303722102570917459270173035173044625395014731260275251719938520766131140072965308315459107691714318680883984148231875592329092991528283160661209941718380863472050177227345403732911091374805792174645099072136448340610885444440045401337424260847704708346307565603928834472035622721666389051838904765308147072290431062202890008188790714149299799821323988300115024412033139641623779029083792345960405083570027465090826433890959450935955607037604044433746875560976943178993809725361034665462276757679892614074049337521889540232569596602513655309134560943224402718171641191306556854077326131448840178560553452226978067552089203071175714764377644201139601005636696384835078523519471464578675966461758673149611085340083500549247922987060381148727307978572124514627653659743863728338049748327602693291039306482707794389512290933889802884996927191520138006004946552911340204912629185297034193476199281636461897546698273171406551223675451281412181398806795163338048307087509276800215460839382081739771885330210632193865991618500277614682396476515820607085654041123224906282790493418521540006839655439476527158477222721899828984452358498058521835371984529210685628823412509974594806022992979179532857526495318607656115963402313742750372563134194893013371628251272857255417961261212980976887344136539653780790392432576180114145134533975170113207902016268097818446670575078610193716992523739064672469261667249850779348374868076127044637344943360191943629554156836166085602220305833226576975454402625916032963887112962279926071304710674537608839881530516213622669532931662710681283407183606545088596729779790805070468247472772051395030245725415190211800178744389749336234309235841332373629846065050099809669219565891481297598370547226094139556387286965041573582199091116510132971383946355887157945271604710426942002442091746428952121833718305744666730708119193058844405283039612576977345826269505524102841072697182493728792079496509828600927815748648154290187179994851971798776496056225027858477841173303078389021956192049458682828302475168788484179668821275369700656168708522689888989812427413641618033916873653660820186206830537120745449144688373503634649674801100273469581537633939781598307483623412207290447612688031636198146834406715597266580954867244516422253643349106234181144225030960271639748428860664995146132615109520996902994106537288985854518861277340228081353623095379814625840098849663171382756133041972106812275415224007093947459351807312541243571353557294166676743522915972805573604055564564016920375315729825239697012437001831781037441431857685397420184786736404031221196082857981018439107165882381420222765746165874790854672173739264269048153980976060243341678650636283197853210796275090664456905447051641500594201932444060977702381687343182799152743082230166750136744718964466331211812038018511739700042109831629647621492067087104926741048901318632534167518617327999478910819148558395435598780600312081271751546346019180042671267378922336248922399120654658798242142985872638182595389051510952377351184271430101989259857755044626489710042010557729858419460303083042511551347853730069275487932714402464121735162339024976067422246162719938996075527727591939141287182740467224045839709856651418344085520984864824476525222820730506540305987884350494982882080929633243229196384032888175714619897602939086067579091787109168751436147567054765907075831173697850556556410589271317639085639608219081665615705246597174233679981042268937137835121159945954877750042469608679281730810083250210905539350612674874519994301331453798862184795555351949169569214602377864143038738092536454801032655791602502280235354669995309183015477325677463952340787807640451248378392769337958488469162602669260989153536889833144758462936184438156608069560845983902567794235780346386134440204193012421941259616020230026264214567662373505384724729314750117337888596012210131314797064346087575632689304460796636008034450453994369962856148919630377492248623689729572524234945138019909529135605574630329728120331195800622499470235977506461020810564460503225622575394822425991855196515877929694895295479968687884279569815226028896304022370857785546083385655587637183900484073112691567459820229719895031693848018826360088430639869272631492080884190767836000186980550296470021732520806089218675254085308626327333977156479037200102838831278668575343957657891057372031586264394883535134009496273693825042216786029717718025559093864915365477272346500549920925601069900037146658893996379894664658698751436588729369008326146054365413607328723861740129191252139923787694006370804402208190263474366389998162694420631249345285258898076109446019667666558859134024444500069973912352121980796628419596124005573938861857764158750747014319256941712791357661228105296482154905689901868233731249069353578152097469778742849242609330634846713651097906247613580046314468769689620395530206069359475338732896629091740108080574371867005092617128582243220677193386832630719194639671005811825248529670796209173934627863497698781018166996895133259725275585669318256961553146270575836750370844837752398388813757416954218382222624257259118305916663975943231755895116824999130644855743487594969398644060261030578136468245674905508526596738321272058033649048134775514493230114670374224887215014292846420276150757954733537659688703079111330526300646471895735372465912827535235298165748078085729909015492790411208070127484378745542450047394163112017485612402770835022824260091045188295076872045744109835835263612835400027529031020682594297081855052805579831498938146892290767649630817880979339958513531142451755590999869521857304853035941570970947555521291897509763314227016188024225039127037054018361857176918816202035064968810963054346239236793081717815514953583051515771926845454386332474512064775737793760566227397032612268910691080731687230532730711476961502009088598634125641055661309670979267081951056212013839142732181085341266268551009443236797387082864685325385186064981409012829783025450789141517879615222665375656334420620398797419778687378419604871039016862048371252763149777729502173182088006337856588241940753284815081161776178924210436902002600949328651045537373096901133578361205242489576545222809513845163200094339224960155379769020244488878052090413633510252584621497274764246376142204103897544419893646260597533082738852191789125799200725580483962937103478487856024797477814341879067287748734375139090950540859940965434475220627575692757613869826056971843819341930988966498706970809925353709016651835550957623449288953701115296843510251862775155921395186192558889771821095023826231136839087749322496559907454038580370509833857981306906890139167580660278630079673179211790322059818070264572959805647242863861169401819718829785017409260277077079290321242994972322974697525902568970330480410761753475251910282029170108403262044407998976948908723343986135558392292517678341682637883342212741752370404965573271506752608597977294573166648592675259483972869477932199861628822375935254190310203970076781101360579876042153404291159681067635662738766523913291282138302457911856266874635268937969529446817655464253181510197207690811939451779832459055854323128308433484666822270049374526046801885945148341579862810578535625603644461957859420747856939640233896316946868831537838884726562219674119843577952698610453218646783431369258188811430542928022621020147838420082236824299702246712182056873551013234220647524350052296268342590221232709731641069242908954221186361863502643825882565026661121440424535957000670627321328839939144049774062742785742320340380091227858843382261500623528946736349313309410846249619141735824765895209645728932197941440959633579764148084111320659222735141636407125348384656047207906199380697356779267742235526995626284525978980092716229076770837071853840301425838396111245033100933173712067283194592293680010362096390618237275233017508172860980624766764463379366107502989393534598535694610342670523378373298226350500915410699327110233954566999580192836317010835417361802947666031954947936358430420554680762386714248051059535266228902493663198686385835131835006927709614767199763338237121343997385604024181522257307290909231857568165014173273123311296241058197282907016125361577801701143577276395568206415735782736206067642432958838117801363289853268488675139871911206820183651611359344987780606807191642768239413342237154886197390890373110964354411354580685205752280434698070238587660813397420906529453109448524336689089703847279055722370719969396470515889087864337187158704163534159209529393827984336442478525191082367488000418433906164531461191284264269283036263139453936056092582868327608852640284837144474902307781996044488363859017032342231880818601264064866884326329384979399593759005459467895638509526315127457188788122527046011297280953867818400913020375722588837201224109737759309319816263071736224723122035809942244350467224349898380783156499156198760309668096051226299767181125842251524462553116063442105996629627627935647825646030938977559287858680905402809756881319341521980904042461163966190627947813862405557911316127248071512929694981449923473352814663063811905739026101867240436228379392298048109186963604930736911955763193261096025299014613222355659897275632759826489628184923250023801357261467548029479986668186018095278403701924603967036888326664387549780462799985635518403244915066167425567273518623711984758874681328911869730138539126476790578680492591657326235018337032299251558112830825177843343001187682389719990460409804372940326564772309910304247022046895395951486960933752784577089817298658859995038177503294054124504660849635497162478069798955448782584032867151249320310633940265004333785335818679275414102181029410737905764041623187085374875087126339111887730461759711422145977768936027641510271991317380175659853324025929715762968193087461807483704460300519998121906011198237060124071684392255966502776835738003904179967285697493447729771452831518833739814210450184657160009336661880018293749428609771163149675080648389010880432576546121088733166351323572352009765947967924238762975386098651564674473517525943570012077434184985672824786558386004400275091969143431336983076478313031007841808164557727715669596472949920220935095011332473714476863324337186739491207519222085713086847709723418161312776645379890383379511493850052892069433446762857465320823184245596394451459771584563356845306052237502479912376102237100340462593321512267430540963039182221059436790613802184259006840150544343000900734277911941952716052658546735329847407040978395257442423257618038060482531412666787482251625283501724037258737827227440546420108837629066481379772912854751821164509673921340635421564462028776233467936094346063144099209172753111104762241072338868185658508041562173552976306239995773597284758368705631854204155692368052823120093344270885813866573865421888494583254725084158415551419669528975067617380639113402308102105920457795095648946555857669532227858221998460878069708028045840834101535989873063079521809459591175050843024695082012525840516743570786108752790440853331392855681562699109859823387924641853575178417014819388437546504721668569607312637487512230952637932426798980741258760776805884931283250582786565166863453391806178376716260143570395828003461418429331796396324673519202050566290586536748537709316877304711163964730611853118971984458357286939478407692559425238804373673161552682253542297066452399481617205271811574804362663628994097610795480681482262358043933649410589008073871048752083954758708588981672109608457552909264300614972190195934784284622536932692640716235832766476464577441477056139341207229020502623804744977320225992109606656892986434743867425919031418367996476548867966131472395263789180964301424128035564878520141737280889815240195699570883457729805824617041070073845090175225043436967001215504075263764033363356939020477943911120171512559136615299991401855487733450163819698121930723456816308795252014458748623119443371033937372657459395855020592445890933742851148774442787629672156750350980153073044967857262927104311511163091272757000679717730701355613833971819580260041456983125608208962005516985325497311277219212825732774998381030510353106837026783808230248610921307853673215112598499154915795417137962300586715130632481428388520752364731553561923697373718511578723420545450860715385014360562831456072919659929811699269651947636792421442169440893618809374082055784097165999670585549209598317339349249680150240143210555130815641789081004337425109162852703516540335105571560532088433222420405817739839912825855675254888348315618039266480825957093962071028898313087265101232284690101365842829894779647842507286989071723002526325287500472812074819561106323310468182190835631168308684925681479916440724138029318346430172256178705991367150091623821847305320532932486176589656939081297590665492081987473499387711981490105290674751298876635614249704212413121919238201085328743502757591361132601666590267507045740876435800924823718346785817364366669370426008749957136311236536464320874168072511149166327528833799807403502828103682666975117765203265827633807439016991591051717282779764869513092051362376783463498258224585101094518487471621948516117535310013374660969928477479013000892262950832615939066897773629988066247431479474624982843726150540016576894470615078604568428145489772630204580426654466322955800072877107792191763485028957499191381358119239621796020271311362444913078474484166595102691621626278769131145345717315150257481741173168221379530702676849446348542042152764374662030479561223378061032917269393060875797331977728636151099732309895358085899310340186147850015730676892475471238955252975894230061022988189990021022011635470505161718758933948762206620257907896604245009750467958740751955449099324103502531776324024025479763594706812926774548777386500177575895161502749882861216918597741466708263822795472629947417399801605825101509661984850725829901049398959645566180293305874685784283516346351376699753290092795935747310119935925517388869069264762214218202358150836720156994843790915423491243450316905375965355668835264368051157199495567642107372576176277102030917974745971452047420775540156513468751908554984945458869500143526443466864591593877897845784235311594214884425437651526604183438965137152215162527184755957994481461642896745534959860289973285018969029735852484253428405808507079013078345004669018200983981194679365504958164143353483839221609510287342347128001615999336697881315676437148712136763143820063672660017131774633884874540670100800026498189792739344584298290669408402070597505070752371834507057501600796254915708658758570671953731110985193368340420193755660323643987142840981964086219332645145280749475431196190790534086389172143354181349922355467752750816128441835791315569077824555544556170162482357397751615638119707082279488933367909271113117864789838977186981404590999014027479200791624360295926561309138253273346117652999468308270527502094336089965514135271536597695923700047398814802422492197715222408067730394156872573924283374478077464628515217329823177937695963305903596967446756836752724940432910667897300658076493220530250213687418284086693502500415752924709557280380230098066960067787074869377962865531047840369861527520252262905134695650492551536808140289119592972605808842781938326596533827864798445735857934070580490698394249728796711053553439561652966713313833107264106993762358996447066693899466276332225481110949610923243398781528128981053698138497103629509269298547734672547005900726931781944546662548183542807897995312647699824440428255111723933097563729549949371507795895473560212722511534983559046322767279501670225003059277110315348756175828336023550583917588813148385368393727497194348938023345494435377466180727059558301830400840909042783374491824169762154450626790642428211190733645400501860113280599699515232122931476920331821182555768494460721175262797700518939557924111479721127006384658067007292384442554340126714648226091489403654982386691699341962150755503866734967411027934041049759667676914744806928894157013158345919250033453196229666638780243223044592988746565610238777251954612331341599222510008139561619287862333074426122958069310679856871833619925627657439266211445459259393637589892725610242933645415149439941918436209341409862393151297642625304647315872951405196891389406253007480927923527096345699694432442192698029543203315753169442654244564674193579938565773378887123331618665901459085206266701286947151937659680356392969712668703790060484946018526721345021308729197358522797002144855554613968543569098734786573551470865369575343780469323010549699947318446433565176707259457528661281158189755172497958012842607298696724433656352943161966000166509127167934504927242660668131251637239320756336766744508369136868454872716203638537036543644816632163656124693486501611307224663248812812879637967064715970940338324694035923527497879441621728565183387376932440024853254247749202147953365071823904511289280472568267621924500381950231427466418947818419961654072381153677851471674047269088509271859009229204116877911036155455415375851341887583754514538151788622646714036402474681000393306137472799073063472108600282830941821441331647535104035355024986691281071294736849280295247956866002527664744155373202102440071764956209028384084803843059708404193174373519975803626871101194331308602788573895979857257604085248092167527655487288972519453593842540967044015879156852119606654416316845287896562099283701705681453764742825522059009940246425194430867415143910657106015902471884810231790426369415367397746872553448531379161640988504877080704061631627099174810332982722063446670643981141803883569504961202371678912121407539145047727194732958531571057558201975972492944655033027710927527120664032038867673565103078190161477414163743501625271210361392695781802754468190202983402421807331309776151578767531582434338382961094703431098395967182397035251610509324167936404445119584442701438064423008672281439356522707599740428849679310772572477029689861700232846843610614505127220441786934572663546489204194734052427823059530298707748796449926646526707430340343253293856593026453245525220572276164344500916576259549725202198841359975956586862008845363091438440256058979869268744276177791797482750297594100099795549451076258263762774913962703412519225835180100379091319805569116777552477560812801386884613760622913034523538924862232016180266366486191929429576451276797786948282472931166906783569004707352557519001489433778022404930807212572807231259723669753596996025584247158042459421715029601606315977875977508593196927484692875898314752670114224947441438160698022247623545020961143866488257861371140847082717431479032319804485740113123026415188950058069535319889524174294354263280416736819129979879692927016105497188785673069546528037798912131672208891831611373005004607978830382016578340682441182767876854144698111997144617253399310489812753053598083901091131707977368624799264784959937533417573743486016649834582148262547265966689305366520639092242109275310584391824955296299381486381068568595201548139064272348214942143708161871527944051566786595981566809015648150492552564002147500410276627632161113848594500114978590115071181818084620301500487446392404641516034912591841977338517401569291383504662238972227364318919113704004779703222472164151478097917788360097204214382102650317616170109262465417297925515885130050433934366388567768047215314537021514785922570464731350366222666205842960161956472777200042851745463653857457764964855337680024356773749264615332787692370331321566241132477111019107221158210489321979737371630611562892485399175216421409116111808117667097695354670507645095547328232353099389278172692310933025703091058610490364443063891255760126097225310806508566324132925685974014521742452251492500261230457251349760730199342734877596395412986671983662474486180431356549921349282598007715779054569118922474055265270738416198268317747379175845045155188062785774184421560067683067204013885679264761658874695488695339611977951525317008146154256726226143932680973064497823636194894159369719269823708213383366427240897078739858930919069861309027227822666412936268679425383119360299394664431642732114924355152946483098154826460895290269406849904248251142663716221281689470436807687651459869920582344035247516679979056510362946359126815746990240533514471340444454259495872361163933006127101691340048662022015394125635573048379390705723039599179641150711185138737366802982543719653138173149647609362467000815521182687028931274293668183769122866571055284813423182408595194046544826480947288970310131445132317877443348138768574347829527688153197862531324502478552032302493922869125531914275332574249393515003806642700002137867013675058800431837741711136971244556887590668622844534134462258485190451562906173445422093497584925212058685750704980160962353015761589109862472876981785377911420041174681740023532959530481838336789032622603043730186931491614253739308178921604349348782850690863955169797925422119476854643659248856185523945931548238651023795684082671484302802104409182165134744553825652683782087080359493190300435189493052805957138965614906894880655982283491562281225054806465913261743906646357516073138157127001560558460369864502000892117361130236951773245857414529363089669485799884817235041014275619201204492427159619826312146585531442594255654606185276290920584126596182056974589503927415759641039630128167920803195836217264347078514582739020932162138857248291368469323390508357097925553792729849472917722772858304849816119242292315539083356908166594802242105187927096167059852409820607771258055682140323547120311937294807763147995620183797997078833121647410530834944387484890433147917773407348013373798779874325751633318850472055399646617647100966791016231367736262531477204579742577613177685973099950691183576449043790785935262619653460384432031113064624139893068384068008804151808120015751433498212226479048752798366250761307733797813504383262421877050611083035479684550893865382595350437046562243800502014356834966788610057847009446238886926451726215663352838250118936071082720335132883778219191788051320060451885484063409377985778576193413580656596109397773700990171763974585140872080904494020525214839433739000772237515250446791165080429654682802317445652658676709216535961137811387452095758162350455313772837458171390298845339209059036483240679879858445655085130280853395562621346978006457568389061030784833198979028741799221733582377511879622284222232307332309566207207479823035233112776642752531077833514923674068966050442974884469995285955216071281872722988038835810262194162222109450979340609509583140206212362380551165497493100770509843215376571518957041173225265502120623122086776159856401637056473138641019704267183078279376042544767345616933591003688518943836326761447321641846154975918000982849871654969136888969563029748694485473740589434248415041827590852465409888243721610060387662237420191427248883433026518214970945729432235105749372264613593585862837089173920680733392112318951672109746325212048345270286668347533551062010788039250001305512039930965902613034260446302925452120513759893378875034856990700777008310343727463930304589009447924657979463288513704348149539459032472573387971288855542425112523559938416502728418070954971000789369637669823352785704581989585401142814649539585368456261994038481487372607881765671682810743773608060505587409931433502467666412234636935909451431578815476910816477193790838141506556340356098455069150612875554451751858616141177171997415747138369188164249488221713708301114775357159244985437147439763594938589329254233563536611106426198179229825265381557621598289494554432326565016814452087137441303543325261630390588586222595648317781951983797282104509426793603518065093396978582451314486195499459938211932120735595581225830367538647804700749645421556689752265754364654969242378122940473542986496318179021905287127852063372368019052443183906181204537537680680353055024801020460647349095360373338316307765066141483571427637069364653056914603834114206576979739555200187099345980539179439374876966621236925877531375742807166798100301194876970476722462563807581537793426521769577834150263532512223508509787958334086515157926477639789703349119647510227871694934871694498907332698290311546230632867003548708580855421090764480022533833263686744462463634332238283682096937096766173341450511342687479180257450394740209515163600622118134411538445533187513706210343750995157040622842516693182092465655619870370663509627417792063750022595310354393138826717744020705056577662681112587027767743636297068853168680066541479086238342937203535739632667898338136166080524195553010597043862804359815903031772743561371503743918545463907021917380657173535974350631099156751252846120702543089927724978760875992294070990066729327657152743717472925019934459880730647593756632770565038163975946239904391699319814017084583865085422770796711643616732593850425565546199313582580822163196184235851690821424546758905992874000442389993895181421482887136388873630921797282780534113683596948638337596774125694207758057518681005354503575480156480758883282443539361289516756438410464357188720986860925880668448167598332285629815748896328349940030490018093775419394947493862903538482110723258159386864755516411082728177560127556631320274931576044219766597301572178830854573264437492388414319549094774040229659691034435674646016034267530973308004860940472261542068963443019889030324767492100511135830136486898246597649506688666095649911213387748021803129123208858290354620530035543929092898282556372148267436250244708283949285732368852071146193715921125520017338534241243378887840434888160831794871191451185096826539272520138619912052951625663150723446785154236814662318018017025733877580314680317130928477501496398015975232794605567004181876741176175526473979631309894858157175690793793656338552962756719188281658702782494700326011910815539730288941009865568116427707931231397430584858099149921959673808414331910679878528888002180274330350747262747709709802306404861918833551046355244614482286080441887632609590417680681073093987613798399475223394270246330609923392897987663075768916860747321207884615194677656556263862945496251239063027501756768646604883279970657474010701174168473151253138245742176286120449321596780212664022506191366613508399277995280219522839162997398339681275826872427653930040252728503105537092717489278132846495286968142603750900119459380064727721339443680247412826499245324891345148768245585660395187457207287559964104045614777539682480819303098537740153233751952638152180938601429328917317252074360445497847269559232958793678680446983778049289631913393237375781065283745739291749137475991055531991462797089433027603796148365085740454550691789958719182857142899628783729748820266924242002815608570714817448714749060305782132640605725622862363644393228485877530548705868056566474507354313507644578681804168252847809604888255572730008894108735011898760213740165508933634819510879454346499741405987351377570449511864630142403425513530394129329839483399361039578387828061559607271278134577861679342581004108522706492709938013510527334346507975717900697741130870248610416668696336555717642611157062504205247265502016657827651646502309633482039584430584392782344508070057133747304934754930928158699884461840484770055219849682461712884653275205134752187090295380958082225522559781541288638504162850285173422923588313594848204841573770157247285964174643039866391205217988730828556218956466365689405550604461436195439440739019804819451614393408354822117634350595916640373173950078939535466417073610007121071794984512933033739819765010824827247239737549697488543134037116135184140657853351608870863696875714006533371244211247481878830613567867421621657390033855352875942456414894222401439846695754865662398590555252730327491937783583801921832870862254226223456836184340863212299342165649363967027309552552180653743024597429569697672017489033904632889378631317660862707784299869500487220018652780666198396553820037604967433574543551289873035473139385028310359248183861865607069953722482481471661406825361687932994046860184064083864065522940749001600867625493556835312059680724537146870774112699896681584869066111799356538569298209908201613066039652598765824283564034983983184789023122949958299903017057199946170906308069665671997279115223146897672287120312345237985498962678555805937431928839432491642226882337555689504593252532605964543473075122007873004800147586370006214910650890197388768551609536785298915121406344835927511060884773730090925046315559384276702122670739233258544130660800722619262752448960193125193053360917775987591773994403867574910494654085049594030592166149173647861550922353115552185577411383529033017104109160105582396340649963674078459203168440609951939939607301877941232057466693858644986481456515332015126366500562140493406694474831250540928037180646457631395567291649127744628648021631528954013838021748857372852694960807981515295443353022364158982939615129637940422403694953902800329731815418010785438322332188102103717959279933110029013582090130170639247714397035775200276128413951774395383854681664351838449240151118477250693450013070748543859843281718030982616676446307881093231050971654736378278670592243182368414960815984826819164235326902318038963359193874440942553416212376893725220485206244463948909374515904065300036501642868010715692163516822565794303588863778983580612647457415583060841936353938479558808126037306050791387092963648137736864489194594012709823541296795178333701315618381186225658269946514109465321024233495488841978947316841339294755657553961543043822621310261303636009203032016651504895841698352694520586951228956923083718196303716905106820038730119429276677900804825811303331830049128518271795717070585316399290839341656536730696856318082282050559043061483741422854815290512728605719159479606263303167097725115561806052220972936582958200622362430985392370976934851307379083405151595466444516511869566885041977232768684967457011148655283345111377963167499610921362371189878125549382171002875892764719350951030529043331485722506707587487724745526137684640847665203845907628086768475775017805639817751888940888784529351004859917643582101560586624191538882776960540877312351646083314340539913737779413277385405229928828349166135154277421400058466674880788451901161858348577306548993802885661326056114677699724892811649172197750460860972310572016675758567777359277198663400023803913117716641848606948116591441301155061844317009886769094130285911030326753481779211795124412325171920483147941281352914935436936529893264362472961927226889057552280169822974923675034733013310112497441283574304497295591656300391564046980039860687303725620195351638115804296538875186008440472472007345889908941838595840967688675884172609233619174985394828921669725015562838612688997043351474705514552347424890917029534223160205822846362998591361676465279751475524465864899201575966092028570956987669534111857624437896004405141514143027019222679675863263777839878606533612386989581292389883183663352398166041756121633668407066046305567126903918769881120729236522659945703895445533212743691298465831184389590071517986049306207011026562202575691184596891397049560175054891444821521465943840181782750007487168158857999330474618417315182046322359423035202743834243416468506092355430882290605672951355536685373006237926495671889611719758487244798697160965112726579414717760172271705589116046508066443958663734865987400327637705272976235372944800720719336597236793490597732531722656606212973390970781911956993550821724561988905578827984166167357220035394142052455808163648013253086341213135290408021688900603040827387995330960176763906440181967068155745452397766063231798385307228309024922069209430652314132112264631511762244297090328053933551101558205966423863516069586660078450029088651323223323064107843301341192337753068408988225946530562793630218025576758864366640284505055756666560212171872685121691170896506951276340427059069243441401952947418587029719435645838506710415080685461334811225592887527360853188951947908512502020603838055672194164032353483838379895868656259451502231658144944423333441952332174096828283969619034643328626682985625381655023808903661821617716899481012441693209287632333364361106670715819882197630991253424331726789764982107375104729666371858935792755136104274076905020163351810729886200516137438264051364716669751964010866993681297939039356767707538284500471990058067021875800067605504167579805640854461415517972141600816239683779861748621623231412840739879131506038691608567831602626099636226909774968622177331762971193096201090736768740981500001727228647275683679013096583301633991472506283593348554002389446807799789215692086135054184206029198293356042470518810297065428156362743479514757486198579772857516785728688414736156040250630779548874779931116397728070896620258859573373647556712275034268516160027886005038864469242412362757760071276785630743071810021917423978779999281003127452958869479012401797557360237917723909459482676416909902262505768347349684336807548830050492200413820403293439806318256313817150450496567204481954504929796165104269534117387281914740344003227378424575519658420910445390647224769696858874222395192346291706220041667047716505634440608665950934462888287871173015831984610259183042441976684393321771393195551843963885775261129506465368636721760584115689453733907246806061602908342969337250524802798921542958648527238515156969125476123821229755968390052937844084272413798557280588370110158879080307890424650420833732383557954428253638928776121829506958019044018558512436397100999567290765529739314175068514924361380024247196699237113665005812020574709186765835725596816231348253029821972186878473764997737019445384622762892208912967301525609225899919291989274381129729364549990290463665292648842906173379302096054818937868506111502146060125241348337114763459834952936720796035722316112734826104241415683058018984567160573960799999008475220179046865333596948058589568597490889865329089111189728153344312222510822747112897893831654928682026089465560556164571709554249630932926264272812414855886407665522817549895546753398212776427928535471105143738165260776048365675601538351420638923734684647328495014178399694333601430168450168204105614082282710574897293360465782181148624004423410977866528137266507193782600016240056659947693865675069986417888751479692062290268089035603423149257232386206391935129686088672587730849040411185641766869309702063133889291694383075774205046503450872882900999181251325405815663573119803110552378677962220680222206986512718162907518618030088933419603394791788844622302524012215949811859902305158324306182305762333734118242682633635655976725857268699926664059251271118865183794669039837153197283048789050431361707960640571146504833125194089690949090570653512476721173183274094178762795858221316845702033464335752409510886184868187497977031971551272788667306233472348734560221316440481794919651137418060349714492546878594978569784400606750432988423378781996498654284555401810701791936663577037082469864102499764574704564803172056087630339908605908016402950646376267176965249429423095764946238637974431591105477351959986034636415644524050297206215465848628209116278744078471845154693178463849622176867964900049641513382966084437004624749783534935829837400865739048086319134961311855857137866774965220834492352251068905374616030742108787350006036013910940096750396412421127343396123648337740228479735584958039394945661244411119955262934578530815710256820373957092813644302824822976638891734662618382882599738787735166240905828702499467769432495729165010591243123682776209958359891256833477500345542469649800698039753136067148552902741564393980446491686578793207518922091132099071671996680761215489239830081386301490539848302612883677513038027006002838276958584851244268832991229291220062655748273409734068358116773466323222934203251558471137450976222840574517897239815311795246309596402069927208887804709798892589330844533227242141084328700225431146150978208388547129959062023090497381739799390114879426588754987155184820903597034059958410785980461248154115814600194880127458783849890269126049602147014572320085149217553938271577966851472766778123744342330531947658331143296465424141491914129562445007607511051768895750565951056905057671250071969447664993471648018064029787932828597721362890547817990910529687504915253810880610357491879477586510449913539744367124504905702781758965603974266083382453041839500434185728658155320590614708633176439854788749813598471674792131943491826338344318887037991421450667302283113278001180260552318305183556431889616105960980580186016040930159374407469611827756642553858262922056012175407142814352477468974895418831296929721201111815671607406426229143611249789406288920309049669928705356348069993679089647466077069150291328825991455084005643495723061509498225840426981909079858937888585164390083889792192095750049146205940631914202359739936496760039574700584442708927167377411466313845207147497957604389119695180581181293877020511310066672253180075813250367695300218353588430881279650813915538638781430001608407720667959556261274111737005823973998464664084345511737453422128156958421400776995270947705330629464644150728818137870687085974898580566477383402590579669531120787808124703936786953464283274651771253021885965246732778985037598623810741334127433275652343374719630273212600370677295643598088564398812093444685252980384452979727411111851135791875215023600306150064224506009375037755170662379241328362413638398623741470210670201854667654124834620433740865547561724204109811064692087823728308229676616862714171302835746222734170394189624583802563446890713391235132770573184094286565087511398997635529018587403380494496668221172136090833275638915048143560553846896178126021737157006429830952991530108881611158909610602545566554778079145643609060761118111686771665906105345302444495051651359997866110340147830806003837919063796824267626723912978020986913788557897998330988325880374501130951210000243496562606253702367198838677716509845846786079079749358659024074565038241221008484448093496438941475900063043371516932230050344827222759909447026393401059729951399056704423790013956405400331445066028951339232638662249131778480494487870128557414496747309050359506492397636429462535861309830354257195479209615795028952298683804107880538226772599265459448141968899499344070275993300421168002559641648246575820138911836451304030524770589247061361235183754205878931272426269905562473761574645538578339548140057002818238047731151165074189596687921918845943898488938419234591219810926016570540126500321692282977408008094705358300179227573596071444766130807841450929253289784832172059312391094194962383202840937020614361503647279078992679362176428259616375142756268982968311379438867935313116047087355989635702117392444465281072489749805552406038463145320382631696639252942258857474014902611597982412643420925805249133930232624161545750959343827521998665595951629885659923447905851324623111459417948911031278968254939966949174875142834856789925817264767704336091728384968968349862230578872048606257894765558947827469002677513561236170661890044537499798666840393996944230347865017332375441225229654137882979425462315215546983988415389207418245909492712764740969324334503418445131456133775696733453262490191252034186329457074744491096283376602223868987462454801453133573476732337674741387630870398891657820800586985290968149025895732271832241301219546699227177576913955368866881634595909686935865650809885520029456908252107397144852067399565884205458860983384121177030135450841444980835733710124528682244025840935203930455002400502999299846276617492918413064432628302807920599386676278807663316693262298293762324539054343979669737154650685903994912382563696552796651258942729454956272600914122478767870095419188430699216857382856692071559053379680900084040817403029642682865211518596613711853331499664210885596663149428511015400928016591794307218914635952305772564015700348389654304244587950062967038894863537487129335026989286604172259894174840504275077862921826940574903200620519791441112854789883487443886870082388025810129405071149297131908088716464786761303674920713535564101327038755438050004150668227847575287240420822597672433095238452771314301336647723882158571450247858467130077971991583015682334301055285441390274769041046461324789643794771296435048616346817977253421994344432526114424124536367681558188903473848390818152138105570430431432323584918223102113656149834998331867760710321870544057043031950598908271229739096652608154973944165648752410531827636739311868285386420104463305243441904597779429911210476922003008934639195029570173968393796070539008018991033417829884420417077267162408680879925355600201994485893956179385235153434986826228209145499783137834866203495331863310134982275038375105000352313269764227754362105725001729709944767683085463685910483289445032599695313887602272149175671873971956624452657076330888849522666235453804181281315656061581213367815968225110852771475035654487036915202259305202765881129505112671451158809342107212977327543294693092324098598054877777305614917253268205449711072263559997935825741227342499839970221013799257537776697038229573889133143946505622093750953766334423354025829402598572749392248461234152156948606308060344245677776306581273650160156852710741455825400491871287271275815531675275337367130647841545123184664974072264661464255161334548080912025918314920217264224907607755629495339137465333385154951133581298862493681396963551547561996027312362428340027459304741817836719193471118469072273642519064831881395380596769119194807439990984870210925238577455268404168850552738708627174469663827454570977165333027070958452140705250919152490854946533095515549304799191707934626527754783603853653999028791698210551347643758769390715389900877913068488282286764283688211378634319828335714534614222489344724309187368534104306428679155816916643489555703065374654557486223920872420052148965492615628821272395812960083740258631854221399885582486980320239949598848342458199367876317943718253253008812822970052115130786456115211856023155874688116222162386640084174769384863669344986081519517497514139823257625205763138909066325593666232361279291334237773662034222617924702541599685367207498732189780107385965516340552641324474533592628416605787723842012661023949851928480705151560653453877808553824919361834887714949994614650212751322282959782646263216987072343583685710373999304310085728854098296032806426768194600509747387269217158163684736901010175806382205328216505504643801120752633961731592395515443359115122384563137302500378769671730720176224382926012285881547343934925394174923933566222218316635706716617575203082355277142471303549923736232136050211678481220333977885979819704218010451706711648675501683831417203891308002372884772920910296959841156133417926376572741277863794417327393867515669490143586597860630437679952109155437850459721650838036331429942051285931310019569819140139491909535906230683112132883298147754433949805600945263103068694967407727215875455500328202456479276175066216765860180244596626281179332625870204987597339653149641458081621964651490292001623227400185147317479096458170992296229783540825738113626969781126620852605217722762872586483456345569911172161814151335350591557002402827797904024748658399179421151981062010834098360267918587578261208920498296118479924916673655641990604841558079612194532340747582919018740890063424410065084108839519202838814306753094393044352137024925665374420998540172753980261043236258902789690037018591024101735009762024194408321213265313239446016432878155849852099209449658190587000324032383472476716462849449616166675232876880047045595505982943360231575320169006826471275903748040322757979361989626340376654443090293795296274014596462630716568785498558184890162173831723114781785003381769821356828117675548385038600456761690691502259733984351506743750051280773795755221384483411419370057544636327956352621430781931699566599862844461389096568760433011690559853952825763153571004688741429853559217158852024342349269080419099591705128187101582889429441542078440269674463547307694762397423596159510437150018865518090413827695896071721603402681876259646254418123860333689673202384962943628540494420004265679191944850704413107583270462740162865037743115366410325747591879615402612258695848016278092207464684169623107621475090974933847985699969322862657991350652905615790271949670029868244776089579298449424164677302006948501455071063130852731559575674372265865504297825229753251873193838049261807222053167113136739529761449931507492340078362095070505910625636696608078177722941440716963541451086071849696656736203781456673465977972536168283659259734568302093154213967967590121432624873329907317566657450407292757225027892123959429814248702373376599154134446326335123134749562219927603587185893538773244287429263343949925911484851706377381403921310899775957524202398264696056171193862350530287730030364536353305548235974466782785235935313130385252869982847955417884983932665080858480938729611331796988630182539211420213108934082568469087130815910021902819902875816564272142764187860449043798044547044748336889765080343789288916037914248043525106744503708412986380252379955998731878713821249130773005866189123758339304294124103038264515324275868986022026991506020459738790186246935589139209486830806575920500371596044894127081674315955777903030397691687316760347042111072558818031997474572379805778951510441537137450838166991522907044090085249543595962938787656271809566748298029620312392525723785293078885011402299252496583496880619986731047492941080178828409444743004969752973039425834318818702948275035263824466670061647577725049673888851213642946669401657917870906576853378968179646528563693873313670210103558607921607774688613754526905298337275894396749408732371997155377007433911105005501557330220295099060081919061907901725180346156463105471021347847205434341848173422733082158015695980195924431884161147785215144053710045068840750812005200509938428121732596174457041865109741964192908873539767824349354384945536745943654122781296618431622362166379073468450291800475044807551294737700067866067524331466755035854938406510834077248965542619955985870888211387631275895883885901046758851061992480383660972678670200691089922936344231025297938585084929432519823752159306630259260923699285403429228009065850075939085667744626300824183711400720629380726199159430071353362954667776782908781970923252469725846771245739057233168949963908894624246703632321675499902871593256318507607771705217049573027381450290205220469830363932352899727205779031098937317597532719139436966527250426036755994971844994264600307315949869128037710606996855582490697676672188096364455098488079637506220685493292554161535411672102315157595174486927429963745026649767665125986315057656365301510493887797585109779337285136478453263066940469827108878547400462011871338953999178538094138575290144883373402390433016297520358979919405717065971729100612681658960699113509258615859366228638474598060744135304476276232090964888687987000374536352713979053445483135700855977861028975881003435935833529772339812851588563687978624013743289939217558018278578403359172973805379806727563136822690621783018012367790793271601673049525864175143569811350870159882202542999281036284526372969988367849825773668606015994949660413661994534025030752782124376896672277434137028905457244679055705927454160356086407148029771096339023723323905634011156291319309890236957936465811857877820872937941790991357982909692125536129123504922977285331931899084715691123837628367371440656371451676820882041237643626016512384553732412808784939388141233294807280502961072020212882308528563709294432108738409677578394693869817616982106955825091233069500314796499168247292164332073348165973158407234809418148112703872914609819950181413167026207531970264531730836976189937350205846494926361392809897925168790840391404705372134070747551610020951735090757227992613291884812381881875228449937933059266783782392777744439319732629687716333913216151711191791894527849891760214692240942040748266183166834780404128583339210371121530246272030198837571367858573641913715021906338290633677714381180783813677580069806375285413281513400080524131546618528001475500445256501513830608431473589116146237870161362966640589571832901165631771005975022806467899725330566514758525921455536742364144551791877913568243608890255083287356875075452718107380235070647572163011734051200173967591517947021168780908775546721256622855754151530795851417995412792898370848647170089396964042604827775823139868776897217016485425293932197780846757746887331591483147615622453507619119238491685005531571626030407588857468660878533676000514092110621488281523680507105151509289080082859005847866915387379419073929407177709415029214012371202274848475931549674766705511121911424408741614890226621027896106737077180152562844061142772339863893304499367827091951587774779619856125350285853329940157437051893466922698376267380787154936277434575420463763771756405671729719130944818855506613230830106549788784479798406288145346836821544705107874766405120636694382279338811343595474044971020982059085992122327841948421586233971941307893536329061487073735526940153047389587937272501380921329499271015342085515194889429022710986080535319982465701663652267400998742136841509317831226156295517437690938788363534957358239027399539074038150096796024070866020389098718413843876356935947743867869213041553251518374563734382769168481032800372133991127907375932054244232180988764067848948472801754037889250375553203180940413938570884032950191956848635188680620207504383205993286133632267170405097502251762702201402863357520264640337032366783941431758397983033268763819481489647343635807782066790358135196351007949812558329811488277481487238322182251729015673164905810684367479983590326482973801456090057519225999280520648480607344503431441248312309531627304060176106539974222024869456672492947871479391439350964920701006832032077537502338977266481413334330248261453236147919520854339205337453058577039884237849981693903306915809560383408159807716585515744945405826953272127097385917165498818337865815918464758785495773678025987967966170358055452172175392548234943820730651973205665697403551265119371345135766120977539500632229722300248971596276438917040578739375897894845462135193783597980778673935394961253886270062839684634595288436940288000133289861486609795636956218217012249842544677527782738670057671286802803535845800747896556886156803086580735523382233418028231565116355532427740863585198932202083611470279195866685708229803268805598246550260457407512796436063688100988704507882019535037789506982841678296095556928461535029197963003671956041549210176373645094376395969271716011918462196661417058845156739379858984455107732399420148568919673676547928316088903099272607430055744975563464459584524825769403300260830821383030143402703969978284566131240447568289231645775188483643038151287407826965790683688244340174674880705643065254159876718795372214344079939109949769806678213376541249638286549575946097873354411552686264391961157150301702589584441579753089272110032905122469785569364077191211625188736030212720731621912734179676803508284785277171582289790484003092103510602757678344148419852733679650155495685548279783082982866052780968208406257404977450935373378274315446467780676864852158578540675144989306475562729864189748720519790497158055080670033046005246720055160034370928413154508595799710439158601778233251408584869147647682808992857346548500505205433926897737765243500672061891431879624467582181093856059917545220455609998466769655339875273951959450325172031681720258703760011699588413876423473558235947863066438045109875330048946050210647479547407716812469274068616698373348128673892725144152690675050240731273555160668641962477741628327338102118237364957913969748846393868055014007210824046001994615623305870821650857431780088158797563198059572757389637745912912873179884111806499541612248578377642568170269202012460081567546441440156412859088815378079420672307750565215996301315902301223692095217447945600178618714140750329854625800821240323259634855418610819921126843881387462680465696885668422151731675961155416068141933373625659631898522560683858036826615772942103993473845676836811112187275444086992587073873796050185381021413804809788577289141234891317350419539090289626219217778777737680039590131793443393179521750886921081137265866725200322193849048177844269248920635820508734271597477318212294201112295445422618868973421342278433512025036152596845838391927533195677168345847423937599114815192020775743803130703590801197965788901150325199076547798193518840700395046527675727700603676646823330318905182579498670499674052241274551451113026796004907331925375299771961518905544667898158172610370287489977614083106683904841216010204688921047235715684771984825526925632986438649868556173914528567767561239322318352098052136251849695265956201046134364166037481814018383485188666763303109456926113319577532848793388337173327941873761035777604327060248041394661859663205191401131896823882799873462935931043357109447068637760457966907707402735562815603802560075292445151033834915192813377205981895740587182956747780819272892315417563618679000247041797299694363259827899746938887552636599499628678375390631094288713075900585545280927358712584976318146190446298081558657476764218097316817117641380568913432891446420157746028770146940610400788523474489378682687612017020342710787204432746962835874127935324410379825507737816749767635566497067967896459496531646225924775123542536708871684619453244000751456493152464119065605869774225442305884913852158737632098766256074636945037016779663454160141457724536050664876932638519493021759384196310748176796281592359008723905947540345292629613243800464273838040394544368750436906429560966405467691709867957815556324044599833141852500420377120668362201009900656432273258695530014663952641477351099651448439743808232831539010075306773379570421575439973874453687186454547644546241970679862758111702300303118535917314581342789371045005526755350294335824808198135408540824216275002468010729566122853432542664144905884187900501889293944815808228098129275391056507309556012406689200643553614480494632111056951673869469109814242289249615242838527274933610181710607903194280409944835641130765873895417891079003349052987890960860321945298351408952356111030348551582352218313121495380340056321316572776451886754569420447346838194641049667579822025825798960743351920869014573993910737079742381737362386406921665059776492370433978785842242582630327599645098944426085454118412920994783747586508541309983126327945872461802447172136470605137793283914355974414217950139183060119605239346520294286912054083580771934501376139619363717537572760692739172774342516903418266884442397867262934146140499892844606599399377016084214030337806210964084126853591625110208753540520601351130417709894481554757126324054412992853383737271224326137725063732042567268647895457958752700072415364075931680057443729727634412829047975220115176013471676260097319003408617194565920503406286568724116866264247711993513940711733933432511925065395088844747163411350917604312500193930092723790234435211603767913127151591365983133602076339474391625588507836159454342285713009604529384263717438009857173125821889186217941662546066510827481939288233623302877739936468590512059583248268915757604294393141320708266613148437006027657681789824214435938879388818967360942325786354622063397045045877770255559836391206267076108650729173717599041092350862497325488583309944323516063496710789513315996126937716248896139135232696000616190011071764715231346260930629507056210080134907941574333017523461965905289238375779201050513007514893028597816785998594265245018974781999319006802582571055531183673752530057053710585449947649758582397094012995218331721925481646877241012271160750861582623408197807271845756924542728858210016162224022323559940185261521613329024954805777583598092054954759871748697334906093391579385231415148796402242772537628834586052524159812122678706952988328090906815849068586908477947527027709121046213698190041162349879442221220482193660573077228267220494144010343968475629196638584783064250638090021632850597619130931841122729458447798608869896566384577073440524071526367246041064421350292869993682267895125855950778342368973391331170128476494956225588186572109342574914420781918223858677094474164379405557369430181965932054132508718699405013875960695080774886947182473392369740568189364694531729451342450051130684789747585215545451294880933916833151209352111735849825375231715950065931468315861835385721538913760993254116531089958244628575134749238580390379072229214140803668824484961585971680575139604653526736915010013447175653304900380683639324589546330992156907103798351014113738546083240230446560331502537378418987446631070829478935070680472995829629291309042010210139315859791394133264054177292083462301152869322037754263337749187787761371898074364650621792969233105138172285894853711277499951820157401780799776935783748726996786655524728014904968364645358020777353643704412442860994303352237848196057980756114812378909159434533605720345957363389898736916180162425525197146024402846039248871636293463936776910675424097239078223723388078025548833416278663636541913902059294976723203078832376623982521235902063046173472291847790148169133267015543888935509446059654884670619688057115030979359908280329617494233189596651678439607108930361255378218322812408628778165734485867301043432437206605158831695399792025595718679132664257782823985580151093674225843037736150881591306883875032890965925705139333732994524298512284026626504431488173630778409738093656527413179613964175378042876500384556307144729328370760709511831320847553305136681429847626943249665958766177516662213076366569554491697509541847406211060175837116535562632408048805663063311771729117173696137653774736565782130801900307895517329797321690064005940822037131721706506040607126779069262389678070119139761602435741545950417461651419027370177493567875062496278020763547020743665385686033383893713512294324015180413998956714218590613589549701266601382589230634997658120224016032988234962178217602872599178889629677601691536639644919526015946253342423803577921709118372214997316945902069232515572024126929090377494463796320024110194423462805235293118349766069236373113592497834861951295176665456112651531814604652031002727118362857758112039560936673991086787086964214823628410808694461482023976667387805094456026297849743581857382986273182639367095581592908578485775082436684919856634434233352964175570379596734536191613038592893939618244807723783185169640598225467352539720447819806037684649550294526240994453197119633103286321398613473782847323776098796525190302116107818775646178182075861725063067517574580691341721449051519971690856624533400128334837352001273236615556672951834383648246976628251484336083798433653489384877629956668173793179386572721691088380836636099604300648886088150162659787959254808178801609656880213514931370889523205786993533508520975829644150212546491511759916173792818825970862784260764474902845805980671444346174479014439288991206014545681183095897708494980076454247255580174009096453594427180722978305846058911922032847990502961323867323035206807467527554744132215660324804897349350132105556194646337864824135366808697257494145915395872039887605072943844624560939854674963210853257823509662637033515476737019094071415088734565546928703183633343735524211913055799861145233125148534762638456163988535388115414135803558491683006182429635625546540604522964866483762080897472800450434856883097006456171711949199896201365570987292899372642133440228681813605562038567220780562628484376569009081488071167298703150387894713080237620533992293672011072978520170517044391953988242443670808920375165029484533644404220338494837239922922317768665341956774453893280615039357720233901186574582596139097832994619736472120070632727908686696894311765112580057523149215324957960532189302661540822278789848576135049309744834139405731772443256707267219133762081759320195507719665352813716736320547238295591562705946435236340260333037099724188650845292721656211464369171191937621034054578258683432417527852635221287322020824763087385706566761750452815961072057320007253554714809870868523725848189241281407496754207652581204166176933498014529954774474762941724978722621881980192598200090417698956676206633873952559791718397413559610095981178380504250101957616610159799845655421866037242063737372885664314522108874896590163654838273952188199846311465774965494859407914300585613504596376770058727958852619150746943724451734262908479779290959982203121094386906676822592405365850799339889953363742199843426306349979107656650892660885585006943462232432970332768351411636765246465019849400123710014543170076520117222803676439853337357776906785957122566784906371272340822104904945587479740664296092919374816042458530277825864313766070751809694858188595588576522332836138173017316419283422586541014248071764169392452817168539548264104161449568914623758122854984665663251576910227930391997765975455471833168429689868639708599202410676019953485323380437997331442500259815628191763083568716842875112430462650861451120012327789988891937287202688501945366902067018674302173621642654461835712532645546869327739261276065178890958530732548922607346204185855600623794560392735234345441981444998970943240277057653228189030011371217346464494650511364065413042759379623181326118801226651617173243033318048336833111638939829277471090930237582920693706954334153533608326825998792689729869644287826296249837046924646719531345586760111757078461716451118774430464015325446052001303346510855188680031721290060967389501730125414829447003814676738145869758802486436138966867737544661713913158310736609538892264199531984855802979456272876620065605327294801192825907264087722826055967366954633060346722580588156712746850335109254327868100049049721882514611254016923079256236744748552059780484625966500908544609844013588800903089382890300078014864271821924501893236941126589604991750569086312672782062768143674945104286940511789464763364552365053519346657213340323449648866365564904710421752532313880504729299504201206222282986568025170137207443076604902713860687753999837803920810262718670501492611121967430942870401042549948878880287547202610230596378628708885888017593121881346926281759392137887491373219690495607554602787726134769459746250933889337784197228964826158436082664435494866541585941240082927373888898624686022151044765493783897022916643300677158191083249941087773034115052600702849259742204208970367859297085985178329192930299572076093286323376661867968842641734462156898597527545587488212883506054243453760190943466490013013083415009686362383166067821873779383271361979555078749411282049313877724250693854039097314146587166695085655967652468219400431842614730356270133017106464027460838877020116370261527898621936111557874363474084974338892480094979600648639358219813582845145852042565919337577290929179827938894786131012115459476252023802368567054415252183083958934692720641385750568511586542956336118318321942315108600534282100161408993139520298220973278302026129972622428570598208064081696293256113816579408804951594717819708627182876836841481008168822221890738263433789560775442014887670331019536330576870248775553219442662164613066013585273730729728278884951985559743183721907747882594873399034952432435549724418948680327851926235547424482028663792791389095281140113262959718523912155456713507059806389350838718232347835522696324361437957793862125544135451148830500056221696226912362795998921046243274637886036083047459401373463678592457452340215451724506606438468892716251113218819135867975488820403620763677329032021483938619601666117846100533984630631498249897825254604833399922440665864445750054388680087429339897252912013386250994031712279465728383155425176165886033384982410606988084009661581451025126197888261182558155785414649282971479582431833000981770816270332783604977393538374302435092125526783272455261390529166424174985654690614345716594380872391576868328400417181437085622168330403809640595676055818910229867094487438427909559605053127995547392231857094010513910724322592440216449406724767620673564229626112535253910066278713040761900028254862382196103708307298878808687539142605285828606610899329179845218148534965519068349947608959878795679478737695749799648361813276290382104757769765969924175419914878656039767641493762020345571570327242626840879328016945103524878729272147021404354739121219002724586410695241629157615514430967650302643400447317222613919719039690503097246402424961806350264659610723487068501554022916316042022757798528157203584730240419021237409195102273042369333641807422078170505346243356924961119450103416807705584863576437050125600874842417877092823176768853519123588897711876311793763415900659820582622187883239366236429248906277019760674050168079971794751227736036985330825973934125535978170525719431470394504239113621407776648722559569539860994163862067685338198802957716282475664593480471252262955589141914789558278594478956142676660192927694436341746053573000677479061104231085051497164507497556217386118602034256084689679704021702800997607068203524208876500769312022106225205118707685697464293476580957373775153508168846573580127316591149308786191421545659606720454515359529359989112416189514041046646087250935663189138402871604642897718108469189929433755530988553038525884290391317058309914583371564542389380137047263595019084570402663170733534897664508628784785710094072473768846704434437171003229798113402557597650985467492002584086061345854668214323365765628866085019665311555029378544700280728979243318734204963175064730260843650653214047230308698477489498295790939068843521971303725677828894609539769504800234033400814719122395280772858920940852891457750792869100090380312586451222187482068488440866143208279465090646695405898521099804553332426173341975020459594049624145886041723462015983805789110313549857382986907475832526466125003992121768416409213134709912435951142253586298587177970162906796026422908860851989181391303793907939860461125521935641479482422669436835250523667374094063806146981479813920022442829516144953596202334628753982087918807369894212968182387364735631975312324565970931188658234267939699815204324244927898592157017994492622620470570904743391812005314876135923304208042129097789063907873794743660121961076477771688822720305377540693249429321535008352437909476906091553139007705084601660120914476994942886090155470826610331830968052165478949366012947020506579078437028094164669105734566654692668891488734840108696015634384949599328802243980883590562558667618406253949388788944691190397695155742721400878811849112266041627153938256849019254707585940480916137258976655310066347926734787929877272240177991799155096393668167189941313004122661994482877345528935153979341625330007261827801517770707808375554144469634214483267518764706772143824461171609079831803821233108336900209160931414252957898365082813174103100022458517259126151563661080365687546147417408600299262263749967215514072145246130280866350240391662866653150232376907249214082675354215220500845685917587307347676546213156511018883029858782030747865026542885558516843879130511225411275202643667740916009828280216400198330821001718275546223109497980939234373006637971571134365100489339881394496040865045308578336948384804630018158182171167178501264691695035428099143771910345639300848316547644193875248587888378873973177782109285660719765110359083223302298199052864178180438530826817460658563716951108030490196246808099113703427388005566175512540040596127422458429118869982865775252753962421683396274157213745324793882409521105600284898595167101246294042404683339605486409676495393746104514087008090252494801540450863106184429060537262219544281633406916303263821721726209161514397941239163581586427343153623662631750985290455795682973806839888667984735108938675852881508946488817154344040167913703767348468513715885762199234790300775153485081428781229130978216712502346297550724692554722585977828726668903462287038586721747671986402035571648824864849427437268415629184907934261771862941985079177016865993470035023098389004641016068570424324661462621894538281710451002490396014596343183612527277511704360633328406092415824245764774388481911280717506088424349270317518974615349109672992924884702154544686026775328172962363536959155050029399820773528333260500985213611268824179044144296165903731948698003670726794429957679469217516586269461590032843376974368058867073184231110211168356102468663531849758203405708954187598043945963630975442512366811942454728466602474878079717296189662363325774059556858039757597477789548596172877114326014133040473490615645155184040297803255799510119913794522705928427100588651948945407510057133522094272109722267134645166882248671485302704507044969953533393005956035886947624163232991681553998387156510506457548241274845176637341062491936898721686985054248783356740762733738330736674118509103827634006921629276750688955715134772927043753161889991587012357469473747218810170083335688920457903687299509898088336985973294959797931707328843166529888327344552621584122455556467559053461288779206243570883252493663987286417215625152124488175841810675332713665105108133692338573652668353323477001158644433190707078733604829720108051062537115818030472872376708475934518990149004152656659756484376961314367465216962414563594783432629275743745083438783940940656797166170982764176064714119911883778827095086208673419172365383738625611051811944214989806353326433229853501429476797357212241300338998320148602142125253643148069974889283818134125642565122298081936634896964808432349934701475647047556867189772002870318334029363586787980874940218075611730030363916347210356041577963195734316095859956239203958223820637062874963403527195951841865029334569182856343229398311872923151116964447241422706326623335593029199197325731733420471288662831379778247019202020948482871301655758128697629741202869033984083343295251461373899275571234809518481611649428597000123356678090346913909525803727483456505019101944212154400188957136629079533965291775404387502236486076061669647779947114451279482162095185162546812761087948319479416080176604135762228126530406386382656532339064017827262376140212045429323832388898699151496896506951968261634182575494675186384827518326525535925195096846273876669548179425458984361008669288214870930613546520584726722108702083476131961604042584185825897494702625487297288011473971189008323867639814867675510532310447540462356939357563622940875959956699092409353157230748411764718303391078730674037803261366915198390241231851759389431208674139720162274426614318834951313305833740387818635178825995499056242978336480610320904957995280280016041983190623490871268995123133459110257749409630586980821029614908839600137679114244682025441152701510724640479733587788070617367975960474240680564441740470489473422306166508188835241076602636557529316924656416664285211484775624747041215930205610567643733427924650841170364347426780533361895859844225845754567374500208419868415044870762231555116250678707370962007185560516546136149273638695662471401575885878984488169708136717879195471270588557311812897019095996378327392420041219608747543676892289523756959959856901783105558109439646939705650363957320037496655817265449651433256876345141215438458550138578342894486523543847461420501910829966188006968581704312946715715427211604607086158008266961746700410031114393008951707613669302648732365747262739216580094981697251272407192982432262640291691223404438125623065797212714132652525485005689373572457241025902970687074413960821651511342137562944577155482435388066347502514795014399751683496592004072410997496043071672297198496945801378249343538641812839089176200261988371525301507229559249456461801768749770119263758347091043204021513173194349520816423511548189418300593519471752564669655425717584208536521872427506440758009479265802999211770087564108016233984346365591648417789762373465160955754723000845464570611620088994341044646217008729643266363158262783858916280805690503658246951642639144150072698238181694004149364623410388266903197016249993320791097331417110692993445778316671997642690422097408865914812167450151673767146545446620927167150691233985127580276038754809355371308835620544714111045774947286425188066583874954214360972626781116570973558481839057109555524824051069870534071401564274061079592847464462946137415232944808664871061259046136577959526909905303018071169747833523771236604882948095207768342185654583963636041955981405676839300014910494333835079926774675185788341470774664428035075030770829247637960148085294230224554798120662955772147683123197183839084617313503426433977908536665271602632512386593233746305531977540535953439279118744124077639382397163078941568033378553007636650148660221677034361518321943289564380060935626458349574999200518724943334155735708510186091279232556017979664867947329784745205237036332657168586925646622326603849100642428635853649920012941317916761394600335323008694540733073305634087867390960610174706500836606385198807661394673804810663352473385514287912897216618711144149595189716437136853249366627124502545025533333420222491165092778677822841607968277187184807254264461330654188552919985792498931052663411526849275687101268201938619378211770804460294101550899957873645124365037302087173124309900560602691451269466194713911896345979492038085776151186273655370080766534622897161957964594247105713523709014873723143753118334964521908982498660771850209444491402891497429459799117111415335044653315869379178774206654254671930633449235789339152935878785875885525790286183272755752303920567434077527033997847318379940304026810633734129706986364637360095140339969571021219383167165494611828342289968949163915128579922328883833219981084638362697179955721289813076863345696118632444313520967962838828803756244184458995538680462895689501618483086192655837748151069750399083458168098301445678802102882344549844420578334038103756097071490280000332911059313260315742094988945948960851641035433606265789449805510032473710565174267419276453851795213522235744380523160139689856530948992506766056460473126214728012520703629528689528958545917409710355313384023895337677652774916034713199124055577391449269848866306695062679140104234292211338283262163952626345875066836471133368987175092755372941139652182724374199130913866783065025526814700274454440360807151811407472913706675926784338388462372229467968002934152758908336555418426336484149014037536708194203593217695735431918183072823942383425700942768863479999291129412212021300913891735317417730523082922622901674530348469023448585423397651353398764159377978929103834949063727154985073400606019146433791777619987870015036789061033827420941333700189432037050535917719701003832038391962005460983579914889978303869852508184281682830916185114346829209844705376026144263809939742691087575434149290800377393465399311754731739162965182136261015450360101770763712122046575687921686718846782839139407149806209397064597490605986018563675787061639781678679418369661635278244695751044038428100929603777302681880298662399741655110633791787578339609275964345805096846697647052513651917599191173904071967422217885046394571682520312558078170825261302726285938308874941011632740954782745915942851434418058031589265562320513399817942010685265628548147497202493092542348662126034262144543596566936022081780910413372576473164282324782921702251778435441126376730207205803127629360782918371422493307107465486138151816452004601377240770385987175217182805309203990877099682699622410352309386922493503295583475299939329572138733759595276354432917873245421197581222205428817427438274012012064320718973756316537088243289951331445933393432679633881183943887218696830537558080064540303326659379522323486169166757474598052103062526474476600750119136171171963011910812417013304941926196226761232953326172224709048061223526691674426266405126823065533061132074381637328724275462998134782301100300657122000207418759975069632131056100564638718298515205417567927656200317581275436967203539877439244390201070952307098673375064292027625100176158447001662302064006452331072210178624557086012907410499581955201724264224468027686662628989715003354792263023625439720786599381474708935815636215853351345770620351371442253960929454801470030913858999093003292712526558151329707942570520737541368272283098294241272562330047721124268484043031509363519419668239374719341689268388452615459243014540643326343286697628896430994309695690723001252133862907087356869036970748633943044355000276297668219359583475175536226989610478655557503695255126586623142872358651473793452399021942845529615861885450206762535209151946237739521307621634768993718647808960828726858705614095768901820429478972568107954320085688718148590446997275232842428945314292336260493527253188050345753020036972796545835501667173984910224656562095298859146594404462020090127331335130447506078021595831693937999187409571355559875946620205707117206944482360636346382375107036968161819766429847132312945705818952192965631999943577183483862270541114275414315264201306644291111736808757737893719377275885004473599080625439100360267401484602413617808621977222000315779810956030718043374107956861984722652819061891242470817468410557509907152505515172275498317059471911333886352375580647796031796978777156734697714161066599537029699108666517048431069787879587040363139872879278380847654498548330950081981426391441057539506100248631864382424298518293642600190090495253190811227050537441136805343074194276677798718135883841304208054869399281009610724199938124446276212235466264606992609063354356579755350642370195338814171911586845432553512393395997434576074330050639230925332809674405082780112439654192909146204247715735198355408989730673179237019823651327598645301915594077416589962020230556640511369070337457797237634624231357939790845927621277307013671343084358485651043144488689241314506125761214833698805735295737509364054170065421743904558334514054025875291523633010493671570301461312259325431866528314113741711993628798278401338648157697815586850751385207587353973156593970902752078868356403943959279006852388424414679072735015011470432532185978255311159535808445980993250645111144869547084857254712949135918349361395424392461964004666588653146054466601071666861775529241394887985648538762713353761968421924594601185420406029338547227407499850645046712269167130718345627183371358463424194990837190232541701653440092983582454166139363698196452676727789884752018031710697111148809511861599170218113186575409683397601302344778997431560222249603231430127836967877781090518088436422241208762744400168508891716219650303527520607934747943292900136851438413857844968025135583443101403280475573391754178081687234068221256001969411362216357181499843850193756001222365525831634733167506839740488868010954819332571582040664122907474316316410532691644247296613237755414708156749950164086876736797048465369902370345876682595105360334009804530684960006453351394360568151640826506229814671264897699571892772556392489051529937338354640956672431611403906073646627209772800569504290034866366257376109536592752370396847284128999342797965663891614055520061278643667411772052986656270529259969311396412566405584311384392952213102877456371602289260257857277636578702412998682505190696585234326956888230943418296921536950880767592370887950989351165335185376090076499056653508350298365445116635877122524356954011424858902333024566383303081737201367300758108136766277515120913435479499992506319881638740548154452434197799472020537809695189456594963191406883419722616320295358759890788611251028129579133823164317375021138014366912660144914981454219952442899452395811036547693571415378022273246140790620006394752013544079584707436287206291638632642514922435652820391859191914618989582643441129853441998346541593373910861196415181587462171188865979610620647983727423755997096848481189552613048792524869232286919171860400077352767976404678858947935814162055279306010511531329684247849924166028125924983255394587599176192939979934131452757069427773530509372479283321490869178935929668013117616425960216219730566411502900983833385158535301454602026154410581446229347341090663004140421946049665571980418976849414729294432294263887182453338794396372656788331030236892798565258838099328774887584988287756085702708824653563870272854143392095628151345518520440865470355678629017010231745643946996343181125439292502016954228131965601365725483401883617960046875784561691152310027690012109119474499870248140488304817585571917402848686352130908938730042132728713139773559536435808579753390221207044066969588574681849178040139303102716487846893808503311187702571578378101102422000091722286440986072180801146835897069245598202174030426161844066710151829651924919416450849103082899221095375070382799758416523044805281271498533445549208950179139892737074686647058918744168981148533699073568711327742096626246975115405155847528540951592785797133223046778566704341191997504218511748673522638537397151117339861660077339486513229871258674849598076827348974554686840765945839975596968138288509339261144134945804690489490679818390271625532356986841081036632155511217620773574027710148214582730088043881675291063904881421802988131737189429003972190324018630541874446220433765299545548488628248701881334210341136471757307984278800154433280632322321519985448695852637065497636500852442156511260170181941535287802427702290465374691269880976935329948808072196897179631025858809634247441386462302119693308424499291497767508548326613277551129156180329661997461967952536322592392597595466691454851151313231193416341247892770638849055654345385644698117243362205729900005335732334439264383387800825871421125715703042503900201506913914843031878293037145225216835436379058183677541922124372124161331
Im: 7.176174117480456743474539747451973564247600191939163358295485308134745605813970430800490158567537372865292137897039451999603322155661342569839577561831916124241896115339409141592687707842686067648185239636046898892932586353608004833597946131979344118154118226107412152652008960547018607980637949968370396923071503687966494119046114113000972350717016487781906744032523864575174408591737590090227570286608151727973279500216202705369661276382861133361395063682900949319421508648192732950750334318845740387078236372161482608390262488184348735607719982329288625875226752134915292693051367244002044310325056708822482846366220079792047004643758045164051694035749717936718927504328076963848062135266370927464029214569915744037028873753747654570983027946460337134735877613927659763307393238208768952752239240147003277075823849088063466568137344561384492228736429582870268391237159884396923252995158974692248445502801051644936290134206631458279191762716129616602303601216675444063868023064043130291451784364939924763570732666406878217220522854644947282668488019757678251044802577168071710541398443358899094100153428784111652806110550350979109985216560589913738730582222245807375553608994363648785681171114608908701000630902651955413776479662491133690989752554817566644803469475264345001167663929731690426080913835562505877661466142293713896784207749230519622368829713561439797416531385979453339742443493613714488742620628792507059071258276696981767012741555059573847620351812545165440350253596095916698651674585248498432659725779730577072359632406497649536205324690589742294480044163367256610217266394089186315610322754697952525105827386414515891380972870677065497727188273825681528085791211345680108868579785153830159771317409802491038296836165451742603573799786892034818274566299093328994545354713073383265085408828495035977899396194610444727583132619009569130482361381236554796141876209088720069724423803002471143277946541748317815205353880875524043825280115703929204407533402138235166227264652372596736846240421865560335670782458602863643269467493195332290290165876210847793753601673599587577466467758058657010068187771411094376360498215596462720205380864324594179468845110641050094093759095679755903470105497397965317126595989233373946899681113071765961784386864467239375134726537674236276329041349880168073960522033001063545468016453004581622681947949850059330224546562648786513674197929011425117883497219361567811013169382583665928930290634335252997983728690048243352617299418529851875340938969768465130228549953547626535002860967263688920927226473582417763730919297498000271466685060415740128379682222471236180308973702469331966412908364690580221663463313860142715091667983844737619952730609122988819380838349763384349103347581141831477107386980712428553666446403996813716167134520469942309237783278420207212628198528199239677800394186376128641539323789456582140623608795900283220788613378501986032498530898101528609563058135755133409249530028103945555347774972357547151083524823643846960626810132628045560612378851211387252328791980173983909570989219164514231750040450795012210628080039641159904987907388652390856952302027799464074510065945224658446830959655522749003460006596756292692962516118320571665203226321800872255445996799841367375882000593983444732581579581017781697066628476772861417196362628393139544658837538241798505318309902824140466070756661867989574533242862605700612258047029864473872483992613716090021545712717823452835095027288256744120185641800064780246957396457370582009592309488168122795011240790291174040842119269275932498359856328063562380841768665748678635653699647554891102076262269953314159274705434704610460040757163012298372546353566402173115339417752290460980457673320291320147980325601505301313992087649167859268359711937211628209648692297408510384275509714748268316949753327136719770133556468255314665698980356629197028214957916761106573351801265165651097005374602479417419862968208601573858904821274737898213698980261940663686766662030160063807169488742318784876582950218098133040288265614940471243723609562801444563935085495289048833694701941168472287779928431763545272543696190163172632502660061661761146933418473565087649435793079536864573179557436588733071534900992464859551899911090195517008133866295355575820464014204924268246043240501585794180499598865852904073962255773516241413109213563857298095199644235695690216819132070986197590892696872720171220303043207180976799584358881991406495838346233368730376980077796336320251939360288215391908562306859695811415617473975858849442419557379241754795134813284650537850299948214898527495572097814472021986901743546716802069486531029659562728613291777497464836978041845181049719097996161175611491399744947797812880989749412807537574228009712906899321533187436102603336094881044785335235428419454802561411575243520358240850270764956834163447756263693396555423623096874233076733695801892024701832850752070190882262798420553555282857887384205762695429584970656284008159436871374188021531073840491470778651109747447002958625466263170205442574931898328704814595422955371113638802312868164014619786067049479487648807943857047695498533218840410556732758540368764538362032660159386126603544628372416531736920453760089555008525810970304354629856538894653362311837138413512467468618328740324344725577030673565859465435813302334614334003600489493796232830194429322065723620432232284589190357984880185946552579027061603475558521704162346348812348460670082785008573957288588958871338967362677336310378007715184978052455335297282823934997383276977800073376244083848555719704586287985241423073314230315737143940982109668019381827222250703323418502011535808542782076447782577480694051150413443993127621277640966832494750099347227102773217653932943390878387468657568872135296439451641008544030790516460853555055943490094625139553027749475100208945174174277324001649808284287332034761380237351831214911667845078960494497604003962239885702107631633067949776867275034103480995189769080329406630997641240664390777422318267271720647463362564998359376253440645151470241575734781313803408799186916890645261161137157475562987348395036347764238413512017348873577171191645512407830353302689667454105358327757557427843291392477421614044435460191002527457575883526513367579293716576915896305408672072988949498568175211173844803253117108196568214042692563514874371590759992732296106116274075818678770253511569217150740230788172677285619313920499399783344576964516246285187997700466687582588028571792983117314124094787335721350247697582722263758800211476688753007189982101615233156495662700535778008870942623295533470390230561690807956843136922503817270586689587705729244862446372816267074284064905818463606481354580195474159487332584491842047580600952013764975665710355804606673208762002051222544061778504505031255124148872214806386906265156394527978987678860678236168172582265330512154904317767885584589983618238209195080416587335787186496079470850563112894472342995068471047662150464291649540359697540565028515336806076367555989248301450783305341555383383431979945073651119631500617540788874999730717966738512417237512896032284265720192342074195950089073211613701339440080909915791165406044269120068329162137815036576454091368242657521096550574225121035922019909353555436142279191891716761586161997534121484175441217686898782624589432324340968468017869521042959972101079505402471852510442416380358690979306189870384654940903655172399371436109962266018711237067477886651018259420046676500549043173841416274659827247309018407882453993814959962952213162669620669101172581297160501217479969544149621428758078872859710273866215412383599963056157107233944206748957528431814343333464916440378206858478992181106284639139608960144912783109634877573454725546292437538793566197662997930937670498072037685185913883326108024165467862054254660339944586263934267510897024748092759489447532266605495986235353384199595655877803232931967206511340480809446045231653184685258418391169263875785477192575707867820344180624256934442490692910683651616925303213846070457787375157520906776886437183249778796243165500682420593084086461511982685028144689557172658521365285921903128780862763092861344848732539069053878335591803281600750594784492234862268114956342114825538206840477603616672196208111117710774032710922200461157562160516723916601364017854746908014147953398343894212786704522558124580316275378193140282556188474378183178225385383138224068355024914252631940954786722110972028369555157865677299906161221122663483818174360922052258018305084796356997186990429440812652910404455977346284130731680258875102196392910301882314290509279126828365147759686013017345584201426752524414530008525026142670698160160986442205843773912780041771884420761814762645639487339806805603500220408181455022674966648281663562820471961115667051044604664838296423747583765445979404095945098419975284873505065571937044658104783367922212992291561482860753780109203627174919481537989960086210815262155951374157146070350775914628054621813786677699543909080622299055614841558315576767013996467398568422974999501258216464222847126767925781924243773567048041777055944913344584860046775450225279393532052910925835980413307721876378335091990569996255061038987886782180111278700216444637171082395410953368405652923050114949859211778246592677190105084368591321978848981980942266725278777966829468391846387751496823363066886734295412481670299015538183387106603770281363383493768148858786278291950202499139650629907676281662444693393103426995162509938879590797269644260677485324234433272322201386341149787823636698224320366154388199975601251166908194353859805957546712207655757969665614111009783681958799459382154855460863744130058522861987509349220384025293964841643036720845319339659425437714861823425137888041405287556962866334234883765690391949882178607837987208322885202363442244250067567871742435197751694352334526539833556279784503817191421261745426690614694436648718947855553064747640118562405078186448806608866396485358823061337385968313347546642926167362830465470910429440703622828239753151234180425120588426804537194631869658740466582004792159622363678152107561065295297630644821555811289104030768740394058137507274561344772512609356505280478559362081793860747405652951008230413403505734933484264394748429240775892097872919021193234041635353767172928277622682859083303583999403766460468706735282938271028011127780956919090894277050760604147999787265496464927570107048290591101353121965472433896289770423424562040157657699545383375817856581927002799546034280353421260690481639821594012863305851627131792894055359694999945421386489172988568143841860653097063798649925261030562593420432495171879404695093571330364097647478974822055735476559981139835990815686846984853703058326785837030737514191926667318602658175681742099859199162480275414994887419438925551969856542894147447456837336775214672699414766985394251496629856367487730264567108212839060747579906495321850001645442453264991255696591771608470175874265253626896024343584187165071325156592982877174929651042993721063759635807981032025397379038950958051805067585392985506507813306023785728434666555883243891314699045862707647292277530328073770210697425815205931362094940074740877252830066904119154431114926895916504847764358192562445261473425124082951078959622140391513577435645676819309112319646658962593495538396852075394144998651243276823099298606600934644189739293242486345813964702824050552106063310526358578466401753941114750941217760406631025616301390867898626654986734773851797998841831050979010233441865863291970684354529015103648939286625311430398833177841193277541847779835156001840337753081666545695340791270991830757352807166802305911068040476297689584968175269968463070893629348353330684140032124630003736003130588755526446171859502687583677954700656340374578370405953228768842043937077442172905704572956937153133792684482060435283600070137492571399310387640835997809232186335033844885632478975121941613196466605647421679324473712864069136318129736475008472167386496436818600657104820489978289490273036707821209188395280224534922579851840663982107604195267819484752631237141479051829488672804166794352642590204324398584157668854626536405212045025091699462411879531209578880745898041200251276995238109737976500766328728955790552112500780304174961098552476872165469998748643693294117901448376113511288683155676127945426830397059299408415749209953234859473658033849061780496217795724244072283410443545325991494679461452285627465251455623381534697618505604817117112675183376143024706939250595727476072727612972589383704677924609971556474274714192124821512391831085632879371590071567334904874361714688977705252808369143375759262651874940495500894949661912081640606542315355001975780224508195695233931368319450490610869203886125462835394469307769044263455228665551063385265319752541672987922016589915054484202151441499704796043348403688040066804520350047968155668515190284264817363522590814063637142091021840882020521079891051174938996236824107940176410445504815329004402512214110644499901623009013157786189139824673740081569283263692774283173552744336831779499068706414981288353186154058839811536911650418531216128167708049873788790421260946336875280335779918591281980858809246995450475878528511638089441056424495535617147062841759479285684737830621437816862381732405140849671057606075858109548922449809326463928816675955032578560305570389028335427450912016266881660384655560694142770121046248433377799790504000759702472222783308353035190052385126229902064864228333657556390186217876096264207270454766950006934886784143709598748175529054366307334517641200361330256494523666662113249009803056410962933250042128947753733734794202346328648033088495745090480262644165982718006815835236849102576685297572537930984023487325635596205753540502176137828088706116231408621181591863455087810509553768749974934112312222621718835786180579516879549772617078688894552096543344353789575811459579672155531746719703712071980003992822226132725602659033169849190264075889307148117647748300329785114767732144117072431875251443661104902337516770752990886808122446393173408862608980688363865059149365495789519264134838637741090334344229489129121296076516312055779462432395949644957843956746771652831533120643833401663950148060589264787746566451721195572166748033376443443849774946309312987653243489078142418619057633123602446666882173623071742392375319640654508700987012318217128561666307357284173365742584794640868186811510948436469062467746285402896695574895611229506343725019326313731372302769539222613241946441424520563977035800088897720905667014548797554462677603486939713048891728137293728379984937857122419238979653544331226027444779292965349306897999371065809144536714448346868905013867338318246242574771237853625789528674038076186061169949819911045659852173283861497931367457259168025552567253514970058051058126233926756598086117220839929571970384617031157395246511796689372535803398748752991639154801740081908681237171605494526652278185196487473072476809594907645502806847624092066516140120059512063662526147822691927084047471018977860727093181528272897630079410380038043342384613427253131939350556772820872277503470650022036374712208550523654476049956350634145236584149774873359678051558000758961430836470376755205857094074327979028514780945361680298205954128421705206001844642690133293820887217210224843381538128345765200053776138514329464785502968874299812571372358819610023378297810779000457507455561000140928947072111017117003946286104734578512033720762651220998021865966551784481981255615448220115719123682930022633743709653089021020752507758330851751115662915982637896812363796986630961633558293292189066888898669559261579990153675759587277202334695963205469894531189416108242694635895531055731710008679345403196750824122649872295652438206792180486210392569509744990824003521539473252085928778586862248635611355459473362287404130979619758546622711893405539372080781741232283941690129378595885254788798378385541226806913629528608014969912306811217557861071718625546351347786005982031786561024335928416214216897397530450563328830509692018185351827348718270003617997444987074339811696945761112691300159383047177410553202182349886780024184360383742697782333271681046615863171288020877453840519694683085506121249824298446367068305401658812286576347646680163105643087103755120280228700499721935390775927459486776127835358804322166401613901716989191595762526047428223843027495377710519062989826301573254220042637318296118804559888369229581273737166392714207239503847059431574623057708387247321727185817745756676136901054479725423241889107042025989563111100333950962172527474382169879768560975801324684922285744147249644682905900350205940231611762761633671635181413021591526226928371675347369159562206784449324600001826916024814696214863248700690142347812417154542356797372932855707369982539497028481343303077923339922300783773264505916534268583809843005713135158558575839686738214496095409880490684488933045938258220644082026246695892028552414029723696294852777798588008412306417859171903494979416106017703127871233171809267950704041197443186192745312576093918835832251606406840203196284852648500169907589913082305897024739163100849947567309668783996781807174268903270621281770891802316085851705358954806295098615248210244318498345995397051440771361596926114214074425403833897854226359846417547306872470328350659763203414467164640066072696276327238207510108253043520204195928034798068368738343418662065772126354341533986585245776757105634614289797167614154660767488165428044119444945976195683565686304733237212927125344706347653345972692255445571305714535357166065103225345281563815101045378183918261118820964161696197999480974863394773657066307118374222077116639423158554434316024042914844636298908550934828062667165348208080937756938921735410328988505883236323438008175694388099057125051745575823817929955706550850618620227305355571802235812526048284929602658549750771276610147281503831710031096207740663681178977586634212927139315315830560017385956350717317551599306324960940975099285097722548447195520827335774855377303605238664008660567067250598101762377574266089318136630943194526257811698197335713461134801879574963447350374312867236939253411520605696465453191638447926449481135599244374284112484281202294958746783496434455218703996475485336644719081086718440119553414115665998737504733751410679540489072212247870079126070428618678783967164384105352441560384790938672234165037133271237351625846118402021934512324367615871401594963329013615218867497407212888311557152648787565255751050447820886897932031735436507256573218846500095396880743527087754722936208102753819977122527648464434669261956435221450783702485791504949507033484975492938529164590686356857078122310831091774028625191728410999514745075270468493352436912384950492911285043984572144334045582571976431348355185422710339907613935867425544190129522948799805958924135018707462641382296861330378980200742019742480198508600763557835240486793558707038306705893297057636198188836967665391128463142079635665664477525326726395408120326187344787151652949113999517248548681340944619851125848687034975108472517263749165867851023940085523094749362995695833108837028068932986031478333905385528532953281870291158277860547263274088074051553916080284775400243810702770022189942672281858397181376139558360659973891807098754741843668586476066459767594107760254846347633830128252853855724271288913450826836169232880350493703196951882053392264658330759133565131368495124404667973480298129905978234707244078065272009156632557921673676074797034920667019237355897177144068160049817213211058028121112159654591228796555517532512214523622106988185811037692523307364580542658727850687538698773454114443699652261691085196361193754831262778221544961451252424208304464078228133185573147996062003057485665529270032017361292409289659250705397654883830627245251500169377369783702101135097844903905979497094018072809890634921506605515301389104319108147341322783811598811046103966299412795152381693148790435654572055472766802369735704207203161269847762148879268964542183497163136852119796769492560110070029873467209961943011276523750753970936565199012025654379216282035288286825814090411798607513797925014047034686517663151981016490746391964127318990447882379961754593217712635848344204540793833714947166218454745589128632553638361360547737525902001146468027976465691429231215210036618985367101878919330087016717592919051191912331146507791484205106110457988285311827483629560399824745437931977490263719901795996410387871790825580721072434880716738430138773795553140558853413901173997321499955718947365751056766559470354172626422400347172740421563390823396440490700554599221882644933188603171028772010890046628830462480053125312623176382638021283613237408577456626689450630662174122594324572767935609101341494766043922893565295031975421817495252398445529445234355830375376582274185207973357786928597395219592304713070713494516996882472598195104634628040854791666295328693509320463257489981661286477115615973898959366595243538655760909491969450259259697814859766608564395520548605076867949326514375162881387840787508009677994350868678472328984218605667920811454905089660442059703234339180301991761338792176286608766192418838397446226847816109332637876768783680084857784819278290063346514419209748452153388900963730536540004419342605635939425939424950119624010872187396527908978977751639710580425754047512945087474815182516534381181270445594214631673634878742226135318650776392679018133219874613995368912828683348088654667981173735721186432549907197032825088298932721752571303213869610222079998982545365415035099437188098010616871445393577760024227188981806201892977750733144368916222862741213652200652690572153874960553103333913344879973820836689969171017509546819387587511776677825105016229307562057210998827600768115809659012699996247859224887036246004438100390064350972315935298770137310675889729561017163499689982823931747794584683858823960889832162185055674122829689933453961496168202053968667887053077925989235648166950647827744572093272925969332075245446598790793385983592131634995205799247313202500933789202926281068383311692905988159715505660477243454791039001828039452674408250802561595757584934336355755499186446522954972885820683034370829124479422258782649858340991922800243694910004833243010065960222700118463881860606846286285884387948904133022574631898604387779400999409512823123334289186688806105742423663005148832219592797575016191328421636640976251223367486409032885076364673743911267398011882178879802988451085232655231420268252143171887256911637673751712771260378318549962956288865210353623440775076420736605639895910578504544820086768769968386539692066357645882843249101545139490788885355046985437174705320024991051187760827803573814189019322678063757813265489402064002259560376894238150938777625210019094570459465728599148435164589635586447123874996867308785146325433047096456430762139955521928935071753026960645924090644477716416607879509273027603912118442324431496441005315514148021361717256334264053322142215692830671530762812969461264426797607371932168627896100240090296603623242043273732714144898248181803770414550300945539050809836486485583367835318635736680370109240962869317534305589691418518471914659735115351166726867024382259083886136233725241954787388009268327189713760904613799029220780320167983269508140820797443528894232417226449337906788680277483685142141237142023445590492128910501556751419046254626628506586872157605392402975322765633689629885378190404598540625367081143838216649642487946829539573818892696154352634056154110283867687465448083208139508430661129517600476929088400438672468727868653664658676448290334991210441818300460805383575839084682352944891196886383038875998552550855561531517428455377240921724008391052035414622206369448339044166483153375650735839908192544582409164363649525888934498548626033954755231530428483488474799261289387070504397975664563332811453027624257683076584264600406977433778108603986797387858109736141276054387158956190825935916681120343398554312761549461714050974066572148231893129019877614654944749260327915665444279023505091729483953482416744897956143435915886970517439562746021803516455164803377402791843562484853740672769307111944389852721674959334061610097831648758576360057590733121164683823229523712376797316787995666706055166247913009915853147088813472484864432131004622208925960718386535480159402389059079375669050538707153011264373626319110275713240914068090299712912012018205741022840813690835629334939414174534178428925525225498572641081112466168367919039865985152749423388664985524248680880802180450710808230635202901906202367806470505466778328928703443494037958193813697210790122477804342516648537665980227244423165296963119872042520358239137931225013107147138942120172644246691962822793657936589291912529019660811539134850411783279386829260472259571154379530089990020427245183698712323429828319043767431401449402919455118037597798999738703018639785989508936087382235907377164831173858618052354804819379738183160563036984736803517655560622191261651651215953320854943010101859512184004551934650640650804651659656663864859217761936472852736055395846310871503996419889038780645727338097296241318475266315339367615204957466349325930146009603395523827935538737494932893895753895734241121646859148933137030023193361709298078391124614721963115579204200401348015854991378648291179589582445799112649014659756119649652792059800354725076524906213328329246892011058888692373383036136630774083492509949843491950259208543461777949798926634663379092995965953414668683727998139908762586279656121826365162539360897843083525761632382598290334878032432806574276724698148571930197806339213098723703455257124937126546892829463707249074104206177832098591753415620632816160844690094865797567177020462121767099591494693224108725400412354311278880387469549581642186912041937753343368483682133547352943333598865382276137812713437513492847567583276888816208150005502390536406793536047200193244194706211338956022173665047228376883805935720479905984075816722187081479301641926499565280281917695285887400425294758731382018750507553623552376061553369828220146249998696650920002851594894813888496450629418595479741231719050129810368415055494464554143706319043815651772117771704162364801922458359754739750636553467302007303686882993752594642387995521368412429404061207112680776494020572316308109560180603063622594826716768363549553952177140074436877210252430881154749464089346725527389861762857298416982201129103654593457969890465750986960238572264727199321736228853591531971878444258672276135437260218278808284060552877807129771365459463535921694181710034585477261990446371407860621830591797876760606153064248580271971160240057691783230221212768996158272144767676497249729747193543105066215357015963293728941705511916408456182260571886207476320440586246728064764541565952397400646590450308132573876297943806896519385993721823667320926780031072410267821090645911826777185623192587128020334100280090344562569334653280097428857898867738156307353699934442842660878706840608960202293972498997121313143416264616969919790837370677149051102195551360853247131028472421089496426991256570419960366836139953680550753571455697766943272674082151141087473388858563636963441353620077196733421354142032709794212592301439276497917050698775526211106618855660331466603476979942574476739179721300649503947518397139145832978746379555675131564902083859492415074299161967376284522090025544525611218645911114046132907862312485952110923221005450378062056860384895816574335629080230220273899472394606368828297279906481003440525509516126667403799354381092827581348723152019713510764024258360267887804222973441860735000689419177317260305779271174833996036319310274547498906661888883526331794444622513054048353295772998441718256490415759230767715802826237137721791932693969581142030270195814864995357241539526687319291022564815994251319016456272784434853642296108042408403421430881717339374970077323353698161164807717950598239518269566717884556869928748879623932732271248538311066905899166165191673486817164894674938062497090956650530777108956395476039595787826901181417264693635000545984340505533547804331044883213190003626635754409619790681812805427160915167808335237690211501293984380008857557959526911326935463820662873104531800901259288545341293558332019044094133196367148011473313444165043754014732130394882474086786884897402861956301472129183642279058421223910066068025906868669767978154146810770413582541187728198236155557240572622256669672078802277568511460812501774053130978139789058163857081569397986012135813518721293374077288730946964548620606206866071769735474032588634424465466673379189739664043679633695977403721517079601689623142477561439340770146827858248579642715787621992046844093022322531278315453879860041534496928389974619670120063006655448531934438700086181495203465765804155090266872341596359284296440790058057955626561582001552275303906545102216063563018711727170097802196063278359315011973379932868862171873117372017417299434600850083138232892132717098698031926840259497234737217029281802098092835172203324419510228522576308268441591799877490005832630733669361681178835701068940413487819231638590982570722921829898463133710790893653264870273887951167199802765239117261451575736859692233792833399498104453812193929736923306295815882377881044103608466310908262678481212976049912427138641187081252480236041600638304148796165716964704477742708850317655205099674918441607026059398211172811649430956361434644767576136229831445766418453754070206511282082730714378853790118910667759259525721101499027086161175308251934767420344122517871360408883392303679524801959703277502061158445191999160208689093979753263246703843306988405375775143381645335273492551899943346214740113767359021627011838599643904468776326420727847288072266169679873072206905195071969940328902388302946574407284356898248775860839142929680147217782175643728236055804498491610627607078984143563964948983471222505443228454610753453475225065568826217366676855306290223092781626423550196806182196758310970030725700370453917242560652913569112889053800517712176255997382776760239229835306011347016689606011731088076308764050354990265958847226782649282153846871928694545549322798867176562612212000566349163904196966998059584947030508503597716404908359345016129850686535399158059051658957046542397649622350360888522402365576480987789199911346992454016469220132280284572935596348345661862006034180213259012711017672825257088495273608027247094158184332819477921444090477104272436142836819129273988169930173384697689701628479489002906259852382263775592162089633762162035188442021697857020291376681128943678068712092387117502280099995279089070581343284935878278022027322776622404643049727361049970043732593742113828744007444397555746839785601273314517813846414295368658731731731816755790479051871192850973400738138828783126624133286424650863144111796077695021036453080371917315014953022821231256531623229350821189791587091412564281685431427550904430963740104906105916267079548346555073253549734192428457092356072486459478188413257650838927803822976998167033568722210866234788246566174956050024761414372164189229864655758949116292997594975298568965801126602565289287653176747363492848466706906502501939257315182631004791490463467471608183788603555860695393526929105603548554229896004594028874871389495314663090185042054355354212196150411219760841802219601137977085332412776793456057491575056913695416579064597555285549853869286163615250848398239366786799805219870364028413205536166016207509592807708125617443280903621196749911258047683677799919710509715699439762435906690888155896805707838827404401751964158152588133287872998699918881576238739198919796563240649165677774247312531275585515046306602819413341658229486057826663970818265417216645719874228898074070293558607057619469519826561235986262489218052360670235561297894775356216730508907403896370868792363588758620886158351956276231485774321615785655761974143616056050710639690019341805477277116845146703252250774600352766066988059424690141148617695762261879669178941744227657072475058973514433732047245746100608038631672856453685155717722050441055646022611784707173528852154570347360243635570310202149852821141258197516077220143527126867193749867202480204745519845771613748606582245011705587196282961272872286559480885062947238148159830899130636959026223379102469405950791834918740961663967070605677626260439853579334881710054306719827265973387053587220115054270291322182354575194153264855109949981435619264206870464574396704985108516613425093322582795407551333029183447868405186536748511408983972111539792573010253119358685664275992561560900917017253462409920796929690961132570866623441094033836839022074635297024397382955562268331307797226961912104379814139090278156919011160237561064315155366682639531660541275883352657986487209873375656896427632803940177330481969676310552596186274935228706587588838925671110772437075310299681096217145638648903878855133146572269236505660742349503539642947963009686699995198944587091064622521483048340016589914085156939736675942120860209800536976961071277870595335449934397951529513059038364037351813026818051805159205003878142790933376624979695955418269249667883533630045991259519275138171743755448160087338693006284868871557501370516594544956332533819560925191550905194544033284176997499686550330344861207733041350279660794253539681517914946510099825172052621994319347140652161649008340418687974658315382368936808431845429300013361863963398626036892448078702346847120738813215369178356315156322037483611917145161975061698898361431454077406781167181527355624113929470472558634966696344936530692795397798109641269218835234858666330335883587602658056870655880678321025241726658083572964717195856994626689705967948787667891384882127758677792138470916172251606990070348770200334071600815677222829105773668299616755684204699629207509213860858972400029319258585025369872077686675246858664675955274621474154356596144107943905065250122527244481313971684371861951462072544444170203416016022446812969761449360048812490112085162274551230546265641549467918663192121280315413901832945562505449653203967758757140658013454782685281578353169044372110876770074324517150788948231387157053590217501146113129977963263787529187684660942836533042213188435407976293707318481910360714473349922997377689659298376615356770334572914046938872708895925554722696338731838123892261529675467827476491806956794956383508707027349584020402520177241808428957409053799231506446069214047583609346601611930334066623503374741018545289194384286725031253434124427440709510037094822316085322521837930641857369852485914932387947834476069001943569767211217497821294276318974631480710408418165629526097879754652890145017809613626633436419519896134704385084623927921896857227110802787782652846562498074213386809376934057351252840675575287779616750324180024973042032283329732915652770069954793662127695077340469021104362711097487537503841657184191103264065118709360180145563661199424461316239559825622765249933946438453640298799428183943181877910151635836584094336194900049186558207030757549920323450148923638254459320931345375687757464457329829945423951983192010018109128409150949171995813091098146547792973455073600185324082662503546847012050889128736652779392350104422537153228487212415258688856453022764418642865321212476944354977492051154110326533989602521328050729507299342847340715279640430491468575588190938746174939430058738839597141104111429841934295600591205012359964503555300229852762284392812703177278897523507737122869651289883916484485167038234552574946699467319194258337335295041197541609391897940529130340858770444120139176376590220365200593829338872290592750942184685258639605329278143900252613431020684839068219608835904631744818348880456937899745927267330789658188718519358888867750643716237716873078758181527506209473306703214554641219285368356769149352206974176065622823110484659695349219516515395740408012683567901074702065570900967181497745454153826525256855719018585043531479137743729913153581877633991696933400860265697986116753098500259352914218541197177138715473792014517060464602069893278981472301011480555430923178436960002316143712411691036753416889695328151752571479740902324305314847605007806933200805359112533017977202525801925632706417347190872803354842433136374909595064675843171925948428057621317734823516042357154524466981002538745925788995531888683130482223749733425694056280483061413273961121042053046763866119290009513536079226063727664349140744748014488945428227535018312503569441890176059249453986202685542251033325704318342623388264172529635402807166108548637660994638390310032231418532844793114423402862407022866773865580640604417245246063689452802769507278431909346968559072181160022263106376253545020997411863329072771863532101924185007915331418433520882801173128128465201838832929823135376742520099097382480024087342110018061082800322775395987395246272580863051005801125885732892506644767230323951858494946500131541160485709568960427982731903305381620241361869582761476876997624981773694336007532302680136630196582028730616716144060612862891703397428948218921319358380892825389695273672177226422513096278824661987525525283648260269761252719779419502856848484761477669372916224324187152183867985192519075255039432599917654301350670233351088261669706405777986526996413636580113672073841732110327689728114155902119615605435514785488013602568736420418804014338044524824124355544737711834085503139689036315379144392084783924034774398704712810960169093751344130835256394424814840253160169533868478697370992509458625217240948645450634427195041942786040878044334961448076004381815638536093469493175463020348918227451411185839583669071154122946576353084196965420346544765114481881413727045386623477573148868011808692132417893692321647415112822813305086226709752964928827976557474701899476629882666265290544908847087323080372039350659968641986426089268188154478276619997313087121009246441283144932531111563920130762623649803391162834415419953875221329041595409584048772420916245242972588702149977051721791956739051991461325109204439587163435539684926084740844997396128104563727475232259849945797432758975026787208430791742310126862754773128780231194061154184170117110968503041145963736694991660074363461973321431163397744652948971981155927637803883655221922093087201173520432449488815272896989627748417273533863732154016616988516573560454271637771391789642451414614868242668758157022572910353244185375580057232095790234531714872503221283264507052109779121770709781969508067154637448012575757603519651376065700351922385619033315021387390050136718621531375628205300959609866760223257899657214495044234942983520387827055337881650020937244640651266238155068632560955733188376082668797691977317992182254602416168058392813593085578938598621911624040978270555286667136899473568735099963469544205277523100260419041092588280507601538799450201205147014773102783480306155246683677457704648687679482111037482071085345550842609409912058371334761356915855583959647864809398915073374313764721482988390078524017817138955184146336651331868132861584257577239617030084650005549158866305932062948763622225652284140553226740756574454392493485884130733288047078749667323248000845508703027574511464110177980859146462045771439748433779378824111487261303687787369198308162355935485697920924211663010726237761810614213729548111382611168080212143529243310982787315380463696846483555151675608485032631174159907006396525776840441636409975637187811404838511386242243719658870965172946665031321254020349663512044550118589784864001008995109754133809554542040280678756814533146781918329570161717313943077365387291156642324206840027699979029050933169160855732866597520424168490649500271176989134568863085369807276886444808710494431842913583074637877080978988472354772874091095834489694619405398646591600622597998036111279191469174240721200152750381030523702268072733541347449238476570364798820744568537320328277226821894167124840099894332733871248303097723699690934569353827892693544832655217250987402623444971420775190758509877383250614761651134576407587039376017338018762925043687862295848400232533606089915653682737045060594667216091749937755201142913909794669813377359088278131384214356902219075149204471113358700486330357811930087328074179814819001678605830126107356427368406530634276873587842882904582030195929744897970127324276733914506019727162152542113430988076247303770020254581033344547733271506607285523423382200736060284307320887497914131427905918990995172088975969720413706126097856863453449269698519303427762079664324699811649042770264476938613244123385848454269193506398133679047222808203375958530099303862588681802965542411667837203836406190447206295071023545744424030578855541341931888061263335102919583358889754800510875795157183532903978425827204650766110241523754601286674873562133371058163118243654994548915443964431284606816031307915548568719063173816205408910850233914395683690032336681438882096228062235451308032489715077338187349877531439051087558638845934844198109091022386337695557681308903953548493310954202283483807064638354443663446872321760875111800759639887448266089342148061576295385297907002707050882170751543588487561019159331589956458613108396493005035018131845012973260493722990315158886762505408675451321255245083658499360720606622849959271058602038170582558767007915047692343121412762185936198730756708190265801806690199386870353683019637688834256063896514444347578255696210110104276341742259429542712689202229201433965512576793599911387034730216305307746471493490850947077978966277551743271001451801779161270510671181272328783870930095765871757251460325468691701105002215063766733363672059829297822953359114886660365924326839201447984523502394240222052300566942999808735553755433311856085434798404101820197485591192929156520334277281106721745421130556529275706354520708574018688813634481888214563497366804112076035637418468531878993251804271775484368674382560146276799306807934865926770403670423739700350754435579095243242652377325799446853326320365962395480504240155700078626993754767310133973813717890608607163041764589263657318352768625948258512266136779988564014741931073406167500703722488388659838980039684533174546877200593163007699725015599434665806743903594187179516650844272378453249279067943863728101882269593017769353950790598892538256186368180161794831289393454315875834290650838314402179767584348402316941574808513988667809118636358841753772501737839667682493594080111622055788563571409297396310220613007734056023865117334644999900475966161890203324465285810075039382360723939753655103890904440982383293344746904629799670116430312863088674677253333146485346686637954669158171502853044469079255508346700201367542779388684709859001514828446225676329377461521847581328623746100621666235736646607271447996101737701888311601111716862223299941192138635275466957975608271062514330364585373577901511710724089134920419049918089661888041849365420933670080776215313890509239282002301668436205788729209575915867828340042192998425375727860851687089000981576859778415225872289199800133790753873083040410520609677299508943478728364525577357696559486202389609174279528715217041637793296564055116163146865076775880360691778504780267977139411625067116168968871860147851566984640317205782766699259511234110379612264210423230657829649740271337772022873429143255750489062343082620055603179097294122924886016827660737665778709391475599108590705524324211573229727306430657670428631596766779187421443077514119302096822098255079566977943780574984019999547117994806109867435376131024443812410529376209399527412170709616854913062846022545946196009720659538034833654585501248373929703262087872945921180916268137095817568740438253615825860562343655731952112853569498642744781574169062169784192432157380692233482282205594957515435550918283083278094063738187423465916051806210863916649263152450814956259163848173762813935613890678609738519655439591352822720923475780749638690495380242448158470351792451198338690148482051183898617931286588380594535502785188350444062313719443791596583038707188368021227115648781687689106205299041961086910492760557838024563673841158107685542233165832747187600141673322279684288663095649795516261749498940383074911213640075632539024827680920436656652826653029844386533153938034655764112992963958741792190770386368208837651739583460776674484114161335586258477380127074073714150788182689381136278716797541414044660018597148456687780457505401999195377288844391840654800532473134024576334614445442337902520107463875769967838322669538424074626870427559065307244277107784072944404142710853259190627749095189514975629858610144039418102462726656810302714736047254239586456881704320371330694791440244079558352677924123166114025744516425136776973288153674841457578385739436754798173276788740289876432401252057592561780965271475232426587031991177154587392720628445696304388392485501840848843358508573769861498824672504001110086462954672201978546182885161765420161545706667319853282121922168708458113681649397567703160508739550733571246477112186522237198606811059620847636799686227088307845355893533358294310931609526040492117881376114370459809393538472809714464786386762669053262094736855777560280121434929624897330066299043273691313801294689881952474742990199802789822280778151665384580479017857870656600117646050770244549907604199986512016325831462920392604688207856629798468932922889417943944275216443551171631616484705875115733401332527500919622205443663893409680096081920176509708574898518703367001178060236899855562086587140973282309204378032157990580773388305573223618778810311543731631953216011065181267791419328580365082176311155032919010353070008334075750456199944638038504096543540815765182955687751270391198137362187091715090778147201994200829788802782696705814730587080107000002945454222757609234806027699393312328228876243229513388229826973675248371463462287027497112318476607959571163352287951474878732983223369729649238694663667946444492896975295242043139932713207737857898589901599504800861993428550538419077189539132864009155438191793717120246328624781986904526553157400987419125127834766678023550368807613633921580101080318716560153152000234457546189515453246859039365669915285180776978811520614818057689076744337221647154671557673246033257588196909471248875575885750847370306151404059252311804651594483422523329092363588837126887822448541277771213401180788863338562903467533943974568759729040790314916308379229082729243051437280297448649390011235726528520514318862534038545295755229199993679876052034428684501374649062660640356223050446978615766936473189413269359321617158630081599735270780524858856843779800813991238485229286432664884346247032939320878469817360410838982193904926850253215925985299586081170295621612451736049430383316201833773356417466423419012393730370093752155153284877896946188667699184585379754798013123249020510527160669963609849967678425432055410776935893143950191910589948580445030978454535771106591683660533425896557057934912299484005504759956826281583854892948809144289411752719835535943997356393589417977928695190225526549644151635428716363957488360706165928805471646187361756074526361742920905835843418812976789685078925534465744804434934360837739236975773795672126547174571521919653993768912032272728327772911586556272241245321045118843650588033799608513198926160175351697312071622114948478291366152475063832755764566706171600482008480746280263757559417816727939051557219773454578103351871264696188091061421938381856972959528361220634126858092815951633705676874222126234904022421901398997617924939820996472444224272235254484030380496771372850937692773358450408871106310018279787613767431699495140429088707347539953197467808248432186696848964300060848146327732704923587231345364558568963019286019277785399080242046883226612244061648098038264864704753724475299216760134344293579936865766411356992821967459832610831912387036994057969330339316961249221220123634959068741063008315005971569939761057067853867792274317185771964063574802207236870731203074472686814132767654630163533936664514765441360130774522921950526076469506818483574936409400542841089943695225147451360809766478059289578250259239319399518197855103105589767968914710197966436691319423556163774874789431555840317886266099926280763126893364403516134041964485834094309337057012303348118554911288699971166634991597878770586476058495123989508215669106704438870250916187955259108195928179688300804122979429169238775364769431096604287240756552725248018162113588557896184755191605384302030694959566405215463329518076587672240992171489825504990173797715796091486317875242298551471652705658666957768922837116089874402928163576110110331241845758577921770663451603772162673606564507186153498952393218195315625938225027121232846434892097048184281899054917974635835879445048734204201868236442549021106087849197622724619747025109196613271515304830965198620979059574603669889516883264080256395887948836282465099372079628916596048039860415115712228344378332790119021353633776683212146101966316172243179049865154583204637020503903568249128861554329372277179271970039523151393297483199929023946124860286882312951323880656313063852489290534120025717384491060647044112027406402049474583779808937191476740763919793245890988072954266464656378077987344098504446465357721322210774363636181431805183956134528951183928674185578147997360933249158488116911493545451819140237336558066995593556745953774015572469746350008434273913468038321551469633334315106634035559709673952508030395602799694235715167337969337507887921933412063253216229042030276539437800566335942270456725694951121121778426025394732679644006213931585529560337144708063182217535394833176767856634051992689143259385090537863649876476626236386207458860391610135946408437441123211089710478894168864868889473088144855521172679717636931825168948746703829141029196910416518635547089221388690701429713099853901079325652390348972497555456924177466617686114918103594657736248290749143025301648026837788064694015978208042944938373346624867194390767270519681181980089141314173957314907442496089668561290345729903146243247371296251413411654290369434265430689066909330322871461404819763127051096970336002607275235102222226891975911030829102709431815632403176324342556863255019900301338343438591071713399768925216654904940670233701414030168683696156406515161661851474029911216970235532201304537796053301503734310570594927877442988007233272072627956382545779260233973477599529518311065870057060833392731237039305592383537748246242138538314356706826746364193899514326434797068771215106667112351963933155837333209768464973324748428820264903083131035480553795220486238789254473454264968111156154759252589481044805562498734243965200849490347053877754811005353829515446107765839353498363630288810767504867130259166160225998473020808811509320391915271676106981288045807316979615571963266253332030031516517948020361089669753531938095256354618273106299184412008437583916685933248343656535011404625247097489539299583952185358030831470393926516368799521754731246833334801049273205209002691133737205411320356383937278921946871297428119051881234980860242331519041337733600208838002375914903719003524611998812549440912552014319496253024293182240263003253897369695418610340468511215718788964002953671156209488433598867219557313114658178156352062944279953664482323709146248938949363570950496705898768940288464187900236144045015033994056622578174403325520490740335672187440065474963713632752371996923234228636709835354446167879945584370539238621186631448643766373565259460020682295579239796806212523286918618270598839488993535284315813501552368102841105872020168399672101464637530079201086054256072486423752890141153499486833822554892825989579201436134461790376524759458728799880415588084471958056731769295624680632403741470083393089585298021909300754436113471798863731785672548275248667454855709490598565501449926549726451985934979899081858498613626496747031111111444345180543884214339482084000483633509811853758653971248666527369861052829931695913238324512370966411924112545224159030536835668078432448600924816616202343695294881253311306523128107091035309468056285735868752718643489844343222711530366940862723386320577645438467424256919446910819220531198259337038559338874710438911283090709549323899279420083055828991041658947335410262003816331416515551106222837082968047522697902409286520822846959074328876580729350805717059084289345739991596910464327333798343769570566733737524169610564911838906224679951494259168962343472767058693184969262421961519790788603404203507337144528349745054948560677721859208905710608643156206103620389870828671045033384427572752777136915453415683894529440143533653691159388340407903025597848684019745187389888235582917481551465392304377496585126740234112527006107633428676095601820129918856572402375673398557521196919197714141846138929290451299033936693806648623601192749789758561601430450267537059345903699114307313136709793096147174515073802026864968376869335484838649839695154099079226329598725185715238428592804780103535032420778938528274986120966238019275703771112451203338065383941136472248932518154013710118966108563468516313871900224794465533798567776791937648492138865266719365285466421411016512009562086563386387313870237947397374151845093048997749083521287740043157774590605941205652196598265031097573582052790627439014914462278974869494897910961131129319655578174069817033716542764340963179267968985531125581188368208144520555949853739879062901206343312401982592316218185073381321434560643688639610793937932650110319366976661341521360903466643432643748880416410390393814060592352503492784246577007879888086838902475430086679803765318907459784978403540859539698637540405288674156696977247445498933407738821035471895316988824958632904654513918030141059698272261703874358732402185021768350392482876599744334056937171083518630969471385694939869549063105069280466293593091757585025841206525721083406900551323551770137232701087349455107093195514509618600953416188467699877276533618644170249221720558889574320193138419166200740904623091228764275725676355159297854145233120829400812458902580882087832676552060421360644035595687620176781400615152184580705475431162810532277631238290787114524184060476129664535972808759309321282995782463803949433006663513560239299944318132706467164470151284176257842510708036244742747933456098030484210413857326735657834831992221724804066468511632387218391582866719665163808355275813205089869789223742517588244022736881363160704786887783529829840968907830201962118701639909164913688914291543855037642695582501732804314049777652100363229928771771574833440688983595738703606924697935946081921719836873135818849311409320506139362350541962560535313074039620058785600058640811659089713678964126010906568268002889692910066725525101900881201197968135051204410454826005344323108723846205372102826715995175993130013424838670340907455375857427789420888590658645679982765901471393691727490454875576621912634828908913685148536162649410644529430477283309323358433365456431891502389999382922160383757931561577394909373636249970523866801234446230879227421443384309490357597671447025425018953897188920668243483053395923800629251659093927642352372201850132872690424229645198164121517747962496229984318404886958329490273106518901991931567517986353510216411378071231725686837244929815615730740982052249470454238661092163011594754751492484873094717306758289688019918819262655794103100012179685201478977683266468344347036357603138319768734550743058579613894005980163098408664014551720782824622109353644753386437966833897038492738103348372713184368109181817624564282012068788639255170522465571231374852931395386045365738952287240553825789695488966859447173186345917093502017126677710917286504647319439426422135080799202169020839458402271787914871477962627357826568353325627819248391397085569333101774360351716440158169491470222226703354289901728683663992107981913994358284477188078279298693801602434414303318461183883115607871971777520799994509532111008148276597988732074734004040085729038726099019221145016232571668637030232225638659244334241314337083149937781214005496229498744286436606340294386957830252377728432117222790164060344492404583642484665613292837006171211354483253843647876497853401526789376369384874608338408662631637651625068913927697551850894328332939091992805581118857475259506246272472103478946021230975927178513897430208055037361750187332925962228675173489317281228487423289201256327703009689422744503652517287848810984579701615213013823214784896663500347755368061887710891129978569807574324483917927540973522461530899660533936894358655192465506962112906325585476490445277317047457590386095235252592952287182262362000911287224278104925375925246467568366169993441818198361211389495375107163427110508151707437374817141357269363265520253148361729972265685301085590435342822709730368987662050289096436157208392940767014419237440385422899489635352078233963239002317830382749075652316964085270931839184020957169516755702106242509155009499404536712984152307370439339693486563300411819438463505679720719388483017588462827752315011175682840370367045302021159395039654471151444813991922160493497134797981957492201289003034037036819094403829359949502269602382204699547118928412496129461887428911421635074039823814361645543315651698032980763389638662025444956727828009883971153173661112754620260189504093926258205010056407563670244712137825406259717625371959261243384610858541663278125269935200566267873589659361368508424774822453344779009316171772830651735833291190423937778592922500502576114032736982067601852272733183374797714727138825388101492254170052468257261000728619239538867649114208493369981046153844392188206081049193401774587830386921031894813199608842486031026765595753212701041074554384580767499508232161728410666665421284696629529417339916750335014395669162565612479179260404442976090476235391931317323082473562578596422771746090017707517843257251612482338071752326863574344500938333946986503943239299178709516299500852737373785066075719168473947797712036152915599675848522417425777607056482304473616287366298511089565487170670236441131757394834184219518479345932239546620039930602190855004819050822232950331957862014981351863398663075314396933062843814165941774510201646016221560658433595923259706310621188740425310386041015359691882029631118680446185185758012697210192444521473399712163636294926759952850635310781010673566040155915318522338397286373282091134337266185689654778441830040739114188971192972650841549785303954314532973566634479582137118695389850385914535241693223785529148677986207307669697616515003382920972735769139415727450872636729472893482737686045023979899598842915837048710241845633491355906191062084525597744809508897290196128941500668140657846426769602218608631621648826631102232248603272145847066265164946844677827505523301705045518164772514509624557355715749288538618024976436316777043804159511546797083457499484867766902652987255882057249568853274727367883232046716704209297765856489478318759866583499674970402322026423972086946734827468851566304059733739701578430791994555966818395498494814553785066538382455843534701831104628343015680053505398555825765326296160527511502134338797091575515417384492461663168571746116781921743159466627161717566559365455741528194113598852908578233997727405037138276410896749333796634505218771550382619690694071246204897317208377260894569910133660195594804611322062280386458111563957768880447781037675973852160485235332677323479212068904704604419073701269722336000705382294044853257695440040642550878621073467314571697836607194708634500171226103592765458713973667459516356568328201209801842068030381813452176022487429035772122675572738453933376516787714352956294479602554920707013073002343283475379148546984418639688120747359027541606908284601541385970644165059604957790179286985504675470110607830092668841588107320889064930573435258378967300546480011403818503904163289920835693965815425156734928291467476915999257527975187209919693740649825714097538688146368576566641397387462628203354730357908064771141814882438942348333586930768337135688355839652305234867776017591581885111799429277633627534926362110189487392239359189265064286781566502493451794976369386864931088232884985758149528765060838858551487230683336181162692574817682542328271728468740684442457526116302550421578501528146172361364113278001450336007881572522383620345357916839148055948384391821086603623809319225800455435652001604952474480758478483676514136785264055993185566460238106509508568777979501831927261755365515485387517479866716594310494822698002507134338611535712001871964429608555580758260151375766618587019505103762571545823538221376272285546063077914660831909508371016299580651151790129907341648493122087331100423461407741393762291403589139089819740430385615803463856837506860398151881734142235328762814805293481358990058800485214895789062447299258399229829925998798264379506920978859607174232835475514011691310403239485739623597940904061748451885584092693252912076865843579600363658223033349148760415673391562833816782627431392056829569045111149944685973291789508673414165387376465361117664506997476561620504461805164106931093291556512158347825894872727180980464248281058266257125323787311647172770820365211029116514182347061823720463547337189601105186324605393738637991084908521620303296500684906664016651279087858810635718513848528129352947670216414113631001542511067768259651305333313688658114111028591675891155103146543249986353448795973863246458591147464227732298988726845233346283976838151873770761057285513343564918863105970162319129107588781373791206407379813804451718016948972578257345130379350834733180422587242628172549846933084074067307014945366579218393717847102093643068704532547219844547835964063068639809921224620651703838765740078383727492805118610633733903594333385781949609958047456808905445738371004468835976553909295404459980419955799977455942814287373759164196776364754342504065717533103758895624737088446534369056723468338603970363191437667123770965251016265548293907938331004155510512538116822301021948111092428631526271070931019097358859097380192325589087940335107243282456356051125119604420893885519981847671070631597727217417802321183219178521973648093709370193774010269345953911875616849203150919330451560748188449963071511352071144927364445907737612421518846252066018271620106666526796227159180641529376625852413262844749368273737833139563670162090481373178072545538565842345853631061185750305896520528885151636154283793525499862822290183375391395547788503886688770147366039586167395617238698212425387174815980334016560877624804427202766994499590933701454363435936790830261926321595412366857768188280971165206562555153980864980796009017304726824499166697066142373179901841527870759037080436236516809671415057382953884940400543152049589461727727381809338285676395263212450504431241425331393891822899876639571816860768957216259744912353421267062404946811677349400385765790796515802319685357283931812826175719502503879326949630370786194208355859415086678769999179711789642933608690276989145249051129252398835523033163887978182380454311544639277902656754055022681986415462919484742284547109299303284022430576235299640912913435228290863903876687395634743164351852445435043024418473821080334109163682758678340635071650628196037564903687983155762478293740076984849778127248433440519041071856163792144885382153203998800554466963411522533968347428361514952237233685363569705772454728928581031752669729466793151174742457316079992237424113024056457525336986010072319704727309516981217167358019213536662726091910118377574550911406758421147026347417710798817864551234246477864727767554418842143491625092484298078474818630192061240474007908301779737243836863426346105278007557647207415898226250853323771392356739224729527158290009559283658509246788962578121637238234851900862438736967620442378082644077935532006916475571934208698478138958554795658894366847159422524095761713573640440149922360277761456174644678664685330982059235010244733667210220058907720233608456716148872501531021420579972604076848445765461712877339266910737051612358540649670776977952223947906480121952450290724843450703430669189973740085628191437750199910813981389775967225739104452695655889219852825558102032738624695699388230736870437834100930103057086801036189111777560968752949089288947322540259488531653611372223846155634230546161769356342159124328939976673758420744340146378682836989942620731765854350672748345259718719921831681105939624464868500964001145566151823719144037250999901916362405466393132316703707426953151421097698284943691920497796596285651721695795707772296226180699352093694902285917034144209351100024387573652841264730040819686286072458054940209912325347936919232261730991849187186113846412935558479692993095810494663249413868236498257484618929653262419763484587569173128557236106851968961985440067745851528756909025227916975776670083783331480433814457950656857498774823978428963297559602970684295799473092286000147950150791367905707240065359197330700610626083472547625523679447864522524539277542000699012410071559347992722673965150184001462492222489525552646092351981616209193785966349782409502440235416977370151468967799282553438790863435785262562630241896065872206330614556899551826995045435147017955290939786035192101282103176708560806456646691025163391591689941572694924448631981324277088894854293277536658580642594218837410895857580252803460395292202786604571268697678218611670910186469105152609537080720798614846079380248890491542158026428282577450784301371566822484135451148274042513263978490260612576816183023215258412881739405167019813965971882544766171251552693112528898118352422086707434641156338954395697748141583437479583346406195924876773298001449499887652999531375016229558435799960278845166105657550498619598297986948222891732212435340580328531771512908621723576807182103608547609405087180736700302213041889712654917013954527226087809942502764882554726975955587524854185978531460706273870288550278049639844167110432755446101106319797855069036659052037195534464828928072925178027909900935593401407512729699302417873963625634171004806960501549318785270114462207934358931233297883475234068059551728839539702879265476064995517908416960262613577548669644813230344962082241641764890767339566500982687859047083650412510497537572635660255796041509060117040947839433868688954332880721158058807770593222759880876566675271196343395316594722375349807091232658799540346563535876804237323336715902981705444214492778055163529542478589121759366585045931121416839758012294762762545914788901342870029563502980849112720613104895107960246170477395524419664905399767981894001342258737438412113476570597397231443695494390891301537625449283375200301318737494761264586945835629729685668521347984046701641753946921019667753929871256231268225250533751711334701546574718824536708232821649803529144949011854172502124944468138604924799532641581859181387540959201611096781224785350256357724343078691325551903910987396455208367346397471978685653571029055368448875206954758195084583562450770995509462638369746420950783378816754742556163644258688816276802946012243549239051219471236072147200344978690377220822208127827840923019032054898713710850225291076465831148527704277650215208407089884872806021191777546455998445731052686992314930252810156870979970841144655328354097097080089757098865092193288674289287495904514831026544917488648030999451370034451758203510066813041545514597073853846123399515983338102964190716065661505417428018993540464129699295072035497259639207439103313107735943158483094098630932009633212189895225881548637196044878875758703077989046194474064490460336744490227357562972620743481786447866070379753814152629036817646471064830548954985370382769045650646980501217536179803126055763501053448484264494902018235528659399475974283478333381121040286099484151749024926101072643975392081835267881131778915650415255809512630180525146102689134017110031865477479185333489496606030996035831562037484614820505988234183680105090326232706824889384382983449685922259160141026991182428441554410069252380248724425529067789632794205381744523099007247029937837510684915561660166262328153850601195524716596592993386544884012538475523298290935362267282168864789987257509425495841331295378646482242037033712148790177256440066410681879983307988709551858997285436985134478747445716880231725432326858315866162998298942724167393057138610440704079472638963437083638128462578910312481576499325235611598405392981116934648702628835212826749113734786812677573588751253781460531884691637977250862328765626153070038880986774862209045248922395983966712162884951448341267543338831347538783317510395808200812684095758826944585659659059359905449971207836890468089653113601588671890199880564502511866313897888777228961666555557232518179972981946129896654100084001035291585028663585384173020342690508925190900336693710805838950082839505307751521127812494573142088815885197147656111010289196273496549006253208589181914655450435211800685867241082771096921307891517953270614146135944453414061836156670728545745197608255176806571519701767796277877030081580377674702535808279266854369325870091470302248524311417957380028600953876849321522316987146779981551520311650201879546562507264723770325877494867478574844186738866254172736824933886942831771811112009431513764177079841449595688855630514898845686418755120264899265564445415131022365432933914502331338977327042086305954453534309323693861522972469159917127855979986268729872448143631261479886604202124189902134795271879342037661172199142549164760117752360997512475162334026223950065946668694278827033714524369498469063245724791792645679945219121403037064047084977838275631188338184016915445904910910031730416008522706678101051714634615410354582710830031952400476499948737404126512847190462360891237040599948364083200394312958931700345119198309447469592733312629900654713427350196665002214690158074194240388491121693288394924283205309654972710681061023660464768600762993451269358688327936971514901170245164424504091631369691922880667402716958170935411012155460006904851652917654077041189312492252514209789261653497915951491811120453521602299304613669632429454600051177217128288864879965457468558972958864222045211563240383474312027788738489757731929287073931170652774507067144953392451106867413296181144816993128754917474940395290099444677811072034302873244307728439472019573727235311808125064097844030198139689346392379443045826818575158505676931244288988277662349298969724161599429184763707995901577889660324629892555384814561580931727583487873929931842471852393983194762712662936588936159241143037277159171139408516772091340288833109555995345202684769843281314828645324842450829728269365440207241683684726382525307349984683703067268445942336822012415191792119710387965272674789672045966866327494809644693811098619559666924643097972663291842638998431440260059519859188569053715472791292282284776454007218881332442056340641216584382544851660987562359114108351954455630468852734023142305330807002713777915531016504638531296828055959462999005622884681137816801539408922244113248116551621824054204314647707124467083885280620083449442526570879110405499609457732829472532146852858693540074940576476972486757141961549468339573205010006141884691654821415121922408569624568079366500653769541482006947497720793619166649499333021754825974215222967119825085118413657417594173416530091952198742888056766059261706471057393832289328950557432907886871075033060328538151066638226787068489247663549396514765144644316558826670781208094609008100813352470602018845910107968664318531720666016387983162768064628120816995849685645455864297234947240165624759084718387331239596095887458984707727588769282991492013727233836159991963622901547339256990698238514518362326967137956275760260377601745306991840634177700568364247948925930643459160489424407895704104315574576176627990238772071213088583816360353260014531995649292896233699780672042662035790258790174814122028853890224662709540377285386107002451301688343415045533238488556631404463546248340612296370240333157544357597264876361291993498017991231185515528324366971997692598425715222259565537880614867980815035558810212121325504869133265855271842102294536503409230423189299114169594995228695729911266234691061102352105501916351586692724255136730855251829902868238891146119376510072757870633749400929245848131708601008542871738947541266249085324816799188646041592734648142650198598116771707886686888020955572485361047802550496203288993964920302747178027841792561876567201409416523235597016501939891632981407189550897231877674308111026936540086204567438805755727496794975833624149262616347549093870264863188883004262743156352492823651708387547121465013754677393421605442995377852834520915473254964697354523644446713523483048692738716514888235479742447863777485704708884259698566359753556624161102962468856009828044365468639278701705898830861395926986403035889637776120266957948530788486057244413571791639625685894911723668606866270587397166204117177774088065710437206947181795703498611718549856336031216077788061161567163193952902773502033540223102688960726089803879348799247441954140297767174490687373003108644319429608912936450469381317765703503579945894310313505336246596600520685112852845114401012740872661310559019055567587584908149635287213890017392206799059108181830957089397851001780340587436226092514166357973813340641569670279908789910706802681731574715125839722817999689184763872607444220562485396098472466947969237749317483737779111513055597565231614652547373796772691636332712923855485981666569381081601343155591180247103461067817700162154475756113090567529671767661553172379488778928506507396975192210894183315824518776318964458583320648405397692672681943105316320958147957547898650574621098927105559968473305149825502314975911102469133388090962508036666617422718371255796344280811040710426593083350775531847639382457790098103562996850242782902545375120302603639055918037820398955543890078618457381318640947033173845163818245010858732581588672426331005219616763436462106432478086786717335892447315097222774455209714413362537866042483296828129390360503512720705379527790113678550606690763559438585138008796303539271207943940877990182436321789606002459964699174456919337103175793752330916998080067699071712346458412251422714957801846668496075457436781858767488322955143331059507890389406344923359160652240506926296788751553062212962308219618550633310936564138119914820258565045123856936161291025387983363705858274774484412356435250503034150810425685326963613127023626294534197695281996470855967217508101622131878077916788476472527268414036127137514619183189332845127580961080614628095104022034047871617259474614564344660758371065291913512523300381963522309276632778742498319308129455047635383495100453802425447140708847323145027868578271482189949264992395001952328392477874215785334168842851534422500192533756314777722727848232134772543008585342267706590209538466874092542556564292086296924722263746134055039162195841917123131584723391807468290389700624467142629861093241900865059309454507635240155281234293398086571703771605250613486812514733225281169608106688403668529198928696084059002800448537935970042731932076672594897131581088092837325260200692542239648903873965029678205696614950792969098717264939387189465068935065561079355005816405254557458974031969257523808647609642837694834415884577008644207184906456780122667536377378750353828286007871094660216503903773291055303396810858584146938120383319148032904648381351222855788294099947860594506397269001548056292417012574717279714819844801684747846932325507165734539510974401569745380414599908599518324219839701458159636647684327781324287027554280480430309198016395243708540270181792443856265977761432320996437272925351838694824719394606773731841144762839889451329542262901590689629543588062509568953880195011037693359836268685470522842405474806388815963412018013369702700309074790471673819899198482609685654488211785563769614063184709742997267174897430227422941622388808579388355577210051601624072070691385650459959993970531443187972331130171515400246299404332855971355811535466016820241103036061503272507944713475057756397570688501130329620956108457162993262827697057175699150654806119846412979465671176781242118482468206045961182913749685636470084693780906568303935433274343007439572488414032025898111432166156931736368293650943314259963523451743837143045816511209399280887620639173879810223470317209463148774120384917634182792773941813474790767387097863393663465995737647651872156002260433597424554425032693982223348735191330699597418885151348920880345967792802524883763644741629028488538985887652757943142427546478649398700691127736793752512595197886901716495250512566361359267978742100781005695921014033350957232973609412715344071685646891259082991794503819705111673542207386081099779623212210532822095660474962562776792610340238610827117408193690663334423585045244479809729038825934821439711705038470517660001516429574175080314403771751583487710547742937376343761166604922629704781235457810500205109434092218890097248582662010914318956424668297564088473719109093126140117069519771805244444057057886638026706501742579113694921192598581651789395085998035110873059654297392241547617899994481923708036345205372579627998053326991388330964821365032141153979648382538618356552888124725143148499438579318912721304271921456524098867595282868113645186956890894359494288939103667603962292807703749335143726480641584186684174147703498804650158319266076204098742148508445257340574810401442866583079579309557401291291699662064003181195564386855540443432753525794641596295157138570550080754937211206730464626523699285273291417512431521246136302829282841538404126905372976458214315636952163322004576367839649466767506187117242448956547998693743535785752341647766794209896948008140281178843240253318112202466412797674628271979067312413276655495121502521591163151235347424548484578402593224681262316350376761631286542375094577765373797419980640573325334718670129031286696739272463242652246478053189085812307816667578856873948766919846332473419096432509577011613824564640819750611854861605063217588890317065941108856221477488729062757306733968669055282924672205959936201267082231372227712906894860704462426423493708643473123212755811097505347777169178983393361353823538192159876419604221206960231073706874317968478929382695112844415442195338266205953614734115340332791419707769988216020233165341036089947118498813643245923900741107599989855059359449182502785258575088315428912712107192912286608435513878504867052117524131231373015195589205186382049834552475466792517169567257960418916654250488330379684384649193478515800348040348956480776525305376948491383049749107804877205596193210486529338977291350279397102920098599985584071340731142803189356644634915619840760870532406394517967317785062174976120692910630421854354405480005364897562350794284483280619020168671463857718615793571083612937572288933775725401801656315729316615811477600890938412408973612108333857517587090026118687891516364264701424025480323846823777918614150115046235500641768580389409086315766805261778195283624320139095550840773769177416478751926417499426838916404542381006079349615892348859321641324876843945363243723266854305566232405493233242254907595448942216414972135556215829314571967441671921253324585299258532165236794431497730177072269544091322339196279280311550107196170137078954153417649170894177245282833026117773974579849272406891349683305283971929715212285248385784196305459158332969255537945205259936643849792932632400202439639083707315157430188668704485695612417411699600237817888023138663530685331626880014398548778904968406760187919584516326963427678667070591211048323309334518739795514615880260374285737617826847906756391362193562685694425852291463227347995100112506264868744461007413654792268786534251354788963801661821093791603414579578958273696381386916138930604347434810485763895987414299290345588917170269068390384623876436132763288898537601126617925411287441544682738658815994277739181385166344511083951446256603401976017733241048773604871337256292684771786035897980760774697472936601485355968306378286370773076225706022393956009128742707715705979330672321939060353973395241990743034954917552377342394556504029486545404904271660432699829619764732297184186862695563951694942522217926548748997406879409116825183508339687910446120464928533602448847417598499949999328799711742350430468638414878231429019607797750698322237116480424370948704022895598898294671326273345300960983711327186877527932418512684266621559869906193499789530808778694191243345451086506975631049678647416523250591646740495106789327947844902458410802963794006521079618197919336390685731972237126746450186008938241322237584914561806154856515902540665146607468742019797920713666181539106526494084933353216010392618365762788918745390725977060596055067790310688336956454336114395738750750854009640179299399109446596403992342382932037103835980238457901957035564170522664869833037521198461069738399666359433945635240898658762053345901557903081250482035962959114261871049941449268851484996679074389312033659732263945280335298770041065703028669000398424240996836729152415838490548156195606826710527026543894017384916637487892483703410634893120218711403813940176777545237200223418906442287845391889882346051822158145453236319108094271267855193209016836108495755397511383586154958949074325296062255395490426434622591878402095658180147514368990403854323143464840279338500270984980195284054512630734282241949506378096623746591859438702600710386156472140955029861727012181663852025323706658337840115465521223687199518442729809563600476353269517302161273354491571594611327725862565433543175878216129559494530967085545272601724189546873779460820727383315284886738005304600364095354300852331094526528925399279117588977487499620789652740235916569469627807968442819417728079986847502259332651908477010385942405108512532058880214438274506760138463197681181309561395246612424021891032761426774605291409922677770990357043441074635795772288373084412365507208004758673205453096972806277851291366921745591107665693448159661697445668035123477166277948858830954853363115790411482900955379553159758446630418326437657280317877893370590019847824561563915995088474650429559880576958794782681287430262617103923286633440409827499136824050288509562528045157558252051597327584848632051508669042128936622140091234150292890279394428700539028663331114247455039030161299639485639658851785495432216764329060380188792772012390735278810351083970888332641240959793659818042473082307808495561787975343497327156046372456204943234698176818850339956606234161899372652926372688574364611766254223361687498678618087712339085094103260217658006546683054164518212549690220423499990619385605280882257560549252641378254688759889864655593212108482096579066741622803650075252376107100187240523428424937621802605571972875804810435291950938096617840000511941999043222950571189562958262228834136055236556693873021742348607802609495744355450148086768760541418367480301685793338852084625572499509289633549510138297477145881003601476753071859846265399049570607424359197547359837927127021510871870008889066984241862236921603922133312737622582882350989066949594092611702489444163045961073545624877167076392441361231837430358777301279635998560277057507344065587651789744194584362887301050871583488180086846605562930696641787036493081310577395541947362938676750593460499668029025086490364609002453442867634438070021414658673479197201354379092625850347986294468975655873517907293746780693011862722098523909786292427028507297138387789217185252165956139841462457027419652317630842513995489315489345609294795725740620137470458419931768800144869389938307071514580487061940040358467912895547373232938430082106062768152347516470543294336646402277760863275280108928768327206140469498602258863806611479652495193033431253522690253202853125316311417057850951411189159419111275218413896380829040944416275566273919525940342229127668670405764707561943299401898067148990929296035498313245091296663514883091650782743253896820920448633395813107001037701934422217858589028563262517060314955514546486945352526926286800092497094056081593738040398976131261655212817764814233850209241768681548100008205703684537262889915933548289608297351270463347079876086058688550391489330654547835331795806371315084424000611175404719926851576932765425159761253145109278304330356676086071207256929164678213492517152239438824645296550564390964038823655393292114911307451679349345445252750309665615503462342453222389627453468034721826577407106631184734573702886921496665989228323018867676657017410108840652767439690945120780471163948752972655520943813316259988131042710459841455262903149369866677465959387390077988344226578812335567561873834812413754394445805306110405673518731898208676988522988150742143273386477121298542323306764745157722665460306036542936920383714477551688383884708190041960708425253820873766884551641958955418611820672697101814260917332491805897448147648286772029471703099283234971162116712891018515588550495131663585747362021811658062219674499023210949613932897405906036473123445969079297903100720663680954791603495390587855457963281480220313934491570457235768800143467020498095676962897515552684213115763578596654049584696602081325815284311421773449984244445480513554363896622023699000081427020963470839667189396001943926500056260195518238875274197579921911298881929397008851796460525898789385337597178930773909648465014312954430123184365330928614288640796380334739522519570096681950924593753673792547654133113632052650902800245476901564858665409632444413202484421973484012262904262798986942575929004643304136949509220344069703965850543595780841274795717960594850732146002241287913467173242830235181437840363592237437945383679227520052632479092190075035043678622674578740344793298357420521165327098671565297529650919469586365318979451602715571379595183340005223359434507423057631119789324593467218235841011320653226920900980411998258596110158366985542812648492055810918358814439728923399883136586185937248466532624735029927792491199882079912008807540516653725708194040333496724437703560616069552763075753148637760558701688533917291159488809785797768333060153111433000041278186096703092323326679805440914506919582966962614235374661994349211816921851219786471501873742484782810856326415942679385443294937497237573603432993859518333601533589456051010962781052446669715731201376438636933094160652938587034851108443063839638935361656189153673515844018130747975118431832600339661337631880997127837470258201306740922280509257918095887864616635909073506644099047492808900331820492741490179650210293365583591291851020752768668725745050503686790562647701615084523376644303840927558005358539841036825223997211545064257487504632713740556348916259304556170105027097558217234463389778413840968002356511405347291434161670076632218664121882488973877071334669345527094625186604345825248843160295161231726562834974109687522535880620148833814134466064162390712737696381433472802509229737549374300785338417274210018197968821661610170661199324126644872523868176085337836611565947095027903296751553354596133397465584918706831727338124508120633304676297228265382302885115111846460918201914247546272673549035033846704893708687262226918698843065905650692802145502762089781584089448540163524307888322140908580852568407945450502603298847657346882894279544741260180198754495834118448815084883260209459409695708820893014291610386773632383884501791672352319486577007227923050467004387483947117862897836123335025858225962666340887990298753704902534854446668831505421475315118712016976145464850245654081887307050153800876290281138842481953090598497033080908941079897873510315857440837796013995970800543978160262957322060233256145778468867637187816603725398508639999992346875725191596402507468508747497861464263811458164889785334939391443223104095622542279871534245442467540476021423142852764547917617764879906635642030934337683755019721334997214821332830335176143207562638061336939987795349926991994596743511557092346943620902199125701978830820562424174218602546456187149988741162523093536334439045928605460997600633272231948619142715659444762706662074360150969645424734436975578681216583117883269260812343217912928643893870116436304882431040469129133432823522370460682154073997025797394809035608998094736718692242966128274842017702139633645558165997600276841535301596783042304207761057131965138862001442091281216462592341528792617719978109379967837614795057838254833127761514458940123698231973006827406064217909854611709276678620465042576128960107462301256937953381628254164596271947688059054786115201290762735330629709307397164932322195204088201652594136984581237830521492266649405870411197997614150640356671938004306845786307675236500223713907114191049962048898846155099255829863868836495972036298499939963698153985067997909566219643309338711969996994945004811495485212052686124981096520966354684200658268356050597541632052145401164653825972278791315713756448635933775528026832485074209785028655925298101218540870497329612713398402245790229873402179845990157697947642077083234705409794858814516620765369852273209595972941180553136621699327432488255501869047068440309981487671581844342882604030249213753561703157238005381216914941973090378711359130054383347896186962228211769714691403514348311155638744269775518325730254953959049875841350489147970351041432817269614276496059095882008974875879734057667316773765326146212257960676449659782999804207017721327754124223927938801509993118996676994701397345593652238240478474125487739790689758425999785189917488486486471794603054786785293097541350803105552322607157033412524692562543677048548047066036239155335911997644788384747913991461994826760821402312240356089109056702316746152770208087957890953031560725393704276790005526716990145965342229973975879031103325196172611011206861786493558562649532345020604271278169727262023766747731067887539201313310775885689690219607263491090531026956295258682390694499347061444682796174542384063738887369683077667667212243935544446671332584335332775543755105222911264888605761388718035551707318711809637620715992370814881663075994196559559940364703426205452160731888737375038585445469994199352472402806081533017665282026120840236761417041060733632660848948147201317046152111431082687229442161495794604045703101421907573200405467015460332870577469185245864473050388917467227644868822642531151646539753689525009912643942099491054582199518695486397979577773451400643814095303233974229492704300629882672842308704442458595896426214628214499691046660082276673423867503961217833997360885170820807124962936000189365755587340345609715029854393920649067020105882455598522675636995553532297854474228008124096464338031808276316934500516737084421408659819760499392137094357705213090576981113930400540301641981515430368812160528759054236087649801407820850296885839029691094515599909917310290734702555124383694400689582140820572369497154391211570743718106518109038305670983710659514080242045128252027134919767179704057898607796862299445169972697415674268394536918278913680298724680541906206374160703930872506476406321843424371759610393489610424375601169189972410978918522990899144555620403032687915341783598123149869592990821194779604689947908580301738062671321053336812315450373268161915424223684985642685230458767662548103637068176659425581263503516809389263392198925545670874542361882002637773709753204149947588923272397093579817272210221804197962806197579959543433465858557008979376476970966093197419789816466467700341305373110953487863951885880240705097109142844150444611206759329915043375694308052493471059315744890610939115368514333186515000073070157673421777883173684765846807278457095518679510355189762635233984242795034106197707665975972319480597281999286411232264907955538850627159418985782772648708588933913793197408750594774004871098168031950126328264845685583403668055776880300073957348995892137756634223467591916471832646649744887520254022750067393379309095854558681262645085250636070331123238351977084162577964744303648677297941076684774454013124713060984339209751089943470952745185637535097589312544657787569087673080358944139067745620370208046361295980570845854147196196180049888647964337932255571112964346389227467120700070298330686820524399509039896150340075098065443384683010810648351920953323468512002879674677037075181515692990347382942846798590834695203013565915522701077854830453446962714406167074406399485282623693793690484120231760723471024248711730092586865909756603506292040218159909142102014105453130050830751676945926448547030793286830354435738163240958640572748316441753648827765051699789284002245475917414496826456741989168270573933461395604947070296020835898955437193119016579616067464436383649091992555103584103050956471023131190219394843045711832497245732036322560026512862866417409806543698397475748110120913328116502362334357873732969475005839469848061964393539038276801323440430487922834064503886877949622701866241204649747380864347100117165440682454300569400864468476380306747530834915491892489323155469117432407442140413112017808361837120961602383586575453077887598128818462014929493744178090876663979679733168489029663479510359081256785728165418544247283789868076834275752784302239535166127901490282346422498693811650986062316958213397955531118081411488917678361632329947247141197982072879007071956089592066274444527919763693815947984262835175408996398156572095365428017311988258263052334165106107346215182622013278197134106860415884814587117067050353466907304837024604948955926632708513461628689071451393598427179706648098851625708155614869661656052669082333084111219093976132492040967136687361460540950372788895402657383976665566031226480282005632353462510120863583113797563408710989707000281253865832955985689112706131442527350430439122063934360283515655743099541278294930505837966036632827060926940625816997779666462410894890315202949674354125312774413066147058893561028053163064292750820062654317064567744398762830859340125439125266804543177629134395805307598786030935004332649732929236043464093730262986045966823867545229212307284135262702250013708229146899586336214836120318521244678635523267991199564045943915910096279700809117046389476321164313049353566943553627392382819022124449415459899718438813370378851851449909766751572355701309119377396318820754899850595085173520477657952600499004188324970970138787172773311568861405219354250658659093482095748437039356896010475726396245282744243601601371407880947451675581452522379203103983942743917667483722098898535754601831542059676167645990180673092604197204383523327229812504885503477341550607484869556244716644754312752325801269498242755738105664445988596026928994876224868823179094393847499675820924013454593429507413845365038571761198667015520275365903233071389981423038614825298377126188414761406903877054525932189717751744483421343404000373329631466511592493105847677561295321421847601973765029480474783804623920359908249522443613228321706854886005895805886792749971247379835580296708437726095020886867592768877821437180222440985800849473127186872585022145485211613200609914310685067891634126519737506886489977129872002186675789691419934545850401620414856919362966792754247525035220220076222884060717031442124378770738460415995359946464282994154039788602437246425757582633199905272713444579022605367454705970705970442608838208145286899832897383931694223568077346559506833872492493130867318601104249202515255099671298337784979123532716357292889542479111013220785566101478358957390313940070146725044319068884705968903678238289095696393303484677770661180160580323440889357324844035080158795191222600933884498821112523763296027007146464954817976628872236772653547519717825724936960381228178866242922667860420882467414915065884996398975120695730450103690510341596714859154835178675820192642941040394993205241727560941741773890714418229703689532188386190288779321570605288885437685847078721631816981161268477652450214365491216344216792790546961135569368698971563806962768079894187911259343320766072624719563454132443898995280131008722630397767092166213177177607207686193191827625923382861930091138712740479660490773135290729208813997048507220491535634816490814139232994477717180759382531648174338022883477926578866976089938259419390783306233041351162969301420356620050308256774013116495541971921140662046715281296684061113163968674026688718922277004401544939733366867481571044192464476740067468175772288193495100714903675238427561918033327858728837815014243724671059437354413941825371218815539146956290683448486804728495499612110819075615346786280912707691387405791265297250257416883655525566912081872395379836868579410850645266227716454078098402096956632226382789833607968172632337094523963180133303590643199863706803937449674747269424113298687795255138919411526094419429206272633149870530704953063551831603052033471808310344461292809292548034913346764767787018809523702856688882888066619057694382918239343040341249322305504042920182063217008168089901122609331288159502609389336447563211073586364301459258087575753814731586229573200509527251367658341721814359321379128381835766286089107497890645053704634656294980119516760984528823432653162306421472640032101611754159802238808881316811886634324337874879278912510625559828409029741927619638951646428842026611353946630804933593929360054193179894998638840440397868067011554587602650014226424962100556885792102579278291838537021619456847403456883705210554352091273935808307332945004479445076104524074616835104378304980893098233016412127659232300038320100106995688907342822771524624765069382047859873452007043797245643434095710372750261667812257951948455437417036350323956000872014610935756931114687532541521078609175623068042795816025978942079098399804471154926989783548455482774311096636232005201998601146339824910478752028994613319953186115884382137938786520524465935562519254658225605552951583637432864789443157926727821772067962161650401525591741757729269934567296980027724303009012587744935615002458133807461497379088916399727434278674005710558362709961671676459986314423665432222722012736634589059249412038565553946683848503610620465441156331615552562661149099394695467375159540635841989292204913693469937581890777902508965820679830142136934899033597753370210259721453220300716871959865306639919946641567089420792696772666908173386614930788756197583072934885828130993682145424728757127235286315521813642096922688459259461425289971106655270481485770246412771260304464966549506103650895131566227898457811134484965368715717134089803381112691311475426575566448140985691161085606840914659622428145577389463824133259231811430502639161240025015529481044954169729472802341374057381885629603862257881896723142847775360131142806913831232574514789529749473399521738829492520088122081290206305472334608769177925403736071914148493002420957979058695959580801925772306571673099209998806211002412432848048563452379511641504352970338787561688735313007631183067010105154640482557831711588547919842976661636961500136115892439782710924561897852528837732358681021692731695337647438052894903030197640050840294885665040041019835082043620284688007896624885852420101167068905382800969994358741627501922782733502225671974489050859458362805184054771350158198142563278324467302508748926976476701504269486476059379607081552860376803161653193503029660713960084877821091185491056469996829275854386505108285307079224025423395734830529035214734335707759516993637466732687079856852417939166213618920271105573933655163889520296466256620017634465571777064404092561372833405636370253867133278769979199813683470268102731202604823233329115872521764625575705365780707876802410405119130806127372867196148439505109496484327978081641895897146683234241428520106701879035021518584100571033073496051119601856551625418114588310878641396520606473600241425257315917515725086397362240192190331168413921403749169513931213274663422983063805107759279903663781677248939841319490693806072351567333014180846481898632515429705192027507805638651999847083431968424023031941377142734913685609861035417914903171268011314679771310850064464352523707318181727798665938675760990699151633449641412943959502942255670954383140962267564305775602639543501720990271480565175376634669577457862292522013904010517553887316804815639754580747197273682859143972236303758459296719747805497617970515702061604526175089275171707553912734609467992843759989152415061433323088038397036655092492461171793514824423191967019359343051511721053140748775638236782250752352625434271314734232462661566094150665331174818569153883567780397136527892440077153063267601110917075071837541286495667710451723610186934927450497455467719339618479311671791093359337372543585667601611716587748173992217242777684382602260336313003168459306449897822890876269629555617602191771285006549005534690865880379474956582354381978274073464650792262793280254180710292883968374847594714704808527341634551817977713360041882173076834713229118311160678704953631212895471526605549863475040716299618250053540699481459579846657099494691679674697345235014875494520718902473304455812092409825097222403717683690744794845506611788860482886297815508873427140675076934957031110566898440733833211295609540112443879591560295573536984288755852227296833795570640896994364933159110677153452447746455230492167422422807214127100631205803885529170767554114266094775678190116148652150914521895636983688355921130505224021012752647476113832301534804558815785794991995708735782575533515627326399171240772076288018304060050980385789444619815122019203501209553455065431512057538185951310194101050946272610034372928476567165963368611841049044888195940601294998912665949804482600302526410902288120383927205767303886917226818966143926804379050385997310767099225010606314953255076161009537359821112721886426834417542790559931048636864232565851549127828038469989085012539217511223312819495076439051675533620772829112903466131961900503654716254073491253189712830351889542383582715803748271099932691141333768687802954625714834618264145403050302122735227300279778438173338041084330935169565814324265265961035466031907707172087866325882992841974228062895061212869570201805622273278996652625923417980372649874271783884201666441830256472791328477567041808286410577794339520365304059812507428693631855644735391778691680981190519623976042469075650434548078271051324306546883853763858570407795183866740814903237514450971175499529104789822925709965042010903360147777537561592168065399036617927812632515605100975313780871377873761919656894654922053437880137865450996426644007388232098056950112425423526345702417130391554791460212432134632305612306691687070986988540976371798449997416304367054023187108061653477752469255568032763633074451940933245537735179050654522976213139775450959410601153922357903422083742131977000660776661587477048426994694779937583301673734569166918102575048143511737692775785332185382435480553046776008510513126933584277822805655532141082318327000719483478265331571637296733655583186260137796662063567509168233121125783338300308626974642116829038228902883193990222959483804959058847731906765804942972323203702437373664809779445676244595230713479328372185440307864775617203953291456817463786202292093003086703077151272957463376542758092560778654865461657170870465844798541081145306269881953494890311234801730488385198866574243538503275306709047362045966487061101917013183200997068199123020477308905840517377138826403919688689497687810495172387624510894225926952601795118105180468591193237181058579825366007273736827130501558103725204047203898320930799111508203848016150733361913277295423427009523572335778133156849795819819908775219820824088708962096949571210022871191460864477190009939582177888735444999018363725468818478417258434035703204899516325643558782388054345827542085906580562665830757877762136834255743681069753449197437417791407358431124484226741355600392542161564947910924898236667065698298122257624444273197485217046938111179373720088166529618738286201655495279341803395267340418949144374190029605618203884094855283121620358508461320789157851011070880991272976201174370287693322949245910161280370988242110039039944003789731356450243229044821789090026574694060536427502104204497176554388393263223117871972808081564540826484599092322973242064266010537932404441269149863109923873252085318043629340735872572211509485612741870350862663545497258543687607322311739517969249992153642127073579734840645439827181376206075305720117008260424195880226412308055123278388575043130691491064369194303776215187036722224464276212263718615878787755378960168626905214532032189251011580537529871710706689704062234962722990721188585496371287120202049494255939191287564291463213353913007297767656260994568631814056971583829557977811629541666434037732860770494387688872826459720756379923830347583202392602644923599402706981327606668609729697268719921391182445001369270092664179803560202149168214633945736283306424040382275339358958371807880722057712491530105367892210932453343301010895215626243709613350667337151518701000844041081010836214383617940404781536510036283247069626550420310079502818047568975558898322611795231565267791309581017590962728878586909919875970188404699243790751744927221570924690431083857118559251375155947615058773442978674970032947059238845726482718157145439273888959492781222362020866586148585013838970326956465821671427409990669297099152798126748586992736175024393311158117055808543948295973139629477831986787741582901280276344099165423975771851070371686179343009150773158502682055382402988717621330646750843768552480192291172418201069958503000505403215715067872991864080642036367190226800097905342932261276959560504907979377925995133035058416378698286850165549815656676934414667979564787673726613791104783056836275183730165319322461758644249540931372932056333201469171105391900410059603903589466605153193618297315725518434655997566029322644462358259688715010933175200662796898689394334789786677545409906806685503080494729899312219684287921637898872396001627704885707930105154208290165042625048520855897646160553370804520560103864491491395886972911184781589522382826980552231739598332890670146370457895829254725850445862569003810005684168155332505991016000586497434595884627103376488262342771000241484374323984185206211638850634157700806231887079714064910667576891575106126291624005033118482492975999196990958197132738000769626437237778819072947844698234224914435631297264263392819923777848863113241416637579202371089057008860057292126881502664159906612336524425685238190709973956460034680274456272103081443987882533022274035216010001817513840189378571723579159101273324036714478241548752997439858597195548427111733207347664575502608960422236594823367488308614922379709808558239295604467823307693631564936310644975793242823510486928827127422509100262711691323652005467748596850444182693737488042091093479020971481623173529250277158007907244575415337685084677715654923956914413475884662206411882892156207004831744119926253188677023775377148626471071247142015198797130374724952207368747848717394162364290881741093138119421082786837459073594390930168640300288995494858950465762321891361282351901659763435497732834912499299574781747624623149464696248712798576627645530519566579944735937805344042425310276592446494450625754337207974874511519049216628120947329694434447850753664217654642860453452541530064155147679406348044538351003152488540393876325498159969476292083808198834159084293948219351481736568938392696099054948141391555050596304749651363458244538286843326243846331720093384177597581242221641944359710687327564150591165137051181254743665840941562049415440063330514908279672344787018473657611027088386269083528868080049565171913479072690983995692481182881183141126133055499415377169092477935732486604950964988911808136311295743837708449349633812037049819984988992790871775971304333733293211386988634499917482316417833703467514197298088674899951081195271370639222345905852154574307380522201625079179249391037654681027337525200870743999619790788510701841964596908360802996158156694713078413969895658375609929719132505742208598635503320722093207006200782486607296602626068827600304936763802094457557128782083728118701857366868738417880072587234528176304848152311448106930977817004431654364821376365016343352394898523040397827972158522293827910224419581950273948219264526801284153685234747052007315748303769277475762725381490905446923480399319190187351735342977951703351862641584568989713269542515206508498431818170585716593938904222732599074938112510298930925659326622167844406283283929714565770036469069712809629134062875778026924561173587082478387458793847161358959419055169491876114906460369901026062432734829888059719092559534531681133352010571079259318615911969010265633816996025092132125593425457233757028976391067606836487140969000498916023372844781312690005396597389525026248033477222482912859997620898778631259751805460569868781279343712017986480605951266358986469458028894202692825632765036194666852313031479736208321355652676231149519617241650912510348112476611958287496748012444779629581616701828481266879047061913674505668678400610559986846836002954056190013079559623590490967367041211107897708070937210211880416909510325221804914820406144861245561131487515500589844457911779585136112836519865561756282152824336015720392161926491647805256879489681931514159698932693907967198545623027353299953099597281829897168425729855275313900953164206195215537737264994867678335229069376149394965365249536858104405366975423140420387378828419810085493558715518760822258600600670582735980841401532771909645635394986517954218925726302552001727617454464297587346009448169440473173059240751036756568039564487525563776859834993544533310464785007732332803276067600275326244117459757516576082786106415855612049320219671476016043979414855079517014488970107767191275852440912513702032288716566414730724795535385753651272186201618391132199754912337634059293143521411157293835269166010552778516362133790594126915006340398938673223617160885031451347905354162533574913831194933169092008389024778913420940890912242706054047549374338634777395461779424327127321389082499041045802823846774412147234842109164018916947583203381817239969838004063623679484931855381843692048459212946483810127688783627832217454674507253508356910108613349949756517771958852762906676148459117388908631012825571825234766050013673657165900353181981978032944739065975479838925656375765694897278322444198614767788253107778741650063956458552339668440677653174989972384454989837047071977011682587992431195287118135674015110833359150574746281705912752318871977720492519912645101530150283548180012257604398282324890336216397251264040085788292121783304247963428570952093774897409884242204080485583324119811388022581353526773792065422208228042691683703903583948136948931276764007346728961281436913372131293140308011976491731794572663533230001814830888355363921460022447293605263274836081896130412229208041697957854925943389633890050503822871197582701304534513353696376748339005023326644838748681368498658707066634044225811844536953253617099665653187207947865750060323108822854500612355993129875331644227560847303311016903148481178699841892948817618678866350358172259345041152228034974210459813280281457286132833511302456748672255878153514675674044034943582904645100635535914766127713872351892240803189055204219501606928015404381484770424610022234543910279774845112737316599178234212798789086512035205103370042008962290996113615987129660313752244157773444787434626773520625981306637858308281530847696485635209779356883606082174318710599839879455164046048445825546677634130890081085534760814456088060712880463193093166629955391157552563953044118522381802699005390908644216116107319692267020431522071406421106409042759268549529252567860303903503597064529794028389975158720181703865910818151383300111249352972768770409142240068611348748296511264515741986894019710896324308833610157124335362635849960617316647982228226829060469510156933323661137935335741102140098210443521986939956313897154711769769133416629070078478649696578340586465015077272349445890470983528892319974919456362137340319006420218168039718042351784258955135925725764636998811944409290818003873186998905239425898471882587259179339047569910426425629757012282682167871806759406985278153816696118891874033509402968869042412471152606187152008566157852300496033843031352371646090078858198526753910293383658740210355404622968344974765854906001349964564020060395590376085998685170409665115863507795938554491580610403180076008303053347838221411449104296917926945940282483307689570883864772805822392073093566436986838576144790016534262698738790196902500495619111912423636275499674699808651657225739174680885735544626504457492427275652459347572991123680023462838072915080316492105195994131108937448999187587728938921415867160003003801818929325837197090736771905202982354327011779462265215859816497758244393648674542414502126128342502749360442879257547848251379471174372256680466113542632659294592876565861273961214389036177652780195157028839245543365451277185633712666603419237576155727681773025269968160662352701578599314722099208533999722135486284584206398274099887001494503800816369639797121765843959121162678393893624281175655762580224607327395103005691846054467457198881786835205285902076063041931985390207393065055404469606009403012892508506912926402628843658516640176359599107618475119528411925365671337823818779566624463506937471081304637675423224336814223898020886218770984420448848179078498152761217725670989689228419655736983833766412346267478803578622045657994963995340682029219261570061596879972423728675733185159109461098864472992872363448118059005671375653661983303488016293835648438007063188961753917643513368611580690732347411963888085032198413494141302149974097576020108791630929534712525733277424004921591434335576540778774923343622988529512432154601174061417360798859207893452323376295716714487897718452065510810982361297906405877175522251360975839078714035796031834531217218410624180454011466787377446471429711847319387757245634997310093130942482902692901513217099527043466649288572698242311153866828057951423540513612298776597681076092645463883609765218167153493185087320041732775385838269204122933518071843640344502326862765028673952498207745403714286725514018488682822430364168853597793407562750938135634240704502951147108274044215460476550785554342441664151124078755405565824308024438177490670210831252637832022581084800677477338905940363344232995359705678041709885227518591589921649799020623921703539411739333895091088391186946103113839281580303532610705708470600015090736875179676919359778314174424337506625194932579426145228756322973202872744497591289015918789944707607654908539199695060192486834693260737338187145535261832080738326995284380617016558964375101677850427381585988299739749568104657983585749648940541084391477270888463356075809447928292409329137013724349238962305665956317948812227979866400118532352274963935765936596542641986524299321758548373620625175637888429863211857766622990304504524507662147554196603457693534515484039355756669514073863164653513198300229510672364279272406837417225324119649056250411983260439060932626688019429302444430276018090584185027835602356537952293187007816968437788498252056282586678235450819665450995609017805211781992195270759878454834677876502660893581997649309932636484247537093221406601736605473030260098398193641129082567842955146500877407661599978570498230322095292645857027024712768160355019945440878407118359218399303741172428691600287915327787828657432939699091109903145450982328371706014275144540289008093260962452876378525539319521451106167036145885959367182214633189266975946939378875881674528678241954379439043595347795688362165228017038253880985776761916413268437074921323957752898808040550343906058669484682649216542974087523052904497546251939265704566243525346290150306703549499818217768894801827700528917545760421504836496640987068532055841203267965269711512719952942800081871434907850844697767959004770277583118081949303107943855849250797904082829586882341217473912218863541644546617713216015048959601390196831476146151456097189901369923807086827244993377923388754356550279686269114393150283157896426548014479583603539497664691092477863966043671736646755960774532700278222794808373532075116072835961602113407693609564500764702018463672599090980635025225539608551542451522794399902191014137731881260385448891172478298865136877836213816437611489452299395940691662519595246035809060112610718331945458801863143384298797830441069699878888640131899803761992956229881808478373201094835738290890750959833733553795393233188706510432156225548163999232451922091735836999659321153532258172921158140166320221280457482842055016995075050604046647649285684989553921999263265211175286407081796625889553789817237831319113197559086217751734429363893659080523529614621221193254080505576263769646352458364936360537181655885771991818162032943438428004045138134473126133137777050056964425956032873632148806263974244370590140798168876316382785051869570158483609662622999574414042038436690942801576546370107232018618097234292772782317478073497089911680312748253047356914800740519708508881091229984777346178315664618550885621445873229709425735578589516710751123982083293305197078573368244950167904949383624903295596920365264243514299932336749506437728872894892805866624530050967104888459117194798461105876583248652632239220930617935462885578805978862313823732005323206058692944898382875726526267170188046165186771671076315370054113607977700098899271333225839180669856148847381280616281878107213548659658482732913598163261095278377474982015809456673785616022350293511924367984146053549565797722013579295669568522519077332808149248947561813516209486227408921709189211470956832883128416614739459756459084328649253411710614583181281259404890433970891246912270809550489155872962968009855277778338262952186723723882938145952970294709554938603621785282940262253648229564523325280376250281043084526005863614147651936354049041847640311341996304825092665488456591084241262135022228256134350224585724121552080417240735756105486565375574566442861988404646387597438427520725779512041203073018970553991566021277116448738688961775712470365836339007941479948332982049433874959512265597671547566784304590242699596330029045473203194404763988248260402465357480336178809442850491213191129723543641403441144248756407908498817137968467226885802945252083069268814892292721541482829244860033175304755982615519145348621654898453088561942425592020175507921122103067413762163454292450077347008229299387748427560375080744956188768075202809681987686807444771741545747026815233206319171644786008901258807026570188003284324019088365378960998860955314439307607155777768013677577410628215102560292674386471686434625700437968842253971636456310929407762808213281975123769884511300123544116791571269225832703136751179270142279379177879453071441500386085767131259394039052507509644375417941110636862311721093003425767654961725134039250366248758270637830186156326865782303274615459557077913241940886094816182241220169243939094771398774371578485873425804508104869110824998300171992382182723563749780712162317109364378448882831547250285063925164488183531330516226632341940809360737971159579354135379434212897165783842367815729440875734178151354145017057061714416804360078439177493903809527051026523549623306931939179164898710898870728238181616415881126465956952662321802006631417138679414453121991709399375743146068952591253830614723303513905785089654596813496447005489709631789817568450340276720058352324638822256647966025549804633102636280331243607848677964875295160115220227512008546496396799294173136977807257353273833315454831188455697525678518802268335424442482786011185648825964517642582469645538370572889905112543289009751940498431508510161207428930261751576244500780267531012350921284443667066835839465710486882368557621683537877510827967306222150038306320742981961935462498050675965301073376695964865927367167418592974432815207121338955361261603525631814514207443460418512119932209569781705951564990966500929267120903442128179327622417114027556949911925329655885131248480142032769048023818217410870916388321778648670646267515144643619351488418666412095073503167208763426831951906373007632432720690386955675457412046403706949130982705414037136524183378594361945658302654547660915348204497274708116015410745650162513093159174980619991205362639921622002825874976308934159572037584276685383811542717700181812004061489893507903286766524141476931473485857441050279841648230683239687994690229284224989906336872778363089959693882009996156443823302279818965458964389036535177733031534432510329735067569000947259870159260628791068264368802497029484248335825590816879633992516055203642743996629527959653586287348367724658455806933463596194624299541653485488346326802706615700386351914795769602212955917501872984975764243550410761373224993169250049665356551165346274379999114513344936098978505942849649373148071574822221123457016763823052900479103027980673843635788399432878112348931593100124281481628305701245973556976527809374249398705680554420600384962887583769773531131054939004222303906868807474540695542364953317631982339429292891310912170312083704485020147812237790714386136663123530880448052109560219739271398318641393317580635867297971555911060582923725967266982805233934331052204813628288102531165419298802072215577640822185087648826475393447873590192872445772764731633940872647878068851011641654339844201118449310113619298996742325361337982748699101341741349095997184554594781967586490653484854826199253758035792528809616138221492684435905039964584954627795576829201970530498543351795519402904091092600464612023805196773840032727580691030527369806583970006984425009235279890453164126353102899616761505553966559993313528237199433079776287289178119613364477213022831051201667112271178980068097066545504684263926202370439454178145280173873309467870920503122243519869484868315364286011081236557106635875181492368888656020846853169140635799769893991858595396897839794175363752529845396600334424327001829171255441423409715843798915446709526386674765551681658263868800579064084124966877071383545115897274054517520144917663197564545039439278865954237879270058010221609437056135928343708197184010129742518444825456769121394785822633615998243959609454977820451287628029959481592847450985818740505700975601099011634325937337692374806824292467109819408937488995482708172536243775017544760639864188784060324693898867119595984612605580415432564715732695962847885852591355835570259974736399621282637359376850297968198394271680095764420534355494873269100335486600815778769039786295951919976080195827018500071251002841761555343073706048176653482907596273944635577209623211961495578245616965824451700609749415103942260344658898282674888046830681328095202195941879922614445669767877749601401419470126171589740966126229875100650717410997126567918273421277909932594063998036118132233441431339959801591569071697064662952572822303797754668624469228658247022421145801746553283894073472795337690823599269943945826032067528483532893175886824114816356487578716337904175246783536053579703180936714460804755561278737631693072293372176440712113179869602756869537648334060081499530356334105315468248670024770248767356344883070482709823069653043509144534375660576402412094158888443914377382057540281280401099377549085480864380339863682385416750458286184491235451204272578383745628942723856574225244209379174382302382828730680018920352097835787892897252221390234710908051307150906113482723391388732671225877898429294060861615519505480414294037544019899856587520064693475048805842622863088946153897516079495609111733754609386264150045792579926463126597271267719027125378422263738378375122657715586122361240968878038000665901464303022160651411412495434088691075328489176262548725367508930405862568992856186137364425485522487220686326409782659624485413704120673599210233051715802923146953581790177556458324289166058796030298639058314607664703301490125199962721443190826394257243900129030875740897849414005755080825249870369311742123740108905098271770864797956935055890677315069630572656045960299243924411454038390963542302559201853694142533392044397549187926500783062374412385564123770663536237377095607423529370517967808044650940408339528538453000423564642868503232127851612621875994829242480909295649469682533076406125942726576619258140725978029080600323712191859007595322715457849103260270402681212337737008062178645476821070953170970481698611692198429776626665805126512499743701801795421709256713071525204785561114301102468950353873721709586138444314841821580670016529741245592857091195440545111359294355082044903197702243216328192953880495270865375926129987219998430294760633054860628235234340302620999173900611613886241850280417919672746742043986054611019406531249456016002939667825652628917949656502582791956932136659180751271308672504976026486575374105027131689725876037685621230339306108772537137867913469017957754257957665133186263049138522625033564323598727236315566278684390471535281504620880963990197311226018233600450942749845949332782871687519766314417543023613183125584046793159731631541205673249614868110192419731883264178337641213776892492139834655053323033248946169360521324581507918144304108844784599256033743827635067081039221517022684628652983327410234282257725100394624484137694317868913057904590897193548990380068863766572150345796250610394747803343672096524613500908242332816735787181056408369611041070254857129158989245392938636195850982167373278638136973441184681218116183307674729694393795340527216984261918431489103724250073855603049292513663394122719263788193544394733129999054551993241747743598920161036725958365223976437039850938258944382410048799371296543712047408014786935913054538588953910026072410392422058506153034476591672052762242842783362835131832248471853666154001539056438585532649900612945170032433170450922123858286300715905598619673050097289932190822302556270374062620609901122613909649872750497464002380930170417278092207911027876460731420713456058036426835132159359732073059830151405981680458086102726998203991144209039743885950156462047485482585511267065061472288375886796669849668221272861602854187491532347183261037758947055145487352320744836937202457530013501539995397047650029897929434941833374268509920864544603262347842631128849713930261829754821837569231672566436967489739447399359768465821180460417492294479465073216995420218865781071184971032831452610333920060761800657563200902052562583172240836640219553604890453271658219194812787673679250189488346674290011080525849991178039446670194598175166676469548937008013790649784617049342899440356086561004908159163116170267149523860934837770904514232930680067013712266312404468996767810564506372641833285132960641076725502175596318430410170174053874467106173195859219884908337429328173242354006620124252462104502947522182159945197593673712034218948217196675393863924994419221531670874461495607244647455268611955863549256095484384474936423558984302049625035382755162787527062755492284087195732297791874006609746866376367568099632710720450954452190548348689509410715177910751099341804621743357822456412847699425600656836066852451568670650566737678089557814984441769330111143746849905559285754725500392978547885667485590979822522562480152646346833218849038104929476410517744262989714147544434263491448042818610680400376074707009240228369973685366657998350305549811926754483880176223260642803024301794790013731166761920612978552176880653930657231732544110163848582239651107567037626894012062657089805492962653655906257457621500285023832331923182571473774895397382762211933222749258074982649922067239353334609176779857545426049459506121703191041552278933383165152585037721783238347650784653231550945466414906614703064490449573351994981464772118989092131688605634552372780769777189679670177218768991326343001183418876406121720338075587585079656795119929582797414278549332758194163084847201887430961963987132740342595290816056925870507682726319994621234016517107049372953687069969595244460673878529376469654726877865957922967468527598682903080420460064303791829120583872319235687441954836508493206428069196008310503777462603184376562253267689921299901475405229147738628244025047139113917003648935000892982335778966601004166768501644916063512051428697644508187179053800214829674263758996961799214851186008698600986127830445138560927402687721295949760253198757530916856440711170759596489187456683111885832100226436722778217724350490836801026427668414641485627396740230607097755784998483327055721894731605715597155345846042385113841453596988829584259880769955603062980234551375124582610003317472712513350648721851160783076916555390573325756531235465927468600726532006238441275947499489438440885633832901009844067551413833884925078091551446801096777562437944429181213271559350247848809533847303357926821453638835743009398051607186626149508321472043721376402880791426059495064296487956672130944999856996160473857182528558257213703437646343891545041405036925633197181838494361910763854861490240555279189739440618874411916115775871251553779997481681223879026793750636133517868199246977421207294706975575884836373469407257842692142023451881357390780562153988992057118689674359886002991899955793434456531079061217306138976053179021789542660743025160866810113068783667440053016726695592791928555637824640162210273782970541185621551858642158115756962569292712247998050258609823852737006387353361694710908858491606014812091266490646916362319022708730218008985535739975334184669226699138948522190626228833417342251406296282972416150818962709867525694375633751522773336425127882961504598536101846095032475582582565028126233293867835017873055059651891658418033017401532027339423244521302922264873653397093109167783136603608258684872482954952037653980257758952111363934787217563721052915552558458111156621507661744863838034620185719918878632911512839082524605711078100496543593827285895877682823952181511164257654701319712400863130160024255043324067584373187289435970864715962407648898432594191686788449393040727785277008159803434191496353853627720430180699808357303990624270227621217714472489548015779108323280313079972884508551648709344015662498757388954185124770535056531922695309420539238485027016469066181270410490003485790465604934669819302921245531037383378050199878620008811982696323911054477872171527221617181899421114057342423362872121878807080666735968345323401631413229147553962441502413167059437686658214920832259289713694767279267522208839987984204618365179606180714896111298157732819033202627923134965737692286123047503786845517259482759416266247408307368467749051742186822328871953877879787310568456042456713927228282982912779719880098271232097462329468633744781823524764119193035325606063230237051615712933650122787224051786645609497275739114341581486034435246786192115392602458237395730905025351512452990800254851479939599170385993092538457777666631062746130888156908533412843800492391459072118701334506559071086864626138471017041644127868707002761225114181102842514967598118565364730831888632530805527063301109401886997897991294434111454724564214615892282341153431812407287425207931669238380779257204518717257380152839816121329635603651563885695708541946304322587625137926080602937056194920619747211358317936982132665739578680318208910757618298443920297742646693077847575927866470225439590847471780158758359705593293216189411156086377728053996519644503673022215197066684987662815948393653215236871320594071551725133652315709823620778399007965822591410773774886272278498968137222548106929466685331493119394288176804598369228420428153208686542980413012484237509593379250325913429029246530950079185178342992894423732446814866850165103299331116489104712086848231518756092299579844685740315992476183637942214592225448820871116659832139942145389191674652181733639030923745389900660392164654615265737211943569444186492094921771638950308487002805092904685664838406891958101389381220538313718698478339224140279089746963558081903410703093957456551582816470063644326035111491953563640292566938719437597799154188855966696363519729817444586504501182052059013500260311173636683476039627745006517878331532879257720116185796530624740511559472546303055924484307011046331351464078151567685232770238135764140257659099188160948289408266834790948452158792137937590370698987263377083227924356086538593334529602155941877509469442378861459886126542208380198306386145332421196079530372559562464073576118232810918848251763282552404303418042994823170349406172163290309915004825447712380845411591858584877248196410879359274013166258026461840240724200559610672364574061859959760190151985792368470697718018562773268805808848304495709357360520316645548487915352956023343414561476846366503423869961432646938914742768965897606905905610965372706650763207768889803464981749943551468430537824603882104678371964571965106288266877780380080832302292228913917515446136070935558127834375914009586779877788605362873274866628512951065338730427306244677537972069959756639600091521943902956046014587642011972951632539545630507033902156717999766393977121596818486275919220437532624072276535175710124350177843646837010935892502143889519523052745600591474166443610260360518147889113337578724534792335279160701715308767717472015806344659105731881146284883606875531707681739631320354099703182432029355526408037345713750141635010044599831520315935740486408423957302977930124853899639530364799254762879916613860531393655743610857765677909401347452092606925683400529737893407663994668830419568372155251305408730261886813863194028949035843699066822420858909293306641891816403295944675640909719662139266835051500567870070486122813295221779102993490001111364801669211604012952086217573881421785222074164875566038646185029184958712384325217251619448351811794096968006419176362222044625960759853506155132548488284950054236473509441133164443408464351464852912731962799499329585782574269294926833523448313868286333185533445744569597896686516783716269122073133096840513775041677822217274508186749522361172183700484542645962578089209151161821264118967095614683078758258020514271280076082530489648383188873201559541480622977611807724908381789778438277645425418628E-8783
Zoom: 4.69449307780E100062
Iterations: 3149655
IterDiv: 1.000000
SmoothMethod: 1
ColorMethod: 0
ColorOffset: 0
Rotate: 0.000000
Ratio: 360.000000
Colors: 18,222,214,246,246,246,41,13,43,9,7,9,232,45,28,246,246,246,29,35,214,9,8,9,224,31,238,247,246,251,228,213,241,9,9,9,243,210,45,246,246,246,25,216,31,9,9,9,238,34,246,247,246,252,212,43,240,9,9,9,225,222,36,246,246,246,218,25,244,9,3,9,15,8,9,246,244,244,218,14,13,9,8,3,247,214,17,246,246,246,37,22,239,9,6,9,44,30,25,246,246,246,221,228,236,8,9,9,9,210,213,244,246,247,18,222,241,3,8,11,12,1,254,246,246,250,218,246,224,9,9,9,231,15,17,250,246,246,240,234,208,10,9,9,242,34,210,252,246,246,246,236,14,10,9,3,238,45,14,249,247,246,225,246,247,9,10,10,217,227,229,246,246,248,22,11,230,7,7,9,34,209,10,246,246,245,37,236,26,9,9,5,219,213,16,246,246,244,3,45,14,7,9,6,214,214,37,246,246,246,224,13,214,9,9,9,246,224,24,246,246,246,3,31,227,0,9,9,2,37,37,243,246,246,12,24,233,4,9,9,24,229,9,246,247,244,34,225,18,9,9,5,224,5,27,249,246,246,241,41,45,9,9,9,32,246,245,246,246,250,25,37,230,9,9,9,226,34,238,246,246,251,23,246,238,9,9,9,238,2,47,250,245,246,237,38,15,9,9,9,9,220,233,246,247,246,235,235,31,9,9,5,20,208,15,246,246,246,28,219,31,9,9,4,218,36,8,246,246,246,45,33,242,9,7,9,222,23,35,246,246,246,22,232,243,9,9,9,210,39,45,246,246,246,24,41,20,9,9,9,241,246,227,246,248,246,19,48,215,9,9,9,219,29,241,246,246,246,213,224,45,9,9,9,45,208,232,246,247,250,221,240,241,9,11,9,37,246,3,246,246,243,229,13,9,9,9,6,7,240,44,243,253,246,9,255,9,9,9,2,236,37,15,249,246,246,229,232,237,9,9,9,18,230,213,245,246,246,22,5,45,9,9,9,242,254,218,246,254,246,14,246,23,2,9,9,12,31,214,246,246,249,232,21,248,10,9,11,250,231,241,246,246,246,28,30,27,5,5,9,19,15,228,246,246,246,30,41,219,9,9,9,229,249,215,251,249,249,246,219,246,11,9,9,244,41,26,246,246,246,24,235,236,4,10,9,11,252,7,246,247,246,246,43,237,9,9,9,8,214,0,245,246,245,27,218,30,9,9,9,214,41,236,246,246,251,13,18,240,2,9,9,9,234,17,243,246,246,7,210,239,9,9,10,240,44,235,247,246,247,212,33,218,9,7,9,237,24,31,250,246,246,238,246,246,9,9,9,210,47,27,246,246,246,19,22,45,8,3,9,210,9,238,247,246,248,242,224,221,9,10,9,18,252,28,246,249,246,37,210,39,9,8,9,230,13,30,246,244,245,216,4,5,9,7,6,221,210,45,246,246,246,9,218,224,1,9,9,9,41,36,244,246,246,19,224,45,9,9,9,219,28,239,247,246,246,232,216,13,9,9,9,213,38,233,246,246,246,212,39,212,9,9,7,42,48,9,246,248,245,35,248,29,9,11,9,236,251,228,246,248,250,40,210,244,5,9,10,9,43,229,246,246,246,213,45,28,8,7,7,10,12,30,246,246,246,217,246,210,9,9,9,37,45,23,245,246,246,6,6,45,9,6,9,225,44,37,247,246,246,228,24,27,9,8,9,244,43,45,248,246,246,216,13,220,9,7,9,230,45,218,246,246,246,4,23,210,5,5,9,37,24,24,246,246,246,228,26,33,10,9,9,255,210,228,247,246,246,41,45,19,9,9,8,246,223,43,246,249,246,25,243,46,3,9,7,9,210,15,246,246,244,249,28,3,9,9,9,31,219,246,246,246,246,37,34,30,9,9,9,234,41,219,246,246,250,41,245,252,9,9,9,210,37,35,247,246,246,245,18,31,9,8,9,9,210,210,243,248,246,9,246,11,6,9,4,209,20,29,246,246,246,228,224,232,9,9,10,210,37,241,246,246,246,234,242,31,9,9,9,30,23,230,246,246,246,46,229,25,9,9,4,245,212,14,249,246,246,221,29,238,9,9,9,25,216,233,246,247,246,227,237,45,9,9,9,41,16,231,246,246,246,
Smooth: 0
MultiColor: 0
BlendMC: 0
MultiColors: 17 0       1,7     0       0,2     0       0,-100  0       2,5     0       0,-100  0       2,
Power: 2
FractalType: 0
Slopes: 1
SlopePower: 1500
SlopeRatio: 50
SlopeAngle: 45
imag: 1
real: 1
SeedR: 0
SeedI: 0
FactorAR: 1
FactorAI: 0

Optimisation[edit]

Precision[edit]

What precision do I need for zoom ?[52]

  • -log2(pixel_size) = precision in bits
  • it also depends on algorithm used to make an image
  • "the distance between two adjacent points on the ray is calculated with at least 4 significant bits."
/*
  gcc -Wall  p.c -lm 
  ./a.out

What precision do I need for zoom ?

based on the code from :
 git clone http://code.mathr.co.uk/book.git
unnamed c program by Claude Heiland-Allen

*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h> // log2l

int PrintInfo(int pixel_spacing_bits)
{
  
  if (pixel_spacing_bits <= 40) { printf("use float \n"); return 0;}
  if (pixel_spacing_bits > 60)  
      {printf("use arbitrary precision number, like MPFR \n");
      return 0; }
  
  if (pixel_spacing_bits > 50)   
       {printf("use long double \n");
        return 0; }

  if (pixel_spacing_bits > 40)  
       printf("use double \n");
  
 return 0;
}

int main() {
  
  // int iWidth = 1000;
  int iHeight = 1000;
  long double lRadius = 1.5;
  long double lPixelSpacing ; // = pixel size 
  int iPixelSpacingBits ;  // precision in binary digits or bits 
  long double lMagnification;
  int i;

  
  for ( i = 1; i < 100; ++i)
  {

  lMagnification = 1.0/lRadius; 
  lPixelSpacing = lRadius / (iHeight / 2.0); // = pixel size 
  iPixelSpacingBits = -log2l( lPixelSpacing); // 
  printf("Magnification = %12Le ; radius = %12Le ; PixelSpacing = %12Le ; PixelSpacingBits = %d ", lMagnification, lRadius, lPixelSpacing, iPixelSpacingBits);
  PrintInfo(iPixelSpacingBits) ;
  // zoom = decrease radius 
  lRadius /=2.0;

  }

 return 0;
}

And result is :

Magnification = 6.666667e-01 ; radius = 1.500000e+00 ; PixelSpacing = 3.000000e-03 ; PixelSpacingBits = 8 use float 
Magnification = 1.333333e+00 ; radius = 7.500000e-01 ; PixelSpacing = 1.500000e-03 ; PixelSpacingBits = 9 use float 
Magnification = 2.666667e+00 ; radius = 3.750000e-01 ; PixelSpacing = 7.500000e-04 ; PixelSpacingBits = 10 use float 
Magnification = 5.333333e+00 ; radius = 1.875000e-01 ; PixelSpacing = 3.750000e-04 ; PixelSpacingBits = 11 use float 
Magnification = 1.066667e+01 ; radius = 9.375000e-02 ; PixelSpacing = 1.875000e-04 ; PixelSpacingBits = 12 use float 
...
Magnification = 7.158279e+08 ; radius = 1.396984e-09 ; PixelSpacing = 2.793968e-12 ; PixelSpacingBits = 38 use float 
Magnification = 1.431656e+09 ; radius = 6.984919e-10 ; PixelSpacing = 1.396984e-12 ; PixelSpacingBits = 39 use float 
Magnification = 2.863312e+09 ; radius = 3.492460e-10 ; PixelSpacing = 6.984919e-13 ; PixelSpacingBits = 40 use float 
Magnification = 5.726623e+09 ; radius = 1.746230e-10 ; PixelSpacing = 3.492460e-13 ; PixelSpacingBits = 41 use double 
Magnification = 1.145325e+10 ; radius = 8.731149e-11 ; PixelSpacing = 1.746230e-13 ; PixelSpacingBits = 42 use double 
Magnification = 2.290649e+10 ; radius = 4.365575e-11 ; PixelSpacing = 8.731149e-14 ; PixelSpacingBits = 43 use double 
Magnification = 4.581298e+10 ; radius = 2.182787e-11 ; PixelSpacing = 4.365575e-14 ; PixelSpacingBits = 44 use double 
Magnification = 9.162597e+10 ; radius = 1.091394e-11 ; PixelSpacing = 2.182787e-14 ; PixelSpacingBits = 45 use double 
Magnification = 1.832519e+11 ; radius = 5.456968e-12 ; PixelSpacing = 1.091394e-14 ; PixelSpacingBits = 46 use double 
Magnification = 3.665039e+11 ; radius = 2.728484e-12 ; PixelSpacing = 5.456968e-15 ; PixelSpacingBits = 47 use double 
Magnification = 7.330078e+11 ; radius = 1.364242e-12 ; PixelSpacing = 2.728484e-15 ; PixelSpacingBits = 48 use double 
Magnification = 1.466016e+12 ; radius = 6.821210e-13 ; PixelSpacing = 1.364242e-15 ; PixelSpacingBits = 49 use double 
Magnification = 2.932031e+12 ; radius = 3.410605e-13 ; PixelSpacing = 6.821210e-16 ; PixelSpacingBits = 50 use double 
Magnification = 5.864062e+12 ; radius = 1.705303e-13 ; PixelSpacing = 3.410605e-16 ; PixelSpacingBits = 51 use long double 
Magnification = 1.172812e+13 ; radius = 8.526513e-14 ; PixelSpacing = 1.705303e-16 ; PixelSpacingBits = 52 use long double 
Magnification = 2.345625e+13 ; radius = 4.263256e-14 ; PixelSpacing = 8.526513e-17 ; PixelSpacingBits = 53 use long double 
Magnification = 4.691250e+13 ; radius = 2.131628e-14 ; PixelSpacing = 4.263256e-17 ; PixelSpacingBits = 54 use long double 
Magnification = 9.382499e+13 ; radius = 1.065814e-14 ; PixelSpacing = 2.131628e-17 ; PixelSpacingBits = 55 use long double 
Magnification = 1.876500e+14 ; radius = 5.329071e-15 ; PixelSpacing = 1.065814e-17 ; PixelSpacingBits = 56 use long double 
Magnification = 3.753000e+14 ; radius = 2.664535e-15 ; PixelSpacing = 5.329071e-18 ; PixelSpacingBits = 57 use long double 
Magnification = 7.505999e+14 ; radius = 1.332268e-15 ; PixelSpacing = 2.664535e-18 ; PixelSpacingBits = 58 use long double 
Magnification = 1.501200e+15 ; radius = 6.661338e-16 ; PixelSpacing = 1.332268e-18 ; PixelSpacingBits = 59 use long double 
Magnification = 3.002400e+15 ; radius = 3.330669e-16 ; PixelSpacing = 6.661338e-19 ; PixelSpacingBits = 60 use long double 
Magnification = 6.004800e+15 ; radius = 1.665335e-16 ; PixelSpacing = 3.330669e-19 ; PixelSpacingBits = 61 use arbitrary precision number, like MPFR 
Magnification = 1.200960e+16 ; radius = 8.326673e-17 ; PixelSpacing = 1.665335e-19 ; PixelSpacingBits = 62 use arbitrary precision number, like MPFR 
Magnification = 2.401920e+16 ; radius = 4.163336e-17 ; PixelSpacing = 8.326673e-20 ; PixelSpacingBits = 63 use arbitrary precision number, like MPFR 
Magnification = 4.803840e+16 ; radius = 2.081668e-17 ; PixelSpacing = 4.163336e-20 ; PixelSpacingBits = 64 use arbitrary precision number, like MPFR 
Magnification = 9.607679e+16 ; radius = 1.040834e-17 ; PixelSpacing = 2.081668e-20 ; PixelSpacingBits = 65 use arbitrary precision number, like MPFR 
Magnification = 1.921536e+17 ; radius = 5.204170e-18 ; PixelSpacing = 1.040834e-20 ; PixelSpacingBits = 66 use arbitrary precision number, like MPFR 
Magnification = 3.843072e+17 ; radius = 2.602085e-18 ; PixelSpacing = 5.204170e-21 ; PixelSpacingBits = 67 use arbitrary precision number, like MPFR 
Magnification = 7.686143e+17 ; radius = 1.301043e-18 ; PixelSpacing = 2.602085e-21 ; PixelSpacingBits = 68 use arbitrary precision number, like MPFR 
Magnification = 1.537229e+18 ; radius = 6.505213e-19 ; PixelSpacing = 1.301043e-21 ; PixelSpacingBits = 69 use arbitrary precision number, like MPFR 
Magnification = 3.074457e+18 ; radius = 3.252607e-19 ; PixelSpacing = 6.505213e-22 ; PixelSpacingBits = 70 use arbitrary precision number, like MPFR 
Magnification = 6.148915e+18 ; radius = 1.626303e-19 ; PixelSpacing = 3.252607e-22 ; PixelSpacingBits = 71 use arbitrary precision number, like MPFR 
Magnification = 1.229783e+19 ; radius = 8.131516e-20 ; PixelSpacing = 1.626303e-22 ; PixelSpacingBits = 72 use arbitrary precision number, like MPFR 
Magnification = 2.459566e+19 ; radius = 4.065758e-20 ; PixelSpacing = 8.131516e-23 ; PixelSpacingBits = 73 use arbitrary precision number, like MPFR 
 

Examples[edit]

Baby Monster by DinkydauSet:[53] zoom into parameter plane of complex quadratic polynomial :

program : mandel machine x one week ( 4000x3000 ) 
algorithm : escape time 
precision = 7000
magnification = 2^(6901.591) = 3.8539742140068607747447368372813E2077 = 3.8539742140068607747447368372813 *10^(2077)
centerRe =      0.4026223242141852148037824724584025835755135011342881027042525627039569502881670946745557412930327115393258794913548834454537746442641230778661250740808696667685167031459830818673342528174897920124209545137508922550549968221550363823064128549715028301461622593069839496780093952808237573205197164572673594064416772605893796305663235635527880132594672201779519565231079208219169990178251347386228988056919160862667394171741551928464324300754658056232719271701044207283382298845257395452425798232763791743779314353854383722879333193167946859425243707261854429090471722384741345982162350257163211439072535377347476863063971161548476045589432821456788895124531684440296396587503362225268140306547818930627963692042601813606866625158984034539104729252270036522838631376204929633117350514392534098621950298874921561848480721715466716034612641357006597673782157926191463771077735121499521415799630479650549024192802530771425233126786755033877940979179549256821540572419329726522803422394291516882903607750877675838298417678464016201757067174161515701977269714418733430534088597594663546370996913330820306039197466323342547246232849027813752870111841998012412400077840383443533115591420661427063968799614034835064533287768378088050419077884398682152379426978057892246066882890819414748458464211672718229513050617638747371353729091501912075437789263019440768014217748069621815249161576890441895414789868155359854876653884160567578413850597585526839599148529091786964892859271522516203113708568784835766360055829328924133199024188688844937378174198793904588311188393798698747503071556711010350663949412136302614381521786902283300674108990630100130448100638953468850976478379826240732566854132975350164428623726436941877225968956042433264823693750422381553726384657388053048021285450658976425595261910844568695172761539871359485880883688256972852102360571149799163601150837375544386512748326612079156006358192675222805435405708616040869538348696626733367203267216061599286266159729225868003852298996109238906739358339973449675179531666048724844664052031271387710787740075700568712301627930122446
centerIm = 0.3414661267010330639258781735300664742792277354243426548082347808924808079842063432641337745084491842274928006043526205335660078979452366866756969329129441667312564036874357179068281915055443525509599130331320610821012236201307641349065669509178006415633193858304674801753225345910395424302568889690765898697389344506716385444532416760848755811454604769082865518885687677043988923482755514450647501464529277548626228211775326421789838725360483456061933115401603120908257520719931828418717929225819541974242262149693721546436344398096633938554552017842417617179797586236724871081452420464280333125369667508863083941830427529275353658367633700463591140837752713130326658698539827580385561537043307893113743040288109423825683661313727523597674848484087312515923976610370831729746783850452751041682640731573001319728478688445020726240850018852640901126812894024112093280413500010748891409049642255971933031658182432137372842717466247939807168712399315317154441773203170047657667231871264210848409477591021867775954396341273647285869183323193925375356957738345603739082474205799801007250041854109282041356811030974599202640896266028843535401330225609771341865327032085135831902603640939226040984911910075236054433300263457714999659548633581618107640012502951867204419221851370812448359108387310012121047998792211175821507898822472067545566323088233165752919891462234618228444539224969139541397976528218516885487556195557179718372941445119064646137527396209369577296787387634243210140885928439211898265659865402840837723799792668419799443445421585714176943014398043568698898179253868782669987422851258992794036747294932260334459254264688360704250224826019403156200812024463700689508527620855762445523530566725311570637375162222843632726633580544365800704348649164263654725083759306974477081672768736376743801103735815276810809861222374937053298147754358060737309317498277835724639189151138998429279826787118135717747963875281826078928680133524179137446312206008103340479076493412664529374765456320670666843471865606806283972354009907403302001818229385746724505497627613149001435837120422584
iterationMax = 35 000 000


Cross Hair by Claude Heiland-Allen .[54] Below is the content of kfr file ( parameter for Kalles Fraktaler )[55]

Re: -1.94156695046089411519723545042405785041614289882129276726563682132425517088701591901639765783026799492137462058533435865811646793455507945
Im: -0.00017301617109765913618843129805085094212526763902256359889382674446838992551267030035919209576862092841923454016429306276671035659004195
Zoom: 3.15216049570E116
Iterations: 203416
IterDiv: 1.000000
SmoothMethod: 0
ColorMethod: 0
ColorOffset: 0
Rotate: 0.000000
Ratio: 360
Colors: 0,0,0,41,35,190,132,225,108,214,174,82,144,73,241,241,187,233,235,179,166,219,60,135,12,62,153,36,94,13,28,6,183,71,222,179,18,77,200,67,187,139,166,31,3,90,125,9,56,37,31,93,212,203,252,150,245,69,59,19,13,137,10,28,219,174,50,32,154,80,238,64,120,54,253,18,73,50,246,158,125,73,220,173,79,20,242,68,64,102,208,107,196,48,183,50,59,161,34,246,34,145,157,225,139,31,218,176,202,153,2,185,114,157,73,44,128,126,197,153,213,233,128,178,234,201,204,83,191,103,214,191,20,214,126,45,220,142,102,131,239,87,73,97,255,105,143,97,205,209,30,157,156,22,114,114,230,29,240,132,79,74,119,2,215,232,57,44,83,203,201,18,30,51,116,158,12,244,213,212,159,212,164,89,126,53,207,50,34,244,204,207,211,144,45,72,211,143,117,230,217,29,42,229,192,247,43,120,129,135,68,14,95,80,0,212,97,141,190,123,5,21,7,59,51,130,31,24,112,146,218,100,84,206,177,133,62,105,21,248,70,106,4,150,115,14,217,22,47,103,104,212,247,74,74,208,87,104,118,250,22,187,17,173,174,36,136,121,254,82,219,37,67,229,60,244,69,211,216,40,206,11,245,197,96,89,61,151,39,138,89,118,45,208,194,201,205,104,212,73,106,121,37,8,97,64,20,177,59,106,165,17,40,193,140,214,169,11,135,151,140,47,241,21,29,154,149,193,155,225,192,126,233,168,154,167,134,194,181,84,191,154,231,217,35,209,85,144,56,40,209,217,108,161,102,94,78,225,48,156,254,217,113,159,226,165,226,12,155,180,71,101,56,42,70,137,169,130,121,122,118,120,194,99,
Smooth: 1
MultiColor: 0
BlendMC: 0
MultiColors: 
Power: 2
FractalType: 0
# example by Dinkydau : http://www.fractalforums.com/announcements-and-news/superfractalthing-arbitrary-precision-mandelbrot-set-rendering-in-java/
Re = -1.479,946,223,325,078,880,202,580,653,442,563,833,590,828,874,828,533,272,328,919,467,504,501,428,041,551,458,102,123,157,715,213,651,035,545,943,542,078,167,348,953,885,787,341,902,612,509,986,72
Im = 0.000,901,397,329,020,353,980,197,791,866,197,173,566,251,566,818,045,102,411,067,630,386,488,692,287,189,049,145,621,584,436,026,934,218,763,527,577,290,631,809,454,796,618,110,767,424,580,322,79
Magnification = 2^471 = 6.0971651373359223269171820894398 E141

List :

Möbius transformation[edit]

Riemann sphere

A Möbius transformation[56] of the extended complex plane ( the Riemann sphere ) :[57]

is a rational function with general for :

It's inverse function in general form is :

Specifying a transformation by three points[edit]

Given a set of three distinct points z1, z2, z3 on the one Riemann sphere ( let's call it z-sphere) and a second set of distinct points w1, w2, w3 on the second sphere ( w-sphere) , there exists precisely one Möbius transformation f(z) with :

for i=1,2,3

Mapping to 0, 1, infinity[edit]

The Möbius transformation with an explicit formula :[58]

maps :

  • z1 to w1= 0
  • z2 to w2= 1
  • z3 to w3= ∞
the unit circle to the real axis - first method[edit]

Let's choose 3 z points on a circle :

  • z1= -1
  • z2= i
  • z3= 1

then the Möbius transformation will be :

Knowing that :[59]

one can simplify this to :

In Maxima CAS one can do it :

(%i1) rectform((z+1)*(%i-1)/((z-1)*(%i+1)));
(%o1) (%i*(z+1))/(z−1)

where coefficients of the general form are :

so inverse function can be computed using general form :

Lets check it using Maxima CAS :

(%i3) fi(w):=(-%i-w)/(%i-w);
(%o3) fi(w):=−%i−w/%i−w
(%i4) fi(0);
(%o4) −1
(%i5) fi(1);
(%o5) −%i−1/%i−1
(%i6) rectform(%);
(%o6) %i

Find how to compute it without symbolic computation program (CAS)  :

(%i3) fi(w):=(-%i-w)/(%i-w);
(%o3) fi(w):=−%i−w/%i−w
(%i8) z:x+y*%i;
(%o8) %i*y+x
(%i9) z1:fi(w);
(%o9) (−%i*y−x−%i)/(−%i*y−x+%i)
(%i10) realpart(z1);
(%o10) ((−y−1)*(1−y))/((1−y)^2+x^2)+x^2/((1−y)^2+x^2)
(%i11) imagpart(z1);
(%o11) (x*(1−y))/((1−y)^2+x^2)−(x*(−y−1))/((1−y)^2+x^2)
(%i13) ratsimp(realpart(z1));
(%o13) (y^2+x^2−1)/(y^2−2*y+x^2+1)
(%i14) ratsimp(imagpart(z1));
(%o14) (2*x)/(y^2−2*y+x^2+1)
2 steps of unrolling the main cardioid of Mandelbrot set: Moebius map and conformal map
Unrolled main cardioid of Mandelbrot set for periods 7-13

So using notation :

one gets :

It can be used for unrolling the Mandelbrot set components [60]

the unit circle to the real axis - second method[edit]

Function :

sends the unit circle to the real axis :

  • z=1 to w=0
  • z=i to w=1
  • z=-1 to

Mapping to the imaginary axis[edit]

Function sends the unit circle to the imaginary axis.[61]

References[edit]

  1. wikipedia : Coordinate_system
  2. viewport in wikipedia
  3. How to convert world to screen coordinates and vice versa
  4. How to transform 2D world to screen coordinates OpenGL
  5. Mightymandel doc
  6. Xaos - view
  7. Claude Heiland-Allen blog
  8. wikipedia : Aspect_ratio_(image)
  9. michael hogg : fractalnet
  10. optimizing zoom animations by Claude Heiland-Allen
  11. wikipedia : Spatial_anti-aliasing
  12. Fractint Drawing Methods
  13. Synchronous-Orbit Algorithm by R Munafo
  14. The Almond BreadHomepage by Michael R. Ganss
  15. Rough Mandelbrot Sets by Neural Outlet.. posted on 23/11/2014
  16. Images of Julia sets that you can trust by Luiz Henrique de Figueiredo, Diego Nehab, Jorge Stolfi, and Joao Batista Oliveira
  17. Weisstein, Eric W. "Parabolic Cylindrical Coordinates." From MathWorld--A Wolfram Web Resource
  18. Weisstein, Eric W. "Parabolic Coordinates." From MathWorld--A Wolfram Web Resource.
  19. Numerical approximation of conformal mappings by Bjørnar Steinnes Luteberget
  20. processing : transform2d
  21. Squares that Look Round: Transforming Spherical Images by Saul Schleimer Henry Segerman
  22. fractalforums inflection-mappings
  23. Spherical Projections (Stereographic and Cylindrical) Written by Paul Bourke
  24. Weisstein, Eric W. "Cylindrical Projection." From MathWorld--A Wolfram Web Resource.
  25. johndcook : joukowsky-transformation
  26. Exponential mapping with Kalles Fraktaler by Claude Heiland-Allen
  27. kf-extras for manipulating output from Kalles Fraktaler 2
  28. youtube video : Mandelbrot deep zoom to 2^142 or 5.5*10^42. Log(z) by SeryZone X
  29. Mandelbrot set images and videos by David Madore
  30. A Map of the Universe by J. Richard Gott III, Mario Jurić, David Schlegel, Fiona Hoyle, Michael Vogeley, Max Tegmark, Neta Bahcall, Jon Brinkmann
  31. xkcd : Depth
  32. Mercator Mandelbrot by Anders Sandberg
  33. Exponential map by R Munafo
  34. stackoverflow : how-do-i-zoom-into-the-mandelbrot-set
  35. Fractal Forum > Fractal Art > Images Showcase (Rate My Fractal) > Baby Monster
  36. zoom level definition
  37. Fractal Journey by ORSON WANG
  38. Zoom level discussion - Maximum zoom level supported by Fractal eXtreme
  39. fractalforums : history-of-deep-zoom-records
  40. fractint deep_zoom
  41. zooming with exteded precision in Delphi
  42. video Mandelbrot Zoom 999 on youtube by phaumann
  43. DeepZooming with FractInt
  44. Mandelbrot set detail Glimpse of variety by DinkydauSet
  45. e10000 by by Claude Heiland-Allen
  46. fractalforums: kalles-fraktaler-gallery/6-digit-exponent
  47. [:w:wiki/Talk:Floating_point/Archive_4#No_mention_of_Double-double No_mention_of_Double-double - talk]
  48. stackoverflow : mandelbrot-set-reaches-to-its-limit-way-too-soon
  49. fractalforums : problem with zooming transform one view rect-to another
  50. fractalforums "basic-location-and-zoom-question
  51. optimizing_zoom_animations by Claude Heiland-Allen
  52. fractalforums about-precision-of-doubles
  53. Baby Monster by DinkydauSet
  54. Cross Hair by Claude Heiland-Allen
  55. Kalles Fraktaler 2 by Karl Runmo
  56. Moebius transformation animated GIFs by Fritz Mueller
  57. Möbius Transforms App by (c) Robert Woodley, 2016-2017.
  58. Triple transitivity by David J Wright 2004-12-04
  59. math.stackexchange questions : how-to-do-this-transformation-of-complex-rational-function
  60. Stretching cusps by Claude Heiland-Allen
  61. math.stackexchange questions: what-mobius-transformation-maps-the-unit-circle-z-z-1-to-the-real-axis/335061#335061