diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..8ebafa4ce265bf4b486ad8e9ca4028492d86dc3c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +Yolov5-Deepsort/deep_sort/deep_sort/deep/checkpoint/ckpt.t7 filter=lfs diff=lfs merge=lfs -text +Yolov5-Deepsort/mot.mp4 filter=lfs diff=lfs merge=lfs -text +Yolov5-Deepsort/niuzi.mp4 filter=lfs diff=lfs merge=lfs -text +Yolov5-Deepsort/result.mp4 filter=lfs diff=lfs merge=lfs -text diff --git a/Yolov5-Deepsort/AIDetector_pytorch.py b/Yolov5-Deepsort/AIDetector_pytorch.py new file mode 100644 index 0000000000000000000000000000000000000000..f1818d8dcba71cf0f0bf75065f214bb620c28029 --- /dev/null +++ b/Yolov5-Deepsort/AIDetector_pytorch.py @@ -0,0 +1,74 @@ +import torch +import numpy as np +from models.experimental import attempt_load +from utils.general import non_max_suppression, scale_coords +from utils.BaseDetector import baseDet +from utils.torch_utils import select_device +from utils.datasets import letterbox +import rich + +class Detector(baseDet): + + def __init__(self): + super(Detector, self).__init__() + self.init_model() + self.build_config() + + def init_model(self): + + self.weights = 'weights/yolov5s.pt' + self.device = '0' if torch.cuda.is_available() else 'cpu' + self.device = select_device(self.device) + model = attempt_load(self.weights, map_location=self.device) + model.to(self.device).eval() + model.half() + # torch.save(model, 'test.pt') + self.m = model + self.names = model.module.names if hasattr( + model, 'module') else model.names + + def preprocess(self, img): + + img0 = img.copy() + img = letterbox(img, new_shape=self.img_size)[0] + img = img[:, :, ::-1].transpose(2, 0, 1) + img = np.ascontiguousarray(img) + img = torch.from_numpy(img).to(self.device) + img = img.half() # 半精度 + img /= 255.0 # 图像归一化 + if img.ndimension() == 3: + img = img.unsqueeze(0) + + return img0, img + + def detect(self, im): + + im0, img = self.preprocess(im) + + pred = self.m(img, augment=False)[0] + #rich.print(pred.shape) + pred = pred.float() + + + pred = non_max_suppression(pred, self.threshold, 0.4) + #rich.print((pred)) + + + pred_boxes = [] + for det in pred: + + if det is not None and len(det): + det[:, :4] = scale_coords( + img.shape[2:], det[:, :4], im0.shape).round() + + for *x, conf, cls_id in det: + lbl = self.names[int(cls_id)] + if not lbl in ['person', 'car', 'truck']: + continue + x1, y1 = int(x[0]), int(x[1]) + x2, y2 = int(x[2]), int(x[3]) + pred_boxes.append( + (x1, y1, x2, y2, lbl, conf)) + + return im, pred_boxes + diff --git a/Yolov5-Deepsort/DDM_DeepSort/.gitattributes b/Yolov5-Deepsort/DDM_DeepSort/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..a6344aac8c09253b3b630fb776ae94478aa0275b --- /dev/null +++ b/Yolov5-Deepsort/DDM_DeepSort/.gitattributes @@ -0,0 +1,35 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text diff --git a/Yolov5-Deepsort/DDM_DeepSort/README.md b/Yolov5-Deepsort/DDM_DeepSort/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c183fca4d1c01de7a67e192c36ef9ba7a961fbd7 --- /dev/null +++ b/Yolov5-Deepsort/DDM_DeepSort/README.md @@ -0,0 +1,13 @@ +--- +title: DDM DeepSort +emoji: 📚 +colorFrom: yellow +colorTo: gray +sdk: gradio +sdk_version: 5.6.0 +app_file: app.py +pinned: false +short_description: 将Drift Diffusion Model 应用于 yolov5 + deepsort +--- + +Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference diff --git a/Yolov5-Deepsort/DDM_DeepSort/app.py b/Yolov5-Deepsort/DDM_DeepSort/app.py new file mode 100644 index 0000000000000000000000000000000000000000..cbffdf1ba490e3ae1fb244c10909cccfa7652993 --- /dev/null +++ b/Yolov5-Deepsort/DDM_DeepSort/app.py @@ -0,0 +1,7 @@ +import gradio as gr + +def greet(name): + return "Hello " + name + "!!" + +demo = gr.Interface(fn=greet, inputs="text", outputs="text") +demo.launch() \ No newline at end of file diff --git a/Yolov5-Deepsort/LICENSE b/Yolov5-Deepsort/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..9e419e042146a2ce2e354202d4f7d8e4a3d66f31 --- /dev/null +++ b/Yolov5-Deepsort/LICENSE @@ -0,0 +1,674 @@ +GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/Yolov5-Deepsort/README.md b/Yolov5-Deepsort/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c63236631bd4d84ba1e5c5072ef1c2dd7e3def5b --- /dev/null +++ b/Yolov5-Deepsort/README.md @@ -0,0 +1,139 @@ +# 本文禁止转载! + + +本文地址:[https://blog.csdn.net/weixin_44936889/article/details/112002152](https://blog.csdn.net/weixin_44936889/article/details/112002152) + +# 项目简介: +使用YOLOv5+Deepsort实现车辆行人追踪和计数,代码封装成一个Detector类,更容易嵌入到自己的项目中。 + +代码地址(欢迎star): + +[https://github.com/Sharpiless/yolov5-deepsort/](https://github.com/Sharpiless/yolov5-deepsort/) + +最终效果: +![在这里插入图片描述](https://github.com/Sharpiless/Yolov5-Deepsort/blob/main/image.png) +# YOLOv5检测器: + +```python +class Detector(baseDet): + + def __init__(self): + super(Detector, self).__init__() + self.init_model() + self.build_config() + + def init_model(self): + + self.weights = 'weights/yolov5m.pt' + self.device = '0' if torch.cuda.is_available() else 'cpu' + self.device = select_device(self.device) + model = attempt_load(self.weights, map_location=self.device) + model.to(self.device).eval() + model.half() + # torch.save(model, 'test.pt') + self.m = model + self.names = model.module.names if hasattr( + model, 'module') else model.names + + def preprocess(self, img): + + img0 = img.copy() + img = letterbox(img, new_shape=self.img_size)[0] + img = img[:, :, ::-1].transpose(2, 0, 1) + img = np.ascontiguousarray(img) + img = torch.from_numpy(img).to(self.device) + img = img.half() # 半精度 + img /= 255.0 # 图像归一化 + if img.ndimension() == 3: + img = img.unsqueeze(0) + + return img0, img + + def detect(self, im): + + im0, img = self.preprocess(im) + + pred = self.m(img, augment=False)[0] + pred = pred.float() + pred = non_max_suppression(pred, self.threshold, 0.4) + + pred_boxes = [] + for det in pred: + + if det is not None and len(det): + det[:, :4] = scale_coords( + img.shape[2:], det[:, :4], im0.shape).round() + + for *x, conf, cls_id in det: + lbl = self.names[int(cls_id)] + if not lbl in ['person', 'car', 'truck']: + continue + x1, y1 = int(x[0]), int(x[1]) + x2, y2 = int(x[2]), int(x[3]) + pred_boxes.append( + (x1, y1, x2, y2, lbl, conf)) + + return im, pred_boxes + +``` + +调用 self.detect 方法返回图像和预测结果 + +# DeepSort追踪器: + +```python +deepsort = DeepSort(cfg.DEEPSORT.REID_CKPT, + max_dist=cfg.DEEPSORT.MAX_DIST, min_confidence=cfg.DEEPSORT.MIN_CONFIDENCE, + nms_max_overlap=cfg.DEEPSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg.DEEPSORT.MAX_IOU_DISTANCE, + max_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET, + use_cuda=True) +``` + +调用 self.update 方法更新追踪结果 + +# 运行demo: + +```bash +python demo.py +``` + +# 训练自己的模型: +参考我的另一篇博客: + +[【小白CV】手把手教你用YOLOv5训练自己的数据集(从Windows环境配置到模型部署)](https://blog.csdn.net/weixin_44936889/article/details/110661862) + +训练好后放到 weights 文件夹下 + +# 调用接口: + +## 创建检测器: + +```python +from AIDetector_pytorch import Detector + +det = Detector() +``` + +## 调用检测接口: + +```python +result = det.feedCap(im) +``` + +其中 im 为 BGR 图像 + +返回的 result 是字典,result['frame'] 返回可视化后的图像 + +# 联系作者: + +> B站:[https://space.bilibili.com/470550823](https://space.bilibili.com/470550823) + +> CSDN:[https://blog.csdn.net/weixin_44936889](https://blog.csdn.net/weixin_44936889) + +> AI Studio:[https://aistudio.baidu.com/aistudio/personalcenter/thirdview/67156](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/67156) + +> Github:[https://github.com/Sharpiless](https://github.com/Sharpiless) + +遵循 GNU General Public License v3.0 协议,标明目标检测部分来源:https://github.com/ultralytics/yolov5/ + + diff --git a/Yolov5-Deepsort/__pycache__/AIDetector_pytorch.cpython-37.pyc b/Yolov5-Deepsort/__pycache__/AIDetector_pytorch.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3df550cd00fdac6fc6194a125a0779564e4a21f Binary files /dev/null and b/Yolov5-Deepsort/__pycache__/AIDetector_pytorch.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/__pycache__/tracker.cpython-37.pyc b/Yolov5-Deepsort/__pycache__/tracker.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30b3fa8312b1b89000fd7043669defba41cad800 Binary files /dev/null and b/Yolov5-Deepsort/__pycache__/tracker.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/configs/deep_sort.yaml b/Yolov5-Deepsort/deep_sort/configs/deep_sort.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6105f46a8d155c2dc7ba9cebb7178b4e0ed389a3 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/configs/deep_sort.yaml @@ -0,0 +1,10 @@ +DEEPSORT: + REID_CKPT: "deep_sort/deep_sort/deep/checkpoint/ckpt.t7" + MAX_DIST: 0.2 + MIN_CONFIDENCE: 0.3 + NMS_MAX_OVERLAP: 0.5 + MAX_IOU_DISTANCE: 0.7 + MAX_AGE: 70 + N_INIT: 3 + NN_BUDGET: 100 + diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/README.md b/Yolov5-Deepsort/deep_sort/deep_sort/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e89c9b3ea08691210046fbb9184bf8e44e88f29e --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/README.md @@ -0,0 +1,3 @@ +# Deep Sort + +This is the implemention of deep sort with pytorch. \ No newline at end of file diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/__init__.py b/Yolov5-Deepsort/deep_sort/deep_sort/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..5fe5d0fd796ec4f46dc4141f5e4f9f5092f7d321 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/__init__.py @@ -0,0 +1,21 @@ +from .deep_sort import DeepSort + + +__all__ = ['DeepSort', 'build_tracker'] + + +def build_tracker(cfg, use_cuda): + return DeepSort(cfg.DEEPSORT.REID_CKPT, + max_dist=cfg.DEEPSORT.MAX_DIST, min_confidence=cfg.DEEPSORT.MIN_CONFIDENCE, + nms_max_overlap=cfg.DEEPSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg.DEEPSORT.MAX_IOU_DISTANCE, + max_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET, use_cuda=use_cuda) + + + + + + + + + + diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/__init__.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dff7fa67ddcea8ac5a16ace2ede46d492353e1d4 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/__init__.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/__init__.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c92d420992773f89b21cac6794ebfcbbfa90b11e Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/__init__.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/deep_sort.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/deep_sort.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..63745386d533467bb683118b4a63676efb8d1488 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/deep_sort.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/deep_sort.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/deep_sort.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7d1aefaad1592b8dbfbfd00f9c63686ac0159ddd Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/__pycache__/deep_sort.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/__init__.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/__init__.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4828f3eed6acf1d397c430fe01c96be6241247d Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/__init__.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/__init__.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d0759879843a1aec1a37b54b3b00c9f10e355a2 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/__init__.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/feature_extractor.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/feature_extractor.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c933b6ea1cb23e47c04b07eccbbff7c6f770826f Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/feature_extractor.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/feature_extractor.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/feature_extractor.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9b7bac5f03c644206c5951ea52fa266e2d4c6ba Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/feature_extractor.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/model.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/model.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..05f606cd7d3bca1ecedf98c36bba5a5c2bb544e4 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/model.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/model.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/model.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6111abffcd22ea119d6b601a0614959a5777009 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/deep/__pycache__/model.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/checkpoint/.gitkeep b/Yolov5-Deepsort/deep_sort/deep_sort/deep/checkpoint/.gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/checkpoint/ckpt.t7 b/Yolov5-Deepsort/deep_sort/deep_sort/deep/checkpoint/ckpt.t7 new file mode 100644 index 0000000000000000000000000000000000000000..cd7ceebe86bdfaea299f31994844488295f00ca8 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep/checkpoint/ckpt.t7 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df75ddef42c3d1bda67bc94b093e7ce61de7f75a89f36a8f868a428462198316 +size 46034619 diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/evaluate.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep/evaluate.py new file mode 100644 index 0000000000000000000000000000000000000000..31c40a46eaea0ad7b6fc50a15e39329b954561ff --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep/evaluate.py @@ -0,0 +1,15 @@ +import torch + +features = torch.load("features.pth") +qf = features["qf"] +ql = features["ql"] +gf = features["gf"] +gl = features["gl"] + +scores = qf.mm(gf.t()) +res = scores.topk(5, dim=1)[1][:,0] +top1correct = gl[res].eq(ql).sum().item() + +print("Acc top1:{:.3f}".format(top1correct/ql.size(0))) + + diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/feature_extractor.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep/feature_extractor.py new file mode 100644 index 0000000000000000000000000000000000000000..0443e37d94dc743e6c4467fab2dcb29f39bb6435 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep/feature_extractor.py @@ -0,0 +1,55 @@ +import torch +import torchvision.transforms as transforms +import numpy as np +import cv2 +import logging + +from .model import Net + +class Extractor(object): + def __init__(self, model_path, use_cuda=True): + self.net = Net(reid=True) + self.device = "cuda" if torch.cuda.is_available() and use_cuda else "cpu" + state_dict = torch.load(model_path, map_location=lambda storage, loc: storage)['net_dict'] + self.net.load_state_dict(state_dict) + logger = logging.getLogger("root.tracker") + logger.info("Loading weights from {}... Done!".format(model_path)) + self.net.to(self.device) + self.size = (64, 128) + self.norm = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), + ]) + + + + def _preprocess(self, im_crops): + """ + TODO: + 1. to float with scale from 0 to 1 + 2. resize to (64, 128) as Market1501 dataset did + 3. concatenate to a numpy array + 3. to torch Tensor + 4. normalize + """ + def _resize(im, size): + return cv2.resize(im.astype(np.float32)/255., size) + + im_batch = torch.cat([self.norm(_resize(im, self.size)).unsqueeze(0) for im in im_crops], dim=0).float() + return im_batch + + + def __call__(self, im_crops): + im_batch = self._preprocess(im_crops) + with torch.no_grad(): + im_batch = im_batch.to(self.device) + features = self.net(im_batch) + return features.cpu().numpy() + + +if __name__ == '__main__': + img = cv2.imread("demo.jpg")[:,:,(2,1,0)] + extr = Extractor("checkpoint/ckpt.t7") + feature = extr(img) + print(feature.shape) + diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/model.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep/model.py new file mode 100644 index 0000000000000000000000000000000000000000..97e87547cd8e36b1a65e2dc1ad4cfb310f0f4c23 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep/model.py @@ -0,0 +1,104 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +class BasicBlock(nn.Module): + def __init__(self, c_in, c_out,is_downsample=False): + super(BasicBlock,self).__init__() + self.is_downsample = is_downsample + if is_downsample: + self.conv1 = nn.Conv2d(c_in, c_out, 3, stride=2, padding=1, bias=False) + else: + self.conv1 = nn.Conv2d(c_in, c_out, 3, stride=1, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(c_out) + self.relu = nn.ReLU(True) + self.conv2 = nn.Conv2d(c_out,c_out,3,stride=1,padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(c_out) + if is_downsample: + self.downsample = nn.Sequential( + nn.Conv2d(c_in, c_out, 1, stride=2, bias=False), + nn.BatchNorm2d(c_out) + ) + elif c_in != c_out: + self.downsample = nn.Sequential( + nn.Conv2d(c_in, c_out, 1, stride=1, bias=False), + nn.BatchNorm2d(c_out) + ) + self.is_downsample = True + + def forward(self,x): + y = self.conv1(x) + y = self.bn1(y) + y = self.relu(y) + y = self.conv2(y) + y = self.bn2(y) + if self.is_downsample: + x = self.downsample(x) + return F.relu(x.add(y),True) + +def make_layers(c_in,c_out,repeat_times, is_downsample=False): + blocks = [] + for i in range(repeat_times): + if i ==0: + blocks += [BasicBlock(c_in,c_out, is_downsample=is_downsample),] + else: + blocks += [BasicBlock(c_out,c_out),] + return nn.Sequential(*blocks) + +class Net(nn.Module): + def __init__(self, num_classes=751 ,reid=False): + super(Net,self).__init__() + # 3 128 64 + self.conv = nn.Sequential( + nn.Conv2d(3,64,3,stride=1,padding=1), + nn.BatchNorm2d(64), + nn.ReLU(inplace=True), + # nn.Conv2d(32,32,3,stride=1,padding=1), + # nn.BatchNorm2d(32), + # nn.ReLU(inplace=True), + nn.MaxPool2d(3,2,padding=1), + ) + # 32 64 32 + self.layer1 = make_layers(64,64,2,False) + # 32 64 32 + self.layer2 = make_layers(64,128,2,True) + # 64 32 16 + self.layer3 = make_layers(128,256,2,True) + # 128 16 8 + self.layer4 = make_layers(256,512,2,True) + # 256 8 4 + self.avgpool = nn.AvgPool2d((8,4),1) + # 256 1 1 + self.reid = reid + self.classifier = nn.Sequential( + nn.Linear(512, 256), + nn.BatchNorm1d(256), + nn.ReLU(inplace=True), + nn.Dropout(), + nn.Linear(256, num_classes), + ) + + def forward(self, x): + x = self.conv(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + x = self.avgpool(x) + x = x.view(x.size(0),-1) + # B x 128 + if self.reid: + x = x.div(x.norm(p=2,dim=1,keepdim=True)) + return x + # classifier + x = self.classifier(x) + return x + + +if __name__ == '__main__': + net = Net() + x = torch.randn(4,3,128,64) + y = net(x) + import ipdb; ipdb.set_trace() + + diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/original_model.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep/original_model.py new file mode 100644 index 0000000000000000000000000000000000000000..72453a6392b9a360c03034eefee1d6be30f8121b --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep/original_model.py @@ -0,0 +1,106 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +class BasicBlock(nn.Module): + def __init__(self, c_in, c_out,is_downsample=False): + super(BasicBlock,self).__init__() + self.is_downsample = is_downsample + if is_downsample: + self.conv1 = nn.Conv2d(c_in, c_out, 3, stride=2, padding=1, bias=False) + else: + self.conv1 = nn.Conv2d(c_in, c_out, 3, stride=1, padding=1, bias=False) + self.bn1 = nn.BatchNorm2d(c_out) + self.relu = nn.ReLU(True) + self.conv2 = nn.Conv2d(c_out,c_out,3,stride=1,padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(c_out) + if is_downsample: + self.downsample = nn.Sequential( + nn.Conv2d(c_in, c_out, 1, stride=2, bias=False), + nn.BatchNorm2d(c_out) + ) + elif c_in != c_out: + self.downsample = nn.Sequential( + nn.Conv2d(c_in, c_out, 1, stride=1, bias=False), + nn.BatchNorm2d(c_out) + ) + self.is_downsample = True + + def forward(self,x): + y = self.conv1(x) + y = self.bn1(y) + y = self.relu(y) + y = self.conv2(y) + y = self.bn2(y) + if self.is_downsample: + x = self.downsample(x) + return F.relu(x.add(y),True) + +def make_layers(c_in,c_out,repeat_times, is_downsample=False): + blocks = [] + for i in range(repeat_times): + if i ==0: + blocks += [BasicBlock(c_in,c_out, is_downsample=is_downsample),] + else: + blocks += [BasicBlock(c_out,c_out),] + return nn.Sequential(*blocks) + +class Net(nn.Module): + def __init__(self, num_classes=625 ,reid=False): + super(Net,self).__init__() + # 3 128 64 + self.conv = nn.Sequential( + nn.Conv2d(3,32,3,stride=1,padding=1), + nn.BatchNorm2d(32), + nn.ELU(inplace=True), + nn.Conv2d(32,32,3,stride=1,padding=1), + nn.BatchNorm2d(32), + nn.ELU(inplace=True), + nn.MaxPool2d(3,2,padding=1), + ) + # 32 64 32 + self.layer1 = make_layers(32,32,2,False) + # 32 64 32 + self.layer2 = make_layers(32,64,2,True) + # 64 32 16 + self.layer3 = make_layers(64,128,2,True) + # 128 16 8 + self.dense = nn.Sequential( + nn.Dropout(p=0.6), + nn.Linear(128*16*8, 128), + nn.BatchNorm1d(128), + nn.ELU(inplace=True) + ) + # 256 1 1 + self.reid = reid + self.batch_norm = nn.BatchNorm1d(128) + self.classifier = nn.Sequential( + nn.Linear(128, num_classes), + ) + + def forward(self, x): + x = self.conv(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + + x = x.view(x.size(0),-1) + if self.reid: + x = self.dense[0](x) + x = self.dense[1](x) + x = x.div(x.norm(p=2,dim=1,keepdim=True)) + return x + x = self.dense(x) + # B x 128 + # classifier + x = self.classifier(x) + return x + + +if __name__ == '__main__': + net = Net(reid=True) + x = torch.randn(4,3,128,64) + y = net(x) + import ipdb; ipdb.set_trace() + + diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/test.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep/test.py new file mode 100644 index 0000000000000000000000000000000000000000..ebd590336f7b17c44738c4c15458f02f33f08017 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep/test.py @@ -0,0 +1,77 @@ +import torch +import torch.backends.cudnn as cudnn +import torchvision + +import argparse +import os + +from model import Net + +parser = argparse.ArgumentParser(description="Train on market1501") +parser.add_argument("--data-dir",default='data',type=str) +parser.add_argument("--no-cuda",action="store_true") +parser.add_argument("--gpu-id",default=0,type=int) +args = parser.parse_args() + +# device +device = "cuda:{}".format(args.gpu_id) if torch.cuda.is_available() and not args.no_cuda else "cpu" +if torch.cuda.is_available() and not args.no_cuda: + cudnn.benchmark = True + +# data loader +root = args.data_dir +query_dir = os.path.join(root,"query") +gallery_dir = os.path.join(root,"gallery") +transform = torchvision.transforms.Compose([ + torchvision.transforms.Resize((128,64)), + torchvision.transforms.ToTensor(), + torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) +]) +queryloader = torch.utils.data.DataLoader( + torchvision.datasets.ImageFolder(query_dir, transform=transform), + batch_size=64, shuffle=False +) +galleryloader = torch.utils.data.DataLoader( + torchvision.datasets.ImageFolder(gallery_dir, transform=transform), + batch_size=64, shuffle=False +) + +# net definition +net = Net(reid=True) +assert os.path.isfile("./checkpoint/ckpt.t7"), "Error: no checkpoint file found!" +print('Loading from checkpoint/ckpt.t7') +checkpoint = torch.load("./checkpoint/ckpt.t7") +net_dict = checkpoint['net_dict'] +net.load_state_dict(net_dict, strict=False) +net.eval() +net.to(device) + +# compute features +query_features = torch.tensor([]).float() +query_labels = torch.tensor([]).long() +gallery_features = torch.tensor([]).float() +gallery_labels = torch.tensor([]).long() + +with torch.no_grad(): + for idx,(inputs,labels) in enumerate(queryloader): + inputs = inputs.to(device) + features = net(inputs).cpu() + query_features = torch.cat((query_features, features), dim=0) + query_labels = torch.cat((query_labels, labels)) + + for idx,(inputs,labels) in enumerate(galleryloader): + inputs = inputs.to(device) + features = net(inputs).cpu() + gallery_features = torch.cat((gallery_features, features), dim=0) + gallery_labels = torch.cat((gallery_labels, labels)) + +gallery_labels -= 2 + +# save features +features = { + "qf": query_features, + "ql": query_labels, + "gf": gallery_features, + "gl": gallery_labels +} +torch.save(features,"features.pth") \ No newline at end of file diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/train.jpg b/Yolov5-Deepsort/deep_sort/deep_sort/deep/train.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3635a614738828b880aa862bc52423848ac8e472 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/deep/train.jpg differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep/train.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep/train.py new file mode 100644 index 0000000000000000000000000000000000000000..a931763d155f27743d944ac46da10f57d35a8ddb --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep/train.py @@ -0,0 +1,189 @@ +import argparse +import os +import time + +import numpy as np +import matplotlib.pyplot as plt +import torch +import torch.backends.cudnn as cudnn +import torchvision + +from model import Net + +parser = argparse.ArgumentParser(description="Train on market1501") +parser.add_argument("--data-dir",default='data',type=str) +parser.add_argument("--no-cuda",action="store_true") +parser.add_argument("--gpu-id",default=0,type=int) +parser.add_argument("--lr",default=0.1, type=float) +parser.add_argument("--interval",'-i',default=20,type=int) +parser.add_argument('--resume', '-r',action='store_true') +args = parser.parse_args() + +# device +device = "cuda:{}".format(args.gpu_id) if torch.cuda.is_available() and not args.no_cuda else "cpu" +if torch.cuda.is_available() and not args.no_cuda: + cudnn.benchmark = True + +# data loading +root = args.data_dir +train_dir = os.path.join(root,"train") +test_dir = os.path.join(root,"test") +transform_train = torchvision.transforms.Compose([ + torchvision.transforms.RandomCrop((128,64),padding=4), + torchvision.transforms.RandomHorizontalFlip(), + torchvision.transforms.ToTensor(), + torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) +]) +transform_test = torchvision.transforms.Compose([ + torchvision.transforms.Resize((128,64)), + torchvision.transforms.ToTensor(), + torchvision.transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) +]) +trainloader = torch.utils.data.DataLoader( + torchvision.datasets.ImageFolder(train_dir, transform=transform_train), + batch_size=64,shuffle=True +) +testloader = torch.utils.data.DataLoader( + torchvision.datasets.ImageFolder(test_dir, transform=transform_test), + batch_size=64,shuffle=True +) +num_classes = max(len(trainloader.dataset.classes), len(testloader.dataset.classes)) + +# net definition +start_epoch = 0 +net = Net(num_classes=num_classes) +if args.resume: + assert os.path.isfile("./checkpoint/ckpt.t7"), "Error: no checkpoint file found!" + print('Loading from checkpoint/ckpt.t7') + checkpoint = torch.load("./checkpoint/ckpt.t7") + # import ipdb; ipdb.set_trace() + net_dict = checkpoint['net_dict'] + net.load_state_dict(net_dict) + best_acc = checkpoint['acc'] + start_epoch = checkpoint['epoch'] +net.to(device) + +# loss and optimizer +criterion = torch.nn.CrossEntropyLoss() +optimizer = torch.optim.SGD(net.parameters(), args.lr, momentum=0.9, weight_decay=5e-4) +best_acc = 0. + +# train function for each epoch +def train(epoch): + print("\nEpoch : %d"%(epoch+1)) + net.train() + training_loss = 0. + train_loss = 0. + correct = 0 + total = 0 + interval = args.interval + start = time.time() + for idx, (inputs, labels) in enumerate(trainloader): + # forward + inputs,labels = inputs.to(device),labels.to(device) + outputs = net(inputs) + loss = criterion(outputs, labels) + + # backward + optimizer.zero_grad() + loss.backward() + optimizer.step() + + # accumurating + training_loss += loss.item() + train_loss += loss.item() + correct += outputs.max(dim=1)[1].eq(labels).sum().item() + total += labels.size(0) + + # print + if (idx+1)%interval == 0: + end = time.time() + print("[progress:{:.1f}%]time:{:.2f}s Loss:{:.5f} Correct:{}/{} Acc:{:.3f}%".format( + 100.*(idx+1)/len(trainloader), end-start, training_loss/interval, correct, total, 100.*correct/total + )) + training_loss = 0. + start = time.time() + + return train_loss/len(trainloader), 1.- correct/total + +def test(epoch): + global best_acc + net.eval() + test_loss = 0. + correct = 0 + total = 0 + start = time.time() + with torch.no_grad(): + for idx, (inputs, labels) in enumerate(testloader): + inputs, labels = inputs.to(device), labels.to(device) + outputs = net(inputs) + loss = criterion(outputs, labels) + + test_loss += loss.item() + correct += outputs.max(dim=1)[1].eq(labels).sum().item() + total += labels.size(0) + + print("Testing ...") + end = time.time() + print("[progress:{:.1f}%]time:{:.2f}s Loss:{:.5f} Correct:{}/{} Acc:{:.3f}%".format( + 100.*(idx+1)/len(testloader), end-start, test_loss/len(testloader), correct, total, 100.*correct/total + )) + + # saving checkpoint + acc = 100.*correct/total + if acc > best_acc: + best_acc = acc + print("Saving parameters to checkpoint/ckpt.t7") + checkpoint = { + 'net_dict':net.state_dict(), + 'acc':acc, + 'epoch':epoch, + } + if not os.path.isdir('checkpoint'): + os.mkdir('checkpoint') + torch.save(checkpoint, './checkpoint/ckpt.t7') + + return test_loss/len(testloader), 1.- correct/total + +# plot figure +x_epoch = [] +record = {'train_loss':[], 'train_err':[], 'test_loss':[], 'test_err':[]} +fig = plt.figure() +ax0 = fig.add_subplot(121, title="loss") +ax1 = fig.add_subplot(122, title="top1err") +def draw_curve(epoch, train_loss, train_err, test_loss, test_err): + global record + record['train_loss'].append(train_loss) + record['train_err'].append(train_err) + record['test_loss'].append(test_loss) + record['test_err'].append(test_err) + + x_epoch.append(epoch) + ax0.plot(x_epoch, record['train_loss'], 'bo-', label='train') + ax0.plot(x_epoch, record['test_loss'], 'ro-', label='val') + ax1.plot(x_epoch, record['train_err'], 'bo-', label='train') + ax1.plot(x_epoch, record['test_err'], 'ro-', label='val') + if epoch == 0: + ax0.legend() + ax1.legend() + fig.savefig("train.jpg") + +# lr decay +def lr_decay(): + global optimizer + for params in optimizer.param_groups: + params['lr'] *= 0.1 + lr = params['lr'] + print("Learning rate adjusted to {}".format(lr)) + +def main(): + for epoch in range(start_epoch, start_epoch+40): + train_loss, train_err = train(epoch) + test_loss, test_err = test(epoch) + draw_curve(epoch, train_loss, train_err, test_loss, test_err) + if (epoch+1)%20==0: + lr_decay() + + +if __name__ == '__main__': + main() diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/deep_sort.py b/Yolov5-Deepsort/deep_sort/deep_sort/deep_sort.py new file mode 100644 index 0000000000000000000000000000000000000000..44f8746fd299527fd1129027e98435bf9f52f671 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/deep_sort.py @@ -0,0 +1,101 @@ +import numpy as np +import torch +import rich +from .deep.feature_extractor import Extractor +from .sort.nn_matching import NearestNeighborDistanceMetric +from .sort.preprocessing import non_max_suppression +from .sort.detection import Detection +from .sort.tracker import Tracker + + +__all__ = ['DeepSort'] + + +class DeepSort(object): + def __init__(self, model_path, max_dist=0.2, min_confidence=0.3, nms_max_overlap=1.0, max_iou_distance=0.7, max_age=70, n_init=3, nn_budget=100, use_cuda=True): + self.min_confidence = min_confidence + self.nms_max_overlap = nms_max_overlap + + self.extractor = Extractor(model_path, use_cuda=use_cuda) + + max_cosine_distance = max_dist + nn_budget = 100 + metric = NearestNeighborDistanceMetric( + "cosine", max_cosine_distance, nn_budget) + self.tracker = Tracker( + metric, max_iou_distance=max_iou_distance, max_age=max_age, n_init=n_init) + + def update(self, bbox_xywh, confidences, clss, ori_img): + self.height, self.width = ori_img.shape[:2] + # generate detections + features = self._get_features(bbox_xywh, ori_img) + bbox_tlwh = self._xywh_to_tlwh(bbox_xywh) + detections = [Detection(bbox_tlwh[i], clss[i], conf, features[i]) for i, conf in enumerate( + confidences) if conf > self.min_confidence] + # update tracker + self.tracker.predict() + self.tracker.update(detections) + + # output bbox identities + outputs = [] + for track in self.tracker.tracks: + if not track.is_confirmed() or track.time_since_update > 1: + continue + #rich.print(track) + box = track.to_tlwh() + x1, y1, x2, y2 = self._tlwh_to_xyxy(box) + outputs.append((x1, y1, x2, y2, track.cls_, track.track_id)) + return outputs + + @staticmethod + def _xywh_to_tlwh(bbox_xywh): + if isinstance(bbox_xywh, np.ndarray): + bbox_tlwh = bbox_xywh.copy() + elif isinstance(bbox_xywh, torch.Tensor): + bbox_tlwh = bbox_xywh.clone() + if bbox_tlwh.size(0): + bbox_tlwh[:, 0] = bbox_xywh[:, 0] - bbox_xywh[:, 2]/2. + bbox_tlwh[:, 1] = bbox_xywh[:, 1] - bbox_xywh[:, 3]/2. + return bbox_tlwh + + def _xywh_to_xyxy(self, bbox_xywh): + x, y, w, h = bbox_xywh + x1 = max(int(x-w/2), 0) + x2 = min(int(x+w/2), self.width-1) + y1 = max(int(y-h/2), 0) + y2 = min(int(y+h/2), self.height-1) + return x1, y1, x2, y2 + + def _tlwh_to_xyxy(self, bbox_tlwh): + """ + TODO: + Convert bbox from xtl_ytl_w_h to xc_yc_w_h + Thanks JieChen91@github.com for reporting this bug! + """ + x, y, w, h = bbox_tlwh + x1 = max(int(x), 0) + x2 = min(int(x+w), self.width-1) + y1 = max(int(y), 0) + y2 = min(int(y+h), self.height-1) + return x1, y1, x2, y2 + + def _xyxy_to_tlwh(self, bbox_xyxy): + x1, y1, x2, y2 = bbox_xyxy + + t = x1 + l = y1 + w = int(x2-x1) + h = int(y2-y1) + return t, l, w, h + + def _get_features(self, bbox_xywh, ori_img): + im_crops = [] + for box in bbox_xywh: + x1, y1, x2, y2 = self._xywh_to_xyxy(box) + im = ori_img[y1:y2, x1:x2] + im_crops.append(im) + if im_crops: + features = self.extractor(im_crops) + else: + features = np.array([]) + return features diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__init__.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/__init__.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..36e171093f09ddc15d4499eec4a66e20812cff97 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/__init__.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/__init__.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4bebfe9ced397e6106504e32996e3038daa8ad54 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/__init__.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/detection.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/detection.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..99c3d00c0ecda70d11f85180f2b6e0d032547963 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/detection.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/detection.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/detection.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7204d92b15ceab7d1d0a10a5a1223287c24c79bb Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/detection.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/iou_matching.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/iou_matching.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..619fd5ecf730a1797348f490946b0d9c1e24abbc Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/iou_matching.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/iou_matching.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/iou_matching.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8c64c06bee66440330de7652b3de146ce84fb5c3 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/iou_matching.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/kalman_filter.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/kalman_filter.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce24a9dc97fb1bf111839bf23401a82c62e36f43 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/kalman_filter.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/kalman_filter.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/kalman_filter.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c9da039aa1cefa23a51be4f09af8801cb0a9dca Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/kalman_filter.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/linear_assignment.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/linear_assignment.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..576877feebd0c9886c96ce363d1ecea7b3154426 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/linear_assignment.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/linear_assignment.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/linear_assignment.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2eb430b230c02722433b7c0063bcd3a43bcd8e0a Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/linear_assignment.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/nn_matching.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/nn_matching.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5880fd28dfdd4ca064260d0a4d73b137c38a1551 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/nn_matching.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/nn_matching.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/nn_matching.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..981d42103f97947af3de456de2def6e79e487af8 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/nn_matching.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/preprocessing.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/preprocessing.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..387924cdd65d68679c404bef888996db765bd10f Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/preprocessing.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/preprocessing.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/preprocessing.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4f78cf29fa7904b33710ab07efe4720e6984495 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/preprocessing.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/track.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/track.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4df3d89025edfbd21799654426d98938824d94d6 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/track.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/track.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/track.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e64255c58c791c317e4e35c9119743e4b4e7f28f Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/track.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/tracker.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/tracker.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7bbe68869cbdb735e34d29695718d0170ee0b0a Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/tracker.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/tracker.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/tracker.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4b34b661f767b14aef6e01fa8a86f5a037bcdc7 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/deep_sort/sort/__pycache__/tracker.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/detection.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/detection.py new file mode 100644 index 0000000000000000000000000000000000000000..0c2c1ae42addc84cfd53bcfa3cdcc8885662ec44 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/detection.py @@ -0,0 +1,28 @@ +# vim: expandtab:ts=4:sw=4 +import numpy as np + + +class Detection(object): + + def __init__(self, tlwh, cls_, confidence, feature): + self.tlwh = np.asarray(tlwh, dtype=np.float) + self.cls_ = cls_ + self.confidence = float(confidence) + self.feature = np.asarray(feature, dtype=np.float32) + + def to_tlbr(self): + """Convert bounding box to format `(min x, min y, max x, max y)`, i.e., + `(top left, bottom right)`. + """ + ret = self.tlwh.copy() + ret[2:] += ret[:2] + return ret + + def to_xyah(self): + """Convert bounding box to format `(center x, center y, aspect ratio, + height)`, where the aspect ratio is `width / height`. + """ + ret = self.tlwh.copy() + ret[:2] += ret[2:] / 2 + ret[2] /= ret[3] + return ret diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/iou_matching.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/iou_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..c4dd0b88391d2ac28036c7163d5d4c988d4a9c4c --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/iou_matching.py @@ -0,0 +1,81 @@ +# vim: expandtab:ts=4:sw=4 +from __future__ import absolute_import +import numpy as np +from . import linear_assignment + + +def iou(bbox, candidates): + """Computer intersection over union. + + Parameters + ---------- + bbox : ndarray + A bounding box in format `(top left x, top left y, width, height)`. + candidates : ndarray + A matrix of candidate bounding boxes (one per row) in the same format + as `bbox`. + + Returns + ------- + ndarray + The intersection over union in [0, 1] between the `bbox` and each + candidate. A higher score means a larger fraction of the `bbox` is + occluded by the candidate. + + """ + bbox_tl, bbox_br = bbox[:2], bbox[:2] + bbox[2:] + candidates_tl = candidates[:, :2] + candidates_br = candidates[:, :2] + candidates[:, 2:] + + tl = np.c_[np.maximum(bbox_tl[0], candidates_tl[:, 0])[:, np.newaxis], + np.maximum(bbox_tl[1], candidates_tl[:, 1])[:, np.newaxis]] + br = np.c_[np.minimum(bbox_br[0], candidates_br[:, 0])[:, np.newaxis], + np.minimum(bbox_br[1], candidates_br[:, 1])[:, np.newaxis]] + wh = np.maximum(0., br - tl) + + area_intersection = wh.prod(axis=1) + area_bbox = bbox[2:].prod() + area_candidates = candidates[:, 2:].prod(axis=1) + return area_intersection / (area_bbox + area_candidates - area_intersection) + + +def iou_cost(tracks, detections, track_indices=None, + detection_indices=None): + """An intersection over union distance metric. + + Parameters + ---------- + tracks : List[deep_sort.track.Track] + A list of tracks. + detections : List[deep_sort.detection.Detection] + A list of detections. + track_indices : Optional[List[int]] + A list of indices to tracks that should be matched. Defaults to + all `tracks`. + detection_indices : Optional[List[int]] + A list of indices to detections that should be matched. Defaults + to all `detections`. + + Returns + ------- + ndarray + Returns a cost matrix of shape + len(track_indices), len(detection_indices) where entry (i, j) is + `1 - iou(tracks[track_indices[i]], detections[detection_indices[j]])`. + + """ + if track_indices is None: + track_indices = np.arange(len(tracks)) + if detection_indices is None: + detection_indices = np.arange(len(detections)) + + cost_matrix = np.zeros((len(track_indices), len(detection_indices))) + for row, track_idx in enumerate(track_indices): + if tracks[track_idx].time_since_update > 1: + cost_matrix[row, :] = linear_assignment.INFTY_COST + continue + + bbox = tracks[track_idx].to_tlwh() + candidates = np.asarray([detections[i].tlwh for i in detection_indices]) + cost_matrix[row, :] = 1. - iou(bbox, candidates) + return cost_matrix diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/kalman_filter.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/kalman_filter.py new file mode 100644 index 0000000000000000000000000000000000000000..787a76e6a43870a9538647b51fda6a5254ce2d43 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/kalman_filter.py @@ -0,0 +1,229 @@ +# vim: expandtab:ts=4:sw=4 +import numpy as np +import scipy.linalg + + +""" +Table for the 0.95 quantile of the chi-square distribution with N degrees of +freedom (contains values for N=1, ..., 9). Taken from MATLAB/Octave's chi2inv +function and used as Mahalanobis gating threshold. +""" +chi2inv95 = { + 1: 3.8415, + 2: 5.9915, + 3: 7.8147, + 4: 9.4877, + 5: 11.070, + 6: 12.592, + 7: 14.067, + 8: 15.507, + 9: 16.919} + + +class KalmanFilter(object): + """ + A simple Kalman filter for tracking bounding boxes in image space. + + The 8-dimensional state space + + x, y, a, h, vx, vy, va, vh + + contains the bounding box center position (x, y), aspect ratio a, height h, + and their respective velocities. + + Object motion follows a constant velocity model. The bounding box location + (x, y, a, h) is taken as direct observation of the state space (linear + observation model). + + """ + + def __init__(self): + ndim, dt = 4, 1. + + # Create Kalman filter model matrices. + self._motion_mat = np.eye(2 * ndim, 2 * ndim) + for i in range(ndim): + self._motion_mat[i, ndim + i] = dt + self._update_mat = np.eye(ndim, 2 * ndim) + + # Motion and observation uncertainty are chosen relative to the current + # state estimate. These weights control the amount of uncertainty in + # the model. This is a bit hacky. + self._std_weight_position = 1. / 20 + self._std_weight_velocity = 1. / 160 + + def initiate(self, measurement): + """Create track from unassociated measurement. + + Parameters + ---------- + measurement : ndarray + Bounding box coordinates (x, y, a, h) with center position (x, y), + aspect ratio a, and height h. + + Returns + ------- + (ndarray, ndarray) + Returns the mean vector (8 dimensional) and covariance matrix (8x8 + dimensional) of the new track. Unobserved velocities are initialized + to 0 mean. + + """ + mean_pos = measurement + mean_vel = np.zeros_like(mean_pos) + mean = np.r_[mean_pos, mean_vel] + + std = [ + 2 * self._std_weight_position * measurement[3], + 2 * self._std_weight_position * measurement[3], + 1e-2, + 2 * self._std_weight_position * measurement[3], + 10 * self._std_weight_velocity * measurement[3], + 10 * self._std_weight_velocity * measurement[3], + 1e-5, + 10 * self._std_weight_velocity * measurement[3]] + covariance = np.diag(np.square(std)) + return mean, covariance + + def predict(self, mean, covariance): + """Run Kalman filter prediction step. + + Parameters + ---------- + mean : ndarray + The 8 dimensional mean vector of the object state at the previous + time step. + covariance : ndarray + The 8x8 dimensional covariance matrix of the object state at the + previous time step. + + Returns + ------- + (ndarray, ndarray) + Returns the mean vector and covariance matrix of the predicted + state. Unobserved velocities are initialized to 0 mean. + + """ + std_pos = [ + self._std_weight_position * mean[3], + self._std_weight_position * mean[3], + 1e-2, + self._std_weight_position * mean[3]] + std_vel = [ + self._std_weight_velocity * mean[3], + self._std_weight_velocity * mean[3], + 1e-5, + self._std_weight_velocity * mean[3]] + motion_cov = np.diag(np.square(np.r_[std_pos, std_vel])) + + mean = np.dot(self._motion_mat, mean) + covariance = np.linalg.multi_dot(( + self._motion_mat, covariance, self._motion_mat.T)) + motion_cov + + return mean, covariance + + def project(self, mean, covariance): + """Project state distribution to measurement space. + + Parameters + ---------- + mean : ndarray + The state's mean vector (8 dimensional array). + covariance : ndarray + The state's covariance matrix (8x8 dimensional). + + Returns + ------- + (ndarray, ndarray) + Returns the projected mean and covariance matrix of the given state + estimate. + + """ + std = [ + self._std_weight_position * mean[3], + self._std_weight_position * mean[3], + 1e-1, + self._std_weight_position * mean[3]] + innovation_cov = np.diag(np.square(std)) + + mean = np.dot(self._update_mat, mean) + covariance = np.linalg.multi_dot(( + self._update_mat, covariance, self._update_mat.T)) + return mean, covariance + innovation_cov + + def update(self, mean, covariance, measurement): + """Run Kalman filter correction step. + + Parameters + ---------- + mean : ndarray + The predicted state's mean vector (8 dimensional). + covariance : ndarray + The state's covariance matrix (8x8 dimensional). + measurement : ndarray + The 4 dimensional measurement vector (x, y, a, h), where (x, y) + is the center position, a the aspect ratio, and h the height of the + bounding box. + + Returns + ------- + (ndarray, ndarray) + Returns the measurement-corrected state distribution. + + """ + projected_mean, projected_cov = self.project(mean, covariance) + + chol_factor, lower = scipy.linalg.cho_factor( + projected_cov, lower=True, check_finite=False) + kalman_gain = scipy.linalg.cho_solve( + (chol_factor, lower), np.dot(covariance, self._update_mat.T).T, + check_finite=False).T + innovation = measurement - projected_mean + + new_mean = mean + np.dot(innovation, kalman_gain.T) + new_covariance = covariance - np.linalg.multi_dot(( + kalman_gain, projected_cov, kalman_gain.T)) + return new_mean, new_covariance + + def gating_distance(self, mean, covariance, measurements, + only_position=False): + """Compute gating distance between state distribution and measurements. + + A suitable distance threshold can be obtained from `chi2inv95`. If + `only_position` is False, the chi-square distribution has 4 degrees of + freedom, otherwise 2. + + Parameters + ---------- + mean : ndarray + Mean vector over the state distribution (8 dimensional). + covariance : ndarray + Covariance of the state distribution (8x8 dimensional). + measurements : ndarray + An Nx4 dimensional matrix of N measurements, each in + format (x, y, a, h) where (x, y) is the bounding box center + position, a the aspect ratio, and h the height. + only_position : Optional[bool] + If True, distance computation is done with respect to the bounding + box center position only. + + Returns + ------- + ndarray + Returns an array of length N, where the i-th element contains the + squared Mahalanobis distance between (mean, covariance) and + `measurements[i]`. + + """ + mean, covariance = self.project(mean, covariance) + if only_position: + mean, covariance = mean[:2], covariance[:2, :2] + measurements = measurements[:, :2] + + cholesky_factor = np.linalg.cholesky(covariance) + d = measurements - mean + z = scipy.linalg.solve_triangular( + cholesky_factor, d.T, lower=True, check_finite=False, + overwrite_b=True) + squared_maha = np.sum(z * z, axis=0) + return squared_maha diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/linear_assignment.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/linear_assignment.py new file mode 100644 index 0000000000000000000000000000000000000000..2006230c960fa07b128b39187cb5df2775300544 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/linear_assignment.py @@ -0,0 +1,159 @@ +# vim: expandtab:ts=4:sw=4 +from __future__ import absolute_import +import numpy as np +# from sklearn.utils.linear_assignment_ import linear_assignment +from scipy.optimize import linear_sum_assignment as linear_assignment +from . import kalman_filter + + +INFTY_COST = 1e+5 + + +def min_cost_matching( + distance_metric, max_distance, tracks, detections, track_indices=None, + detection_indices=None): + if track_indices is None: + track_indices = np.arange(len(tracks)) + if detection_indices is None: + detection_indices = np.arange(len(detections)) + + if len(detection_indices) == 0 or len(track_indices) == 0: + return [], track_indices, detection_indices # Nothing to match. + + cost_matrix = distance_metric( + tracks, detections, track_indices, detection_indices) + cost_matrix[cost_matrix > max_distance] = max_distance + 1e-5 + + row_indices, col_indices = linear_assignment(cost_matrix) + + matches, unmatched_tracks, unmatched_detections = [], [], [] + for col, detection_idx in enumerate(detection_indices): + if col not in col_indices: + unmatched_detections.append(detection_idx) + for row, track_idx in enumerate(track_indices): + if row not in row_indices: + unmatched_tracks.append(track_idx) + for row, col in zip(row_indices, col_indices): + track_idx = track_indices[row] + detection_idx = detection_indices[col] + if cost_matrix[row, col] > max_distance: + unmatched_tracks.append(track_idx) + unmatched_detections.append(detection_idx) + else: + matches.append((track_idx, detection_idx)) + return matches, unmatched_tracks, unmatched_detections + + +def matching_cascade( + distance_metric, max_distance, cascade_depth, tracks, detections, + track_indices=None, detection_indices=None): + """Run matching cascade. + + Parameters + ---------- + distance_metric : Callable[List[Track], List[Detection], List[int], List[int]) -> ndarray + The distance metric is given a list of tracks and detections as well as + a list of N track indices and M detection indices. The metric should + return the NxM dimensional cost matrix, where element (i, j) is the + association cost between the i-th track in the given track indices and + the j-th detection in the given detection indices. + max_distance : float + Gating threshold. Associations with cost larger than this value are + disregarded. + cascade_depth: int + The cascade depth, should be se to the maximum track age. + tracks : List[track.Track] + A list of predicted tracks at the current time step. + detections : List[detection.Detection] + A list of detections at the current time step. + track_indices : Optional[List[int]] + List of track indices that maps rows in `cost_matrix` to tracks in + `tracks` (see description above). Defaults to all tracks. + detection_indices : Optional[List[int]] + List of detection indices that maps columns in `cost_matrix` to + detections in `detections` (see description above). Defaults to all + detections. + + Returns + ------- + (List[(int, int)], List[int], List[int]) + Returns a tuple with the following three entries: + * A list of matched track and detection indices. + * A list of unmatched track indices. + * A list of unmatched detection indices. + + """ + if track_indices is None: + track_indices = list(range(len(tracks))) + if detection_indices is None: + detection_indices = list(range(len(detections))) + + unmatched_detections = detection_indices + matches = [] + for level in range(cascade_depth): + if len(unmatched_detections) == 0: # No detections left + break + + track_indices_l = [ + k for k in track_indices + if tracks[k].time_since_update == 1 + level + ] + if len(track_indices_l) == 0: # Nothing to match at this level + continue + + matches_l, _, unmatched_detections = \ + min_cost_matching( + distance_metric, max_distance, tracks, detections, + track_indices_l, unmatched_detections) + matches += matches_l + unmatched_tracks = list(set(track_indices) - set(k for k, _ in matches)) + return matches, unmatched_tracks, unmatched_detections + + +def gate_cost_matrix( + kf, cost_matrix, tracks, detections, track_indices, detection_indices, + gated_cost=INFTY_COST, only_position=False): + """Invalidate infeasible entries in cost matrix based on the state + distributions obtained by Kalman filtering. + + Parameters + ---------- + kf : The Kalman filter. + cost_matrix : ndarray + The NxM dimensional cost matrix, where N is the number of track indices + and M is the number of detection indices, such that entry (i, j) is the + association cost between `tracks[track_indices[i]]` and + `detections[detection_indices[j]]`. + tracks : List[track.Track] + A list of predicted tracks at the current time step. + detections : List[detection.Detection] + A list of detections at the current time step. + track_indices : List[int] + List of track indices that maps rows in `cost_matrix` to tracks in + `tracks` (see description above). + detection_indices : List[int] + List of detection indices that maps columns in `cost_matrix` to + detections in `detections` (see description above). + gated_cost : Optional[float] + Entries in the cost matrix corresponding to infeasible associations are + set this value. Defaults to a very large value. + only_position : Optional[bool] + If True, only the x, y position of the state distribution is considered + during gating. Defaults to False. + + Returns + ------- + ndarray + Returns the modified cost matrix. + + """ + gating_dim = 2 if only_position else 4 + gating_threshold = kalman_filter.chi2inv95[gating_dim] + measurements = np.asarray( + [detections[i].to_xyah() for i in detection_indices]) + for row, track_idx in enumerate(track_indices): + track = tracks[track_idx] + gating_distance = kf.gating_distance( + track.mean, track.covariance, measurements, only_position) + cost_matrix[row, gating_distance > gating_threshold] = gated_cost + return cost_matrix diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/nn_matching.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/nn_matching.py new file mode 100644 index 0000000000000000000000000000000000000000..2e7bfea4b87b0c256274937c8323ffc93fa5d61b --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/nn_matching.py @@ -0,0 +1,177 @@ +# vim: expandtab:ts=4:sw=4 +import numpy as np + + +def _pdist(a, b): + """Compute pair-wise squared distance between points in `a` and `b`. + + Parameters + ---------- + a : array_like + An NxM matrix of N samples of dimensionality M. + b : array_like + An LxM matrix of L samples of dimensionality M. + + Returns + ------- + ndarray + Returns a matrix of size len(a), len(b) such that eleement (i, j) + contains the squared distance between `a[i]` and `b[j]`. + + """ + a, b = np.asarray(a), np.asarray(b) + if len(a) == 0 or len(b) == 0: + return np.zeros((len(a), len(b))) + a2, b2 = np.square(a).sum(axis=1), np.square(b).sum(axis=1) + r2 = -2. * np.dot(a, b.T) + a2[:, None] + b2[None, :] + r2 = np.clip(r2, 0., float(np.inf)) + return r2 + + +def _cosine_distance(a, b, data_is_normalized=False): + """Compute pair-wise cosine distance between points in `a` and `b`. + + Parameters + ---------- + a : array_like + An NxM matrix of N samples of dimensionality M. + b : array_like + An LxM matrix of L samples of dimensionality M. + data_is_normalized : Optional[bool] + If True, assumes rows in a and b are unit length vectors. + Otherwise, a and b are explicitly normalized to lenght 1. + + Returns + ------- + ndarray + Returns a matrix of size len(a), len(b) such that eleement (i, j) + contains the squared distance between `a[i]` and `b[j]`. + + """ + if not data_is_normalized: + a = np.asarray(a) / np.linalg.norm(a, axis=1, keepdims=True) + b = np.asarray(b) / np.linalg.norm(b, axis=1, keepdims=True) + return 1. - np.dot(a, b.T) + + +def _nn_euclidean_distance(x, y): + """ Helper function for nearest neighbor distance metric (Euclidean). + + Parameters + ---------- + x : ndarray + A matrix of N row-vectors (sample points). + y : ndarray + A matrix of M row-vectors (query points). + + Returns + ------- + ndarray + A vector of length M that contains for each entry in `y` the + smallest Euclidean distance to a sample in `x`. + + """ + distances = _pdist(x, y) + return np.maximum(0.0, distances.min(axis=0)) + + +def _nn_cosine_distance(x, y): + """ Helper function for nearest neighbor distance metric (cosine). + + Parameters + ---------- + x : ndarray + A matrix of N row-vectors (sample points). + y : ndarray + A matrix of M row-vectors (query points). + + Returns + ------- + ndarray + A vector of length M that contains for each entry in `y` the + smallest cosine distance to a sample in `x`. + + """ + distances = _cosine_distance(x, y) + return distances.min(axis=0) + + +class NearestNeighborDistanceMetric(object): + """ + A nearest neighbor distance metric that, for each target, returns + the closest distance to any sample that has been observed so far. + + Parameters + ---------- + metric : str + Either "euclidean" or "cosine". + matching_threshold: float + The matching threshold. Samples with larger distance are considered an + invalid match. + budget : Optional[int] + If not None, fix samples per class to at most this number. Removes + the oldest samples when the budget is reached. + + Attributes + ---------- + samples : Dict[int -> List[ndarray]] + A dictionary that maps from target identities to the list of samples + that have been observed so far. + + """ + + def __init__(self, metric, matching_threshold, budget=None): + + + if metric == "euclidean": + self._metric = _nn_euclidean_distance + elif metric == "cosine": + self._metric = _nn_cosine_distance + else: + raise ValueError( + "Invalid metric; must be either 'euclidean' or 'cosine'") + self.matching_threshold = matching_threshold + self.budget = budget + self.samples = {} + + def partial_fit(self, features, targets, active_targets): + """Update the distance metric with new data. + + Parameters + ---------- + features : ndarray + An NxM matrix of N features of dimensionality M. + targets : ndarray + An integer array of associated target identities. + active_targets : List[int] + A list of targets that are currently present in the scene. + + """ + for feature, target in zip(features, targets): + self.samples.setdefault(target, []).append(feature) + if self.budget is not None: + self.samples[target] = self.samples[target][-self.budget:] + self.samples = {k: self.samples[k] for k in active_targets} + + def distance(self, features, targets): + """Compute distance between features and targets. + + Parameters + ---------- + features : ndarray + An NxM matrix of N features of dimensionality M. + targets : List[int] + A list of targets to match the given `features` against. + + Returns + ------- + ndarray + Returns a cost matrix of shape len(targets), len(features), where + element (i, j) contains the closest squared distance between + `targets[i]` and `features[j]`. + + """ + cost_matrix = np.zeros((len(targets), len(features))) + for i, target in enumerate(targets): + cost_matrix[i, :] = self._metric(self.samples[target], features) + return cost_matrix diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/preprocessing.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/preprocessing.py new file mode 100644 index 0000000000000000000000000000000000000000..5493b127f602dec398efac4269c00d31a3650ce9 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/preprocessing.py @@ -0,0 +1,73 @@ +# vim: expandtab:ts=4:sw=4 +import numpy as np +import cv2 + + +def non_max_suppression(boxes, max_bbox_overlap, scores=None): + """Suppress overlapping detections. + + Original code from [1]_ has been adapted to include confidence score. + + .. [1] http://www.pyimagesearch.com/2015/02/16/ + faster-non-maximum-suppression-python/ + + Examples + -------- + + >>> boxes = [d.roi for d in detections] + >>> scores = [d.confidence for d in detections] + >>> indices = non_max_suppression(boxes, max_bbox_overlap, scores) + >>> detections = [detections[i] for i in indices] + + Parameters + ---------- + boxes : ndarray + Array of ROIs (x, y, width, height). + max_bbox_overlap : float + ROIs that overlap more than this values are suppressed. + scores : Optional[array_like] + Detector confidence score. + + Returns + ------- + List[int] + Returns indices of detections that have survived non-maxima suppression. + + """ + if len(boxes) == 0: + return [] + + boxes = boxes.astype(np.float) + pick = [] + + x1 = boxes[:, 0] + y1 = boxes[:, 1] + x2 = boxes[:, 2] + boxes[:, 0] + y2 = boxes[:, 3] + boxes[:, 1] + + area = (x2 - x1 + 1) * (y2 - y1 + 1) + if scores is not None: + idxs = np.argsort(scores) + else: + idxs = np.argsort(y2) + + while len(idxs) > 0: + last = len(idxs) - 1 + i = idxs[last] + pick.append(i) + + xx1 = np.maximum(x1[i], x1[idxs[:last]]) + yy1 = np.maximum(y1[i], y1[idxs[:last]]) + xx2 = np.minimum(x2[i], x2[idxs[:last]]) + yy2 = np.minimum(y2[i], y2[idxs[:last]]) + + w = np.maximum(0, xx2 - xx1 + 1) + h = np.maximum(0, yy2 - yy1 + 1) + + overlap = (w * h) / area[idxs[:last]] + + idxs = np.delete( + idxs, np.concatenate( + ([last], np.where(overlap > max_bbox_overlap)[0]))) + + return pick diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/track.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/track.py new file mode 100644 index 0000000000000000000000000000000000000000..e46d391a1bd7667d3e9fe52d88fe8de51c2e70ac --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/track.py @@ -0,0 +1,168 @@ +# vim: expandtab:ts=4:sw=4 + + +class TrackState: + """ + Enumeration type for the single target track state. Newly created tracks are + classified as `tentative` until enough evidence has been collected. Then, + the track state is changed to `confirmed`. Tracks that are no longer alive + are classified as `deleted` to mark them for removal from the set of active + tracks. + + """ + + Tentative = 1 + Confirmed = 2 + Deleted = 3 + + +class Track: + """ + A single target track with state space `(x, y, a, h)` and associated + velocities, where `(x, y)` is the center of the bounding box, `a` is the + aspect ratio and `h` is the height. + + Parameters + ---------- + mean : ndarray + Mean vector of the initial state distribution. + covariance : ndarray + Covariance matrix of the initial state distribution. + track_id : int + A unique track identifier. + n_init : int + Number of consecutive detections before the track is confirmed. The + track state is set to `Deleted` if a miss occurs within the first + `n_init` frames. + max_age : int + The maximum number of consecutive misses before the track state is + set to `Deleted`. + feature : Optional[ndarray] + Feature vector of the detection this track originates from. If not None, + this feature is added to the `features` cache. + + Attributes + ---------- + mean : ndarray + Mean vector of the initial state distribution. + covariance : ndarray + Covariance matrix of the initial state distribution. + track_id : int + A unique track identifier. + hits : int + Total number of measurement updates. + age : int + Total number of frames since first occurance. + time_since_update : int + Total number of frames since last measurement update. + state : TrackState + The current track state. + features : List[ndarray] + A cache of features. On each measurement update, the associated feature + vector is added to this list. + + """ + + def __init__(self, mean, cls_, covariance, track_id, n_init, max_age, + feature=None): + self.mean = mean + self.cls_ = cls_ + self.covariance = covariance + self.track_id = track_id + self.hits = 1 + self.age = 1 + self.time_since_update = 0 + + self.state = TrackState.Tentative + self.features = [] + if feature is not None: + self.features.append(feature) + + self._n_init = n_init + self._max_age = max_age + + def to_tlwh(self): + """Get current position in bounding box format `(top left x, top left y, + width, height)`. + + Returns + ------- + ndarray + The bounding box. + + """ + ret = self.mean[:4].copy() + ret[2] *= ret[3] + ret[:2] -= ret[2:] / 2 + return ret + + def to_tlbr(self): + """Get current position in bounding box format `(min x, miny, max x, + max y)`. + + Returns + ------- + ndarray + The bounding box. + + """ + ret = self.to_tlwh() + ret[2:] = ret[:2] + ret[2:] + return ret + + def predict(self, kf): + """Propagate the state distribution to the current time step using a + Kalman filter prediction step. + + Parameters + ---------- + kf : kalman_filter.KalmanFilter + The Kalman filter. + + """ + self.mean, self.covariance = kf.predict(self.mean, self.covariance) + self.age += 1 + self.time_since_update += 1 + + def update(self, kf, detection): + """Perform Kalman filter measurement update step and update the feature + cache. + + Parameters + ---------- + kf : kalman_filter.KalmanFilter + The Kalman filter. + detection : Detection + The associated detection. + + """ + self.mean, self.covariance = kf.update( + self.mean, self.covariance, detection.to_xyah()) + self.features.append(detection.feature) + self.cls_ = detection.cls_ + + self.hits += 1 + self.time_since_update = 0 + if self.state == TrackState.Tentative and self.hits >= self._n_init: + self.state = TrackState.Confirmed + + def mark_missed(self): + """Mark this track as missed (no association at the current time step). + """ + if self.state == TrackState.Tentative: + self.state = TrackState.Deleted + elif self.time_since_update > self._max_age: + self.state = TrackState.Deleted + + def is_tentative(self): + """Returns True if this track is tentative (unconfirmed). + """ + return self.state == TrackState.Tentative + + def is_confirmed(self): + """Returns True if this track is confirmed.""" + return self.state == TrackState.Confirmed + + def is_deleted(self): + """Returns True if this track is dead and should be deleted.""" + return self.state == TrackState.Deleted diff --git a/Yolov5-Deepsort/deep_sort/deep_sort/sort/tracker.py b/Yolov5-Deepsort/deep_sort/deep_sort/sort/tracker.py new file mode 100644 index 0000000000000000000000000000000000000000..d27c9b35d298744f43b2466b45b793677712346b --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/deep_sort/sort/tracker.py @@ -0,0 +1,435 @@ +# vim: expandtab:ts=4:sw=4 +from __future__ import absolute_import +import numpy as np +from . import kalman_filter +from . import linear_assignment +from .detection import Detection +from . import iou_matching +from .track import Track +import rich + +class Tracker: + + def __init__(self, metric, max_iou_distance=0.7, max_age=70, n_init=3, window_size=10): + self.metric = metric + self.max_iou_distance = max_iou_distance + self.max_age = max_age + self.n_init = n_init + + self.kf = kalman_filter.KalmanFilter() + self.tracks = [] + self._next_id = 1 + + + # DDM parameters + self.match_history = [] # Store match history + self.evidence_threshold = 3 # Example threshold + self.window_size = window_size + self.evidence = {} # Initialize evidence dictionary + self.DDM = DDM() + + + def predict(self): + """Propagate track state distributions one time step forward. + + This function should be called once every time step, before `update`. + """ + for track in self.tracks: + track.predict(self.kf) + + def update(self, detections): + """Perform measurement update and track management. + + Parameters + ---------- + detections : List[deep_sort.detection.Detection] + A list of detections at the current time step. + + """ + + # matches, unmatched_tracks, unmatched_detections = self._match(detections) + + # # Record current matches + # self.match_history.append(matches) + # if len(self.match_history) > self.window_size: + # self.match_history.pop(0) + + # # Use evidence accumulation to finalize matches + # final_matches = self.accumulate_evidence(matches) + + # # Update track set with final matches + # for track_idx, detection_idx in final_matches: + + # self.tracks[track_idx].update(self.kf, detections[detection_idx]) + # for track_idx in unmatched_tracks: + # self.tracks[track_idx].mark_missed() + # for detection_idx in unmatched_detections: + # self._initiate_track(detections[detection_idx]) + # self.tracks = [t for t in self.tracks if not t.is_deleted()] + + # # Update distance metric + # active_targets = [t.track_id for t in self.tracks if t.is_confirmed()] + # features, targets = [], [] + # for track in self.tracks: + # if not track.is_confirmed(): + # continue + # features += track.features + # targets += [track.track_id for _ in track.features] + # track.features = [] + # self.metric.partial_fit( + # np.asarray(features), np.asarray(targets), active_targets) + #################################################################################### + # Run matching cascade. + matches, unmatched_tracks, unmatched_detections = \ + self._match(detections) + + #开始为DDM积累证据喵 + self.DDM.add_matches(matches) + self.DDM.add_detections(detections=detections) + self.DDM.add_tracks(self.tracks) + self.DDM.remove_old() + self.DDM.log_info() + final_matches, new_unmatched_tracks, new_unmatched_detections = self.DDM.final_judge() + matches = final_matches + for new_unmatched_track in new_unmatched_tracks: + unmatched_tracks.append(new_unmatched_track) + for new_unmatched_detection in new_unmatched_detections: + unmatched_detections.append(new_unmatched_detection) + #self.DDM.final_judge() + #rich.print(matches,unmatched_detections,unmatched_tracks) + + # Record current matches + self.match_history.append(matches) + if len(self.match_history) > self.window_size: + self.match_history.pop(0) + + # Update track set. + for track_idx, detection_idx in matches: + self.tracks[track_idx].update( + self.kf, detections[detection_idx]) + for track_idx in unmatched_tracks: + self.tracks[track_idx].mark_missed() + for detection_idx in unmatched_detections: + self._initiate_track(detections[detection_idx]) + self.tracks = [t for t in self.tracks if not t.is_deleted()] + + # Update distance metric. + active_targets = [t.track_id for t in self.tracks if t.is_confirmed()] + features, targets = [], [] + for track in self.tracks: + if not track.is_confirmed(): + continue + features += track.features + targets += [track.track_id for _ in track.features] + track.features = [] + self.metric.partial_fit( + np.asarray(features), np.asarray(targets), active_targets) + + def _match(self, detections): + + def gated_metric(tracks, dets, track_indices, detection_indices): + features = np.array([dets[i].feature for i in detection_indices]) + targets = np.array([tracks[i].track_id for i in track_indices]) + cost_matrix = self.metric.distance(features, targets) + cost_matrix = linear_assignment.gate_cost_matrix( + self.kf, cost_matrix, tracks, dets, track_indices, + detection_indices) + + + + return cost_matrix + + # Split track set into confirmed and unconfirmed tracks. + confirmed_tracks = [ + i for i, t in enumerate(self.tracks) if t.is_confirmed()] + unconfirmed_tracks = [ + i for i, t in enumerate(self.tracks) if not t.is_confirmed()] + + # Associate confirmed tracks using appearance features. + matches_a, unmatched_tracks_a, unmatched_detections = \ + linear_assignment.matching_cascade( + gated_metric, self.metric.matching_threshold, self.max_age, + self.tracks, detections, confirmed_tracks) + + # Associate remaining tracks together with unconfirmed tracks using IOU. + iou_track_candidates = unconfirmed_tracks + [ + k for k in unmatched_tracks_a if + self.tracks[k].time_since_update == 1] + unmatched_tracks_a = [ + k for k in unmatched_tracks_a if + self.tracks[k].time_since_update != 1] + matches_b, unmatched_tracks_b, unmatched_detections = \ + linear_assignment.min_cost_matching( + iou_matching.iou_cost, self.max_iou_distance, self.tracks, + detections, iou_track_candidates, unmatched_detections) + matches = matches_a + matches_b + unmatched_tracks = list(set(unmatched_tracks_a + unmatched_tracks_b)) + + + + return matches, unmatched_tracks, unmatched_detections + + def _initiate_track(self, detection): + mean, covariance = self.kf.initiate(detection.to_xyah()) + self.tracks.append(Track( + mean, detection.cls_, covariance, self._next_id, self.n_init, self.max_age, + detection.feature)) + self._next_id += 1 + + + + + def accumulate_evidence(self, current_matches): + rich.print(current_matches) + return current_matches + evidence = {} + + # 初始化evidence字典,包含所有可能的匹配对,包括不在current_matches中的 + for past_matches in reversed(self.match_history): + for track_idx, det_idx in past_matches: + evidence[(track_idx, det_idx)] = evidence.get((track_idx, det_idx), 0) + + # 初始化current_matches中的匹配对 + for track_idx, det_idx in current_matches: + evidence[(track_idx, det_idx)] = 1 # 初始分数为1 + + # 积累证据 + for past_matches in reversed(self.match_history): + for track_idx, det_idx in past_matches: + evidence[(track_idx, det_idx)] += 10 # 如果在过去的匹配中出现过,则增加1分 + + # 调整证据 + for key in evidence: + evidence[key] -= 0.2 # 所有匹配对减去0.2分 + + # 过滤匹配 + final_matches = [ + (track_idx, det_idx) for (track_idx, det_idx), score in evidence.items() + if score >= self.evidence_threshold + ] + + return final_matches + + +class DDM: + def __init__(self, history_lenth = 10, threshold = 5, evidence_rate = 1): + self.history_lenth = history_lenth + self.threshold = threshold + self.evidence_rate = evidence_rate + self.history_detections =[] + self.history_tracks =[] + self.history_matches = [] + self.frame_id = 0 + + def add_detections(self, detections): + if detections is None: + detections = [] + self.history_detections.append(detections) + # self.remove_old() + + def add_matches(self, matches): + if matches is None: + matches = [] + self.history_matches.append(matches) + # self.remove_old() + + def add_tracks(self, tracks): + if tracks is None: + tracks = [] + self.history_tracks.append(tracks) + # self.remove_old() + + def log_info(self): + # rich.print("DDM当前长度",len(self.history_matches)) + # rich.print("DDM历史匹配:",self.history_matches[-1]) + # rich.print("DDM历史Detecions:",self.history_detections[-1]) + # rich.print("DDM历史Tracks:", self.history_tracks[-1]) + # rich.print("随便一组的tlbr") + if self.frame_id>5: + self.total_detection_match() + rich.print("-------------------------------------------------------------") + self.total_track_match() + #self.final_judge() + self.frame_id = self.frame_id+1 + + + + + def remove_old(self): + if len(self.history_detections)!=len(self.history_matches) or len(self.history_detections)!=len(self.history_tracks): + rich.print("DDM历史长度不匹配,请检查代码捏qaq") + rich.print("Detection长度", len(self.history_detections)) + rich.print("Matches长度", len(self.history_matches)) + rich.print("Tracks长度", len(self.history_tracks)) + + while True: + if len(self.history_matches) > self.history_lenth: + self.history_matches.pop(0) + self.history_detections.pop(0) + self.history_tracks.pop(0) + else: + break + + def total_detection_match(self): + #current_detection = self.history_detections[-1] + output = [] + for current_detection in self.history_detections[-1]: + detection_result=[] + for track in self.history_tracks: + track_matches = [] + for detection in track: + match = self.iou_match(current_detection, detection) + track_matches.append(match) + detection_result.append(track_matches) + output.append(detection_result) + #rich.print(output) + return output + + def total_track_match(self): + output = [] + for current_track in self.history_tracks[-1]: + detection_result=[] + for tracks in self.history_tracks: + track_matches = [] + for track in tracks: + match = self.iou_match(current_track, track) + track_matches.append(match) + detection_result.append(track_matches) + output.append(detection_result) + # rich.print(output) + return output + + + + + def final_judge(self):#最终裁决 + if self.frame_id<10: + return self.history_matches[-1],[],[] + current_detections = self.history_detections[-1] + current_tracks = self.history_tracks[-1] + current_matches = self.history_matches + iou_detection_history_tracks_result = self.total_detection_match() + iou_track_history_tracks_result = self.total_track_match() + + iou_detection_history_tracks_result = [sublist[::-1] for sublist in iou_detection_history_tracks_result] + iou_track_history_tracks_result = [sublist[::-1] for sublist in iou_track_history_tracks_result] + #iou_detection_history_tracks_result.reverse() + #iou_track_history_tracks_result.reverse() + + + evidence = {} + + #证据初始化捏 + + # final_evidence = 0 + + for now_detection_id, now_detection_id_detections in enumerate(iou_detection_history_tracks_result): + for now_track_id, now_track_id_tracks in enumerate(iou_track_history_tracks_result): + result_matrix = self.logical_and_lists(now_detection_id_detections, now_track_id_tracks) + true_count = sum(sum(row) for row in result_matrix) + #rich.print(true_count) + evidence[(now_track_id,now_detection_id)] = self.evidence_rate*true_count + + # rich.print(current_matches[-1]) + # rich.print(evidence) + # rich.print(iou_detection_history_tracks_result[-1]) + rich.print(len(iou_detection_history_tracks_result)) + new_unmatched_tracks = [] + new_unmatched_detections = [] + for (track,detection) in current_matches[-1]: + if evidence[(track, detection)] <1: + #pass + new_unmatched_tracks.append(track) + new_unmatched_detections.append(detection) + #rich.print('niuniu', match) + + + + fianl_matches = [match for match in current_matches[-1] if evidence[match] >= 1] + return fianl_matches, new_unmatched_tracks, new_unmatched_detections + + + + + + + # rich.print(iou_track_history_tracks_result) + # for i in range(len(iou_detection_history_tracks_result)): + # for detections_ids,detections in enumerate(iou_detection_history_tracks_result[i]): + # for tracks_ids, tracks in enumerate(iou_track_history_tracks_result[i]): + # for match_id, match in enumerate(current_matches): + # for detection_id, detection in enumerate(detections): + # for track_id, track in enumerate(tracks): + # if(track == True) and (detection == True) and (detections_ids == tracks_ids) : + # final_evidence += self.evidence_rate + final_evidence + + + # if(detection == True) and (track == True): + # final_evidence +=self.evidence_rate + #rich.print(detection, track, match, "牛子") + + #rich.print("当前得分:", final_evidence) + + + + + + + + + def iou_match(self, detection, track ):#单组的detect与track的iou匹配哦 + ##rich.print(detection.to_tlbr()) + ##rich.print(track.to_tlbr()) + det_tlbr = detection.to_tlbr() + track_tlbr = track.to_tlbr() + + # Calculate the intersection coordinates + x_left = max(det_tlbr[0], track_tlbr[0]) + y_top = max(det_tlbr[1], track_tlbr[1]) + x_right = min(det_tlbr[2], track_tlbr[2]) + y_bottom = min(det_tlbr[3], track_tlbr[3]) + + # Calculate the area of intersection + if x_right < x_left or y_bottom < y_top: + return False # No overlap + + intersection_area = (x_right - x_left) * (y_bottom - y_top) + + # Calculate the area of both rectangles + det_area = (det_tlbr[2] - det_tlbr[0]) * (det_tlbr[3] - det_tlbr[1]) + track_area = (track_tlbr[2] - track_tlbr[0]) * (track_tlbr[3] - track_tlbr[1]) + + # Calculate the union area + union_area = det_area + track_area - intersection_area + + # Calculate the IoU + iou = intersection_area / union_area + + if iou> 0.1: + return True + + + return False + + + def logical_and_lists(self, list1, list2): + if len(list1) != len(list2) or len(list1[0]) != len(list2[0]): + return "Error: Input lists are not of the same size" + + result = [[list1[i][j] and list2[i][j] for j in range(len(list1[i]))] for i in range(len(list1))] + + return result + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Yolov5-Deepsort/deep_sort/utils/__init__.py b/Yolov5-Deepsort/deep_sort/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/deep_sort/utils/__pycache__/__init__.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/utils/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b78a3774e297bfa3a92ff2ae77f138373a30f67 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/utils/__pycache__/__init__.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/utils/__pycache__/__init__.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/utils/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cab1729ff02daa25ac6cb7308e45fcc703a877be Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/utils/__pycache__/__init__.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/utils/__pycache__/parser.cpython-36.pyc b/Yolov5-Deepsort/deep_sort/utils/__pycache__/parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5c82da3dbebf17fc41a3c56f9c8f9bdbe0bc8e0 Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/utils/__pycache__/parser.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/utils/__pycache__/parser.cpython-37.pyc b/Yolov5-Deepsort/deep_sort/utils/__pycache__/parser.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..875847c85eb0f2b8c05dd41a3d4651a69e2e690a Binary files /dev/null and b/Yolov5-Deepsort/deep_sort/utils/__pycache__/parser.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/deep_sort/utils/asserts.py b/Yolov5-Deepsort/deep_sort/utils/asserts.py new file mode 100644 index 0000000000000000000000000000000000000000..59a73cc04025762d6490fcd2945a747d963def32 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/asserts.py @@ -0,0 +1,13 @@ +from os import environ + + +def assert_in(file, files_to_check): + if file not in files_to_check: + raise AssertionError("{} does not exist in the list".format(str(file))) + return True + + +def assert_in_env(check_list: list): + for item in check_list: + assert_in(item, environ.keys()) + return True diff --git a/Yolov5-Deepsort/deep_sort/utils/draw.py b/Yolov5-Deepsort/deep_sort/utils/draw.py new file mode 100644 index 0000000000000000000000000000000000000000..bc7cb537978e86805d5d9789785a8afe67df9030 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/draw.py @@ -0,0 +1,36 @@ +import numpy as np +import cv2 + +palette = (2 ** 11 - 1, 2 ** 15 - 1, 2 ** 20 - 1) + + +def compute_color_for_labels(label): + """ + Simple function that adds fixed color depending on the class + """ + color = [int((p * (label ** 2 - label + 1)) % 255) for p in palette] + return tuple(color) + + +def draw_boxes(img, bbox, identities=None, offset=(0,0)): + for i,box in enumerate(bbox): + x1,y1,x2,y2 = [int(i) for i in box] + x1 += offset[0] + x2 += offset[0] + y1 += offset[1] + y2 += offset[1] + # box text and bar + id = int(identities[i]) if identities is not None else 0 + color = compute_color_for_labels(id) + label = '{}{:d}'.format("", id) + t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 2 , 2)[0] + cv2.rectangle(img,(x1, y1),(x2,y2),color,3) + cv2.rectangle(img,(x1, y1),(x1+t_size[0]+3,y1+t_size[1]+4), color,-1) + cv2.putText(img,label,(x1,y1+t_size[1]+4), cv2.FONT_HERSHEY_PLAIN, 2, [255,255,255], 2) + return img + + + +if __name__ == '__main__': + for i in range(82): + print(compute_color_for_labels(i)) diff --git a/Yolov5-Deepsort/deep_sort/utils/evaluation.py b/Yolov5-Deepsort/deep_sort/utils/evaluation.py new file mode 100644 index 0000000000000000000000000000000000000000..100179407181933d59809b25400d115cfa789867 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/evaluation.py @@ -0,0 +1,103 @@ +import os +import numpy as np +import copy +import motmetrics as mm +mm.lap.default_solver = 'lap' +from utils.io import read_results, unzip_objs + + +class Evaluator(object): + + def __init__(self, data_root, seq_name, data_type): + self.data_root = data_root + self.seq_name = seq_name + self.data_type = data_type + + self.load_annotations() + self.reset_accumulator() + + def load_annotations(self): + assert self.data_type == 'mot' + + gt_filename = os.path.join(self.data_root, self.seq_name, 'gt', 'gt.txt') + self.gt_frame_dict = read_results(gt_filename, self.data_type, is_gt=True) + self.gt_ignore_frame_dict = read_results(gt_filename, self.data_type, is_ignore=True) + + def reset_accumulator(self): + self.acc = mm.MOTAccumulator(auto_id=True) + + def eval_frame(self, frame_id, trk_tlwhs, trk_ids, rtn_events=False): + # results + trk_tlwhs = np.copy(trk_tlwhs) + trk_ids = np.copy(trk_ids) + + # gts + gt_objs = self.gt_frame_dict.get(frame_id, []) + gt_tlwhs, gt_ids = unzip_objs(gt_objs)[:2] + + # ignore boxes + ignore_objs = self.gt_ignore_frame_dict.get(frame_id, []) + ignore_tlwhs = unzip_objs(ignore_objs)[0] + + + # remove ignored results + keep = np.ones(len(trk_tlwhs), dtype=bool) + iou_distance = mm.distances.iou_matrix(ignore_tlwhs, trk_tlwhs, max_iou=0.5) + if len(iou_distance) > 0: + match_is, match_js = mm.lap.linear_sum_assignment(iou_distance) + match_is, match_js = map(lambda a: np.asarray(a, dtype=int), [match_is, match_js]) + match_ious = iou_distance[match_is, match_js] + + match_js = np.asarray(match_js, dtype=int) + match_js = match_js[np.logical_not(np.isnan(match_ious))] + keep[match_js] = False + trk_tlwhs = trk_tlwhs[keep] + trk_ids = trk_ids[keep] + + # get distance matrix + iou_distance = mm.distances.iou_matrix(gt_tlwhs, trk_tlwhs, max_iou=0.5) + + # acc + self.acc.update(gt_ids, trk_ids, iou_distance) + + if rtn_events and iou_distance.size > 0 and hasattr(self.acc, 'last_mot_events'): + events = self.acc.last_mot_events # only supported by https://github.com/longcw/py-motmetrics + else: + events = None + return events + + def eval_file(self, filename): + self.reset_accumulator() + + result_frame_dict = read_results(filename, self.data_type, is_gt=False) + frames = sorted(list(set(self.gt_frame_dict.keys()) | set(result_frame_dict.keys()))) + for frame_id in frames: + trk_objs = result_frame_dict.get(frame_id, []) + trk_tlwhs, trk_ids = unzip_objs(trk_objs)[:2] + self.eval_frame(frame_id, trk_tlwhs, trk_ids, rtn_events=False) + + return self.acc + + @staticmethod + def get_summary(accs, names, metrics=('mota', 'num_switches', 'idp', 'idr', 'idf1', 'precision', 'recall')): + names = copy.deepcopy(names) + if metrics is None: + metrics = mm.metrics.motchallenge_metrics + metrics = copy.deepcopy(metrics) + + mh = mm.metrics.create() + summary = mh.compute_many( + accs, + metrics=metrics, + names=names, + generate_overall=True + ) + + return summary + + @staticmethod + def save_summary(summary, filename): + import pandas as pd + writer = pd.ExcelWriter(filename) + summary.to_excel(writer) + writer.save() diff --git a/Yolov5-Deepsort/deep_sort/utils/io.py b/Yolov5-Deepsort/deep_sort/utils/io.py new file mode 100644 index 0000000000000000000000000000000000000000..2dc9afd24019cd930eef6c21ab9f579313dd3b3a --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/io.py @@ -0,0 +1,133 @@ +import os +from typing import Dict +import numpy as np + +# from utils.log import get_logger + + +def write_results(filename, results, data_type): + if data_type == 'mot': + save_format = '{frame},{id},{x1},{y1},{w},{h},-1,-1,-1,-1\n' + elif data_type == 'kitti': + save_format = '{frame} {id} pedestrian 0 0 -10 {x1} {y1} {x2} {y2} -10 -10 -10 -1000 -1000 -1000 -10\n' + else: + raise ValueError(data_type) + + with open(filename, 'w') as f: + for frame_id, tlwhs, track_ids in results: + if data_type == 'kitti': + frame_id -= 1 + for tlwh, track_id in zip(tlwhs, track_ids): + if track_id < 0: + continue + x1, y1, w, h = tlwh + x2, y2 = x1 + w, y1 + h + line = save_format.format(frame=frame_id, id=track_id, x1=x1, y1=y1, x2=x2, y2=y2, w=w, h=h) + f.write(line) + + +# def write_results(filename, results_dict: Dict, data_type: str): +# if not filename: +# return +# path = os.path.dirname(filename) +# if not os.path.exists(path): +# os.makedirs(path) + +# if data_type in ('mot', 'mcmot', 'lab'): +# save_format = '{frame},{id},{x1},{y1},{w},{h},1,-1,-1,-1\n' +# elif data_type == 'kitti': +# save_format = '{frame} {id} pedestrian -1 -1 -10 {x1} {y1} {x2} {y2} -1 -1 -1 -1000 -1000 -1000 -10 {score}\n' +# else: +# raise ValueError(data_type) + +# with open(filename, 'w') as f: +# for frame_id, frame_data in results_dict.items(): +# if data_type == 'kitti': +# frame_id -= 1 +# for tlwh, track_id in frame_data: +# if track_id < 0: +# continue +# x1, y1, w, h = tlwh +# x2, y2 = x1 + w, y1 + h +# line = save_format.format(frame=frame_id, id=track_id, x1=x1, y1=y1, x2=x2, y2=y2, w=w, h=h, score=1.0) +# f.write(line) +# logger.info('Save results to {}'.format(filename)) + + +def read_results(filename, data_type: str, is_gt=False, is_ignore=False): + if data_type in ('mot', 'lab'): + read_fun = read_mot_results + else: + raise ValueError('Unknown data type: {}'.format(data_type)) + + return read_fun(filename, is_gt, is_ignore) + + +""" +labels={'ped', ... % 1 +'person_on_vhcl', ... % 2 +'car', ... % 3 +'bicycle', ... % 4 +'mbike', ... % 5 +'non_mot_vhcl', ... % 6 +'static_person', ... % 7 +'distractor', ... % 8 +'occluder', ... % 9 +'occluder_on_grnd', ... %10 +'occluder_full', ... % 11 +'reflection', ... % 12 +'crowd' ... % 13 +}; +""" + + +def read_mot_results(filename, is_gt, is_ignore): + valid_labels = {1} + ignore_labels = {2, 7, 8, 12} + results_dict = dict() + if os.path.isfile(filename): + with open(filename, 'r') as f: + for line in f.readlines(): + linelist = line.split(',') + if len(linelist) < 7: + continue + fid = int(linelist[0]) + if fid < 1: + continue + results_dict.setdefault(fid, list()) + + if is_gt: + if 'MOT16-' in filename or 'MOT17-' in filename: + label = int(float(linelist[7])) + mark = int(float(linelist[6])) + if mark == 0 or label not in valid_labels: + continue + score = 1 + elif is_ignore: + if 'MOT16-' in filename or 'MOT17-' in filename: + label = int(float(linelist[7])) + vis_ratio = float(linelist[8]) + if label not in ignore_labels and vis_ratio >= 0: + continue + else: + continue + score = 1 + else: + score = float(linelist[6]) + + tlwh = tuple(map(float, linelist[2:6])) + target_id = int(linelist[1]) + + results_dict[fid].append((tlwh, target_id, score)) + + return results_dict + + +def unzip_objs(objs): + if len(objs) > 0: + tlwhs, ids, scores = zip(*objs) + else: + tlwhs, ids, scores = [], [], [] + tlwhs = np.asarray(tlwhs, dtype=float).reshape(-1, 4) + + return tlwhs, ids, scores \ No newline at end of file diff --git a/Yolov5-Deepsort/deep_sort/utils/json_logger.py b/Yolov5-Deepsort/deep_sort/utils/json_logger.py new file mode 100644 index 0000000000000000000000000000000000000000..0afd0b45df736866c49473db78286685d77660ac --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/json_logger.py @@ -0,0 +1,383 @@ +""" +References: + https://medium.com/analytics-vidhya/creating-a-custom-logging-mechanism-for-real-time-object-detection-using-tdd-4ca2cfcd0a2f +""" +import json +from os import makedirs +from os.path import exists, join +from datetime import datetime + + +class JsonMeta(object): + HOURS = 3 + MINUTES = 59 + SECONDS = 59 + PATH_TO_SAVE = 'LOGS' + DEFAULT_FILE_NAME = 'remaining' + + +class BaseJsonLogger(object): + """ + This is the base class that returns __dict__ of its own + it also returns the dicts of objects in the attributes that are list instances + + """ + + def dic(self): + # returns dicts of objects + out = {} + for k, v in self.__dict__.items(): + if hasattr(v, 'dic'): + out[k] = v.dic() + elif isinstance(v, list): + out[k] = self.list(v) + else: + out[k] = v + return out + + @staticmethod + def list(values): + # applies the dic method on items in the list + return [v.dic() if hasattr(v, 'dic') else v for v in values] + + +class Label(BaseJsonLogger): + """ + For each bounding box there are various categories with confidences. Label class keeps track of that information. + """ + + def __init__(self, category: str, confidence: float): + self.category = category + self.confidence = confidence + + +class Bbox(BaseJsonLogger): + """ + This module stores the information for each frame and use them in JsonParser + Attributes: + labels (list): List of label module. + top (int): + left (int): + width (int): + height (int): + + Args: + bbox_id (float): + top (int): + left (int): + width (int): + height (int): + + References: + Check Label module for better understanding. + + + """ + + def __init__(self, bbox_id, top, left, width, height): + self.labels = [] + self.bbox_id = bbox_id + self.top = top + self.left = left + self.width = width + self.height = height + + def add_label(self, category, confidence): + # adds category and confidence only if top_k is not exceeded. + self.labels.append(Label(category, confidence)) + + def labels_full(self, value): + return len(self.labels) == value + + +class Frame(BaseJsonLogger): + """ + This module stores the information for each frame and use them in JsonParser + Attributes: + timestamp (float): The elapsed time of captured frame + frame_id (int): The frame number of the captured video + bboxes (list of Bbox objects): Stores the list of bbox objects. + + References: + Check Bbox class for better information + + Args: + timestamp (float): + frame_id (int): + + """ + + def __init__(self, frame_id: int, timestamp: float = None): + self.frame_id = frame_id + self.timestamp = timestamp + self.bboxes = [] + + def add_bbox(self, bbox_id: int, top: int, left: int, width: int, height: int): + bboxes_ids = [bbox.bbox_id for bbox in self.bboxes] + if bbox_id not in bboxes_ids: + self.bboxes.append(Bbox(bbox_id, top, left, width, height)) + else: + raise ValueError("Frame with id: {} already has a Bbox with id: {}".format(self.frame_id, bbox_id)) + + def add_label_to_bbox(self, bbox_id: int, category: str, confidence: float): + bboxes = {bbox.id: bbox for bbox in self.bboxes} + if bbox_id in bboxes.keys(): + res = bboxes.get(bbox_id) + res.add_label(category, confidence) + else: + raise ValueError('the bbox with id: {} does not exists!'.format(bbox_id)) + + +class BboxToJsonLogger(BaseJsonLogger): + """ + ُ This module is designed to automate the task of logging jsons. An example json is used + to show the contents of json file shortly + Example: + { + "video_details": { + "frame_width": 1920, + "frame_height": 1080, + "frame_rate": 20, + "video_name": "/home/gpu/codes/MSD/pedestrian_2/project/public/camera1.avi" + }, + "frames": [ + { + "frame_id": 329, + "timestamp": 3365.1254 + "bboxes": [ + { + "labels": [ + { + "category": "pedestrian", + "confidence": 0.9 + } + ], + "bbox_id": 0, + "top": 1257, + "left": 138, + "width": 68, + "height": 109 + } + ] + }], + + Attributes: + frames (dict): It's a dictionary that maps each frame_id to json attributes. + video_details (dict): information about video file. + top_k_labels (int): shows the allowed number of labels + start_time (datetime object): we use it to automate the json output by time. + + Args: + top_k_labels (int): shows the allowed number of labels + + """ + + def __init__(self, top_k_labels: int = 1): + self.frames = {} + self.video_details = self.video_details = dict(frame_width=None, frame_height=None, frame_rate=None, + video_name=None) + self.top_k_labels = top_k_labels + self.start_time = datetime.now() + + def set_top_k(self, value): + self.top_k_labels = value + + def frame_exists(self, frame_id: int) -> bool: + """ + Args: + frame_id (int): + + Returns: + bool: true if frame_id is recognized + """ + return frame_id in self.frames.keys() + + def add_frame(self, frame_id: int, timestamp: float = None) -> None: + """ + Args: + frame_id (int): + timestamp (float): opencv captured frame time property + + Raises: + ValueError: if frame_id would not exist in class frames attribute + + Returns: + None + + """ + if not self.frame_exists(frame_id): + self.frames[frame_id] = Frame(frame_id, timestamp) + else: + raise ValueError("Frame id: {} already exists".format(frame_id)) + + def bbox_exists(self, frame_id: int, bbox_id: int) -> bool: + """ + Args: + frame_id: + bbox_id: + + Returns: + bool: if bbox exists in frame bboxes list + """ + bboxes = [] + if self.frame_exists(frame_id=frame_id): + bboxes = [bbox.bbox_id for bbox in self.frames[frame_id].bboxes] + return bbox_id in bboxes + + def find_bbox(self, frame_id: int, bbox_id: int): + """ + + Args: + frame_id: + bbox_id: + + Returns: + bbox_id (int): + + Raises: + ValueError: if bbox_id does not exist in the bbox list of specific frame. + """ + if not self.bbox_exists(frame_id, bbox_id): + raise ValueError("frame with id: {} does not contain bbox with id: {}".format(frame_id, bbox_id)) + bboxes = {bbox.bbox_id: bbox for bbox in self.frames[frame_id].bboxes} + return bboxes.get(bbox_id) + + def add_bbox_to_frame(self, frame_id: int, bbox_id: int, top: int, left: int, width: int, height: int) -> None: + """ + + Args: + frame_id (int): + bbox_id (int): + top (int): + left (int): + width (int): + height (int): + + Returns: + None + + Raises: + ValueError: if bbox_id already exist in frame information with frame_id + ValueError: if frame_id does not exist in frames attribute + """ + if self.frame_exists(frame_id): + frame = self.frames[frame_id] + if not self.bbox_exists(frame_id, bbox_id): + frame.add_bbox(bbox_id, top, left, width, height) + else: + raise ValueError( + "frame with frame_id: {} already contains the bbox with id: {} ".format(frame_id, bbox_id)) + else: + raise ValueError("frame with frame_id: {} does not exist".format(frame_id)) + + def add_label_to_bbox(self, frame_id: int, bbox_id: int, category: str, confidence: float): + """ + Args: + frame_id: + bbox_id: + category: + confidence: the confidence value returned from yolo detection + + Returns: + None + + Raises: + ValueError: if labels quota (top_k_labels) exceeds. + """ + bbox = self.find_bbox(frame_id, bbox_id) + if not bbox.labels_full(self.top_k_labels): + bbox.add_label(category, confidence) + else: + raise ValueError("labels in frame_id: {}, bbox_id: {} is fulled".format(frame_id, bbox_id)) + + def add_video_details(self, frame_width: int = None, frame_height: int = None, frame_rate: int = None, + video_name: str = None): + self.video_details['frame_width'] = frame_width + self.video_details['frame_height'] = frame_height + self.video_details['frame_rate'] = frame_rate + self.video_details['video_name'] = video_name + + def output(self): + output = {'video_details': self.video_details} + result = list(self.frames.values()) + output['frames'] = [item.dic() for item in result] + return output + + def json_output(self, output_name): + """ + Args: + output_name: + + Returns: + None + + Notes: + It creates the json output with `output_name` name. + """ + if not output_name.endswith('.json'): + output_name += '.json' + with open(output_name, 'w') as file: + json.dump(self.output(), file) + file.close() + + def set_start(self): + self.start_time = datetime.now() + + def schedule_output_by_time(self, output_dir=JsonMeta.PATH_TO_SAVE, hours: int = 0, minutes: int = 0, + seconds: int = 60) -> None: + """ + Notes: + Creates folder and then periodically stores the jsons on that address. + + Args: + output_dir (str): the directory where output files will be stored + hours (int): + minutes (int): + seconds (int): + + Returns: + None + + """ + end = datetime.now() + interval = 0 + interval += abs(min([hours, JsonMeta.HOURS]) * 3600) + interval += abs(min([minutes, JsonMeta.MINUTES]) * 60) + interval += abs(min([seconds, JsonMeta.SECONDS])) + diff = (end - self.start_time).seconds + + if diff > interval: + output_name = self.start_time.strftime('%Y-%m-%d %H-%M-%S') + '.json' + if not exists(output_dir): + makedirs(output_dir) + output = join(output_dir, output_name) + self.json_output(output_name=output) + self.frames = {} + self.start_time = datetime.now() + + def schedule_output_by_frames(self, frames_quota, frame_counter, output_dir=JsonMeta.PATH_TO_SAVE): + """ + saves as the number of frames quota increases higher. + :param frames_quota: + :param frame_counter: + :param output_dir: + :return: + """ + pass + + def flush(self, output_dir): + """ + Notes: + We use this function to output jsons whenever possible. + like the time that we exit the while loop of opencv. + + Args: + output_dir: + + Returns: + None + + """ + filename = self.start_time.strftime('%Y-%m-%d %H-%M-%S') + '-remaining.json' + output = join(output_dir, filename) + self.json_output(output_name=output) diff --git a/Yolov5-Deepsort/deep_sort/utils/log.py b/Yolov5-Deepsort/deep_sort/utils/log.py new file mode 100644 index 0000000000000000000000000000000000000000..0d48757dca88f35e9ea2cd1ca16e41bac9976a45 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/log.py @@ -0,0 +1,17 @@ +import logging + + +def get_logger(name='root'): + formatter = logging.Formatter( + # fmt='%(asctime)s [%(levelname)s]: %(filename)s(%(funcName)s:%(lineno)s) >> %(message)s') + fmt='%(asctime)s [%(levelname)s]: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + handler = logging.StreamHandler() + handler.setFormatter(formatter) + + logger = logging.getLogger(name) + logger.setLevel(logging.INFO) + logger.addHandler(handler) + return logger + + diff --git a/Yolov5-Deepsort/deep_sort/utils/parser.py b/Yolov5-Deepsort/deep_sort/utils/parser.py new file mode 100644 index 0000000000000000000000000000000000000000..c217ecb2c8c2b9a3c8cc10e2be2f149aba326b60 --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/parser.py @@ -0,0 +1,38 @@ +import os +import yaml +from easydict import EasyDict as edict + +class YamlParser(edict): + """ + This is yaml parser based on EasyDict. + """ + def __init__(self, cfg_dict=None, config_file=None): + if cfg_dict is None: + cfg_dict = {} + + if config_file is not None: + assert(os.path.isfile(config_file)) + with open(config_file, 'r') as fo: + cfg_dict.update(yaml.safe_load(fo.read())) + + super(YamlParser, self).__init__(cfg_dict) + + + def merge_from_file(self, config_file): + with open(config_file, 'r') as fo: + self.update(yaml.safe_load(fo.read())) + + + def merge_from_dict(self, config_dict): + self.update(config_dict) + + +def get_config(config_file=None): + return YamlParser(config_file=config_file) + + +if __name__ == "__main__": + cfg = YamlParser(config_file="../configs/yolov3.yaml") + cfg.merge_from_file("../configs/deep_sort.yaml") + + import ipdb; ipdb.set_trace() \ No newline at end of file diff --git a/Yolov5-Deepsort/deep_sort/utils/tools.py b/Yolov5-Deepsort/deep_sort/utils/tools.py new file mode 100644 index 0000000000000000000000000000000000000000..965fb69c2df41510fd740a4ab57d8fc7b81012de --- /dev/null +++ b/Yolov5-Deepsort/deep_sort/utils/tools.py @@ -0,0 +1,39 @@ +from functools import wraps +from time import time + + +def is_video(ext: str): + """ + Returns true if ext exists in + allowed_exts for video files. + + Args: + ext: + + Returns: + + """ + + allowed_exts = ('.mp4', '.webm', '.ogg', '.avi', '.wmv', '.mkv', '.3gp') + return any((ext.endswith(x) for x in allowed_exts)) + + +def tik_tok(func): + """ + keep track of time for each process. + Args: + func: + + Returns: + + """ + @wraps(func) + def _time_it(*args, **kwargs): + start = time() + try: + return func(*args, **kwargs) + finally: + end_ = time() + print("time: {:.03f}s, fps: {:.03f}".format(end_ - start, 1 / (end_ - start))) + + return _time_it diff --git a/Yolov5-Deepsort/demo.py b/Yolov5-Deepsort/demo.py new file mode 100644 index 0000000000000000000000000000000000000000..5e3a1f93624614677cf27fb3e7df6d7ec7bfde96 --- /dev/null +++ b/Yolov5-Deepsort/demo.py @@ -0,0 +1,66 @@ +from AIDetector_pytorch import Detector +import imutils +import rich +import cv2 +import time + +def main(): + + name = 'demo' + + det = Detector() + cap = cv2.VideoCapture('mot.mp4') + fps = int(cap.get(5)) + print('fps:', fps) + t = int(1000/fps) + frame_count = 0 + total_time = 0 + + videoWriter = None + + while True: + + start_time = time.time() + + # try: + _, im = cap.read() + if im is None: + break + #rich.print("im:",im) + result = det.feedCap(im) + #rich.print(result) + result = result['frame'] + result = imutils.resize(result, height=500) + if videoWriter is None: + fourcc = cv2.VideoWriter_fourcc( + 'm', 'p', '4', 'v') # opencv3.0 + videoWriter = cv2.VideoWriter( + 'result.mp4', fourcc, fps, (result.shape[1], result.shape[0])) + + videoWriter.write(result) + cv2.imshow(name, result) + cv2.waitKey(t) + + end_time = time.time() + total_time += (end_time - start_time) + frame_count +=1 + + if frame_count > 0: + processing_fps = frame_count / total_time + rich.print('Processing fps:', processing_fps) + + + if cv2.getWindowProperty(name, cv2.WND_PROP_AUTOSIZE) < 1: + # 点x退出 + break + # except Exception as e: + # print(e) + # break + + cap.release() + videoWriter.release() + cv2.destroyAllWindows() + +if __name__ == '__main__': + + main() \ No newline at end of file diff --git a/Yolov5-Deepsort/eval.py b/Yolov5-Deepsort/eval.py new file mode 100644 index 0000000000000000000000000000000000000000..52af1ee1aed9cad895e3aa71c4bc8f7e8e6d3bb6 --- /dev/null +++ b/Yolov5-Deepsort/eval.py @@ -0,0 +1,33 @@ +import motmetrics as mm +import pandas as pd + +# 读取ground truth和结果文件 +gt = pd.read_csv('/home/suml/docker/su/Yolov5-Deepsort/gt.txt', header=None) +res = pd.read_csv('/home/suml/docker/su/Yolov5-Deepsort/gt.txt', header=None) + +# 创建一个accumulator对象 +acc = mm.MOTAccumulator(auto_id=True) + +# 假设文件格式为:, , , , , , , , +for frame in gt[0].unique(): + gt_frame = gt[gt[0] == frame] + res_frame = res[res[0] == frame] + + # 提取ID和位置 + gt_ids = gt_frame[1].values + gt_positions = gt_frame[[2, 3, 4, 5]].values + + res_ids = res_frame[1].values + res_positions = res_frame[[2, 3, 4, 5]].values + + # 更新accumulator + acc.update( + gt_ids, res_ids, + mm.distances.iou_matrix(gt_positions, res_positions, max_iou=0.5) + ) + +# 计算指标 +mh = mm.metrics.create() +summary = mh.compute(acc, metrics=['idf1', 'mota', 'motp'], name='DeepSORT') + +print(summary) diff --git a/Yolov5-Deepsort/gt.txt b/Yolov5-Deepsort/gt.txt new file mode 100644 index 0000000000000000000000000000000000000000..f8c1ad7181ccf4b07620a53afd98e7b61045d709 --- /dev/null +++ b/Yolov5-Deepsort/gt.txt @@ -0,0 +1,18718 @@ +1,1,1376,485,37,28,0,11,1 +2,1,1379,486,37,28,0,11,1 +3,1,1382,487,38,29,0,11,1 +4,1,1386,488,38,29,0,11,1 +5,1,1389,490,38,29,0,11,1 +6,1,1393,491,38,30,0,11,1 +7,1,1396,492,39,30,0,11,1 +8,1,1399,494,39,30,0,11,1 +9,1,1403,495,39,30,0,11,1 +10,1,1406,496,40,31,0,11,1 +11,1,1410,498,40,31,0,11,1 +12,1,1413,497,40,31,0,11,1 +13,1,1416,497,40,31,0,11,1 +14,1,1419,497,40,31,0,11,1 +15,1,1422,497,40,31,0,11,1 +16,1,1426,497,39,31,0,11,1 +17,1,1429,496,39,31,0,11,1 +18,1,1432,496,39,31,0,11,1 +19,1,1435,496,39,31,0,11,1 +20,1,1438,496,39,31,0,11,1 +21,1,1442,496,39,31,0,11,1 +22,1,1445,497,39,32,0,11,1 +23,1,1448,499,40,32,0,11,1 +24,1,1451,501,41,32,0,11,1 +25,1,1454,503,41,32,0,11,1 +26,1,1458,505,41,32,0,11,1 +27,1,1461,507,42,32,0,11,1 +28,1,1464,509,42,32,0,11,1 +29,1,1467,511,43,32,0,11,1 +30,1,1470,513,44,32,0,11,1 +31,1,1474,515,44,33,0,11,1 +32,1,1476,518,45,36,0,11,1 +33,1,1476,508,45,36,0,11,1 +34,1,1488,509,46,36,0,11,1 +35,1,1488,509,46,36,0,11,1 +36,1,1492,506,46,35,0,11,1 +37,1,1496,503,47,34,0,11,1 +38,1,1500,500,48,33,0,11,1 +39,1,1505,497,48,33,0,11,1 +40,1,1508,498,48,34,0,11,1 +41,1,1512,499,48,35,0,11,1 +42,1,1516,501,47,35,0,11,1 +43,1,1520,502,47,36,0,11,1 +44,1,1524,504,47,36,0,11,1 +45,1,1528,505,46,37,0,11,1 +46,1,1532,506,46,38,0,11,1 +47,1,1536,508,45,38,0,11,1 +48,1,1540,509,45,39,0,11,1 +49,1,1544,511,45,39,0,11,1 +50,1,1548,510,45,40,0,11,1 +51,1,1552,510,46,40,0,11,1 +52,1,1556,510,47,40,0,11,1 +53,1,1561,510,47,40,0,11,1 +54,1,1565,510,48,41,0,11,1 +55,1,1569,509,49,42,0,11,1 +56,1,1574,509,49,42,0,11,1 +57,1,1578,509,50,42,0,11,1 +58,1,1582,509,51,42,0,11,1 +59,1,1587,509,51,43,0,11,1 +60,1,1589,509,52,44,0,11,1 +61,1,1591,510,53,44,0,11,1 +62,1,1593,510,54,45,0,11,1 +63,1,1595,511,56,45,0,11,1 +64,1,1597,511,57,46,0,11,1 +65,1,1599,512,58,47,0,11,1 +66,1,1601,513,59,47,0,11,1 +67,1,1603,513,61,48,0,11,1 +68,1,1605,514,62,48,0,11,1 +69,1,1607,514,63,49,0,11,1 +70,1,1609,515,64,49,0,11,1 +71,1,1612,516,65,50,0,11,1 +72,1,1614,515,64,50,0,11,1 +73,1,1616,515,64,50,0,11,1 +74,1,1618,514,64,51,0,11,1 +75,1,1620,514,64,51,0,11,1 +76,1,1622,514,63,51,0,11,1 +77,1,1624,513,63,52,0,11,1 +78,1,1626,513,63,52,0,11,1 +79,1,1628,513,63,52,0,11,1 +80,1,1627,513,64,53,0,11,1 +81,1,1627,514,64,53,0,11,1 +82,1,1627,515,65,53,0,11,1 +83,1,1627,515,65,54,0,11,1 +84,1,1626,516,67,54,0,11,1 +85,1,1626,517,67,54,0,11,1 +86,1,1626,517,67,55,0,11,1 +87,1,1626,518,68,55,0,11,1 +88,1,1625,519,69,55,0,11,1 +89,1,1625,519,70,56,0,11,1 +90,1,1625,520,70,56,0,11,1 +91,1,1625,521,71,57,0,11,1 +92,1,1625,521,71,58,0,11,1 +93,1,1625,522,71,58,0,11,1 +94,1,1625,523,71,58,0,11,1 +95,1,1625,524,71,58,0,11,1 +96,1,1625,525,71,59,0,11,1 +97,1,1625,525,71,60,0,11,1 +98,1,1625,526,71,60,0,11,1 +99,1,1625,527,71,60,0,11,1 +100,1,1625,528,71,60,0,11,1 +101,1,1625,529,71,61,0,11,1 +102,1,1624,529,71,61,0,11,1 +103,1,1623,530,71,61,0,11,1 +104,1,1622,531,72,60,0,11,1 +105,1,1621,531,72,61,0,11,1 +106,1,1621,532,72,61,0,11,1 +107,1,1620,533,72,60,0,11,1 +108,1,1619,533,72,61,0,11,1 +109,1,1618,534,73,60,0,11,1 +110,1,1617,535,73,60,0,11,1 +111,1,1617,536,73,60,0,11,1 +112,1,1616,536,73,60,0,11,1 +113,1,1615,536,74,60,0,11,1 +114,1,1614,536,75,60,0,11,1 +115,1,1613,536,75,60,0,11,1 +116,1,1613,536,75,60,0,11,1 +117,1,1612,536,76,60,0,11,1 +118,1,1611,536,76,60,0,11,1 +119,1,1610,536,77,60,0,11,1 +120,1,1609,536,78,60,0,11,1 +121,1,1609,536,78,61,0,11,1 +122,1,1608,536,78,61,0,11,1 +123,1,1607,536,78,62,0,11,1 +124,1,1606,536,79,63,0,11,1 +125,1,1606,536,78,64,0,11,1 +126,1,1605,536,79,65,0,11,1 +127,1,1604,536,79,66,0,11,1 +128,1,1603,536,80,66,0,11,1 +129,1,1603,536,79,67,0,11,1 +130,1,1602,536,80,68,0,11,1 +131,1,1601,536,80,69,0,11,1 +132,1,1600,536,80,70,0,11,1 +133,1,1600,536,80,71,0,11,1 +134,1,1599,536,80,72,0,11,1 +135,1,1598,536,81,72,0,11,1 +136,1,1597,536,81,73,0,11,1 +137,1,1597,536,81,74,0,11,1 +138,1,1596,536,81,75,0,11,1 +139,1,1595,536,82,76,0,11,1 +140,1,1594,536,82,77,0,11,1 +141,1,1594,536,82,78,0,11,1 +142,1,1593,537,83,78,0,11,1 +143,1,1593,538,84,78,0,11,1 +144,1,1593,539,85,78,0,11,1 +145,1,1593,540,86,79,0,11,1 +146,1,1593,541,87,79,0,11,1 +147,1,1593,542,88,79,0,11,1 +148,1,1593,543,89,80,0,11,1 +149,1,1593,544,90,80,0,11,1 +150,1,1593,545,91,80,0,11,1 +151,1,1593,547,92,80,0,11,1 +152,1,1592,546,93,80,0,11,1 +153,1,1592,545,93,81,0,11,1 +154,1,1591,545,94,81,0,11,1 +155,1,1591,544,95,82,0,11,1 +156,1,1591,544,95,82,0,11,1 +157,1,1590,543,96,82,0,11,1 +158,1,1590,542,97,83,0,11,1 +159,1,1589,542,98,83,0,11,1 +160,1,1589,541,98,84,0,11,1 +161,1,1589,541,99,84,0,11,1 +162,1,1590,541,101,85,0,11,1 +163,1,1592,541,103,86,0,11,1 +164,1,1594,541,104,87,0,11,1 +165,1,1596,542,106,88,0,11,1 +166,1,1598,542,107,89,0,11,1 +167,1,1600,542,109,90,0,11,1 +168,1,1602,543,110,91,0,11,1 +169,1,1604,543,112,92,0,11,1 +170,1,1606,543,113,93,0,11,1 +171,1,1608,544,115,94,0,11,1 +172,1,1611,545,116,95,0,11,1 +173,1,1614,546,118,97,0,11,1 +174,1,1617,547,120,99,0,11,1 +175,1,1620,548,122,101,0,11,1 +176,1,1623,549,124,103,0,11,1 +177,1,1626,550,126,104,0,11,1 +178,1,1629,551,128,106,0,11,1 +179,1,1632,552,130,108,0,11,1 +180,1,1635,553,132,110,0,11,1 +181,1,1638,555,134,111,0,11,1 +182,1,1644,555,136,113,0,11,1 +183,1,1650,556,138,114,0,11,1 +184,1,1656,557,140,115,0,11,1 +185,1,1663,557,142,117,0,11,1 +186,1,1669,558,144,118,0,11,1 +187,1,1675,559,146,119,0,11,1 +188,1,1682,559,148,121,0,11,1 +189,1,1688,560,150,122,0,11,1 +190,1,1694,561,152,123,0,11,1 +191,1,1701,562,154,124,0,11,1 +192,1,1710,564,153,124,0,11,1 +193,1,1720,566,152,125,0,11,1 +194,1,1729,568,151,126,0,11,1 +195,1,1739,570,150,127,0,11,1 +196,1,1748,572,150,128,0,11,1 +197,1,1758,574,148,128,0,11,1 +198,1,1767,576,148,129,0,11,1 +199,1,1777,578,146,130,0,11,1 +200,1,1786,580,146,131,0,11,1 +1,2,1371,518,33,95,1,1,0.67647 +2,2,1375,516,32,94,1,1,0.66667 +3,2,1379,514,32,93,1,1,0.64829 +4,2,1383,513,33,99,1,1,0.61912 +5,2,1387,519,33,100,1,1,0.64123 +6,2,1391,526,34,100,1,1,0.65714 +7,2,1392,524,34,100,1,1,0.65714 +8,2,1394,530,34,100,1,1,0.65714 +9,2,1397,536,34,100,1,1,0.65714 +10,2,1399,546,33,95,1,1,0.67647 +11,2,1401,543,33,96,1,1,0.70588 +12,2,1403,540,34,97,1,1,0.71429 +13,2,1405,537,35,98,1,1,0.72222 +14,2,1408,535,35,98,1,1,0.72222 +15,2,1410,535,36,99,1,1,0.72973 +16,2,1413,535,36,100,1,1,0.75676 +17,2,1416,535,37,101,1,1,0.73684 +18,2,1419,536,37,101,1,1,0.73684 +19,2,1422,536,38,102,1,1,0.71795 +20,2,1425,536,38,103,1,1,0.71795 +21,2,1428,537,39,104,1,1,0.725 +22,2,1430,537,40,106,1,1,0.73171 +23,2,1433,538,40,107,1,1,0.73171 +24,2,1436,539,40,109,1,1,0.7561 +25,2,1439,540,40,110,1,1,0.7561 +26,2,1442,541,40,112,1,1,0.78049 +27,2,1444,544,41,113,1,1,0.78571 +28,2,1447,547,42,114,1,1,0.76744 +29,2,1450,550,42,115,1,1,0.7907 +30,2,1453,553,43,116,1,1,0.77273 +31,2,1456,556,44,117,1,1,0.77778 +32,2,1460,553,44,118,1,1,0.74883 +33,2,1464,550,44,119,1,1,0.75556 +34,2,1468,548,44,119,1,1,0.75556 +35,2,1472,545,45,120,1,1,0.7359 +36,2,1476,543,45,120,1,1,0.73913 +37,2,1480,540,45,121,1,1,0.73913 +38,2,1484,538,46,122,1,1,0.74468 +39,2,1487,539,47,122,1,1,0.75 +40,2,1491,540,47,123,1,1,0.75 +41,2,1495,541,48,124,1,1,0.7551 +42,2,1499,543,48,125,1,1,0.7551 +43,2,1503,545,49,126,1,1,0.76 +44,2,1508,548,48,127,1,1,0.7551 +45,2,1512,550,49,128,1,1,0.76 +46,2,1516,552,50,129,1,1,0.76471 +47,2,1521,555,49,130,1,1,0.76 +48,2,1525,557,50,131,1,1,0.76471 +49,2,1530,560,50,132,1,1,0.76471 +50,2,1534,560,51,135,1,1,0.76923 +51,2,1539,561,52,138,1,1,0.77358 +52,2,1544,560,52,138,1,1,0.77358 +53,2,1549,559,52,139,1,1,0.77358 +54,2,1554,558,52,140,1,1,0.77358 +55,2,1559,557,52,141,1,1,0.77358 +56,2,1564,556,52,142,1,1,0.79245 +57,2,1569,555,53,143,1,1,0.7963 +58,2,1574,554,53,144,1,1,0.7963 +59,2,1579,553,53,145,1,1,0.7963 +60,2,1584,552,53,146,1,1,0.78672 +61,2,1589,551,53,147,1,1,0.77578 +62,2,1594,550,53,148,1,1,0.76423 +63,2,1599,550,54,148,1,1,0.76412 +64,2,1603,553,54,149,1,1,0.77515 +65,2,1607,556,54,150,1,1,0.78073 +66,2,1612,560,54,151,1,1,0.79545 +67,2,1618,575,54,152,1,1,1 +68,2,1621,565,54,153,1,1,0.8 +69,2,1624,566,55,155,1,1,0.80357 +70,2,1628,567,55,157,1,1,0.80357 +71,2,1631,569,56,159,1,1,0.80702 +72,2,1635,570,56,161,1,1,0.80702 +73,2,1639,571,56,163,1,1,0.80702 +74,2,1642,573,57,165,1,1,1 +75,2,1646,574,57,167,1,1,1 +76,2,1650,576,58,169,1,1,1 +77,2,1652,576,59,170,1,1,1 +78,2,1654,577,60,171,1,1,1 +79,2,1656,577,62,173,1,1,1 +80,2,1658,578,63,174,1,1,1 +81,2,1660,578,64,176,1,1,1 +82,2,1662,579,66,177,1,1,1 +83,2,1664,579,67,179,1,1,1 +84,2,1666,580,69,180,1,1,1 +85,2,1668,582,70,181,1,1,1 +86,2,1670,584,71,183,1,1,1 +87,2,1672,586,72,184,1,1,1 +88,2,1674,589,74,185,1,1,1 +89,2,1676,591,75,186,1,1,1 +90,2,1678,593,76,188,1,1,1 +91,2,1680,596,78,189,1,1,1 +92,2,1682,598,79,190,1,1,1 +93,2,1685,600,79,191,1,1,1 +94,2,1688,602,80,193,1,1,1 +95,2,1691,603,80,195,1,1,1 +96,2,1694,605,80,196,1,1,1 +97,2,1697,606,80,199,1,1,1 +98,2,1700,608,80,200,1,1,1 +99,2,1703,609,80,203,1,1,1 +100,2,1706,611,80,204,1,1,1 +101,2,1710,613,79,206,1,1,1 +102,2,1712,614,80,208,1,1,1 +103,2,1714,616,81,210,1,1,1 +104,2,1716,618,82,212,1,1,1 +105,2,1718,620,83,213,1,1,1 +106,2,1720,622,85,215,1,1,1 +107,2,1722,623,86,218,1,1,1 +108,2,1724,625,87,219,1,1,1 +109,2,1726,627,88,221,1,1,1 +110,2,1728,629,89,223,1,1,1 +111,2,1731,631,90,225,1,1,1 +112,2,1733,632,92,228,1,1,1 +113,2,1736,633,93,231,1,1,1 +114,2,1739,634,94,234,1,1,1 +115,2,1741,635,96,237,1,1,1 +116,2,1744,636,97,240,1,1,1 +117,2,1747,637,98,243,1,1,1 +118,2,1749,638,100,246,1,1,1 +119,2,1752,639,101,249,1,1,1 +120,2,1755,640,102,252,1,1,1 +121,2,1758,642,103,254,1,1,1 +122,2,1761,643,104,257,1,1,1 +123,2,1764,645,106,259,1,1,1 +124,2,1768,646,107,262,1,1,1 +125,2,1771,648,109,264,1,1,1 +126,2,1775,649,110,268,1,1,1 +127,2,1778,651,112,270,1,1,1 +128,2,1781,652,114,273,1,1,1 +129,2,1785,654,115,275,1,1,1 +130,2,1788,655,117,278,1,1,1 +131,2,1792,657,118,281,1,1,1 +132,2,1797,661,117,284,1,1,1 +133,2,1802,665,117,288,1,1,1 +134,2,1807,669,117,292,1,1,0.9661 +135,2,1812,673,117,296,1,1,0.92373 +136,2,1817,677,117,300,1,1,0.88136 +137,2,1823,677,117,304,1,1,0.83051 +138,2,1829,678,117,307,1,1,0.77966 +139,2,1835,679,118,310,1,1,0.72269 +140,2,1841,680,118,313,1,1,0.67227 +141,2,1847,681,119,317,1,1,0.61667 +142,2,1853,684,124,317,1,1,0.544 +143,2,1860,687,128,318,1,1,0.47287 +144,2,1866,690,133,318,1,1,0.41045 +145,2,1873,693,137,319,1,1,0.34783 +1,3,1391,474,10,148,0,10,0.80537 +2,3,1395,471,10,150,0,10,0.80795 +3,3,1399,468,10,152,0,10,0.80392 +4,3,1403,466,11,153,0,10,0.80519 +5,3,1406,471,11,154,0,10,0.80645 +6,3,1409,476,11,155,0,10,0.80128 +7,3,1413,481,11,157,0,10,0.8038 +8,3,1416,486,11,158,0,10,0.80503 +9,3,1419,491,11,159,0,10,0.80625 +10,3,1422,496,11,161,0,10,0.80247 +11,3,1425,494,11,162,0,10,0.80368 +12,3,1428,492,11,164,0,10,0.80606 +13,3,1431,490,11,166,0,10,0.80838 +14,3,1434,489,11,167,0,10,0.80952 +15,3,1437,487,11,169,0,10,0.81176 +16,3,1441,485,10,170,0,10,0.81287 +17,3,1444,483,10,172,0,10,0.81503 +18,3,1447,482,10,173,0,10,0.81609 +19,3,1450,480,10,175,0,10,0.81818 +20,3,1453,478,10,177,0,10,0.82022 +21,3,1457,477,10,178,0,10,0.82123 +22,3,1460,478,10,180,0,10,0.81768 +23,3,1463,480,10,182,0,10,0.81967 +24,3,1467,482,10,183,0,10,0.82065 +25,3,1470,484,10,185,0,10,0.82258 +26,3,1474,486,10,186,0,10,0.82353 +27,3,1477,488,10,188,0,10,0.8254 +28,3,1480,490,10,189,0,10,0.82632 +29,3,1484,492,10,191,0,10,0.82812 +30,3,1487,494,10,192,0,10,0.82902 +31,3,1491,496,10,194,0,10,0.82564 +32,3,1494,493,11,196,0,10,0.81218 +33,3,1498,491,11,197,0,10,0.81313 +34,3,1502,488,11,199,0,10,0.815 +35,3,1506,486,11,200,0,10,0.81592 +36,3,1510,483,11,202,0,10,0.82266 +37,3,1514,481,11,203,0,10,0.82843 +38,3,1518,478,11,205,0,10,0.83495 +39,3,1522,476,11,206,0,10,0.83575 +40,3,1526,473,11,208,0,10,0.83254 +41,3,1530,471,11,210,0,10,0.82938 +42,3,1534,472,11,211,0,10,0.83019 +43,3,1538,473,11,213,0,10,0.8271 +44,3,1542,474,11,215,0,10,0.8287 +45,3,1546,476,11,216,0,10,0.82488 +46,3,1550,477,11,218,0,10,0.82192 +47,3,1554,478,11,219,0,10,0.82273 +48,3,1558,480,11,220,0,10,0.819 +49,3,1562,481,11,222,0,10,0.82063 +50,3,1566,482,11,224,0,10,0.81778 +51,3,1571,484,11,225,0,10,0.81858 +52,3,1574,482,11,226,0,10,0.81938 +53,3,1578,481,11,227,0,10,0.82018 +54,3,1581,480,11,228,0,10,0.81659 +55,3,1585,479,11,229,0,10,0.81304 +56,3,1589,477,10,231,0,10,0.81466 +57,3,1593,476,10,232,0,10,0.81545 +58,3,1597,475,10,233,0,10,0.81624 +59,3,1601,474,10,234,0,10,0.81277 +60,3,1605,473,10,235,0,10,0.80932 +61,3,1609,472,10,236,0,10,0.81013 +62,3,1612,472,10,238,0,10,0.80753 +63,3,1615,473,10,240,0,10,0.80913 +64,3,1618,474,10,241,0,10,0.80579 +65,3,1621,475,10,243,0,10,0.80328 +66,3,1624,476,10,245,0,10,0.80488 +67,3,1627,476,10,247,0,10,0.20161 +68,3,1630,477,10,249,0,10,0.804 +69,3,1633,478,10,250,0,10,0.8008 +70,3,1636,479,10,252,0,10,0.80237 +71,3,1640,480,10,254,0,10,0.8 +72,3,1641,479,10,256,0,10,0.80156 +73,3,1642,479,10,257,0,10,0.80233 +74,3,1643,478,10,259,0,10,0.16538 +75,3,1644,478,10,260,0,10,0.28352 +76,3,1645,478,11,262,0,10,0.43631 +77,3,1646,477,11,264,0,10,0.48679 +78,3,1647,477,11,265,0,10,0.54073 +79,3,1648,476,11,267,0,10,0.59453 +80,3,1649,476,11,268,0,10,0.64405 +81,3,1651,476,11,270,0,10,0.64483 +82,3,1651,476,11,272,0,10,0.75031 +83,3,1651,476,11,275,0,10,0.80072 +84,3,1651,476,12,277,0,10,0.80216 +85,3,1651,476,12,280,0,10,0.80427 +86,3,1652,476,12,282,0,10,0.80212 +87,3,1652,476,12,285,0,10,0.8042 +88,3,1652,476,12,287,0,10,0.80556 +89,3,1652,476,13,290,0,10,0.80412 +90,3,1652,476,13,292,0,10,0.80546 +91,3,1653,476,13,295,0,10,0.80405 +92,3,1652,475,13,298,0,10,0.80268 +93,3,1652,475,13,301,0,10,0.80464 +94,3,1652,475,13,303,0,10,0.80592 +95,3,1651,475,14,306,0,10,0.80782 +96,3,1651,475,14,308,0,10,0.80583 +97,3,1651,475,13,311,0,10,0.80449 +98,3,1650,475,14,313,0,10,0.80573 +99,3,1650,475,14,316,0,10,0.80757 +100,3,1650,475,14,318,0,10,0.80878 +101,3,1650,475,14,321,0,10,0.80745 +102,3,1649,474,14,324,0,10,0.80923 +103,3,1649,474,14,327,0,10,0.81098 +104,3,1649,474,14,329,0,10,0.81515 +105,3,1648,474,15,332,0,10,0.81381 +106,3,1648,474,15,334,0,10,0.81493 +107,3,1648,474,14,337,0,10,0.81953 +108,3,1647,474,15,339,0,10,0.81765 +109,3,1647,474,15,342,0,10,0.82216 +110,3,1647,474,15,344,0,10,0.82319 +111,3,1647,474,15,347,0,10,0.82471 +112,3,1646,473,15,350,0,10,0.82621 +113,3,1645,473,15,353,0,10,0.82768 +114,3,1644,473,16,355,0,10,0.82865 +115,3,1644,473,15,358,0,10,0.83008 +116,3,1643,473,15,360,0,10,0.83102 +117,3,1642,473,16,363,0,10,0.83242 +118,3,1641,473,16,365,0,10,0.83333 +119,3,1641,473,15,368,0,10,0.83469 +120,3,1640,473,16,370,0,10,0.83558 +121,3,1639,473,16,373,0,10,0.83422 +122,3,1638,472,16,376,0,10,0.83554 +123,3,1638,472,16,379,0,10,0.83421 +124,3,1637,472,16,381,0,10,0.83246 +125,3,1636,472,16,384,0,10,0.83117 +126,3,1635,472,17,386,0,10,0.82946 +127,3,1635,472,16,389,0,10,0.82821 +128,3,1634,472,16,391,0,10,0.82908 +129,3,1633,472,17,394,0,10,0.82785 +130,3,1632,472,17,396,0,10,0.8262 +131,3,1632,472,17,399,0,10,0.825 +132,3,1632,471,17,402,0,10,0.82382 +133,3,1632,471,17,405,0,10,0.82266 +134,3,1632,471,17,407,0,10,0.82108 +135,3,1632,471,18,410,0,10,0.82238 +136,3,1632,471,18,412,0,10,0.82082 +137,3,1632,471,18,415,0,10,0.81971 +138,3,1632,471,19,417,0,10,0.81818 +139,3,1632,471,19,420,0,10,0.8171 +140,3,1632,471,19,422,0,10,0.8156 +141,3,1633,471,19,425,0,10,0.81455 +142,3,1633,469,19,430,0,10,0.81671 +143,3,1633,468,19,435,0,10,0.81881 +144,3,1633,466,19,440,0,10,0.82086 +145,3,1634,465,19,445,0,10,0.82063 +146,3,1634,464,19,450,0,10,0.82262 +147,3,1634,462,19,455,0,10,0.82456 +148,3,1634,461,20,460,0,10,0.8243 +149,3,1635,459,19,465,0,10,0.82618 +150,3,1635,458,19,470,0,10,0.82803 +151,3,1635,457,20,475,0,10,0.82983 +152,3,1635,455,20,480,0,10,0.8316 +153,3,1636,454,19,485,0,10,0.83128 +154,3,1636,452,19,490,0,10,0.83299 +155,3,1636,451,20,495,0,10,0.83266 +156,3,1636,450,20,500,0,10,0.83433 +157,3,1637,448,19,505,0,10,0.83597 +158,3,1637,447,20,510,0,10,0.83562 +159,3,1637,445,20,515,0,10,0.83721 +160,3,1637,444,20,520,0,10,0.83685 +161,3,1638,443,20,525,0,10,0.8384 +162,3,1640,442,20,530,0,10,0.83804 +163,3,1642,442,20,535,0,10,0.83769 +164,3,1644,442,20,540,0,10,0.83734 +165,3,1646,442,20,544,0,10,0.8367 +166,3,1648,442,20,549,0,10,0.83636 +167,3,1650,441,20,555,0,10,0.83633 +168,3,1652,441,20,559,0,10,0.83571 +169,3,1654,441,20,564,0,10,0.8354 +170,3,1656,441,20,569,0,10,0.83509 +171,3,1659,441,20,574,0,10,0.83478 +172,3,1663,442,20,582,0,10,0.83533 +173,3,1668,444,20,589,0,10,0.8339 +174,3,1672,445,21,597,0,10,0.83278 +175,3,1677,447,20,604,0,10,0.8314 +176,3,1681,448,21,613,0,10,0.83062 +177,3,1686,450,21,620,0,10,0.83092 +178,3,1690,451,21,628,0,10,0.82989 +179,3,1695,453,21,635,0,10,0.81604 +180,3,1699,454,22,643,0,10,0.80124 +181,3,1704,456,22,651,0,10,0.78681 +182,3,1710,459,22,651,0,10,0.77914 +183,3,1717,462,22,651,0,10,0.77301 +184,3,1724,465,22,652,0,10,0.7657 +185,3,1731,469,22,651,0,10,0.75767 +186,3,1738,472,22,652,0,10,0.75038 +187,3,1744,475,22,652,0,10,0.74426 +188,3,1751,479,22,651,0,10,0.7362 +189,3,1758,482,22,652,0,10,0.72894 +190,3,1765,485,22,652,0,10,0.72282 +191,3,1772,489,22,652,0,10,0.71516 +192,3,1783,492,22,652,0,10,0.71057 +193,3,1794,496,22,652,0,10,0.70291 +194,3,1805,499,22,652,0,10,0.69678 +195,3,1816,503,22,652,0,10,0.68913 +196,3,1828,506,22,652,0,10,0.683 +197,3,1839,510,22,652,0,10,0.67688 +198,3,1850,513,22,652,0,10,0.67075 +199,3,1861,517,22,652,0,10,0.66309 +200,3,1872,520,22,652,0,10,0.65697 +1,4,1477,519,38,76,1,1,1 +2,4,1481,517,37,72,1,1,1 +3,4,1485,515,37,68,1,1,1 +4,4,1490,513,36,64,1,1,1 +5,4,1496,519,35,70,1,1,1 +6,4,1500,528,34,77,1,1,1 +7,4,1504,522,36,81,1,1,1 +8,4,1506,530,38,80,1,1,1 +9,4,1512,536,34,81,1,1,1 +10,4,1512,548,38,79,1,1,1 +11,4,1517,534,34,79,1,1,1 +12,4,1519,539,36,78,1,1,1 +13,4,1523,536,38,79,1,1,1 +14,4,1525,533,44,80,1,1,1 +15,4,1529,535,43,81,1,1,1 +16,4,1534,538,42,81,1,1,1 +17,4,1538,538,41,81,1,1,1 +18,4,1542,538,40,81,1,1,1 +19,4,1546,538,39,82,1,1,1 +20,4,1550,538,38,82,1,1,1 +21,4,1555,538,37,83,1,1,1 +22,4,1559,539,37,82,1,1,1 +23,4,1563,540,38,82,1,1,1 +24,4,1567,541,38,82,1,1,1 +25,4,1571,542,39,82,1,1,1 +26,4,1575,543,39,82,1,1,1 +27,4,1580,544,39,82,1,1,1 +28,4,1584,546,38,82,1,1,1 +29,4,1589,548,37,83,1,1,1 +30,4,1593,550,36,84,1,1,1 +31,4,1598,552,35,85,1,1,1 +32,4,1607,549,34,85,1,1,1 +33,4,1617,546,33,86,1,1,1 +34,4,1621,544,33,87,1,1,1 +35,4,1625,543,33,87,1,1,1 +36,4,1629,541,33,88,1,1,1 +37,4,1633,540,33,88,1,1,1 +38,4,1634,540,35,88,1,1,1 +39,4,1636,541,37,88,1,1,1 +40,4,1637,541,39,89,1,1,1 +41,4,1639,542,41,89,1,1,1 +42,4,1643,542,41,90,1,1,1 +43,4,1648,543,41,90,1,1,1 +44,4,1652,544,42,90,1,1,1 +45,4,1657,545,42,91,1,1,1 +46,4,1662,545,41,92,1,1,1 +47,4,1666,546,42,92,1,1,1 +48,4,1671,547,42,92,1,1,1 +49,4,1676,548,42,93,1,1,1 +50,4,1691,550,33,94,1,1,1 +51,4,1686,549,42,93,1,1,1 +52,4,1690,548,42,94,1,1,1 +53,4,1694,548,43,94,1,1,1 +54,4,1698,548,43,94,1,1,1 +55,4,1702,547,44,95,1,1,1 +56,4,1706,547,44,95,1,1,1 +57,4,1710,547,45,95,1,1,1 +58,4,1714,546,45,96,1,1,1 +59,4,1718,546,46,96,1,1,1 +60,4,1722,546,46,96,1,1,1 +61,4,1727,546,46,96,1,1,1 +62,4,1734,545,43,97,1,1,1 +63,4,1741,545,41,97,1,1,1 +64,4,1748,545,38,97,1,1,1 +65,4,1755,545,36,98,1,1,1 +66,4,1756,546,38,98,1,1,1 +67,4,1758,547,40,98,1,1,1 +68,4,1759,548,43,98,1,1,1 +69,4,1761,549,44,98,1,1,1 +70,4,1762,550,47,98,1,1,1 +71,4,1764,551,49,99,1,1,1 +72,4,1774,552,43,99,1,1,1 +73,4,1785,553,37,100,1,1,1 +74,4,1783,553,38,100,1,1,1 +75,4,1782,553,39,100,1,1,1 +76,4,1781,553,40,100,1,1,1 +77,4,1780,554,41,100,1,1,1 +78,4,1778,554,43,100,1,1,1 +79,4,1777,554,44,100,1,1,1 +80,4,1776,554,45,100,1,1,1 +81,4,1775,555,46,100,1,1,1 +82,4,1775,555,46,100,1,1,1 +83,4,1775,555,46,101,1,1,1 +84,4,1775,556,47,101,1,1,1 +85,4,1775,556,47,101,1,1,1 +86,4,1775,557,48,101,1,1,1 +87,4,1775,557,48,102,1,1,1 +88,4,1775,557,48,102,1,1,1 +89,4,1775,558,49,102,1,1,1 +90,4,1775,558,49,103,1,1,1 +91,4,1775,559,50,103,1,1,1 +92,4,1789,560,38,105,1,1,1 +93,4,1787,560,38,105,1,1,1 +94,4,1785,561,39,105,1,1,1 +95,4,1783,562,40,105,1,1,1 +96,4,1781,563,41,105,1,1,1 +97,4,1779,563,42,106,1,1,1 +98,4,1777,564,43,106,1,1,0.94647 +99,4,1775,565,44,106,1,1,0.88224 +100,4,1773,566,45,106,1,1,0.82365 +101,4,1771,567,46,106,1,1,0.76954 +102,4,1770,566,45,107,1,1,0.72222 +103,4,1769,566,45,107,1,1,0.68478 +104,4,1768,566,45,107,1,1,0.65056 +105,4,1767,566,45,107,1,1,0.61957 +106,4,1766,566,44,107,1,1,0.57202 +107,4,1765,566,44,107,1,1,0.53827 +108,4,1764,566,44,107,1,1,0.5463 +109,4,1763,566,44,107,1,1,0.56481 +110,4,1763,566,43,108,1,1,0.57798 +111,4,1760,566,46,107,1,1,0.60185 +112,4,1758,566,49,107,1,1,0.61111 +113,4,1756,566,50,105,1,1,0.63208 +114,4,1754,566,51,103,1,1,0.65385 +115,4,1751,566,53,101,1,1,0.67647 +116,4,1750,566,53,101,1,1,0.68627 +117,4,1745,566,54,101,1,1,0.70713 +118,4,1746,566,55,101,1,1,0.72164 +119,4,1743,566,58,110,1,1,0.70988 +120,4,1741,565,57,110,1,1,0.75396 +121,4,1739,565,56,110,1,1,0.7958 +122,4,1737,564,55,111,1,1,0.83163 +123,4,1735,564,54,111,1,1,0.86916 +124,4,1733,564,53,111,1,1,0.90575 +125,4,1730,563,54,112,1,1,0.93693 +126,4,1728,562,54,112,1,1,0.96653 +127,4,1726,562,54,112,1,1,0.98842 +128,4,1724,562,52,112,1,1,1 +129,4,1722,563,54,113,1,1,1 +130,4,1720,561,58,111,1,1,1 +131,4,1714,561,62,111,1,1,1 +132,4,1711,561,62,111,1,1,1 +133,4,1709,561,62,112,1,1,1 +134,4,1707,561,62,112,1,1,1 +135,4,1705,561,62,113,1,1,1 +136,4,1702,561,62,113,1,1,1 +137,4,1700,561,61,113,1,1,1 +138,4,1699,561,61,114,1,1,1 +139,4,1694,562,62,114,1,1,1 +140,4,1693,560,61,114,1,1,1 +141,4,1693,558,59,114,1,1,1 +142,4,1692,557,58,120,1,1,1 +143,4,1690,558,57,120,1,1,1 +144,4,1689,560,55,120,1,1,1 +145,4,1688,561,53,121,1,1,1 +146,4,1687,563,51,120,1,1,1 +147,4,1686,564,49,121,1,1,1 +148,4,1685,566,47,121,1,1,1 +149,4,1684,568,45,121,1,1,1 +150,4,1680,566,45,121,1,1,0.94654 +151,4,1676,564,45,122,1,1,0.88689 +152,4,1672,563,46,121,1,1,0.84374 +153,4,1668,561,46,122,1,1,0.7945 +154,4,1665,560,46,121,1,1,0.75462 +155,4,1661,558,46,122,1,1,0.68967 +156,4,1657,556,46,122,1,1,0.63155 +157,4,1653,555,47,122,1,1,0.55589 +158,4,1649,553,47,122,1,1,0.44157 +159,4,1646,552,47,122,1,1,0.37398 +160,4,1642,551,47,122,1,1,0.28557 +161,4,1638,551,48,122,1,1,0.223 +162,4,1635,551,47,122,1,1,0.21494 +163,4,1631,550,48,123,1,1,0.21198 +164,4,1628,550,47,123,1,1,0.20413 +165,4,1624,550,48,123,1,1,0.19816 +166,4,1620,549,48,124,1,1,0.192 +167,4,1617,549,48,124,1,1,0.2209 +168,4,1613,549,48,124,1,1,0.24833 +169,4,1610,549,48,124,1,1,0.27298 +170,4,1610,549,48,124,1,1,0.27788 +171,4,1610,550,48,124,1,1,0.288 +172,4,1610,550,49,125,1,1,0.29222 +173,4,1611,551,48,124,1,1,0.30155 +174,4,1611,551,49,125,1,1,0.32952 +175,4,1611,552,49,125,1,1,0.36222 +176,4,1612,552,48,125,1,1,0.37836 +177,4,1612,553,49,125,1,1,0.41714 +178,4,1612,553,49,126,1,1,0.45433 +179,4,1613,554,49,126,1,1,0.47764 +180,4,1612,554,50,126,1,1,0.52447 +181,4,1612,554,50,126,1,1,0.5677 +182,4,1612,554,50,126,1,1,0.66559 +183,4,1612,554,50,127,1,1,0.77099 +184,4,1612,554,50,127,1,1,0.87561 +185,4,1612,554,50,127,1,1,1 +186,4,1612,554,50,128,1,1,1 +187,4,1612,554,50,128,1,1,1 +188,4,1612,554,50,128,1,1,1 +189,4,1612,554,50,129,1,1,1 +190,4,1607,553,55,129,1,1,1 +191,4,1602,552,61,129,1,1,1 +192,4,1598,552,66,129,1,1,1 +193,4,1599,551,65,129,1,1,1 +194,4,1600,551,65,129,1,1,1 +195,4,1603,553,63,129,1,1,1 +196,4,1606,555,61,130,1,1,1 +197,4,1607,553,61,129,1,1,1 +198,4,1609,551,61,129,1,1,1 +199,4,1609,549,65,130,1,1,1 +200,4,1611,549,62,130,1,1,1 +201,4,1612,548,61,130,1,1,1 +202,4,1617,547,61,133,1,1,1 +203,4,1617,547,61,134,1,1,1 +204,4,1620,545,60,134,1,1,1 +205,4,1621,548,65,131,1,1,1 +206,4,1624,549,65,130,1,1,1 +207,4,1629,551,57,133,1,1,1 +208,4,1630,553,64,133,1,1,1 +209,4,1631,555,66,133,1,1,1 +210,4,1633,555,69,133,1,1,1 +211,4,1639,555,66,134,1,1,1 +212,4,1643,555,66,134,1,1,1 +213,4,1644,555,69,137,1,1,1 +214,4,1653,555,66,137,1,1,1 +215,4,1654,556,74,138,1,1,1 +216,4,1661,556,73,139,1,1,1 +217,4,1665,556,77,135,1,1,1 +218,4,1674,556,72,138,1,1,1 +219,4,1678,557,73,138,1,1,1 +220,4,1685,555,72,139,1,1,1 +221,4,1692,553,71,140,1,1,1 +222,4,1699,551,70,141,1,1,1 +223,4,1707,549,69,145,1,1,1 +224,4,1712,547,69,145,1,1,1 +225,4,1719,545,69,145,1,1,1 +226,4,1724,544,69,143,1,1,1 +227,4,1737,544,65,147,1,1,1 +228,4,1743,544,66,146,1,1,1 +229,4,1749,546,69,146,1,1,1 +230,4,1758,546,68,146,1,1,1 +231,4,1767,546,65,150,1,1,1 +232,4,1774,547,68,149,1,1,1 +233,4,1779,546,72,150,1,1,1 +234,4,1791,545,73,149,1,1,1 +235,4,1800,542,73,150,1,1,1 +236,4,1809,539,77,150,1,1,1 +237,4,1823,537,70,153,1,1,1 +238,4,1837,535,69,154,1,1,1 +239,4,1845,533,73,157,1,1,1 +240,4,1857,533,70,157,1,1,0.90141 +241,4,1871,534,65,158,1,1,0.75758 +242,4,1882,531,66,158,1,1,0.58209 +243,4,1897,528,65,159,1,1,0.36364 +1,5,1521,568,52,109,1,1,1 +2,5,1527,561,55,118,1,1,1 +3,5,1538,555,55,118,1,1,1 +4,5,1541,560,55,118,1,1,1 +5,5,1547,567,55,120,1,1,1 +6,5,1555,576,55,124,1,1,1 +7,5,1559,572,54,122,1,1,1 +8,5,1567,580,55,125,1,1,1 +9,5,1575,589,56,127,1,1,1 +10,5,1581,602,52,127,1,1,1 +11,5,1590,583,55,132,1,1,1 +12,5,1594,589,55,133,1,1,1 +13,5,1604,592,56,135,1,1,1 +14,5,1610,583,55,138,1,1,1 +15,5,1618,585,55,140,1,1,1 +16,5,1627,588,55,141,1,1,1 +17,5,1635,588,55,142,1,1,1 +18,5,1643,588,55,143,1,1,1 +19,5,1652,588,55,145,1,1,1 +20,5,1659,590,56,145,1,1,1 +21,5,1667,592,57,146,1,1,1 +22,5,1674,594,59,150,1,1,1 +23,5,1682,596,61,154,1,1,1 +24,5,1686,593,61,156,1,1,1 +25,5,1694,598,61,158,1,1,1 +26,5,1702,603,62,160,1,1,1 +27,5,1710,608,62,162,1,1,1 +28,5,1718,614,63,163,1,1,1 +29,5,1727,622,64,162,1,1,1 +30,5,1735,619,64,163,1,1,1 +31,5,1744,623,64,165,1,1,1 +32,5,1754,627,66,166,1,1,1 +33,5,1765,613,67,169,1,1,1 +34,5,1774,615,69,169,1,1,1 +35,5,1783,617,72,170,1,1,1 +36,5,1793,619,73,170,1,1,1 +37,5,1802,621,76,171,1,1,1 +38,5,1811,623,78,171,1,1,1 +39,5,1821,626,80,171,1,1,1 +40,5,1830,628,80,176,1,1,1 +41,5,1840,631,79,181,1,1,1 +42,5,1857,636,79,181,1,1,0.8 +43,5,1866,636,79,181,1,1,0.6875 +44,5,1879,635,76,187,1,1,0.54545 +45,5,1892,657,76,175,1,1,0.37662 +1,6,1609,558,57,118,1,1,1 +2,6,1615,560,57,114,1,1,1 +3,6,1626,546,58,127,1,1,1 +4,6,1633,553,58,125,1,1,1 +5,6,1640,563,61,130,1,1,1 +6,6,1647,574,61,130,1,1,1 +7,6,1656,574,60,124,1,1,1 +8,6,1663,581,61,132,1,1,1 +9,6,1666,588,64,126,1,1,1 +10,6,1669,600,69,132,1,1,1 +11,6,1677,585,67,135,1,1,1 +12,6,1686,588,66,136,1,1,1 +13,6,1695,591,65,138,1,1,1 +14,6,1703,583,62,140,1,1,1 +15,6,1714,585,61,142,1,1,1 +16,6,1720,587,60,145,1,1,1 +17,6,1728,588,60,144,1,1,1 +18,6,1736,590,60,143,1,1,1 +19,6,1744,591,60,143,1,1,1 +20,6,1752,593,61,142,1,1,1 +21,6,1760,597,63,142,1,1,1 +22,6,1768,597,66,146,1,1,1 +23,6,1776,597,69,150,1,1,1 +24,6,1785,598,71,153,1,1,1 +25,6,1793,598,74,157,1,1,1 +26,6,1802,599,76,160,1,1,1 +27,6,1809,603,76,162,1,1,1 +28,6,1819,609,78,164,1,1,1 +29,6,1830,616,79,165,1,1,1 +30,6,1839,620,77,168,1,1,1 +31,6,1849,625,74,170,1,1,0.96 +32,6,1861,616,75,183,1,1,0.78947 +33,6,1871,619,74,176,1,1,0.66667 +34,6,1881,622,73,169,1,1,0.54054 +35,6,1891,625,74,164,1,1,0.4 +36,6,1901,628,76,160,1,1,0.25974 +1,7,1445,511,33,78,1,1,0.94713 +2,7,1448,504,33,79,1,1,0.97537 +3,7,1451,500,34,78,1,1,0.97685 +4,7,1456,501,31,79,1,1,1 +5,7,1461,509,30,80,1,1,1 +6,7,1466,518,30,80,1,1,1 +7,7,1466,510,31,80,1,1,1 +8,7,1469,515,31,81,1,1,1 +9,7,1473,521,30,82,1,1,1 +10,7,1477,532,31,84,1,1,1 +11,7,1479,519,28,85,1,1,1 +12,7,1480,522,28,84,1,1,1 +13,7,1486,519,26,84,1,1,1 +14,7,1488,516,28,81,1,1,1 +15,7,1491,519,28,81,1,1,1 +16,7,1494,523,28,81,1,1,1 +17,7,1494,520,28,81,1,1,1 +18,7,1500,519,31,82,1,1,1 +19,7,1503,519,31,82,1,1,1 +20,7,1507,519,31,82,1,1,1 +21,7,1511,520,31,81,1,1,1 +22,7,1515,520,31,81,1,1,1 +23,7,1519,521,31,81,1,1,1 +24,7,1522,522,31,82,1,1,1 +25,7,1526,524,31,82,1,1,1 +26,7,1529,526,31,82,1,1,1 +27,7,1533,528,31,82,1,1,1 +28,7,1535,532,32,82,1,1,1 +29,7,1538,537,33,81,1,1,1 +30,7,1541,539,32,81,1,1,1 +31,7,1544,541,32,81,1,1,1 +32,7,1548,543,31,82,1,1,1 +33,7,1554,531,30,82,1,1,1 +34,7,1558,528,30,82,1,1,1 +35,7,1562,525,30,83,1,1,1 +36,7,1566,522,31,84,1,1,1 +37,7,1570,519,31,85,1,1,1 +38,7,1575,517,31,85,1,1,1 +39,7,1579,518,32,86,1,1,1 +40,7,1584,519,32,87,1,1,1 +41,7,1589,520,33,88,1,1,1 +42,7,1594,521,33,89,1,1,1 +43,7,1599,522,33,90,1,1,1 +44,7,1604,524,34,90,1,1,1 +45,7,1608,526,34,90,1,1,1 +46,7,1612,528,34,90,1,1,1 +47,7,1617,530,34,90,1,1,1 +48,7,1621,532,34,90,1,1,1 +49,7,1626,534,34,91,1,1,1 +50,7,1631,534,34,91,1,1,1 +51,7,1636,534,34,91,1,1,1 +52,7,1640,533,34,91,1,1,1 +53,7,1644,533,35,91,1,1,1 +54,7,1648,532,36,91,1,1,1 +55,7,1652,532,37,91,1,1,1 +56,7,1656,532,37,91,1,1,1 +57,7,1660,531,38,91,1,1,1 +58,7,1664,531,39,91,1,1,1 +59,7,1668,531,40,91,1,1,1 +60,7,1671,530,39,94,1,1,1 +61,7,1675,530,39,94,1,1,1 +62,7,1679,530,39,95,1,1,1 +63,7,1683,530,39,96,1,1,1 +64,7,1687,530,39,96,1,1,1 +65,7,1691,530,39,97,1,1,1 +66,7,1695,530,39,98,1,1,1 +67,7,1700,531,38,98,1,1,1 +68,7,1701,530,38,99,1,1,1 +69,7,1702,530,38,99,1,1,1 +70,7,1703,529,38,100,1,1,1 +71,7,1704,529,38,100,1,1,1 +72,7,1706,529,37,100,1,1,1 +73,7,1707,529,37,100,1,1,1 +74,7,1708,529,37,100,1,1,1 +75,7,1709,530,37,100,1,1,1 +76,7,1710,530,37,100,1,1,1 +77,7,1711,530,37,100,1,1,0.98567 +78,7,1712,531,37,100,1,1,0.95701 +79,7,1713,531,37,100,1,1,0.91402 +80,7,1714,531,37,100,1,1,0.88744 +81,7,1715,532,37,100,1,1,0.8567 +82,7,1713,532,37,100,1,1,0.77488 +83,7,1712,532,37,100,1,1,0.7186 +84,7,1711,533,37,100,1,1,0.64825 +85,7,1710,533,37,100,1,1,0.60709 +86,7,1709,533,37,100,1,1,0.57009 +87,7,1708,534,37,100,1,1,0.52762 +88,7,1707,534,37,100,1,1,0.54455 +89,7,1706,535,37,100,1,1,0.55446 +90,7,1704,536,37,100,1,1,0.56436 +91,7,1702,538,38,100,1,1,0.57426 +92,7,1700,539,38,101,1,1,0.57843 +93,7,1699,541,38,101,1,1,0.57843 +94,7,1697,542,38,102,1,1,0.58252 +95,7,1695,544,39,102,1,1,0.55388 +96,7,1693,546,39,101,1,1,0.55074 +97,7,1692,547,39,102,1,1,0.57888 +98,7,1690,549,39,102,1,1,0.61505 +99,7,1688,550,40,103,1,1,0.6454 +100,7,1686,552,40,103,1,1,0.68293 +101,7,1685,554,40,103,1,1,0.72702 +102,7,1683,552,38,105,1,1,0.77092 +103,7,1682,550,36,107,1,1,0.81081 +104,7,1681,548,34,109,1,1,0.84 +105,7,1678,548,34,109,1,1,0.81299 +106,7,1675,548,34,109,1,1,0.77299 +107,7,1672,548,35,110,1,1,0.75826 +108,7,1669,548,35,110,1,1,0.72948 +109,7,1666,548,35,110,1,1,0.69419 +110,7,1664,548,35,111,1,1,0.67857 +111,7,1661,548,35,111,1,1,0.60417 +112,7,1658,549,36,111,1,1,0.56757 +113,7,1655,549,36,111,1,1,0.50193 +114,7,1652,549,36,111,1,1,0.43243 +115,7,1650,549,36,112,1,1,0.41976 +116,7,1647,549,36,112,1,1,0.38866 +117,7,1644,549,36,112,1,1,0.34202 +118,7,1641,549,37,113,1,1,0.31994 +119,7,1638,549,37,113,1,1,0.33518 +120,7,1636,550,37,113,1,1,0.32479 +121,7,1632,549,37,114,1,1,0.31716 +122,7,1628,549,38,114,1,1,0.32375 +123,7,1625,549,37,114,1,1,0.31236 +124,7,1621,549,38,114,1,1,0.31394 +125,7,1617,549,39,114,1,1,0.315 +126,7,1614,549,38,114,1,1,0.2903 +127,7,1610,549,39,115,1,1,0.33405 +128,7,1607,549,38,115,1,1,0.37003 +129,7,1603,549,39,115,1,1,0.3944 +130,7,1599,549,40,115,1,1,0.45164 +131,7,1596,548,39,116,1,1,0.51581 +132,7,1592,548,40,116,1,1,0.58203 +133,7,1588,548,41,116,1,1,0.6337 +134,7,1585,548,40,117,1,1,0.65957 +135,7,1581,548,41,117,1,1,0.69229 +136,7,1578,548,40,117,1,1,0.71807 +137,7,1574,548,41,117,1,1,0.75847 +138,7,1570,548,42,117,1,1,0.78557 +139,7,1567,548,41,117,1,1,0.81638 +140,7,1563,548,42,117,1,1,0.84391 +141,7,1560,548,42,118,1,1,0.88216 +142,7,1556,548,42,118,1,1,0.92027 +143,7,1552,548,43,118,1,1,0.96047 +144,7,1549,548,42,119,1,1,1 +145,7,1545,548,43,119,1,1,1 +146,7,1542,549,43,119,1,1,1 +147,7,1534,550,47,118,1,1,1 +148,7,1526,552,51,117,1,1,1 +149,7,1519,554,54,116,1,1,1 +150,7,1513,556,53,113,1,1,1 +151,7,1509,554,51,114,1,1,1 +152,7,1505,552,50,116,1,1,1 +153,7,1501,551,49,117,1,1,1 +154,7,1497,549,47,118,1,1,1 +155,7,1493,547,46,120,1,1,1 +156,7,1489,546,45,121,1,1,1 +157,7,1483,546,45,121,1,1,1 +158,7,1478,546,45,122,1,1,1 +159,7,1472,547,45,121,1,1,1 +160,7,1467,547,45,122,1,1,1 +161,7,1461,547,45,122,1,1,1 +162,7,1456,548,45,122,1,1,1 +163,7,1450,548,44,120,1,1,1 +164,7,1445,548,44,119,1,1,1 +165,7,1441,548,44,119,1,1,1 +166,7,1437,547,43,119,1,1,1 +167,7,1434,546,42,119,1,1,1 +168,7,1431,545,40,119,1,1,1 +169,7,1428,544,39,120,1,1,1 +170,7,1423,543,40,121,1,1,1 +171,7,1418,542,41,122,1,1,1 +172,7,1413,541,42,123,1,1,1 +173,7,1408,541,44,123,1,1,1 +174,7,1399,542,48,121,1,1,1 +175,7,1391,544,51,118,1,1,1 +176,7,1388,548,51,114,1,1,1 +177,7,1386,547,51,116,1,1,1 +178,7,1383,547,51,116,1,1,1 +179,7,1381,547,50,117,1,1,1 +180,7,1379,547,50,118,1,1,1 +181,7,1377,547,49,119,1,1,1 +182,7,1374,547,49,120,1,1,1 +183,7,1372,547,49,121,1,1,1 +184,7,1370,547,48,122,1,1,1 +185,7,1368,548,48,122,1,1,1 +186,7,1365,547,49,122,1,1,1 +187,7,1363,547,49,122,1,1,1 +188,7,1361,547,49,122,1,1,1 +189,7,1358,546,50,122,1,1,1 +190,7,1356,546,50,122,1,1,1 +191,7,1354,546,50,122,1,1,1 +192,7,1352,546,50,122,1,1,1 +193,7,1349,547,50,122,1,1,1 +194,7,1347,548,50,123,1,1,1 +195,7,1346,547,49,124,1,1,1 +196,7,1345,546,49,125,1,1,1 +197,7,1344,545,48,126,1,1,1 +198,7,1343,545,48,126,1,1,1 +199,7,1342,544,47,127,1,1,1 +200,7,1341,543,47,128,1,1,1 +201,7,1341,543,46,129,1,1,1 +202,7,1340,547,46,126,1,1,1 +203,7,1338,546,46,131,1,1,1 +204,7,1337,547,47,130,1,1,1 +205,7,1336,548,48,129,1,1,1 +206,7,1335,550,50,128,1,1,1 +207,7,1334,550,50,128,1,1,1 +208,7,1333,550,50,129,1,1,1 +209,7,1333,550,50,130,1,1,1 +210,7,1332,551,50,129,1,1,1 +211,7,1332,551,50,130,1,1,1 +212,7,1331,551,50,131,1,1,1 +213,7,1331,552,50,131,1,1,1 +214,7,1332,552,50,131,1,1,1 +215,7,1334,552,49,132,1,1,1 +216,7,1335,553,50,132,1,1,1 +217,7,1337,553,49,133,1,1,1 +218,7,1339,554,49,133,1,1,1 +219,7,1340,553,49,134,1,1,1 +220,7,1341,552,49,135,1,1,1 +221,7,1342,551,50,136,1,1,1 +222,7,1344,551,50,136,1,1,1 +223,7,1346,551,50,137,1,1,1 +224,7,1348,552,51,137,1,1,1 +225,7,1350,552,51,138,1,1,1 +226,7,1352,553,51,137,1,1,1 +227,7,1355,553,51,138,1,1,1 +228,7,1357,553,51,139,1,1,1 +229,7,1359,554,51,139,1,1,1 +230,7,1361,554,52,139,1,1,1 +231,7,1363,555,52,139,1,1,1 +232,7,1365,555,52,140,1,1,1 +233,7,1368,556,52,140,1,1,1 +234,7,1370,552,52,140,1,1,1 +235,7,1373,550,52,142,1,1,1 +236,7,1376,549,53,144,1,1,1 +237,7,1379,548,52,143,1,1,1 +238,7,1383,548,50,141,1,1,1 +239,7,1387,548,49,140,1,1,1 +240,7,1392,548,49,141,1,1,1 +241,7,1397,548,50,142,1,1,1 +242,7,1402,548,50,143,1,1,1 +243,7,1407,548,51,145,1,1,1 +244,7,1413,549,47,147,1,1,1 +245,7,1419,550,44,150,1,1,1 +246,7,1424,550,46,150,1,1,1 +247,7,1430,550,47,150,1,1,1 +248,7,1436,550,45,152,1,1,1 +249,7,1442,551,44,153,1,1,1 +250,7,1448,547,46,157,1,1,1 +251,7,1454,543,48,161,1,1,1 +252,7,1463,540,49,161,1,1,1 +253,7,1470,542,48,158,1,1,1 +254,7,1475,542,49,158,1,1,1 +255,7,1481,542,49,159,1,1,0.9235 +256,7,1487,543,49,159,1,1,0.9195 +257,7,1498,544,48,153,1,1,0.92208 +258,7,1501,542,57,155,1,1,0.92308 +259,7,1501,540,66,158,1,1,0.92453 +260,7,1505,539,72,160,1,1,0.90062 +261,7,1508,538,80,162,1,1,0.86162 +262,7,1517,539,81,163,1,1,0.84228 +263,7,1528,544,82,163,1,1,0.80547 +264,7,1535,545,85,163,1,1,0.6947 +265,7,1542,546,88,163,1,1,0.59633 +266,7,1556,549,88,163,1,1,0.56837 +267,7,1569,551,82,163,1,1,0.52336 +268,7,1574,546,81,169,1,1,0.3538 +269,7,1571,541,96,178,1,1,0.36117 +270,7,1579,543,97,178,1,1,0.2807 +271,7,1596,542,81,178,1,1,0.13067 +272,7,1615,541,61,177,1,1,0.16809 +273,7,1629,541,61,177,1,1,0.18104 +274,7,1641,544,61,177,1,1,0.19319 +275,7,1647,545,62,177,1,1,0.25504 +276,7,1653,546,64,178,1,1,0.32858 +277,7,1662,549,64,178,1,1,0.41281 +278,7,1676,544,66,177,1,1,0.44097 +279,7,1684,546,64,187,1,1,0.50679 +280,7,1706,549,64,187,1,1,0.45205 +281,7,1717,546,64,187,1,1,0.52864 +282,7,1724,548,64,187,1,1,0.62152 +283,7,1735,547,67,186,1,1,0.7452 +284,7,1749,546,73,187,1,1,0.80326 +285,7,1763,546,73,187,1,1,0.89822 +286,7,1774,545,73,193,1,1,1 +287,7,1790,542,73,199,1,1,1 +288,7,1798,543,82,199,1,1,1 +289,7,1817,542,82,202,1,1,1 +290,7,1843,543,68,201,1,1,1 +291,7,1849,542,77,201,1,1,0.92308 +292,7,1856,541,85,201,1,1,0.75581 +293,7,1872,540,85,201,1,1,0.56977 +1,8,-13,662,64,224,1,1,0.78462 +2,8,-21,652,64,224,1,1,0.66154 +1,9,122,711,49,97,1,1,1 +2,9,111,698,49,97,1,1,1 +3,9,105,726,49,97,1,1,1 +4,9,94,724,49,97,1,1,1 +5,9,82,717,38,104,1,1,1 +6,9,66,734,42,105,1,1,1 +7,9,50,740,45,106,1,1,1 +8,9,35,747,48,107,1,1,1 +9,9,17,746,48,107,1,1,1 +10,9,-1,732,48,107,1,1,0.95918 +11,9,-7,757,48,107,1,1,0.83673 +1,10,195,575,46,154,1,1,1 +2,10,188,563,46,154,1,1,1 +3,10,178,584,46,154,1,1,1 +4,10,173,581,46,154,1,1,1 +5,10,165,581,46,154,1,1,1 +6,10,153,590,46,154,1,1,1 +7,10,141,585,46,154,1,1,1 +8,10,135,597,46,154,1,1,1 +9,10,122,594,46,154,1,1,1 +10,10,108,579,47,158,1,1,1 +11,10,99,586,48,162,1,1,1 +12,10,91,594,49,166,1,1,1 +13,10,74,570,50,170,1,1,1 +14,10,60,593,51,162,1,1,1 +15,10,43,588,55,172,1,1,1 +16,10,27,584,59,181,1,1,1 +17,10,10,592,65,178,1,1,1 +18,10,-1,595,65,178,1,1,0.9697 +19,10,-12,598,65,178,1,1,0.80303 +20,10,-25,602,65,178,1,1,0.60606 +1,11,273,585,46,148,1,1,0.76596 +2,11,266,574,46,148,1,1,0.78723 +3,11,258,592,46,148,1,1,0.65957 +4,11,257,592,46,148,1,1,0.80851 +5,11,247,586,46,148,1,1,0.76596 +6,11,242,598,46,148,1,1,0.78723 +7,11,232,593,45,157,1,1,0.76087 +8,11,222,602,45,157,1,1,0.73913 +9,11,214,602,45,157,1,1,0.80435 +10,11,201,593,49,156,1,1,0.78 +11,11,188,608,57,155,1,1,0.7069 +12,11,172,607,63,154,1,1,0.6875 +13,11,161,590,62,157,1,1,0.68254 +14,11,154,606,62,157,1,1,0.68254 +15,11,140,603,62,157,1,1,0.68254 +16,11,131,601,61,164,1,1,0.67742 +17,11,120,605,61,164,1,1,0.67742 +18,11,107,605,60,170,1,1,0.67213 +19,11,97,607,60,170,1,1,0.67213 +20,11,82,610,60,170,1,1,0.67213 +21,11,70,610,60,170,1,1,0.67213 +22,11,59,613,60,170,1,1,0.67213 +23,11,49,617,59,182,1,1,0.66667 +24,11,39,629,59,182,1,1,0.65 +25,11,25,631,59,182,1,1,0.63333 +26,11,10,628,66,200,1,1,0.64179 +27,11,0,637,66,200,1,1,0.59701 +28,11,-12,642,66,200,1,1,0.80597 +29,11,-21,640,66,200,1,1,0.67164 +1,12,264,495,19,297,0,10,1 +2,12,256,485,19,297,0,10,1 +3,12,254,501,19,297,0,10,1 +4,12,246,499,19,297,0,10,1 +5,12,238,498,19,297,0,10,1 +6,12,232,510,19,297,0,10,1 +7,12,223,517,19,297,0,10,1 +8,12,214,524,19,297,0,10,1 +9,12,203,521,19,297,0,10,1 +10,12,192,518,19,297,0,10,1 +11,12,185,536,19,297,0,10,1 +12,12,174,532,19,297,0,10,1 +13,12,164,528,19,297,0,10,1 +14,12,154,533,19,297,0,10,1 +15,12,144,539,19,297,0,10,1 +16,12,134,543,19,297,0,10,1 +17,12,124,548,19,297,0,10,1 +18,12,112,552,19,297,0,10,1 +19,12,101,557,19,297,0,10,1 +20,12,89,565,19,297,0,10,1 +21,12,77,573,19,297,0,10,1 +22,12,65,578,19,297,0,10,1 +23,12,54,584,19,297,0,10,1 +24,12,41,591,20,297,0,10,1 +25,12,28,599,21,296,0,10,1 +26,12,15,607,23,296,0,10,1 +27,12,2,618,25,294,0,10,1 +1,13,504,549,34,93,1,1,1 +2,13,502,537,34,93,1,1,1 +3,13,501,550,34,93,1,1,1 +4,13,501,546,34,93,1,1,1 +5,13,498,543,34,93,1,1,1 +6,13,498,556,34,93,1,1,1 +7,13,501,547,34,93,1,1,1 +8,13,495,555,34,93,1,1,1 +9,13,492,552,34,93,1,1,1 +10,13,489,546,34,93,1,1,1 +11,13,489,555,34,93,1,1,1 +12,13,488,556,34,93,1,1,1 +13,13,486,541,34,93,1,1,1 +14,13,482,549,34,93,1,1,1 +15,13,481,549,34,93,1,1,1 +16,13,480,549,34,93,1,1,1 +17,13,479,550,34,93,1,1,1 +18,13,476,549,34,94,1,1,1 +19,13,473,548,35,95,1,1,1 +20,13,471,548,35,96,1,1,1 +21,13,468,549,35,97,1,1,1 +22,13,466,550,35,98,1,1,1 +23,13,464,552,35,98,1,1,1 +24,13,461,553,36,99,1,1,1 +25,13,459,555,35,100,1,1,1 +26,13,457,556,35,101,1,1,1 +27,13,454,558,36,101,1,1,1 +28,13,452,559,36,102,1,1,1 +29,13,450,561,36,103,1,1,1 +30,13,450,570,36,104,1,1,1 +31,13,445,581,36,105,1,1,1 +32,13,442,573,36,106,1,1,1 +33,13,440,564,36,107,1,1,1 +34,13,437,570,36,108,1,1,1 +35,13,438,559,36,109,1,1,1 +36,13,435,557,36,110,1,1,1 +37,13,433,555,36,111,1,1,1 +38,13,431,553,36,112,1,1,1 +39,13,429,551,36,113,1,1,1 +40,13,427,550,36,113,1,1,1 +41,13,424,550,37,113,1,1,1 +42,13,422,551,37,113,1,1,1 +43,13,420,552,37,113,1,1,1 +44,13,418,553,37,113,1,1,1 +45,13,415,554,38,113,1,1,1 +46,13,413,555,38,113,1,1,1 +47,13,411,556,38,113,1,1,1 +48,13,409,557,38,113,1,1,1 +49,13,406,558,39,113,1,1,1 +50,13,404,559,39,113,1,1,1 +51,13,402,560,39,113,1,1,1 +52,13,400,561,39,113,1,1,1 +53,13,398,562,39,113,1,1,1 +54,13,393,561,40,113,1,1,1 +55,13,389,560,40,114,1,1,1 +56,13,385,559,41,115,1,1,1 +57,13,381,559,41,115,1,1,1 +58,13,377,558,41,115,1,1,1 +59,13,373,557,42,116,1,1,1 +60,13,369,556,42,117,1,1,1 +61,13,365,556,43,117,1,1,1 +62,13,365,552,43,118,1,1,1 +63,13,361,572,43,118,1,1,1 +64,13,357,556,43,118,1,1,1 +65,13,353,563,42,122,1,1,1 +66,13,354,568,44,121,1,1,1 +67,13,350,552,44,124,1,1,1 +68,13,345,560,44,127,1,1,1 +69,13,340,557,45,127,1,1,1 +70,13,336,555,46,126,1,1,1 +71,13,332,553,47,126,1,1,0.98031 +72,13,325,553,48,127,1,1,0.96269 +73,13,319,553,48,128,1,1,0.98054 +74,13,313,553,49,130,1,1,0.98076 +75,13,307,553,49,131,1,1,1 +76,13,301,553,50,133,1,1,1 +77,13,295,553,49,132,1,1,0.9809 +78,13,289,553,48,131,1,1,0.96135 +79,13,283,553,48,130,1,1,0.96136 +80,13,277,553,47,129,1,1,1 +81,13,272,554,46,128,1,1,1 +82,13,264,555,46,129,1,1,1 +83,13,256,556,47,130,1,1,1 +84,13,249,558,47,130,1,1,1 +85,13,242,560,47,130,1,1,1 +86,13,235,562,47,131,1,1,1 +87,13,228,564,47,132,1,1,1 +88,13,221,567,48,132,1,1,1 +89,13,214,568,49,133,1,1,1 +90,13,207,569,50,134,1,1,1 +91,13,201,571,50,134,1,1,1 +92,13,194,572,51,135,1,1,1 +93,13,187,573,52,136,1,1,1 +94,13,181,575,52,136,1,1,0.98196 +95,13,174,576,53,137,1,1,0.94726 +96,13,167,577,54,138,1,1,0.91498 +97,13,161,579,55,139,1,1,0.86429 +98,13,151,579,55,140,1,1,0.91578 +99,13,142,579,55,141,1,1,0.9326 +100,13,133,579,54,142,1,1,0.96592 +101,13,124,579,54,143,1,1,0.98295 +102,13,114,579,55,144,1,1,1 +103,13,105,579,54,145,1,1,1 +104,13,96,579,54,146,1,1,1 +105,13,87,580,54,146,1,1,1 +106,13,80,579,54,147,1,1,1 +107,13,73,578,54,148,1,1,1 +108,13,66,577,54,149,1,1,0.98315 +109,13,57,578,54,149,1,1,0.98291 +110,13,48,579,54,149,1,1,0.98279 +111,13,39,580,54,149,1,1,0.96533 +112,13,30,581,54,149,1,1,0.96533 +113,13,21,583,54,149,1,1,0.96509 +114,13,11,584,54,149,1,1,0.98255 +115,13,2,586,54,149,1,1,0.98242 +116,13,-7,588,54,149,1,1,0.83685 +117,13,-16,590,54,149,1,1,0.67309 +118,13,-25,591,54,149,1,1,0.50945 +1,14,543,548,31,95,1,1,1 +2,14,543,536,31,95,1,1,1 +3,14,543,548,31,95,1,1,1 +4,14,541,545,31,95,1,1,1 +5,14,540,542,31,95,1,1,1 +6,14,540,552,31,95,1,1,1 +7,14,538,553,31,95,1,1,1 +8,14,537,555,31,95,1,1,1 +9,14,535,552,31,95,1,1,1 +10,14,533,550,31,95,1,1,1 +11,14,532,553,31,95,1,1,1 +12,14,531,557,31,95,1,1,1 +13,14,530,545,31,95,1,1,1 +14,14,524,554,31,95,1,1,1 +15,14,522,554,33,94,1,1,1 +16,14,520,554,35,94,1,1,1 +17,14,519,554,36,94,1,1,1 +18,14,517,554,38,94,1,1,1 +19,14,516,554,39,94,1,1,1 +20,14,513,553,38,98,1,1,1 +21,14,511,554,38,98,1,1,1 +22,14,509,556,38,98,1,1,1 +23,14,507,558,38,98,1,1,1 +24,14,505,560,38,98,1,1,1 +25,14,504,563,38,98,1,1,1 +26,14,502,566,38,98,1,1,1 +27,14,501,569,38,98,1,1,1 +28,14,499,570,38,98,1,1,1 +29,14,497,572,38,98,1,1,1 +30,14,495,574,38,98,1,1,1 +31,14,492,589,38,98,1,1,1 +32,14,492,583,37,104,1,1,1 +33,14,488,568,36,108,1,1,1 +34,14,488,571,36,108,1,1,1 +35,14,485,559,35,114,1,1,1 +36,14,481,556,37,113,1,1,1 +37,14,478,553,39,113,1,1,1 +38,14,476,555,39,113,1,1,1 +39,14,476,549,39,113,1,1,1 +40,14,472,553,39,113,1,1,1 +41,14,470,553,39,113,1,1,1 +42,14,469,554,39,113,1,1,1 +43,14,467,555,39,113,1,1,1 +44,14,466,556,39,113,1,1,1 +45,14,463,557,40,113,1,1,1 +46,14,460,559,41,112,1,1,1 +47,14,457,560,42,112,1,1,1 +48,14,454,562,44,112,1,1,1 +49,14,451,564,39,113,1,1,1 +50,14,448,563,40,114,1,1,1 +51,14,445,563,41,115,1,1,1 +52,14,442,562,43,116,1,1,1 +53,14,439,562,44,117,1,1,1 +54,14,436,562,46,118,1,1,1 +55,14,433,561,46,119,1,1,1 +56,14,430,560,46,120,1,1,1 +57,14,428,559,45,121,1,1,1 +58,14,425,558,46,122,1,1,1 +59,14,423,557,45,123,1,1,1 +60,14,420,556,45,124,1,1,1 +61,14,418,556,45,124,1,1,1 +62,14,415,555,46,118,1,1,1 +63,14,412,572,46,118,1,1,1 +64,14,406,557,46,118,1,1,1 +65,14,405,564,46,118,1,1,1 +66,14,405,572,46,118,1,1,1 +67,14,399,557,46,119,1,1,1 +68,14,391,564,46,126,1,1,1 +69,14,387,562,46,125,1,1,1 +70,14,383,561,47,124,1,1,1 +71,14,379,560,48,123,1,1,1 +72,14,372,564,48,124,1,1,1 +73,14,367,559,48,125,1,1,1 +74,14,362,558,48,126,1,1,1 +75,14,357,558,49,127,1,1,1 +76,14,353,558,49,128,1,1,1 +77,14,344,559,49,129,1,1,1 +78,14,336,560,49,130,1,1,1 +79,14,330,560,50,130,1,1,1 +80,14,325,561,50,129,1,1,1 +81,14,319,562,51,128,1,1,1 +82,14,314,563,51,127,1,1,1 +83,14,308,563,50,128,1,1,1 +84,14,302,564,49,129,1,1,1 +85,14,296,565,48,129,1,1,1 +86,14,290,566,48,130,1,1,1 +87,14,284,567,47,130,1,1,1 +88,14,278,568,46,131,1,1,1 +89,14,273,569,45,132,1,1,1 +90,14,265,571,46,133,1,1,1 +91,14,257,573,47,134,1,1,1 +92,14,249,576,48,134,1,1,1 +93,14,241,578,50,135,1,1,1 +94,14,233,581,51,135,1,1,1 +95,14,225,583,52,136,1,1,1 +96,14,217,586,54,137,1,1,1 +97,14,209,586,55,138,1,1,1 +98,14,202,587,56,138,1,1,1 +99,14,194,587,57,139,1,1,1 +100,14,186,588,58,139,1,1,1 +101,14,178,588,60,140,1,1,1 +102,14,171,589,60,141,1,1,1 +103,14,163,589,62,142,1,1,1 +104,14,155,590,63,142,1,1,1 +105,14,148,591,64,143,1,1,1 +106,14,138,590,66,143,1,1,1 +107,14,129,589,67,144,1,1,1 +108,14,120,588,68,145,1,1,1 +109,14,111,587,69,146,1,1,1 +110,14,102,587,70,146,1,1,1 +111,14,92,587,68,147,1,1,1 +112,14,83,588,66,147,1,1,1 +113,14,74,589,63,147,1,1,1 +114,14,65,590,61,148,1,1,1 +115,14,56,591,61,149,1,1,1 +116,14,47,592,61,150,1,1,1 +117,14,38,593,61,151,1,1,1 +118,14,29,594,61,152,1,1,1 +119,14,18,594,61,154,1,1,1 +120,14,8,595,60,155,1,1,1 +121,14,-3,595,60,157,1,1,0.93443 +122,14,-13,596,60,159,1,1,0.77049 +123,14,-21,597,60,159,1,1,0.63934 +124,14,-29,599,60,159,1,1,0.5082 +1,15,652,528,27,70,1,1,1 +2,15,652,518,27,70,1,1,0.71429 +3,15,651,529,26,74,1,1,1 +4,15,651,526,25,73,1,1,1 +5,15,651,523,25,72,1,1,1 +6,15,652,537,26,69,1,1,0.82804 +7,15,650,529,25,70,1,1,1 +8,15,650,536,25,71,1,1,1 +9,15,649,534,25,72,1,1,1 +10,15,646,530,25,73,1,1,0.72557 +11,15,645,533,25,70,1,1,0.67281 +12,15,644,536,26,68,1,1,0.63714 +13,15,646,524,26,68,1,1,0.66989 +14,15,642,531,27,72,1,1,0.85714 +15,15,641,529,27,72,1,1,0.85714 +16,15,641,527,27,72,1,1,0.85714 +17,15,640,531,27,73,1,1,1 +18,15,639,531,27,73,1,1,1 +19,15,637,532,27,73,1,1,1 +20,15,635,532,27,74,1,1,1 +21,15,634,533,27,75,1,1,0.86278 +22,15,633,534,26,76,1,1,0.78932 +23,15,632,535,26,77,1,1,0.89744 +24,15,630,537,26,77,1,1,0.89744 +25,15,629,539,26,77,1,1,0.89744 +26,15,628,541,26,77,1,1,0.96534 +27,15,626,544,26,77,1,1,0.96439 +28,15,625,546,26,77,1,1,0.8547 +29,15,624,548,26,77,1,1,0.96439 +30,15,623,551,26,77,1,1,0.96391 +31,15,621,562,26,77,1,1,0.96486 +32,15,620,555,26,77,1,1,1 +33,15,619,549,26,77,1,1,1 +34,15,618,555,26,78,1,1,1 +35,15,616,552,27,78,1,1,1 +36,15,615,549,27,79,1,1,1 +37,15,614,546,27,80,1,1,1 +38,15,613,544,27,79,1,1,1 +39,15,612,541,27,80,1,1,1 +40,15,611,538,27,81,1,1,0.14286 +41,15,610,536,28,81,1,1,0.13793 +42,15,609,538,28,81,1,1,0.17241 +43,15,608,540,29,82,1,1,1 +44,15,606,540,30,83,1,1,1 +45,15,605,541,30,83,1,1,1 +46,15,604,542,30,84,1,1,1 +47,15,603,543,30,84,1,1,1 +48,15,602,544,31,85,1,1,1 +49,15,599,545,32,86,1,1,0.97109 +50,15,597,547,32,86,1,1,0.94148 +51,15,595,548,32,87,1,1,0.91322 +52,15,593,550,32,87,1,1,0.94215 +53,15,590,549,32,87,1,1,0.91632 +54,15,587,548,32,88,1,1,0.88832 +55,15,584,547,33,88,1,1,0.86451 +56,15,581,546,33,89,1,1,0.81242 +57,15,579,546,33,89,1,1,0.81242 +58,15,575,546,33,90,1,1,0.78281 +59,15,576,541,33,90,1,1,0.89787 +60,15,572,543,33,90,1,1,0.86749 +61,15,569,545,33,91,1,1,0.83696 +62,15,565,542,33,91,1,1,0.74105 +63,15,567,553,33,91,1,1,0.88875 +64,15,563,543,31,93,1,1,0.88165 +65,15,558,548,31,93,1,1,0.85539 +66,15,558,553,32,96,1,1,0.91659 +67,15,553,544,33,98,1,1,1 +68,15,550,550,35,98,1,1,1 +69,15,545,549,37,97,1,1,1 +70,15,540,548,39,96,1,1,0.86082 +71,15,536,547,40,96,1,1,0.83983 +72,15,532,551,41,97,1,1,1 +73,15,526,550,41,98,1,1,1 +74,15,521,550,41,98,1,1,0.79004 +75,15,516,549,41,100,1,1,0.81518 +76,15,511,549,40,100,1,1,0.83434 +77,15,506,548,40,101,1,1,0.83596 +78,15,501,548,40,102,1,1,0.88278 +79,15,495,548,41,103,1,1,0.88668 +80,15,488,550,42,104,1,1,0.86445 +81,15,482,549,42,105,1,1,0.86705 +82,15,476,549,43,105,1,1,0.87136 +83,15,469,550,42,106,1,1,0.84482 +84,15,463,551,40,107,1,1,0.83717 +85,15,456,552,39,108,1,1,0.80917 +86,15,450,554,38,109,1,1,1 +87,15,445,556,38,110,1,1,1 +88,15,437,558,39,110,1,1,1 +89,15,430,560,39,111,1,1,1 +90,15,423,563,39,111,1,1,1 +91,15,416,566,40,112,1,1,1 +92,15,410,572,41,109,1,1,1 +93,15,403,573,41,110,1,1,1 +94,15,396,575,41,110,1,1,0.9305 +95,15,389,577,41,110,1,1,0.93115 +96,15,382,579,42,111,1,1,0.95432 +97,15,376,579,42,112,1,1,1 +98,15,368,579,42,113,1,1,0.95675 +99,15,360,579,42,114,1,1,0.97836 +100,15,352,579,43,115,1,1,1 +101,15,345,579,42,117,1,1,1 +102,15,337,579,43,118,1,1,1 +103,15,329,579,43,119,1,1,1 +104,15,322,579,43,121,1,1,1 +105,15,314,580,44,119,1,1,1 +106,15,306,581,45,118,1,1,1 +107,15,295,581,46,120,1,1,1 +108,15,285,582,46,121,1,1,1 +109,15,275,583,46,122,1,1,1 +110,15,265,584,46,123,1,1,1 +111,15,255,585,46,124,1,1,1 +112,15,245,586,46,126,1,1,1 +113,15,234,586,47,128,1,1,1 +114,15,224,587,47,129,1,1,1 +115,15,214,588,47,130,1,1,1 +116,15,204,589,47,131,1,1,1 +117,15,194,590,47,132,1,1,1 +118,15,184,591,48,134,1,1,1 +119,15,173,593,48,134,1,1,1 +120,15,162,595,49,134,1,1,1 +121,15,152,597,48,134,1,1,1 +122,15,141,599,49,134,1,1,1 +123,15,130,601,49,134,1,1,1 +124,15,120,603,49,134,1,1,1 +125,15,109,605,49,134,1,1,1 +126,15,98,607,50,134,1,1,1 +127,15,88,609,50,135,1,1,1 +128,15,76,610,51,138,1,1,1 +129,15,64,611,52,141,1,1,1 +130,15,52,612,53,144,1,1,1 +131,15,40,614,54,146,1,1,1 +132,15,28,615,55,149,1,1,1 +133,15,16,616,56,152,1,1,1 +134,15,4,618,58,155,1,1,1 +135,15,-8,619,58,155,1,1,0.84746 +136,15,-20,620,58,155,1,1,0.64407 +1,16,637,536,22,58,1,1,0.65217 +2,16,638,522,22,59,1,1,0.43478 +3,16,637,534,21,64,1,1,0.63636 +4,16,636,530,21,64,1,1,0.68182 +5,16,636,527,21,64,1,1,0.68182 +6,16,635,542,21,64,1,1,0.77273 +7,16,635,533,22,65,1,1,0.65217 +8,16,634,538,22,66,1,1,0.69565 +9,16,633,539,22,65,1,1,0.69565 +10,16,631,538,22,66,1,1,1 +11,16,629,538,22,66,1,1,1 +12,16,628,538,22,67,1,1,1 +13,16,626,526,22,67,1,1,1 +14,16,623,532,22,62,1,1,0.47826 +15,16,621,532,23,63,1,1,0.83333 +16,16,620,532,23,65,1,1,0.875 +17,16,619,532,23,67,1,1,0.875 +18,16,618,532,23,69,1,1,0.875 +19,16,617,532,23,71,1,1,0.83333 +20,16,616,533,23,72,1,1,0.79167 +21,16,614,536,23,72,1,1,0.83333 +22,16,613,540,23,72,1,1,1 +23,16,611,541,23,73,1,1,1 +24,16,609,543,23,73,1,1,1 +25,16,608,545,23,73,1,1,1 +26,16,605,546,23,73,1,1,1 +27,16,603,547,23,74,1,1,0.95833 +28,16,603,549,23,74,1,1,0.91667 +29,16,601,551,23,74,1,1,0.95833 +30,16,599,553,24,75,1,1,0.96 +31,16,598,566,23,74,1,1,1 +32,16,596,560,23,74,1,1,1 +33,16,594,551,24,75,1,1,1 +34,16,592,556,23,75,1,1,1 +35,16,590,553,24,75,1,1,1 +36,16,589,551,24,75,1,1,1 +37,16,588,548,24,75,1,1,1 +38,16,587,546,24,75,1,1,1 +39,16,586,544,25,75,1,1,1 +40,16,584,544,25,75,1,1,1 +41,16,583,545,24,75,1,1,1 +42,16,581,544,25,77,1,1,1 +43,16,580,544,25,79,1,1,1 +44,16,578,543,26,81,1,1,1 +45,16,577,543,26,83,1,1,1 +46,16,575,542,27,85,1,1,1 +47,16,574,542,27,87,1,1,1 +48,16,573,545,27,86,1,1,1 +49,16,573,549,26,84,1,1,1 +50,16,570,550,28,85,1,1,1 +51,16,568,552,29,86,1,1,1 +52,16,565,554,29,85,1,1,1 +53,16,562,556,30,85,1,1,1 +54,16,560,555,30,85,1,1,1 +55,16,558,554,30,86,1,1,1 +56,16,557,554,30,86,1,1,1 +57,16,555,554,30,86,1,1,1 +58,16,552,553,30,86,1,1,1 +59,16,549,553,30,85,1,1,1 +60,16,546,552,30,85,1,1,1 +61,16,543,552,31,84,1,1,0.8125 +62,16,540,544,33,89,1,1,0.73529 +63,16,538,558,32,88,1,1,1 +64,16,534,548,32,89,1,1,1 +65,16,530,555,32,88,1,1,1 +66,16,528,561,32,89,1,1,1 +67,16,527,551,31,87,1,1,0.8125 +68,16,522,557,32,88,1,1,0.84848 +69,16,518,556,31,89,1,1,0.84375 +70,16,514,555,31,91,1,1,1 +71,16,510,554,31,92,1,1,1 +72,16,506,553,31,94,1,1,0.8125 +73,16,502,552,31,95,1,1,0.75 +74,16,498,552,31,96,1,1,0.71875 +75,16,492,552,31,97,1,1,0.75 +76,16,486,552,31,98,1,1,1 +77,16,481,552,31,99,1,1,1 +78,16,474,552,31,100,1,1,1 +79,16,468,553,31,100,1,1,1 +80,16,461,553,32,101,1,1,0.81818 +81,16,455,554,32,101,1,1,1 +82,16,449,555,32,101,1,1,1 +83,16,442,555,33,102,1,1,1 +84,16,436,556,33,102,1,1,0.79412 +85,16,430,557,33,103,1,1,0.76471 +86,16,422,558,33,104,1,1,0.82353 +87,16,414,560,34,104,1,1,0.88571 +88,16,406,562,35,104,1,1,0.86111 +89,16,399,564,35,105,1,1,0.86111 +90,16,391,566,35,106,1,1,0.88889 +91,16,384,569,35,106,1,1,0.88889 +92,16,377,572,35,107,1,1,0.91667 +93,16,370,575,35,107,1,1,0.91667 +94,16,363,578,35,107,1,1,0.91667 +95,16,356,581,35,108,1,1,1 +96,16,348,581,35,109,1,1,0.94444 +97,16,340,582,35,109,1,1,1 +98,16,332,587,37,109,1,1,1 +99,16,323,587,37,110,1,1,1 +100,16,314,588,37,110,1,1,1 +101,16,305,588,38,110,1,1,1 +102,16,296,588,39,111,1,1,1 +103,16,288,589,39,111,1,1,1 +104,16,279,589,40,112,1,1,1 +105,16,271,590,40,112,1,1,1 +106,16,261,589,40,113,1,1,1 +107,16,251,589,40,113,1,1,1 +108,16,242,590,37,114,1,1,1 +109,16,234,592,34,115,1,1,1 +110,16,223,592,36,116,1,1,1 +111,16,212,592,38,117,1,1,1 +112,16,202,593,40,118,1,1,1 +113,16,190,593,41,119,1,1,1 +114,16,178,594,43,120,1,1,1 +115,16,166,595,44,121,1,1,1 +116,16,154,596,46,122,1,1,1 +117,16,142,597,47,123,1,1,1 +118,16,131,598,48,124,1,1,1 +119,16,119,599,49,125,1,1,1 +120,16,108,601,49,125,1,1,1 +121,16,97,603,49,126,1,1,1 +122,16,86,605,49,126,1,1,1 +123,16,74,606,50,128,1,1,1 +124,16,63,608,51,128,1,1,1 +125,16,52,610,51,128,1,1,1 +126,16,41,612,51,129,1,1,1 +127,16,29,613,52,130,1,1,1 +128,16,18,615,52,131,1,1,1 +129,16,7,617,52,131,1,1,1 +130,16,-4,619,53,132,1,1,0.90741 +131,16,-16,623,53,132,1,1,0.68519 +1,17,677,521,23,58,1,1,0.54167 +2,17,680,512,19,57,1,1,0.6 +3,17,679,524,19,58,1,1,0.7 +4,17,679,521,22,56,1,1,0.56522 +5,17,679,520,22,56,1,1,0.6087 +6,17,681,532,22,57,1,1,0.47826 +7,17,681,524,21,59,1,1,0.59091 +8,17,680,530,22,64,1,1,0.52174 +9,17,679,527,23,64,1,1,0.45833 +10,17,679,525,23,64,1,1,0.54167 +11,17,675,526,27,70,1,1,0.46429 +12,17,674,530,28,70,1,1,0.41379 +13,17,674,518,27,69,1,1,0.5 +14,17,673,523,27,69,1,1,0.42857 +15,17,673,522,27,69,1,1,0.46429 +16,17,673,522,27,68,1,1,0.46429 +17,17,673,521,27,69,1,1,0.53571 +18,17,673,521,27,68,1,1,0.57143 +19,17,673,521,28,68,1,1,0.58621 +20,17,671,524,28,68,1,1,0.58621 +21,17,670,528,28,67,1,1,0.58621 +22,17,669,528,29,66,1,1,0.56667 +23,17,669,528,29,66,1,1,0.6 +24,17,668,529,30,65,1,1,0.64516 +25,17,667,530,31,65,1,1,0.65625 +26,17,667,531,31,65,1,1,0.65625 +27,17,665,533,31,64,1,1,0.65625 +28,17,663,535,32,64,1,1,0.66667 +29,17,662,537,32,64,1,1,0.66667 +30,17,662,546,31,64,1,1,0.65625 +31,17,663,558,24,66,1,1,0.56 +32,17,659,551,32,70,1,1,0.66667 +33,17,658,539,28,71,1,1,0.62069 +34,17,658,543,30,73,1,1,0.58065 +35,17,659,538,27,71,1,1,0.53571 +36,17,660,533,25,70,1,1,0.5 +37,17,657,528,29,76,1,1,0.56667 +38,17,655,527,29,77,1,1,0.56667 +39,17,654,526,29,79,1,1,0.56667 +40,17,652,525,30,81,1,1,0.58065 +41,17,651,525,30,82,1,1,0.6129 +42,17,651,526,30,82,1,1,0.6129 +43,17,649,529,31,82,1,1,0.625 +44,17,648,529,31,83,1,1,0.625 +45,17,647,530,31,83,1,1,0.625 +46,17,646,531,31,83,1,1,0.625 +47,17,646,532,30,84,1,1,0.6129 +48,17,644,532,30,86,1,1,0.64516 +49,17,643,533,30,87,1,1,0.64516 +50,17,642,533,30,89,1,1,0.64516 +51,17,641,534,30,90,1,1,1 +52,17,640,535,30,88,1,1,0.58065 +53,17,639,537,31,85,1,1,0.5625 +54,17,637,537,31,85,1,1,0.5625 +55,17,635,537,31,85,1,1,0.5625 +56,17,633,537,32,86,1,1,0.54789 +57,17,632,535,32,86,1,1,0.57576 +58,17,631,533,32,87,1,1,0.57576 +59,17,629,532,32,88,1,1,0.5475 +60,17,627,532,32,88,1,1,0.51856 +61,17,626,532,31,89,1,1,0.50347 +62,17,624,527,31,89,1,1,0.48264 +63,17,623,542,31,89,1,1,0.44722 +64,17,620,541,32,89,1,1,0.78788 +65,17,618,540,32,90,1,1,0.88145 +66,17,616,540,32,90,1,1,0.51915 +67,17,612,538,32,91,1,1,0.63636 +68,17,609,537,32,91,1,1,0.46509 +69,17,605,536,32,91,1,1,0.54941 +70,17,601,535,32,92,1,1,0.49137 +71,17,597,534,32,93,1,1,0.4626 +72,17,594,533,32,94,1,1,0.52089 +73,17,590,532,33,95,1,1,0.50858 +74,17,587,532,33,95,1,1,0.53585 +75,17,582,532,33,95,1,1,0.50858 +76,17,577,533,33,95,1,1,0.4761 +77,17,572,534,34,95,1,1,0.40893 +78,17,568,533,34,95,1,1,0.49286 +79,17,565,532,33,96,1,1,0.47908 +80,17,559,532,34,97,1,1,0.44257 +81,17,553,532,35,98,1,1,0.43238 +82,17,548,533,36,98,1,1,0.47256 +83,17,542,534,36,99,1,1,0.44568 +84,17,536,536,37,99,1,1,0.60421 +85,17,531,538,37,100,1,1,0.50521 +86,17,525,539,38,100,1,1,0.5179 +87,17,520,540,38,100,1,1,0.52044 +88,17,515,542,38,100,1,1,0.54455 +89,17,509,545,38,100,1,1,0.51917 +90,17,503,548,38,101,1,1,0.63047 +91,17,496,549,38,102,1,1,0.60966 +92,17,489,551,38,102,1,1,0.56535 +93,17,484,552,36,103,1,1,0.57147 +94,17,480,553,33,104,1,1,0.59244 +95,17,476,554,31,106,1,1,0.62792 +96,17,469,557,31,105,1,1,0.5339 +97,17,462,558,32,105,1,1,0.49257 +98,17,456,560,32,105,1,1,0.66381 +99,17,449,559,33,107,1,1,0.53486 +100,17,443,559,34,108,1,1,0.74312 +101,17,435,559,34,108,1,1,0.74574 +102,17,428,559,33,108,1,1,0.74096 +103,17,421,558,34,108,1,1,0.55072 +104,17,415,558,34,107,1,1,0.57566 +105,17,409,558,34,107,1,1,0.60899 +106,17,401,558,35,107,1,1,0.5 +107,17,394,558,36,107,1,1,0.53478 +108,17,387,558,37,108,1,1,0.59054 +109,17,379,558,37,108,1,1,0.61251 +110,17,371,559,38,108,1,1,0.64432 +111,17,363,560,38,108,1,1,0.66667 +112,17,355,560,39,108,1,1,0.675 +113,17,347,561,39,108,1,1,0.675 +114,17,340,562,39,108,1,1,0.675 +115,17,331,562,40,109,1,1,0.68293 +116,17,323,563,40,110,1,1,0.70732 +117,17,315,564,40,111,1,1,0.73171 +118,17,307,564,40,113,1,1,0.73171 +119,17,299,565,40,114,1,1,0.73171 +120,17,291,566,40,114,1,1,0.7561 +121,17,283,566,40,116,1,1,0.73171 +122,17,275,567,41,117,1,1,0.66667 +123,17,267,568,41,118,1,1,0.7381 +124,17,259,568,41,120,1,1,0.7619 +125,17,251,569,41,120,1,1,0.71429 +126,17,243,570,41,121,1,1,0.64286 +127,17,235,570,41,123,1,1,0.71429 +128,17,227,571,41,124,1,1,0.71429 +129,17,219,572,42,125,1,1,0.72093 +130,17,209,573,43,126,1,1,0.70455 +131,17,200,574,43,127,1,1,1 +132,17,191,575,43,128,1,1,0.75 +133,17,181,576,44,129,1,1,0.6 +134,17,172,577,44,130,1,1,0.6 +135,17,163,579,44,130,1,1,0.62222 +136,17,154,579,44,131,1,1,0.62222 +137,17,146,580,44,131,1,1,0.62222 +138,17,138,580,44,132,1,1,0.64444 +139,17,129,581,45,132,1,1,0.65217 +140,17,121,581,45,133,1,1,0.63043 +141,17,113,582,45,134,1,1,0.63043 +142,17,104,581,45,135,1,1,0.63043 +143,17,95,581,46,136,1,1,1 +144,17,87,581,45,136,1,1,0.63043 +145,17,78,581,46,137,1,1,1 +146,17,70,581,45,137,1,1,0.63043 +147,17,61,581,46,138,1,1,0.6383 +148,17,53,581,46,139,1,1,0.65957 +149,17,42,583,46,139,1,1,0.65957 +150,17,32,586,46,139,1,1,0.65957 +151,17,22,588,46,140,1,1,0.65957 +152,17,12,591,46,140,1,1,0.65957 +153,17,1,590,46,141,1,1,0.65957 +154,17,-9,590,45,141,1,1,0.78261 +155,17,-14,591,45,141,1,1,0.67391 +145,18,474,531,24,65,1,1,0.26182 +146,18,468,531,24,65,1,1,0.22667 +147,18,463,532,24,64,1,1,0.21477 +148,18,457,532,25,65,1,1,0.22261 +149,18,452,533,24,64,1,1,0.12369 +150,18,446,533,25,64,1,1,0.12899 +151,18,441,534,25,64,1,1,0.12899 +152,18,436,534,23,68,1,1,0.18961 +153,18,430,535,24,67,1,1,0.17412 +154,18,425,537,24,65,1,1,0.20182 +155,18,419,538,24,66,1,1,0.20597 +156,18,414,539,23,67,1,1,0.21324 +157,18,409,540,23,68,1,1,0.33696 +158,18,403,540,23,69,1,1,0.35714 +159,18,398,541,22,70,1,1,0.36497 +160,18,392,542,22,70,1,1,0.36497 +161,18,387,543,22,71,1,1,0.41063 +162,18,380,545,23,71,1,1,0.34375 +163,18,373,547,25,71,1,1,0.30556 +164,18,367,546,26,72,1,1,0.31811 +165,18,362,546,26,72,1,1,0.31811 +166,18,357,546,26,72,1,1,0.32877 +167,18,352,546,26,72,1,1,0.32877 +168,18,347,546,26,72,1,1,0.32877 +169,18,342,546,27,72,1,1,0.36301 +170,18,337,546,28,71,1,1,0.38649 +171,18,332,547,29,70,1,1,0.33615 +172,18,328,546,28,70,1,1,0.35114 +173,18,324,546,28,70,1,1,0.35114 +174,18,320,546,28,70,1,1,0.35697 +175,18,316,545,28,69,1,1,0.36749 +176,18,312,545,28,68,1,1,0.36832 +177,18,308,545,28,67,1,1,0.37525 +178,18,303,547,29,69,1,1,0.34714 +179,18,297,547,29,71,1,1,0.27917 +180,18,291,548,30,72,1,1,0.23774 +181,18,286,548,30,76,1,1,0.29828 +182,18,282,548,30,81,1,1,1 +183,18,278,549,29,77,1,1,0.28419 +184,18,274,551,29,72,1,1,0.24566 +185,18,270,552,29,72,1,1,0.24566 +186,18,266,553,29,72,1,1,0.27443 +187,18,263,554,28,72,1,1,0.28389 +188,18,259,555,28,73,1,1,0.31314 +189,18,255,556,28,73,1,1,0.31314 +190,18,252,557,27,73,1,1,0.35521 +191,18,248,558,27,73,1,1,0.35521 +192,18,245,560,26,73,1,1,0.3984 +193,18,241,560,26,74,1,1,0.40148 +194,18,237,561,26,74,1,1,0.40148 +195,18,234,562,26,74,1,1,0.43852 +196,18,225,564,28,72,1,1,0.30231 +197,18,221,565,28,72,1,1,0.30231 +198,18,217,566,28,72,1,1,0.30231 +199,18,214,567,28,72,1,1,0.3368 +200,18,210,568,28,72,1,1,0.3368 +201,18,207,569,28,72,1,1,0.37128 +202,18,203,570,28,72,1,1,0.37128 +203,18,200,571,28,73,1,1,0.40168 +204,18,197,572,28,74,1,1,0.43586 +205,18,193,572,28,75,1,1,0.43421 +206,18,190,573,28,75,1,1,0.46869 +207,18,186,574,29,76,1,1,0.48225 +208,18,183,575,28,76,1,1,0.49888 +209,18,179,576,29,76,1,1,0.51169 +210,18,176,577,29,77,1,1,0.54487 +211,18,172,578,29,77,1,1,0.54103 +212,18,169,579,29,77,1,1,0.54103 +213,18,166,580,29,78,1,1,0.53713 +214,18,164,581,29,78,1,1,0.57046 +215,18,161,575,29,78,1,1,0.57215 +216,18,158,575,29,79,1,1,0.545 +217,18,156,576,29,79,1,1,0.57208 +218,18,153,576,30,80,1,1,0.55396 +219,18,151,577,30,80,1,1,0.55914 +220,18,149,578,29,80,1,1,0.53909 +221,18,146,578,30,81,1,1,0.52793 +222,18,144,579,30,81,1,1,0.52793 +223,18,142,580,30,81,1,1,0.52793 +224,18,140,585,30,81,1,1,0.52124 +225,18,137,585,31,82,1,1,0.47854 +226,18,135,585,31,84,1,1,0.45184 +227,18,133,586,31,84,1,1,0.42537 +228,18,131,586,31,86,1,1,0.47881 +229,18,129,586,31,88,1,1,0.51053 +230,18,127,587,31,88,1,1,0.51018 +231,18,125,587,31,90,1,1,0.49004 +232,18,123,588,32,91,1,1,0.55764 +233,18,123,588,32,90,1,1,0.58442 +234,18,122,587,32,90,1,1,0.61538 +235,18,122,587,31,89,1,1,0.50556 +236,18,121,587,31,88,1,1,0.5 +237,18,121,587,31,87,1,1,0.53125 +238,18,121,586,30,88,1,1,0.51613 +239,18,121,586,30,89,1,1,0.54839 +240,18,119,585,31,90,1,1,0.53125 +241,18,118,585,32,91,1,1,0.58366 +242,18,116,585,34,91,1,1,0.48571 +243,18,115,585,35,92,1,1,0.45042 +244,18,114,585,36,93,1,1,0.44451 +245,18,116,585,35,95,1,1,0.53704 +246,18,115,584,36,96,1,1,0.45584 +247,18,117,584,36,97,1,1,0.48704 +248,18,119,584,36,98,1,1,0.53808 +249,18,121,585,35,98,1,1,0.55163 +250,18,123,587,35,97,1,1,0.60034 +251,18,125,589,35,96,1,1,0.62314 +252,18,127,590,34,97,1,1,0.66939 +253,18,129,592,34,96,1,1,0.64212 +254,18,131,594,34,95,1,1,0.57589 +255,18,134,596,33,95,1,1,0.62316 +256,18,136,597,33,95,1,1,0.55882 +257,18,138,598,34,95,1,1,0.54286 +258,18,140,599,35,95,1,1,0.55556 +259,18,143,601,35,95,1,1,0.55556 +260,18,145,600,35,97,1,1,0.56009 +261,18,147,599,35,99,1,1,0.54667 +262,18,149,598,35,101,1,1,0.60648 +263,18,151,598,36,101,1,1,0.61712 +264,18,154,599,37,101,1,1,0.62719 +265,18,157,598,35,100,1,1,0.5418 +266,18,160,597,34,100,1,1,0.52871 +267,18,164,597,33,100,1,1,0.57193 +268,18,168,597,32,100,1,1,0.58416 +269,18,165,597,33,100,1,1,0.42341 +270,18,162,597,34,101,1,1,0.39076 +271,18,160,597,34,102,1,1,0.25936 +272,18,166,595,34,103,1,1,0.33984 +273,18,172,594,35,104,1,1,0.43492 +274,18,178,593,36,104,1,1,0.54183 +275,18,184,592,36,105,1,1,0.60989 +276,18,190,591,37,105,1,1,0.64871 +277,18,197,590,37,106,1,1,0.75209 +278,18,199,592,36,105,1,1,0.74477 +279,18,201,594,36,105,1,1,0.74197 +280,18,203,597,36,104,1,1,0.73951 +281,18,206,598,36,105,1,1,0.76543 +282,18,209,599,37,106,1,1,0.77373 +283,18,213,600,37,108,1,1,0.82038 +284,18,215,600,37,109,1,1,0.82201 +285,18,217,600,37,110,1,1,0.82551 +286,18,219,601,37,111,1,1,0.80545 +287,18,221,602,37,111,1,1,0.61936 +288,18,224,603,37,112,1,1,0.61924 +289,18,226,603,37,113,1,1,0.59741 +290,18,228,604,37,114,1,1,0.57208 +291,18,231,605,37,114,1,1,0.47895 +292,18,233,606,37,115,1,1,0.49932 +293,18,235,607,37,115,1,1,0.50181 +294,18,237,607,37,117,1,1,0.531 +295,18,240,608,37,117,1,1,0.5562 +296,18,242,609,37,118,1,1,0.55838 +297,18,244,610,37,118,1,1,0.57983 +298,18,247,611,37,119,1,1,0.63158 +299,18,248,611,37,119,1,1,0.60855 +300,18,249,612,37,119,1,1,0.58575 +301,18,250,613,37,119,1,1,0.56053 +302,18,251,614,37,119,1,1,0.58575 +303,18,252,615,37,119,1,1,0.59189 +304,18,254,616,36,119,1,1,0.60811 +305,18,255,622,36,120,1,1,0.63815 +306,18,255,622,36,120,1,1,0.59705 +307,18,256,622,36,121,1,1,0.60656 +308,18,255,628,36,123,1,1,0.585 +309,18,256,627,36,124,1,1,0.59568 +310,18,257,626,36,126,1,1,0.60566 +311,18,257,627,36,127,1,1,0.58573 +312,18,257,628,37,128,1,1,0.61506 +313,18,258,629,37,130,1,1,0.6368 +314,18,257,629,37,131,1,1,0.61364 +315,18,257,629,37,132,1,1,0.61654 +316,18,257,630,37,132,1,1,0.63593 +317,18,257,630,37,133,1,1,0.63865 +318,18,257,631,37,133,1,1,0.63551 +319,18,257,631,37,134,1,1,0.63821 +320,18,257,632,37,134,1,1,0.63821 +321,18,257,632,37,135,1,1,0.59172 +322,18,257,633,37,136,1,1,0.6773 +323,18,255,631,37,137,1,1,0.68669 +324,18,254,630,37,137,1,1,0.71625 +325,18,251,631,37,137,1,1,0.71034 +326,18,249,632,37,138,1,1,0.7251 +327,18,247,635,36,135,1,1,0.71781 +328,18,244,636,37,139,1,1,0.73741 +329,18,240,633,37,140,1,1,0.69672 +330,18,237,631,37,140,1,1,0.67637 +331,18,233,628,38,142,1,1,0.64228 +332,18,230,626,37,142,1,1,0.65808 +333,18,226,623,38,143,1,1,0.67165 +334,18,223,621,38,144,1,1,0.69531 +335,18,219,622,38,145,1,1,0.69055 +336,18,215,624,39,145,1,1,0.74521 +337,18,212,626,39,145,1,1,0.76832 +338,18,208,629,40,146,1,1,0.77186 +339,18,205,632,40,148,1,1,0.8129 +340,18,200,633,40,149,1,1,0.7935 +341,18,195,635,41,150,1,1,0.77972 +342,18,191,637,41,151,1,1,0.80107 +343,18,188,644,40,152,1,1,0.85605 +344,18,181,648,41,153,1,1,0.81911 +345,18,176,651,41,154,1,1,0.82166 +346,18,172,655,41,155,1,1,0.84127 +347,18,167,659,42,155,1,1,0.82946 +348,18,163,663,42,156,1,1,0.88268 +349,18,159,667,42,157,1,1,0.89991 +350,18,153,668,42,158,1,1,0.87977 +351,18,147,669,43,159,1,1,0.86278 +352,18,141,670,44,160,1,1,0.88489 +353,18,136,671,43,161,1,1,0.9025 +354,18,130,672,44,163,1,1,0.92358 +355,18,124,673,45,164,1,1,0.92569 +356,18,119,674,44,165,1,1,0.94337 +357,18,113,675,45,166,1,1,0.96303 +358,18,107,676,46,167,1,1,0.96403 +359,18,102,677,46,169,1,1,1 +360,18,95,679,45,167,1,1,0.98163 +361,18,88,681,45,165,1,1,0.87349 +362,18,81,682,46,170,1,1,0.89859 +363,18,74,684,47,174,1,1,0.90179 +364,18,67,684,47,175,1,1,0.90412 +365,18,60,688,48,176,1,1,0.92482 +366,18,54,693,48,177,1,1,0.94325 +367,18,48,697,48,179,1,1,0.96213 +368,18,42,702,48,180,1,1,1 +369,18,34,706,48,180,1,1,0.98094 +370,18,27,711,48,180,1,1,0.98083 +371,18,19,715,48,181,1,1,1 +372,18,11,719,48,182,1,1,1 +373,18,4,724,47,182,1,1,1 +374,18,-4,728,47,183,1,1,0.89583 +40,19,615,534,28,85,1,1,0.21091 +41,19,614,534,28,85,1,1,1 +42,19,614,534,28,85,1,1,0.21091 +43,19,614,535,28,85,1,1,0.22053 +44,19,614,535,27,85,1,1,0.22633 +45,19,614,536,27,85,1,1,0.25997 +46,19,613,536,28,85,1,1,0.29431 +47,19,613,536,27,85,1,1,0.31105 +48,19,613,537,27,85,1,1,0.31105 +49,19,613,537,27,85,1,1,0.38455 +50,19,613,538,27,85,1,1,0.4564 +51,19,611,539,27,85,1,1,0.4564 +52,19,610,540,27,85,1,1,0.49502 +53,19,609,541,27,85,1,1,0.54651 +54,19,608,542,27,85,1,1,0.60133 +55,19,607,543,27,85,1,1,0.62542 +56,19,606,544,27,85,1,1,0.68605 +57,19,605,542,26,87,1,1,0.71717 +58,19,604,540,26,89,1,1,0.82716 +59,19,603,538,26,91,1,1,0.74919 +60,19,602,537,26,92,1,1,0.86141 +61,19,599,537,28,92,1,1,0.87393 +62,19,597,537,30,92,1,1,0.93895 +63,19,596,549,32,91,1,1,0.85507 +64,19,595,537,31,99,1,1,1 +65,19,590,542,31,99,1,1,1 +66,19,589,546,37,98,1,1,0.95109 +67,19,586,538,37,99,1,1,0.97526 +68,19,583,545,36,101,1,1,0.92289 +69,19,581,542,36,103,1,1,0.94958 +70,19,580,540,36,105,1,1,1 +71,19,576,539,35,106,1,1,1 +72,19,572,539,35,106,1,1,0.95067 +73,19,568,539,35,106,1,1,1 +74,19,564,539,35,107,1,1,1 +75,19,560,539,35,107,1,1,1 +76,19,556,539,35,107,1,1,1 +77,19,552,539,35,108,1,1,1 +78,19,546,539,35,109,1,1,1 +79,19,541,539,35,110,1,1,1 +80,19,535,540,36,110,1,1,1 +81,19,530,540,36,111,1,1,1 +464,20,1374,804,180,423,1,1,0.6533 +465,20,1339,818,178,422,1,1,0.62175 +466,20,1304,832,176,421,1,1,0.59005 +467,20,1269,846,174,421,1,1,0.55687 +468,20,1238,853,171,420,1,1,0.54157 +469,20,1207,860,168,420,1,1,0.52494 +470,20,1172,857,164,420,1,1,0.53207 +471,20,1132,852,171,420,1,1,0.54394 +472,20,1091,848,183,420,1,1,0.55344 +473,20,1051,848,185,420,1,1,0.55344 +474,20,1012,849,187,420,1,1,0.49538 +475,20,973,850,189,420,1,1,0.43029 +476,20,930,857,191,420,1,1,0.36857 +477,20,887,865,194,420,1,1,0.51306 +478,20,839,871,196,420,1,1,0.30638 +479,20,796,881,191,421,1,1,0.2888 +480,20,754,892,185,421,1,1,0.26728 +481,20,710,887,184,422,1,1,0.2727 +482,20,667,882,182,424,1,1,0.46824 +483,20,614,879,180,426,1,1,0.47307 +484,20,561,877,179,427,1,1,0.47664 +485,20,509,875,177,429,1,1,0.47907 +486,20,455,879,176,431,1,1,0.46759 +487,20,401,884,175,433,1,1,0.45392 +488,20,347,901,173,436,1,1,0.4119 +489,20,300,915,168,425,1,1,0.38967 +490,20,250,927,163,416,1,1,0.3693 +491,20,200,940,158,407,1,1,0.34559 +492,20,137,944,161,403,1,1,0.33911 +493,20,74,949,164,399,1,1,0.33 +494,20,11,953,167,395,1,1,0.32323 +495,20,-52,958,170,391,1,1,0.21652 +481,21,1813,651,75,236,1,1,0.44509 +482,21,1763,651,75,236,1,1,0.46397 +483,21,1729,653,75,236,1,1,0.45348 +484,21,1687,653,75,236,1,1,0.44948 +485,21,1646,653,74,236,1,1,0.44473 +486,21,1605,653,74,236,1,1,0.45626 +487,21,1550,655,87,236,1,1,0.59489 +488,21,1496,658,99,235,1,1,0.69419 +489,21,1442,661,111,235,1,1,0.77716 +490,21,1397,665,110,236,1,1,0.81062 +491,21,1352,669,110,238,1,1,0.83535 +492,21,1307,674,110,239,1,1,0.85139 +493,21,1275,675,102,246,1,1,0.83346 +494,21,1243,677,95,252,1,1,0.78911 +495,21,1211,679,88,259,1,1,0.73755 +496,21,1164,679,86,261,1,1,0.80047 +497,21,1118,680,84,262,1,1,0.85466 +498,21,1072,681,81,263,1,1,0.93154 +499,21,1026,682,79,264,1,1,0.97623 +500,21,980,683,77,265,1,1,1 +501,21,930,683,84,268,1,1,0.92132 +502,21,881,684,90,270,1,1,0.83131 +503,21,832,684,96,274,1,1,0.75258 +504,21,783,685,102,276,1,1,0.68182 +505,21,734,686,108,279,1,1,0.62706 +506,21,686,691,101,282,1,1,0.64193 +507,21,638,697,94,284,1,1,0.66726 +508,21,590,702,87,287,1,1,0.69729 +509,21,542,708,80,290,1,1,0.73166 +510,21,485,715,80,295,1,1,0.84818 +511,21,429,722,80,300,1,1,0.96493 +512,21,353,727,113,311,1,1,0.81691 +513,21,278,732,145,322,1,1,0.73309 +514,21,218,737,143,325,1,1,0.73586 +515,21,159,743,140,328,1,1,0.72925 +516,21,115,749,132,336,1,1,0.63751 +517,21,61,754,134,336,1,1,0.57129 +518,21,7,760,137,335,1,1,0.50513 +480,22,1848,651,97,238,1,1,0.40829 +481,22,1872,661,97,238,1,1,0.3118 +482,22,1826,659,97,238,1,1,0.73662 +483,22,1792,661,97,238,1,1,0.77645 +484,22,1749,660,97,238,1,1,0.75523 +485,22,1706,660,97,238,1,1,0.72761 +486,22,1664,660,96,238,1,1,0.70496 +487,22,1626,660,91,238,1,1,0.67482 +488,22,1588,661,86,237,1,1,0.64165 +489,22,1550,662,81,237,1,1,0.6446 +490,22,1507,667,81,237,1,1,0.60566 +491,22,1464,672,81,237,1,1,0.56548 +492,22,1421,677,81,237,1,1,0.54622 +493,22,1375,683,81,241,1,1,0.53306 +494,22,1329,689,81,246,1,1,0.51822 +495,22,1284,696,80,250,1,1,0.50996 +496,22,1239,695,79,251,1,1,0.52381 +497,22,1194,695,78,252,1,1,0.5336 +498,22,1149,695,78,253,1,1,0.52756 +499,22,1104,695,77,254,1,1,0.56199 +500,22,1060,695,76,255,1,1,0.61967 +501,22,1008,695,83,265,1,1,0.69549 +502,22,956,695,90,275,1,1,0.71429 +503,22,904,695,97,286,1,1,0.73512 +504,22,852,695,104,296,1,1,0.7899 +505,22,801,695,110,307,1,1,0.8166 +506,22,750,702,110,310,1,1,0.84334 +507,22,700,709,110,313,1,1,0.89729 +508,22,650,716,109,316,1,1,0.94924 +509,22,600,724,109,319,1,1,0.97429 +510,22,553,731,109,326,1,1,0.98449 +511,22,507,738,109,333,1,1,0.97942 +512,22,445,743,113,337,1,1,1 +513,22,383,748,117,342,1,1,0.97085 +514,22,322,753,120,346,1,1,0.94524 +515,22,260,758,124,351,1,1,0.91761 +516,22,199,763,127,356,1,1,0.89076 +517,22,138,768,131,352,1,1,0.88669 +518,22,77,774,135,348,1,1,0.87966 +519,22,1,782,152,375,1,1,0.79521 +503,23,1862,650,71,175,1,1,0.81944 +504,23,1828,652,73,174,1,1,1 +505,23,1795,654,74,174,1,1,1 +506,23,1762,656,75,174,1,1,1 +507,23,1729,658,76,174,1,1,1 +508,23,1696,660,77,174,1,1,0.98718 +509,23,1661,662,79,175,1,1,0.9625 +510,23,1626,664,81,176,1,1,0.93902 +511,23,1591,666,83,177,1,1,0.92857 +512,23,1556,668,85,178,1,1,0.93023 +513,23,1522,670,86,179,1,1,0.93103 +514,23,1487,670,86,182,1,1,0.95402 +515,23,1453,671,86,184,1,1,0.96552 +516,23,1419,672,85,187,1,1,0.98837 +517,23,1384,672,86,190,1,1,1 +518,23,1350,673,85,192,1,1,1 +519,23,1316,674,85,195,1,1,1 +520,23,1283,675,85,195,1,1,1 +521,23,1250,676,85,195,1,1,1 +522,23,1218,677,85,195,1,1,1 +523,23,1185,678,85,195,1,1,1 +524,23,1152,679,85,195,1,1,1 +525,23,1120,680,85,195,1,1,1 +526,23,1086,682,86,199,1,1,1 +527,23,1052,684,88,203,1,1,1 +528,23,1018,686,90,207,1,1,0.95626 +529,23,984,688,92,212,1,1,0.86087 +530,23,950,690,93,214,1,1,0.8617 +531,23,917,692,93,217,1,1,0.85311 +532,23,883,694,94,220,1,1,0.84639 +533,23,850,696,95,223,1,1,0.86821 +534,23,816,698,96,226,1,1,0.90967 +535,23,783,700,96,229,1,1,0.8996 +536,23,749,702,97,232,1,1,0.90059 +537,23,716,704,98,235,1,1,0.88187 +538,23,682,709,97,236,1,1,0.89925 +539,23,649,715,95,236,1,1,0.88542 +540,23,616,721,94,236,1,1,0.87368 +541,23,572,728,103,238,1,1,0.82692 +542,23,526,728,120,253,1,1,0.81441 +543,23,490,738,124,256,1,1,0.784 +544,23,452,744,129,266,1,1,0.76923 +545,23,414,750,135,248,1,1,0.75 +546,23,383,751,122,256,1,1,0.78862 +547,23,352,753,109,264,1,1,0.83636 +548,23,307,755,111,273,1,1,0.90214 +549,23,255,756,119,282,1,1,0.8439 +550,23,203,758,127,291,1,1,0.86992 +551,23,152,760,134,300,1,1,0.89905 +552,23,104,768,140,305,1,1,0.90931 +553,23,57,776,145,310,1,1,0.83535 +554,23,10,784,151,315,1,1,0.75142 +555,23,-34,792,151,315,1,1,0.47928 +505,24,1878,658,73,183,1,1,0.58108 +506,24,1843,655,80,188,1,1,0.96296 +507,24,1808,652,87,194,1,1,1 +508,24,1773,655,86,194,1,1,1 +509,24,1738,658,85,195,1,1,1 +510,24,1703,661,84,195,1,1,1 +511,24,1669,665,82,195,1,1,1 +512,24,1636,666,81,197,1,1,1 +513,24,1603,667,81,199,1,1,1 +514,24,1570,668,81,202,1,1,1 +515,24,1537,669,81,204,1,1,1 +516,24,1504,670,81,207,1,1,1 +517,24,1471,671,81,209,1,1,1 +518,24,1439,673,80,211,1,1,1 +519,24,1406,674,81,213,1,1,1 +520,24,1374,675,81,215,1,1,1 +521,24,1342,677,81,217,1,1,1 +522,24,1308,676,82,219,1,1,1 +523,24,1275,676,82,221,1,1,1 +524,24,1242,676,83,223,1,1,1 +525,24,1215,677,83,225,1,1,1 +526,24,1178,678,84,227,1,1,1 +527,24,1142,679,84,229,1,1,1 +528,24,1105,687,90,226,1,1,1 +529,24,1064,689,99,229,1,1,1 +530,24,1031,690,101,239,1,1,1 +531,24,997,695,102,241,1,1,1 +532,24,963,700,103,244,1,1,1 +533,24,933,702,105,248,1,1,1 +534,24,904,704,106,253,1,1,1 +535,24,870,706,102,256,1,1,1 +536,24,837,708,98,259,1,1,1 +537,24,803,710,98,262,1,1,1 +538,24,770,712,97,265,1,1,1 +539,24,734,714,101,273,1,1,1 +540,24,699,716,104,282,1,1,1 +541,24,658,725,119,286,1,1,1 +542,24,624,734,120,289,1,1,1 +543,24,588,737,117,295,1,1,1 +544,24,552,741,115,300,1,1,1 +545,24,516,745,112,305,1,1,1 +546,24,480,748,110,311,1,1,1 +547,24,444,752,107,316,1,1,1 +548,24,408,756,105,321,1,1,1 +549,24,356,760,119,327,1,1,0.97866 +550,24,314,764,121,335,1,1,0.94345 +551,24,273,768,123,343,1,1,0.90988 +552,24,232,773,125,350,1,1,0.87749 +553,24,181,781,133,358,1,1,0.83565 +554,24,131,789,141,367,1,1,0.79348 +555,24,80,797,149,375,1,1,0.75532 +556,24,30,806,157,383,1,1,0.71615 +557,24,-16,813,150,371,1,1,0.63932 +516,25,1882,736,82,265,1,1,0.46988 +517,25,1828,729,115,277,1,1,0.80172 +518,25,1790,729,128,276,1,1,1 +519,25,1756,730,130,276,1,1,1 +520,25,1721,730,134,279,1,1,1 +521,25,1685,730,135,279,1,1,1 +522,25,1651,731,139,280,1,1,1 +523,25,1641,730,117,276,1,1,1 +524,25,1610,727,114,283,1,1,1 +525,25,1576,724,117,277,1,1,1 +526,25,1542,725,117,278,1,1,1 +527,25,1514,726,111,279,1,1,1 +528,25,1486,727,110,280,1,1,1 +529,25,1455,727,109,282,1,1,1 +530,25,1402,733,133,289,1,1,1 +531,25,1373,731,133,297,1,1,1 +532,25,1344,736,129,293,1,1,1 +533,25,1316,735,129,293,1,1,1 +534,25,1286,736,132,295,1,1,1 +535,25,1257,736,129,294,1,1,1 +536,25,1234,737,126,290,1,1,1 +537,25,1201,735,129,289,1,1,1 +538,25,1173,739,133,285,1,1,1 +539,25,1149,735,129,299,1,1,1 +540,25,1121,742,122,302,1,1,1 +541,25,1094,742,128,310,1,1,1 +542,25,1060,748,128,314,1,1,1 +543,25,1038,754,132,310,1,1,1 +544,25,1010,762,128,310,1,1,1 +545,25,984,755,128,314,1,1,1 +546,25,953,757,133,317,1,1,1 +547,25,929,757,129,317,1,1,1 +548,25,900,756,132,317,1,1,1 +549,25,874,755,136,305,1,1,1 +550,25,847,753,133,310,1,1,1 +551,25,820,751,137,322,1,1,1 +552,25,796,750,136,334,1,1,0.98806 +553,25,771,755,136,325,1,1,1 +554,25,746,760,136,322,1,1,0.99381 +555,25,721,768,137,321,1,1,0.97205 +556,25,693,766,137,330,1,1,0.95166 +557,25,669,765,137,322,1,1,0.97833 +558,25,639,763,137,326,1,1,0.97248 +559,25,613,763,145,329,1,1,0.96364 +560,25,586,763,144,330,1,1,0.96073 +561,25,555,757,149,337,1,1,0.95858 +562,25,524,758,156,338,1,1,0.9528 +563,25,501,759,154,338,1,1,0.94985 +564,25,473,761,157,338,1,1,0.94395 +565,25,445,765,162,342,1,1,0.92128 +566,25,413,770,169,346,1,1,0.89625 +567,25,383,775,174,345,1,1,0.88439 +568,25,354,780,178,349,1,1,0.86 +569,25,330,788,177,350,1,1,0.83476 +570,25,303,791,181,353,1,1,0.81921 +571,25,272,797,189,353,1,1,0.80226 +572,25,247,799,190,357,1,1,0.78771 +573,25,214,799,196,358,1,1,0.78552 +574,25,189,801,194,362,1,1,0.77135 +575,25,155,798,198,374,1,1,0.75467 +576,25,117,803,213,378,1,1,0.73351 +577,25,87,808,216,382,1,1,0.71279 +578,25,65,813,209,389,1,1,0.68718 +579,25,36,821,205,394,1,1,0.65823 +580,25,-1,829,210,398,1,1,0.62559 +581,25,-16,832,197,399,1,1,0.56905 +582,25,-30,836,184,400,1,1,0.50859 +583,25,-44,840,171,401,1,1,0.44266 +584,25,-75,841,171,401,1,1,0.33322 +585,25,-106,842,171,401,1,1,0.22468 +504,26,1886,568,39,93,1,1,0.5867 +505,26,1853,567,39,94,1,1,0.62789 +506,26,1820,567,39,95,1,1,0.56094 +507,26,1791,566,39,96,1,1,0.53351 +508,26,1763,566,39,97,1,1,0.5449 +509,26,1733,568,39,98,1,1,0.56919 +510,26,1704,570,39,99,1,1,0.546 +511,26,1675,572,39,100,1,1,0.5755 +512,26,1646,574,38,101,1,1,0.55505 +513,26,1617,576,38,102,1,1,0.56634 +514,26,1588,578,38,103,1,1,0.86538 +515,26,1562,577,39,103,1,1,0.88462 +516,26,1536,576,40,104,1,1,0.89524 +517,26,1510,575,41,104,1,1,0.91429 +518,26,1484,575,42,104,1,1,0.94419 +519,26,1458,574,43,104,1,1,0.96753 +520,26,1432,573,44,105,1,1,0.97987 +521,26,1406,572,45,105,1,1,0.99631 +522,26,1380,572,46,105,1,1,0.99558 +523,26,1354,571,47,105,1,1,0.99921 +524,26,1328,570,48,106,1,1,1 +525,26,1303,570,49,106,1,1,1 +526,26,1279,569,50,107,1,1,1 +527,26,1256,569,51,107,1,1,1 +528,26,1232,570,48,108,1,1,1 +529,26,1208,571,45,109,1,1,1 +530,26,1184,573,42,109,1,1,1 +531,26,1163,573,42,109,1,1,1 +532,26,1142,573,42,110,1,1,1 +533,26,1121,574,43,110,1,1,1 +534,26,1099,574,43,111,1,1,1 +535,26,1077,575,44,111,1,1,1 +536,26,1056,576,44,111,1,1,1 +537,26,1035,578,44,111,1,1,1 +538,26,1014,580,45,112,1,1,1 +539,26,994,581,46,112,1,1,1 +540,26,975,582,46,112,1,1,1 +541,26,956,583,46,113,1,1,1 +542,26,927,584,57,113,1,1,1 +543,26,911,586,55,114,1,1,1 +544,26,895,588,54,115,1,1,1 +545,26,874,585,54,116,1,1,1 +546,26,853,583,55,116,1,1,1 +547,26,834,584,55,115,1,1,1 +548,26,816,585,54,114,1,1,1 +549,26,798,586,53,114,1,1,1 +550,26,779,585,53,116,1,1,1 +551,26,761,584,53,118,1,1,1 +552,26,742,584,54,119,1,1,1 +553,26,724,583,54,121,1,1,1 +554,26,705,583,55,122,1,1,1 +555,26,687,582,55,124,1,1,1 +556,26,669,581,54,126,1,1,1 +557,26,650,581,55,127,1,1,1 +558,26,632,580,55,129,1,1,1 +559,26,613,580,56,130,1,1,1 +560,26,595,579,56,132,1,1,1 +561,26,577,579,56,133,1,1,1 +562,26,560,580,58,133,1,1,1 +563,26,543,581,60,134,1,1,1 +564,26,526,582,62,135,1,1,1 +565,26,510,584,63,135,1,1,1 +566,26,493,585,65,135,1,1,1 +567,26,476,586,67,136,1,1,1 +568,26,459,587,69,137,1,1,1 +569,26,443,589,70,137,1,1,1 +570,26,426,590,70,138,1,1,1 +571,26,410,591,69,140,1,1,1 +572,26,394,593,69,141,1,1,1 +573,26,378,594,68,143,1,1,1 +574,26,362,596,68,143,1,1,1 +575,26,346,597,67,145,1,1,1 +576,26,330,599,67,146,1,1,1 +577,26,314,600,66,148,1,1,1 +578,26,298,602,66,149,1,1,1 +579,26,278,600,71,152,1,1,1 +580,26,258,598,77,155,1,1,1 +581,26,243,597,78,159,1,1,1 +582,26,229,597,78,162,1,1,1 +583,26,208,599,79,164,1,1,1 +584,26,193,601,81,165,1,1,1 +585,26,178,603,83,166,1,1,1 +586,26,163,606,85,167,1,1,1 +587,26,144,610,91,170,1,1,1 +588,26,129,611,93,171,1,1,1 +589,26,114,612,96,173,1,1,1 +590,26,96,613,102,175,1,1,1 +591,26,82,614,103,177,1,1,1 +592,26,67,615,104,179,1,1,1 +593,26,51,616,105,182,1,1,1 +594,26,42,618,102,185,1,1,1 +595,26,28,619,103,189,1,1,1 +596,26,16,622,105,190,1,1,1 +597,26,1,625,105,193,1,1,1 +598,26,-4,637,99,197,1,1,0.95 +599,26,-12,638,95,200,1,1,0.86458 +600,26,-20,640,92,203,1,1,0.77419 +601,26,-32,647,91,203,1,1,0.6413 +602,26,-43,649,89,204,1,1,0.51111 +603,26,-54,652,88,204,1,1,0.38202 +604,26,-68,656,88,204,1,1,0.22472 +569,27,1894,588,51,163,1,1,0.36538 +570,27,1886,588,51,163,1,1,0.46154 +571,27,1878,588,51,163,1,1,0.55769 +572,27,1870,588,52,163,1,1,0.64151 +573,27,1862,588,53,163,1,1,0.62963 +574,27,1854,588,54,163,1,1,0.58182 +575,27,1846,588,55,163,1,1,0.53571 +576,27,1838,588,57,164,1,1,0.5 +577,27,1830,588,58,164,1,1,0.49153 +578,27,1822,588,59,164,1,1,0.5 +579,27,1814,588,60,164,1,1,0.5082 +580,27,1807,589,61,164,1,1,0.51613 +581,27,1802,589,59,163,1,1,0.5 +582,27,1798,589,57,162,1,1,0.48276 +583,27,1793,589,56,161,1,1,0.47368 +584,27,1789,589,53,160,1,1,0.44444 +585,27,1784,589,52,159,1,1,0.49057 +586,27,1780,590,50,157,1,1,0.58824 +587,27,1777,588,52,160,1,1,0.62264 +588,27,1774,586,55,163,1,1,0.66071 +589,27,1771,585,57,165,1,1,0.74138 +590,27,1768,583,60,168,1,1,0.77049 +591,27,1765,581,62,171,1,1,1 +592,27,1763,580,64,173,1,1,1 +593,27,1761,581,67,173,1,1,1 +594,27,1760,582,69,173,1,1,1 +595,27,1758,583,72,173,1,1,0.9726 +596,27,1757,584,75,173,1,1,0.88158 +597,27,1763,582,77,175,1,1,0.88462 +598,27,1766,581,75,177,1,1,0.84211 +599,27,1770,580,72,179,1,1,0.80822 +600,27,1774,580,69,181,1,1,0.75714 +601,27,1783,573,62,184,1,1,0.77778 +602,27,1787,572,59,186,1,1,0.71667 +603,27,1791,571,57,189,1,1,0.67241 +604,27,1794,572,58,187,1,1,0.61017 +605,27,1798,574,58,185,1,1,0.61017 +606,27,1802,575,59,184,1,1,0.61667 +607,27,1806,577,59,182,1,1,0.56566 +608,27,1810,579,60,180,1,1,0.48546 +609,27,1814,585,61,177,1,1,0.39226 +610,27,1818,591,62,175,1,1,0.41486 +611,27,1824,593,62,176,1,1,0.44122 +612,27,1830,596,63,176,1,1,0.47413 +613,27,1835,597,62,181,1,1,0.56968 +614,27,1840,598,62,186,1,1,0.66234 +615,27,1845,602,61,192,1,1,0.83938 +616,27,1850,606,61,198,1,1,0.85759 +617,27,1855,607,61,201,1,1,0.83855 +618,27,1861,609,60,203,1,1,0.80923 +619,27,1866,610,60,206,1,1,0.61749 +620,27,1872,612,60,208,1,1,0.49125 +621,27,1878,614,60,208,1,1,0.18888 +622,27,1884,617,60,208,1,1,0.15962 +623,27,1891,620,60,208,1,1,0.12707 +624,27,1897,623,60,208,1,1,0.10166 +505,28,1896,550,29,79,1,1,0.83333 +506,28,1866,550,30,80,1,1,1 +507,28,1836,551,31,80,1,1,1 +508,28,1806,552,32,81,1,1,1 +509,28,1776,553,33,81,1,1,1 +510,28,1746,554,35,82,1,1,1 +511,28,1716,554,36,83,1,1,1 +512,28,1686,555,37,83,1,1,1 +513,28,1656,556,38,84,1,1,1 +514,28,1626,557,39,84,1,1,0.98118 +515,28,1597,558,40,85,1,1,0.90499 +516,28,1571,557,38,84,1,1,0.88054 +517,28,1545,556,36,83,1,1,0.8536 +518,28,1520,555,34,82,1,1,0.84819 +519,28,1493,553,34,82,1,1,0.80792 +520,28,1466,552,34,82,1,1,0.76523 +521,28,1440,551,34,82,1,1,0.74389 +522,28,1416,549,32,83,1,1,0.75794 +523,28,1392,547,30,84,1,1,0.7685 +524,28,1368,545,28,85,1,1,0.77987 +525,28,1344,544,27,85,1,1,0.59718 +526,28,1320,544,27,85,1,1,0.60382 +527,28,1297,544,27,85,1,1,0.39992 +528,28,1274,544,27,85,1,1,0.53987 +529,28,1250,548,29,79,1,1,0.57167 +530,28,1228,547,28,81,1,1,0.75862 +531,28,1206,547,28,83,1,1,0.62069 +532,28,1183,547,32,83,1,1,0.53391 +533,28,1161,548,36,82,1,1,0.54738 +534,28,1142,548,33,83,1,1,0.56793 +535,28,1123,548,31,84,1,1,0.5 +536,28,1101,547,34,84,1,1,0.54286 +537,28,1079,547,37,84,1,1,0.56223 +538,28,1059,546,36,86,1,1,0.5511 +539,28,1040,546,35,87,1,1,0.53883 +540,28,1021,546,34,88,1,1,0.55441 +541,28,1002,546,33,89,1,1,0.5415 +542,28,984,545,33,90,1,1,0.54202 +543,28,966,545,33,90,1,1,0.51325 +544,28,948,544,33,91,1,1,0.52941 +545,28,930,544,34,92,1,1,0.57143 +546,28,911,543,34,91,1,1,0.54286 +547,28,893,542,34,91,1,1,0.48571 +548,28,875,542,34,90,1,1,0.57143 +549,28,859,540,34,92,1,1,0.57143 +550,28,843,539,34,93,1,1,0.57143 +551,28,827,538,35,94,1,1,0.66667 +552,28,811,537,35,95,1,1,0.75 +553,28,795,536,35,96,1,1,0.83333 +554,28,780,535,35,98,1,1,0.88889 +555,28,765,534,35,97,1,1,1 +556,28,750,534,35,95,1,1,1 +557,28,735,534,35,94,1,1,1 +558,28,720,533,35,93,1,1,1 +559,28,705,533,35,91,1,1,1 +560,28,690,533,36,90,1,1,1 +561,28,675,533,37,90,1,1,0.92366 +562,28,660,534,38,89,1,1,0.90285 +563,28,645,535,40,89,1,1,0.91328 +564,28,632,536,40,89,1,1,0.90515 +565,28,620,537,39,90,1,1,0.91209 +566,28,608,538,38,91,1,1,0.92391 +567,28,596,539,37,92,1,1,0.60838 +568,28,583,538,36,92,1,1,0.52485 +569,28,570,538,35,92,1,1,0.53943 +570,28,558,538,34,92,1,1,0.53917 +571,28,541,537,40,92,1,1,0.5455 +572,28,530,537,39,92,1,1,0.55914 +573,28,519,537,38,93,1,1,0.53137 +574,28,508,537,37,93,1,1,0.58959 +575,28,498,537,35,94,1,1,0.60789 +576,28,487,536,36,95,1,1,0.77083 +577,28,476,536,37,95,1,1,0.80208 +578,28,465,535,38,96,1,1,0.77901 +579,28,455,535,38,97,1,1,0.7326 +580,28,444,534,39,98,1,1,0.60278 +581,28,433,534,40,98,1,1,0.56911 +582,28,423,534,40,99,1,1,0.45439 +583,28,414,534,40,99,1,1,0.35561 +584,28,406,534,40,99,1,1,0.3 +585,28,398,534,40,100,1,1,0.32722 +586,28,390,534,40,100,1,1,0.36585 +587,28,382,534,40,101,1,1,0.39024 +588,28,373,534,41,101,1,1,0.47619 +589,28,365,534,41,101,1,1,0.61905 +590,28,357,534,41,102,1,1,0.66667 +591,28,349,534,41,102,1,1,0.78571 +592,28,341,534,41,103,1,1,0.92857 +593,28,335,534,41,103,1,1,1 +594,28,330,534,41,104,1,1,1 +595,28,324,535,42,104,1,1,1 +596,28,319,535,42,105,1,1,1 +597,28,314,536,42,105,1,1,1 +598,28,310,537,42,105,1,1,1 +599,28,306,538,43,105,1,1,1 +600,28,302,539,44,105,1,1,1 +601,28,299,541,44,105,1,1,1 +602,28,295,540,44,106,1,1,1 +603,28,292,540,44,107,1,1,1 +604,28,292,546,44,104,1,1,1 +605,28,283,545,48,106,1,1,1 +606,28,284,542,51,107,1,1,1 +607,28,281,542,52,107,1,1,1 +608,28,278,543,53,108,1,1,1 +609,28,279,538,49,109,1,1,1 +610,28,276,537,49,109,1,1,1 +611,28,273,536,50,109,1,1,1 +612,28,270,535,51,110,1,1,1 +613,28,267,534,51,110,1,1,1 +614,28,264,533,52,111,1,1,1 +615,28,261,532,52,111,1,1,1 +616,28,258,531,52,112,1,1,1 +617,28,255,529,51,116,1,1,1 +618,28,252,530,51,116,1,1,1 +619,28,250,532,50,116,1,1,1 +620,28,247,533,50,116,1,1,1 +621,28,245,535,49,116,1,1,1 +622,28,242,536,49,116,1,1,1 +623,28,240,538,49,116,1,1,1 +624,28,240,537,48,117,1,1,1 +625,28,237,543,49,117,1,1,1 +626,28,237,539,48,117,1,1,1 +627,28,237,550,50,113,1,1,1 +628,28,236,548,52,114,1,1,1 +629,28,236,551,53,115,1,1,1 +630,28,237,552,54,115,1,1,1 +631,28,239,550,54,118,1,1,1 +632,28,239,554,55,116,1,1,1 +633,28,240,554,54,120,1,1,1 +634,28,241,555,55,117,1,1,1 +635,28,242,553,57,118,1,1,1 +636,28,244,555,56,119,1,1,1 +637,28,246,557,55,120,1,1,1 +638,28,248,559,54,122,1,1,1 +639,28,250,561,53,124,1,1,1 +640,28,253,563,53,126,1,1,1 +641,28,256,564,52,126,1,1,1 +642,28,262,565,48,127,1,1,1 +643,28,263,562,45,132,1,1,1 +644,28,265,568,49,126,1,1,1 +645,28,267,570,50,126,1,1,1 +646,28,269,572,50,126,1,1,1 +647,28,270,569,55,127,1,1,1 +648,28,276,572,52,126,1,1,1 +649,28,280,564,53,125,1,1,1 +650,28,284,564,51,132,1,1,1 +651,28,294,567,50,133,1,1,1 +652,28,299,560,47,128,1,1,1 +653,28,305,562,46,129,1,1,1 +654,28,311,565,45,130,1,1,1 +655,28,318,564,48,131,1,1,1 +656,28,324,575,50,133,1,1,1 +657,28,334,578,52,130,1,1,1 +658,28,338,582,53,129,1,1,1 +659,28,342,598,54,128,1,1,1 +660,28,348,594,54,132,1,1,1 +661,28,357,596,56,130,1,1,1 +662,28,367,598,57,129,1,1,1 +663,28,375,597,58,127,1,1,1 +664,28,384,596,59,125,1,1,1 +665,28,387,598,61,124,1,1,1 +666,28,391,592,68,123,1,1,1 +667,28,394,591,74,123,1,1,1 +668,28,403,590,77,126,1,1,1 +669,28,402,582,93,136,1,1,1 +670,28,415,580,94,133,1,1,1 +671,28,428,580,96,134,1,1,1 +672,28,443,580,89,134,1,1,1 +673,28,458,581,83,133,1,1,1 +674,28,482,579,78,128,1,1,1 +675,28,500,575,74,129,1,1,1 +676,28,512,575,76,134,1,1,1 +677,28,520,572,87,136,1,1,1 +678,28,528,569,92,139,1,1,1 +679,28,540,577,97,143,1,1,1 +680,28,555,572,97,140,1,1,1 +681,28,569,600,97,146,1,1,1 +682,28,591,621,91,140,1,1,1 +683,28,605,594,87,139,1,1,1 +684,28,621,588,83,136,1,1,1 +685,28,648,583,75,143,1,1,1 +686,28,647,577,90,144,1,1,1 +687,28,657,573,92,147,1,1,1 +688,28,668,570,94,150,1,1,1 +689,28,678,568,98,150,1,1,1 +690,28,688,566,102,150,1,1,1 +691,28,702,568,102,151,1,1,1 +692,28,722,573,96,147,1,1,1 +693,28,743,575,90,149,1,1,1 +694,28,770,583,81,143,1,1,1 +695,28,791,587,76,150,1,1,1 +696,28,806,587,79,150,1,1,1 +697,28,817,586,85,151,1,1,1 +698,28,829,586,90,152,1,1,1 +699,28,842,588,95,153,1,1,1 +700,28,858,589,102,161,1,1,1 +701,28,876,596,96,159,1,1,1 +702,28,901,600,90,155,1,1,1 +703,28,924,607,85,155,1,1,1 +704,28,947,614,81,156,1,1,1 +705,28,971,615,73,162,1,1,1 +706,28,979,616,85,166,1,1,1 +707,28,985,612,96,174,1,1,1 +708,28,999,614,106,177,1,1,1 +709,28,1013,613,115,179,1,1,1 +710,28,1028,630,117,176,1,1,1 +711,28,1046,626,116,173,1,1,1 +712,28,1069,633,113,178,1,1,1 +713,28,1097,635,99,174,1,1,1 +714,28,1127,637,97,173,1,1,1 +715,28,1140,638,99,177,1,1,1 +716,28,1154,633,101,185,1,1,1 +717,28,1175,628,103,188,1,1,1 +718,28,1195,625,103,195,1,1,1 +719,28,1206,631,113,198,1,1,1 +720,28,1228,633,116,201,1,1,1 +721,28,1251,640,111,199,1,1,1 +722,28,1276,650,113,197,1,1,1 +723,28,1306,658,106,196,1,1,1 +724,28,1358,666,87,199,1,1,1 +725,28,1373,668,94,203,1,1,1 +726,28,1384,675,109,206,1,1,1 +727,28,1394,671,125,210,1,1,1 +728,28,1411,685,129,214,1,1,1 +729,28,1431,677,153,226,1,1,1 +730,28,1456,686,153,230,1,1,1 +731,28,1484,697,143,226,1,1,1 +732,28,1515,705,125,229,1,1,1 +733,28,1555,707,126,226,1,1,1 +734,28,1593,718,116,230,1,1,1 +735,28,1613,708,127,237,1,1,1 +736,28,1632,710,134,244,1,1,1 +737,28,1659,707,138,248,1,1,1 +738,28,1690,714,137,255,1,1,1 +739,28,1716,718,149,260,1,1,1 +740,28,1751,723,152,262,1,1,1 +741,28,1785,733,152,265,1,1,0.88889 +742,28,1826,748,150,263,1,1,0.62914 +1,29,954,548,81,63,0,3,1 +2,29,955,544,82,63,0,3,1 +3,29,956,546,82,64,0,3,1 +4,29,957,548,83,65,0,3,1 +5,29,958,551,84,65,0,3,1 +6,29,961,561,84,65,0,3,1 +7,29,962,554,85,66,0,3,1 +8,29,962,562,85,66,0,3,1 +9,29,961,563,86,67,0,3,1 +10,29,960,564,87,68,0,3,1 +11,29,959,560,88,69,0,3,1 +12,29,959,557,88,69,0,3,1 +13,29,959,554,88,69,0,3,1 +14,29,959,554,89,70,0,3,1 +15,29,960,555,90,71,0,3,1 +16,29,960,556,90,71,0,3,1 +17,29,960,557,91,71,0,3,1 +18,29,960,558,91,72,0,3,1 +19,29,960,559,92,72,0,3,1 +20,29,961,560,91,72,0,3,1 +21,29,961,561,92,73,0,3,1 +22,29,961,562,92,73,0,3,1 +23,29,961,563,93,73,0,3,1 +24,29,962,564,93,74,0,3,1 +25,29,962,566,94,75,0,3,1 +26,29,962,569,95,76,0,3,1 +27,29,962,572,97,77,0,3,1 +28,29,962,575,98,78,0,3,1 +29,29,963,578,99,79,0,3,1 +30,29,963,581,98,79,0,3,1 +31,29,963,585,98,79,0,3,1 +32,29,963,589,98,79,0,3,1 +33,29,961,575,98,79,0,3,1 +34,29,962,579,104,79,0,3,1 +35,29,963,572,102,81,0,3,1 +36,29,964,566,101,82,0,3,1 +37,29,963,565,102,82,0,3,1 +38,29,963,564,103,82,0,3,1 +39,29,965,567,101,82,0,3,1 +40,29,964,566,104,81,0,3,1 +41,29,963,566,108,80,0,3,1 +42,29,962,567,109,81,0,3,1 +43,29,962,568,110,82,0,3,1 +44,29,962,569,110,83,0,3,1 +45,29,962,571,111,83,0,3,1 +46,29,964,572,112,86,0,3,1 +47,29,966,573,113,90,0,3,1 +48,29,962,576,113,89,0,3,1 +49,29,966,577,111,90,0,3,1 +50,29,964,578,112,89,0,3,1 +51,29,963,582,107,88,0,3,1 +52,29,965,579,112,88,0,3,1 +53,29,965,577,120,90,0,3,1 +54,29,964,578,120,90,0,3,1 +55,29,964,579,119,90,0,3,1 +56,29,964,580,118,91,0,3,1 +57,29,964,580,116,91,0,3,1 +58,29,964,580,115,91,0,3,1 +59,29,964,580,114,92,0,3,1 +60,29,964,580,113,92,0,3,1 +61,29,964,580,112,93,0,3,1 +62,29,962,580,115,93,0,3,1 +63,29,960,580,119,93,0,3,1 +64,29,959,581,122,93,0,3,1 +65,29,957,581,124,94,0,3,1 +66,29,956,582,125,94,0,3,1 +67,29,954,583,125,95,0,3,1 +68,29,953,584,125,97,0,3,1 +69,29,952,585,125,98,0,3,1 +70,29,951,586,125,100,0,3,1 +71,29,948,586,124,100,0,3,1 +72,29,945,586,124,101,0,3,1 +73,29,942,586,128,101,0,3,1 +74,29,938,586,131,101,0,3,1 +75,29,936,586,131,102,0,3,1 +76,29,935,586,131,103,0,3,1 +77,29,931,586,132,104,0,3,1 +78,29,927,586,133,105,0,3,1 +79,29,924,586,133,106,0,3,1 +80,29,920,586,134,107,0,3,1 +81,29,917,586,134,108,0,3,1 +82,29,913,586,135,109,0,3,1 +83,29,910,586,135,110,0,3,1 +84,29,907,587,133,110,0,3,1 +85,29,904,589,132,109,0,3,1 +86,29,901,590,130,109,0,3,1 +87,29,898,592,129,108,0,3,1 +88,29,896,594,127,107,0,3,1 +89,29,891,596,128,106,0,3,1 +90,29,885,598,133,105,0,3,1 +91,29,879,601,138,103,0,3,1 +92,29,873,604,137,104,0,3,1 +93,29,868,607,135,106,0,3,1 +94,29,863,610,133,108,0,3,1 +95,29,858,609,134,109,0,3,1 +96,29,854,609,135,109,0,3,1 +97,29,849,609,136,110,0,3,1 +98,29,845,609,137,110,0,3,1 +99,29,840,609,139,111,0,3,1 +100,29,836,609,139,111,0,3,1 +101,29,831,609,141,111,0,3,1 +102,29,827,609,141,112,0,3,1 +103,29,822,609,143,112,0,3,1 +104,29,818,609,144,113,0,3,1 +105,29,813,608,144,113,0,3,1 +106,29,809,607,143,113,0,3,1 +107,29,805,607,142,112,0,3,1 +108,29,800,606,143,113,0,3,1 +109,29,796,606,142,112,0,3,1 +110,29,792,605,141,112,0,3,1 +111,29,788,605,141,112,0,3,1 +112,29,782,605,141,111,0,3,1 +113,29,777,605,141,111,0,3,1 +114,29,771,605,142,111,0,3,1 +115,29,766,605,141,110,0,3,1 +116,29,761,605,141,110,0,3,1 +117,29,755,605,142,110,0,3,1 +118,29,750,605,141,109,0,3,1 +119,29,744,605,142,109,0,3,1 +120,29,739,605,142,109,0,3,1 +121,29,734,606,142,108,0,3,1 +122,29,728,606,143,108,0,3,1 +123,29,723,606,143,108,0,3,1 +124,29,717,606,144,108,0,3,1 +125,29,712,606,144,108,0,3,1 +126,29,707,606,144,109,0,3,1 +127,29,701,606,145,109,0,3,1 +128,29,696,606,145,109,0,3,1 +129,29,690,606,146,109,0,3,1 +130,29,685,606,146,109,0,3,1 +131,29,680,606,146,110,0,3,1 +132,29,675,604,146,110,0,3,1 +133,29,671,603,145,110,0,3,1 +134,29,666,602,145,110,0,3,1 +135,29,662,601,145,110,0,3,1 +136,29,658,600,144,110,0,3,1 +137,29,653,598,144,111,0,3,1 +138,29,649,597,144,111,0,3,1 +139,29,644,596,144,111,0,3,1 +140,29,640,595,143,111,0,3,1 +141,29,636,594,143,111,0,3,1 +142,29,631,594,143,110,0,3,1 +143,29,627,594,143,109,0,3,1 +144,29,623,594,142,108,0,3,1 +145,29,619,594,142,107,0,3,1 +146,29,615,595,142,106,0,3,1 +147,29,611,595,141,105,0,3,1 +148,29,607,595,141,104,0,3,1 +149,29,603,595,140,103,0,3,1 +150,29,599,595,140,102,0,3,1 +151,29,595,596,140,101,0,3,1 +152,29,584,598,130,103,0,3,1 +153,29,579,597,132,102,0,3,1 +154,29,575,596,133,102,0,3,1 +155,29,570,595,136,102,0,3,1 +156,29,566,594,137,102,0,3,1 +157,29,562,594,139,101,0,3,1 +158,29,557,593,140,108,0,3,1 +159,29,553,593,138,105,0,3,1 +160,29,549,593,136,102,0,3,1 +161,29,546,593,133,100,0,3,1 +162,29,541,592,133,101,0,3,1 +163,29,537,591,133,102,0,3,1 +164,29,533,591,132,102,0,3,1 +165,29,529,590,132,103,0,3,1 +166,29,524,589,133,104,0,3,1 +167,29,520,589,132,104,0,3,1 +168,29,516,588,132,105,0,3,1 +169,29,512,588,132,105,0,3,1 +170,29,509,588,132,103,0,3,0.99436 +171,29,507,588,131,101,0,3,0.9893 +172,29,505,588,131,100,0,3,0.98447 +173,29,501,586,132,100,0,3,0.98124 +174,29,498,585,131,98,0,3,0.98209 +175,29,495,584,131,96,0,3,0.98243 +176,29,493,583,130,94,0,3,0.98264 +177,29,490,583,130,94,0,3,0.98072 +178,29,488,583,129,94,0,3,0.97862 +179,29,486,583,128,94,0,3,0.97348 +180,29,483,584,128,93,0,3,0.96883 +181,29,481,584,127,93,0,3,0.96509 +182,29,479,584,126,93,0,3,0.95979 +183,29,477,584,126,94,0,3,0.95358 +184,29,474,585,126,93,0,3,0.94589 +185,29,472,585,125,93,0,3,0.94259 +186,29,470,585,124,93,0,3,0.93566 +187,29,467,586,124,92,0,3,0.92645 +188,29,465,586,123,92,0,3,0.92256 +189,29,463,586,123,93,0,3,0.90992 +190,29,461,586,122,93,0,3,0.90374 +191,29,458,587,122,92,0,3,0.89422 +192,29,456,587,121,92,0,3,0.88948 +193,29,454,587,120,92,0,3,0.87737 +194,29,451,588,120,91,0,3,0.8719 +195,29,449,588,120,92,0,3,0.86137 +196,29,447,588,119,92,0,3,0.85591 +197,29,445,588,118,92,0,3,0.85037 +198,29,442,589,118,91,0,3,0.84436 +199,29,440,589,117,91,0,3,0.83861 +200,29,438,589,116,91,0,3,0.83055 +201,29,436,590,116,91,0,3,0.81652 +202,29,434,590,116,90,0,3,0.81516 +203,29,433,590,116,90,0,3,0.80614 +204,29,432,590,115,89,0,3,0.80393 +205,29,431,590,115,89,0,3,0.79511 +206,29,430,590,114,89,0,3,0.78667 +207,29,428,590,115,88,0,3,0.7869 +208,29,427,590,114,88,0,3,0.77303 +209,29,426,590,114,88,0,3,0.76854 +210,29,425,590,113,87,0,3,0.76156 +211,29,424,590,113,87,0,3,0.75698 +212,29,423,591,113,86,0,3,0.75187 +213,29,423,590,112,86,0,3,0.74499 +214,29,423,590,112,85,0,3,0.74645 +215,29,423,590,112,84,0,3,0.74118 +216,29,423,589,112,84,0,3,0.75294 +217,29,423,589,111,84,0,3,0.75294 +218,29,423,589,111,83,0,3,0.75 +219,29,423,588,111,83,0,3,0.7619 +220,29,423,588,111,82,0,3,0.77108 +221,29,423,588,111,82,0,3,0.77108 +222,29,423,588,111,82,0,3,0.77108 +223,29,424,588,111,82,0,3,0.77108 +224,29,425,589,110,81,0,3,0.76829 +225,29,426,589,110,81,0,3,0.76829 +226,29,427,589,109,81,0,3,0.76829 +227,29,428,590,109,80,0,3,0.76543 +228,29,430,589,107,80,0,3,0.77778 +229,29,432,588,106,80,0,3,0.80247 +230,29,434,587,105,80,0,3,0.79012 +231,29,437,586,103,80,0,3,0.77778 +232,29,438,586,103,77,0,3,0.78205 +233,29,439,587,104,74,0,3,0.77333 +234,29,442,587,98,72,0,3,0.76712 +235,29,440,583,101,73,0,3,0.78378 +236,29,443,581,100,73,0,3,0.78378 +237,29,446,580,100,72,0,3,0.78082 +238,29,449,579,100,71,0,3,0.79167 +239,29,452,577,101,71,0,3,0.81944 +240,29,456,576,101,71,0,3,0.83333 +241,29,460,577,92,72,0,3,0.79452 +242,29,463,576,94,70,0,3,0.83099 +243,29,466,575,94,70,0,3,0.83099 +244,29,470,575,93,70,0,3,0.83099 +245,29,474,575,92,69,0,3,0.87143 +246,29,477,575,92,69,0,3,0.9 +247,29,481,575,91,68,0,3,0.88406 +248,29,485,575,90,68,0,3,0.85507 +249,29,489,575,90,68,0,3,0.84058 +250,29,494,574,90,70,0,3,0.83099 +251,29,499,573,90,73,0,3,0.81081 +252,29,504,573,90,72,0,3,0.82192 +253,29,510,573,89,71,0,3,0.84722 +254,29,515,573,89,70,0,3,0.85915 +255,29,521,573,88,69,0,3,0.87143 +256,29,526,573,88,68,0,3,0.88406 +257,29,532,574,87,67,0,3,0.89706 +258,29,537,573,87,66,0,3,0.92537 +259,29,543,572,87,66,0,3,0.9403 +260,29,549,571,86,66,0,3,0.95522 +261,29,555,570,86,66,0,3,0.97015 +262,29,561,569,85,66,0,3,0.98507 +263,29,567,568,85,66,0,3,1 +264,29,573,567,84,66,0,3,1 +265,29,579,566,84,66,0,3,1 +266,29,584,566,84,64,0,3,1 +267,29,590,565,84,64,0,3,1 +268,29,596,564,83,64,0,3,1 +269,29,602,563,83,64,0,3,1 +270,29,608,562,82,64,0,3,1 +271,29,614,561,82,64,0,3,1 +272,29,620,560,81,64,0,3,1 +273,29,626,559,81,64,0,3,1 +274,29,632,559,81,63,0,3,1 +275,29,638,558,80,63,0,3,1 +276,29,644,557,80,63,0,3,1 +277,29,651,557,79,63,0,3,1 +278,29,657,557,79,63,0,3,1 +279,29,663,557,80,63,0,3,1 +280,29,669,556,79,63,0,3,1 +281,29,675,556,79,63,0,3,1 +282,29,681,556,78,62,0,3,1 +283,29,688,555,77,63,0,3,1 +284,29,694,555,76,62,0,3,1 +285,29,700,555,76,62,0,3,1 +286,29,707,555,75,62,0,3,1 +287,29,711,555,75,62,0,3,1 +288,29,715,555,75,62,0,3,1 +289,29,720,556,74,61,0,3,1 +290,29,730,553,74,61,0,3,1 +291,29,735,552,74,61,0,3,1 +292,29,740,552,74,60,0,3,1 +293,29,746,551,73,60,0,3,1 +294,29,751,551,73,59,0,3,1 +295,29,757,551,72,59,0,3,1 +296,29,762,551,72,58,0,3,1 +297,29,768,551,71,58,0,3,1 +298,29,773,551,71,58,0,3,1 +299,29,779,551,70,58,0,3,1 +300,29,785,552,70,57,0,3,1 +301,29,788,556,69,56,0,3,1 +302,29,794,553,69,55,0,3,1 +303,29,798,553,69,56,0,3,1 +304,29,803,554,69,56,0,3,1 +305,29,807,555,69,56,0,3,1 +306,29,812,556,69,56,0,3,1 +307,29,816,556,69,56,0,3,1 +308,29,820,556,69,56,0,3,1 +309,29,824,556,69,56,0,3,1 +310,29,828,556,69,56,0,3,1 +311,29,833,557,69,56,0,3,1 +312,29,837,557,69,56,0,3,1 +313,29,841,557,69,56,0,3,1 +314,29,845,557,69,56,0,3,1 +315,29,849,557,69,56,0,3,1 +316,29,854,558,69,56,0,3,1 +317,29,857,556,69,56,0,3,1 +318,29,861,555,68,55,0,3,1 +319,29,864,554,68,54,0,3,1 +320,29,868,552,67,55,0,3,1 +321,29,872,551,66,54,0,3,1 +322,29,875,550,66,53,0,3,1 +323,29,879,548,65,54,0,3,1 +324,29,882,547,65,53,0,3,1 +325,29,886,546,64,52,0,3,1 +326,29,890,544,63,53,0,3,1 +327,29,893,543,63,52,0,3,1 +328,29,897,542,62,51,0,3,1 +329,29,901,541,61,51,0,3,1 +330,29,902,539,60,51,0,3,1 +331,29,903,538,60,50,0,3,1 +332,29,904,536,59,50,0,3,1 +333,29,905,535,59,49,0,3,1 +334,29,908,532,62,48,0,3,1 +335,29,909,530,62,48,0,3,1 +336,29,911,529,62,47,0,3,1 +337,29,913,527,61,47,0,3,1 +338,29,915,526,61,47,0,3,1 +339,29,916,525,61,47,0,3,1 +340,29,918,525,60,46,0,3,1 +341,29,918,527,57,46,0,3,1 +342,29,918,529,55,47,0,3,1 +343,29,920,531,63,47,0,3,1 +344,29,923,533,59,47,0,3,1 +345,29,926,536,55,47,0,3,1 +346,29,926,538,61,49,0,3,1 +347,29,925,542,60,49,0,3,1 +348,29,926,542,60,49,0,3,1 +349,29,927,542,60,50,0,3,1 +350,29,928,543,60,50,0,3,1 +351,29,929,542,60,48,0,3,1 +352,29,932,543,59,42,0,3,1 +353,29,933,545,59,45,0,3,1 +354,29,933,545,59,45,0,3,1 +355,29,934,545,59,46,0,3,1 +356,29,934,545,59,47,0,3,1 +357,29,935,546,59,47,0,3,1 +358,29,935,546,58,46,0,3,1 +359,29,936,546,56,46,0,3,1 +360,29,937,547,54,45,0,3,1 +361,29,937,549,55,44,0,3,1 +362,29,938,550,55,44,0,3,1 +363,29,940,552,54,44,0,3,1 +364,29,939,553,59,43,0,3,1 +365,29,939,556,52,45,0,3,1 +366,29,939,557,53,44,0,3,1 +367,29,940,558,54,43,0,3,1 +368,29,941,559,55,43,0,3,1 +369,29,942,561,54,43,0,3,1 +370,29,944,563,52,43,0,3,1 +371,29,943,563,53,42,0,3,1 +372,29,943,563,53,42,0,3,1 +373,29,943,563,53,42,0,3,1 +374,29,944,564,52,42,0,3,1 +375,29,943,562,51,43,0,3,1 +376,29,942,561,51,43,0,3,1 +377,29,941,560,51,43,0,3,1 +378,29,941,559,50,43,0,3,1 +379,29,940,558,52,42,0,3,1 +380,29,937,555,52,42,0,3,1 +381,29,934,553,53,41,0,3,1 +382,29,932,551,53,41,0,3,1 +383,29,930,548,52,41,0,3,1 +384,29,929,545,50,42,0,3,1 +385,29,926,541,52,41,0,3,1 +386,29,924,542,51,41,0,3,1 +387,29,922,538,51,42,0,3,1 +388,29,918,537,50,42,0,3,1 +389,29,914,536,49,42,0,3,1 +390,29,910,536,48,41,0,3,1 +391,29,905,536,50,41,0,3,1 +392,29,900,536,53,41,0,3,1 +393,29,896,532,49,41,0,3,1 +394,29,891,531,49,41,0,3,1 +395,29,882,530,50,42,0,3,1 +396,29,877,528,51,40,0,3,1 +397,29,870,530,50,39,0,3,1 +398,29,863,528,52,39,0,3,1 +399,29,856,528,51,37,0,3,1 +400,29,849,528,50,35,0,3,1 +401,29,842,524,49,40,0,3,1 +402,29,835,524,46,40,0,3,1 +403,29,827,523,50,39,0,3,1 +404,29,817,523,50,39,0,3,1 +405,29,810,524,49,38,0,3,1 +406,29,799,523,49,36,0,3,1 +407,29,789,523,49,34,0,3,1 +408,29,779,523,48,33,0,3,1 +409,29,769,524,49,33,0,3,1 +410,29,761,523,48,33,0,3,1 +411,29,749,523,46,34,0,3,1 +412,29,738,523,44,35,0,3,1 +413,29,725,521,48,34,0,3,1 +414,29,712,521,48,33,0,3,1 +415,29,700,521,48,32,0,3,1 +416,29,687,520,46,33,0,3,1 +417,29,674,519,45,34,0,3,1 +418,29,661,518,44,35,0,3,1 +419,29,647,515,43,34,0,3,1 +420,29,633,512,43,34,0,3,1 +421,29,618,514,43,33,0,3,1 +422,29,601,512,43,33,0,3,1 +423,29,584,510,43,34,0,3,1 +424,29,567,508,43,35,0,3,1 +425,29,551,506,42,36,0,3,1 +426,29,534,506,43,32,0,3,1 +427,29,517,507,42,34,0,3,1 +428,29,498,507,42,34,0,3,1 +429,29,479,507,42,34,0,3,1 +430,29,460,508,43,34,0,3,1 +431,29,440,510,45,36,0,3,0.73913 +432,29,421,512,41,37,0,3,0.35714 +433,29,402,511,41,36,0,3,0 +434,29,377,514,41,36,0,3,0 +435,29,351,511,41,36,0,3,0 +436,29,331,509,41,37,0,3,0 +437,29,319,510,41,36,0,3,0 +438,29,307,512,41,35,0,3,0.47619 +439,29,283,511,41,35,0,3,1 +440,29,259,511,42,34,0,3,1 +441,29,238,510,41,34,0,3,1 +442,29,218,509,40,34,0,3,1 +443,29,194,509,42,35,0,3,1 +444,29,172,511,42,35,0,3,1 +445,29,148,511,42,34,0,3,1 +446,29,124,511,43,34,0,3,1 +447,29,100,509,43,34,0,3,1 +448,29,76,508,43,34,0,3,1 +449,29,51,509,43,33,0,3,1 +450,29,25,504,43,33,0,3,1 +451,29,2,504,41,34,0,3,1 +1,30,1077,546,112,109,0,3,1 +2,30,1079,543,113,112,0,3,1 +3,30,1082,540,113,115,0,3,1 +4,30,1085,537,113,119,0,3,1 +5,30,1084,537,114,123,0,3,1 +6,30,1090,546,115,117,0,3,1 +7,30,1088,548,117,109,0,3,1 +8,30,1090,552,117,109,0,3,1 +9,30,1092,557,118,109,0,3,1 +10,30,1094,562,119,109,0,3,1 +11,30,1094,561,120,110,0,3,1 +12,30,1095,560,120,111,0,3,1 +13,30,1096,559,121,113,0,3,1 +14,30,1097,558,121,114,0,3,1 +15,30,1097,558,123,115,0,3,1 +16,30,1098,557,123,116,0,3,1 +17,30,1099,556,124,118,0,3,1 +18,30,1100,555,124,119,0,3,1 +19,30,1101,555,125,120,0,3,1 +20,30,1102,555,126,124,0,3,1 +21,30,1103,556,127,127,0,3,1 +22,30,1105,557,127,130,0,3,1 +23,30,1106,558,128,133,0,3,1 +24,30,1107,559,129,136,0,3,1 +25,30,1109,560,130,139,0,3,1 +26,30,1109,562,132,140,0,3,1 +27,30,1109,565,134,141,0,3,1 +28,30,1109,568,136,141,0,3,1 +29,30,1110,571,138,142,0,3,1 +30,30,1113,574,137,143,0,3,1 +31,30,1116,578,137,144,0,3,1 +32,30,1119,582,137,145,0,3,1 +33,30,1120,576,138,147,0,3,1 +34,30,1121,571,139,148,0,3,1 +35,30,1123,566,139,149,0,3,1 +36,30,1119,563,144,150,0,3,1 +37,30,1123,562,142,151,0,3,1 +38,30,1127,562,141,152,0,3,1 +39,30,1127,564,144,153,0,3,1 +40,30,1127,566,147,154,0,3,1 +41,30,1127,568,150,155,0,3,1 +42,30,1128,571,152,156,0,3,1 +43,30,1129,572,153,157,0,3,1 +44,30,1131,574,153,158,0,3,1 +45,30,1133,575,153,160,0,3,1 +46,30,1135,577,153,161,0,3,1 +47,30,1136,578,155,162,0,3,1 +48,30,1138,580,155,163,0,3,1 +49,30,1140,581,155,165,0,3,1 +50,30,1142,583,155,166,0,3,1 +51,30,1144,585,156,167,0,3,1 +52,30,1139,581,164,172,0,3,1 +53,30,1147,579,159,178,0,3,1 +54,30,1148,579,160,180,0,3,1 +55,30,1150,580,161,182,0,3,1 +56,30,1151,581,163,183,0,3,1 +57,30,1153,582,164,185,0,3,1 +58,30,1152,582,166,186,0,3,1 +59,30,1151,583,169,186,0,3,1 +60,30,1151,583,170,188,0,3,1 +61,30,1150,584,173,188,0,3,1 +62,30,1150,584,174,190,0,3,1 +63,30,1149,585,177,190,0,3,1 +64,30,1149,586,179,191,0,3,1 +65,30,1148,586,181,193,0,3,1 +66,30,1147,587,183,195,0,3,1 +67,30,1146,587,185,198,0,3,1 +68,30,1146,588,186,200,0,3,1 +69,30,1145,589,188,201,0,3,1 +70,30,1144,589,190,204,0,3,1 +71,30,1143,590,192,206,0,3,1 +72,30,1143,591,193,208,0,3,1 +73,30,1141,591,195,210,0,3,1 +74,30,1139,592,197,211,0,3,1 +75,30,1137,593,200,212,0,3,1 +76,30,1147,597,186,218,0,3,1 +77,30,1141,597,193,219,0,3,1 +78,30,1135,597,201,221,0,3,1 +79,30,1130,598,208,222,0,3,1 +80,30,1127,598,209,224,0,3,1 +81,30,1125,599,210,226,0,3,1 +82,30,1122,600,211,228,0,3,1 +83,30,1120,601,212,230,0,3,1 +84,30,1118,603,212,231,0,3,1 +85,30,1116,606,212,231,0,3,1 +86,30,1113,609,213,233,0,3,1 +87,30,1110,612,214,236,0,3,1 +88,30,1107,615,215,238,0,3,1 +89,30,1104,619,217,240,0,3,1 +90,30,1101,622,218,242,0,3,1 +91,30,1098,625,219,245,0,3,1 +92,30,1095,628,220,247,0,3,1 +93,30,1093,632,221,249,0,3,1 +94,30,1088,633,223,250,0,3,1 +95,30,1083,634,226,252,0,3,1 +96,30,1078,635,228,254,0,3,1 +97,30,1074,636,230,256,0,3,1 +98,30,1069,637,233,257,0,3,1 +99,30,1064,638,235,259,0,3,1 +100,30,1059,639,238,261,0,3,1 +101,30,1055,641,240,262,0,3,1 +102,30,1054,643,238,264,0,3,1 +103,30,1054,645,236,267,0,3,1 +104,30,1042,646,249,263,0,3,1 +105,30,1038,647,249,265,0,3,1 +106,30,1035,648,248,268,0,3,1 +107,30,1031,649,249,270,0,3,1 +108,30,1028,650,248,273,0,3,1 +109,30,1024,651,249,275,0,3,1 +110,30,1021,652,248,278,0,3,1 +111,30,1018,653,248,281,0,3,1 +112,30,1011,654,250,282,0,3,1 +113,30,1005,655,251,284,0,3,1 +114,30,999,656,252,286,0,3,1 +115,30,992,657,254,287,0,3,1 +116,30,986,658,255,289,0,3,1 +117,30,980,659,256,291,0,3,1 +118,30,974,660,258,293,0,3,1 +119,30,969,657,259,295,0,3,1 +120,30,964,654,261,297,0,3,1 +121,30,952,654,273,300,0,3,1 +122,30,946,655,272,301,0,3,1 +123,30,941,656,271,303,0,3,1 +124,30,936,657,269,304,0,3,1 +125,30,931,658,268,306,0,3,1 +126,30,925,659,268,305,0,3,1 +127,30,919,660,269,305,0,3,1 +128,30,913,661,270,304,0,3,1 +129,30,907,662,271,304,0,3,1 +130,30,901,663,271,303,0,3,1 +131,30,895,664,272,303,0,3,1 +132,30,889,665,273,302,0,3,1 +133,30,883,666,274,302,0,3,1 +134,30,877,667,274,301,0,3,1 +135,30,871,668,275,301,0,3,1 +136,30,865,669,276,300,0,3,1 +137,30,859,670,277,300,0,3,1 +138,30,853,672,278,299,0,3,1 +139,30,847,670,278,299,0,3,1 +140,30,841,669,279,298,0,3,1 +141,30,835,668,280,297,0,3,1 +142,30,829,667,281,297,0,3,1 +143,30,821,667,283,297,0,3,1 +144,30,813,668,286,296,0,3,1 +145,30,806,668,288,296,0,3,1 +146,30,798,669,291,296,0,3,1 +147,30,791,669,293,296,0,3,1 +148,30,783,670,296,295,0,3,1 +149,30,776,671,298,295,0,3,1 +150,30,770,670,295,295,0,3,1 +151,30,765,670,291,295,0,3,1 +152,30,760,670,287,295,0,3,1 +153,30,755,670,283,294,0,3,1 +154,30,750,670,279,294,0,3,1 +155,30,745,670,275,294,0,3,1 +156,30,735,669,278,299,0,3,1 +157,30,725,668,281,305,0,3,1 +158,30,715,667,284,311,0,3,1 +159,30,708,666,283,311,0,3,1 +160,30,702,666,282,310,0,3,1 +161,30,695,666,281,309,0,3,1 +162,30,689,666,280,308,0,3,1 +163,30,683,666,278,307,0,3,1 +164,30,676,666,278,306,0,3,1 +165,30,670,666,276,305,0,3,1 +166,30,664,666,275,304,0,3,1 +167,30,657,666,274,303,0,3,1 +168,30,651,666,273,302,0,3,1 +169,30,645,666,272,301,0,3,1 +170,30,639,666,273,297,0,3,1 +171,30,633,666,275,294,0,3,1 +172,30,628,666,276,291,0,3,1 +173,30,622,666,274,290,0,3,1 +174,30,617,666,271,289,0,3,1 +175,30,612,666,268,288,0,3,1 +176,30,606,666,266,287,0,3,1 +177,30,601,666,263,286,0,3,1 +178,30,596,666,261,286,0,3,1 +179,30,590,665,261,286,0,3,1 +180,30,585,664,260,286,0,3,1 +181,30,579,664,260,285,0,3,1 +182,30,574,663,259,285,0,3,1 +183,30,569,663,258,284,0,3,1 +184,30,563,662,258,284,0,3,1 +185,30,558,662,257,283,0,3,1 +186,30,553,661,256,283,0,3,1 +187,30,547,660,256,283,0,3,1 +188,30,542,660,255,282,0,3,1 +189,30,537,659,254,282,0,3,1 +190,30,531,659,254,281,0,3,1 +191,30,526,658,253,281,0,3,1 +192,30,521,658,253,281,0,3,1 +193,30,515,657,253,281,0,3,1 +194,30,510,657,253,280,0,3,1 +195,30,505,657,253,280,0,3,1 +196,30,500,657,252,279,0,3,1 +197,30,495,657,252,279,0,3,1 +198,30,490,657,252,278,0,3,1 +199,30,485,657,252,278,0,3,1 +200,30,479,657,252,277,0,3,1 +201,30,474,657,252,277,0,3,1 +202,30,469,657,252,276,0,3,1 +203,30,464,657,252,276,0,3,1 +204,30,459,657,251,275,0,3,1 +205,30,454,657,251,275,0,3,1 +206,30,449,657,251,274,0,3,1 +207,30,444,657,251,274,0,3,1 +208,30,441,656,251,274,0,3,1 +209,30,438,656,251,273,0,3,1 +210,30,435,655,251,273,0,3,1 +211,30,432,655,251,272,0,3,1 +212,30,430,655,250,271,0,3,1 +213,30,427,654,250,271,0,3,1 +214,30,424,654,250,270,0,3,1 +215,30,421,653,250,270,0,3,1 +216,30,418,653,250,269,0,3,1 +217,30,416,653,250,269,0,3,1 +218,30,414,652,253,268,0,3,1 +219,30,413,652,255,267,0,3,1 +220,30,411,652,258,265,0,3,1 +221,30,410,652,260,264,0,3,1 +222,30,408,652,259,264,0,3,1 +223,30,407,652,257,264,0,3,1 +224,30,406,652,256,264,0,3,1 +225,30,405,652,254,264,0,3,1 +226,30,403,652,253,264,0,3,1 +227,30,402,652,252,264,0,3,1 +228,30,401,652,250,264,0,3,1 +229,30,400,653,249,263,0,3,1 +230,30,398,651,252,262,0,3,1 +231,30,397,649,254,262,0,3,1 +232,30,396,647,256,261,0,3,1 +233,30,395,645,258,261,0,3,1 +234,30,393,643,261,261,0,3,1 +235,30,392,641,263,260,0,3,1 +236,30,391,639,265,260,0,3,1 +237,30,390,637,267,260,0,3,1 +238,30,394,636,268,260,0,3,1 +239,30,399,636,268,259,0,3,1 +240,30,404,636,268,259,0,3,1 +241,30,406,635,269,257,0,3,1 +242,30,408,635,271,255,0,3,1 +243,30,410,634,272,254,0,3,1 +244,30,413,634,273,252,0,3,1 +245,30,417,636,274,252,0,3,1 +246,30,422,638,274,252,0,3,1 +247,30,425,636,275,253,0,3,1 +248,30,429,634,275,255,0,3,1 +249,30,433,633,275,256,0,3,1 +250,30,439,633,277,256,0,3,1 +251,30,445,633,279,256,0,3,1 +252,30,452,633,280,257,0,3,1 +253,30,458,634,282,256,0,3,1 +254,30,464,634,284,256,0,3,1 +255,30,471,634,285,257,0,3,1 +256,30,477,634,287,257,0,3,1 +257,30,484,635,289,257,0,3,1 +258,30,492,635,292,256,0,3,1 +259,30,501,635,295,255,0,3,1 +260,30,509,635,298,255,0,3,1 +261,30,518,635,301,254,0,3,1 +262,30,526,635,304,254,0,3,1 +263,30,535,635,307,253,0,3,1 +264,30,543,635,310,253,0,3,1 +265,30,552,635,313,252,0,3,1 +266,30,560,635,316,252,0,3,1 +267,30,569,635,319,251,0,3,1 +268,30,578,636,322,250,0,3,1 +269,30,590,633,323,250,0,3,1 +270,30,602,631,324,249,0,3,1 +271,30,614,629,325,249,0,3,1 +272,30,625,628,329,248,0,3,1 +273,30,637,627,332,247,0,3,1 +274,30,649,627,336,245,0,3,1 +275,30,661,626,339,244,0,3,1 +276,30,673,626,343,243,0,3,1 +277,30,688,632,368,238,0,3,1 +278,30,702,632,339,237,0,3,1 +279,30,717,632,346,238,0,3,1 +280,30,729,630,352,240,0,3,1 +281,30,742,629,357,241,0,3,1 +282,30,754,627,363,243,0,3,1 +283,30,767,626,368,245,0,3,1 +284,30,782,624,370,247,0,3,1 +285,30,798,623,372,249,0,3,1 +286,30,814,622,374,251,0,3,1 +287,30,830,620,376,253,0,3,1 +288,30,846,619,378,255,0,3,1 +289,30,862,618,380,257,0,3,1 +290,30,878,619,386,253,0,3,1 +291,30,894,621,392,249,0,3,1 +292,30,912,623,392,247,0,3,1 +293,30,930,624,395,248,0,3,1 +294,30,948,625,399,249,0,3,1 +295,30,966,626,403,250,0,3,1 +296,30,985,628,406,250,0,3,1 +297,30,1003,627,409,251,0,3,1 +298,30,1021,627,413,251,0,3,1 +299,30,1039,627,417,252,0,3,1 +300,30,1058,626,424,253,0,3,1 +301,30,1078,626,430,253,0,3,1 +302,30,1099,627,428,254,0,3,1 +303,30,1119,629,432,257,0,3,1 +304,30,1140,631,436,261,0,3,1 +305,30,1161,633,440,265,0,3,1 +306,30,1183,632,446,266,0,3,1 +307,30,1206,632,451,267,0,3,1 +308,30,1229,632,456,267,0,3,1 +309,30,1251,631,462,269,0,3,1 +310,30,1274,631,467,269,0,3,1 +311,30,1297,631,472,270,0,3,1 +312,30,1321,631,465,272,0,3,1 +313,30,1354,631,469,273,0,3,1 +314,30,1373,631,481,275,0,3,1 +315,30,1396,635,487,268,0,3,1 +316,30,1419,640,494,261,0,3,1 +317,30,1446,637,494,265,0,3,0.9596 +318,30,1474,634,493,269,0,3,0.90486 +319,30,1501,631,493,274,0,3,0.8502 +320,30,1529,628,492,278,0,3,0.79513 +321,30,1557,626,492,282,0,3,0.73834 +322,30,1585,628,492,279,0,3,0.68154 +323,30,1613,631,493,275,0,3,0.62348 +324,30,1642,634,493,271,0,3,0.56478 +325,30,1670,636,493,268,0,3,0.5081 +326,30,1698,639,494,264,0,3,0.45051 +327,30,1727,642,494,261,0,3,0.39192 +328,30,1757,642,494,261,0,3,0.33131 +329,30,1788,642,494,261,0,3,0.26869 +330,30,1819,642,494,261,0,3,0.20606 +331,30,1850,642,494,261,0,3,0.14343 +31,31,592,569,26,62,1,1,0 +32,31,588,564,26,62,1,1,0 +33,31,584,559,26,63,1,1,0.37037 +16,32,1564,511,22,40,1,1,0.34146 +17,32,1561,507,20,41,1,1,0.40476 +18,32,1562,506,19,44,1,1,0.4 +19,32,1563,506,19,46,1,1,0.3617 +20,32,1564,506,19,48,1,1,0.34694 +21,32,1566,506,18,50,1,1,0.35294 +22,32,1565,508,20,39,1,1,0.49643 +23,32,1568,507,19,41,1,1,0.73929 +24,32,1569,506,19,50,1,1,0.68627 +25,32,1569,513,19,50,1,1,0.61176 +26,32,1570,515,19,44,1,1,0.71667 +27,32,1569,516,24,47,1,1,0.76667 +28,32,1570,516,18,52,1,1,0.8858 +29,32,1570,523,23,49,1,1,0.83583 +30,32,1571,522,19,50,1,1,0.9 +31,32,1573,526,18,48,1,1,0.85392 +32,32,1572,529,19,46,1,1,0.71915 +33,32,1573,518,19,46,1,1,0.56596 +34,32,1574,519,19,46,1,1,0.35532 +35,32,1574,515,19,46,1,1,0.20213 +36,32,1575,511,19,46,1,1,0.18723 +37,32,1577,510,19,46,1,1,0.11489 +38,32,1576,508,19,46,1,1,0.16277 +39,32,1579,509,19,46,1,1,0.067021 +40,32,1579,506,20,46,1,1,0.25735 +41,32,1579,508,20,46,1,1,0.29382 +42,32,1580,510,20,46,1,1,0.37791 +43,32,1584,512,21,46,1,1,0.63636 +44,32,1586,512,21,46,1,1,0.40909 +45,32,1586,512,21,46,1,1,0.51838 +46,32,1589,513,21,46,1,1,0.51257 +47,32,1587,518,21,46,1,1,0.54545 +48,32,1582,516,21,49,1,1,0.51909 +49,32,1584,517,22,48,1,1,0.54392 +50,32,1587,519,22,46,1,1,0.69565 +51,32,1586,524,22,46,1,1,0.52729 +52,32,1586,524,22,46,1,1,0.36355 +53,32,1586,524,22,46,1,1,0.16651 +54,32,1586,523,22,46,1,1,0.077706 +55,32,1586,522,22,46,1,1,0.032377 +56,32,1586,521,22,47,1,1,0.028986 +57,32,1587,520,22,47,1,1,0.016304 +58,32,1587,519,22,48,1,1,0.0035492 +59,32,1588,519,22,47,1,1,0 +60,32,1588,518,22,48,1,1,0 +61,32,1589,517,22,48,1,1,0 +62,32,1589,516,22,49,1,1,0 +63,32,1589,515,22,49,1,1,0.2887 +64,32,1590,515,22,49,1,1,0.024348 +65,32,1590,514,22,49,1,1,0.024348 +66,32,1591,513,22,50,1,1,0.44757 +67,32,1591,512,22,50,1,1,0.11083 +68,32,1592,512,22,50,1,1,0.13043 +69,32,1594,520,22,49,1,1,0.086957 +70,32,1592,518,23,49,1,1,0 +71,32,1590,518,23,49,1,1,0 +72,32,1588,519,24,48,1,1,0.052245 +73,32,1586,520,23,50,1,1,0.78922 +74,32,1585,518,23,52,1,1,0.86164 +75,32,1586,522,20,49,1,1,1 +76,32,1583,519,20,51,1,1,0.14286 +77,32,1580,519,21,50,1,1,0.22727 +78,32,1578,519,22,50,1,1,0.30435 +79,32,1576,519,23,49,1,1,0.375 +80,32,1574,519,24,49,1,1,0.48 +81,32,1572,519,25,49,1,1,0.53846 +82,32,1569,518,24,50,1,1,0.52 +83,32,1566,517,24,51,1,1,1 +84,32,1563,517,24,51,1,1,1 +85,32,1560,516,24,52,1,1,1 +86,32,1557,516,24,53,1,1,1 +87,32,1555,518,24,51,1,1,1 +88,32,1553,520,25,50,1,1,1 +89,32,1550,521,25,50,1,1,1 +90,32,1547,522,25,50,1,1,0.80769 +91,32,1544,523,25,50,1,1,0.80769 +92,32,1541,524,25,50,1,1,0.84615 +93,32,1538,525,25,50,1,1,0.88462 +94,32,1535,526,25,50,1,1,0.92308 +95,32,1533,527,25,51,1,1,1 +96,32,1528,527,20,56,1,1,1 +97,32,1524,528,21,55,1,1,1 +98,32,1521,529,21,55,1,1,1 +99,32,1517,530,22,54,1,1,1 +100,32,1514,531,23,54,1,1,1 +101,32,1510,532,24,53,1,1,1 +102,32,1507,533,24,53,1,1,1 +103,32,1504,534,25,53,1,1,1 +104,32,1500,534,25,53,1,1,1 +105,32,1496,534,25,53,1,1,1 +106,32,1492,534,25,54,1,1,1 +107,32,1489,533,26,54,1,1,1 +108,32,1488,534,26,54,1,1,1 +109,32,1483,535,26,54,1,1,1 +110,32,1478,535,25,54,1,1,1 +111,32,1473,535,25,54,1,1,1 +112,32,1469,535,24,54,1,1,1 +113,32,1464,535,24,55,1,1,1 +114,32,1460,535,23,55,1,1,1 +115,32,1455,535,23,55,1,1,1 +116,32,1451,536,22,55,1,1,1 +117,32,1445,535,23,55,1,1,1 +118,32,1440,535,23,54,1,1,1 +119,32,1434,534,25,55,1,1,1 +120,32,1429,534,25,54,1,1,0.80769 +121,32,1424,534,26,54,1,1,0.74074 +122,32,1421,533,26,54,1,1,0.77778 +123,32,1418,533,26,54,1,1,0.81481 +124,32,1411,532,28,55,1,1,1 +125,32,1404,532,31,56,1,1,1 +126,32,1398,532,33,57,1,1,1 +127,32,1393,533,31,56,1,1,1 +128,32,1388,534,30,55,1,1,1 +129,32,1383,535,28,54,1,1,1 +130,32,1379,536,26,53,1,1,1 +131,32,1374,536,26,53,1,1,1 +132,32,1369,536,26,54,1,1,1 +133,32,1365,537,26,54,1,1,1 +134,32,1360,536,26,54,1,1,0.96296 +135,32,1356,536,26,54,1,1,0.92593 +136,32,1352,535,26,54,1,1,0.92593 +137,32,1348,535,26,54,1,1,0.88889 +138,32,1344,534,26,54,1,1,0.81481 +139,32,1340,534,26,54,1,1,0.74074 +140,32,1336,533,26,54,1,1,0.66667 +141,32,1332,533,26,54,1,1,0.59259 +142,32,1327,532,26,55,1,1,0.51852 +143,32,1322,532,26,55,1,1,0.51852 +144,32,1317,532,26,55,1,1,0.51852 +145,32,1312,532,26,56,1,1,0.51852 +146,32,1307,531,26,57,1,1,0.51852 +147,32,1302,531,26,57,1,1,0.44444 +148,32,1297,531,26,58,1,1,0.37037 +149,32,1292,531,26,58,1,1,0.33333 +150,32,1287,530,26,59,1,1,0.2963 +151,32,1282,530,26,60,1,1,0.25926 +152,32,1277,530,26,60,1,1,0.18519 +153,32,1272,530,26,60,1,1,0.18519 +154,32,1268,530,25,61,1,1,0.16625 +155,32,1266,530,25,61,1,1,0.15385 +156,32,1264,530,25,62,1,1,0.11538 +157,32,1262,530,25,63,1,1,0.11538 +158,32,1256,530,25,63,1,1,0.076923 +159,32,1251,530,25,63,1,1,0.076923 +160,32,1246,530,25,63,1,1,0.11538 +161,32,1240,530,26,63,1,1,0.093171 +162,32,1235,530,25,63,1,1,0.071514 +163,32,1230,530,25,63,1,1,0.070312 +164,32,1224,530,26,63,1,1,0.10417 +165,32,1219,530,26,63,1,1,0.11111 +166,32,1214,530,26,63,1,1,0.071181 +167,32,1214,528,26,63,1,1,0.14815 +168,32,1210,527,26,63,1,1,0.087963 +169,32,1207,527,26,63,1,1,0.065394 +18,33,1330,506,18,49,1,1,0.47368 +19,33,1330,506,19,49,1,1,0.55 +20,33,1331,506,19,49,1,1,0.6 +21,33,1332,507,19,49,1,1,0.65 +22,33,1333,507,19,49,1,1,0.7 +23,33,1334,507,19,49,1,1,0.75 +24,33,1335,508,20,49,1,1,0.7619 +25,33,1336,509,20,50,1,1,0.80952 +26,33,1337,511,20,50,1,1,0.85714 +27,33,1338,513,20,50,1,1,0.82073 +28,33,1339,515,21,51,1,1,0.58392 +29,33,1342,520,20,48,1,1,0.33236 +30,33,1341,522,22,48,1,1,0.35404 +31,33,1341,524,24,49,1,1,0.4232 +32,33,1345,527,22,51,1,1,0.38629 +33,33,1345,516,23,48,1,1,0.43027 +34,33,1344,518,24,48,1,1,0.34694 +35,33,1348,511,22,47,1,1,0.45833 +36,33,1349,509,22,49,1,1,0.42 +37,33,1351,508,21,50,1,1,0.39216 +38,33,1353,507,20,51,1,1,0.36538 +39,33,1355,506,20,53,1,1,0.35185 +40,33,1356,505,20,54,1,1,0.34545 +41,33,1358,505,20,54,1,1,0.38182 +42,33,1360,505,20,54,1,1,0.4 +43,33,1361,507,20,54,1,1,0.4 +44,33,1363,509,19,55,1,1,0.39286 +45,33,1364,511,19,55,1,1,0.63571 +46,33,1366,513,19,56,1,1,0.93509 +47,33,1367,513,19,57,1,1,1 +48,33,1369,514,19,57,1,1,1 +49,33,1371,514,19,58,1,1,1 +50,33,1373,515,19,58,1,1,1 +51,33,1375,516,19,59,1,1,1 +52,33,1376,515,19,59,1,1,1 +53,33,1377,514,20,60,1,1,1 +54,33,1378,514,20,60,1,1,1 +55,33,1379,513,21,60,1,1,1 +56,33,1381,512,20,61,1,1,1 +57,33,1382,512,21,61,1,1,1 +58,33,1383,511,21,61,1,1,1 +59,33,1384,510,22,62,1,1,1 +60,33,1386,510,22,62,1,1,1 +61,33,1387,508,23,58,1,1,1 +62,33,1389,511,23,59,1,1,1 +63,33,1391,499,23,59,1,1,1 +64,33,1394,510,23,60,1,1,1 +65,33,1394,507,22,59,1,1,1 +66,33,1395,505,21,58,1,1,1 +67,33,1395,514,21,61,1,1,1 +68,33,1394,511,22,58,1,1,1 +69,33,1394,518,22,58,1,1,1 +70,33,1392,511,24,63,1,1,1 +71,33,1392,512,23,62,1,1,1 +72,33,1392,513,23,62,1,1,1 +73,33,1392,514,23,61,1,1,1 +74,33,1392,516,23,60,1,1,1 +75,33,1391,516,23,60,1,1,1 +76,33,1390,516,23,61,1,1,1 +77,33,1389,516,23,61,1,1,1 +78,33,1388,516,23,62,1,1,1 +79,33,1387,516,23,62,1,1,1 +80,33,1387,517,23,62,1,1,1 +81,33,1385,517,23,62,1,1,1 +82,33,1383,517,24,63,1,1,1 +83,33,1381,517,24,63,1,1,1 +84,33,1379,517,25,64,1,1,1 +85,33,1378,518,25,64,1,1,0.97574 +86,33,1376,518,25,65,1,1,0.97436 +87,33,1374,519,26,65,1,1,0.95174 +88,33,1372,520,26,65,1,1,0.97531 +89,33,1371,521,26,65,1,1,0.95174 +90,33,1370,524,26,65,1,1,0.87374 +91,33,1369,527,26,65,1,1,0.86532 +92,33,1365,527,27,65,1,1,0.85065 +93,33,1362,528,28,65,1,1,0.84274 +94,33,1359,528,28,66,1,1,0.86104 +95,33,1357,529,28,66,1,1,0.85795 +96,33,1355,529,28,67,1,1,0.84736 +97,33,1353,530,27,67,1,1,0.86134 +98,33,1351,530,27,68,1,1,0.86646 +99,33,1349,531,27,68,1,1,0.84058 +100,33,1347,532,27,68,1,1,0.79037 +101,33,1347,535,24,65,1,1,0.76242 +102,33,1344,534,23,69,1,1,0.80417 +103,33,1342,534,23,69,1,1,0.77619 +104,33,1340,534,24,69,1,1,0.76857 +105,33,1338,534,25,69,1,1,0.77253 +106,33,1336,534,25,69,1,1,0.74011 +107,33,1334,534,26,69,1,1,0.66667 +108,33,1332,534,27,69,1,1,0.63265 +109,33,1330,534,28,70,1,1,0.66489 +110,33,1326,534,24,71,1,1,0.7 +111,33,1325,535,26,70,1,1,0.61607 +112,33,1322,535,25,70,1,1,0.64355 +113,33,1316,536,28,70,1,1,0.64254 +114,33,1313,536,27,70,1,1,0.59759 +115,33,1311,536,28,71,1,1,1 +116,33,1309,535,27,70,1,1,0.59809 +117,33,1305,535,26,73,1,1,1 +118,33,1303,533,27,74,1,1,1 +119,33,1300,525,29,77,1,1,0.69487 +120,33,1297,518,31,79,1,1,0.74102 +121,33,1295,531,31,75,1,1,0.66447 +122,33,1293,532,30,74,1,1,0.6271 +123,33,1291,534,32,72,1,1,0.66127 +124,33,1290,533,28,73,1,1,0.61976 +125,33,1286,531,30,77,1,1,1 +126,33,1280,534,33,74,1,1,1 +127,33,1277,533,31,76,1,1,1 +128,33,1275,532,29,79,1,1,1 +129,33,1273,532,29,79,1,1,1 +130,33,1271,532,29,79,1,1,1 +131,33,1270,533,29,78,1,1,0.70464 +132,33,1267,534,30,78,1,1,0.96774 +133,33,1264,535,31,78,1,1,0.9375 +134,33,1264,536,30,77,1,1,0.67949 +135,33,1260,534,29,80,1,1,0.9 +136,33,1256,536,31,79,1,1,0.875 +137,33,1253,534,31,80,1,1,0.70216 +138,33,1251,533,31,81,1,1,0.84375 +139,33,1249,532,30,82,1,1,0.83871 +140,33,1247,531,30,83,1,1,0.80645 +141,33,1245,533,31,82,1,1,0.78125 +142,33,1245,531,31,81,1,1,0.6875 +143,33,1243,533,31,80,1,1,0.6875 +144,33,1241,535,31,80,1,1,0.65625 +145,33,1240,537,31,80,1,1,0.59375 +146,33,1238,537,31,80,1,1,0.59375 +147,33,1237,538,31,79,1,1,0.53125 +148,33,1235,538,31,79,1,1,0.5 +149,33,1232,539,31,78,1,1,0.5 +150,33,1228,538,31,79,1,1,0.5 +151,33,1225,538,31,79,1,1,0.46875 +152,33,1221,537,32,80,1,1,0.51515 +153,33,1218,537,32,80,1,1,0.45455 +154,33,1215,536,32,81,1,1,0.42424 +155,33,1212,536,32,81,1,1,0.42424 +156,33,1209,535,32,82,1,1,0.42424 +157,33,1206,535,32,82,1,1,0.42424 +158,33,1203,534,32,83,1,1,0.45455 +159,33,1200,534,32,83,1,1,0.42424 +160,33,1197,534,33,84,1,1,0.47059 +161,33,1194,533,35,86,1,1,0.47222 +162,33,1192,532,36,88,1,1,0.48649 +163,33,1190,531,37,90,1,1,0.45084 +164,33,1188,531,39,91,1,1,0.43913 +165,33,1187,532,35,94,1,1,0.39474 +166,33,1186,533,35,93,1,1,0.42376 +167,33,1186,534,35,93,1,1,0.35993 +168,33,1185,534,35,92,1,1,0.41517 +169,33,1184,534,35,91,1,1,0.41335 +170,33,1183,534,35,90,1,1,0.38858 +171,33,1182,534,35,90,1,1,0.41941 +172,33,1180,536,35,91,1,1,0.41304 +173,33,1180,536,35,93,1,1,0.3818 +174,33,1180,536,33,92,1,1,0.4339 +175,33,1182,536,31,90,1,1,0.45913 +176,33,1176,537,36,93,1,1,0.36717 +177,33,1175,535,37,95,1,1,0.42489 +178,33,1174,534,38,96,1,1,0.38805 +179,33,1174,533,38,97,1,1,0.41078 +180,33,1177,537,35,94,1,1,0.43509 +181,33,1175,538,36,95,1,1,0.67568 +182,33,1173,539,37,96,1,1,0.38931 +183,33,1171,540,38,97,1,1,0.64103 +184,33,1169,541,39,98,1,1,0.625 +185,33,1168,543,39,98,1,1,0.625 +186,33,1168,541,39,100,1,1,0.6 +187,33,1168,540,39,101,1,1,0.6 +188,33,1168,539,40,103,1,1,0.58537 +189,33,1168,539,40,104,1,1,0.60976 +190,33,1168,540,40,104,1,1,0.58537 +191,33,1169,541,39,104,1,1,0.6 +192,33,1167,541,40,104,1,1,0.58537 +193,33,1166,541,40,104,1,1,0.56098 +194,33,1164,541,41,104,1,1,0.35646 +195,33,1163,542,41,104,1,1,0.52381 +196,33,1162,543,41,104,1,1,0.5 +197,33,1162,542,40,106,1,1,0.4878 +198,33,1162,541,39,109,1,1,0.475 +199,33,1163,543,39,109,1,1,0.525 +200,33,1164,542,40,109,1,1,0.56098 +201,33,1166,542,40,109,1,1,0.56098 +202,33,1166,543,40,105,1,1,0.36769 +203,33,1166,544,41,102,1,1,0.365 +204,33,1166,545,44,102,1,1,0.4205 +205,33,1167,547,46,101,1,1,0.45724 +206,33,1168,551,45,101,1,1,0.43521 +207,33,1170,554,43,102,1,1,0.56818 +208,33,1170,553,43,103,1,1,0.49126 +209,33,1170,553,43,103,1,1,0.56818 +210,33,1170,552,44,103,1,1,0.57778 +211,33,1170,552,45,102,1,1,0.56522 +212,33,1170,551,45,106,1,1,0.58696 +213,33,1171,551,44,109,1,1,0.55556 +214,33,1172,551,44,112,1,1,0.57778 +215,33,1173,551,46,114,1,1,0.57447 +216,33,1175,551,48,117,1,1,0.61224 +217,33,1177,551,50,117,1,1,0.60784 +218,33,1180,556,48,111,1,1,0.59184 +219,33,1182,556,49,112,1,1,0.6 +220,33,1184,556,49,117,1,1,0.58 +221,33,1189,556,48,117,1,1,0.59184 +222,33,1191,556,49,118,1,1,0.58 +223,33,1193,556,50,119,1,1,0.58824 +224,33,1196,556,50,121,1,1,0.58824 +225,33,1198,556,51,122,1,1,0.59615 +226,33,1200,557,52,122,1,1,0.60377 +227,33,1203,557,52,124,1,1,0.60377 +228,33,1205,557,53,125,1,1,0.61111 +229,33,1207,557,54,126,1,1,0.6 +230,33,1210,558,55,127,1,1,0.625 +231,33,1211,557,56,129,1,1,0.61404 +232,33,1213,557,56,130,1,1,0.61404 +233,33,1218,556,56,132,1,1,0.61404 +234,33,1223,556,57,133,1,1,0.62069 +235,33,1225,556,57,132,1,1,0.56897 +236,33,1228,557,56,131,1,1,0.52632 +237,33,1235,557,57,135,1,1,0.55172 +238,33,1242,557,58,140,1,1,0.57627 +239,33,1246,560,59,140,1,1,0.53333 +240,33,1256,560,59,141,1,1,0.56667 +241,33,1262,562,60,141,1,1,0.54098 +242,33,1269,564,60,142,1,1,0.54098 +243,33,1275,566,61,142,1,1,0.51613 +244,33,1282,568,61,143,1,1,0.5 +245,33,1289,570,61,144,1,1,0.5 +246,33,1298,566,62,149,1,1,0.52381 +247,33,1307,568,62,148,1,1,0.53968 +248,33,1316,570,62,147,1,1,0.50794 +249,33,1325,572,62,147,1,1,0.47619 +250,33,1332,571,62,146,1,1,0.4127 +251,33,1340,571,62,144,1,1,0.36508 +252,33,1348,572,63,146,1,1,0.32812 +253,33,1357,574,63,148,1,1,0.29688 +254,33,1366,576,64,150,1,1,0.24615 +255,33,1375,574,65,157,1,1,0.21212 +256,33,1385,572,65,158,1,1,0.18182 +257,33,1397,575,65,159,1,1,0.16667 +258,33,1407,572,66,169,1,1,0.13433 +259,33,1419,573,66,170,1,1,0.1194 +260,33,1428,574,65,171,1,1,0.045455 +261,33,1443,575,65,173,1,1,0.075758 +262,33,1456,574,65,173,1,1,0.075758 +263,33,1468,574,66,177,1,1,0.074627 +264,33,1480,574,68,181,1,1,0.11594 +265,33,1492,576,73,181,1,1,0.17568 +266,33,1504,579,78,182,1,1,0.27848 +267,33,1520,581,78,182,1,1,0.35443 +268,33,1537,588,71,182,1,1,0.45833 +269,33,1553,594,64,179,1,1,0.53846 +270,33,1567,591,64,187,1,1,0.61538 +271,33,1588,594,65,195,1,1,0.57576 +272,33,1600,594,67,200,1,1,0.73529 +273,33,1612,595,69,205,1,1,0.77143 +274,33,1625,596,70,210,1,1,0.80282 +275,33,1640,600,80,209,1,1,0.7284 +276,33,1655,601,81,218,1,1,0.76829 +277,33,1671,606,90,216,1,1,0.72527 +278,33,1684,609,103,219,1,1,0.70192 +279,33,1700,611,103,225,1,1,0.77885 +280,33,1717,613,105,228,1,1,0.83962 +281,33,1734,614,101,230,1,1,0.94118 +282,33,1752,611,104,238,1,1,0.98095 +283,33,1776,614,101,239,1,1,0.96078 +284,33,1800,615,100,242,1,1,1 +285,33,1825,616,98,245,1,1,0.9697 +286,33,1850,617,96,249,1,1,0.73196 +287,33,1870,618,96,249,1,1,0.52577 +288,33,1892,616,96,249,1,1,0.29897 +13,34,1548,510,13,35,1,1,0.47222 +14,34,1548,506,11,37,1,1,0.34211 +15,34,1551,506,11,37,1,1,0.34211 +16,34,1551,509,11,37,1,1,0.42105 +17,34,1552,507,10,37,1,1,0.36603 +18,34,1551,506,15,40,1,1,0.30183 +19,34,1552,506,14,40,1,1,0.30407 +20,34,1552,504,12,32,1,1,0.53613 +21,34,1554,507,12,38,1,1,0.40237 +22,34,1552,506,14,34,1,1,0.50286 +23,34,1554,507,13,35,1,1,0.55556 +24,34,1552,504,18,42,1,1,0.68911 +25,34,1555,511,13,42,1,1,0.8505 +26,34,1555,511,14,43,1,1,0.73636 +27,34,1557,515,14,42,1,1,0.43256 +28,34,1558,514,12,45,1,1,0.45819 +29,34,1559,520,14,50,1,1,0.26013 +30,34,1558,519,14,49,1,1,0.35467 +31,34,1558,523,15,44,1,1,0.37917 +32,34,1561,527,14,43,1,1,0.27879 +33,34,1555,512,18,42,1,1,0.42595 +34,34,1558,516,19,50,1,1,0.23529 +35,34,1564,511,14,44,1,1,0.23704 +36,34,1561,508,15,54,1,1,0.4875 +37,34,1561,510,19,52,1,1,0.5434 +38,34,1561,502,15,58,1,1,0.90678 +39,34,1566,506,21,55,1,1,0.67857 +40,34,1565,506,16,48,1,1,1 +41,34,1568,509,16,48,1,1,1 +42,34,1569,510,17,48,1,1,1 +43,34,1569,512,15,50,1,1,1 +44,34,1571,510,19,54,1,1,0.81091 +45,34,1572,515,17,54,1,1,0.78081 +46,34,1572,515,18,54,1,1,0.6555 +47,34,1573,516,18,54,1,1,0.54928 +48,34,1574,519,18,54,1,1,0.46411 +49,34,1575,522,19,54,1,1,0.32091 +50,34,1570,516,23,53,1,1,0.073302 +51,34,1570,519,23,53,1,1,0.024691 +52,34,1571,520,23,53,1,1,0.027778 +53,34,1572,521,24,53,1,1,0.047407 +54,34,1574,522,24,53,1,1,0.044444 +55,34,1577,523,24,52,1,1,0.030189 +56,34,1576,521,24,53,1,1,0.041481 +57,34,1576,520,23,53,1,1,0.088735 +58,34,1576,518,22,54,1,1,0.19447 +59,34,1575,517,23,55,1,1,0.38095 +60,34,1575,515,22,56,1,1,0.53242 +61,34,1575,514,21,56,1,1,0.69537 +62,34,1575,513,21,57,1,1,0.82994 +63,34,1577,500,20,54,1,1,0.67792 +64,34,1578,514,20,54,1,1,0.92381 +65,34,1578,513,21,54,1,1,0.96116 +66,34,1576,507,22,54,1,1,0.69012 +67,34,1575,516,22,54,1,1,1 +68,34,1573,511,21,53,1,1,1 +69,34,1573,518,22,53,1,1,1 +70,34,1572,514,21,54,1,1,1 +71,34,1570,515,21,54,1,1,0.95455 +72,34,1568,516,21,54,1,1,1 +73,34,1567,517,21,54,1,1,1 +74,34,1565,518,21,54,1,1,1 +75,34,1564,520,21,53,1,1,1 +76,34,1561,519,21,53,1,1,1 +77,34,1558,519,21,53,1,1,1 +78,34,1555,518,21,53,1,1,1 +79,34,1553,518,21,53,1,1,1 +80,34,1550,518,21,53,1,1,1 +81,34,1547,517,21,53,1,1,1 +82,34,1545,517,21,53,1,1,1 +83,34,1542,516,21,53,1,1,1 +84,34,1539,516,21,53,1,1,1 +85,34,1537,516,21,53,1,1,1 +86,34,1533,517,21,53,1,1,1 +87,34,1530,518,21,53,1,1,1 +88,34,1526,519,22,53,1,1,1 +89,34,1523,520,22,53,1,1,1 +90,34,1520,521,22,53,1,1,1 +91,34,1516,522,22,53,1,1,1 +92,34,1513,523,22,53,1,1,1 +93,34,1509,524,23,53,1,1,1 +94,34,1506,525,23,53,1,1,1 +95,34,1503,527,23,53,1,1,1 +96,34,1499,527,23,53,1,1,0.25 +97,34,1496,527,22,54,1,1,1 +98,34,1493,527,22,55,1,1,1 +99,34,1490,527,21,56,1,1,1 +100,34,1486,528,22,55,1,1,1 +101,34,1483,528,21,56,1,1,1 +102,34,1480,528,21,57,1,1,1 +103,34,1477,528,20,58,1,1,1 +104,34,1474,529,20,58,1,1,1 +105,34,1469,531,21,59,1,1,1 +106,34,1469,530,19,58,1,1,1 +107,34,1464,529,19,58,1,1,1 +108,34,1460,529,19,58,1,1,1 +109,34,1455,529,20,57,1,1,1 +110,34,1451,529,20,57,1,1,1 +111,34,1447,529,20,57,1,1,1 +112,34,1443,530,20,57,1,1,1 +113,34,1440,531,19,57,1,1,1 +114,34,1436,532,19,57,1,1,1 +115,34,1433,533,19,57,1,1,1 +116,34,1428,530,20,58,1,1,1 +117,34,1424,530,20,58,1,1,1 +118,34,1420,530,20,58,1,1,0.95642 +119,34,1417,530,20,58,1,1,0.82244 +120,34,1413,530,20,58,1,1,0.77805 +121,34,1410,530,20,59,1,1,1 +122,34,1406,529,20,59,1,1,1 +123,34,1402,529,20,58,1,1,0.77805 +124,34,1398,528,20,58,1,1,0.64487 +125,34,1395,528,20,58,1,1,0.46731 +126,34,1392,528,20,58,1,1,0.33414 +127,34,1390,528,20,58,1,1,0.2155 +128,34,1386,528,20,58,1,1,0.18725 +129,34,1382,528,20,58,1,1,0.16061 +130,34,1378,528,20,57,1,1,0.17898 +131,34,1374,528,20,57,1,1,0.13793 +132,34,1370,528,20,57,1,1,0.13793 +133,34,1366,527,20,57,1,1,0.17241 +134,34,1363,527,20,57,1,1,0.15517 +135,34,1360,526,20,57,1,1,0.17241 +136,34,1357,526,20,57,1,1,0.15517 +137,34,1354,526,20,57,1,1,0.15517 +138,34,1350,526,20,57,1,1,0.13793 +139,34,1346,526,20,57,1,1,0.13136 +140,34,1343,526,20,57,1,1,0.15107 +141,34,1339,526,20,57,1,1,0.13957 +142,34,1336,527,20,57,1,1,0.19622 +143,34,1333,527,20,57,1,1,0.28325 +144,34,1330,528,20,57,1,1,0.36289 +145,34,1327,529,20,57,1,1,0.44581 +146,34,1325,530,20,57,1,1,0.57553 +147,34,1320,530,20,57,1,1,0.57389 +148,34,1316,531,20,57,1,1,0.61905 +149,34,1311,531,20,57,1,1,0.57143 +150,34,1307,532,20,57,1,1,0.52381 +151,34,1303,533,20,57,1,1,0.52381 +152,34,1297,532,20,57,1,1,0.42857 +153,34,1291,531,20,57,1,1,0.33333 +154,34,1285,530,20,57,1,1,0.2381 +155,34,1279,529,20,58,1,1,0.14609 +156,34,1274,529,21,58,1,1,0.13867 +157,34,1270,529,21,58,1,1,0.13867 +158,34,1266,529,21,59,1,1,0.13788 +159,34,1262,529,21,59,1,1,0.13788 +160,34,1258,529,21,60,1,1,0.13711 +161,34,1254,529,21,60,1,1,0.13636 +162,34,1250,529,21,60,1,1,0.13636 +163,34,1246,530,21,60,1,1,0.045455 +164,34,1242,530,21,60,1,1,0.045455 +165,34,1237,530,22,61,1,1,0.086957 +166,34,1233,530,22,61,1,1,0.086957 +167,34,1229,530,22,61,1,1,0.086957 +168,34,1225,530,22,62,1,1,0.17391 +169,34,1221,530,22,62,1,1,0.13941 +170,34,1217,531,22,62,1,1,0.18634 +171,34,1213,531,22,62,1,1,0.14079 +172,34,1209,531,22,63,1,1,0.11073 +173,34,1205,531,22,63,1,1,0.030571 +174,34,1201,531,22,63,1,1,0.040761 +175,34,1196,531,23,64,1,1,0.048077 +176,34,1192,531,23,64,1,1,0.069231 +177,34,1188,532,23,64,1,1,0.040385 +178,34,1184,532,23,64,1,1,0.029487 +179,34,1180,532,23,64,1,1,0.0012821 +180,34,1176,532,23,65,1,1,0.0031566 +181,34,1172,532,23,65,1,1,0 +182,34,1168,532,23,66,1,1,0 +183,34,1164,532,23,66,1,1,0 +184,34,1160,533,23,66,1,1,0 +185,34,1157,533,23,66,1,1,0 +186,34,1154,533,23,66,1,1,0 +187,34,1151,533,23,67,1,1,0 +188,34,1148,534,23,66,1,1,0 +189,34,1146,534,23,67,1,1,0.00061275 +190,34,1143,534,23,67,1,1,0 +191,34,1140,534,23,68,1,1,0 +192,34,1137,535,23,67,1,1,0.041667 +193,34,1134,535,23,68,1,1,0.047705 +194,34,1132,535,23,68,1,1,0.013889 +195,34,1129,535,23,69,1,1,0.29286 +196,34,1126,536,23,68,1,1,0.021739 +197,34,1123,536,23,69,1,1,0.45833 +198,34,1120,536,23,69,1,1,0.54167 +199,34,1118,537,23,69,1,1,0.58333 +200,34,1115,537,23,70,1,1,0.75 +201,34,1112,538,24,70,1,1,0.8 +202,34,1110,539,23,70,1,1,0.875 +203,34,1107,539,24,71,1,1,0.88 +204,34,1105,540,23,71,1,1,1 +205,34,1102,541,24,71,1,1,0.96444 +206,34,1100,542,24,71,1,1,0.98222 +207,34,1098,542,24,71,1,1,0.98333 +208,34,1096,542,24,71,1,1,0.013889 +209,34,1094,542,24,72,1,1,0.012603 +210,34,1092,542,25,72,1,1,0.027397 +211,34,1091,542,24,72,1,1,0.027397 +212,34,1089,542,24,73,1,1,0.034054 +213,34,1087,542,25,73,1,1,0.032744 +214,34,1085,542,25,73,1,1,0.045738 +215,34,1084,542,24,74,1,1,0.046933 +216,34,1082,542,24,74,1,1,0.061333 +217,34,1080,542,25,74,1,1,0.058974 +218,34,1078,542,25,75,1,1,0.058198 +219,34,1077,542,24,75,1,1,0.072632 +220,34,1075,542,25,75,1,1,0.072874 +221,34,1073,542,25,76,1,1,0.10939 +222,34,1071,542,25,76,1,1,0.077922 +223,34,1070,543,25,76,1,1,0.064935 +224,34,1070,543,24,78,1,1,0.063291 +225,34,1071,543,22,80,1,1,0.061728 +226,34,1072,544,20,81,1,1,0.036585 +227,34,1070,545,23,78,1,1,0.025316 +228,34,1069,546,25,75,1,1,0.011134 +229,34,1068,545,26,76,1,1,0.021164 +230,34,1068,545,26,77,1,1,0.019943 +231,34,1068,544,26,78,1,1,0.029536 +232,34,1068,544,26,79,1,1,0.029167 +233,34,1067,543,27,80,1,1,0.038801 +234,34,1067,543,27,81,1,1,0.04007 +235,34,1067,543,27,81,1,1,0.030052 +236,34,1067,542,27,83,1,1,0.040816 +237,34,1066,542,28,83,1,1,0.041051 +238,34,1066,541,28,85,1,1,0.05012 +239,34,1066,541,28,85,1,1,0.077787 +240,34,1066,541,29,86,1,1,0.076628 +241,34,1068,541,30,86,1,1,0.051539 +242,34,1071,541,30,86,1,1,0.046348 +243,34,1074,541,31,87,1,1,0.022727 +244,34,1077,541,31,87,1,1,0.034091 +245,34,1080,541,32,87,1,1,0.053719 +246,34,1083,541,32,88,1,1,0.052094 +247,34,1085,542,33,87,1,1,0.039439 +54,35,1053,502,13,29,1,1,1 +55,35,1052,502,13,30,1,1,1 +56,35,1050,500,14,30,1,1,1 +57,35,1049,499,14,30,1,1,1 +58,35,1048,497,14,31,1,1,1 +59,35,1047,496,14,31,1,1,1 +60,35,1044,495,14,31,1,1,1 +61,35,1042,494,14,31,1,1,1 +62,35,1040,494,14,31,1,1,1 +63,35,1038,495,15,30,1,1,1 +64,35,1037,494,16,32,1,1,1 +65,35,1036,496,16,29,1,1,1 +66,35,1034,496,15,29,1,1,1 +67,35,1032,496,14,29,1,1,1 +68,35,1031,496,13,30,1,1,1 +69,35,1031,497,14,31,1,1,1 +70,35,1028,495,14,32,1,1,0.95556 +71,35,1025,494,14,32,1,1,0.97374 +72,35,1022,493,14,32,1,1,1 +73,35,1019,492,14,33,1,1,0.97059 +74,35,1017,492,14,33,1,1,0.97059 +75,35,1013,493,17,36,1,1,0.86486 +76,35,1010,492,15,33,1,1,0.97059 +77,35,1007,492,13,32,1,1,0.9697 +78,35,1004,492,12,32,1,1,0.9697 +79,35,1001,491,11,32,1,1,1 +80,35,996,491,12,32,1,1,1 +81,35,991,491,13,32,1,1,1 +82,35,987,492,14,31,1,1,0.9375 +83,35,985,493,13,31,1,1,0.875 +84,35,980,493,13,31,1,1,0.78125 +85,35,976,494,13,31,1,1,0.78125 +86,35,972,494,13,31,1,1,0.84375 +87,35,968,495,13,31,1,1,0.875 +88,35,965,496,11,32,1,1,0.87879 +89,35,962,497,10,33,1,1,0.88235 +90,35,957,499,10,32,1,1,0.90909 +91,35,952,501,11,31,1,1,0.8125 +92,35,947,503,12,30,1,1,0.93548 +93,35,942,505,13,29,1,1,0.96667 +94,35,937,507,14,28,1,1,1 +95,35,933,509,14,28,1,1,0.93103 +96,35,930,510,13,29,1,1,0.86667 +97,35,926,510,12,29,1,1,0.86667 +98,35,921,513,12,30,1,1,0.77419 +99,35,918,512,11,30,1,1,0.80645 +100,35,913,511,11,30,1,1,0.87097 +101,35,908,510,12,31,1,1,0.875 +102,35,903,510,12,31,1,1,0.875 +103,35,898,509,13,32,1,1,0.84848 +104,35,894,508,12,32,1,1,0.84848 +105,35,889,508,13,32,1,1,0.81818 +106,35,884,507,13,33,1,1,0.79412 +107,35,879,506,14,34,1,1,0.77143 +108,35,875,506,14,34,1,1,0.74286 +109,35,871,507,14,34,1,1,0.68571 +110,35,866,505,14,34,1,1,0.74286 +111,35,861,505,13,34,1,1,0.82041 +112,35,856,506,13,33,1,1,0.79202 +113,35,851,507,13,32,1,1,0.80519 +114,35,846,511,11,30,1,1,0.77419 +115,35,841,511,12,30,1,1,0.76179 +116,35,834,508,14,32,1,1,0.8303 +117,35,827,507,15,32,1,1,0.89583 +118,35,821,507,16,32,1,1,0.89305 +119,35,818,507,15,31,1,1,0.89258 +120,35,813,507,15,31,1,1,0.91406 +121,35,808,507,16,32,1,1,0.89305 +122,35,802,508,18,33,1,1,0.87616 +123,35,796,509,17,32,1,1,1 +124,35,791,509,15,32,1,1,1 +125,35,785,509,15,32,1,1,1 +126,35,780,510,15,32,1,1,1 +127,35,775,511,15,32,1,1,1 +128,35,769,512,15,31,1,1,1 +129,35,764,513,15,31,1,1,1 +130,35,759,512,15,32,1,1,1 +131,35,754,511,16,33,1,1,1 +132,35,749,510,16,34,1,1,1 +133,35,744,510,17,34,1,1,1 +134,35,740,511,16,34,1,1,1 +135,35,735,512,15,34,1,1,1 +136,35,730,511,14,34,1,1,1 +137,35,725,511,13,33,1,1,1 +138,35,720,511,12,32,1,1,1 +139,35,715,511,12,32,1,1,0.53846 +140,35,710,510,12,32,1,1,0.46154 +141,35,705,510,12,32,1,1,0.38462 +142,35,700,510,12,32,1,1,0.30769 +143,35,695,510,12,32,1,1,0.23077 +144,35,691,510,11,32,1,1,0.16667 +145,35,686,509,11,33,1,1,0.083333 +146,35,681,509,11,33,1,1,0 +147,35,676,509,11,33,1,1,0 +148,35,671,509,11,33,1,1,0 +149,35,667,509,11,33,1,1,0 +150,35,662,509,11,33,1,1,0 +151,35,656,509,11,33,1,1,0 +152,35,650,510,12,32,1,1,0 +153,35,645,511,12,32,1,1,0 +154,35,638,511,12,32,1,1,0 +155,35,631,511,13,32,1,1,0 +156,35,625,511,13,32,1,1,0 +157,35,618,511,14,32,1,1,0 +158,35,612,512,14,32,1,1,0 +159,35,607,513,15,31,1,1,0 +160,35,601,513,15,32,1,1,0 +161,35,596,514,15,32,1,1,0 +162,35,591,515,14,32,1,1,0 +163,35,586,515,14,33,1,1,0 +164,35,581,516,13,33,1,1,0 +165,35,576,517,13,33,1,1,0 +166,35,571,518,13,34,1,1,0 +167,35,566,517,13,35,1,1,0 +168,35,562,517,12,35,1,1,0 +169,35,558,517,12,35,1,1,1 +170,35,553,516,12,35,1,1,1 +171,35,549,516,12,35,1,1,1 +172,35,545,515,12,35,1,1,0 +173,35,541,515,12,35,1,1,0 +174,35,537,514,12,35,1,1,0 +175,35,533,514,12,35,1,1,0 +176,35,529,513,12,35,1,1,0 +177,35,525,513,12,35,1,1,0 +178,35,521,512,12,35,1,1,0 +179,35,517,512,12,35,1,1,0 +180,35,513,513,12,35,1,1,0 +181,35,510,514,12,36,1,1,0.076923 +182,35,506,515,12,36,1,1,0.076923 +183,35,502,516,12,36,1,1,0.15385 +184,35,498,517,13,37,1,1,1 +185,35,494,518,13,37,1,1,1 +186,35,490,519,13,37,1,1,1 +187,35,486,520,14,38,1,1,1 +188,35,481,521,14,38,1,1,1 +189,35,476,522,14,38,1,1,1 +190,35,471,522,16,37,1,1,1 +191,35,467,522,18,37,1,1,1 +192,35,463,522,18,37,1,1,1 +193,35,460,523,17,37,1,1,1 +194,35,457,523,16,37,1,1,1 +195,35,454,524,16,37,1,1,1 +196,35,450,524,16,38,1,1,1 +197,35,447,525,15,37,1,1,1 +198,35,444,525,14,38,1,1,1 +199,35,441,526,14,38,1,1,1 +200,35,438,525,14,38,1,1,1 +201,35,435,525,14,38,1,1,1 +202,35,432,525,14,38,1,1,1 +203,35,430,526,15,37,1,1,1 +1,36,624,521,16,70,1,1,0.81442 +2,36,625,511,16,70,1,1,0.80116 +3,36,625,525,16,70,1,1,0.74316 +4,36,625,522,16,70,1,1,0.68683 +5,36,625,517,16,70,1,1,0.69677 +6,36,624,529,16,70,1,1,0.71168 +7,36,623,522,15,71,1,1,0.78819 +8,36,622,529,15,71,1,1,0.78125 +9,36,622,527,15,71,1,1,0.73958 +10,36,619,522,15,73,1,1,0.80405 +11,36,617,528,15,73,1,1,0.78378 +12,36,615,528,15,73,1,1,0.83784 +13,36,616,515,15,73,1,1,0.68074 +14,36,615,523,15,73,1,1,1 +15,36,615,521,14,72,1,1,0.49041 +16,36,612,521,17,71,1,1,0.52932 +17,36,610,524,17,71,1,1,0.55556 +18,36,610,523,16,73,1,1,0.53498 +19,36,609,523,13,71,1,1,0.625 +20,36,607,523,14,77,1,1,0.65128 +21,36,607,523,14,76,1,1,0.55671 +22,36,603,526,17,75,1,1,0.63743 +23,36,602,527,17,75,1,1,0.59211 +24,36,599,529,17,75,1,1,0.63743 +25,36,599,532,17,75,1,1,0.58553 +26,36,598,532,17,75,1,1,0.50146 +27,36,595,534,17,75,1,1,0.53947 +28,36,595,537,17,75,1,1,0.53216 +29,36,595,537,17,75,1,1,0.45614 +30,36,592,541,16,79,1,1,0.5 +31,36,592,553,16,79,1,1,0.45809 +32,36,588,549,18,78,1,1,0.50167 +33,36,586,538,18,78,1,1,0.2072 +34,36,585,544,18,78,1,1,0.46436 +35,36,584,533,19,77,1,1,0.47949 +36,36,582,533,21,76,1,1,0.47757 +37,36,579,527,21,76,1,1,0.57025 +38,36,578,528,21,76,1,1,0.54723 +39,36,578,522,21,76,1,1,0.54545 +40,36,575,524,21,76,1,1,0.56257 +41,36,576,522,20,79,1,1,0.525 +42,36,574,524,20,79,1,1,0.5 +43,36,571,527,19,81,1,1,0.56402 +44,36,570,529,18,79,1,1,0.52237 +45,36,568,528,18,79,1,1,0.57237 +46,36,567,529,18,79,1,1,0.51513 +47,36,567,533,18,79,1,1,0.42763 +48,36,564,532,17,82,1,1,0.56961 +49,36,561,530,16,87,1,1,0.76939 +50,36,559,530,17,88,1,1,0.6985 +51,36,557,529,16,90,1,1,0.73626 +52,36,555,531,18,87,1,1,0.65012 +53,36,553,531,18,86,1,1,0.21839 +54,36,552,531,17,86,1,1,0.20498 +55,36,552,531,19,85,1,1,0.16686 +56,36,547,531,22,84,1,1,0.17903 +57,36,545,530,22,84,1,1,0.19437 +58,36,543,528,22,84,1,1,0.17391 +59,36,540,528,22,84,1,1,0.16931 +60,36,536,528,22,84,1,1,0.20614 +61,36,533,530,22,84,1,1,0.16368 +62,36,533,524,22,84,1,1,0.14987 +63,36,528,538,22,84,1,1,0.16368 +64,36,527,523,22,84,1,1,0.2046 +65,36,524,529,22,84,1,1,0.15806 +66,36,523,537,22,84,1,1,0.16164 +67,36,519,525,22,84,1,1,0.094118 +68,36,513,533,22,84,1,1,0.10588 +69,36,510,528,22,84,1,1,0.12174 +70,36,506,529,22,84,1,1,0.12327 +71,36,504,529,22,84,1,1,0.10588 +72,36,500,529,22,84,1,1,0.093095 +73,36,495,526,22,84,1,1,0.11049 +74,36,492,527,22,84,1,1,0.086445 +75,36,488,527,22,84,1,1,0.10639 +76,36,484,526,22,84,1,1,0.10128 +77,36,478,526,22,84,1,1,0.10281 +78,36,473,525,22,84,1,1,0.13606 +79,36,469,524,22,84,1,1,0.1468 +80,36,464,525,22,84,1,1,0.18977 +81,36,458,528,22,84,1,1,0.16266 +82,36,454,528,22,84,1,1,0.1376 +83,36,447,528,22,84,1,1,0.15396 +84,36,440,528,22,84,1,1,0.1156 +85,36,433,528,26,83,1,1,0.14286 +86,36,426,529,26,83,1,1,0.15476 +87,36,424,529,26,83,1,1,0.16667 +88,36,418,534,26,83,1,1,0.10714 +89,36,414,531,26,83,1,1,0.14286 +90,36,409,533,23,82,1,1,0.18072 +91,36,400,535,25,79,1,1,0.2 +92,36,395,534,27,91,1,1,0.18245 +93,36,389,540,25,91,1,1,0.18102 +94,36,380,544,26,93,1,1,0.14894 +95,36,378,544,23,94,1,1,0.21623 +96,36,372,548,24,95,1,1,0.19292 +97,36,366,546,24,95,1,1,0.1775 +98,36,358,548,23,95,1,1,0.20443 +99,36,350,548,25,95,1,1,0.16627 +100,36,341,551,27,93,1,1,0.17021 +101,36,335,546,27,93,1,1,0.24658 +102,36,327,549,27,93,1,1,0.20061 +103,36,321,550,27,93,1,1,0.17477 +104,36,314,548,27,93,1,1,0.18617 +105,36,306,549,27,93,1,1,0.17021 +106,36,299,547,27,93,1,1,0.22188 +107,36,292,546,27,93,1,1,0.2367 +108,36,286,545,27,93,1,1,0.28419 +109,36,277,547,27,93,1,1,0.2747 +110,36,271,545,27,93,1,1,0.30319 +111,36,262,546,27,93,1,1,0.30091 +112,36,254,547,27,93,1,1,0.31117 +113,36,246,549,28,92,1,1,0.3274 +114,36,237,551,29,91,1,1,0.32283 +115,36,229,548,29,91,1,1,0.37971 +116,36,219,552,32,90,1,1,0.36663 +117,36,209,552,35,89,1,1,0.4284 +118,36,200,553,39,88,1,1,0.51039 +119,36,191,554,42,87,1,1,0.56527 +120,36,183,556,41,94,1,1,0.58396 +121,36,172,555,46,97,1,1,0.62571 +122,36,165,557,46,103,1,1,0.61129 +123,36,155,559,46,107,1,1,0.57801 +124,36,145,560,46,105,1,1,0.556 +125,36,139,561,45,114,1,1,0.58015 +126,36,130,563,44,121,1,1,0.54171 +127,36,122,565,43,122,1,1,0.52365 +128,36,114,564,42,125,1,1,0.53027 +129,36,105,564,42,125,1,1,0.53008 +130,36,95,565,42,125,1,1,0.49631 +131,36,86,567,42,125,1,1,0.45681 +132,36,76,568,42,125,1,1,0.42986 +133,36,69,569,42,125,1,1,0.3935 +134,36,58,571,46,124,1,1,0.34945 +135,36,49,573,46,124,1,1,0.31438 +136,36,41,571,45,119,1,1,0.31667 +137,36,32,573,45,119,1,1,0.30833 +138,36,21,570,47,112,1,1,0.35398 +139,36,12,570,47,106,1,1,0.38318 +140,36,4,572,47,106,1,1,0.37383 +141,36,-7,573,47,106,1,1,0.31153 +142,36,-13,575,47,106,1,1,0.33002 +143,36,-22,572,47,106,1,1,0.52083 +144,36,-30,577,47,106,1,1,0.35417 +66,37,762,511,17,45,1,1,0.78261 +67,37,763,502,17,48,1,1,1 +68,37,760,506,17,48,1,1,0.90023 +69,37,761,507,15,47,1,1,0.8776 +70,37,756,509,16,45,1,1,0.88235 +71,37,754,507,16,45,1,1,0.8312 +72,37,750,509,16,45,1,1,0.94118 +73,37,749,506,16,45,1,1,0.94373 +74,37,747,509,15,42,1,1,1 +75,37,743,507,15,42,1,1,1 +76,37,742,505,15,42,1,1,1 +77,37,738,506,15,42,1,1,1 +78,37,734,505,15,42,1,1,1 +79,37,732,505,15,42,1,1,1 +80,37,728,506,15,42,1,1,1 +81,37,724,504,15,42,1,1,1 +82,37,720,506,15,42,1,1,1 +83,37,718,506,15,42,1,1,1 +84,37,712,506,14,42,1,1,1 +85,37,708,509,17,41,1,1,1 +86,37,704,509,17,41,1,1,1 +87,37,700,511,17,41,1,1,1 +88,37,698,512,17,41,1,1,1 +89,37,693,512,17,41,1,1,1 +90,37,688,515,17,41,1,1,1 +91,37,684,519,17,41,1,1,1 +92,37,682,519,17,41,1,1,1 +93,37,676,521,17,41,1,1,1 +94,37,672,522,17,41,1,1,1 +95,37,668,523,17,41,1,1,1 +96,37,661,522,17,47,1,1,1 +97,37,659,520,17,47,1,1,1 +98,37,655,523,17,47,1,1,1 +99,37,649,521,17,47,1,1,1 +100,37,645,523,17,47,1,1,1 +101,37,642,521,17,47,1,1,1 +102,37,636,523,17,47,1,1,1 +103,37,631,521,17,47,1,1,1 +104,37,627,522,17,47,1,1,0.94444 +105,37,622,522,17,47,1,1,0.94444 +106,37,617,521,17,47,1,1,0.94444 +107,37,612,522,17,47,1,1,1 +108,37,608,521,17,47,1,1,0.94444 +109,37,605,522,17,47,1,1,0.83333 +110,37,598,521,17,47,1,1,0.94444 +111,37,594,520,17,47,1,1,0.94444 +112,37,589,521,17,47,1,1,0.88889 +113,37,583,522,17,47,1,1,0.94444 +114,37,576,523,17,47,1,1,1 +115,37,571,521,17,47,1,1,1 +116,37,564,526,17,47,1,1,1 +117,37,560,524,17,47,1,1,1 +118,37,553,526,17,47,1,1,1 +119,37,549,527,17,47,1,1,1 +120,37,543,528,17,47,1,1,1 +121,37,537,530,17,47,1,1,1 +122,37,531,531,17,47,1,1,1 +123,37,527,532,17,47,1,1,1 +124,37,521,529,17,47,1,1,1 +125,37,514,529,17,47,1,1,1 +126,37,509,531,17,47,1,1,1 +127,37,500,530,20,53,1,1,0.95238 +128,37,496,529,18,55,1,1,1 +129,37,490,530,15,55,1,1,1 +130,37,486,529,15,57,1,1,1 +131,37,480,529,15,59,1,1,1 +132,37,476,530,18,58,1,1,1 +133,37,469,530,18,58,1,1,1 +134,37,462,532,18,58,1,1,1 +135,37,457,532,18,58,1,1,1 +136,37,450,531,18,58,1,1,1 +137,37,447,531,18,58,1,1,1 +138,37,441,530,18,58,1,1,1 +139,37,437,530,18,58,1,1,1 +140,37,431,530,18,58,1,1,1 +141,37,428,531,18,58,1,1,1 +142,37,423,529,18,58,1,1,1 +143,37,417,527,18,58,1,1,0.94737 +144,37,411,530,18,58,1,1,0.94737 +145,37,408,528,18,58,1,1,0.84211 +146,37,402,528,18,58,1,1,0.89474 +147,37,396,529,18,58,1,1,0.89474 +148,37,390,530,18,58,1,1,0.94737 +149,37,385,530,18,58,1,1,0.89474 +150,37,377,531,17,60,1,1,0.94627 +151,37,369,534,20,59,1,1,0.85714 +152,37,364,534,20,59,1,1,0.95238 +153,37,357,536,20,59,1,1,0.90476 +154,37,350,535,19,57,1,1,0.90172 +155,37,339,537,22,59,1,1,0.69565 +156,37,335,539,18,60,1,1,0.73684 +157,37,330,540,18,60,1,1,0.84211 +158,37,323,542,18,60,1,1,0.78947 +159,37,315,543,18,60,1,1,0.73684 +160,37,309,546,18,60,1,1,0.73684 +161,37,301,547,19,62,1,1,0.65 +162,37,299,546,19,62,1,1,0.85 +163,37,290,548,19,62,1,1,0.65 +164,37,285,547,19,62,1,1,0.7 +165,37,279,550,19,62,1,1,0.65 +166,37,273,550,19,62,1,1,0.65 +167,37,266,550,19,62,1,1,0.55 +168,37,261,549,19,62,1,1,0.55 +169,37,256,550,19,62,1,1,0.6 +170,37,249,550,19,62,1,1,0.5 +171,37,243,550,19,62,1,1,0.45 +172,37,236,548,18,64,1,1,0.31579 +173,37,234,547,18,64,1,1,0.47368 +174,37,231,545,17,66,1,1,0.56882 +175,37,228,544,17,67,1,1,0.68627 +176,37,224,545,17,67,1,1,0.73856 +177,37,217,543,17,67,1,1,0.64542 +178,37,212,546,17,67,1,1,0.63399 +179,37,207,545,17,67,1,1,0.63971 +180,37,201,547,17,67,1,1,0.5817 +181,37,198,547,17,67,1,1,0.69118 +182,37,190,548,21,66,1,1,0.57598 +183,37,185,550,21,66,1,1,0.56988 +184,37,181,552,21,66,1,1,0.60923 +185,37,173,555,21,66,1,1,0.47083 +186,37,168,555,21,66,1,1,0.43555 +187,37,163,558,21,66,1,1,0.41791 +188,37,151,559,21,66,1,1,0.11805 +189,37,150,563,21,66,1,1,0.22727 +190,37,146,559,19,64,1,1,0.24923 +191,37,142,561,21,66,1,1,0.31615 +192,37,137,559,20,70,1,1,0.30248 +193,37,132,562,20,68,1,1,0.23741 +194,37,125,564,20,71,1,1,0.12037 +195,37,122,564,20,71,1,1,0.17857 +196,37,116,567,20,71,1,1,0.060847 +197,37,110,566,20,72,1,1,0.027397 +198,37,108,567,20,72,1,1,0.12003 +199,37,102,569,20,72,1,1,0.013699 +200,37,96,569,20,72,1,1,0.013699 +201,37,87,568,20,75,1,1,0.085213 +202,37,81,568,20,77,1,1,0.18681 +203,37,72,571,23,75,1,1,0.30099 +204,37,66,574,25,74,1,1,0.34615 +205,37,62,574,25,75,1,1,0.30769 +206,37,58,575,25,75,1,1,0.30769 +207,37,53,577,25,76,1,1,0.30769 +208,37,49,577,26,78,1,1,0.2963 +209,37,43,578,18,75,1,1,0.47368 +210,37,38,579,20,77,1,1,0.47619 +211,37,34,581,20,77,1,1,0.47619 +212,37,28,580,20,77,1,1,0.57143 +213,37,24,580,19,80,1,1,0.6 +214,37,18,583,20,77,1,1,0.71429 +215,37,15,580,20,77,1,1,0.66667 +216,37,8,584,20,77,1,1,0.85714 +217,37,5,584,20,77,1,1,0.80952 +218,37,1,585,20,77,1,1,0.85714 +219,37,-2,585,20,77,1,1,0.66667 +220,37,-6,589,20,77,1,1,0.52381 +221,37,-9,590,20,77,1,1,0.33333 +15,38,639,518,20,68,1,1,0.16356 +16,38,637,519,20,68,1,1,0.12974 +17,38,635,521,20,68,1,1,0.14838 +18,38,635,521,20,68,1,1,0.14769 +19,38,635,525,16,67,1,1,0.10294 +20,38,634,524,16,67,1,1,0.11851 +21,38,630,525,16,67,1,1,0.12803 +22,38,627,525,16,67,1,1,0.16349 +23,38,627,526,16,67,1,1,0.1583 +24,38,625,529,16,67,1,1,0.1436 +25,38,623,530,16,67,1,1,0.16349 +26,38,621,532,16,67,1,1,0.16263 +27,38,618,534,16,67,1,1,0.16782 +28,38,616,534,16,67,1,1,0.19983 +29,38,615,535,16,67,1,1,0.21453 +30,38,613,537,16,67,1,1,0.22318 +31,38,613,554,16,67,1,1,0.14533 +32,38,612,546,16,67,1,1,0.16696 +33,38,611,539,18,66,1,1,0.16182 +34,38,608,543,18,66,1,1,0.2718 +35,38,609,534,18,66,1,1,0.31186 +36,38,607,530,19,81,1,1,0.27866 +37,38,607,528,19,81,1,1,0.26585 +38,38,604,529,19,81,1,1,0.23354 +39,38,604,522,19,81,1,1,0.24634 +40,38,601,521,19,81,1,1,0.26524 +41,38,600,522,19,81,1,1,0.29024 +42,38,598,524,19,81,1,1,0.27683 +43,38,596,528,19,81,1,1,0.25 +44,38,593,528,19,81,1,1,0.21098 +45,38,591,527,21,80,1,1,0.22503 +46,38,588,527,23,87,1,1,0.20502 +47,38,584,527,27,86,1,1,0.20567 +48,38,581,531,27,84,1,1,0.1916 +49,38,578,532,28,83,1,1,0.18924 +50,38,577,530,26,85,1,1,0.22351 +51,38,573,531,26,85,1,1,0.22653 +52,38,573,532,26,85,1,1,0.23428 +53,38,570,533,25,95,1,1,0.22276 +54,38,567,533,28,94,1,1,0.20871 +55,38,565,533,27,95,1,1,0.19531 +56,38,563,533,27,96,1,1,0.18704 +57,38,562,531,27,97,1,1,0.20262 +58,38,557,530,29,98,1,1,0.20404 +59,38,554,529,31,98,1,1,0.20455 +60,38,554,529,28,97,1,1,0.19986 +61,38,549,529,30,96,1,1,0.21151 +62,38,548,525,29,98,1,1,0.18316 +63,38,543,538,30,98,1,1,0.19062 +64,38,543,527,30,98,1,1,0.1942 +65,38,537,530,30,98,1,1,0.22874 +66,38,536,540,30,98,1,1,0.18866 +67,38,525,527,37,105,1,1,0.24975 +68,38,521,534,37,105,1,1,0.22195 +69,38,518,530,37,105,1,1,0.22617 +70,38,512,534,36,102,1,1,0.23039 +71,38,509,533,36,102,1,1,0.20703 +72,38,502,535,36,102,1,1,0.2603 +73,38,498,532,36,102,1,1,0.21595 +74,38,494,532,36,102,1,1,0.21622 +75,38,492,531,33,101,1,1,0.19723 +76,38,487,531,32,98,1,1,0.20386 +77,38,482,530,32,98,1,1,0.2112 +78,38,476,534,32,106,1,1,0.15916 +79,38,473,533,32,106,1,1,0.17134 +80,38,466,540,32,106,1,1,0.11215 +81,38,461,540,32,106,1,1,0.11385 +82,38,455,539,31,105,1,1,0.13149 +83,38,450,539,30,109,1,1,0.12786 +84,38,441,537,32,111,1,1,0.15476 +85,38,430,540,39,110,1,1,0.13739 +86,38,424,542,39,110,1,1,0.13153 +87,38,416,543,39,110,1,1,0.14324 +88,38,410,543,39,110,1,1,0.15946 +89,38,402,543,40,111,1,1,0.17618 +90,38,392,548,42,112,1,1,0.15188 +91,38,387,551,42,114,1,1,0.14803 +92,38,380,550,41,118,1,1,0.18487 +93,38,372,556,41,118,1,1,0.15526 +94,38,366,558,41,118,1,1,0.16086 +95,38,359,564,41,118,1,1,0.13325 +96,38,352,566,43,117,1,1,0.12173 +97,38,344,560,42,122,1,1,0.17262 +98,38,336,566,42,122,1,1,0.15409 +99,38,320,562,52,121,1,1,0.23384 +100,38,312,567,56,120,1,1,0.18037 +101,38,304,568,55,117,1,1,0.17872 +102,38,296,566,54,118,1,1,0.18044 +103,38,287,563,55,126,1,1,0.21344 +104,38,287,561,47,127,1,1,0.23014 +105,38,279,560,47,127,1,1,0.24512 +106,38,269,565,52,126,1,1,0.23117 +107,38,260,564,52,126,1,1,0.22092 +108,38,256,564,45,130,1,1,0.26303 +109,38,254,568,41,129,1,1,0.26648 +110,38,245,563,39,133,1,1,0.28451 +111,38,237,565,39,133,1,1,0.25261 +112,38,228,565,38,136,1,1,0.21636 +113,38,217,567,38,136,1,1,0.20251 +114,38,207,566,38,136,1,1,0.21636 +115,38,198,569,38,136,1,1,0.22197 +116,38,188,574,38,136,1,1,0.19502 +117,38,178,573,38,136,1,1,0.22965 +118,38,165,571,37,139,1,1,0.25282 +119,38,158,572,38,141,1,1,0.2472 +120,38,142,577,42,140,1,1,0.22464 +121,38,134,577,42,140,1,1,0.25449 +122,38,120,577,44,139,1,1,0.26603 +123,38,112,583,44,139,1,1,0.23571 +124,38,99,582,46,142,1,1,0.24952 +125,38,89,584,46,142,1,1,0.24877 +126,38,80,587,46,142,1,1,0.24104 +127,38,65,587,50,146,1,1,0.25877 +128,38,55,591,50,146,1,1,0.22529 +129,38,43,589,49,154,1,1,0.22374 +130,38,29,587,48,157,1,1,0.21157 +131,38,18,586,47,160,1,1,0.23163 +132,38,6,589,47,160,1,1,0.54581 +133,38,-1,591,47,160,1,1,0.41278 +134,38,-7,593,47,160,1,1,0.18219 +135,38,-22,601,47,160,1,1,0.05823 +136,38,-30,607,47,160,1,1,0.028597 +137,38,-37,609,47,160,1,1,0.20833 +1,39,1183,490,13,35,1,1,0.72222 +2,39,1184,482,15,35,1,1,0.86111 +3,39,1185,485,15,35,1,1,0.80556 +4,39,1189,483,12,34,1,1,0.94286 +5,39,1190,488,14,33,1,1,0.85294 +6,39,1192,499,14,35,1,1,0.86111 +7,39,1194,490,14,35,1,1,0.88889 +8,39,1193,500,14,35,1,1,0.95556 +9,39,1195,500,14,35,1,1,1 +10,39,1197,506,14,35,1,1,1 +11,39,1196,498,13,37,1,1,1 +12,39,1197,501,13,37,1,1,1 +13,39,1199,493,13,38,1,1,1 +14,39,1197,495,15,37,1,1,1 +15,39,1200,494,15,37,1,1,1 +16,39,1200,494,15,37,1,1,1 +17,39,1201,494,15,37,1,1,1 +18,39,1202,494,15,37,1,1,1 +19,39,1203,493,15,37,1,1,1 +20,39,1204,493,15,37,1,1,1 +21,39,1204,494,15,37,1,1,1 +22,39,1205,495,15,37,1,1,1 +23,39,1206,495,15,37,1,1,1 +24,39,1205,494,15,37,1,1,1 +25,39,1207,498,15,37,1,1,1 +26,39,1209,499,15,37,1,1,1 +27,39,1209,501,15,37,1,1,1 +28,39,1210,502,15,37,1,1,1 +29,39,1212,506,15,37,1,1,1 +30,39,1210,509,15,37,1,1,1 +31,39,1212,515,15,37,1,1,1 +32,39,1213,516,15,37,1,1,1 +33,39,1212,504,15,37,1,1,1 +34,39,1213,507,15,37,1,1,1 +35,39,1214,500,15,37,1,1,1 +36,39,1216,498,15,37,1,1,1 +37,39,1216,497,15,36,1,1,1 +38,39,1215,492,16,37,1,1,1 +39,39,1219,493,16,37,1,1,1 +40,39,1217,489,16,40,1,1,1 +41,39,1219,490,16,40,1,1,0.92826 +42,39,1220,491,16,40,1,1,0.87805 +43,39,1221,495,15,38,1,1,0.87179 +44,39,1221,497,16,37,1,1,0.89474 +45,39,1224,496,15,39,1,1,0.925 +46,39,1224,496,14,41,1,1,0.88095 +47,39,1225,497,16,40,1,1,0.90244 +48,39,1225,499,16,40,1,1,0.87805 +49,39,1226,502,16,40,1,1,0.82927 +50,39,1227,498,16,40,1,1,0.92683 +51,39,1227,502,16,40,1,1,0.87805 +52,39,1228,500,16,40,1,1,0.95122 +53,39,1228,500,16,40,1,1,0.95122 +54,39,1229,500,16,40,1,1,0.92683 +55,39,1230,500,16,40,1,1,0.90244 +56,39,1230,499,16,40,1,1,0.90244 +57,39,1230,498,16,40,1,1,0.85366 +58,39,1230,497,16,40,1,1,0.82927 +59,39,1229,495,17,40,1,1,0.82927 +60,39,1229,494,17,39,1,1,0.85 +61,39,1229,493,18,39,1,1,0.86184 +62,39,1231,492,16,41,1,1,0.94958 +63,39,1231,487,16,41,1,1,1 +64,39,1232,493,16,41,1,1,1 +65,39,1230,492,16,41,1,1,1 +66,39,1231,490,16,41,1,1,1 +67,39,1232,495,16,41,1,1,1 +68,39,1230,493,16,41,1,1,1 +69,39,1230,496,16,41,1,1,1 +70,39,1227,496,16,41,1,1,1 +71,39,1226,495,16,41,1,1,1 +72,39,1224,496,16,41,1,1,1 +73,39,1223,495,16,41,1,1,1 +74,39,1222,494,16,41,1,1,1 +75,39,1221,495,14,42,1,1,1 +76,39,1219,494,16,41,1,1,1 +77,39,1216,496,17,40,1,1,1 +78,39,1213,495,17,40,1,1,1 +79,39,1212,494,17,40,1,1,1 +80,39,1210,495,17,40,1,1,1 +81,39,1207,493,17,40,1,1,1 +82,39,1204,494,17,40,1,1,1 +83,39,1201,494,17,40,1,1,1 +84,39,1199,494,17,40,1,1,1 +85,39,1196,495,17,40,1,1,1 +86,39,1194,494,16,42,1,1,1 +87,39,1192,495,16,42,1,1,1 +88,39,1186,496,18,43,1,1,1 +89,39,1184,495,18,43,1,1,1 +90,39,1180,498,18,43,1,1,1 +91,39,1178,500,17,42,1,1,1 +92,39,1176,500,17,42,1,1,1 +93,39,1176,504,13,40,1,1,1 +94,39,1171,502,15,44,1,1,1 +95,39,1169,504,15,44,1,1,1 +96,39,1165,504,15,44,1,1,1 +97,39,1161,503,15,44,1,1,1 +98,39,1158,505,15,44,1,1,1 +99,39,1156,506,15,44,1,1,1 +100,39,1152,506,14,45,1,1,1 +101,39,1149,506,14,45,1,1,1 +102,39,1145,505,14,45,1,1,1 +103,39,1141,506,16,44,1,1,1 +104,39,1136,508,18,43,1,1,1 +105,39,1133,509,17,42,1,1,1 +106,39,1130,509,17,42,1,1,1 +107,39,1127,505,16,45,1,1,1 +108,39,1123,506,18,44,1,1,1 +109,39,1120,506,18,44,1,1,1 +110,39,1116,506,18,44,1,1,1 +111,39,1112,507,18,41,1,1,1 +112,39,1110,505,17,44,1,1,1 +113,39,1106,505,17,44,1,1,1 +114,39,1102,506,19,43,1,1,1 +115,39,1098,505,19,43,1,1,1 +116,39,1092,508,19,43,1,1,1 +117,39,1090,508,19,43,1,1,1 +118,39,1085,506,19,43,1,1,1 +119,39,1083,506,19,43,1,1,1 +120,39,1078,507,19,43,1,1,1 +121,39,1075,506,19,43,1,1,1 +122,39,1072,506,19,43,1,1,1 +123,39,1070,504,16,43,1,1,1 +124,39,1067,506,16,43,1,1,1 +125,39,1063,506,16,43,1,1,1 +126,39,1059,505,16,43,1,1,1 +127,39,1054,506,16,43,1,1,1 +128,39,1051,506,16,43,1,1,1 +129,39,1047,506,16,43,1,1,1 +130,39,1043,506,17,44,1,1,1 +131,39,1039,509,16,41,1,1,1 +132,39,1034,508,17,43,1,1,1 +133,39,1031,509,16,41,1,1,1 +134,39,1026,508,16,41,1,1,1 +135,39,1022,509,16,41,1,1,1 +136,39,1018,508,16,41,1,1,1 +137,39,1014,508,16,42,1,1,1 +138,39,1011,506,16,42,1,1,1 +139,39,1007,506,16,42,1,1,1 +140,39,1004,505,17,45,1,1,1 +141,39,999,503,19,44,1,1,1 +142,39,997,502,18,46,1,1,1 +143,39,995,501,18,46,1,1,1 +144,39,991,503,18,46,1,1,1 +145,39,988,504,18,46,1,1,1 +146,39,985,503,18,46,1,1,1 +147,39,982,504,18,46,1,1,1 +148,39,978,505,18,46,1,1,1 +149,39,973,503,19,47,1,1,1 +150,39,968,504,21,46,1,1,1 +151,39,966,506,19,47,1,1,1 +152,39,962,506,19,47,1,1,1 +153,39,958,504,19,47,1,1,1 +154,39,953,503,19,47,1,1,1 +155,39,949,504,19,47,1,1,1 +156,39,944,504,19,47,1,1,1 +157,39,940,504,19,47,1,1,1 +158,39,936,505,19,47,1,1,1 +159,39,932,504,19,47,1,1,1 +160,39,929,506,20,48,1,1,1 +161,39,925,505,20,48,1,1,1 +162,39,921,505,20,48,1,1,1 +163,39,918,506,20,48,1,1,1 +164,39,916,505,19,47,1,1,1 +165,39,913,505,19,47,1,1,1 +166,39,909,504,19,47,1,1,1 +167,39,906,507,19,47,1,1,1 +168,39,903,506,19,47,1,1,1 +169,39,901,506,19,47,1,1,1 +170,39,898,505,19,47,1,1,1 +171,39,895,505,19,47,1,1,1 +172,39,892,505,19,47,1,1,1 +173,39,890,504,19,47,1,1,1 +174,39,888,504,19,47,1,1,1 +175,39,885,504,19,47,1,1,1 +176,39,882,504,19,47,1,1,1 +177,39,881,504,19,47,1,1,1 +178,39,879,506,19,47,1,1,1 +179,39,877,506,19,47,1,1,1 +180,39,874,505,19,47,1,1,1 +181,39,871,506,19,47,1,1,1 +182,39,870,504,19,50,1,1,1 +183,39,867,505,19,50,1,1,1 +184,39,864,505,19,50,1,1,1 +185,39,863,508,18,48,1,1,1 +186,39,861,509,18,48,1,1,1 +187,39,859,510,18,46,1,1,1 +188,39,856,510,19,48,1,1,1 +189,39,855,510,18,46,1,1,1 +190,39,854,510,18,45,1,1,1 +191,39,850,510,19,48,1,1,1 +192,39,849,510,19,48,1,1,1 +193,39,848,511,19,48,1,1,1 +194,39,846,511,19,48,1,1,1 +195,39,844,511,19,48,1,1,1 +196,39,843,512,19,48,1,1,1 +197,39,841,514,18,46,1,1,1 +198,39,840,513,17,49,1,1,1 +199,39,838,513,17,49,1,1,1 +200,39,837,513,17,49,1,1,1 +201,39,837,514,17,49,1,1,1 +202,39,836,515,17,49,1,1,1 +203,39,834,514,17,49,1,1,1 +204,39,833,514,17,49,1,1,1 +205,39,832,514,17,49,1,1,1 +206,39,832,514,17,49,1,1,1 +207,39,831,517,13,48,1,1,1 +208,39,829,518,15,47,1,1,1 +209,39,827,518,15,47,1,1,1 +210,39,826,519,15,47,1,1,1 +211,39,825,521,15,47,1,1,1 +212,39,825,522,15,46,1,1,1 +213,39,825,523,15,45,1,1,1 +214,39,825,524,15,45,1,1,1 +215,39,825,523,14,45,1,1,1 +216,39,825,522,14,46,1,1,1 +217,39,825,521,14,47,1,1,1 +218,39,825,520,14,48,1,1,1 +219,39,825,519,14,49,1,1,1 +220,39,825,519,13,52,1,1,1 +221,39,825,519,15,51,1,1,1 +222,39,824,518,16,51,1,1,1 +223,39,824,518,16,51,1,1,1 +224,39,824,518,16,51,1,1,1 +225,39,825,518,16,51,1,1,1 +226,39,825,519,16,51,1,1,1 +227,39,826,521,16,51,1,1,1 +228,39,827,520,16,51,1,1,1 +229,39,827,521,16,51,1,1,1 +230,39,828,520,17,51,1,1,1 +231,39,829,522,17,51,1,1,1 +232,39,829,520,17,51,1,1,1 +233,39,831,520,17,51,1,1,1 +234,39,832,519,17,51,1,1,1 +235,39,833,519,17,51,1,1,1 +236,39,836,521,16,48,1,1,1 +237,39,836,522,17,47,1,1,1 +238,39,838,520,19,49,1,1,1 +239,39,839,518,19,49,1,1,1 +240,39,841,517,19,49,1,1,1 +241,39,844,518,19,49,1,1,1 +242,39,846,517,19,49,1,1,1 +243,39,850,516,19,49,1,1,1 +244,39,853,517,19,49,1,1,1 +245,39,856,517,19,49,1,1,1 +246,39,858,518,19,49,1,1,1 +247,39,862,517,19,49,1,1,1 +248,39,865,517,19,49,1,1,1 +249,39,870,517,18,51,1,1,1 +250,39,871,517,19,50,1,1,0.97745 +251,39,875,517,19,50,1,1,0.97843 +252,39,878,519,21,49,1,1,0.91636 +253,39,882,519,21,49,1,1,0.87455 +254,39,887,518,21,49,1,1,0.84 +255,39,893,520,21,49,1,1,0.83273 +256,39,897,519,21,49,1,1,0.8 +257,39,899,518,23,48,1,1,0.7449 +258,39,906,517,23,48,1,1,0.77381 +259,39,911,518,23,48,1,1,0.75765 +260,39,916,517,22,50,1,1,0.71014 +261,39,921,517,22,50,1,1,0.69309 +262,39,927,517,22,50,1,1,0.69224 +263,39,931,517,22,50,1,1,0.62745 +264,39,936,518,22,50,1,1,0.62745 +265,39,941,519,22,50,1,1,0.62745 +266,39,948,519,22,49,1,1,0.66 +267,39,952,518,22,49,1,1,0.68 +268,39,957,520,22,49,1,1,0.64 +269,39,964,520,22,49,1,1,0.64 +270,39,967,517,25,48,1,1,0.73469 +271,39,973,517,25,48,1,1,0.71429 +272,39,978,518,25,48,1,1,0.69388 +273,39,983,518,25,48,1,1,0.69388 +274,39,990,516,20,41,1,1,0.85714 +275,39,995,515,20,41,1,1,0.90476 +276,39,1000,515,20,41,1,1,0.90476 +277,39,1006,515,22,40,1,1,0.95122 +278,39,1010,514,22,40,1,1,0.97561 +279,39,1015,514,22,40,1,1,1 +280,39,1021,516,21,41,1,1,0.92857 +281,39,1026,515,21,40,1,1,1 +282,39,1029,515,25,41,1,1,0.97619 +283,39,1034,515,25,41,1,1,0.97619 +284,39,1041,516,25,41,1,1,0.95238 +285,39,1047,516,25,41,1,1,0.95238 +286,39,1053,514,24,44,1,1,0.93333 +287,39,1058,515,24,44,1,1,0.91111 +288,39,1063,512,24,44,1,1,0.97778 +289,39,1068,514,24,44,1,1,0.93333 +290,39,1073,511,24,46,1,1,0.95745 +291,39,1079,513,24,46,1,1,0.91489 +292,39,1083,510,23,48,1,1,0.95918 +293,39,1090,511,22,49,1,1,0.92 +294,39,1094,511,23,48,1,1,0.95918 +295,39,1098,512,24,51,1,1,0.90385 +296,39,1103,514,23,54,1,1,0.84318 +297,39,1107,514,23,54,1,1,0.86364 +298,39,1113,513,23,54,1,1,0.90455 +299,39,1117,514,23,54,1,1,0.92576 +300,39,1122,516,23,54,1,1,0.93333 +301,39,1126,517,23,54,1,1,0.95758 +302,39,1131,515,22,56,1,1,0.98169 +303,39,1134,516,22,56,1,1,1 +304,39,1138,521,25,55,1,1,1 +305,39,1143,522,25,55,1,1,1 +306,39,1147,526,25,56,1,1,1 +307,39,1151,526,25,56,1,1,1 +308,39,1154,525,25,56,1,1,1 +309,39,1161,526,24,57,1,1,1 +310,39,1165,528,24,57,1,1,1 +311,39,1168,527,24,57,1,1,1 +312,39,1173,527,24,57,1,1,1 +313,39,1177,528,24,57,1,1,1 +314,39,1180,529,24,57,1,1,1 +315,39,1185,529,24,57,1,1,1 +316,39,1189,529,24,57,1,1,1 +317,39,1193,529,24,57,1,1,1 +318,39,1196,529,24,57,1,1,1 +319,39,1200,528,24,57,1,1,1 +320,39,1202,529,24,57,1,1,1 +321,39,1205,528,24,57,1,1,1 +322,39,1210,527,24,57,1,1,1 +323,39,1212,526,24,57,1,1,1 +324,39,1216,527,24,57,1,1,1 +325,39,1220,526,24,57,1,1,1 +326,39,1222,525,24,57,1,1,1 +327,39,1224,524,24,57,1,1,1 +328,39,1226,523,24,57,1,1,1 +329,39,1230,522,24,57,1,1,1 +330,39,1231,520,24,57,1,1,0.33103 +331,39,1235,516,24,57,1,1,0.38621 +332,39,1235,515,24,57,1,1,0.34759 +333,39,1238,509,24,57,1,1,0.34 +334,39,1239,509,24,57,1,1,0.35517 +335,39,1241,508,24,57,1,1,0.31034 +336,39,1243,502,24,57,1,1,0.25172 +337,39,1250,504,19,56,1,1,0.28421 +338,39,1251,504,19,56,1,1,0.24561 +339,39,1253,502,19,56,1,1,0.19649 +340,39,1254,501,19,56,1,1,0.15263 +341,39,1257,503,19,56,1,1,0.17807 +342,39,1258,501,19,56,1,1,0.10526 +343,39,1260,509,18,55,1,1,0.10902 +344,39,1261,513,18,55,1,1,0.058271 +345,39,1261,516,19,54,1,1,0.027273 +346,39,1262,525,18,55,1,1,0.071429 +347,39,1266,520,18,55,1,1,0 +348,39,1263,532,20,54,1,1,0.2026 +349,39,1268,524,18,53,1,1,0.081871 +350,39,1269,523,18,54,1,1,0.11962 +351,39,1269,529,18,55,1,1,0.16917 +352,39,1270,534,18,55,1,1,0.21711 +353,39,1272,534,20,53,1,1,0.17901 +354,39,1273,538,20,53,1,1,0.21869 +355,39,1275,538,20,53,1,1,0.17284 +356,39,1275,539,20,53,1,1,0.21429 +357,39,1276,541,20,53,1,1,0.2381 +358,39,1276,543,20,53,1,1,0.28571 +359,39,1277,545,20,53,1,1,0.28571 +360,39,1277,546,20,53,1,1,0.30864 +361,39,1278,548,20,53,1,1,0.33069 +362,39,1278,550,20,53,1,1,0.37478 +363,39,1279,552,20,53,1,1,0.37478 +364,39,1280,554,20,53,1,1,0.39683 +365,39,1279,554,20,53,1,1,0.40741 +366,39,1278,554,20,53,1,1,0.37037 +367,39,1277,555,20,53,1,1,0.35185 +368,39,1278,555,19,54,1,1,0.32727 +369,39,1279,556,19,54,1,1,0.34364 +370,39,1280,556,19,56,1,1,0.35263 +371,39,1281,557,19,56,1,1,0.29825 +372,39,1282,557,19,58,1,1,0.32203 +373,39,1283,558,19,58,1,1,0.33898 +374,39,1284,559,19,59,1,1,0.36667 +375,39,1283,553,19,60,1,1,0.27869 +376,39,1283,548,19,61,1,1,0.20968 +377,39,1283,543,19,62,1,1,0.14286 +378,39,1280,541,20,63,1,1,0.125 +379,39,1278,540,21,63,1,1,0.14986 +380,39,1275,539,23,63,1,1,0.24479 +381,39,1273,537,23,64,1,1,0.30769 +382,39,1270,536,25,64,1,1,0.28994 +383,39,1268,535,26,64,1,1,0.27009 +384,39,1266,534,27,64,1,1,0.22912 +385,39,1264,531,25,65,1,1,0.21678 +386,39,1262,528,24,66,1,1,0.2 +387,39,1260,525,23,68,1,1,0.083333 +388,39,1255,526,24,68,1,1,0.14551 +389,39,1251,527,24,68,1,1,0.17101 +390,39,1246,528,25,68,1,1,0.22742 +391,39,1242,530,25,68,1,1,0.14994 +392,39,1233,528,25,67,1,1,0.20362 +393,39,1225,526,24,67,1,1,0.21176 +394,39,1216,524,24,67,1,1,0.32 +395,39,1208,522,23,67,1,1,0.29167 +396,39,1199,520,23,67,1,1,0.29167 +112,40,1507,522,32,67,1,1,1 +113,40,1503,522,32,67,1,1,1 +114,40,1499,522,32,67,1,1,1 +115,40,1495,522,32,68,1,1,1 +116,40,1491,522,31,68,1,1,1 +117,40,1488,523,30,68,1,1,1 +118,40,1483,522,29,64,1,1,1 +119,40,1480,522,27,64,1,1,1 +120,40,1478,522,25,64,1,1,1 +121,40,1473,519,24,67,1,1,1 +122,40,1467,518,24,67,1,1,1 +123,40,1463,518,23,67,1,1,1 +124,40,1460,519,21,67,1,1,1 +125,40,1455,517,18,68,1,1,1 +126,40,1450,517,18,68,1,1,0.043478 +127,40,1445,517,18,69,1,1,0.10677 +128,40,1440,517,19,70,1,1,0.1507 +129,40,1435,517,19,71,1,1,0.25556 +130,40,1431,517,19,71,1,1,0.25556 +131,40,1427,518,19,71,1,1,0.24444 +132,40,1423,518,19,71,1,1,0.25556 +133,40,1416,518,19,71,1,1,0.39514 +134,40,1411,518,19,71,1,1,0.49583 +135,40,1406,518,19,71,1,1,0.53472 +136,40,1397,519,24,70,1,1,0.62254 +137,40,1392,519,27,70,1,1,0.59557 +138,40,1387,520,31,70,1,1,0.58099 +139,40,1383,519,31,71,1,1,0.58681 +140,40,1379,519,32,71,1,1,0.57071 +141,40,1374,519,31,71,1,1,0.64583 +142,40,1369,519,31,71,1,1,0.67535 +143,40,1365,520,30,70,1,1,0.69105 +144,40,1360,520,30,70,1,1,0.75284 +145,40,1356,520,29,70,1,1,0.70845 +146,40,1351,521,28,70,1,1,0.72802 +147,40,1347,521,27,70,1,1,0.6831 +148,40,1342,521,27,70,1,1,0.6831 +149,40,1338,522,26,69,1,1,0.62963 +150,40,1333,522,26,69,1,1,0.017989 +151,40,1329,523,25,69,1,1,0.57692 +152,40,1324,523,24,68,1,1,0.6 +153,40,1319,523,24,68,1,1,0.6 +154,40,1314,523,24,68,1,1,0.6 +155,40,1309,523,24,67,1,1,0.56 +156,40,1305,523,23,67,1,1,0.54167 +157,40,1300,523,22,67,1,1,0.52174 +158,40,1295,523,22,66,1,1,0.52174 +159,40,1290,523,22,66,1,1,0.52174 +160,40,1285,523,22,66,1,1,0.47826 +161,40,1281,523,21,66,1,1,0.45455 +162,40,1277,518,24,70,1,1,0.34873 +163,40,1269,524,25,70,1,1,1 +164,40,1266,518,24,70,1,1,0.38535 +165,40,1260,521,24,70,1,1,0.28 +1,41,979,498,29,24,0,3,1 +2,41,981,490,29,24,0,3,1 +3,41,982,491,29,24,0,3,1 +4,41,984,493,29,24,0,3,1 +5,41,986,495,29,24,0,3,1 +6,41,989,508,29,24,0,3,1 +7,41,988,498,30,24,0,3,1 +8,41,988,504,29,24,0,3,1 +9,41,990,506,29,25,0,3,1 +10,41,992,509,29,25,0,3,1 +11,41,988,505,29,24,0,3,0.89867 +12,41,988,503,29,24,0,3,1 +13,41,989,501,29,24,0,3,0.84 +14,41,990,500,29,24,0,3,0.88 +15,41,990,499,29,24,0,3,0.92 +16,41,991,499,29,24,0,3,0.92 +17,41,992,499,29,24,0,3,0.92 +18,41,993,499,29,24,0,3,0.96 +19,41,994,499,29,24,0,3,0.96 +20,41,995,499,29,24,0,3,0.97733 +21,41,996,499,29,24,0,3,1 +22,41,996,500,29,24,0,3,1 +23,41,997,502,29,23,0,3,1 +24,41,997,503,30,24,0,3,1 +25,41,998,505,30,23,0,3,1 +26,41,998,506,31,23,0,3,1 +27,41,999,508,31,23,0,3,1 +28,41,999,508,31,23,0,3,1 +29,41,999,511,31,22,0,3,1 +30,41,1000,513,29,23,0,3,1 +31,41,1000,521,30,24,0,3,1 +32,41,999,514,31,24,0,3,1 +33,41,999,508,32,23,0,3,1 +34,41,1001,513,30,22,0,3,1 +35,41,1000,503,34,23,0,3,1 +36,41,1000,501,34,23,0,3,1 +37,41,1001,499,33,23,0,3,1 +38,41,1002,496,31,23,0,3,1 +39,41,1002,495,31,23,0,3,1 +40,41,1003,494,30,23,0,3,1 +41,41,1004,493,30,23,0,3,1 +42,41,1004,493,30,24,0,3,1 +43,41,1005,494,30,24,0,3,1 +44,41,1006,495,30,24,0,3,1 +45,41,1007,496,30,24,0,3,1 +46,41,1008,497,30,24,0,3,1 +47,41,1009,498,30,24,0,3,1 +48,41,1009,500,29,24,0,3,1 +49,41,1009,502,29,24,0,3,1 +50,41,1009,502,29,24,0,3,1 +51,41,1009,502,29,24,0,3,1 +52,41,1009,501,30,24,0,3,1 +53,41,1009,501,32,23,0,3,1 +54,41,1009,500,31,23,0,3,1 +55,41,1009,500,31,23,0,3,1 +56,41,1009,499,31,23,0,3,1 +57,41,1009,499,31,23,0,3,1 +58,41,1008,497,31,23,0,3,1 +59,41,1008,495,30,23,0,3,1 +60,41,1008,493,29,23,0,3,1 +61,41,1008,491,29,24,0,3,1 +62,41,1008,491,29,24,0,3,1 +63,41,1009,491,28,24,0,3,1 +64,41,1010,492,28,24,0,3,0.93655 +65,41,1010,492,28,23,0,3,0.91379 +66,41,1010,492,28,23,0,3,0.85632 +67,41,1010,492,28,23,0,3,0.79885 +68,41,1008,492,28,23,0,3,0.82759 +69,41,1006,493,29,23,0,3,0.86111 +70,41,1004,493,29,24,0,3,0.816 +71,41,1003,494,29,24,0,3,0.73333 +72,41,1000,493,29,24,0,3,0.73333 +73,41,998,492,29,24,0,3,0.7 +74,41,995,492,29,24,0,3,0.73333 +75,41,993,491,29,24,0,3,0.69333 +76,41,990,491,29,24,0,3,0.68 +77,41,988,490,29,24,0,3,0.66267 +78,41,985,489,29,24,0,3,0.67733 +79,41,983,489,29,24,0,3,0.632 +80,41,980,488,29,24,0,3,0.61867 +81,41,978,488,29,24,0,3,0.58933 +82,41,978,489,30,24,0,3,0.57419 +83,41,974,489,30,24,0,3,0.62065 +84,41,971,490,30,23,0,3,0.60484 +85,41,968,490,30,24,0,3,0.62065 +86,41,965,491,30,23,0,3,0.60484 +87,41,962,491,29,24,0,3,0.608 +88,41,959,492,29,23,0,3,0.66667 +89,41,956,492,29,24,0,3,0.70667 +90,41,953,493,29,23,0,3,0.725 +91,41,950,494,29,23,0,3,0.71667 +92,41,946,495,29,23,0,3,0.71111 +93,41,942,497,29,23,0,3,0.68889 +94,41,938,498,29,23,0,3,0.70833 +95,41,934,500,29,23,0,3,0.70833 +96,41,931,502,29,23,0,3,0.71111 +97,41,927,501,29,24,0,3,0.744 +98,41,923,501,29,24,0,3,0.80933 +99,41,919,501,29,24,0,3,0.79467 +100,41,915,501,29,24,0,3,0.8 +101,41,912,501,29,24,0,3,0.808 +102,41,909,500,29,24,0,3,0.86 +103,41,906,500,29,24,0,3,0.872 +104,41,903,500,29,24,0,3,0.90933 +105,41,898,499,29,24,0,3,0.89333 +106,41,894,499,29,24,0,3,0.90933 +107,41,890,499,29,24,0,3,0.904 +108,41,886,499,29,24,0,3,0.904 +109,41,881,499,29,24,0,3,0.88667 +110,41,877,499,29,24,0,3,0.89867 +111,41,873,499,29,24,0,3,0.94933 +112,41,870,499,28,24,0,3,1 +113,41,865,499,28,23,0,3,1 +114,41,860,499,29,23,0,3,1 +115,41,855,499,29,23,0,3,1 +116,41,851,499,29,23,0,3,1 +117,41,846,499,30,23,0,3,1 +118,41,841,499,30,23,0,3,1 +119,41,836,499,31,23,0,3,1 +120,41,832,499,31,23,0,3,1 +121,41,825,499,29,24,0,3,1 +122,41,820,498,30,24,0,3,0.98065 +123,41,816,498,30,24,0,3,1 +124,41,812,498,30,24,0,3,1 +125,41,808,498,30,23,0,3,1 +126,41,804,498,30,23,0,3,1 +127,41,800,498,31,23,0,3,1 +128,41,794,498,31,23,0,3,1 +129,41,789,498,30,23,0,3,1 +130,41,783,498,30,23,0,3,1 +131,41,778,498,29,24,0,3,1 +132,41,773,498,29,24,0,3,1 +133,41,768,498,29,24,0,3,1 +134,41,763,499,30,24,0,3,1 +135,41,758,498,30,24,0,3,1 +136,41,753,498,30,24,0,3,1 +137,41,749,498,29,24,0,3,1 +138,41,744,498,30,24,0,3,1 +139,41,740,498,29,24,0,3,1 +140,41,735,498,29,24,0,3,0.95467 +141,41,731,498,29,24,0,3,0.97867 +142,41,729,497,30,24,0,3,0.97677 +143,41,724,497,30,24,0,3,0.95871 +144,41,719,497,30,24,0,3,1 +145,41,714,497,30,24,0,3,1 +146,41,709,497,30,24,0,3,1 +147,41,704,497,30,24,0,3,1 +148,41,699,497,30,24,0,3,1 +149,41,694,497,30,24,0,3,1 +150,41,689,497,30,24,0,3,1 +151,41,685,498,29,24,0,3,1 +152,41,679,498,29,24,0,3,1 +153,41,673,498,29,24,0,3,1 +154,41,667,498,29,24,0,3,1 +155,41,662,499,29,24,0,3,1 +156,41,656,500,29,23,0,3,1 +157,41,651,501,29,23,0,3,1 +158,41,646,502,29,23,0,3,1 +159,41,641,503,29,23,0,3,1 +160,41,636,504,29,23,0,3,1 +161,41,628,504,29,24,0,3,1 +162,41,623,504,29,24,0,3,1 +163,41,618,504,29,24,0,3,0.96667 +164,41,613,504,29,24,0,3,0.93333 +165,41,609,504,29,24,0,3,0.93333 +166,41,604,504,29,24,0,3,0.9 +167,41,599,504,29,24,0,3,0.83333 +168,41,595,504,29,24,0,3,0.8 +169,41,590,504,29,24,0,3,0.73333 +170,41,585,504,29,24,0,3,0.66667 +171,41,581,504,29,24,0,3,0.63333 +172,41,578,502,29,24,0,3,0.63333 +173,41,576,501,29,24,0,3,0.63333 +174,41,570,500,29,24,0,3,0.53333 +175,41,566,499,29,24,0,3,0.46667 +176,41,562,499,29,24,0,3,0.43333 +177,41,559,499,29,24,0,3,0.4 +178,41,555,499,29,24,0,3,0.36667 +179,41,552,499,29,24,0,3,0.33333 +180,41,549,500,29,24,0,3,0.33333 +181,41,546,502,29,24,0,3,0.3 +182,41,540,502,29,24,0,3,0.2 +183,41,536,502,29,24,0,3,0.16667 +184,41,533,502,29,24,0,3,0.16667 +185,41,528,502,29,24,0,3,0.1 +186,41,527,502,29,24,0,3,0.16667 +187,41,519,504,29,24,0,3,0 +188,41,517,503,29,24,0,3,0.033333 +189,41,513,504,29,24,0,3,0 +600,42,296,499,17,44,1,1,0.79259 +601,42,291,499,19,48,1,1,0.77143 +602,42,286,500,22,52,1,1,0.75636 +603,42,281,501,24,56,1,1,0.7614 +604,42,277,502,26,60,1,1,0.73406 +605,42,275,500,26,60,1,1,0.66788 +606,42,274,499,25,59,1,1,0.67564 +607,42,273,498,25,58,1,1,0.6884 +608,42,271,496,25,58,1,1,0.69883 +609,42,270,495,24,58,1,1,0.69085 +610,42,268,494,24,58,1,1,0.68 +611,42,267,493,23,57,1,1,0.6681 +612,42,265,492,23,57,1,1,0.62284 +613,42,264,491,22,57,1,1,0.65442 +614,42,262,490,22,58,1,1,0.59985 +615,42,260,490,23,58,1,1,0.57133 +616,42,258,489,23,59,1,1,0.56667 +617,42,257,489,23,60,1,1,0.52459 +618,42,255,488,21,62,1,1,0.52381 +619,42,253,488,20,63,1,1,0.54688 +620,42,251,488,19,64,1,1,0.38769 +621,42,248,489,22,64,1,1,0.40936 +622,42,245,491,25,63,1,1,0.35577 +623,42,240,492,30,65,1,1,0.29912 +624,42,241,491,27,62,1,1,0.28571 +625,42,242,494,27,63,1,1,0.24107 +626,42,243,498,27,63,1,1,0.26562 +627,42,245,502,26,63,1,1,0.31597 +628,42,246,501,25,65,1,1,0.23776 +629,42,248,504,24,63,1,1,0.28875 +630,42,250,507,23,61,1,1,0.34274 +631,42,252,510,22,59,1,1,0.35942 +632,42,254,514,21,56,1,1,0.43381 +633,42,245,508,27,68,1,1,0.24845 +634,42,248,509,27,69,1,1,0.26122 +635,42,251,510,28,70,1,1,0.30112 +636,42,254,513,27,67,1,1,0.30462 +637,42,257,517,26,64,1,1,0.39886 +638,42,260,521,25,61,1,1,0.45099 +639,42,263,525,24,58,1,1,0.5478 +640,42,264,524,24,59,1,1,0.45267 +641,42,266,523,24,60,1,1,0.44721 +642,42,268,523,24,60,1,1,0.5377 +643,42,270,522,25,60,1,1,0.48928 +644,42,273,521,25,61,1,1,0.58065 +645,42,276,521,26,61,1,1,0.60633 +646,42,279,521,26,61,1,1,0.64695 +647,42,282,522,27,61,1,1,0.59677 +648,42,286,523,27,61,1,1,0.6371 +649,42,289,523,28,62,1,1,0.57033 +650,42,293,524,28,62,1,1,0.54132 +651,42,297,525,28,63,1,1,0.54364 +652,42,302,514,29,70,1,1,0.54648 +653,42,308,516,29,70,1,1,0.56526 +654,42,314,518,29,71,1,1,0.58148 +655,42,319,521,29,71,1,1,0.56481 +656,42,324,525,29,71,1,1,0.62315 +657,42,333,526,29,73,1,1,0.6482 +658,42,341,528,29,74,1,1,0.65778 +659,42,344,531,30,74,1,1,0.74882 +660,42,348,534,30,74,1,1,0.69677 +661,42,352,537,30,75,1,1,0.73769 +662,42,356,535,30,76,1,1,0.80436 +663,42,361,534,30,76,1,1,0.82195 +664,42,366,531,30,77,1,1,0.84574 +665,42,372,528,30,78,1,1,0.87505 +666,42,376,522,30,79,1,1,0.85081 +667,42,382,523,30,79,1,1,0.84274 +668,42,388,523,30,80,1,1,0.85344 +669,42,393,519,29,81,1,1,0.77561 +670,42,398,516,29,82,1,1,0.82851 +671,42,403,513,30,83,1,1,0.88479 +672,42,408,510,31,84,1,1,0.91618 +673,42,414,508,31,84,1,1,0.91618 +674,42,419,502,32,84,1,1,0.93155 +675,42,425,496,33,85,1,1,0.95383 +676,42,429,500,34,85,1,1,0.93688 +677,42,435,497,34,86,1,1,1 +678,42,440,499,34,86,1,1,1 +679,42,446,511,34,86,1,1,1 +680,42,454,507,33,86,1,1,1 +681,42,452,532,35,86,1,1,1 +682,42,459,558,35,87,1,1,1 +683,42,460,523,36,88,1,1,1 +684,42,464,514,36,88,1,1,1 +685,42,468,515,36,89,1,1,1 +686,42,474,505,36,89,1,1,1 +687,42,478,504,36,90,1,1,1 +688,42,482,504,37,90,1,1,1 +689,42,487,504,37,90,1,1,1 +690,42,492,500,37,90,1,1,1 +691,42,496,499,37,90,1,1,1 +692,42,500,498,37,91,1,1,1 +693,42,504,497,38,92,1,1,1 +694,42,508,497,39,92,1,1,1 +695,42,513,497,39,93,1,1,1 +696,42,517,498,40,93,1,1,1 +697,42,522,498,40,94,1,1,1 +698,42,526,498,41,95,1,1,1 +699,42,531,499,41,95,1,1,1 +700,42,536,504,41,94,1,1,1 +701,42,540,503,42,95,1,1,1 +702,42,545,503,42,95,1,1,1 +703,42,550,503,42,96,1,1,1 +704,42,552,505,42,97,1,1,1 +705,42,554,508,42,97,1,1,1 +706,42,555,508,43,97,1,1,1 +707,42,557,512,44,97,1,1,1 +708,42,560,516,44,98,1,1,1 +709,42,563,521,44,99,1,1,1 +710,42,566,527,44,99,1,1,1 +711,42,568,528,44,100,1,1,1 +712,42,571,530,44,100,1,1,1 +713,42,574,532,44,101,1,1,1 +714,42,576,545,43,102,1,1,1 +715,42,576,545,43,102,1,1,1 +716,42,577,545,43,102,1,1,1 +717,42,578,545,43,103,1,1,1 +718,42,577,547,47,106,1,1,1 +719,42,578,545,47,107,1,1,1 +720,42,580,550,47,108,1,1,1 +721,42,581,550,48,109,1,1,1 +722,42,583,550,48,111,1,1,1 +723,42,585,551,48,112,1,1,1 +724,42,587,561,48,112,1,1,1 +725,42,589,558,48,114,1,1,1 +726,42,591,556,49,116,1,1,1 +727,42,591,565,48,117,1,1,1 +728,42,592,563,49,119,1,1,1 +729,42,594,562,49,120,1,1,1 +730,42,596,565,48,121,1,1,1 +731,42,597,564,48,122,1,1,1 +732,42,598,563,49,123,1,1,1 +733,42,600,563,49,124,1,1,1 +734,42,602,559,50,124,1,1,1 +735,42,603,565,49,122,1,1,1 +736,42,604,558,50,123,1,1,1 +737,42,605,560,50,124,1,1,1 +738,42,607,563,50,124,1,1,1 +739,42,608,564,49,126,1,1,1 +740,42,609,566,49,127,1,1,1 +741,42,608,567,49,128,1,1,1 +742,42,607,568,49,129,1,1,1 +743,42,606,569,50,131,1,1,1 +744,42,605,570,50,132,1,1,1 +745,42,604,571,51,134,1,1,1 +746,42,603,572,51,135,1,1,1 +747,42,602,573,51,136,1,1,1 +748,42,601,574,52,138,1,1,1 +749,42,600,575,52,139,1,1,1 +750,42,599,576,53,141,1,1,1 +658,43,452,516,23,48,1,1,1 +659,43,452,520,22,43,1,1,1 +660,43,456,516,22,44,1,1,1 +661,43,461,515,22,44,1,1,1 +662,43,467,514,22,44,1,1,1 +663,43,474,509,23,46,1,1,1 +664,43,482,505,23,48,1,1,1 +665,43,488,503,23,48,1,1,1 +666,43,495,502,23,48,1,1,1 +667,43,502,500,22,48,1,1,1 +668,43,509,499,22,48,1,1,1 +669,43,516,498,22,48,1,1,1 +670,43,522,496,22,48,1,1,1 +671,43,529,494,22,48,1,1,1 +672,43,535,492,23,48,1,1,1 +673,43,542,490,23,48,1,1,1 +674,43,548,484,23,48,1,1,1 +675,43,555,478,23,48,1,1,0.82143 +676,43,560,481,23,48,1,1,1 +677,43,569,479,23,48,1,1,0.85714 +678,43,576,482,23,48,1,1,0.77551 +679,43,583,491,23,48,1,1,1 +680,43,590,487,23,48,1,1,1 +681,43,593,511,23,48,1,1,1 +682,43,597,531,23,48,1,1,1 +683,43,602,502,23,48,1,1,0.79592 +684,43,608,495,23,48,1,1,0.82568 +685,43,614,490,23,48,1,1,0.82993 +686,43,621,486,23,48,1,1,0.78571 +687,43,627,484,23,48,1,1,1 +688,43,633,482,23,48,1,1,0.85714 +689,43,640,480,22,48,1,1,0.84738 +690,43,646,478,22,48,1,1,0.84738 +691,43,652,477,22,48,1,1,1 +692,43,658,476,22,48,1,1,0.92014 +693,43,664,476,21,48,1,1,1 +694,43,670,477,21,48,1,1,0.92022 +695,43,676,478,21,48,1,1,0.92022 +696,43,682,478,21,49,1,1,0.96 +697,43,688,479,21,49,1,1,0.92 +698,43,694,480,21,49,1,1,0.87455 +699,43,700,481,21,49,1,1,0.87455 +700,43,705,481,21,50,1,1,0.918 +701,43,711,482,21,50,1,1,0.87968 +702,43,716,483,21,50,1,1,0.918 +703,43,722,484,21,51,1,1,0.79021 +704,43,725,485,21,52,1,1,0.91938 +705,43,729,487,21,52,1,1,0.83533 +706,43,733,489,21,52,1,1,0.87393 +707,43,737,491,21,52,1,1,0.88165 +708,43,741,493,21,53,1,1,0.87626 +709,43,745,496,21,53,1,1,0.83838 +710,43,748,499,22,53,1,1,0.85507 +711,43,752,502,22,53,1,1,0.77295 +712,43,756,505,22,54,1,1,0.81028 +713,43,758,503,22,55,1,1,0.8882 +714,43,762,511,22,55,1,1,0.88587 +715,43,765,510,22,56,1,1,1 +716,43,768,510,22,56,1,1,0.81312 +717,43,771,510,22,57,1,1,1 +718,43,772,511,22,57,1,1,1 +719,43,779,512,19,56,1,1,1 +720,43,781,513,20,56,1,1,1 +721,43,784,514,21,56,1,1,1 +722,43,787,515,21,56,1,1,1 +723,43,790,516,22,56,1,1,1 +724,43,793,524,22,56,1,1,0.92372 +725,43,796,523,23,56,1,1,0.92836 +726,43,800,523,23,56,1,1,0.96418 +727,43,802,530,24,56,1,1,1 +728,43,806,529,24,56,1,1,0.89684 +729,43,810,529,24,55,1,1,1 +730,43,813,532,25,56,1,1,1 +731,43,814,528,25,56,1,1,0.83131 +732,43,818,529,25,56,1,1,0.86235 +733,43,820,527,26,57,1,1,0.84036 +734,43,823,526,26,57,1,1,0.83078 +735,43,826,524,26,58,1,1,0.80414 +736,43,829,523,26,58,1,1,0.80038 +737,43,832,522,26,58,1,1,1 +738,43,834,523,26,58,1,1,1 +739,43,836,524,26,58,1,1,0.73384 +740,43,837,525,26,58,1,1,0.70621 +741,43,838,526,26,58,1,1,0.83679 +742,43,840,527,26,59,1,1,0.84568 +743,43,841,527,25,59,1,1,0.83974 +744,43,842,528,25,59,1,1,0.80769 +745,43,843,529,25,59,1,1,0.80385 +746,43,844,529,25,60,1,1,0.83922 +747,43,845,530,25,60,1,1,0.83291 +748,43,846,531,25,60,1,1,0.82976 +749,43,847,532,25,60,1,1,0.86381 +750,43,847,532,25,60,1,1,0.86381 +9,44,1285,503,15,45,1,1,1 +10,44,1285,512,14,45,1,1,1 +11,44,1288,499,15,43,1,1,1 +12,44,1288,507,15,43,1,1,1 +13,44,1292,499,15,43,1,1,1 +14,44,1292,498,15,43,1,1,1 +15,44,1293,498,15,43,1,1,1 +16,44,1294,497,15,44,1,1,1 +17,44,1295,497,14,44,1,1,1 +18,44,1296,496,14,45,1,1,1 +19,44,1297,496,14,45,1,1,1 +20,44,1298,497,14,45,1,1,1 +21,44,1299,498,14,45,1,1,1 +22,44,1300,500,14,45,1,1,1 +23,44,1302,501,14,45,1,1,1 +24,44,1303,503,14,45,1,1,1 +25,44,1304,504,14,45,1,1,1 +26,44,1306,505,14,45,1,1,1 +27,44,1307,507,14,45,1,1,1 +28,44,1308,508,14,45,1,1,1 +29,44,1310,510,14,45,1,1,1 +30,44,1310,514,14,45,1,1,0.97246 +233,45,1136,526,27,79,1,1,0.0875 +234,45,1139,525,27,80,1,1,0.28219 +235,45,1142,524,27,81,1,1,0.48432 +236,45,1146,523,26,82,1,1,0.66979 +237,45,1149,522,26,83,1,1,0.83466 +238,45,1153,522,26,83,1,1,1 +239,45,1157,522,25,83,1,1,1 +240,45,1161,522,25,83,1,1,1 +241,45,1165,522,25,83,1,1,1 +242,45,1169,522,24,83,1,1,1 +243,45,1173,522,24,83,1,1,1 +244,45,1177,522,24,84,1,1,1 +245,45,1181,522,24,85,1,1,0.86977 +246,45,1185,522,25,86,1,1,0.67286 +247,45,1189,522,26,87,1,1,0.55682 +248,45,1193,523,27,87,1,1,0.53409 +249,45,1197,522,28,85,1,1,0.55814 +250,45,1202,521,28,84,1,1,0.56471 +251,45,1207,521,28,82,1,1,0.56627 +252,45,1212,520,28,81,1,1,0.58537 +253,45,1217,519,28,80,1,1,0.59259 +254,45,1222,519,28,78,1,1,0.58228 +255,45,1229,518,26,78,1,1,0.58228 +256,45,1236,518,25,78,1,1,0.55696 +257,45,1243,518,24,74,1,1,0.57333 +258,45,1250,517,24,75,1,1,0.56579 +259,45,1257,517,25,75,1,1,0.1913 +260,45,1264,516,25,76,1,1,0.16783 +261,45,1272,516,25,77,1,1,0.22239 +262,45,1280,519,24,74,1,1,0.19733 +263,45,1287,519,24,80,1,1,0.16444 +264,45,1294,519,24,86,1,1,0.13609 +265,45,1302,519,23,92,1,1,0.19892 +266,45,1305,519,26,93,1,1,0.41411 +267,45,1312,525,30,87,1,1,0.54839 +268,45,1321,520,26,78,1,1,0.48148 +269,45,1326,529,33,87,1,1,0.55882 +270,45,1334,528,32,87,1,1,0.54545 +271,45,1342,527,31,87,1,1,0.53125 +272,45,1350,526,30,87,1,1,0.48387 +273,45,1358,525,29,87,1,1,0.46667 +274,45,1366,524,28,87,1,1,0.44828 +275,45,1374,523,27,87,1,1,0.42857 +276,45,1383,523,25,86,1,1,0.38462 +277,45,1392,522,24,90,1,1,0.28 +43,46,1666,505,21,53,1,1,0.7037 +44,46,1667,506,21,53,1,1,0.7037 +45,46,1668,507,22,54,1,1,0.69091 +46,46,1669,508,22,54,1,1,0.67273 +47,46,1670,509,23,55,1,1,0.66071 +48,46,1672,510,23,56,1,1,0.64912 +49,46,1671,510,24,56,1,1,0.73333 +50,46,1670,511,26,56,1,1,0.92982 +51,46,1669,512,28,56,1,1,0.81246 +52,46,1668,513,29,55,1,1,0.75 +53,46,1667,514,31,55,1,1,0.6702 +54,46,1667,515,32,55,1,1,0.59524 +55,46,1666,514,32,55,1,1,0.50649 +56,46,1665,513,32,55,1,1,0.41937 +57,46,1664,512,32,55,1,1,0.33929 +58,46,1664,511,32,56,1,1,0.35088 +59,46,1666,508,27,55,1,1,0.45281 +60,46,1668,506,22,53,1,1,0.51691 +61,46,1671,504,17,52,1,1,0.60377 +62,46,1665,511,29,55,1,1,0.64762 +63,46,1662,491,31,57,1,1,0.88739 +64,46,1662,510,31,57,1,1,0.85668 +65,46,1662,504,31,57,1,1,0.94828 +66,46,1663,498,30,58,1,1,1 +67,46,1662,513,29,58,1,1,0.91695 +68,46,1658,503,29,59,1,1,0.72778 +69,46,1662,513,27,57,1,1,0.66749 +70,46,1660,509,26,57,1,1,0.553 +1,47,792,509,16,45,1,1,0.79156 +2,47,792,497,16,46,1,1,0.85357 +3,47,792,507,16,46,1,1,0.97121 +4,47,792,504,17,45,1,1,0.78744 +5,47,795,503,16,46,1,1,0.82353 +6,47,797,514,16,45,1,1,0.76471 +7,47,795,505,16,45,1,1,0.88491 +8,47,795,513,16,45,1,1,0.85678 +9,47,795,512,16,45,1,1,0.88235 +10,47,795,511,16,45,1,1,0.88235 +11,47,794,510,16,45,1,1,0.94118 +12,47,795,515,16,45,1,1,1 +13,47,793,502,20,44,1,1,1 +14,47,792,506,20,44,1,1,1 +15,47,793,506,19,44,1,1,1 +16,47,794,504,19,45,1,1,1 +17,47,793,504,19,45,1,1,1 +18,47,793,505,18,45,1,1,1 +19,47,792,506,18,45,1,1,1 +20,47,792,507,17,45,1,1,1 +21,47,792,508,16,45,1,1,1 +22,47,791,509,17,45,1,1,1 +23,47,793,507,16,46,1,1,0.85982 +24,47,792,509,16,46,1,1,0.40426 +25,47,792,511,16,46,1,1,0.48936 +26,47,792,513,16,46,1,1,0.42553 +27,47,792,516,16,45,1,1,0.45652 +28,47,791,518,16,46,1,1,0.46809 +29,47,792,519,16,45,1,1,0.43478 +30,47,791,522,17,46,1,1,0.40426 +31,47,792,534,17,45,1,1,0.3913 +32,47,791,526,17,46,1,1,0.48936 +33,47,790,519,17,47,1,1,0.85532 +34,47,790,526,16,47,1,1,1 +35,47,791,517,16,48,1,1,1 +36,47,790,514,17,48,1,1,1 +37,47,790,511,17,49,1,1,1 +38,47,790,508,17,50,1,1,1 +39,47,790,506,18,50,1,1,1 +40,47,790,506,18,50,1,1,1 +41,47,791,506,18,51,1,1,1 +42,47,791,506,17,51,1,1,1 +43,47,791,507,17,51,1,1,1 +44,47,791,508,17,51,1,1,1 +45,47,791,509,17,51,1,1,1 +46,47,791,510,17,51,1,1,0.66667 +47,47,791,511,17,51,1,1,0.61111 +48,47,791,512,17,51,1,1,0.61111 +49,47,791,513,17,51,1,1,0.55556 +50,47,791,514,17,51,1,1,0.55556 +51,47,791,515,17,51,1,1,0.55556 +52,47,790,515,17,51,1,1,0.55556 +53,47,789,515,17,51,1,1,0.61111 +54,47,788,515,17,51,1,1,0.61111 +55,47,788,515,17,51,1,1,0.61111 +56,47,787,514,17,51,1,1,0.66667 +57,47,786,513,17,51,1,1,0.66667 +58,47,786,512,17,51,1,1,0.61111 +59,47,785,511,17,51,1,1,0.61111 +60,47,784,510,17,51,1,1,0.61111 +61,47,784,509,17,51,1,1,0.55556 +62,47,784,505,17,52,1,1,0.55556 +63,47,782,512,18,51,1,1,0.57895 +64,47,783,507,17,51,1,1,0.5 +65,47,779,510,17,51,1,1,0.66667 +66,47,780,514,18,51,1,1,0.52632 +67,47,781,506,18,56,1,1,0.42105 +68,47,778,507,18,55,1,1,0.42105 +69,47,775,508,19,54,1,1,0.4 +70,47,772,509,20,53,1,1,0.47619 +71,47,769,510,21,52,1,1,0.5 +72,47,767,509,20,52,1,1,0.42857 +73,47,765,508,20,53,1,1,0.47619 +74,47,763,508,20,53,1,1,0.42857 +75,47,761,507,20,54,1,1,0.42857 +76,47,759,507,20,53,1,1,0.42857 +77,47,757,506,20,54,1,1,0.42857 +78,47,755,506,20,54,1,1,0.42857 +79,47,753,505,20,55,1,1,0.42857 +80,47,751,505,20,55,1,1,0.42857 +81,47,746,504,21,55,1,1,0.45455 +82,47,742,505,21,55,1,1,0.45455 +83,47,739,506,20,55,1,1,0.42857 +84,47,735,507,20,56,1,1,0.42857 +85,47,732,508,20,56,1,1,0.42857 +86,47,728,510,20,56,1,1,0.42857 +87,47,725,511,19,56,1,1,0.4 +88,47,721,512,20,56,1,1,0.42857 +89,47,718,513,19,57,1,1,1 +90,47,714,514,19,57,1,1,0.4 +91,47,711,516,19,57,1,1,0.4 +92,47,707,516,19,58,1,1,0.45 +93,47,703,517,19,58,1,1,0.55 +94,47,699,518,19,58,1,1,0.6 +95,47,695,519,19,58,1,1,0.5 +96,47,691,520,19,58,1,1,0.45 +97,47,687,520,19,59,1,1,0.5 +98,47,683,521,19,59,1,1,0.55 +99,47,679,522,19,59,1,1,0.65 +100,47,675,523,19,59,1,1,0.6 +101,47,671,524,19,60,1,1,0.75 +102,47,666,523,19,61,1,1,0.55 +103,47,662,523,19,61,1,1,0.55 +104,47,658,523,19,61,1,1,0.7 +105,47,653,522,19,62,1,1,0.6 +106,47,649,522,19,62,1,1,1 +107,47,645,522,19,62,1,1,0.7 +108,47,640,521,19,63,1,1,0.65 +109,47,636,521,19,63,1,1,0.75 +110,47,632,521,19,63,1,1,0.8 +111,47,628,521,19,64,1,1,0.85 +112,47,623,521,19,64,1,1,0.85462 +113,47,618,521,19,64,1,1,0.85462 +114,47,613,521,19,64,1,1,0.85538 +115,47,609,521,19,64,1,1,0.91077 +116,47,604,522,19,64,1,1,0.91077 +117,47,599,522,19,64,1,1,0.86615 +118,47,595,522,19,64,1,1,0.82154 +119,47,590,522,19,64,1,1,0.82462 +120,47,585,522,19,64,1,1,0.82462 +121,47,581,523,19,64,1,1,0.78077 +122,47,576,523,19,64,1,1,0.73692 +123,47,571,524,19,64,1,1,0.73231 +124,47,566,525,19,64,1,1,0.73231 +125,47,561,525,19,64,1,1,0.73231 +126,47,557,526,19,64,1,1,0.68231 +127,47,552,527,19,64,1,1,0.68231 +128,47,547,527,19,64,1,1,0.68231 +129,47,542,528,19,64,1,1,0.63077 +130,47,537,529,19,64,1,1,0.63077 +131,47,533,530,19,64,1,1,0.57769 +132,47,528,530,19,64,1,1,0.57769 +133,47,523,530,19,64,1,1,0.58462 +134,47,518,530,19,64,1,1,0.58462 +135,47,513,530,20,64,1,1,0.56044 +136,47,509,530,19,64,1,1,0.54615 +137,47,504,531,19,63,1,1,0.49297 +138,47,499,531,20,63,1,1,0.47321 +139,47,494,531,20,63,1,1,0.48214 +140,47,490,531,19,64,1,1,0.45538 +141,47,485,531,19,64,1,1,0.45538 +142,47,480,531,20,64,1,1,0.44762 +143,47,475,532,20,63,1,1,0.43899 +144,47,471,532,19,63,1,1,0.36562 +145,47,466,532,20,63,1,1,0.29613 +146,47,461,532,20,63,1,1,0.29092 +147,47,456,532,20,63,1,1,0.29092 +148,47,452,533,20,63,1,1,0.2381 +149,47,447,534,19,63,1,1,0.25 +150,47,442,535,19,63,1,1,0.30859 +151,47,437,536,19,64,1,1,0.30769 +152,47,430,536,19,65,1,1,0.25455 +153,47,424,537,19,65,1,1,0.25455 +154,47,418,538,19,65,1,1,0.31818 +155,47,411,539,20,65,1,1,0.29582 +156,47,405,540,20,66,1,1,0.30064 +157,47,399,540,19,67,1,1,0.27941 +158,47,392,541,20,67,1,1,0.31723 +159,47,386,542,20,67,1,1,0.32353 +160,47,380,543,20,67,1,1,0.32353 +161,47,374,544,20,68,1,1,0.33402 +162,47,369,544,20,68,1,1,0.2864 +163,47,364,544,20,69,1,1,0.2898 +164,47,359,544,20,69,1,1,0.27823 +165,47,355,544,19,70,1,1,0.24155 +166,47,350,545,19,69,1,1,0.23286 +167,47,345,545,19,70,1,1,0.23239 +168,47,341,545,18,70,1,1,0.19199 +169,47,336,545,18,71,1,1,0.19371 +170,47,331,545,18,71,1,1,0.19371 +171,47,327,546,18,71,1,1,0.14181 +172,47,322,546,18,71,1,1,0.25439 +173,47,317,546,19,71,1,1,0.29167 +174,47,313,546,18,71,1,1,0.29825 +175,47,308,546,19,71,1,1,0.33333 +176,47,303,546,20,71,1,1,0.36508 +177,47,299,546,19,71,1,1,0.33333 +178,47,294,546,20,71,1,1,0.36508 +179,47,290,546,20,72,1,1,0.26288 +180,47,285,547,20,73,1,1,0.29537 +181,47,281,549,19,74,1,1,0.25 +182,47,276,549,19,75,1,1,0.3 +183,47,272,550,19,75,1,1,0.3 +184,47,268,551,19,75,1,1,0.34868 +185,47,264,552,19,75,1,1,0.34868 +186,47,260,553,19,75,1,1,0.30526 +187,47,256,554,19,75,1,1,0.30526 +188,47,251,555,20,76,1,1,0.29561 +189,47,247,556,20,76,1,1,0.29561 +190,47,243,557,20,76,1,1,0.25417 +191,47,239,558,20,76,1,1,0.25417 +192,47,235,558,19,77,1,1,0.21538 +193,47,231,559,19,77,1,1,0.21538 +194,47,227,560,19,77,1,1,0.21538 +195,47,222,561,20,78,1,1,0.25136 +196,47,218,562,20,78,1,1,0.25136 +197,47,214,563,20,78,1,1,0.25136 +198,47,210,564,20,78,1,1,0.25136 +199,47,206,565,20,78,1,1,0.25136 +200,47,202,566,20,78,1,1,0.25136 +201,47,198,567,20,79,1,1,0.25 +202,47,194,567,20,80,1,1,0.21811 +203,47,190,568,21,80,1,1,0.21437 +204,47,186,569,21,80,1,1,0.21437 +205,47,183,570,21,80,1,1,0.17508 +206,47,179,571,21,80,1,1,0.17508 +207,47,175,571,22,81,1,1,0.18346 +208,47,172,572,21,81,1,1,0.14634 +209,47,168,573,22,81,1,1,0.14634 +210,47,164,574,22,81,1,1,0.14634 +211,47,161,575,22,82,1,1,0.14458 +212,47,158,575,22,82,1,1,0.15663 +213,47,155,575,23,83,1,1,0.10863 +214,47,153,576,22,83,1,1,0.11077 +215,47,150,576,23,83,1,1,0.17857 +216,47,148,577,23,83,1,1,0.17857 +217,47,145,577,23,84,1,1,0.14118 +218,47,142,577,24,84,1,1,0.15294 +219,47,140,578,23,84,1,1,0.15294 +220,47,137,578,24,85,1,1,0.16279 +221,47,135,579,24,85,1,1,0.17442 +222,47,132,580,25,85,1,1,0.17442 +223,47,130,581,25,85,1,1,0.17442 +224,47,128,582,25,85,1,1,0.18605 +225,47,126,583,25,86,1,1,0.17241 +226,47,124,584,25,86,1,1,0.19319 +227,47,122,585,25,86,1,1,0.22546 +228,47,120,586,25,87,1,1,0.15909 +229,47,118,587,25,87,1,1,0.067308 +230,47,116,588,25,87,1,1,0.0625 +231,47,114,590,26,87,1,1,0.050926 +232,47,113,589,26,87,1,1,0.050505 +233,47,112,589,26,87,1,1,0.055556 +234,47,111,588,26,88,1,1,0.059509 +235,47,110,588,27,88,1,1,0.0626 +236,47,110,587,26,89,1,1,0.21811 +237,47,109,587,26,88,1,1,0.20932 +238,47,108,586,27,89,1,1,0.20556 +239,47,107,586,27,89,1,1,0.072222 +240,47,106,585,27,90,1,1,0.066327 +241,47,106,585,27,90,1,1,0.061224 +242,47,106,585,27,91,1,1,0.050466 +243,47,107,586,27,91,1,1,0.040373 +244,47,107,587,27,91,1,1,0.035326 +245,47,108,587,27,92,1,1,0.043011 +246,47,108,588,27,92,1,1,0.037634 +247,47,109,589,27,92,1,1,0.039939 +248,47,109,589,27,93,1,1,0.053191 +249,47,110,590,27,93,1,1,0.058511 +250,47,110,591,27,93,1,1,0.069149 +251,47,111,592,27,93,1,1,0.074468 +252,47,113,593,27,93,1,1,0.074468 +253,47,115,594,28,93,1,1,0.0719 +254,47,118,595,27,94,1,1,0.068421 +255,47,120,596,28,94,1,1,0.071143 +256,47,123,597,27,95,1,1,0.067708 +257,47,125,598,28,95,1,1,0.065374 +258,47,127,599,28,95,1,1,0.065374 +259,47,130,600,28,96,1,1,0.075009 +260,47,132,601,28,96,1,1,0.0647 +261,47,135,603,28,96,1,1,0.15393 +262,47,137,602,28,96,1,1,0.055457 +263,47,139,602,29,96,1,1,0.053608 +264,47,142,601,28,97,1,1,0.063336 +265,47,144,601,29,97,1,1,0.061905 +266,47,147,600,29,98,1,1,0.17003 +267,47,149,600,29,97,1,1,0.071429 +268,47,152,599,29,98,1,1,0.075421 +269,47,154,599,30,98,1,1,0.046595 +270,47,157,598,29,99,1,1,0.023333 +271,47,159,598,30,99,1,1,0.032258 +272,47,162,597,30,100,1,1,0.044714 +273,47,164,597,30,99,1,1,0.089677 +274,47,167,596,30,100,1,1,0.073778 +275,47,169,596,31,100,1,1,0.11077 +276,47,172,595,30,101,1,1,0.1303 +277,47,174,595,31,101,1,1,0.16728 +278,47,177,595,31,101,1,1,0.1636 +279,47,179,596,31,102,1,1,0.16292 +280,47,181,598,32,102,1,1,0.15799 +281,47,184,600,32,102,1,1,0.13122 +282,47,186,601,33,102,1,1,0.13678 +283,47,189,602,33,103,1,1,0.12048 +284,47,192,603,33,104,1,1,0.090196 +285,47,195,604,33,105,1,1,0.091565 +286,47,198,605,34,106,1,1,0.08972 +287,47,201,606,34,107,1,1,0.089947 +288,47,204,607,34,108,1,1,0.094364 +289,47,207,608,34,109,1,1,0.33818 +290,47,210,609,34,110,1,1,0.37761 +291,47,213,610,35,111,1,1,0.41716 +292,47,214,610,35,112,1,1,0.39921 +293,47,215,611,35,112,1,1,0.10914 +294,47,216,612,35,112,1,1,0.068584 +295,47,218,613,35,112,1,1,0.071288 +296,47,219,614,35,113,1,1,0.075292 +297,47,220,614,35,114,1,1,0.078986 +298,47,222,615,35,114,1,1,0.081643 +299,47,223,616,35,114,1,1,0.081643 +300,47,224,617,35,114,1,1,0.083816 +301,47,226,618,35,115,1,1,0.11207 +302,47,226,619,35,115,1,1,0.11398 +303,47,226,621,35,115,1,1,0.11638 +304,47,226,622,36,116,1,1,0.12566 +305,47,226,624,36,116,1,1,0.099099 +306,47,227,625,36,117,1,1,0.095282 +307,47,227,627,36,117,1,1,0.12437 +308,47,227,628,36,118,1,1,0.10629 +309,47,227,630,37,118,1,1,0.10349 +310,47,227,631,37,119,1,1,0.11118 +311,47,228,633,37,119,1,1,0.10548 +312,47,227,633,38,120,1,1,0.10468 +313,47,227,634,38,121,1,1,0.10656 +314,47,227,635,38,121,1,1,0.10025 +315,47,227,635,38,123,1,1,0.1005 +316,47,227,636,39,123,1,1,0.094355 +317,47,227,637,39,124,1,1,0.0936 +318,47,227,637,39,125,1,1,0.093254 +319,47,227,638,39,126,1,1,0.090354 +320,47,227,639,39,126,1,1,0.088189 +321,47,227,640,40,127,1,1,0.082698 +322,47,224,639,40,128,1,1,0.093212 +323,47,222,638,40,130,1,1,0.096071 +324,47,220,638,39,130,1,1,0.1145 +325,47,217,637,40,132,1,1,0.12195 +326,47,215,637,40,132,1,1,0.10526 +327,47,213,636,39,134,1,1,0.1063 +328,47,210,635,40,135,1,1,0.11029 +329,47,208,635,39,136,1,1,0.10182 +330,47,206,634,39,137,1,1,0.10054 +331,47,204,634,39,138,1,1,0.1223 +332,47,200,632,39,139,1,1,0.12321 +333,47,196,631,39,139,1,1,0.12321 +334,47,193,630,39,139,1,1,0.12161 +335,47,189,629,39,139,1,1,0.12161 +336,47,186,628,39,139,1,1,0.10321 +337,47,181,631,39,139,1,1,0.10821 +338,47,177,634,39,139,1,1,0.10554 +339,47,173,637,38,140,1,1,0.11057 +340,47,169,640,38,140,1,1,0.10329 +341,47,165,643,38,141,1,1,0.099675 +342,47,160,646,38,142,1,1,0.10454 +343,47,155,650,38,142,1,1,0.11655 +344,47,150,654,38,142,1,1,0.10974 +345,47,145,659,38,143,1,1,0.10897 +346,47,140,664,38,144,1,1,0.10504 +347,47,135,670,38,145,1,1,0.11661 +348,47,130,671,38,146,1,1,0.10413 +349,47,125,673,38,147,1,1,0.10049 +350,47,120,675,38,148,1,1,0.091378 +351,47,115,677,38,149,1,1,0.084274 +352,47,109,677,38,151,1,1,0.087045 +353,47,104,678,38,152,1,1,0.09033 +354,47,98,679,37,153,1,1,0.090567 +355,47,92,680,37,154,1,1,0.095076 +356,47,86,681,37,155,1,1,0.10138 +357,47,80,682,37,157,1,1,0.1001 +358,47,74,683,37,158,1,1,0.10377 +359,47,68,684,37,159,1,1,0.10625 +360,47,62,685,37,160,1,1,0.10788 +361,47,56,686,37,162,1,1,0.22054 +362,47,48,690,37,163,1,1,0.21438 +363,47,41,694,37,164,1,1,0.10526 +364,47,34,698,37,165,1,1,0.25428 +365,47,27,702,36,166,1,1,0.23353 +366,47,20,706,36,167,1,1,0.25193 +367,47,12,710,37,168,1,1,0.2711 +368,47,5,714,36,169,1,1,0.24595 +369,47,-2,718,36,170,1,1,0.26174 +370,47,-9,722,36,171,1,1,0.26398 +291,48,218,621,33,99,1,1,0.088235 +292,48,219,621,33,100,1,1,0 +293,48,221,622,33,101,1,1,0.11765 +294,48,222,623,33,102,1,1,0.43033 +295,48,224,624,33,103,1,1,0.42986 +296,48,226,625,33,104,1,1,0.45658 +297,48,227,625,33,105,1,1,0.43479 +298,48,229,626,33,106,1,1,0.4343 +299,48,230,627,33,107,1,1,0.43382 +300,48,232,628,33,108,1,1,0.43335 +301,48,234,629,33,109,1,1,0.43289 +302,48,234,630,33,110,1,1,0.438 +303,48,235,632,33,111,1,1,0.4375 +304,48,236,634,33,111,1,1,0.46429 +305,48,236,635,33,113,1,1,0.44195 +306,48,237,637,33,114,1,1,0.48005 +307,48,238,639,33,114,1,1,0.51202 +308,48,238,640,33,116,1,1,0.49849 +309,48,239,642,33,116,1,1,0.54274 +310,48,240,644,33,117,1,1,0.5653 +311,48,241,646,33,118,1,1,0.58848 +312,48,240,646,33,119,1,1,0.56078 +313,48,240,647,33,119,1,1,0.56078 +314,48,240,647,33,121,1,1,0.59137 +315,48,239,648,34,121,1,1,0.57283 +316,48,239,648,33,122,1,1,0.56385 +317,48,239,649,33,123,1,1,0.56357 +318,48,238,649,34,124,1,1,0.55314 +319,48,238,650,34,124,1,1,0.60229 +320,48,238,651,34,125,1,1,0.6254 +321,48,240,651,33,127,1,1,0.69669 +322,48,237,650,33,128,1,1,0.64729 +323,48,234,650,33,129,1,1,0.59276 +324,48,232,650,33,130,1,1,0.56533 +325,48,229,650,33,130,1,1,0.51504 +326,48,227,650,33,131,1,1,0.56863 +327,48,224,649,33,133,1,1,0.57155 +328,48,221,649,33,133,1,1,0.57155 +329,48,219,649,33,134,1,1,0.61874 +330,48,216,649,33,135,1,1,0.61548 +331,48,214,649,33,136,1,1,0.63997 +332,48,210,647,33,137,1,1,0.64258 +333,48,206,646,33,137,1,1,0.61509 +334,48,202,645,33,137,1,1,0.5876 +335,48,198,644,33,137,1,1,0.5601 +336,48,193,646,33,137,1,1,0.55669 +337,48,189,649,33,137,1,1,0.54987 +338,48,185,651,33,138,1,1,0.58421 +339,48,181,654,32,137,1,1,0.60035 +340,48,177,656,32,138,1,1,0.60323 +341,48,173,659,32,138,1,1,0.60323 +342,48,167,663,32,139,1,1,0.54286 +343,48,162,668,32,140,1,1,0.59983 +344,48,156,672,33,142,1,1,0.61415 +345,48,151,677,33,142,1,1,0.64171 +346,48,145,681,34,144,1,1,0.62759 +347,48,140,686,34,145,1,1,0.64892 +348,48,134,688,34,147,1,1,0.65116 +349,48,129,689,34,147,1,1,0.67799 +350,48,124,690,34,148,1,1,0.7047 +351,48,120,691,33,149,1,1,0.75118 +352,48,113,692,33,150,1,1,0.69575 +353,48,107,694,33,151,1,1,0.69563 +354,48,100,695,33,153,1,1,0.66769 +355,48,94,697,33,153,1,1,0.63751 +356,48,87,699,34,154,1,1,0.61806 +357,48,81,700,33,156,1,1,0.60659 +358,48,74,702,34,156,1,1,0.56324 +359,48,68,703,33,158,1,1,0.60895 +360,48,61,705,34,159,1,1,0.6225 +361,48,55,707,34,160,1,1,0.67844 +362,48,47,710,34,161,1,1,0.6515 +363,48,39,714,34,162,1,1,0.64908 +364,48,31,717,34,163,1,1,0.62195 +365,48,24,721,34,164,1,1,0.64658 +366,48,16,724,34,165,1,1,0.61928 +367,48,8,728,34,166,1,1,0.62156 +368,48,1,731,34,167,1,1,1 +369,48,-7,735,34,168,1,1,0.77143 +370,48,-15,738,34,169,1,1,0.54286 +1,49,828,513,16,42,1,1,1 +2,49,828,506,16,42,1,1,1 +3,49,827,511,16,42,1,1,1 +4,49,829,510,16,42,1,1,1 +5,49,830,509,16,42,1,1,1 +6,49,831,520,16,42,1,1,1 +7,49,833,512,16,42,1,1,1 +8,49,831,519,16,43,1,1,1 +9,49,830,519,16,43,1,1,1 +10,49,830,519,16,43,1,1,1 +11,49,830,519,16,44,1,1,1 +12,49,831,522,16,44,1,1,1 +13,49,831,510,16,44,1,1,1 +14,49,831,514,16,44,1,1,1 +15,49,831,514,16,44,1,1,1 +16,49,830,514,16,44,1,1,1 +17,49,830,514,16,44,1,1,1 +18,49,830,514,16,45,1,1,1 +19,49,829,514,16,45,1,1,1 +20,49,829,514,16,45,1,1,1 +21,49,829,514,16,46,1,1,0.67584 +22,49,829,515,16,46,1,1,0.21277 +23,49,829,516,16,46,1,1,0.21277 +24,49,829,517,16,47,1,1,0.22917 +25,49,829,519,16,47,1,1,0.3125 +26,49,829,521,16,47,1,1,0.25 +27,49,829,524,16,47,1,1,0.27083 +28,49,829,524,16,47,1,1,0.33333 +29,49,830,524,16,48,1,1,0.30612 +30,49,829,531,16,48,1,1,0.20408 +31,49,828,538,16,48,1,1,0.83193 +32,49,828,532,16,49,1,1,1 +33,49,828,527,17,49,1,1,1 +34,49,828,530,17,50,1,1,1 +35,49,827,521,17,50,1,1,1 +36,49,827,518,17,50,1,1,1 +37,49,827,515,17,51,1,1,1 +38,49,827,512,17,52,1,1,1 +39,49,827,510,18,52,1,1,1 +40,49,827,509,18,53,1,1,1 +41,49,827,509,19,53,1,1,1 +42,49,826,510,19,53,1,1,1 +43,49,825,511,19,53,1,1,1 +44,49,825,513,19,53,1,1,1 +45,49,825,513,19,54,1,1,1 +46,49,825,514,19,54,1,1,1 +47,49,825,515,19,54,1,1,1 +48,49,825,516,19,54,1,1,1 +49,49,825,517,19,54,1,1,1 +50,49,825,518,19,54,1,1,1 +51,49,826,519,19,54,1,1,1 +52,49,825,518,19,54,1,1,1 +53,49,824,517,19,54,1,1,1 +54,49,823,517,19,53,1,1,1 +55,49,822,516,19,54,1,1,1 +56,49,822,516,18,53,1,1,1 +57,49,821,515,18,53,1,1,1 +58,49,820,514,18,54,1,1,1 +59,49,819,514,18,53,1,1,1 +60,49,818,513,18,53,1,1,1 +61,49,818,513,18,53,1,1,1 +62,49,817,515,18,53,1,1,1 +63,49,816,517,18,53,1,1,1 +64,49,817,511,18,53,1,1,1 +65,49,814,514,18,53,1,1,1 +66,49,814,518,18,53,1,1,1 +67,49,813,512,18,53,1,1,1 +68,49,811,512,18,54,1,1,1 +69,49,809,513,18,54,1,1,1 +70,49,807,513,18,55,1,1,1 +71,49,805,514,18,55,1,1,1 +72,49,802,513,18,55,1,1,1 +73,49,799,513,18,55,1,1,1 +74,49,796,513,18,55,1,1,1 +75,49,793,513,18,55,1,1,1 +76,49,790,513,19,55,1,1,1 +77,49,787,512,19,56,1,1,1 +78,49,784,512,19,56,1,1,1 +79,49,781,512,19,56,1,1,1 +80,49,778,512,19,56,1,1,1 +81,49,775,512,20,56,1,1,1 +82,49,771,512,20,56,1,1,1 +83,49,767,513,20,56,1,1,1 +84,49,763,513,20,57,1,1,1 +85,49,760,514,20,57,1,1,1 +86,49,756,515,20,57,1,1,1 +87,49,752,516,20,57,1,1,1 +88,49,748,517,20,57,1,1,1 +89,49,744,518,20,57,1,1,1 +90,49,740,519,20,57,1,1,1 +91,49,737,520,20,58,1,1,1 +92,49,732,521,20,58,1,1,1 +93,49,728,523,20,58,1,1,1 +94,49,723,524,20,59,1,1,1 +95,49,719,526,20,59,1,1,1 +96,49,715,527,20,59,1,1,1 +97,49,711,528,20,60,1,1,1 +98,49,707,530,20,60,1,1,1 +99,49,702,529,20,60,1,1,1 +100,49,698,529,20,60,1,1,1 +101,49,694,529,20,60,1,1,1 +102,49,689,528,20,61,1,1,1 +103,49,684,528,20,61,1,1,1 +104,49,680,528,20,61,1,1,1 +105,49,675,528,20,61,1,1,1 +106,49,671,528,20,61,1,1,1 +107,49,666,527,20,62,1,1,1 +108,49,661,527,20,62,1,1,1 +109,49,657,527,20,62,1,1,1 +110,49,652,527,20,62,1,1,1 +111,49,648,527,20,62,1,1,1 +112,49,642,527,20,62,1,1,1 +113,49,637,527,20,63,1,1,1 +114,49,632,528,20,62,1,1,1 +115,49,627,528,20,63,1,1,1 +116,49,622,529,20,63,1,1,1 +117,49,616,529,21,63,1,1,1 +118,49,611,529,21,64,1,1,1 +119,49,606,530,21,63,1,1,1 +120,49,601,530,21,64,1,1,1 +121,49,596,531,21,64,1,1,1 +122,49,590,531,21,64,1,1,1 +123,49,585,531,21,65,1,1,1 +124,49,580,532,21,64,1,1,1 +125,49,575,532,21,65,1,1,1 +126,49,570,532,21,65,1,1,1 +127,49,565,533,21,65,1,1,1 +128,49,560,533,21,65,1,1,1 +129,49,554,533,22,66,1,1,1 +130,49,549,534,22,65,1,1,1 +131,49,544,534,22,66,1,1,1 +132,49,539,534,21,66,1,1,1 +133,49,534,535,21,66,1,1,1 +134,49,529,535,21,66,1,1,1 +135,49,524,535,21,67,1,1,1 +136,49,519,536,21,66,1,1,1 +137,49,513,536,22,67,1,1,1 +138,49,508,536,22,67,1,1,1 +139,49,503,537,22,67,1,1,1 +140,49,498,537,22,67,1,1,1 +141,49,493,537,22,68,1,1,1 +142,49,488,538,21,67,1,1,1 +143,49,483,538,21,68,1,1,1 +144,49,477,538,22,68,1,1,1 +145,49,472,539,22,68,1,1,1 +146,41,1,1,1 +226,49,125,598,27,82,1,1,1 +227,49,124,599,27,82,1,1,1 +228,49,120,600,27,83,1,1,1 +229,49,117,601,27,84,1,1,1 +230,49,115,601,27,84,1,1,1 +231,49,114,601,27,84,1,1,1 +232,49,112,601,27,85,1,1,1 +233,49,111,601,27,85,1,1,1 +234,49,109,601,27,86,1,1,1 +235,49,108,601,27,86,1,1,1 +236,49,107,601,27,87,1,1,1 +237,49,106,600,27,87,1,1,1 +238,49,106,599,27,88,1,1,1 +239,49,105,599,28,87,1,1,1 +240,49,105,598,28,88,1,1,1 +241,49,105,598,28,88,1,1,1 +242,49,105,598,28,89,1,1,1 +243,49,105,599,29,89,1,1,1 +244,49,106,600,28,89,1,1,1 +245,49,106,601,29,89,1,1,1 +246,49,107,602,28,90,1,1,1 +247,49,107,602,29,91,1,1,1 +248,49,107,603,29,91,1,1,1 +249,49,108,604,29,91,1,1,1 +250,49,108,605,29,91,1,1,1 +251,49,109,606,29,92,1,1,1 +252,49,111,607,29,92,1,1,1 +253,49,114,608,29,93,1,1,1 +254,49,116,609,29,93,1,1,1 +255,49,119,610,29,94,1,1,1 +256,49,121,611,29,95,1,1,1 +257,49,124,612,29,95,1,1,1 +258,49,126,613,29,96,1,1,1 +259,49,129,615,29,96,1,1,1 +260,49,131,615,29,96,1,1,1 +261,49,133,615,29,97,1,1,1 +262,49,136,615,29,97,1,1,1 +263,49,138,615,29,98,1,1,1 +264,49,141,616,29,98,1,1,1 +265,49,143,615,29,98,1,1,1 +266,49,146,614,29,99,1,1,1 +267,49,149,614,29,99,1,1,1 +268,49,152,613,29,99,1,1,1 +269,49,154,612,29,100,1,1,1 +270,49,157,612,29,100,1,1,1 +271,49,160,611,29,101,1,1,1 +272,49,163,610,29,101,1,1,1 +273,49,166,610,29,101,1,1,1 +274,49,168,609,29,102,1,1,1 +275,49,171,608,29,102,1,1,1 +276,49,174,608,29,102,1,1,1 +277,49,177,607,29,103,1,1,1 +278,49,180,607,29,103,1,1,1 +279,49,182,608,29,104,1,1,1 +280,49,184,610,29,104,1,1,1 +281,49,186,612,29,104,1,1,1 +282,49,188,614,30,104,1,1,1 +283,49,190,616,30,104,1,1,1 +284,49,192,617,30,106,1,1,1 +285,49,194,619,30,106,1,1,1 +286,49,196,621,31,106,1,1,1 +287,49,198,623,31,106,1,1,1 +288,49,200,625,31,106,1,1,1 +289,49,203,627,31,107,1,1,1 +290,49,204,627,31,108,1,1,1 +291,49,206,628,31,108,1,1,1 +292,49,207,629,32,108,1,1,1 +293,49,209,630,31,109,1,1,1 +294,49,210,631,32,109,1,1,1 +295,49,212,632,32,109,1,1,1 +296,49,214,633,31,109,1,1,1 +297,49,215,634,32,110,1,1,1 +298,49,217,635,32,110,1,1,1 +299,49,218,636,32,110,1,1,1 +300,49,220,637,32,110,1,1,1 +301,49,222,638,32,111,1,1,1 +302,49,222,640,32,111,1,1,1 +303,49,223,642,32,112,1,1,1 +304,49,223,644,32,112,1,1,1 +305,49,224,646,32,113,1,1,1 +306,49,223,645,32,113,1,1,1 +307,49,223,648,32,114,1,1,1 +308,49,224,652,32,114,1,1,1 +309,49,223,652,32,115,1,1,1 +310,49,223,653,32,115,1,1,1 +311,49,223,654,32,115,1,1,1 +312,49,223,654,32,117,1,1,1 +313,49,223,655,32,117,1,1,1 +314,49,223,656,31,117,1,1,1 +315,49,223,656,31,119,1,1,1 +316,49,223,657,31,119,1,1,1 +317,49,223,658,31,119,1,1,1 +318,49,223,659,31,120,1,1,1 +319,49,222,659,30,121,1,1,1 +320,49,221,659,30,122,1,1,1 +321,49,220,659,30,123,1,1,1 +322,49,219,660,30,123,1,1,1 +323,49,218,660,30,124,1,1,1 +324,49,217,660,30,125,1,1,1 +325,49,216,661,30,126,1,1,1 +326,49,212,661,30,126,1,1,1 +327,49,209,661,30,126,1,1,1 +328,49,206,661,30,127,1,1,1 +329,49,202,659,30,128,1,1,1 +330,49,198,658,31,129,1,1,1 +331,49,194,657,32,130,1,1,1 +332,49,190,656,32,130,1,1,1 +333,49,186,655,33,131,1,1,1 +334,49,182,654,34,132,1,1,1 +335,49,178,653,35,133,1,1,1 +336,49,173,654,35,134,1,1,1 +337,49,168,655,36,136,1,1,1 +338,49,162,659,37,136,1,1,1 +339,49,158,662,36,136,1,1,1 +340,49,154,665,36,137,1,1,1 +341,49,150,668,36,138,1,1,1 +342,49,146,671,36,139,1,1,1 +343,49,139,676,36,141,1,1,1 +344,49,133,681,36,141,1,1,1 +345,49,127,686,36,142,1,1,1 +346,49,122,691,36,143,1,1,1 +347,49,116,694,36,143,1,1,1 +348,49,110,697,36,144,1,1,1 +349,49,103,698,37,145,1,1,1 +350,49,97,699,37,147,1,1,1 +351,49,91,700,37,149,1,1,1 +352,49,84,701,39,151,1,1,1 +353,49,78,703,39,152,1,1,1 +354,49,72,704,39,154,1,1,1 +355,49,65,705,41,156,1,1,1 +356,49,59,706,41,158,1,1,1 +357,49,53,707,41,160,1,1,1 +358,49,47,709,42,161,1,1,1 +359,49,38,711,43,162,1,1,1 +360,49,30,714,44,163,1,1,1 +361,49,21,717,45,163,1,1,1 +362,49,13,720,46,164,1,1,1 +363,49,5,723,46,165,1,1,1 +364,49,-4,726,48,165,1,1,0.89796 +365,49,-12,729,48,166,1,1,0.73469 +366,49,-20,732,49,167,1,1,0.58 +367,49,-28,737,49,167,1,1,0.42 +1,50,776,508,15,46,1,1,0.46809 +2,50,776,498,14,45,1,1,0.5 +3,50,774,509,15,44,1,1,0.48889 +4,50,775,506,15,44,1,1,0.57222 +5,50,776,503,16,45,1,1,0.54348 +6,50,779,515,16,48,1,1,0.5006 +7,50,776,506,16,47,1,1,0.56863 +8,50,776,514,17,48,1,1,0.56463 +9,50,776,513,16,48,1,1,0.55822 +10,50,776,512,16,48,1,1,0.53061 +11,50,776,511,16,48,1,1,0.57143 +12,50,775,515,16,49,1,1,0.5 +13,50,774,506,17,47,1,1,0.46875 +14,50,773,506,17,47,1,1,0.5625 +15,50,773,507,17,47,1,1,0.54745 +16,50,772,507,17,47,1,1,0.54745 +17,50,772,508,17,47,1,1,0.52778 +18,50,772,509,17,47,1,1,0.47917 +19,50,771,509,17,47,1,1,0.5081 +20,50,771,510,17,46,1,1,0.49764 +21,50,770,511,18,46,1,1,0.52408 +22,50,770,511,17,46,1,1,0.51773 +23,50,769,512,18,45,1,1,0.57208 +24,50,769,513,18,45,1,1,0.59153 +25,50,768,514,18,45,1,1,0.53776 +26,50,768,515,18,45,1,1,0.3913 +27,50,767,516,18,45,1,1,0.45652 +28,50,767,518,18,45,1,1,0.47826 +29,50,767,519,18,43,1,1,0.45455 +30,50,765,523,18,46,1,1,0.38298 +31,50,765,535,18,41,1,1,0.40476 +32,50,764,527,19,46,1,1,0.46809 +33,50,764,520,20,50,1,1,0.43137 +34,50,764,524,20,50,1,1,0.48926 +35,50,763,519,20,50,1,1,0.55556 +36,50,762,514,21,50,1,1,0.63636 +37,50,761,510,22,49,1,1,0.68957 +38,50,762,509,21,49,1,1,0.67545 +39,50,762,507,21,49,1,1,0.64455 +40,50,762,506,21,48,1,1,0.65306 +41,50,762,505,22,48,1,1,0.69831 +42,50,761,505,22,49,1,1,0.70435 +43,50,761,506,21,49,1,1,0.69091 +44,50,760,507,22,49,1,1,0.71913 +45,50,760,508,21,49,1,1,0.69091 +46,50,759,509,22,49,1,1,0.70435 +47,50,759,510,21,49,1,1,0.69091 +48,50,758,511,21,49,1,1,0.70636 +49,50,758,512,21,49,1,1,0.72182 +50,50,757,513,21,49,1,1,0.69091 +51,50,757,514,21,49,1,1,0.69091 +52,50,756,513,21,49,1,1,0.70636 +53,50,755,512,21,49,1,1,0.73727 +54,50,754,511,21,49,1,1,0.73727 +55,50,754,511,21,49,1,1,0.73727 +56,50,753,510,21,49,1,1,0.75273 +57,50,752,509,21,49,1,1,0.76818 +58,50,752,509,21,49,1,1,0.72182 +59,50,751,508,21,49,1,1,0.72182 +60,50,750,507,21,49,1,1,0.72182 +61,50,750,507,21,49,1,1,0.74091 +62,50,748,504,22,50,1,1,0.75448 +63,50,746,512,22,51,1,1,0.70151 +64,50,747,504,21,52,1,1,0.69383 +65,50,744,507,21,54,1,1,0.70496 +66,50,744,512,21,55,1,1,0.67532 +67,50,741,505,21,54,1,1,0.69091 +68,50,740,511,21,56,1,1,0.66826 +69,50,738,509,20,56,1,1,0.68672 +70,50,736,508,20,56,1,1,0.68672 +71,50,734,507,20,56,1,1,0.7193 +72,50,730,506,20,56,1,1,0.6792 +73,50,727,506,20,56,1,1,0.65915 +74,50,724,505,19,57,1,1,0.65517 +75,50,720,505,20,57,1,1,0.65107 +76,50,717,504,20,58,1,1,0.67716 +77,50,714,504,19,57,1,1,0.66897 +78,50,710,503,20,58,1,1,0.69007 +79,50,707,503,19,58,1,1,0.67458 +80,50,704,502,19,59,1,1,0.68 +81,50,701,502,19,59,1,1,0.70833 +82,50,698,501,20,61,1,1,0.7404 +83,50,694,502,19,61,1,1,0.70645 +84,50,691,502,19,62,1,1,0.7619 +85,50,687,502,19,63,1,1,0.76562 +86,50,683,503,19,63,1,1,0.77656 +87,50,680,504,19,63,1,1,0.77656 +88,50,675,508,19,62,1,1,0.73333 +89,50,671,509,19,62,1,1,0.75556 +90,50,667,510,19,62,1,1,0.79365 +91,50,663,511,20,63,1,1,0.83929 +92,50,656,515,19,61,1,1,0.75806 +93,50,651,516,19,61,1,1,0.75806 +94,50,647,518,19,60,1,1,0.78361 +95,50,642,520,19,59,1,1,0.78 +96,50,638,522,19,58,1,1,0.79661 +97,50,633,524,19,57,1,1,0.77241 +98,50,629,526,19,56,1,1,0.81842 +99,50,625,523,19,59,1,1,0.84 +100,50,622,520,19,63,1,1,0.86875 +101,50,617,523,19,62,1,1,0.85556 +102,50,612,522,19,62,1,1,0.88571 +103,50,607,522,19,62,1,1,0.86667 +104,50,602,521,19,62,1,1,0.88095 +105,50,598,521,19,62,1,1,0.90476 +106,50,593,521,19,62,1,1,0.92063 +107,50,588,520,19,62,1,1,0.88571 +108,50,584,520,19,62,1,1,0.92063 +109,50,579,519,19,62,1,1,0.90476 +110,50,574,519,19,62,1,1,0.94048 +111,50,570,519,19,62,1,1,0.98095 +112,50,564,519,19,62,1,1,0.96349 +113,50,558,520,19,62,1,1,0.98175 +114,50,552,520,19,62,1,1,0.98175 +115,50,546,521,19,62,1,1,1 +116,50,541,522,19,62,1,1,1 +117,50,535,522,19,62,1,1,1 +118,50,529,523,19,62,1,1,1 +119,50,523,523,19,62,1,1,1 +120,50,517,524,19,62,1,1,1 +121,50,512,525,19,62,1,1,1 +122,50,506,525,19,62,1,1,1 +123,50,501,525,19,63,1,1,1 +124,50,496,525,19,63,1,1,1 +125,50,490,526,20,63,1,1,1 +126,50,485,526,20,63,1,1,1 +127,50,480,526,20,64,1,1,1 +128,50,475,527,20,64,1,1,1 +129,50,468,527,20,64,1,1,1 +130,50,462,527,19,64,1,1,1 +131,50,456,527,19,65,1,1,1 +132,50,450,527,19,66,1,1,1 +133,50,444,528,20,66,1,1,1 +134,50,438,529,21,67,1,1,1 +135,50,432,530,22,67,1,1,1 +136,50,427,531,22,68,1,1,1 +137,50,421,530,22,68,1,1,1 +138,50,416,530,22,68,1,1,1 +139,50,411,530,22,68,1,1,1 +140,50,407,530,22,68,1,1,1 +141,50,403,530,22,68,1,1,1 +142,50,397,529,23,68,1,1,1 +143,50,392,529,23,68,1,1,1 +144,50,387,529,23,68,1,1,1 +145,50,382,529,23,68,1,1,1 +146,50,377,529,24,68,1,1,1 +147,50,370,530,25,67,1,1,1 +148,50,364,531,25,67,1,1,1 +149,50,358,532,25,67,1,1,1 +150,50,352,533,25,67,1,1,1 +151,50,346,534,25,67,1,1,1 +152,50,339,534,25,68,1,1,1 +153,50,333,535,25,69,1,1,1 +154,50,327,536,24,69,1,1,1 +155,50,320,537,25,70,1,1,1 +156,50,314,538,25,70,1,1,1 +157,50,308,539,24,71,1,1,1 +158,50,301,540,25,71,1,1,1 +159,50,295,541,24,72,1,1,1 +160,50,289,542,24,72,1,1,1 +161,50,283,543,24,73,1,1,1 +162,50,277,543,24,73,1,1,1 +163,50,272,543,24,73,1,1,1 +164,50,266,543,24,73,1,1,1 +165,50,261,544,24,73,1,1,1 +166,50,255,544,24,73,1,1,1 +167,50,250,544,24,73,1,1,1 +168,50,245,545,24,73,1,1,1 +169,50,239,545,24,73,1,1,1 +170,50,234,545,24,73,1,1,1 +171,50,229,546,24,73,1,1,1 +172,50,224,546,24,73,1,1,1 +173,50,219,547,24,73,1,1,1 +174,50,214,547,24,73,1,1,1 +175,50,209,548,24,73,1,1,1 +176,50,204,549,24,73,1,1,1 +177,50,199,549,24,73,1,1,1 +178,50,194,550,24,73,1,1,1 +179,50,189,550,24,73,1,1,1 +180,50,184,551,24,73,1,1,1 +181,50,179,552,24,73,1,1,1 +182,50,174,553,24,73,1,1,1 +183,50,169,554,24,73,1,1,1 +184,50,165,555,24,73,1,1,1 +185,50,160,557,24,73,1,1,1 +186,50,156,558,24,73,1,1,1 +187,50,151,559,24,73,1,1,1 +188,50,146,561,24,73,1,1,1 +189,50,142,562,24,73,1,1,1 +190,50,137,563,24,73,1,1,1 +191,50,133,565,24,73,1,1,1 +192,50,128,565,24,74,1,1,1 +193,50,124,566,24,74,1,1,1 +194,50,119,566,24,75,1,1,1 +195,50,115,567,24,76,1,1,1 +196,50,110,568,25,76,1,1,1 +197,50,106,568,24,77,1,1,1 +198,50,101,569,25,77,1,1,1 +199,50,97,570,25,78,1,1,1 +200,50,92,570,25,79,1,1,1 +201,50,88,571,25,79,1,1,1 +202,50,84,572,25,79,1,1,1 +203,50,79,572,25,81,1,1,1 +204,50,75,573,25,81,1,1,1 +205,50,70,574,26,81,1,1,1 +206,50,66,574,25,82,1,1,1 +207,50,61,575,26,83,1,1,1 +208,50,57,576,26,83,1,1,1 +209,50,52,576,26,84,1,1,1 +210,50,48,577,26,84,1,1,1 +211,50,44,578,26,85,1,1,1 +212,50,40,578,26,85,1,1,1 +213,50,36,578,27,86,1,1,1 +214,50,33,579,27,86,1,1,1 +215,50,29,579,28,87,1,1,1 +216,50,26,580,28,87,1,1,1 +217,50,22,580,29,88,1,1,1 +218,50,19,581,29,88,1,1,1 +219,50,15,582,30,89,1,1,1 +220,50,12,583,30,90,1,1,1 +221,50,8,579,29,93,1,1,1 +222,50,5,580,29,93,1,1,1 +223,50,3,581,29,93,1,1,1 +224,50,1,583,29,93,1,1,1 +225,50,-2,586,29,89,1,1,0.26296 +226,50,-5,591,31,91,1,1,0.8125 +227,50,-5,591,31,91,1,1,0.8125 +228,50,-5,591,31,91,1,1,0.8125 +229,50,-9,592,30,92,1,1,0.67742 +230,50,-15,591,32,93,1,1,0.066409 +231,50,-13,593,31,88,1,1,0.037921 +101,51,661,516,20,60,1,1,0.27557 +102,51,654,516,19,59,1,1,0.45 +103,51,649,515,19,59,1,1,0.5 +104,51,644,515,19,59,1,1,0.45 +105,51,639,515,20,59,1,1,0.52381 +106,51,634,515,20,59,1,1,0.43413 +107,51,630,514,19,60,1,1,0.45 +108,51,625,514,20,60,1,1,0.47619 +109,51,620,514,20,60,1,1,0.42857 +110,51,615,514,20,60,1,1,0.42857 +111,51,611,514,20,60,1,1,0.38642 +112,51,605,514,20,60,1,1,0.43404 +113,51,600,514,20,60,1,1,0.43404 +114,51,594,515,20,60,1,1,0.42857 +115,51,589,515,20,60,1,1,0.43326 +116,51,584,516,20,60,1,1,0.43326 +117,51,578,516,20,60,1,1,0.47619 +118,51,573,516,20,60,1,1,0.47619 +119,51,567,517,20,60,1,1,0.47619 +120,51,562,517,20,60,1,1,0.47619 +121,51,557,518,20,60,1,1,0.47619 +122,51,551,518,20,60,1,1,0.47619 +123,51,546,519,20,60,1,1,0.47619 +124,51,540,520,20,60,1,1,0.47619 +125,51,535,521,20,60,1,1,0.47619 +126,51,529,521,20,60,1,1,0.47619 +127,51,524,522,20,60,1,1,0.47619 +128,51,518,523,20,60,1,1,0.52381 +129,51,513,524,20,60,1,1,0.47619 +130,51,508,525,20,60,1,1,0.47619 +131,51,500,526,20,60,1,1,0.57143 +132,51,495,526,21,60,1,1,0.54545 +133,51,491,526,21,60,1,1,0.5 +134,51,485,525,21,61,1,1,0.5 +135,51,479,525,22,61,1,1,0.52174 +136,51,474,525,21,61,1,1,0.5 +137,51,468,525,22,61,1,1,0.52174 +138,51,462,525,22,61,1,1,0.56522 +139,51,457,525,22,61,1,1,0.56522 +140,51,451,525,22,61,1,1,0.6087 +141,51,446,525,22,61,1,1,0.56942 +142,51,440,525,22,61,1,1,0.57083 +143,51,435,525,22,62,1,1,0.65217 +144,51,429,525,23,63,1,1,0.62826 +145,51,424,525,23,64,1,1,0.66667 +146,51,419,525,23,65,1,1,0.66667 +147,51,413,525,23,65,1,1,0.70833 +148,51,408,525,23,66,1,1,0.75 +149,51,402,525,24,67,1,1,0.68 +150,51,397,525,24,68,1,1,0.64 +151,51,392,525,24,69,1,1,0.56 +152,51,385,526,24,69,1,1,0.6 +153,51,378,527,24,69,1,1,0.64 +154,51,372,528,24,69,1,1,0.6 +155,51,365,529,24,69,1,1,0.64 +156,51,359,531,24,69,1,1,0.6 +157,51,352,532,24,69,1,1,0.64 +158,51,345,533,24,69,1,1,0.68 +159,51,339,534,24,69,1,1,0.68 +160,51,332,535,24,69,1,1,0.72 +161,51,326,537,24,69,1,1,0.76 +162,51,320,538,24,68,1,1,0.76 +163,51,314,539,24,68,1,1,0.8 +164,51,309,540,24,68,1,1,0.76 +165,51,303,541,24,67,1,1,0.76 +166,51,297,542,24,67,1,1,0.8 +167,51,292,543,24,67,1,1,0.76 +168,51,286,543,24,67,1,1,0.8 +169,51,281,543,24,67,1,1,0.8 +170,51,275,543,24,67,1,1,0.84 +171,51,270,544,24,67,1,1,0.84 +172,51,264,543,25,68,1,1,0.88462 +173,51,259,543,25,68,1,1,0.88462 +174,51,253,542,26,69,1,1,0.88889 +175,51,248,542,26,69,1,1,0.92593 +176,51,243,541,26,71,1,1,0.92593 +177,51,237,541,27,71,1,1,0.92857 +178,51,232,540,27,72,1,1,1 +179,51,226,540,28,72,1,1,1 +180,51,221,539,28,73,1,1,1 +181,51,216,539,28,74,1,1,1 +182,51,211,540,28,74,1,1,0.9692 +183,51,206,541,28,75,1,1,0.9696 +184,51,201,542,28,75,1,1,0.94011 +185,51,196,543,28,76,1,1,1 +186,51,191,545,28,76,1,1,1 +187,51,186,546,28,76,1,1,1 +188,51,181,547,28,77,1,1,1 +189,51,176,548,28,77,1,1,1 +190,51,171,549,28,78,1,1,1 +191,51,167,551,27,78,1,1,1 +192,51,162,552,27,78,1,1,1 +193,51,157,553,27,79,1,1,1 +194,51,152,554,27,79,1,1,1 +195,51,147,555,27,80,1,1,1 +196,51,142,556,27,80,1,1,1 +197,51,137,557,27,81,1,1,1 +198,51,132,558,27,81,1,1,1 +199,51,127,559,27,82,1,1,1 +200,51,122,560,27,82,1,1,1 +201,51,118,561,26,83,1,1,1 +202,51,112,561,27,84,1,1,1 +203,51,107,562,27,84,1,1,1 +204,51,102,563,27,84,1,1,1 +205,51,96,564,28,84,1,1,0.96957 +206,51,91,565,28,85,1,1,0.96913 +207,51,86,565,28,86,1,1,0.93896 +208,51,80,566,29,86,1,1,0.88199 +209,51,75,567,29,86,1,1,0.88046 +210,51,70,568,29,86,1,1,0.85057 +211,51,65,569,29,87,1,1,0.82045 +212,51,61,569,29,87,1,1,0.82045 +213,51,57,570,29,87,1,1,0.78788 +214,51,53,570,29,88,1,1,0.7603 +215,51,50,571,28,87,1,1,0.74922 +216,51,46,571,28,88,1,1,0.72104 +217,51,42,572,28,88,1,1,0.68617 +218,51,39,572,27,88,1,1,0.67897 +219,51,35,573,27,88,1,1,0.64687 +220,51,31,573,27,89,1,1,0.61905 +221,51,28,574,27,89,1,1,0.6627 +222,51,23,575,27,89,1,1,0.59524 +223,51,18,577,28,88,1,1,0.50601 +224,51,14,579,28,88,1,1,0.07284 +225,51,10,581,27,88,1,1,0.072231 +226,51,6,583,27,88,1,1,0.092697 +227,51,2,585,27,88,1,1,0.069823 +228,51,-2,587,27,89,1,1,0.039683 +229,51,-8,587,27,89,1,1,0.037698 +230,51,-13,587,27,89,1,1,0.022222 +231,51,-16,586,27,89,1,1,0.030556 +224,52,10,589,32,85,1,1,0.36364 +225,52,8,590,31,85,1,1,0.375 +226,52,7,592,29,85,1,1,0.33333 +227,52,6,593,28,86,1,1,0.27586 +228,52,5,595,26,86,1,1,0.18519 +229,52,3,596,25,86,1,1,0.26923 +230,52,2,598,24,86,1,1,0.36 +231,52,1,599,22,87,1,1,1 +232,52,0,601,21,87,1,1,0.95455 +233,52,-1,596,25,90,1,1,0.92308 +234,52,-5,596,22,91,1,1,0.73913 +235,52,-5,596,23,88,1,1,0.75 +236,52,-9,596,24,89,1,1,0.6 +237,52,-7,596,23,90,1,1,0.66667 +238,52,-10,601,23,83,1,1,0.54167 +239,52,-11,596,22,88,1,1,0.47826 +240,52,-11,594,22,90,1,1,0.47826 +241,52,-12,596,22,91,1,1,0.43478 +242,52,-12,596,21,88,1,1,0.40909 +243,52,-11,593,20,90,1,1,0.42857 +244,52,-10,594,21,90,1,1,0.5 +245,52,-11,598,22,89,1,1,0.47826 +246,52,-11,594,23,89,1,1,0.5 +247,52,-11,604,23,83,1,1,0.5 +248,52,-11,602,25,85,1,1,0.53846 +249,52,-9,594,23,98,1,1,0.58333 +250,52,-12,601,25,91,1,1,0.5 +251,52,-13,597,25,96,1,1,0.46154 +252,52,-12,599,23,98,1,1,0.45833 +253,52,-10,604,24,91,1,1,0.56 +254,52,-10,597,28,101,1,1,0.62069 +255,52,-10,603,33,99,1,1,0.67647 +256,52,-5,606,30,99,1,1,0.80645 +257,52,-4,607,31,100,1,1,0.84375 +258,52,-2,606,30,100,1,1,0.39221 +259,52,0,606,30,100,1,1,0.39285 +260,52,0,607,29,100,1,1,0.3 +261,52,5,611,32,97,1,1,0.42424 +262,52,6,611,32,97,1,1,0.39394 +263,52,8,611,31,98,1,1,0.375 +264,52,10,611,30,98,1,1,0.45161 +265,52,12,611,30,99,1,1,1 +266,52,14,611,30,101,1,1,0.58065 +267,52,17,612,30,102,1,1,1 +268,52,17,613,34,103,1,1,1 +269,52,22,608,28,102,1,1,0.51724 +270,52,26,608,31,101,1,1,0.59375 +271,52,28,606,30,99,1,1,0.51613 +272,52,29,606,30,99,1,1,0.3871 +273,52,30,606,31,100,1,1,1 +274,52,31,604,31,101,1,1,0.28125 +275,52,35,602,24,103,1,1,0.14538 +276,52,35,603,30,103,1,1,0.23325 +277,52,35,601,32,104,1,1,0.31631 +278,52,35,601,39,104,1,1,0.41143 +279,52,35,604,41,102,1,1,0.38095 +280,52,40,606,38,103,1,1,0.38462 +281,52,43,610,38,103,1,1,0.38462 +282,52,43,611,39,103,1,1,0.375 +283,52,43,613,41,103,1,1,0.38095 +284,52,43,612,40,104,1,1,0.31707 +285,52,46,614,40,105,1,1,0.21951 +286,52,50,616,39,106,1,1,0.125 +287,52,55,616,40,111,1,1,1 +288,52,55,617,41,111,1,1,0.2619 +289,52,56,618,41,111,1,1,0.33333 +290,52,57,619,41,111,1,1,0.19048 +291,52,57,620,42,111,1,1,0.16279 +292,52,58,621,42,112,1,1,0.25581 +293,52,59,622,42,112,1,1,0.23256 +294,52,60,623,42,112,1,1,0.18605 +295,52,60,624,43,112,1,1,0.18182 +296,52,61,625,43,112,1,1,0.15909 +297,52,62,626,43,113,1,1,0.18182 +298,52,63,627,43,113,1,1,0.18182 +299,52,63,628,44,113,1,1,0.22222 +300,52,64,629,44,113,1,1,0.24444 +301,52,65,630,44,113,1,1,0.26667 +302,52,66,631,44,114,1,1,0.28889 +303,52,65,633,44,115,1,1,0.26667 +304,52,66,632,44,115,1,1,0.33487 +305,52,64,638,46,118,1,1,0.30377 +306,52,63,636,46,119,1,1,0.31915 +307,52,62,639,46,120,1,1,1 +308,52,62,643,45,120,1,1,0.32609 +309,52,62,642,45,121,1,1,0.34783 +310,52,60,643,47,121,1,1,0.33333 +311,52,59,645,48,121,1,1,0.38776 +312,52,59,645,47,121,1,1,0.35417 +313,52,56,651,50,117,1,1,0.35294 +314,52,54,650,49,119,1,1,0.32 +315,52,52,650,49,121,1,1,0.32 +316,52,50,651,49,121,1,1,0.32 +317,52,49,652,49,122,1,1,0.34 +318,52,48,653,48,122,1,1,0.30612 +319,52,47,654,48,123,1,1,0.30612 +320,52,43,653,49,124,1,1,0.28 +321,52,45,652,44,128,1,1,0.31111 +322,52,40,652,50,128,1,1,0.33333 +323,52,40,653,49,128,1,1,0.36 +324,52,36,652,50,129,1,1,0.33333 +325,52,33,651,50,130,1,1,0.29412 +326,52,30,653,50,131,1,1,0.35294 +327,52,27,651,50,132,1,1,0.39216 +328,52,26,654,49,131,1,1,0.44 +329,52,22,649,49,133,1,1,0.3 +330,52,16,649,49,135,1,1,0.26 +331,52,10,649,49,138,1,1,0.24 +332,52,5,646,51,133,1,1,0.34615 +333,52,1,647,50,133,1,1,0.37255 +334,52,-4,644,51,133,1,1,0.33123 +335,52,-9,646,50,132,1,1,0.35294 +336,52,-15,646,51,141,1,1,0.38462 +337,52,-20,648,51,141,1,1,0.59615 +338,52,-24,652,51,141,1,1,0.51923 +339,52,-29,655,51,142,1,1,0.42308 +531,53,1905,538,24,70,1,1,0.34254 +532,53,1883,542,21,73,1,1,0.48649 +533,53,1862,544,21,72,1,1,0.47945 +534,53,1841,545,21,72,1,1,0.49315 +535,53,1819,544,21,72,1,1,0.52055 +536,53,1802,545,21,72,1,1,0.52055 +537,53,1781,537,21,72,1,1,0.52055 +538,53,1763,546,21,72,1,1,0.57534 +539,53,1741,543,25,73,1,1,0.56757 +540,53,1722,546,28,75,1,1,0.52632 +541,53,1703,545,28,75,1,1,0.55263 +542,53,1684,555,28,75,1,1,0.5 +543,53,1667,553,30,73,1,1,0.54054 +544,53,1650,550,29,71,1,1,0.59722 +545,53,1633,550,30,73,1,1,0.55405 +546,53,1618,548,30,73,1,1,0.56757 +547,53,1602,546,30,73,1,1,0.58108 +548,53,1587,547,30,73,1,1,0.55405 +549,53,1570,539,29,75,1,1,0.61842 +550,53,1558,539,29,68,1,1,0.66667 +551,53,1545,537,24,70,1,1,0.66197 +552,53,1533,537,21,70,1,1,0.64789 +553,53,1521,536,22,73,1,1,0.62162 +554,53,1506,536,24,71,1,1,0.625 +555,53,1492,533,24,71,1,1,0.66667 +556,53,1482,533,24,71,1,1,0.68056 +557,53,1468,527,24,71,1,1,0.76389 +558,53,1458,529,24,71,1,1,0.73611 +559,53,1446,528,23,75,1,1,0.69737 +560,53,1435,529,23,75,1,1,0.69737 +561,53,1425,528,23,75,1,1,0.72368 +562,53,1413,527,23,75,1,1,0.75 +563,53,1400,526,25,77,1,1,0.75641 +564,53,1393,524,23,78,1,1,0.78481 +565,53,1377,524,30,81,1,1,0.76829 +566,53,1369,521,30,82,1,1,0.80723 +567,53,1359,526,30,82,1,1,0.77108 +568,53,1352,525,30,82,1,1,0.79518 +569,53,1343,526,29,75,1,1,0.86842 +570,53,1335,524,31,73,1,1,0.94595 +571,53,1326,527,31,73,1,1,0.91892 +572,53,1320,527,31,73,1,1,0.93243 +573,53,1310,526,30,81,1,1,0.86585 +574,53,1304,525,30,82,1,1,0.89157 +575,53,1298,524,30,82,1,1,0.91566 +576,53,1292,527,30,82,1,1,0.90361 +577,53,1285,527,32,82,1,1,0.92771 +578,53,1276,526,32,82,1,1,0.95181 +579,53,1271,524,31,82,1,1,1 +580,53,1266,526,31,85,1,1,0.96512 +581,53,1261,526,31,85,1,1,0.97674 +582,53,1257,524,31,83,1,1,1 +583,53,1251,524,31,82,1,1,1 +584,53,1249,522,30,84,1,1,1 +585,53,1247,526,30,84,1,1,1 +586,53,1242,524,30,82,1,1,1 +587,53,1239,522,30,82,1,1,1 +588,53,1234,522,30,82,1,1,1 +589,53,1232,521,30,85,1,1,1 +590,53,1230,521,31,88,1,1,1 +591,53,1227,521,34,87,1,1,1 +592,53,1227,521,34,88,1,1,1 +593,53,1227,522,34,88,1,1,1 +594,53,1226,521,34,88,1,1,1 +595,53,1226,523,34,88,1,1,1 +596,53,1226,519,32,90,1,1,1 +597,53,1227,519,32,90,1,1,1 +598,53,1228,519,32,90,1,1,1 +599,53,1227,518,32,90,1,1,1 +600,53,1230,518,32,90,1,1,1 +601,53,1232,519,32,90,1,1,1 +602,53,1231,521,33,89,1,1,1 +603,53,1233,521,33,89,1,1,1 +604,53,1236,521,32,89,1,1,1 +605,53,1242,521,32,89,1,1,1 +606,53,1244,521,29,88,1,1,1 +607,53,1248,521,29,92,1,1,1 +608,53,1252,521,29,92,1,1,1 +609,53,1254,519,29,93,1,1,1 +610,53,1256,520,31,93,1,1,1 +611,53,1259,521,30,94,1,1,1 +612,53,1263,522,30,94,1,1,1 +613,53,1266,523,31,93,1,1,1 +614,53,1270,525,31,93,1,1,1 +615,53,1272,526,31,95,1,1,1 +616,53,1274,527,31,98,1,1,1 +617,53,1277,528,30,100,1,1,1 +618,53,1279,529,30,103,1,1,1 +619,53,1282,531,30,105,1,1,1 +620,53,1287,531,30,103,1,1,1 +621,53,1290,532,30,104,1,1,1 +622,53,1293,533,31,105,1,1,1 +623,53,1296,534,31,106,1,1,1 +624,53,1299,535,32,108,1,1,1 +625,53,1302,532,32,109,1,1,1 +626,53,1308,531,39,110,1,1,1 +627,53,1314,533,39,110,1,1,1 +628,53,1321,533,39,111,1,1,1 +629,53,1325,534,40,103,1,1,1 +630,53,1334,531,39,111,1,1,0.94107 +631,53,1341,532,40,111,1,1,0.80836 +632,53,1347,535,40,112,1,1,0.66976 +633,53,1354,533,41,113,1,1,0.58208 +634,53,1363,534,40,119,1,1,0.47642 +635,53,1372,533,42,118,1,1,0.37756 +636,53,1383,539,38,119,1,1,0.25299 +637,53,1391,544,40,120,1,1,0.22314 +638,53,1399,545,40,120,1,1,0.23967 +639,53,1413,547,41,121,1,1,0.2459 +640,53,1420,550,41,121,1,1,0.2541 +641,53,1428,553,43,123,1,1,0.25 +642,53,1436,556,48,119,1,1,0.25833 +643,53,1448,560,49,118,1,1,0.2521 +644,53,1459,562,49,118,1,1,0.2605 +645,53,1471,562,50,124,1,1,0.28 +646,53,1480,562,48,128,1,1,0.29457 +647,53,1492,564,52,132,1,1,0.30075 +648,53,1506,566,51,131,1,1,0.30303 +649,53,1519,569,49,131,1,1,0.2803 +650,53,1532,563,48,131,1,1,0.37121 +651,53,1549,566,49,139,1,1,0.32143 +652,53,1562,566,49,133,1,1,0.3209 +653,53,1582,563,50,130,1,1,0.32061 +654,53,1600,556,49,132,1,1,0.33835 +655,53,1619,562,51,139,1,1,0.32857 +656,53,1635,559,51,148,1,1,0.31544 +657,53,1655,563,51,150,1,1,0.33775 +658,53,1672,568,54,145,1,1,0.37671 +659,53,1690,581,54,150,1,1,0.34437 +660,53,1714,593,51,153,1,1,0.32468 +661,53,1730,596,51,151,1,1,0.375 +662,53,1751,603,52,143,1,1,0.41667 +663,53,1772,612,52,142,1,1,0.42657 +664,53,1790,621,51,144,1,1,0.43448 +665,53,1812,622,51,144,1,1,0.48966 +666,53,1831,631,54,147,1,1,0.47973 +667,53,1852,632,54,148,1,1,0.49664 +668,53,1873,635,53,150,1,1,0.42973 +669,53,1896,645,53,152,1,1,0.19971 +652,54,934,491,24,55,1,1,0.71429 +653,54,941,488,21,58,1,1,0.74576 +654,54,948,485,19,61,1,1,0.74194 +655,54,958,485,21,61,1,1,0.74194 +656,54,967,486,21,62,1,1,0.7619 +657,54,977,488,21,63,1,1,0.8125 +658,54,986,497,21,63,1,1,0.76562 +659,54,995,506,21,64,1,1,0.72308 +660,54,1001,505,22,64,1,1,0.75385 +661,54,1008,505,22,64,1,1,0.76923 +662,54,1016,506,21,65,1,1,0.77273 +663,54,1024,508,21,66,1,1,0.79104 +664,54,1032,507,19,65,1,1,0.83333 +665,54,1040,506,18,64,1,1,0.87692 +666,54,1047,505,21,63,1,1,0.9375 +667,54,1056,508,22,61,1,1,0.90323 +668,54,1064,508,22,61,1,1,0.90323 +669,54,1072,508,23,62,1,1,0.87831 +670,54,1080,506,24,63,1,1,0.90375 +671,54,1089,504,24,64,1,1,0.89662 +672,54,1098,503,23,63,1,1,0.91341 +673,54,1107,503,23,62,1,1,0.89947 +674,54,1114,499,23,62,1,1,0.93254 +675,54,1122,498,23,64,1,1,0.70128 +676,54,1131,497,22,66,1,1,0.74951 +677,54,1140,497,22,68,1,1,0.78324 +678,54,1147,496,22,70,1,1,0.78077 +679,54,1155,496,23,69,1,1,0.83929 +680,54,1165,503,23,69,1,1,0.80833 +681,54,1168,517,24,70,1,1,0.79775 +682,54,1176,513,24,71,1,1,0.80111 +683,54,1184,506,24,69,1,1,0.81257 +684,54,1192,500,25,66,1,1,0.84615 +685,54,1200,494,25,67,1,1,0.99095 +686,54,1208,488,25,66,1,1,0.99656 +687,54,1216,483,26,70,1,1,0.99791 +688,54,1223,484,27,72,1,1,0.99511 +689,54,1230,485,27,72,1,1,1 +690,54,1241,487,24,70,1,1,1 +691,54,1248,481,25,76,1,1,1 +692,54,1256,489,29,72,1,1,1 +693,54,1265,488,29,74,1,1,1 +694,54,1272,498,28,70,1,1,1 +695,54,1284,503,26,68,1,1,1 +696,54,1292,507,24,69,1,1,1 +697,54,1299,509,24,69,1,1,1 +698,54,1309,509,24,69,1,1,1 +699,54,1317,516,24,69,1,1,1 +700,54,1323,515,24,69,1,1,1 +701,54,1331,523,26,68,1,1,1 +702,54,1340,522,27,68,1,1,1 +703,54,1345,529,28,68,1,1,1 +704,54,1353,532,28,69,1,1,1 +705,54,1358,531,28,69,1,1,1 +706,54,1365,540,28,69,1,1,1 +707,54,1372,537,27,66,1,1,1 +708,54,1379,539,27,67,1,1,1 +709,54,1387,536,26,63,1,1,1 +710,54,1393,550,26,64,1,1,1 +711,54,1398,540,26,65,1,1,1 +712,54,1408,544,26,66,1,1,1 +713,54,1415,535,26,66,1,1,1 +714,54,1421,529,27,66,1,1,1 +715,54,1426,533,27,67,1,1,1 +716,54,1433,526,28,67,1,1,1 +717,54,1438,527,28,68,1,1,1 +718,54,1443,525,28,69,1,1,1 +719,54,1451,533,28,70,1,1,1 +720,54,1457,528,28,71,1,1,1 +721,54,1465,529,28,72,1,1,1 +722,54,1468,529,33,78,1,1,1 +723,54,1476,533,28,74,1,1,1 +724,54,1481,538,28,75,1,1,1 +725,54,1490,538,29,73,1,1,1 +726,54,1498,541,28,77,1,1,1 +727,54,1503,542,28,77,1,1,1 +728,54,1510,552,30,76,1,1,1 +729,54,1518,552,30,76,1,1,1 +730,54,1526,554,30,76,1,1,1 +731,54,1531,558,30,76,1,1,1 +732,54,1538,558,30,76,1,1,1 +733,54,1546,554,30,76,1,1,1 +734,54,1551,558,30,76,1,1,1 +735,54,1556,554,30,76,1,1,1 +736,54,1560,552,34,80,1,1,1 +737,54,1564,552,34,80,1,1,1 +738,54,1571,555,35,79,1,1,1 +739,54,1576,556,35,79,1,1,1 +740,54,1582,556,35,79,1,1,1 +741,54,1585,559,35,79,1,1,1 +742,54,1592,563,35,79,1,1,1 +743,54,1596,565,35,79,1,1,1 +744,54,1600,565,35,79,1,1,1 +745,54,1604,565,35,79,1,1,1 +746,54,1608,573,35,79,1,1,1 +747,54,1613,573,35,79,1,1,1 +748,54,1619,567,34,85,1,1,1 +749,54,1627,568,34,85,1,1,1 +750,54,1632,567,34,85,1,1,1 +670,55,540,503,15,38,1,1,0.6875 +671,55,546,501,15,39,1,1,0.625 +672,55,553,499,15,40,1,1,0.625 +673,55,560,493,14,41,1,1,0.6 +674,55,567,488,14,41,1,1,0.66667 +675,55,574,485,14,42,1,1,1 +676,55,581,485,14,43,1,1,0.74242 +677,55,589,486,14,43,1,1,1 +678,55,594,487,14,44,1,1,1 +679,55,600,493,14,44,1,1,0.53333 +680,55,611,493,13,41,1,1,0.78571 +681,55,611,516,13,41,1,1,0.57143 +682,55,616,536,15,42,1,1,0.6875 +683,55,620,511,15,42,1,1,1 +684,55,627,503,15,42,1,1,1 +685,55,633,499,15,42,1,1,1 +686,55,639,493,15,42,1,1,1 +687,55,645,489,15,42,1,1,0.625 +688,55,653,489,15,42,1,1,1 +689,55,659,486,15,42,1,1,0.75 +690,55,665,484,15,42,1,1,0.75 +691,55,671,482,15,42,1,1,0.75 +692,55,679,480,14,47,1,1,1 +693,55,686,480,14,47,1,1,1 +694,55,690,483,14,47,1,1,1 +695,55,696,484,14,47,1,1,1 +696,55,703,484,14,47,1,1,1 +697,55,708,485,14,47,1,1,1 +698,55,713,484,14,47,1,1,1 +699,55,719,485,14,47,1,1,1 +700,55,725,486,14,47,1,1,1 +701,55,730,488,14,47,1,1,1 +702,55,736,488,15,46,1,1,1 +703,55,739,488,18,48,1,1,1 +704,55,745,491,18,48,1,1,0.94737 +705,55,747,492,18,48,1,1,0.89474 +706,55,752,493,18,48,1,1,0.73684 +707,55,756,498,18,48,1,1,0.89474 +708,55,760,498,18,48,1,1,0.73684 +709,55,763,502,18,48,1,1,0.94737 +710,55,767,508,18,48,1,1,0.89474 +711,55,769,509,18,48,1,1,0.89474 +712,55,774,512,18,48,1,1,0.89474 +713,55,778,511,18,48,1,1,0.78947 +714,55,782,518,18,48,1,1,0.57895 +715,55,785,516,18,48,1,1,0.63158 +716,55,786,518,18,48,1,1,0.57895 +717,55,790,518,18,48,1,1,0.68421 +718,55,793,519,15,47,1,1,0.8125 +719,55,798,519,15,47,1,1,0.875 +720,55,799,521,15,47,1,1,0.8125 +721,55,803,521,15,47,1,1,0.8125 +722,55,807,522,15,47,1,1,0.875 +723,55,811,522,15,47,1,1,0.875 +724,55,814,531,14,49,1,1,0.86667 +725,55,818,531,14,49,1,1,0.86667 +726,55,823,531,14,49,1,1,0.86667 +727,55,825,537,16,48,1,1,0.58824 +728,55,828,537,16,48,1,1,0.76471 +729,55,831,536,16,47,1,1,0.64706 +730,55,835,540,17,46,1,1,0.61111 +731,55,835,535,20,52,1,1,0.90476 +732,55,840,535,20,52,1,1,0.7619 +733,55,842,535,20,52,1,1,0.85714 +734,55,845,531,20,52,1,1,0.61905 +735,55,847,531,20,52,1,1,0.85714 +736,55,850,529,20,52,1,1,0.61905 +737,55,853,527,20,52,1,1,0.47619 +738,55,854,528,20,52,1,1,0.57143 +739,55,855,530,20,52,1,1,0.57143 +740,55,855,532,20,52,1,1,0.95238 +741,55,860,533,20,52,1,1,0.85714 +742,55,862,537,20,52,1,1,0.80952 +743,55,862,537,20,52,1,1,0.90476 +744,55,862,538,20,52,1,1,0.90476 +745,55,863,538,20,52,1,1,0.90476 +746,55,865,539,20,52,1,1,0.85714 +747,55,866,538,19,53,1,1,0.85 +748,55,867,538,19,54,1,1,0.85 +749,55,869,539,19,54,1,1,0.85 +750,55,869,539,19,54,1,1,0.9 +610,56,341,478,19,42,1,1,1 +611,56,341,477,19,43,1,1,1 +612,56,340,475,18,43,1,1,1 +613,56,339,474,18,43,1,1,1 +614,56,339,473,18,43,1,1,1 +615,56,339,471,18,43,1,1,1 +616,56,337,472,19,42,1,1,1 +617,56,335,473,21,42,1,1,1 +618,56,335,473,20,42,1,1,1 +619,56,334,472,20,43,1,1,1 +620,56,334,472,20,43,1,1,1 +621,56,334,473,18,43,1,1,1 +622,56,333,473,18,43,1,1,1 +623,56,334,477,18,44,1,1,1 +624,56,335,476,19,44,1,1,1 +625,56,333,479,19,44,1,1,1 +626,56,335,477,19,44,1,1,1 +627,56,336,483,18,44,1,1,1 +628,56,339,482,18,44,1,1,1 +629,56,339,485,19,44,1,1,1 +630,56,344,487,18,44,1,1,1 +631,56,345,487,18,44,1,1,1 +632,56,349,487,19,44,1,1,1 +633,56,352,489,19,44,1,1,1 +634,56,354,491,18,44,1,1,1 +635,56,359,490,18,44,1,1,1 +636,56,359,492,19,44,1,1,1 +637,56,363,493,19,44,1,1,1 +638,56,366,497,19,43,1,1,1 +639,56,371,496,19,43,1,1,1 +640,56,374,497,19,43,1,1,1 +641,56,375,497,19,44,1,1,1 +642,56,380,497,16,43,1,1,1 +643,56,386,497,12,43,1,1,1 +644,56,390,498,13,42,1,1,1 +645,56,396,497,14,45,1,1,1 +646,56,399,498,14,45,1,1,1 +647,56,404,498,14,46,1,1,1 +648,56,409,499,15,46,1,1,1 +649,56,416,497,13,42,1,1,1 +650,56,422,502,13,42,1,1,1 +651,56,426,501,15,41,1,1,1 +652,56,432,492,15,42,1,1,1 +653,56,438,492,16,42,1,1,1 +654,56,446,494,15,42,1,1,1 +655,56,455,494,15,41,1,1,1 +656,56,461,501,16,41,1,1,1 +657,56,471,502,14,40,1,1,1 +658,56,479,511,14,41,1,1,1 +659,56,488,520,14,42,1,1,1 +660,56,489,516,14,42,1,1,1 +661,56,495,514,14,42,1,1,1 +662,56,501,512,14,43,1,1,1 +663,56,507,510,14,43,1,1,1 +664,56,514,509,14,43,1,1,1 +665,56,521,509,14,42,1,1,1 +666,56,528,505,14,43,1,1,1 +667,56,535,503,14,43,1,1,1 +668,56,542,501,14,43,1,1,1 +669,56,549,500,15,43,1,1,1 +670,56,556,499,15,42,1,1,1 +671,56,565,495,15,43,1,1,1 +672,56,571,494,15,43,1,1,1 +673,56,577,493,15,44,1,1,1 +674,56,584,487,16,44,1,1,1 +675,56,590,487,17,37,1,1,1 +676,56,595,491,18,38,1,1,1 +677,56,605,485,18,40,1,1,1 +678,56,610,487,18,41,1,1,1 +679,56,617,493,17,42,1,1,1 +680,56,625,492,17,43,1,1,1 +681,56,628,513,18,43,1,1,1 +682,56,632,531,18,43,1,1,1 +683,56,638,503,17,44,1,1,1 +684,56,643,495,17,44,1,1,1 +685,56,648,493,18,44,1,1,0.95439 +686,56,654,484,18,46,1,1,0.95745 +687,56,661,482,17,46,1,1,1 +688,56,667,480,18,47,1,1,0.91447 +689,56,674,479,18,47,1,1,0.95504 +690,56,680,476,18,49,1,1,0.95579 +691,56,686,474,17,49,1,1,0.95333 +692,56,692,473,18,50,1,1,0.90918 +693,56,699,473,18,50,1,1,0.90918 +694,56,705,476,18,51,1,1,1 +695,56,710,476,19,52,1,1,0.95755 +696,56,716,477,19,52,1,1,0.91321 +697,56,722,478,19,53,1,1,0.95648 +698,56,728,479,19,53,1,1,1 +699,56,734,480,19,54,1,1,1 +700,56,740,481,19,54,1,1,1 +701,56,746,482,19,55,1,1,1 +702,56,752,483,19,55,1,1,1 +703,56,758,484,19,56,1,1,1 +704,56,763,485,18,57,1,1,1 +705,56,764,481,20,60,1,1,1 +706,56,769,484,20,60,1,1,1 +707,56,773,485,20,61,1,1,0.92473 +708,56,777,490,20,60,1,1,1 +709,56,781,490,20,61,1,1,1 +710,56,784,500,22,59,1,1,1 +711,56,786,500,22,59,1,1,1 +712,56,791,503,22,59,1,1,1 +713,56,793,502,23,60,1,1,1 +714,56,796,510,22,58,1,1,1 +715,56,800,508,22,59,1,1,1 +716,56,802,508,22,58,1,1,0.89167 +717,56,807,508,22,58,1,1,0.92778 +718,56,808,510,22,59,1,1,1 +719,56,813,510,22,58,1,1,1 +720,56,818,510,19,65,1,1,1 +721,56,820,510,21,64,1,1,1 +722,56,823,511,21,63,1,1,1 +723,56,827,510,21,63,1,1,1 +724,56,829,522,21,64,1,1,1 +725,56,831,521,25,62,1,1,1 +726,56,836,521,25,62,1,1,1 +727,56,837,527,25,63,1,1,1 +728,56,844,527,25,62,1,1,1 +729,56,846,525,25,62,1,1,1 +730,56,850,527,25,62,1,1,1 +731,56,854,526,25,63,1,1,1 +732,56,856,526,25,62,1,1,1 +733,56,860,525,25,62,1,1,0.90293 +734,56,863,521,24,65,1,1,1 +735,56,865,521,24,65,1,1,1 +736,56,869,520,24,66,1,1,1 +737,56,869,519,24,65,1,1,1 +738,56,873,521,24,65,1,1,1 +739,56,875,520,24,66,1,1,1 +740,56,875,522,24,65,1,1,1 +741,56,878,524,24,65,1,1,1 +742,56,879,526,24,65,1,1,1 +743,56,881,528,24,66,1,1,1 +744,56,881,527,23,66,1,1,1 +745,56,882,526,23,66,1,1,1 +746,56,883,528,23,67,1,1,1 +747,56,883,527,22,68,1,1,1 +748,56,884,526,22,68,1,1,1 +749,56,886,525,22,68,1,1,0.89603 +750,56,887,524,22,69,1,1,0.93168 +599,57,813,480,19,55,1,1,1 +600,57,811,477,19,55,1,1,1 +601,57,811,478,19,55,1,1,1 +602,57,810,479,19,55,1,1,1 +603,57,808,478,19,55,1,1,1 +604,57,807,479,19,54,1,1,1 +605,57,808,479,19,51,1,1,1 +606,57,807,479,19,51,1,1,0.89231 +607,57,806,480,22,52,1,1,0.80312 +608,57,807,479,22,51,1,1,0.76589 +609,57,806,479,22,52,1,1,0.64315 +610,57,807,477,22,51,1,1,0.63043 +611,57,806,476,21,46,1,1,0.59381 +612,57,805,478,22,46,1,1,0.53191 +613,57,804,476,22,46,1,1,0.51064 +614,57,806,477,22,46,1,1,0.51064 +615,57,805,476,22,46,1,1,0.55319 +616,57,804,478,22,46,1,1,0.53191 +617,57,805,480,22,46,1,1,0.51064 +618,57,804,477,21,46,1,1,0.59574 +619,57,806,481,22,46,1,1,0.53191 +620,57,805,481,22,45,1,1,0.56522 +621,57,803,482,22,45,1,1,0.56522 +622,57,804,483,22,45,1,1,0.58696 +623,57,803,484,22,45,1,1,0.6087 +624,57,805,484,21,43,1,1,0.68182 +625,57,807,487,22,37,1,1,0.78947 +626,57,807,486,22,37,1,1,0.68421 +627,57,809,486,22,37,1,1,0.68421 +628,57,809,487,22,37,1,1,0.68421 +629,57,814,486,22,37,1,1,0.73684 +630,57,817,487,22,37,1,1,0.73684 +631,57,822,482,22,40,1,1,0.82927 +632,57,822,486,22,40,1,1,0.7561 +633,57,829,483,22,40,1,1,0.90244 +409,58,1136,522,26,64,1,1,0.59259 +410,58,1126,521,23,64,1,1,0.66667 +411,58,1117,521,19,63,1,1,1 +412,58,1102,524,23,62,1,1,1 +413,58,1089,522,23,63,1,1,1 +414,58,1076,521,24,63,1,1,1 +415,58,1061,520,25,63,1,1,1 +416,58,1047,519,25,63,1,1,1 +417,58,1033,518,25,64,1,1,1 +418,58,1019,517,25,64,1,1,1 +419,58,1005,517,26,64,1,1,1 +420,58,995,516,20,63,1,1,1 +421,58,977,515,22,62,1,1,1 +422,58,960,514,24,62,1,1,1 +423,58,943,511,24,64,1,1,1 +424,58,927,509,24,65,1,1,1 +425,58,909,509,24,65,1,1,1 +426,58,891,510,24,65,1,1,1 +427,58,873,511,25,64,1,1,0.93846 +428,58,855,512,25,64,1,1,0.90059 +429,58,837,513,26,64,1,1,0.86211 +430,58,820,515,26,64,1,1,0.82051 +431,58,801,518,26,64,1,1,0.79658 +432,58,783,520,26,64,1,1,0.77436 +433,58,762,520,26,64,1,1,0.74929 +434,58,742,520,26,64,1,1,0.70142 +435,58,721,520,26,65,1,1,0.67172 +436,58,701,520,26,65,1,1,0.65825 +437,58,680,520,26,66,1,1,0.63958 +438,58,660,520,26,66,1,1,0.63682 +439,58,640,520,26,67,1,1,0.60948 +440,58,616,519,26,66,1,1,0.66169 +441,58,592,519,26,65,1,1,0.69192 +442,58,569,519,26,64,1,1,0.72422 +443,58,545,519,26,63,1,1,0.76215 +444,58,522,519,26,62,1,1,0.73956 +445,58,498,524,29,60,1,1,0.69891 +446,58,473,521,30,62,1,1,0.75576 +447,58,449,518,31,65,1,1,0.73201 +314,59,1282,520,21,48,1,1,0.57143 +315,59,1285,520,22,49,1,1,0.56 +316,59,1289,521,23,50,1,1,0.5098 +317,59,1297,522,18,52,1,1,0.45283 +318,59,1299,521,21,51,1,1,0.46154 +319,59,1303,520,20,52,1,1,0.4717 +320,59,1307,520,20,53,1,1,0.46296 +321,59,1311,519,20,55,1,1,0.46429 +322,59,1315,519,19,55,1,1,0.48214 +323,59,1319,518,19,57,1,1,0.43103 +324,59,1323,518,19,58,1,1,0.38983 +325,59,1327,515,20,58,1,1,0.42373 +326,59,1329,513,20,57,1,1,0.46552 +327,59,1331,511,20,56,1,1,0.50877 +328,59,1333,509,21,56,1,1,0.54386 +329,59,1335,507,21,55,1,1,0.57143 +330,59,1338,505,21,55,1,1,0.60714 +331,59,1338,502,24,55,1,1,0.625 +332,59,1339,500,26,55,1,1,0.58929 +333,59,1341,497,26,56,1,1,0.58025 +334,59,1344,495,25,57,1,1,0.55172 +335,59,1346,495,25,57,1,1,0.51724 +336,59,1348,495,25,57,1,1,0.5 +337,59,1351,495,25,57,1,1,0.48276 +338,59,1353,490,25,57,1,1,0.55172 +339,59,1354,491,25,57,1,1,0.51724 +340,59,1356,492,25,57,1,1,0.5 +341,59,1357,495,22,56,1,1,0.45919 +342,59,1358,498,19,56,1,1,0.4193 +343,59,1359,501,22,56,1,1,0.40503 +344,59,1361,505,25,55,1,1,0.41277 +345,59,1362,507,25,55,1,1,0.39698 +346,59,1363,509,25,55,1,1,0.41346 +347,59,1364,511,25,55,1,1,0.41277 +348,59,1366,513,24,55,1,1,0.42857 +349,59,1367,515,24,55,1,1,0.42643 +350,59,1368,517,24,55,1,1,0.44214 +351,59,1370,519,23,55,1,1,0.43973 +352,59,1371,521,23,55,1,1,0.43155 +353,59,1372,523,23,55,1,1,0.42411 +354,59,1374,525,23,56,1,1,0.50877 +355,59,1375,526,20,55,1,1,0.45918 +356,59,1375,527,20,55,1,1,0.45918 +357,59,1375,528,21,56,1,1,0.42026 +358,59,1376,530,20,56,1,1,0.54386 +359,59,1376,531,21,57,1,1,0.53448 +360,59,1377,532,20,57,1,1,0.55172 +361,59,1377,534,21,57,1,1,0.53448 +362,59,1378,535,20,58,1,1,0.54237 +363,59,1378,536,21,59,1,1,0.55 +364,59,1379,538,21,59,1,1,0.53333 +365,59,1379,539,21,59,1,1,0.53333 +366,59,1379,540,21,60,1,1,0.52459 +367,59,1379,541,21,60,1,1,0.54098 +368,59,1379,542,22,61,1,1,0.53226 +369,59,1380,544,21,61,1,1,0.51613 +370,59,1380,545,21,61,1,1,0.44135 +371,59,1380,546,22,62,1,1,0.44099 +372,59,1380,547,22,62,1,1,0.52381 +373,59,1380,548,22,63,1,1,0.53125 +374,59,1381,550,22,63,1,1,0.46875 +375,59,1379,548,22,62,1,1,0.47619 +376,59,1378,546,21,62,1,1,0.49206 +377,59,1376,544,21,62,1,1,0.49206 +378,59,1375,542,20,62,1,1,0.50794 +379,59,1373,541,20,61,1,1,0.5 +380,59,1372,539,19,61,1,1,0.5 +381,59,1370,537,19,61,1,1,0.51613 +382,59,1369,535,18,61,1,1,0.51613 +383,59,1367,533,18,61,1,1,0.53226 +384,59,1366,532,18,60,1,1,0.54098 +385,59,1362,531,18,61,1,1,0.54839 +386,59,1358,531,18,61,1,1,0.53226 +387,59,1354,531,19,62,1,1,0.52381 +388,59,1350,531,19,62,1,1,0.52381 +389,59,1346,531,19,62,1,1,0.50794 +390,59,1342,531,20,63,1,1,0.5 +391,59,1338,531,21,64,1,1,0.45734 +392,59,1332,531,20,64,1,1,0.3707 +393,59,1326,531,20,64,1,1,0.41099 +394,59,1321,531,19,65,1,1,0.45455 +395,59,1314,530,19,65,1,1,0.4697 +396,59,1307,530,19,64,1,1,0.47692 +397,59,1300,530,19,63,1,1,0.46875 +398,59,1294,530,19,62,1,1,0.47619 +399,59,1285,529,21,61,1,1,0.52273 +400,59,1277,529,22,60,1,1,0.51461 +401,59,1268,529,21,59,1,1,0.47727 +402,59,1260,529,20,59,1,1,0.5 +403,59,1251,529,20,58,1,1,0.52865 +404,59,1243,529,19,58,1,1,0.36864 +405,59,1232,528,19,58,1,1,0.35593 +406,59,1222,527,19,58,1,1,0.33051 +407,59,1212,526,19,58,1,1,0.39407 +408,59,1202,525,19,58,1,1,0.4339 +409,59,1190,524,19,58,1,1,0.40678 +410,59,1178,523,19,58,1,1,0.39153 +411,59,1167,523,19,58,1,1,0.37966 +412,59,1154,522,19,58,1,1,0.41949 +413,59,1142,522,19,58,1,1,0.44746 +414,59,1130,522,19,58,1,1,0.47288 +415,59,1113,523,19,58,1,1,0.3322 +416,59,1098,519,22,57,1,1,0.37706 +417,59,1085,519,19,58,1,1,0.31949 +418,59,1072,519,19,58,1,1,0.3322 +419,59,1056,517,19,58,1,1,0.26864 +420,59,1042,516,19,58,1,1,0.25932 +66,60,1602,496,14,57,1,1,0.26782 +67,60,1600,510,15,58,1,1,0.27331 +68,60,1598,506,16,59,1,1,0.49608 +69,60,1598,513,19,59,1,1,0.48167 +70,60,1594,510,20,59,1,1,0.7381 +71,60,1591,510,20,59,1,1,0.84524 +72,60,1588,510,20,59,1,1,0.88651 +73,60,1585,510,21,59,1,1,0.15758 +74,60,1582,510,22,59,1,1,0.13333 +75,60,1580,511,22,59,1,1,0.17464 +76,60,1578,512,22,58,1,1,0.11864 +77,60,1574,511,22,58,1,1,0.13559 +78,60,1571,511,22,58,1,1,0.16875 +79,60,1567,510,23,59,1,1,0.71111 +80,60,1564,510,22,58,1,1,0.22034 +81,60,1561,510,22,58,1,1,0.25129 +82,60,1557,509,23,59,1,1,0.21389 +83,60,1554,509,22,58,1,1,0.14444 +84,60,1550,508,23,59,1,1,0.21319 +85,60,1547,508,23,59,1,1,0.16944 +86,60,1544,508,23,59,1,1,0.21319 +87,60,1540,509,23,59,1,1,0.25625 +88,60,1536,510,23,59,1,1,0.29653 +89,60,1532,511,23,59,1,1,0.29583 +90,60,1528,513,23,59,1,1,0.28125 +91,60,1524,514,24,59,1,1,0.31 +92,60,1520,515,24,59,1,1,0.30933 +93,60,1516,517,24,59,1,1,0.39933 +94,60,1512,518,24,59,1,1,0.364 +95,60,1508,519,24,59,1,1,0.34133 +96,60,1505,521,24,59,1,1,0.28 +97,60,1500,521,24,59,1,1,0.28067 +98,60,1496,521,23,60,1,1,0.24863 +99,60,1491,521,24,60,1,1,0.24262 +100,60,1487,522,23,60,1,1,0.1735 +101,60,1483,522,23,60,1,1,0.1735 +102,60,1478,522,23,61,1,1,0.17204 +103,60,1474,523,22,60,1,1,0.20171 +104,60,1469,523,23,61,1,1,0.28495 +105,60,1465,523,22,61,1,1,0.2805 +106,60,1461,524,22,61,1,1,0.41094 +107,60,1456,523,22,61,1,1,0.41094 +108,60,1451,523,22,61,1,1,0.45021 +109,60,1446,523,22,61,1,1,0.45021 +110,60,1441,523,22,61,1,1,0.48948 +111,60,1436,523,23,61,1,1,0.51075 +112,60,1431,522,23,62,1,1,0.56349 +113,60,1426,522,23,62,1,1,0.64286 +114,60,1421,522,23,62,1,1,0.39286 +115,60,1416,522,23,62,1,1,0.34259 +116,60,1411,522,24,62,1,1,0.32063 +117,60,1405,521,24,62,1,1,0.020952 +118,60,1400,520,24,62,1,1,0.097143 +119,60,1395,519,24,63,1,1,0.215 +120,60,1390,518,23,63,1,1,0.26042 +121,60,1384,518,24,62,1,1,0.36508 +122,60,1379,517,24,63,1,1,0.36312 +123,60,1374,516,23,63,1,1,0.41667 +124,60,1369,515,23,63,1,1,0.375 +125,60,1364,515,23,63,1,1,0.375 +126,60,1360,517,23,62,1,1,0.29365 +127,60,1357,519,24,62,1,1,0.2419 +128,60,1348,520,24,62,1,1,0.32 +129,60,1342,519,22,62,1,1,0.086957 +130,60,1342,519,22,62,1,1,0 +131,60,1332,519,22,62,1,1,0.05176 +132,60,1328,519,23,61,1,1,0.056452 +71,61,1601,510,20,51,1,1,0.054945 +72,61,1598,510,20,52,1,1,0.077269 +73,61,1596,510,20,53,1,1,0.16843 +74,61,1594,510,19,54,1,1,0.040909 +75,61,1592,511,19,54,1,1,0.073636 +76,61,1588,511,20,54,1,1,0.066667 +77,61,1585,511,20,54,1,1,0.054545 +78,61,1582,511,20,54,1,1,0.046753 +79,61,1579,510,19,55,1,1,0.042857 +80,61,1576,509,18,56,1,1,0.054478 +81,61,1573,509,17,57,1,1,0.050766 +82,61,1570,508,16,58,1,1,0.046859 +83,61,1567,508,15,59,1,1,0.045833 +84,61,1564,506,20,53,1,1,0.089065 +85,61,1557,508,20,56,1,1,0.042607 +86,61,1556,508,22,55,1,1,0.045031 +87,61,1552,508,22,56,1,1,0.065599 +88,61,1548,509,22,56,1,1,0.070938 +89,61,1544,510,22,56,1,1,0.074752 +90,61,1541,511,22,56,1,1,0.09077 +91,61,1537,513,22,56,1,1,0.074752 +92,61,1534,515,21,56,1,1,0.059809 +93,61,1530,516,20,53,1,1,0.074956 +94,61,1525,517,20,55,1,1,0.072279 +95,61,1521,519,20,56,1,1,0.056809 +96,61,1516,519,20,56,1,1,0.070175 +97,61,1512,519,20,57,1,1,0.08046 +98,61,1508,519,20,57,1,1,0.133 +99,61,1504,519,20,58,1,1,0.13801 +100,61,1500,520,20,57,1,1,0.22414 +101,61,1495,520,21,58,1,1,0.21957 +102,61,1491,520,21,58,1,1,0.30431 +103,61,1487,520,21,59,1,1,0.35455 +104,61,1483,520,21,59,1,1,0.31667 +105,61,1479,521,21,59,1,1,0.31288 +106,61,1477,521,20,57,1,1,0.26108 +107,61,1470,520,21,60,1,1,0.30999 +108,61,1467,520,23,60,1,1,0.41325 +58,62,1268,497,21,53,1,1,0.98316 +59,62,1268,496,21,52,1,1,1 +60,62,1268,496,21,51,1,1,1 +61,62,1268,495,21,50,1,1,1 +62,62,1268,495,21,49,1,1,1 +63,62,1269,495,21,48,1,1,1 +64,62,1269,497,22,47,1,1,1 +65,62,1270,499,22,47,1,1,0.95652 +66,62,1271,501,22,47,1,1,1 +67,62,1272,504,22,46,1,1,1 +68,62,1269,502,22,46,1,1,1 +69,62,1267,502,22,46,1,1,1 +70,62,1266,502,22,46,1,1,1 +71,62,1265,503,22,46,1,1,1 +72,62,1264,503,22,46,1,1,1 +73,62,1262,503,22,47,1,1,1 +74,62,1261,504,22,46,1,1,1 +75,62,1260,504,22,47,1,1,1 +76,62,1259,504,22,47,1,1,1 +77,62,1258,505,22,47,1,1,1 +78,62,1255,505,22,47,1,1,1 +79,62,1253,505,22,47,1,1,1 +80,62,1251,505,22,47,1,1,1 +81,62,1249,505,22,47,1,1,0.95833 +82,62,1247,505,22,47,1,1,0.91667 +83,62,1244,505,22,47,1,1,0.91667 +84,62,1242,505,22,47,1,1,0.87228 +85,62,1240,505,22,47,1,1,0.82971 +86,62,1238,505,22,47,1,1,0.78714 +87,62,1236,505,22,47,1,1,0.74457 +88,62,1233,506,22,47,1,1,0.73913 +89,62,1230,507,22,47,1,1,0.69565 +90,62,1227,508,22,47,1,1,0.69565 +91,62,1224,509,22,47,1,1,0.69565 +92,62,1221,510,23,47,1,1,0.66667 +93,62,1218,511,23,47,1,1,0.63281 +94,62,1215,512,23,47,1,1,0.63281 +95,62,1212,513,23,47,1,1,0.63281 +96,62,1209,514,23,47,1,1,0.63281 +97,62,1207,515,23,48,1,1,0.60034 +98,62,1204,517,22,48,1,1,0.74978 +99,62,1201,517,21,48,1,1,0.73284 +100,62,1198,517,21,48,1,1,0.73284 +101,62,1195,517,21,48,1,1,0.73284 +102,62,1192,517,20,48,1,1,0.76676 +103,62,1189,517,20,48,1,1,0.71429 +104,62,1186,517,20,48,1,1,0.71429 +105,62,1183,517,19,48,1,1,0.75 +106,62,1180,517,19,48,1,1,0.75 +107,62,1177,518,19,47,1,1,0.75 +108,62,1173,518,19,47,1,1,0.80417 +109,62,1170,518,19,47,1,1,0.77083 +110,62,1167,518,19,47,1,1,0.71875 +111,62,1164,518,19,48,1,1,0.67143 +112,62,1161,519,19,47,1,1,0.67917 +113,62,1157,519,19,47,1,1,0.71875 +114,62,1154,519,19,48,1,1,0.76531 +115,62,1151,519,19,48,1,1,0.66429 +116,62,1148,519,19,48,1,1,0.72449 +117,62,1145,520,19,48,1,1,0.67143 +118,62,1141,519,19,48,1,1,0.71224 +119,62,1137,519,19,48,1,1,0.66429 +120,62,1133,519,19,48,1,1,0.65714 +121,62,1129,519,19,48,1,1,0.65 +122,62,1125,519,19,48,1,1,0.6 +123,62,1121,518,19,49,1,1,0.65 +124,62,1117,518,19,49,1,1,0.7 +125,62,1113,518,19,49,1,1,0.75 +126,62,1109,518,19,49,1,1,0.75 +127,62,1106,518,19,49,1,1,0.7 +128,62,1102,518,19,49,1,1,0.7 +129,62,1098,518,20,49,1,1,0.81333 +130,62,1095,518,19,50,1,1,0.80392 +131,62,1091,519,20,49,1,1,0.76667 +132,62,1088,519,19,50,1,1,0.71176 +133,62,1084,519,20,50,1,1,0.81699 +134,62,1080,520,20,49,1,1,0.77619 +135,62,1077,520,20,50,1,1,0.73109 +136,62,1073,520,20,50,1,1,0.81699 +137,62,1070,521,20,50,1,1,0.71429 +138,62,1067,520,19,51,1,1,0.8 +139,62,1064,520,19,51,1,1,0.65673 +140,62,1061,519,19,52,1,1,0.75472 +141,62,1058,519,19,52,1,1,0.75943 +142,62,1055,519,19,53,1,1,0.85833 +143,62,1052,518,18,54,1,1,1 +144,62,1049,518,18,54,1,1,0.90048 +145,62,1046,517,18,55,1,1,0.8562 +146,62,1043,517,18,55,1,1,0.85338 +147,62,1040,517,18,56,1,1,0.85319 +148,62,1036,517,17,56,1,1,1 +149,62,1032,517,17,57,1,1,1 +150,62,1028,517,17,57,1,1,0.94828 +151,62,1024,517,17,58,1,1,1 +152,62,1020,517,17,58,1,1,1 +153,62,1016,517,17,59,1,1,0.94907 +154,62,1012,517,17,59,1,1,0.84444 +155,62,1008,517,17,60,1,1,0.89617 +156,62,1004,517,17,60,1,1,0.84153 +157,62,1000,518,17,60,1,1,0.89071 +158,62,996,518,18,60,1,1,0.84469 +159,62,993,518,18,60,1,1,0.79638 +160,62,989,518,19,60,1,1,0.7582 +161,62,986,518,19,60,1,1,0.80656 +162,62,983,519,19,59,1,1,0.80667 +163,62,979,519,20,59,1,1,0.76984 +164,62,976,519,20,59,1,1,0.81587 +165,62,972,519,21,59,1,1,1 +166,62,969,519,21,59,1,1,1 +167,62,966,520,21,58,1,1,0.81818 +168,62,963,520,21,58,1,1,1 +169,62,961,520,21,58,1,1,1 +170,62,959,520,21,58,1,1,0.77273 +171,62,956,520,21,58,1,1,0.77273 +172,62,954,520,21,58,1,1,1 +173,62,952,520,21,58,1,1,1 +174,62,949,520,21,58,1,1,1 +175,62,947,520,21,58,1,1,1 +176,62,945,520,21,58,1,1,1 +177,62,943,520,21,58,1,1,0.86364 +178,62,941,520,21,58,1,1,0.90909 +179,62,939,520,21,58,1,1,0.81818 +180,62,937,520,21,59,1,1,0.68182 +181,62,935,521,21,58,1,1,0.68182 +182,62,933,521,22,59,1,1,0.86957 +183,62,931,521,22,59,1,1,0.73913 +184,62,929,522,22,58,1,1,0.73913 +185,62,927,522,22,59,1,1,1 +186,62,925,522,22,59,1,1,0.69565 +187,62,924,523,22,59,1,1,0.73913 +188,62,922,523,23,60,1,1,0.79167 +189,62,921,524,24,60,1,1,0.8 +190,62,920,525,25,61,1,1,0.95906 +191,62,917,525,26,61,1,1,0.94504 +192,62,915,525,26,62,1,1,0.93239 +193,62,912,525,28,63,1,1,0.92241 +194,62,910,525,28,63,1,1,0.90571 +195,62,907,525,30,64,1,1,0.89677 +196,62,905,525,30,65,1,1,0.88123 +197,62,903,526,31,65,1,1,0.87689 +198,62,901,528,31,65,1,1,0.86979 +199,62,907,527,26,64,1,1,0.78462 +200,62,911,526,27,64,1,1,0.49121 +26,63,1587,512,23,43,1,1,0.625 +27,63,1584,512,22,49,1,1,0.39652 +28,63,1586,515,22,48,1,1,0.5528 +29,63,1589,518,21,48,1,1,0.49629 +30,63,1589,519,22,49,1,1,0.60435 +31,63,1590,521,22,49,1,1,0.67391 +32,63,1592,525,19,48,1,1,0.87245 +33,63,1592,513,20,48,1,1,0.95724 +34,63,1592,516,21,48,1,1,0.91466 +35,63,1593,514,21,49,1,1,1 +36,63,1593,510,22,49,1,1,0.83478 +37,63,1593,507,23,49,1,1,0.685 +38,63,1594,505,23,49,1,1,0.57333 +39,63,1595,506,23,49,1,1,0.43167 +40,63,1596,507,23,49,1,1,0.335 +41,63,1597,508,23,49,1,1,0.24 +42,63,1598,509,23,49,1,1,0.24 +43,63,1599,511,23,49,1,1,0.22 +44,63,1600,512,23,49,1,1,0.36667 +45,63,1601,513,23,49,1,1,0.47583 +46,63,1602,514,23,49,1,1,0.58 +47,63,1604,516,23,49,1,1,0.67 +48,63,1605,515,23,49,1,1,0.78 +49,63,1606,515,23,49,1,1,0.85667 +58,64,1291,505,19,50,1,1,1 +59,64,1291,504,18,49,1,1,1 +60,64,1291,503,18,48,1,1,1 +61,64,1291,502,18,47,1,1,1 +62,64,1292,499,18,48,1,1,1 +63,64,1293,497,19,48,1,1,1 +64,64,1292,497,18,50,1,1,1 +65,64,1292,498,21,48,1,1,0.95547 +66,64,1292,499,20,48,1,1,0.90865 +67,64,1292,500,20,49,1,1,0.86857 +68,64,1293,502,19,49,1,1,1 +69,64,1291,502,18,51,1,1,1 +70,64,1291,502,16,51,1,1,1 +71,64,1292,503,14,50,1,1,1 +72,64,1290,503,15,50,1,1,1 +73,64,1288,504,16,50,1,1,1 +74,64,1287,505,16,49,1,1,1 +75,64,1285,505,17,50,1,1,1 +76,64,1284,506,17,49,1,1,1 +77,64,1282,507,18,49,1,1,1 +78,64,1281,508,19,49,1,1,1 +79,64,1277,507,19,49,1,1,1 +80,64,1274,507,19,49,1,1,1 +81,64,1271,507,19,49,1,1,1 +82,64,1268,507,19,48,1,1,1 +83,64,1265,507,19,48,1,1,1 +84,64,1262,506,19,49,1,1,1 +85,64,1259,506,19,48,1,1,1 +86,64,1256,506,19,48,1,1,1 +87,64,1253,506,19,48,1,1,1 +88,64,1250,506,19,48,1,1,1 +89,64,1246,507,19,48,1,1,1 +90,64,1243,508,19,48,1,1,1 +91,64,1240,509,19,48,1,1,1 +92,64,1237,510,19,48,1,1,1 +93,64,1233,512,19,48,1,1,1 +94,64,1230,513,19,48,1,1,1 +95,64,1227,514,19,48,1,1,1 +96,64,1224,515,19,48,1,1,1 +97,64,1221,517,19,48,1,1,1 +98,64,1221,519,19,48,1,1,1 +99,64,1217,518,19,48,1,1,1 +100,64,1214,518,19,48,1,1,1 +101,64,1211,518,19,48,1,1,1 +102,64,1208,518,19,48,1,1,1 +103,64,1204,517,20,49,1,1,1 +104,64,1201,517,20,49,1,1,1 +105,64,1198,517,20,49,1,1,1 +106,64,1195,517,20,49,1,1,1 +107,64,1192,517,20,49,1,1,1 +108,64,1189,519,20,50,1,1,1 +109,64,1185,522,22,49,1,1,1 +110,64,1181,521,22,49,1,1,1 +111,64,1177,521,20,48,1,1,1 +112,64,1174,523,20,47,1,1,1 +113,64,1171,522,20,48,1,1,1 +114,64,1169,522,20,49,1,1,1 +115,64,1164,521,18,50,1,1,1 +116,64,1162,523,18,49,1,1,1 +117,64,1158,523,16,49,1,1,1 +118,64,1155,521,18,48,1,1,1 +119,64,1150,521,22,51,1,1,1 +120,64,1146,520,21,52,1,1,1 +121,64,1142,519,22,52,1,1,1 +122,64,1137,518,22,52,1,1,1 +123,64,1134,518,22,52,1,1,1 +124,64,1131,518,22,52,1,1,1 +125,64,1128,518,22,52,1,1,1 +126,64,1124,518,21,52,1,1,1 +127,64,1120,517,20,54,1,1,1 +128,64,1116,518,20,53,1,1,1 +129,64,1115,519,22,53,1,1,1 +130,64,1111,519,22,54,1,1,1 +131,64,1107,520,22,54,1,1,1 +132,64,1102,521,22,54,1,1,1 +133,64,1101,521,25,53,1,1,1 +134,64,1096,523,25,52,1,1,1 +135,64,1092,523,25,52,1,1,1 +136,64,1090,522,25,53,1,1,1 +137,64,1085,521,25,53,1,1,1 +138,64,1083,520,21,51,1,1,0.81818 +139,64,1077,521,25,51,1,1,1 +140,64,1076,520,25,52,1,1,1 +141,64,1073,521,23,51,1,1,1 +142,64,1072,522,22,50,1,1,0.86957 +143,64,1068,521,22,50,1,1,0.86957 +144,64,1066,521,22,52,1,1,1 +145,64,1062,522,23,52,1,1,1 +146,64,1059,521,24,52,1,1,1 +147,64,1056,521,22,54,1,1,1 +148,64,1054,521,22,54,1,1,1 +149,64,1051,521,22,54,1,1,1 +150,64,1045,521,22,55,1,1,1 +151,64,1042,522,22,55,1,1,1 +152,64,1038,523,22,55,1,1,1 +153,64,1033,522,22,55,1,1,1 +154,64,1027,521,22,57,1,1,1 +155,64,1024,521,22,58,1,1,1 +156,64,1019,520,21,59,1,1,1 +157,64,1016,519,21,60,1,1,1 +158,64,1012,519,21,61,1,1,1 +159,64,1008,520,20,58,1,1,0.80952 +160,64,1004,520,20,58,1,1,0.7619 +161,64,1002,520,20,58,1,1,0.80952 +162,64,999,521,20,59,1,1,1 +163,64,995,521,20,59,1,1,1 +164,64,993,521,19,58,1,1,1 +165,64,990,521,18,56,1,1,0.78947 +166,64,987,521,18,56,1,1,0.78947 +167,64,984,520,17,59,1,1,1 +327,65,1469,528,29,82,1,1,0.20964 +328,65,1472,528,29,83,1,1,0.18571 +329,65,1474,527,30,84,1,1,0.15484 +330,65,1474,527,31,84,1,1,0.098529 +331,65,1477,524,31,86,1,1,0.092672 +332,65,1481,521,31,88,1,1,0.12079 +333,65,1485,519,31,89,1,1,0.20972 +334,65,1488,516,31,90,1,1,0.21806 +335,65,1491,513,31,91,1,1,0.2697 +336,65,1494,510,31,92,1,1,0.33367 +337,65,1500,512,29,93,1,1,0.3117 +338,65,1502,510,30,93,1,1,0.30714 +339,65,1505,511,30,93,1,1,0.35827 +340,65,1508,512,31,94,1,1,0.33684 +341,65,1510,515,32,95,1,1,0.59375 +342,65,1513,518,32,96,1,1,0.58763 +343,65,1515,522,33,97,1,1,0.57143 +344,65,1518,525,33,98,1,1,0.57576 +345,65,1521,529,33,99,1,1,0.56 +346,65,1525,531,32,100,1,1,0.56436 +347,65,1525,532,33,101,1,1,0.57843 +348,65,1527,538,32,101,1,1,0.55882 +349,65,1529,537,32,101,1,1,0.57843 +350,65,1532,536,32,101,1,1,0.60784 +351,65,1535,536,32,101,1,1,0.62745 +352,65,1537,538,34,100,1,1,0.63366 +353,65,1539,539,33,100,1,1,0.29121 +354,65,1542,540,32,100,1,1,0.32133 +355,65,1547,544,33,98,1,1,0.36869 +356,65,1548,546,33,97,1,1,0.36735 +357,65,1550,546,34,101,1,1,0.38571 +358,65,1551,548,35,101,1,1,0.37255 +359,65,1553,550,35,101,1,1,0.38889 +360,65,1555,552,35,101,1,1,0.38943 +361,65,1556,555,36,100,1,1,0.37463 +362,65,1558,557,36,100,1,1,0.39122 +363,65,1560,559,36,100,1,1,0.39657 +364,65,1561,562,37,99,1,1,0.38158 +365,65,1563,564,37,99,1,1,0.38632 +366,65,1565,566,37,99,1,1,0.39158 +367,65,1567,569,37,98,1,1,0.38543 +368,65,1569,570,37,98,1,1,0.40564 +369,65,1572,571,37,98,1,1,0.42132 +370,65,1573,571,37,98,1,1,0.41467 +371,65,1574,571,37,98,1,1,0.41414 +372,65,1575,571,37,98,1,1,0.41946 +373,65,1577,571,37,98,1,1,0.44604 +374,65,1576,571,41,104,1,1,0.422 +375,65,1576,569,41,105,1,1,0.41914 +376,65,1576,568,41,109,1,1,0.41905 +377,65,1577,568,36,109,1,1,0.65455 +378,65,1578,567,36,105,1,1,0.42682 +379,65,1579,566,36,102,1,1,0.45893 +380,65,1577,561,40,108,1,1,0.45939 +381,65,1576,558,40,110,1,1,0.45924 +382,65,1573,557,39,111,1,1,0.43214 +383,65,1571,556,40,111,1,1,0.42334 +384,65,1570,556,39,111,1,1,0.43036 +385,65,1567,554,40,113,1,1,0.41913 +386,65,1565,554,38,113,1,1,0.39946 +387,65,1562,551,42,117,1,1,0.44285 +388,65,1560,555,42,119,1,1,0.675 +389,65,1556,555,42,117,1,1,0.41742 +390,65,1552,555,42,116,1,1,0.41224 +391,65,1547,558,41,115,1,1,0.35099 +392,65,1541,557,42,118,1,1,0.68908 +393,65,1536,557,42,120,1,1,0.68595 +394,65,1530,557,41,120,1,1,0.68595 +395,65,1525,557,40,121,1,1,0.68852 +396,65,1517,556,43,120,1,1,0.71074 +397,65,1514,557,40,120,1,1,0.71074 +398,65,1505,556,42,121,1,1,0.72131 +399,65,1496,556,45,119,1,1,0.74167 +400,65,1487,556,44,121,1,1,0.72131 +401,65,1477,556,50,119,1,1,0.73333 +402,65,1468,556,49,121,1,1,0.71311 +403,65,1459,556,48,121,1,1,0.71311 +404,65,1450,556,48,121,1,1,0.71311 +405,65,1441,556,45,121,1,1,0.71311 +406,65,1429,556,48,121,1,1,0.72131 +407,65,1423,556,43,119,1,1,0.74167 +408,65,1410,553,48,123,1,1,0.74194 +409,65,1398,552,47,126,1,1,0.73228 +410,65,1387,552,45,128,1,1,0.72093 +411,65,1377,552,45,129,1,1,0.72308 +412,65,1363,551,45,128,1,1,0.73643 +413,65,1350,551,44,127,1,1,0.74219 +414,65,1338,550,45,130,1,1,0.73282 +415,65,1324,550,44,127,1,1,0.75 +416,65,1311,550,42,124,1,1,0.48 +417,65,1298,550,40,122,1,1,0.47452 +418,65,1280,546,43,127,1,1,0.48757 +419,65,1262,544,48,129,1,1,0.7314 +420,65,1248,543,46,129,1,1,0.75188 +421,65,1233,543,46,129,1,1,0.75139 +422,65,1217,543,46,129,1,1,0.73453 +423,65,1198,543,46,129,1,1,0.66907 +424,65,1180,543,45,129,1,1,0.68294 +425,65,1161,543,46,129,1,1,0.6527 +426,65,1143,543,45,129,1,1,0.80769 +427,65,1125,543,45,130,1,1,0.55792 +428,65,1108,544,43,129,1,1,0.62203 +429,65,1092,545,40,129,1,1,0.77336 +430,65,1068,551,46,130,1,1,0.7031 +431,65,1047,552,46,130,1,1,0.77473 +432,65,1026,553,46,131,1,1,0.70084 +433,65,1005,555,47,131,1,1,0.66193 +434,65,984,556,47,132,1,1,0.69424 +435,65,963,558,48,132,1,1,0.71106 +436,65,942,559,48,133,1,1,0.72677 +437,65,921,561,49,133,1,1,0.74254 +438,65,900,561,49,133,1,1,0.75672 +439,65,879,561,49,134,1,1,0.78785 +440,65,858,561,49,134,1,1,0.81822 +441,65,837,562,50,134,1,1,0.82658 +442,65,812,561,62,134,1,1,0.85714 +443,65,793,561,60,135,1,1,0.91176 +444,65,771,562,57,136,1,1,0.91241 +445,65,749,563,54,138,1,1,0.58143 +446,65,727,564,51,139,1,1,0.17582 +447,65,705,565,49,141,1,1,0.42986 +448,65,678,564,61,141,1,1,0.81554 +449,65,654,562,63,142,1,1,0.97957 +450,65,631,560,64,144,1,1,0.993 +451,65,605,558,60,149,1,1,1 +452,65,582,558,59,150,1,1,1 +453,65,554,558,61,151,1,1,1 +454,65,528,557,60,151,1,1,1 +455,65,499,557,67,154,1,1,1 +456,65,471,557,73,157,1,1,1 +457,65,443,557,80,160,1,1,1 +458,65,410,556,88,161,1,1,0.96588 +459,65,377,566,95,159,1,1,0.91224 +460,65,345,566,92,158,1,1,0.87692 +461,65,313,568,90,159,1,1,0.83283 +462,65,282,570,89,160,1,1,0.86294 +463,65,251,572,89,162,1,1,0.91166 +464,65,215,571,92,162,1,1,0.89056 +465,65,187,571,88,165,1,1,0.85921 +466,65,160,571,84,169,1,1,0.81045 +467,65,129,571,83,169,1,1,0.78445 +468,65,100,571,79,169,1,1,0.73176 +469,65,72,571,74,170,1,1,0.69996 +470,65,38,567,74,175,1,1,0.64409 +471,65,1,566,72,174,1,1,0.62278 +327,66,1520,547,28,76,1,1,0.056426 +328,66,1524,546,29,77,1,1,0.046154 +329,66,1529,545,29,78,1,1,0.037975 +330,66,1537,545,29,80,1,1,0.032922 +331,66,1539,541,30,81,1,1,0.02203 +332,66,1542,538,30,83,1,1,0.015361 +333,66,1546,536,30,85,1,1,0.013503 +334,66,1553,533,30,82,1,1,0.019433 +335,66,1556,528,30,83,1,1,0.043011 +336,66,1560,526,30,84,1,1,0.035294 +337,66,1565,524,30,86,1,1,0.03337 +45,67,1386,506,16,44,1,1,0.58824 +46,67,1387,508,16,45,1,1,0.64706 +47,67,1388,511,17,45,1,1,0.72222 +48,67,1388,511,18,45,1,1,0.79291 +49,67,1389,512,18,45,1,1,0.79405 +50,67,1389,513,19,45,1,1,0.7587 +51,67,1390,514,19,45,1,1,0.76087 +52,67,1389,513,20,45,1,1,0.68116 +53,67,1389,512,20,45,1,1,0.59006 +54,67,1388,511,21,45,1,1,0.53261 +55,67,1388,511,21,45,1,1,0.43478 +56,67,1387,510,21,46,1,1,0.3472 +57,67,1386,509,22,47,1,1,0.2663 +58,67,1386,509,22,47,1,1,0.20833 +59,67,1385,508,22,48,1,1,0.08252 +60,67,1385,508,22,48,1,1,0.08252 +61,67,1384,507,23,49,1,1,0.1425 +62,67,1384,507,23,50,1,1,0.27042 +63,67,1384,498,22,51,1,1,0.31773 +64,67,1385,506,22,51,1,1,0.43813 +65,67,1382,501,23,52,1,1,0.5566 +66,67,1381,502,24,51,1,1,0.58538 +67,67,1380,503,25,51,1,1,0.66642 +68,67,1380,504,25,51,1,1,0.60059 +69,67,1382,508,25,54,1,1,0.55944 +70,67,1381,507,23,48,1,1,0.50255 +71,67,1379,515,26,44,1,1,0.48148 +72,67,1375,507,24,50,1,1,0.71765 +73,67,1372,507,24,50,1,1,0.82745 +74,67,1369,508,24,49,1,1,0.9328 +75,67,1367,508,24,50,1,1,0.96627 +76,67,1364,509,24,49,1,1,1 +77,67,1361,509,24,49,1,1,1 +78,67,1359,510,24,49,1,1,1 +79,67,1356,509,24,49,1,1,1 +80,67,1353,509,24,49,1,1,1 +81,67,1350,508,24,49,1,1,1 +82,67,1348,508,24,49,1,1,1 +83,67,1345,508,23,50,1,1,1 +84,67,1342,509,23,50,1,1,1 +85,67,1339,510,23,50,1,1,1 +86,67,1336,511,22,50,1,1,1 +87,67,1333,512,22,50,1,1,1 +88,67,1330,512,22,51,1,1,1 +89,67,1327,513,21,51,1,1,1 +90,67,1324,514,21,51,1,1,1 +91,67,1321,515,21,51,1,1,1 +92,67,1318,516,21,51,1,1,1 +93,67,1314,516,22,51,1,1,1 +94,67,1311,517,22,51,1,1,1 +95,67,1306,518,22,51,1,1,1 +96,67,1301,520,22,51,1,1,1 +97,67,1297,520,22,51,1,1,1 +98,67,1292,521,23,51,1,1,0.87019 +99,67,1288,523,23,51,1,1,0.90865 +100,67,1285,522,22,51,1,1,0.8888 +101,67,1280,522,23,51,1,1,0.88221 +102,67,1277,522,23,51,1,1,0.88221 +103,67,1274,522,22,51,1,1,0.83946 +104,67,1269,521,22,51,1,1,0.699 +105,67,1265,523,21,51,1,1,0.68357 +106,67,1261,522,21,48,1,1,0.58442 +107,67,1257,521,21,45,1,1,0.48814 +108,67,1253,519,21,51,1,1,0.40385 +109,67,1252,521,18,48,1,1,0.48443 +110,67,1243,522,22,53,1,1,0.37842 +111,67,1243,522,22,53,1,1,0.54106 +330,68,1498,543,35,86,1,1,0.1143 +331,68,1485,536,35,85,1,1,0.28747 +332,68,1473,530,35,83,1,1,0.066799 +333,68,1461,524,34,81,1,1,0.21742 +334,68,1449,518,34,79,1,1,0.48929 +335,68,1451,517,34,79,1,1,0.51214 +336,68,1454,516,34,80,1,1,0.42222 +337,68,1457,516,34,80,1,1,0.4963 +338,68,1459,515,34,81,1,1,0.51568 +339,68,1462,515,34,81,1,1,0.2216 +340,68,1465,515,34,81,1,1,0.25819 +341,68,1467,517,34,82,1,1,0.6 +342,68,1469,520,34,82,1,1,0.57935 +343,68,1471,523,35,82,1,1,0.5656 +344,68,1474,525,34,83,1,1,0.31156 +345,68,1476,528,35,83,1,1,0.32011 +346,68,1478,531,35,83,1,1,0.27216 +347,68,1481,534,35,84,1,1,0.28922 +348,68,1483,536,35,84,1,1,0.38529 +349,68,1485,538,35,85,1,1,0.38953 +350,68,1487,540,35,85,1,1,0.45704 +351,68,1490,542,35,86,1,1,0.41475 +352,68,1494,544,37,89,1,1,0.46754 +353,68,1495,545,39,89,1,1,0.50278 +354,68,1497,547,41,89,1,1,0.42937 +355,68,1500,548,40,89,1,1,0.47696 +356,68,1504,549,32,88,1,1,0.55839 +357,68,1505,551,35,88,1,1,0.54213 +358,68,1506,553,38,89,1,1,0.21652 +359,68,1508,554,37,89,1,1,0.25029 +360,68,1509,557,37,88,1,1,0.24246 +361,68,1511,559,37,88,1,1,0.26079 +362,68,1514,561,37,89,1,1,0.23977 +363,68,1514,560,40,90,1,1,0.27875 +364,68,1516,566,40,90,1,1,0.23479 +365,68,1518,568,36,91,1,1,0.27673 +366,68,1520,570,32,92,1,1,0.3089 +367,68,1522,572,32,93,1,1,0.32592 +368,68,1524,574,32,95,1,1,0.32955 +369,68,1523,574,35,92,1,1,0.33094 +370,68,1523,575,38,89,1,1,0.30997 +371,68,1525,575,35,89,1,1,0.3321 +372,68,1527,575,40,88,1,1,0.28446 +373,68,1531,576,36,95,1,1,0.2469 +374,68,1530,574,37,103,1,1,0.4957 +375,68,1529,572,32,100,1,1,0.22142 +376,68,1528,570,32,98,1,1,0.20324 +377,68,1528,569,32,96,1,1,0.17526 +378,68,1528,568,32,94,1,1,0.14545 +379,68,1528,567,33,93,1,1,0.17804 +380,68,1527,565,36,93,1,1,0.18861 +381,68,1526,563,35,93,1,1,0.24645 +382,68,1526,562,33,93,1,1,0.25532 +383,68,1526,561,32,93,1,1,0.25919 +384,68,1522,560,35,94,1,1,0.20936 +385,68,1518,560,37,94,1,1,0.21828 +386,68,1515,560,38,95,1,1,0.23184 +387,68,1512,560,39,96,1,1,0.22706 +388,68,1508,560,41,97,1,1,0.22157 +389,68,1505,560,42,98,1,1,0.20085 +390,68,1502,560,44,99,1,1,0.21311 +391,68,1503,564,42,101,1,1,0.20565 +392,68,1498,562,41,102,1,1,0.19163 +393,68,1493,561,41,102,1,1,0.18909 +394,68,1484,562,42,101,1,1,0.15595 +395,68,1476,561,42,101,1,1,0.13087 +396,68,1469,561,42,101,1,1,0.11195 +397,68,1462,561,42,101,1,1,0.094847 +398,68,1455,560,42,102,1,1,0.073154 +399,68,1448,560,41,101,1,1,0.12325 +400,68,1441,560,41,101,1,1,0.17624 +401,68,1434,559,41,102,1,1,0.21567 +402,68,1427,559,41,102,1,1,0.21197 +403,68,1420,559,41,102,1,1,0.19233 +404,68,1408,558,42,103,1,1,0.1809 +405,68,1397,558,42,104,1,1,0.16257 +406,68,1385,558,44,105,1,1,0.15556 +407,68,1374,557,44,107,1,1,0.1642 +408,68,1362,557,45,108,1,1,0.17551 +409,68,1351,557,46,109,1,1,0.16712 +410,68,1340,558,47,110,1,1,0.34178 +411,68,1328,558,46,112,1,1,0.34664 +412,68,1317,558,45,114,1,1,0.37505 +413,68,1306,556,45,117,1,1,0.39683 +414,68,1292,555,45,118,1,1,0.41505 +415,68,1278,554,45,119,1,1,0.15815 +416,68,1264,553,45,120,1,1,0.14265 +417,68,1250,552,45,121,1,1,0.13168 +418,68,1235,551,45,122,1,1,0.087133 +419,68,1220,550,45,123,1,1,0.40445 +420,68,1205,549,45,124,1,1,0.408 +421,68,1190,548,45,125,1,1,0.42892 +422,68,1175,547,45,126,1,1,0.47518 +423,68,1160,547,45,127,1,1,0.55299 +424,68,1141,547,45,127,1,1,0.55299 +425,68,1124,547,45,127,1,1,0.58764 +426,68,1104,544,45,127,1,1,0.043139 +427,68,1086,547,45,127,1,1,0.59918 +428,68,1069,548,45,127,1,1,0.032269 +429,68,1049,551,45,127,1,1,0.023438 +430,68,1028,555,45,127,1,1,0.042799 +370,69,1497,582,25,94,1,1,0.47935 +371,69,1497,583,25,94,1,1,0.45547 +372,69,1498,584,25,94,1,1,0.58947 +373,69,1497,582,25,94,1,1,0.51984 +374,69,1497,580,25,94,1,1,0.26883 +375,69,1496,579,25,94,1,1,0.32267 +376,69,1496,577,25,94,1,1,0.28704 +377,69,1496,576,25,94,1,1,0.31741 +378,69,1499,575,26,94,1,1,0.34932 +379,69,1497,574,25,94,1,1,0.36842 +380,69,1495,573,25,94,1,1,0.39474 +381,69,1493,571,25,94,1,1,0.40688 +382,69,1492,570,24,94,1,1,0.41684 +383,69,1490,569,24,97,1,1,0.42449 +384,69,1488,567,24,99,1,1,0.396 +385,69,1485,566,25,100,1,1,0.40823 +386,69,1483,566,25,101,1,1,0.4359 +387,69,1481,566,25,102,1,1,0.6699 +388,69,1478,565,25,102,1,1,0.45071 +389,69,1475,565,25,102,1,1,0.4242 +390,69,1473,565,25,102,1,1,0.3764 +391,69,1467,567,25,103,1,1,0.3676 +392,69,1463,567,25,102,1,1,0.69903 +393,69,1456,566,27,104,1,1,0.70476 +394,69,1450,566,28,106,1,1,0.69159 +395,69,1443,565,28,107,1,1,0.7037 +396,69,1437,565,27,108,1,1,0.70642 +397,69,1431,565,27,108,1,1,0.7156 +398,69,1425,565,26,109,1,1,0.42559 +399,69,1419,565,25,109,1,1,0.72727 +400,69,1413,565,25,110,1,1,0.71171 +401,69,1403,564,25,110,1,1,0.72072 +402,69,1393,564,25,110,1,1,0.71171 +403,69,1384,564,25,110,1,1,0.71171 +404,69,1376,563,25,110,1,1,0.72072 +405,69,1365,562,27,111,1,1,0.72321 +406,69,1355,562,28,111,1,1,0.28325 +407,69,1347,563,26,113,1,1,0.7193 +408,69,1335,562,25,115,1,1,0.71552 +409,69,1323,562,25,116,1,1,0.30013 +410,69,1312,562,24,118,1,1,0.69748 +411,69,1297,561,27,118,1,1,0.33163 +412,69,1283,560,29,118,1,1,0.31317 +413,69,1272,559,28,119,1,1,0.25546 +414,69,1258,558,26,119,1,1,0.27685 +415,69,1244,557,24,119,1,1,0.30667 +416,69,1231,557,22,118,1,1,0.29777 +417,69,1216,556,22,119,1,1,0.37138 +418,69,1201,555,23,120,1,1,0.42321 +419,69,1186,554,23,121,1,1,0.38115 +420,69,1171,554,24,122,1,1,0.7561 +421,69,1154,553,24,122,1,1,0.3974 +422,69,1134,553,25,122,1,1,0.76423 +423,69,1115,554,26,122,1,1,0.47606 +424,69,1095,555,27,121,1,1,0.51171 +425,69,1076,556,28,121,1,1,0.51441 +426,69,1056,552,29,120,1,1,0.55537 +427,69,1036,554,30,120,1,1,0.58251 +428,69,1016,556,31,120,1,1,0.60692 +429,69,996,559,32,119,1,1,0.5697 +430,69,976,561,33,119,1,1,0.60539 +431,69,957,564,33,119,1,1,0.54118 +432,69,934,565,34,119,1,1,0.52571 +433,69,911,566,35,120,1,1,0.53444 +434,69,888,567,36,121,1,1,0.54276 +435,69,866,569,36,121,1,1,0.60789 +436,69,843,568,41,122,1,1,0.60608 +437,69,821,569,40,122,1,1,0.58656 +438,69,799,570,39,122,1,1,0.56524 +439,69,777,571,38,122,1,1,0.61288 +440,69,755,572,38,123,1,1,0.59181 +441,69,733,572,37,126,1,1,0.58185 +442,69,710,574,37,125,1,1,0.49624 +443,69,686,574,40,126,1,1,0.42635 +444,69,663,574,36,126,1,1,0.40881 +445,69,636,575,37,129,1,1,0.41903 +446,69,609,576,38,131,1,1,0.42813 +447,69,586,577,41,126,1,1,0.37608 +448,69,559,578,42,130,1,1,0.39127 +449,69,532,573,41,138,1,1,0.37718 +358,70,1490,555,32,87,1,1,0.24656 +359,70,1491,557,32,87,1,1,0.69318 +360,70,1493,559,32,88,1,1,0.66054 +361,70,1495,561,31,89,1,1,0.68889 +362,70,1496,563,32,90,1,1,0.68132 +363,70,1498,566,31,90,1,1,0.68132 +364,70,1500,568,31,91,1,1,0.67391 +365,70,1501,570,31,92,1,1,0.66667 +366,70,1503,572,31,93,1,1,0.67021 +367,70,1505,574,30,94,1,1,0.66316 +368,70,1507,577,30,94,1,1,0.66316 +369,70,1507,576,31,95,1,1,0.66667 +370,70,1508,576,32,96,1,1,0.388 +371,70,1508,576,34,96,1,1,0.40795 +372,70,1509,575,34,98,1,1,0.41414 +373,70,1510,575,35,98,1,1,0.44501 +374,70,1510,575,37,99,1,1,0.13684 +375,70,1511,574,37,100,1,1,0.65347 +376,70,1511,574,39,101,1,1,0.64706 +377,70,1512,574,40,101,1,1,0.64706 +378,70,1513,574,41,102,1,1,0.63107 +379,70,1511,572,41,102,1,1,0.65049 +380,70,1510,570,41,102,1,1,0.66019 +381,70,1508,569,41,103,1,1,0.66346 +382,70,1507,568,40,104,1,1,0.64762 +383,70,1506,567,40,105,1,1,0.63208 +384,70,1503,564,42,105,1,1,0.65094 +385,70,1501,564,42,105,1,1,0.65094 +386,70,1500,564,41,105,1,1,0.66038 +387,70,1497,561,40,105,1,1,0.53935 +388,70,1495,564,40,106,1,1,0.6729 +389,70,1491,564,42,105,1,1,0.67925 +390,70,1487,564,42,105,1,1,0.68868 +391,70,1481,565,45,105,1,1,0.51395 +392,70,1478,564,42,103,1,1,0.54405 +393,70,1471,564,43,104,1,1,0.51558 +394,70,1465,564,43,105,1,1,0.49485 +395,70,1459,564,44,106,1,1,0.51443 +396,70,1453,564,44,107,1,1,0.5321 +397,70,1447,564,44,108,1,1,0.53394 +398,70,1441,565,45,109,1,1,0.54644 +399,70,1431,564,45,109,1,1,0.51502 +400,70,1421,564,45,109,1,1,0.44625 +401,70,1412,563,45,109,1,1,0.46759 +402,70,1402,563,45,109,1,1,0.46186 +403,70,1393,563,45,109,1,1,0.46186 +404,70,1387,563,42,109,1,1,0.47357 +405,70,1376,563,44,109,1,1,0.45253 +406,70,1366,563,44,110,1,1,0.43784 +407,70,1356,563,44,111,1,1,0.43929 +408,70,1346,563,44,113,1,1,0.47953 +6,71,1461,503,20,42,1,1,0.50388 +7,71,1461,498,22,43,1,1,0.43083 +8,71,1461,506,22,42,1,1,0.48433 +9,71,1462,507,24,43,1,1,0.61818 +10,71,1461,519,25,42,1,1,0.73166 +11,71,1460,507,28,45,1,1,0.74513 +12,71,1461,511,26,44,1,1,0.77613 +13,71,1465,506,25,44,1,1,0.7812 +14,71,1465,503,24,44,1,1,0.50489 +15,71,1467,504,23,44,1,1,0.33333 +16,71,1469,505,22,44,1,1,0.44444 +17,71,1470,503,21,44,1,1,0.46667 +18,71,1472,503,20,44,1,1,0.46667 +19,71,1473,504,18,41,1,1,0.40476 +20,71,1474,502,18,42,1,1,0.38556 +21,71,1473,502,18,43,1,1,0.26316 +84,72,1417,508,24,54,1,1,0.28073 +85,72,1413,511,18,53,1,1,0.2193 +86,72,1410,511,19,53,1,1,0.29537 +87,72,1408,511,19,53,1,1,0.38611 +88,72,1406,512,19,53,1,1,0.36667 +89,72,1404,512,19,53,1,1,0.41111 +90,72,1400,514,19,53,1,1,0.47778 +91,72,1396,517,19,53,1,1,0.48611 +92,72,1395,517,18,55,1,1,0.59586 +93,72,1392,520,19,55,1,1,0.62232 +94,72,1387,520,20,54,1,1,0.64589 +95,72,1383,520,21,54,1,1,0.64876 +96,72,1379,520,21,54,1,1,0.62975 +97,72,1375,520,22,54,1,1,0.46877 +98,72,1371,522,22,54,1,1,0.5083 +99,72,1367,522,22,53,1,1,0.27214 +100,72,1363,522,22,53,1,1,0.42351 +101,72,1359,522,22,53,1,1,0.35185 +102,72,1355,522,22,53,1,1,0.36876 +103,72,1351,522,22,53,1,1,0.33414 +104,72,1347,522,22,53,1,1,0.28261 +105,72,1343,522,22,53,1,1,0.21659 +106,72,1339,522,22,53,1,1,0.18357 +107,72,1335,522,22,53,1,1,0.17391 +108,72,1331,522,23,53,1,1,0.17593 +109,72,1327,522,23,53,1,1,0.16667 +110,72,1323,522,23,53,1,1,0.16667 +111,72,1319,522,23,53,1,1,0.16667 +112,72,1315,522,23,53,1,1,0.16667 +113,72,1311,522,23,53,1,1,0.16667 +114,72,1307,522,23,53,1,1,0.16667 +115,72,1303,522,23,53,1,1,0.16667 +116,72,1299,522,23,53,1,1,0.15586 +117,72,1295,522,23,53,1,1,0.16358 +118,72,1291,523,24,52,1,1,0.2317 +119,72,1286,523,24,52,1,1,0.18415 +120,72,1282,523,23,53,1,1,0.25694 +121,72,1279,522,23,53,1,1,0.44136 +122,72,1276,522,23,52,1,1,0.51808 +123,72,1274,522,22,52,1,1,0.67022 +124,72,1269,522,22,52,1,1,0.80312 +125,72,1265,523,22,52,1,1,0.79573 +126,72,1261,524,22,52,1,1,0.72847 +127,72,1257,523,21,53,1,1,0.78956 +128,72,1253,523,21,54,1,1,0.86364 +129,72,1248,522,21,54,1,1,0.81818 +130,72,1244,522,21,54,1,1,0.81818 +131,72,1240,522,21,54,1,1,0.81818 +132,72,1236,521,21,55,1,1,0.81818 +133,72,1232,521,21,55,1,1,0.81818 +134,72,1228,521,21,55,1,1,0.81818 +135,72,1224,520,21,56,1,1,0.82137 +136,72,1220,520,21,56,1,1,0.86603 +137,72,1216,520,21,56,1,1,0.86603 +138,72,1212,519,21,57,1,1,0.86834 +139,72,1207,519,22,56,1,1,0.83219 +140,72,1203,519,22,56,1,1,0.83219 +141,72,1199,518,22,57,1,1,0.55172 +142,72,1195,518,22,57,1,1,0.55172 +143,72,1191,518,22,57,1,1,0.51124 +144,72,1187,517,21,58,1,1,0.53929 +145,72,1183,517,21,58,1,1,0.53929 +146,72,1179,517,21,58,1,1,0.58475 +147,72,1175,516,21,59,1,1,0.54545 +148,72,1171,516,21,59,1,1,0.50455 +149,72,1166,516,22,58,1,1,0.48637 +150,72,1162,515,22,59,1,1,0.45652 +151,72,1158,515,22,59,1,1,0.4942 +152,72,1154,515,22,59,1,1,0.4558 +153,72,1150,514,22,60,1,1,0.46472 +154,72,1146,514,22,60,1,1,0.35139 +155,72,1142,514,22,60,1,1,0.23806 +156,72,1138,513,22,61,1,1,0.92146 +157,72,1134,513,22,61,1,1,0.96073 +158,72,1130,513,22,61,1,1,1 +159,72,1126,513,22,61,1,1,1 +160,72,1117,516,25,59,1,1,0.85385 +161,72,1116,516,31,61,1,1,1 +162,72,1109,516,30,63,1,1,0.93851 +163,72,1103,521,30,57,1,1,0.90323 +164,72,1105,517,25,60,1,1,1 +165,72,1093,518,29,62,1,1,0.8709 +166,72,1087,521,32,58,1,1,0.78788 +167,72,1085,518,32,59,1,1,0.82424 +168,72,1082,519,30,56,1,1,0.80985 +169,72,1083,518,23,60,1,1,0.9194 +170,72,1079,518,23,60,1,1,0.8791 +171,72,1076,518,23,60,1,1,0.8791 +172,72,1073,518,23,60,1,1,0.8791 +173,72,1069,518,23,61,1,1,0.83871 +174,72,1066,518,23,61,1,1,0.83871 +175,72,1063,518,23,61,1,1,0.83871 +176,72,1059,518,23,62,1,1,0.79828 +177,72,1056,518,23,62,1,1,0.79828 +178,72,1053,518,23,62,1,1,0.75794 +179,72,1050,519,23,62,1,1,0.75397 +180,72,1048,519,23,62,1,1,0.75794 +181,72,1046,519,23,62,1,1,0.79828 +182,72,1045,520,22,62,1,1,0.87164 +183,72,1042,520,22,62,1,1,0.82885 +184,72,1039,520,22,62,1,1,0.82885 +185,72,1036,520,22,62,1,1,0.78951 +186,72,1033,520,23,62,1,1,0.79828 +187,72,1030,521,23,61,1,1,0.79503 +188,72,1028,521,23,61,1,1,0.83602 +189,72,1025,522,23,61,1,1,0.83333 +190,72,1022,522,24,61,1,1,0.84 +191,72,1020,522,23,61,1,1,0.875 +192,72,1017,523,24,60,1,1,0.88 +193,72,1014,523,24,60,1,1,0.88 +194,72,1012,524,24,60,1,1,0.92 +195,72,1009,524,25,60,1,1,0.88462 +196,72,1007,524,26,60,1,1,0.88889 +197,72,1005,524,26,60,1,1,0.85185 +198,72,1003,524,27,61,1,1,0.85714 +199,72,1001,525,27,60,1,1,0.82143 +200,72,998,525,29,60,1,1,0.8 +201,72,996,525,29,61,1,1,0.76667 +202,72,994,525,30,61,1,1,0.77419 +203,72,992,525,30,61,1,1,0.7461 +204,72,990,526,31,61,1,1,0.75 +205,72,988,526,31,62,1,1,0.72321 +206,72,987,526,30,62,1,1,0.74603 +207,72,986,527,30,62,1,1,0.74603 +208,72,986,528,28,62,1,1,0.75862 +209,72,985,529,28,62,1,1,0.75862 +210,72,984,529,27,63,1,1,0.75391 +211,72,984,530,26,63,1,1,0.77778 +212,72,983,531,25,63,1,1,0.76923 +213,72,982,532,25,63,1,1,0.76923 +214,72,982,533,24,63,1,1,0.8 +215,72,981,532,25,63,1,1,0.8107 +216,72,981,532,25,63,1,1,0.8107 +217,72,981,532,25,63,1,1,0.8107 +218,72,981,531,25,64,1,1,0.81361 +219,72,981,531,25,64,1,1,0.81361 +220,72,981,531,25,63,1,1,0.8137 +221,72,981,530,25,64,1,1,0.81657 +222,72,981,530,25,64,1,1,0.81657 +223,72,981,530,25,64,1,1,0.81657 +224,72,981,530,25,64,1,1,0.81657 +225,72,981,530,25,64,1,1,0.81657 +226,72,982,530,24,64,1,1,0.84738 +227,72,982,530,25,64,1,1,0.81657 +228,72,983,530,24,64,1,1,0.80923 +229,72,983,530,25,64,1,1,0.77988 +230,72,984,530,24,64,1,1,0.71569 +231,72,984,530,24,64,1,1,0.75754 +232,72,985,530,24,64,1,1,0.61231 +233,72,985,530,24,64,1,1,0.66831 +234,72,986,530,24,65,1,1,0.57818 +235,72,988,527,22,64,1,1,0.81003 +236,72,989,526,22,65,1,1,0.83333 +237,72,990,526,23,65,1,1,0.78472 +238,72,992,526,22,65,1,1,0.80303 +239,72,993,525,23,66,1,1,0.72575 +240,72,995,525,22,67,1,1,0.69821 +241,72,996,525,23,67,1,1,0.625 +242,72,998,524,22,68,1,1,0.55703 +243,72,999,524,23,68,1,1,0.43116 +244,72,1001,524,23,69,1,1,0.33393 +245,72,1005,520,24,71,1,1,0.32722 +76,73,1424,516,23,47,1,1,0.27865 +77,73,1420,515,23,48,1,1,0.3682 +78,73,1417,515,23,49,1,1,0.34667 +79,73,1413,515,23,49,1,1,0.45167 +80,73,1410,514,23,51,1,1,0.46955 +81,73,1407,514,23,51,1,1,0.52564 +82,73,1403,514,23,52,1,1,0.42138 +83,73,1400,513,23,53,1,1,0.44753 +84,73,1396,513,23,54,1,1,0.3553 +85,73,1393,513,23,54,1,1,0.32727 +86,73,1390,513,23,55,1,1,0.28571 +87,73,1389,511,23,55,1,1,0.34821 +88,73,1385,512,23,55,1,1,0.30655 +89,73,1382,514,23,55,1,1,0.2619 +90,73,1379,516,23,55,1,1,0.23661 +91,73,1376,518,22,54,1,1,0.20632 +92,73,1372,519,23,55,1,1,0.1875 +93,73,1369,521,23,55,1,1,0.15923 +94,73,1366,523,22,54,1,1,0.1083 +95,73,1363,525,22,54,1,1,0.072727 +96,73,1360,527,22,54,1,1,0.036364 +97,73,1356,527,22,54,1,1,0.054545 +98,73,1352,527,23,54,1,1,0.054545 +99,73,1349,527,23,55,1,1,0.071429 +100,73,1345,528,24,54,1,1,0.14691 +101,73,1342,528,24,55,1,1,0.3 +102,73,1338,528,24,55,1,1,0.32143 +103,73,1334,529,25,54,1,1,0.37063 +104,73,1331,529,25,55,1,1,0.40453 +105,73,1327,529,26,55,1,1,0.46032 +106,73,1324,530,26,55,1,1,0.48413 +107,73,1320,529,26,55,1,1,0.56151 +108,73,1317,529,25,54,1,1,0.61538 +109,73,1313,528,25,55,1,1,0.69093 +110,73,1310,528,24,54,1,1,0.67927 +111,73,1306,527,24,55,1,1,0.79429 +112,73,1303,527,23,54,1,1,0.82197 +113,73,1299,526,23,55,1,1,0.76042 +114,73,1296,526,22,54,1,1,0.78656 +115,73,1293,526,21,54,1,1,0.85124 +116,73,1288,525,21,54,1,1,0.96281 +117,73,1283,525,21,54,1,1,1 +118,73,1279,525,20,54,1,1,1 +119,73,1274,524,21,55,1,1,1 +120,73,1270,524,20,55,1,1,1 +121,73,1265,524,20,54,1,1,1 +122,73,1260,523,21,55,1,1,1 +123,73,1256,523,20,55,1,1,1 +124,73,1251,523,20,55,1,1,1 +125,73,1247,523,20,55,1,1,1 +126,73,1242,522,21,56,1,1,1 +127,73,1238,522,21,56,1,1,1 +128,73,1234,522,21,56,1,1,1 +129,73,1230,522,21,56,1,1,1 +130,73,1226,522,21,57,1,1,1 +131,73,1221,521,22,58,1,1,1 +132,73,1217,521,22,58,1,1,1 +133,73,1213,521,22,58,1,1,1 +134,73,1209,521,22,58,1,1,1 +135,73,1205,521,22,59,1,1,1 +136,73,1200,521,22,59,1,1,1 +137,73,1196,521,22,59,1,1,1 +138,73,1192,521,22,59,1,1,1 +139,73,1188,521,22,59,1,1,1 +140,73,1184,521,22,59,1,1,1 +141,73,1180,521,22,59,1,1,1 +142,73,1176,521,22,59,1,1,1 +143,73,1172,521,22,59,1,1,1 +144,73,1168,521,22,59,1,1,1 +145,73,1164,521,22,60,1,1,1 +146,73,1159,520,22,60,1,1,1 +147,73,1155,520,22,60,1,1,1 +148,73,1151,520,22,60,1,1,1 +149,73,1147,520,22,60,1,1,1 +150,73,1143,520,22,60,1,1,1 +151,73,1138,519,22,61,1,1,1 +152,73,1134,519,22,61,1,1,1 +153,73,1130,519,22,61,1,1,1 +154,73,1126,519,22,61,1,1,1 +155,73,1122,519,22,61,1,1,1 +156,73,1117,519,22,61,1,1,1 +157,73,1112,519,22,61,1,1,1 +158,73,1107,519,22,61,1,1,1 +159,73,1102,519,22,61,1,1,1 +160,73,1098,519,22,62,1,1,1 +161,73,1093,519,22,62,1,1,1 +162,73,1088,519,22,62,1,1,1 +163,73,1083,519,22,62,1,1,1 +164,73,1078,519,22,62,1,1,1 +165,73,1074,520,22,62,1,1,1 +166,73,1071,520,22,62,1,1,1 +167,73,1068,520,22,62,1,1,1 +168,73,1065,520,22,62,1,1,1 +169,73,1062,520,22,62,1,1,1 +170,73,1059,520,22,62,1,1,1 +171,73,1056,520,22,62,1,1,1 +172,73,1053,520,22,62,1,1,1 +173,73,1050,520,22,62,1,1,1 +174,73,1047,520,22,62,1,1,1 +175,73,1044,520,22,63,1,1,1 +176,73,1041,520,22,63,1,1,1 +177,73,1039,520,21,63,1,1,1 +178,73,1036,520,22,63,1,1,1 +179,73,1034,520,21,63,1,1,1 +180,73,1031,521,22,63,1,1,1 +181,73,1029,521,21,63,1,1,1 +182,73,1026,521,21,63,1,1,1 +183,73,1024,521,21,63,1,1,1 +184,73,1021,521,21,63,1,1,1 +185,73,1019,522,21,63,1,1,1 +186,73,1016,522,21,63,1,1,1 +187,73,1013,522,21,63,1,1,1 +188,73,1010,522,21,63,1,1,1 +189,73,1007,522,21,64,1,1,1 +190,73,1004,522,21,64,1,1,1 +191,73,1001,522,21,64,1,1,1 +192,73,998,522,21,65,1,1,1 +193,73,995,522,21,65,1,1,0.9814 +194,73,992,522,21,65,1,1,0.96143 +195,73,989,523,22,65,1,1,0.94466 +196,73,987,523,22,65,1,1,0.94269 +197,73,986,523,22,65,1,1,0.96179 +198,73,984,524,22,65,1,1,0.96179 +199,73,983,524,22,65,1,1,0.98024 +200,73,981,525,22,65,1,1,0.96047 +201,73,980,525,22,65,1,1,0.97958 +202,73,978,525,22,65,1,1,0.97892 +203,73,977,526,22,65,1,1,1 +204,73,975,526,22,65,1,1,1 +205,73,974,527,22,65,1,1,1 +206,73,972,527,22,65,1,1,1 +207,73,971,528,22,65,1,1,1 +208,73,970,528,22,66,1,1,1 +209,73,969,529,22,65,1,1,1 +210,73,968,530,22,65,1,1,1 +211,73,967,530,22,66,1,1,0.97729 +212,73,966,531,22,65,1,1,0.95389 +213,73,965,531,22,66,1,1,0.92992 +214,73,964,532,22,66,1,1,0.90655 +215,73,963,533,22,66,1,1,0.88319 +216,73,963,533,22,66,1,1,0.87995 +217,73,963,533,22,66,1,1,0.8767 +218,73,963,533,22,66,1,1,0.87346 +219,73,963,533,22,66,1,1,0.87346 +220,73,963,533,22,66,1,1,0.87021 +221,73,963,533,22,66,1,1,0.84426 +222,73,963,533,22,66,1,1,0.84036 +223,73,963,533,22,66,1,1,0.84036 +224,73,963,533,22,66,1,1,0.80921 +225,73,963,533,22,67,1,1,0.80754 +226,73,963,533,22,67,1,1,0.80754 +227,73,964,533,22,67,1,1,0.79284 +228,73,965,533,22,68,1,1,0.75425 +229,73,966,533,22,68,1,1,0.69754 +230,73,967,533,22,68,1,1,0.62319 +231,73,964,533,22,69,1,1,0.46522 +232,73,968,531,21,69,1,1,0.47922 +233,73,965,532,22,70,1,1,0.30374 +234,73,970,530,20,71,1,1,0.31548 +312,74,1249,521,22,58,1,1,0.87841 +313,74,1253,521,22,58,1,1,0.83493 +314,74,1257,521,22,58,1,1,0.81135 +315,74,1261,521,22,58,1,1,0.81135 +316,74,1265,521,22,58,1,1,0.80545 +317,74,1269,521,22,58,1,1,0.82461 +318,74,1273,521,22,58,1,1,0.87104 +319,74,1277,521,22,58,1,1,0.76787 +320,74,1281,521,22,58,1,1,0.79366 +321,74,1285,521,22,58,1,1,0.6647 +322,74,1289,521,23,59,1,1,0.78125 +323,74,1291,519,23,59,1,1,0.8 +324,74,1294,518,23,58,1,1,0.82203 +325,74,1297,516,23,59,1,1,0.8 +326,74,1299,515,23,58,1,1,0.83192 +327,74,1302,514,23,58,1,1,0.83686 +328,74,1305,512,23,58,1,1,0.86864 +329,74,1307,511,23,57,1,1,0.89224 +330,74,1310,509,23,58,1,1,0.8976 +331,74,1313,508,23,57,1,1,0.875 +332,74,1316,507,23,57,1,1,0.84411 +333,74,1318,506,23,57,1,1,0.83405 +334,74,1320,506,23,56,1,1,0.81579 +335,74,1322,505,23,57,1,1,0.83621 +336,74,1324,505,23,56,1,1,0.86111 +337,74,1326,505,23,56,1,1,0.77193 +338,74,1328,504,23,56,1,1,0.71491 +339,74,1330,504,23,55,1,1,0.70982 +340,74,1332,503,23,56,1,1,0.71491 +341,74,1334,503,23,55,1,1,0.69717 +342,74,1336,503,23,55,1,1,0.71354 +343,74,1336,504,24,56,1,1,0.72982 +344,74,1337,506,24,56,1,1,0.73754 +345,74,1338,508,25,56,1,1,0.7247 +346,74,1338,510,26,56,1,1,0.74269 +347,74,1339,512,27,56,1,1,0.73935 +348,74,1340,514,27,56,1,1,0.7594 +349,74,1340,516,29,56,1,1,0.76433 +350,74,1341,518,29,56,1,1,0.77193 +351,74,1342,520,30,57,1,1,0.75862 +352,74,1352,520,22,56,1,1,0.60259 +353,74,1348,522,28,57,1,1,0.75922 +354,74,1351,523,26,57,1,1,0.65006 +355,74,1353,524,24,57,1,1,0.66897 +356,74,1355,525,22,57,1,1,0.65967 +357,74,1358,528,21,57,1,1,0.6826 +358,74,1358,527,20,56,1,1,0.67251 +359,74,1358,528,20,55,1,1,0.67772 +360,74,1359,529,19,54,1,1,0.72364 +361,74,1360,531,19,53,1,1,0.69167 +362,74,1363,538,18,54,1,1,0.56555 +363,74,1359,536,22,53,1,1,0.69082 +364,74,1360,538,22,54,1,1,0.66245 +365,74,1361,541,22,55,1,1,0.62112 +366,74,1361,542,22,56,1,1,0.63844 +367,74,1361,543,22,57,1,1,0.64093 +368,74,1362,545,21,57,1,1,0.64107 +369,74,1362,546,21,58,1,1,0.68413 +370,74,1362,547,21,59,1,1,0.68636 +371,74,1363,549,20,59,1,1,0.69048 +372,74,1363,549,20,59,1,1,0.71746 +373,74,1362,550,20,59,1,1,0.79048 +374,74,1363,550,20,59,1,1,0.71429 +375,74,1361,548,20,59,1,1,0.7381 +376,74,1360,546,20,59,1,1,0.74206 +377,74,1358,544,20,59,1,1,0.74206 +378,74,1357,542,20,59,1,1,0.74603 +379,74,1355,540,20,59,1,1,0.77063 +380,74,1354,538,20,59,1,1,0.74841 +381,74,1353,536,20,59,1,1,0.63175 +382,74,1349,535,20,60,1,1,0.67135 +383,74,1346,535,20,61,1,1,0.64747 +384,74,1342,535,20,61,1,1,0.5576 +385,74,1339,535,20,62,1,1,0.44671 +386,74,1336,535,19,63,1,1,0.32812 +387,74,1332,534,20,64,1,1,0.36996 +388,74,1329,534,19,65,1,1,0.35455 +389,74,1325,534,20,65,1,1,0.32251 +390,74,1322,534,19,66,1,1,0.33358 +391,74,1319,534,19,67,1,1,0.43382 +392,74,1311,533,25,65,1,1,0.4021 +393,74,1303,532,25,65,1,1,0.42483 +394,74,1296,532,24,66,1,1,0.34806 +395,74,1288,531,24,66,1,1,0.3606 +396,74,1281,531,24,66,1,1,0.39821 +397,74,1273,530,25,67,1,1,0.42081 +398,74,1266,530,25,67,1,1,0.45701 +399,74,1258,529,26,68,1,1,0.47665 +400,74,1251,529,26,68,1,1,0.4686 +401,74,1244,529,26,68,1,1,0.71659 +402,74,1236,528,26,69,1,1,0.89206 +403,74,1228,527,26,70,1,1,1 +404,74,1220,527,27,70,1,1,0.97988 +405,74,1210,525,27,70,1,1,0.94266 +406,74,1200,523,28,71,1,1,0.8908 +407,74,1188,523,28,71,1,1,0.8908 +408,74,1177,523,28,72,1,1,0.87104 +409,74,1165,523,29,72,1,1,0.85388 +410,74,1154,523,29,73,1,1,0.83378 +411,74,1143,523,29,73,1,1,0.81081 +412,74,1129,522,29,73,1,1,0.85225 +413,74,1116,521,29,73,1,1,0.83063 +414,74,1102,521,29,73,1,1,0.78514 +415,74,1089,520,29,73,1,1,0.74234 +416,74,1075,520,29,73,1,1,0.7009 +417,74,1062,519,29,73,1,1,0.65495 +418,74,1048,518,29,73,1,1,0.61712 +419,74,1035,518,29,73,1,1,0.54279 +420,74,1021,517,29,73,1,1,0.51351 +317,75,1521,570,47,58,0,10,0.41631 +318,75,1525,569,48,59,0,10,0.39864 +319,75,1530,569,49,59,0,10,0.39167 +320,75,1535,569,50,59,0,10,0.3817 +321,75,1540,569,50,59,0,10,0.37451 +322,75,1545,569,51,59,0,10,0.3891 +323,75,1549,569,53,59,0,10,0.40988 +324,75,1554,569,53,59,0,10,0.40988 +325,75,1559,569,54,59,0,10,0.44727 +326,75,1564,569,55,59,0,10,0.4756 +327,75,1569,569,56,60,0,10,0.51251 +328,75,1573,567,56,61,0,10,0.52999 +329,75,1577,565,56,62,0,10,0.53745 +330,75,1581,563,56,63,0,10,0.53564 +331,75,1586,561,55,64,0,10,0.55275 +332,75,1590,559,55,65,0,10,0.54762 +333,75,1594,557,55,66,0,10,0.54558 +334,75,1599,555,54,67,0,10,0.51471 +335,75,1603,553,54,68,0,10,0.45639 +336,75,1607,551,54,69,0,10,0.48727 +337,75,1612,550,54,69,0,10,0.51429 +338,75,1615,552,54,69,0,10,0.57455 +339,75,1618,555,54,69,0,10,0.66545 +340,75,1622,558,54,69,0,10,0.71247 +341,75,1625,560,54,69,0,10,0.71325 +342,75,1629,563,54,69,0,10,0.65091 +343,75,1632,566,54,69,0,10,0.64338 +344,75,1635,568,54,69,0,10,0.64545 +345,75,1639,571,54,69,0,10,0.64416 +346,75,1642,574,54,69,0,10,0.61247 +347,75,1646,577,54,69,0,10,0.62909 +348,75,1649,578,54,69,0,10,0.66909 +349,75,1653,580,53,69,0,10,0.69921 +350,75,1657,581,53,70,0,10,0.66667 +351,75,1660,583,53,70,0,10,0.59259 +352,75,1664,584,53,71,0,10,0.59259 +353,75,1668,586,52,71,0,10,0.56604 +354,75,1671,587,52,72,0,10,0.54717 +355,75,1675,589,52,72,0,10,0.5283 +356,75,1679,590,51,73,0,10,0.5 +357,75,1683,592,51,73,0,10,0.46154 +358,75,1685,594,51,73,0,10,0.38462 +359,75,1688,596,51,73,0,10,0.32692 +360,75,1691,599,51,73,0,10,0.26923 +361,75,1693,601,51,73,0,10,0.21154 +362,75,1696,604,51,73,0,10,0.15385 +363,75,1699,606,51,73,0,10,0.038462 +364,75,1701,608,51,73,0,10,0 +365,75,1704,611,51,73,0,10,0 +366,75,1707,613,51,73,0,10,0 +367,75,1710,616,51,73,0,10,0 +368,75,1711,615,51,73,0,10,0 +369,75,1712,615,51,73,0,10,0 +370,75,1713,615,51,73,0,10,0 +371,75,1714,614,51,73,0,10,0.0033784 +372,75,1716,614,51,73,0,10,0 +373,75,1717,614,51,73,0,10,0 +374,75,1718,613,51,73,0,10,0 +375,75,1719,613,51,73,0,10,0 +376,75,1720,613,51,73,0,10,0 +377,75,1722,613,51,73,0,10,0 +378,75,1720,612,52,74,0,10,0 +379,75,1718,611,53,75,0,10,0 +380,75,1717,610,53,76,0,10,0 +381,75,1715,609,54,77,0,10,0.072727 +382,75,1714,608,54,79,0,10,0.12727 +383,75,1712,607,55,80,0,10,0.19643 +384,75,1710,606,56,81,0,10,0.26316 +385,75,1709,605,56,82,0,10,0.31579 +386,75,1707,604,57,83,0,10,0.39655 +387,75,1706,603,58,85,0,10,0.44068 +388,75,1701,604,60,85,0,10,0.55738 +389,75,1697,605,62,86,0,10,0.61905 +390,75,1692,606,65,87,0,10,0.65152 +391,75,1688,607,66,87,0,10,0.70251 +392,75,1684,608,68,88,0,10,0.7165 +393,75,1679,609,71,89,0,10,0.71512 +394,75,1675,610,72,89,0,10,0.786 +395,75,1670,611,75,90,0,10,0.78976 +396,75,1666,612,77,91,0,10,0.76923 +397,75,1662,613,79,92,0,10,0.77554 +398,75,1653,612,79,92,0,10,0.85161 +399,75,1644,612,79,92,0,10,0.91694 +400,75,1636,612,78,92,0,10,0.97468 +401,75,1627,612,79,92,0,10,0.98992 +402,75,1619,612,78,92,0,10,0.99156 +403,75,1610,612,78,92,0,10,0.98312 +404,75,1601,612,79,92,0,10,0.975 +405,75,1593,612,78,92,0,10,0.99156 +406,75,1584,612,78,92,0,10,1 +407,75,1576,612,78,92,0,10,1 +408,75,1564,611,78,92,0,10,1 +409,75,1552,610,78,93,0,10,1 +410,75,1541,610,78,93,0,10,1 +411,75,1528,609,78,94,0,10,0.99227 +412,75,1515,609,79,94,0,10,1 +413,75,1502,609,79,94,0,10,1 +414,75,1490,609,79,94,0,10,1 +415,75,1475,608,79,95,0,10,1 +416,75,1460,608,79,95,0,10,1 +417,75,1446,608,78,96,0,10,1 +418,75,1430,608,78,95,0,10,1 +419,75,1414,608,78,95,0,10,1 +420,75,1399,608,78,95,0,10,1 +421,75,1382,607,77,95,0,10,1 +422,75,1365,606,77,95,0,10,1 +423,75,1348,606,77,95,0,10,1 +424,75,1328,605,77,96,0,10,1 +425,75,1308,605,77,96,0,10,1 +426,75,1288,605,77,96,0,10,1 +427,75,1268,605,77,96,0,10,1 +428,75,1247,607,78,97,0,10,1 +429,75,1227,609,78,98,0,10,1 +430,75,1205,610,78,99,0,10,1 +431,75,1183,612,79,99,0,10,1 +432,75,1162,614,79,100,0,10,1 +433,75,1140,616,80,100,0,10,1 +434,75,1118,617,81,101,0,10,0.90244 +435,75,1097,619,81,102,0,10,0.78049 +436,75,1075,621,82,102,0,10,0.6747 +437,75,1054,623,82,103,0,10,0.61446 +438,75,1033,624,82,104,0,10,0.55422 +439,75,1010,624,82,104,0,10,0.50602 +440,75,987,624,83,105,0,10,0.47619 +441,75,962,624,83,106,0,10,0.65476 +442,75,937,625,84,107,0,10,0.83529 +443,75,912,626,84,107,0,10,1 +444,75,887,627,85,108,0,10,1 +445,75,862,628,85,108,0,10,1 +446,75,837,629,86,109,0,10,1 +447,75,813,630,86,110,0,10,1 +448,75,785,629,87,111,0,10,1 +449,75,757,628,88,113,0,10,1 +450,75,729,627,89,114,0,10,1 +451,75,702,627,89,115,0,10,1 +452,75,672,626,89,115,0,10,1 +453,75,646,627,88,116,0,10,1 +454,75,616,628,91,117,0,10,1 +455,75,586,630,95,118,0,10,1 +456,75,556,632,92,120,0,10,1 +457,75,526,635,90,121,0,10,1 +458,75,493,636,92,122,0,10,1 +459,75,461,638,93,122,0,10,1 +460,75,425,640,94,122,0,10,1 +461,75,389,642,95,122,0,10,0.9646 +462,75,354,645,95,122,0,10,0.94131 +463,75,325,654,96,121,0,10,0.90046 +464,75,287,655,97,122,0,10,0.90874 +465,75,250,657,98,122,0,10,0.8879 +466,75,212,658,99,123,0,10,0.84129 +467,75,175,660,100,123,0,10,0.82258 +468,75,132,665,100,122,0,10,0.79675 +469,75,95,668,107,121,0,10,0.81967 +470,75,55,662,105,127,0,10,0.88281 +471,75,13,662,109,133,0,10,0.91045 +472,75,-27,664,108,132,0,10,0.74312 +1,76,1107,539,95,79,0,3,0.21107 +2,76,1107,536,96,79,0,3,0.19098 +3,76,1108,533,96,80,0,3,0.17118 +4,76,1110,536,96,81,0,3,0.093664 +5,76,1112,539,97,82,0,3,0.11224 +6,76,1115,543,97,82,0,3,0.10499 +7,76,1114,537,98,83,0,3,0.1924 +8,76,1117,548,98,84,0,3,0.12406 +9,76,1118,551,98,85,0,3,0.12615 +10,76,1119,555,99,85,0,3,0.12733 +11,76,1121,549,99,86,0,3,0.18966 +12,76,1122,555,100,87,0,3,0.12219 +13,76,1122,544,102,87,0,3,0.22683 +14,76,1122,544,103,88,0,3,0.21402 +15,76,1122,544,105,89,0,3,0.21132 +16,76,1122,544,106,90,0,3,0.19893 +17,76,1122,544,108,91,0,3,0.18628 +18,76,1122,544,109,92,0,3,0.17439 +19,76,1122,545,111,92,0,3,0.16331 +20,76,1122,547,112,93,0,3,0.13368 +21,76,1122,549,114,94,0,3,0.12201 +22,76,1122,551,116,95,0,3,0.11058 +23,76,1123,549,116,95,0,3,0.13248 +24,76,1125,551,116,95,0,3,0.12251 +25,76,1127,554,116,95,0,3,0.094551 +26,76,1129,557,116,95,0,3,0.084491 +27,76,1131,560,116,95,0,3,0.084491 +28,76,1134,563,116,95,0,3,0.092593 +29,76,1135,566,116,95,0,3,0.076389 +30,76,1137,570,116,95,0,3,0.066239 +31,76,1139,574,116,95,0,3,0.058048 +32,76,1139,576,116,95,0,3,0.0625 +33,76,1140,562,117,96,0,3,0.14433 +34,76,1145,567,117,97,0,3,0.057074 +35,76,1146,562,118,98,0,3,0.056532 +36,76,1147,558,119,99,0,3,0.07375 +37,76,1149,555,119,99,0,3,0.09325 +38,76,1150,555,120,100,0,3,0.08469 +39,76,1152,555,121,101,0,3,0.10318 +40,76,1154,555,122,102,0,3,0.12132 +41,76,1156,555,123,103,0,3,0.13911 +42,76,1158,556,123,103,0,3,0.15113 +43,76,1157,560,124,103,0,3,0.11538 +44,76,1157,561,125,103,0,3,0.125 +45,76,1157,562,127,103,0,3,0.125 +46,76,1158,564,128,102,0,3,0.12621 +47,76,1158,565,130,102,0,3,0.12621 +48,76,1158,566,132,102,0,3,0.13592 +49,76,1159,568,133,102,0,3,0.12621 +50,76,1158,568,134,102,0,3,0.14563 +51,76,1157,569,136,102,0,3,0.15534 +52,76,1157,570,137,102,0,3,0.1068 +53,76,1160,572,137,102,0,3,0.067961 +54,76,1160,572,138,102,0,3,0.067961 +55,76,1160,572,139,102,0,3,0.07767 +56,76,1161,573,139,101,0,3,0.078431 +57,76,1161,571,140,101,0,3,0.10784 +58,76,1162,570,141,101,0,3,0.11765 +59,76,1162,568,142,101,0,3,0.14706 +60,76,1162,566,143,101,0,3,0.16667 +61,76,1163,565,144,101,0,3,0.18627 +62,76,1164,571,145,101,0,3,0.12745 +63,76,1163,565,145,102,0,3,0.19417 +64,76,1165,569,146,103,0,3,0.16346 +65,76,1164,569,147,104,0,3,0.1619 +66,76,1163,569,148,105,0,3,0.16981 +67,76,1163,570,148,105,0,3,0.16038 +68,76,1162,570,150,107,0,3,0.16667 +69,76,1161,570,151,108,0,3,0.17431 +70,76,1161,571,151,108,0,3,0.16514 +71,76,1160,571,152,109,0,3,0.17273 +72,76,1160,572,153,110,0,3,0.17117 +73,76,1158,572,153,110,0,3,0.17117 +74,76,1156,572,153,110,0,3,0.18018 +75,76,1154,572,153,110,0,3,0.18919 +76,76,1152,573,153,109,0,3,0.21818 +77,76,1150,573,154,109,0,3,0.21818 +78,76,1148,573,154,109,0,3,0.21818 +79,76,1146,574,154,108,0,3,0.22018 +80,76,1144,574,154,108,0,3,0.22018 +81,76,1142,574,154,108,0,3,0.22936 +82,76,1141,575,154,108,0,3,0.22936 +83,76,1137,576,156,108,0,3,0.22936 +84,76,1134,578,157,108,0,3,0.22936 +85,76,1131,580,158,108,0,3,0.23853 +86,76,1128,582,159,108,0,3,0.24771 +87,76,1125,584,160,108,0,3,0.25688 +88,76,1121,586,162,107,0,3,0.26852 +89,76,1118,588,163,107,0,3,0.28704 +90,76,1115,590,164,107,0,3,0.2963 +91,76,1112,592,165,107,0,3,0.30556 +92,76,1109,594,166,107,0,3,0.31481 +93,76,1104,594,167,108,0,3,0.34862 +94,76,1100,595,168,108,0,3,0.34862 +95,76,1096,596,169,108,0,3,0.34862 +96,76,1092,596,170,109,0,3,0.35455 +97,76,1088,597,171,109,0,3,0.35455 +98,76,1084,598,171,109,0,3,0.35455 +99,76,1080,598,172,110,0,3,0.36036 +100,76,1076,599,173,110,0,3,0.36036 +101,76,1072,600,174,110,0,3,0.36937 +102,76,1068,601,175,110,0,3,0.37838 +103,76,1063,601,176,110,0,3,0.3964 +104,76,1059,601,176,111,0,3,0.40179 +105,76,1054,601,177,111,0,3,0.41071 +106,76,1050,601,177,112,0,3,0.41593 +107,76,1045,602,179,111,0,3,0.41964 +108,76,1041,602,179,112,0,3,0.42478 +109,76,1036,602,180,112,0,3,0.43363 +110,76,1032,602,180,113,0,3,0.4386 +111,76,1028,603,181,113,0,3,0.4386 +112,76,1024,605,176,116,0,3,0.4188 +113,76,1018,604,177,117,0,3,0.4322 +114,76,1013,604,177,117,0,3,0.44068 +115,76,1008,603,177,119,0,3,0.45 +116,76,1003,603,177,119,0,3,0.45833 +117,76,998,603,178,120,0,3,0.46281 +118,76,993,602,178,121,0,3,0.47541 +119,76,988,602,178,121,0,3,0.45082 +120,76,983,601,178,123,0,3,0.42742 +121,76,978,601,178,123,0,3,0.42742 +122,76,973,601,179,124,0,3,0.432 +123,76,967,601,179,124,0,3,0.44 +124,76,962,601,179,124,0,3,0.448 +125,76,956,601,179,124,0,3,0.456 +126,76,951,601,179,124,0,3,0.464 +127,76,945,601,179,124,0,3,0.472 +128,76,940,601,179,124,0,3,0.48 +129,76,934,601,179,124,0,3,0.488 +130,76,929,601,179,124,0,3,0.496 +131,76,924,601,179,124,0,3,0.504 +132,76,916,602,179,124,0,3,0.504 +133,76,911,601,179,124,0,3,0.52 +134,76,906,601,179,124,0,3,0.528 +135,76,901,601,179,124,0,3,0.536 +136,76,896,600,179,124,0,3,0.552 +137,76,891,600,179,124,0,3,0.56 +138,76,886,600,179,124,0,3,0.576 +139,76,881,599,179,124,0,3,0.568 +140,76,876,599,179,124,0,3,0.56 +141,76,871,599,179,124,0,3,0.552 +142,76,867,599,179,124,0,3,0.544 +143,76,862,599,179,124,0,3,0.544 +144,76,857,599,179,124,0,3,0.552 +145,76,852,599,179,124,0,3,0.552 +146,76,847,599,179,124,0,3,0.56 +147,76,842,600,179,123,0,3,0.55645 +148,76,837,600,179,123,0,3,0.56452 +149,76,832,600,179,123,0,3,0.57258 +150,76,827,600,179,123,0,3,0.56452 +151,76,822,601,179,123,0,3,0.55645 +152,76,818,603,173,123,0,3,0.54032 +153,76,810,602,173,123,0,3,0.54839 +154,76,803,601,173,123,0,3,0.55645 +155,76,796,600,174,123,0,3,0.56452 +156,76,790,600,175,122,0,3,0.56098 +157,76,784,599,175,122,0,3,0.56098 +158,76,778,599,176,122,0,3,0.55285 +159,76,773,598,175,123,0,3,0.54839 +160,76,769,598,174,123,0,3,0.54839 +161,76,764,598,174,123,0,3,0.54839 +162,76,760,598,173,123,0,3,0.54839 +163,76,754,597,173,123,0,3,0.55645 +164,76,749,596,173,124,0,3,0.56 +165,76,744,596,173,123,0,3,0.56452 +166,76,739,595,173,124,0,3,0.568 +167,76,734,595,173,124,0,3,0.568 +168,76,729,594,172,124,0,3,0.576 +169,76,725,593,171,124,0,3,0.584 +170,76,721,593,170,124,0,3,0.584 +171,76,717,592,171,125,0,3,0.5873 +172,76,713,592,173,125,0,3,0.5873 +173,76,709,591,172,125,0,3,0.59524 +174,76,706,590,170,125,0,3,0.60317 +175,76,703,590,169,124,0,3,0.608 +176,76,700,587,168,126,0,3,0.62205 +177,76,697,585,168,128,0,3,0.63011 +178,76,694,585,167,127,0,3,0.64156 +179,76,691,585,167,126,0,3,0.64534 +180,76,688,585,167,125,0,3,0.64919 +181,76,685,585,167,124,0,3,0.66048 +182,76,682,586,167,123,0,3,0.65707 +183,76,680,586,164,124,0,3,0.65556 +184,76,677,586,165,124,0,3,0.65759 +185,76,674,586,166,124,0,3,0.66668 +186,76,671,586,167,124,0,3,0.66905 +187,76,669,586,167,124,0,3,0.67214 +188,76,668,586,166,124,0,3,0.6824 +189,76,666,586,166,125,0,3,0.68263 +190,76,665,586,165,125,0,3,0.69339 +191,76,663,586,165,125,0,3,0.69793 +192,76,662,586,165,126,0,3,0.7052 +193,76,659,586,166,126,0,3,0.70956 +194,76,656,586,167,126,0,3,0.71654 +195,76,653,586,168,126,0,3,0.72343 +196,76,651,586,169,126,0,3,0.73543 +197,76,651,586,170,126,0,3,0.74987 +198,76,651,586,171,126,0,3,0.76415 +199,76,650,586,172,127,0,3,0.77348 +200,76,649,586,174,128,0,3,0.78676 +201,76,648,586,176,129,0,3,0.79744 +202,76,647,586,178,130,0,3,0.80809 +203,76,647,586,181,130,0,3,0.82384 +204,76,648,587,183,130,0,3,0.84057 +205,76,649,587,185,130,0,3,0.8573 +206,76,650,588,187,130,0,3,0.87161 +207,76,651,589,189,129,0,3,0.88704 +208,76,651,589,192,130,0,3,0.89368 +209,76,652,590,194,129,0,3,0.90406 +210,76,653,590,196,130,0,3,0.91305 +211,76,654,591,198,129,0,3,0.92346 +212,76,655,592,201,129,0,3,0.93366 +213,76,658,591,203,129,0,3,0.94947 +214,76,661,591,205,129,0,3,0.96497 +215,76,664,591,207,129,0,3,0.97988 +216,76,668,589,210,130,0,3,0.99758 +217,76,673,588,212,130,0,3,1 +218,76,678,587,214,131,0,3,1 +219,76,682,586,217,131,0,3,1 +220,76,687,585,219,131,0,3,1 +221,76,692,584,221,132,0,3,1 +222,76,698,585,220,133,0,3,0.98643 +223,76,705,585,221,131,0,3,0.95045 +224,76,712,585,223,130,0,3,0.91071 +225,76,720,585,224,129,0,3,0.87556 +226,76,726,585,228,128,0,3,0.87773 +227,76,732,585,232,127,0,3,0.87983 +228,76,739,588,234,127,0,3,0.88085 +229,76,747,587,235,127,0,3,0.87712 +230,76,755,586,237,127,0,3,0.88235 +231,76,763,586,239,126,0,3,0.87917 +232,76,773,585,241,126,0,3,0.88017 +233,76,783,584,243,125,0,3,0.88115 +234,76,792,583,245,125,0,3,0.88211 +235,76,802,582,246,125,0,3,0.87482 +236,76,813,581,248,125,0,3,0.87576 +237,76,823,580,250,125,0,3,0.8691 +238,76,835,579,251,125,0,3,0.86558 +239,76,847,578,253,125,0,3,0.85921 +240,76,859,577,254,125,0,3,0.8521 +241,76,871,576,256,125,0,3,0.84911 +242,76,884,576,257,125,0,3,0.84625 +243,76,899,575,258,124,0,3,0.84093 +244,76,915,575,258,123,0,3,0.83497 +245,76,928,573,260,123,0,3,0.83531 +246,76,942,572,262,123,0,3,0.83552 +247,76,958,571,264,123,0,3,0.83929 +248,76,974,570,266,123,0,3,0.79111 +249,76,991,570,267,123,0,3,0.8345 +250,76,1007,569,269,123,0,3,0.93297 +251,76,1023,568,271,123,0,3,0.96771 +252,76,1040,568,273,123,0,3,0.98084 +253,76,1057,567,274,121,0,3,0.98319 +254,76,1075,565,278,121,0,3,0.95252 +255,76,1093,564,282,121,0,3,0.92933 +256,76,1113,562,284,122,0,3,0.90526 +257,76,1134,561,286,123,0,3,0.87805 +258,76,1155,560,287,124,0,3,0.85417 +259,76,1175,559,290,124,0,3,0.81787 +260,76,1196,558,291,125,0,3,0.78425 +261,76,1217,557,293,126,0,3,0.75341 +262,76,1238,556,295,127,0,3,0.72973 +263,76,1260,556,298,127,0,3,0.69706 +264,76,1283,556,301,127,0,3,0.65604 +265,76,1306,556,303,127,0,3,0.61852 +266,76,1329,556,306,127,0,3,0.58291 +267,76,1354,556,308,128,0,3,0.58431 +268,76,1379,556,310,129,0,3,0.62414 +269,76,1404,556,313,131,0,3,0.65026 +270,76,1429,556,315,131,0,3,0.66197 +271,76,1454,556,318,131,0,3,0.72509 +272,76,1479,556,321,131,0,3,0.69043 +273,76,1506,555,326,131,0,3,0.64878 +274,76,1533,554,332,131,0,3,0.60988 +275,76,1560,554,338,130,0,3,0.57952 +276,76,1588,553,339,130,0,3,0.53235 +277,76,1618,552,337,130,0,3,0.4264 +278,76,1648,551,336,131,0,3,0.32686 +279,76,1677,550,332,132,0,3,0.21825 +280,76,1709,552,328,134,0,3,0.27907 +281,76,1743,546,323,140,0,3,0.22885 +282,76,1778,549,320,138,0,3,0.17271 +283,76,1793,549,320,137,0,3,0.12599 +284,76,1834,546,320,137,0,3,0.16667 +285,76,1868,548,320,137,0,3,0.081358 +539,77,1904,627,225,110,0,3,0.075221 +540,77,1887,621,225,110,0,3,0.15044 +541,77,1862,619,225,110,0,3,0.26106 +542,77,1842,631,225,110,0,3,0.34956 +543,77,1826,631,224,117,0,3,0.42222 +544,77,1807,629,222,125,0,3,0.51121 +545,77,1792,629,221,125,0,3,0.58108 +546,77,1773,630,221,126,0,3,0.66667 +547,77,1758,620,221,126,0,3,0.73423 +548,77,1743,625,220,121,0,3,0.80543 +549,77,1726,617,220,121,0,3,0.88235 +550,77,1714,621,220,129,0,3,0.93665 +551,77,1697,616,237,131,0,3,0.94118 +552,77,1684,619,237,133,0,3,0.9958 +553,77,1668,614,237,134,0,3,1 +554,77,1656,614,237,134,0,3,1 +555,77,1644,613,237,134,0,3,1 +556,77,1632,612,238,134,0,3,1 +557,77,1620,611,239,134,0,3,1 +558,77,1608,610,240,134,0,3,1 +559,77,1596,609,241,134,0,3,1 +560,77,1585,609,241,134,0,3,1 +561,77,1572,608,243,134,0,3,1 +562,77,1559,607,245,134,0,3,1 +563,77,1551,611,244,133,0,3,1 +564,77,1541,610,242,134,0,3,1 +565,77,1530,610,244,134,0,3,1 +566,77,1520,611,245,134,0,3,1 +567,77,1511,610,246,135,0,3,1 +568,77,1502,610,248,136,0,3,1 +569,77,1493,609,249,137,0,3,1 +570,77,1485,609,250,138,0,3,1 +571,77,1476,610,252,138,0,3,1 +572,77,1468,611,254,139,0,3,1 +573,77,1459,612,256,140,0,3,1 +574,77,1451,613,258,141,0,3,1 +575,77,1444,613,260,142,0,3,1 +576,77,1438,614,261,142,0,3,1 +577,77,1432,618,261,142,0,3,1 +578,77,1425,617,264,144,0,3,1 +579,77,1418,617,268,146,0,3,1 +580,77,1413,617,269,149,0,3,1 +581,77,1408,617,270,150,0,3,1 +582,77,1404,617,271,151,0,3,1 +583,77,1400,617,271,152,0,3,1 +584,77,1396,617,272,154,0,3,1 +585,77,1392,617,275,156,0,3,0.97464 +586,77,1389,617,277,158,0,3,0.94245 +587,77,1386,617,279,160,0,3,0.91071 +588,77,1383,617,281,162,0,3,0.86879 +589,77,1382,617,282,163,0,3,0.84547 +590,77,1381,617,283,164,0,3,0.81103 +591,77,1380,617,285,166,0,3,0.78029 +592,77,1381,617,288,168,0,3,0.75091 +593,77,1383,617,290,171,0,3,0.72537 +594,77,1385,617,293,174,0,3,0.70212 +595,77,1379,626,297,174,0,3,0.61948 +596,77,1382,620,301,173,0,3,0.60143 +597,77,1385,622,305,174,0,3,0.56575 +598,77,1388,622,308,175,0,3,0.53045 +599,77,1391,622,312,177,0,3,0.49923 +600,77,1395,622,315,178,0,3,0.46362 +601,77,1398,622,319,180,0,3,0.42895 +602,77,1402,622,322,182,0,3,0.38744 +603,77,1401,623,329,183,0,3,0.34091 +604,77,1411,626,328,186,0,3,0.29275 +605,77,1413,626,333,186,0,3,0.26479 +606,77,1415,626,338,186,0,3,0.29412 +607,77,1420,627,343,187,0,3,0.33511 +608,77,1425,628,348,188,0,3,0.33333 +609,77,1430,629,354,190,0,3,0.35079 +610,77,1433,631,359,189,0,3,0.39474 +611,77,1436,634,364,187,0,3,0.43617 +612,77,1440,637,368,186,0,3,0.48128 +613,77,1447,641,372,186,0,3,0.52406 +614,77,1454,646,377,186,0,3,0.5615 +615,77,1458,649,383,191,0,3,0.59896 +616,77,1463,652,389,196,0,3,0.67442 +617,77,1468,655,395,201,0,3,0.72847 +618,77,1473,658,401,206,0,3,0.80388 +619,77,1480,661,408,210,0,3,0.84426 +620,77,1487,668,410,215,0,3,0.87997 +621,77,1494,670,428,226,0,3,0.89085 +622,77,1501,672,426,230,0,3,0.9154 +623,77,1508,674,424,234,0,3,0.9287 +624,77,1515,677,422,238,0,3,0.93482 +625,77,1525,678,423,240,0,3,0.93396 +626,77,1535,679,425,243,0,3,0.9061 +627,77,1547,680,424,242,0,3,0.88 +628,77,1560,681,424,250,0,3,0.84941 +629,77,1570,674,424,259,0,3,0.82588 +630,77,1582,677,425,261,0,3,0.79577 +631,77,1596,680,420,262,0,3,0.77197 +632,77,1607,683,421,268,0,3,0.74408 +633,77,1619,686,422,274,0,3,0.71395 +634,77,1638,690,421,287,0,3,0.67062 +635,77,1652,696,424,282,0,3,0.63294 +636,77,1666,702,427,278,0,3,0.59579 +637,77,1681,709,429,274,0,3,0.55814 +638,77,1699,716,428,270,0,3,0.51748 +639,77,1718,723,426,266,0,3,0.47541 +640,77,1736,730,425,262,0,3,0.43427 +641,77,1755,737,424,258,0,3,0.39059 +642,77,1775,744,422,255,0,3,0.34515 +643,77,1795,751,420,252,0,3,0.29929 +644,77,1815,758,418,250,0,3,0.25298 +645,77,1832,769,416,238,0,3,0.21343 +646,77,1858,779,416,237,0,3,0.15108 +647,77,1885,781,417,242,0,3,0.086124 +524,78,1894,530,128,51,0,3,0.18515 +525,78,1874,535,128,51,0,3,0.28026 +526,78,1848,535,128,51,0,3,0.42442 +527,78,1822,538,128,51,0,3,0.51208 +528,78,1798,540,128,51,0,3,0.57812 +529,78,1774,533,128,50,0,3,0.77063 +530,78,1750,535,128,50,0,3,0.76486 +531,78,1733,532,121,49,0,3,0.88 +532,78,1706,532,121,49,0,3,0.89213 +533,78,1685,532,121,49,0,3,0.9177 +534,78,1666,535,121,49,0,3,0.90328 +535,78,1646,536,121,49,0,3,0.89574 +536,78,1627,536,121,49,0,3,0.92623 +537,78,1609,537,121,48,0,3,0.77551 +538,78,1590,537,121,48,0,3,1 +539,78,1572,538,121,48,0,3,0.95918 +540,78,1553,539,121,47,0,3,0.97917 +541,78,1535,539,121,47,0,3,0.993 +542,78,1516,540,121,47,0,3,0.99419 +543,78,1498,540,121,47,0,3,0.99402 +544,78,1479,541,121,46,0,3,0.98169 +545,78,1461,542,121,46,0,3,0.97279 +546,78,1446,539,119,47,0,3,0.98611 +547,78,1431,536,118,49,0,3,0.98655 +548,78,1415,534,118,48,0,3,0.97393 +549,78,1400,533,118,47,0,3,0.98669 +550,78,1385,532,118,46,0,3,1 +551,78,1370,531,118,45,0,3,0.98648 +552,78,1356,530,118,45,0,3,0.99324 +553,78,1343,529,117,45,0,3,1 +554,78,1329,528,117,45,0,3,1 +555,78,1316,527,117,45,0,3,1 +556,78,1303,524,117,46,0,3,1 +557,78,1291,522,117,46,0,3,1 +558,78,1278,521,117,45,0,3,1 +559,78,1266,520,117,45,0,3,1 +560,78,1255,519,117,45,0,3,1 +561,78,1244,519,117,45,0,3,1 +562,78,1232,518,117,45,0,3,1 +563,78,1221,518,117,45,0,3,1 +564,78,1210,517,117,45,0,3,1 +565,78,1199,517,117,45,0,3,1 +566,78,1189,517,118,44,0,3,1 +567,78,1179,517,119,43,0,3,1 +568,78,1169,517,120,42,0,3,1 +569,78,1159,517,121,42,0,3,1 +570,78,1148,517,122,42,0,3,1 +571,78,1140,517,121,42,0,3,1 +572,78,1132,517,120,43,0,3,1 +573,78,1125,517,119,43,0,3,1 +574,78,1117,517,118,44,0,3,1 +575,78,1110,517,117,45,0,3,0.97623 +576,78,1100,520,117,45,0,3,0.93515 +577,78,1092,519,117,46,0,3,0.90912 +578,78,1085,518,117,47,0,3,0.88612 +579,78,1078,517,117,48,0,3,0.8587 +580,78,1071,516,117,49,0,3,0.83237 +581,78,1061,515,121,49,0,3,0.78656 +582,78,1056,514,120,49,0,3,0.76959 +583,78,1052,514,119,49,0,3,0.754 +584,78,1048,513,117,50,0,3,0.74111 +585,78,1044,513,116,50,0,3,0.71828 +586,78,1040,512,116,51,0,3,0.70414 +587,78,1036,512,116,51,0,3,0.66979 +588,78,1033,512,116,51,0,3,0.64793 +589,78,1029,511,116,52,0,3,0.62748 +590,78,1025,511,116,52,0,3,0.59668 +591,78,1022,511,116,53,0,3,0.56442 +592,78,1020,510,116,54,0,3,0.54188 +593,78,1018,510,116,54,0,3,0.51453 +594,78,1016,510,116,54,0,3,0.48718 +595,78,1014,510,116,54,0,3,0.45983 +596,78,1013,509,116,54,0,3,0.47117 +597,78,1013,509,116,54,0,3,0.47273 +598,78,1013,509,116,54,0,3,0.47677 +599,78,1012,508,116,54,0,3,0.44227 +600,78,1012,508,116,54,0,3,0.41352 +601,78,1012,508,116,54,0,3,0.38477 +602,78,1011,507,116,54,0,3,0.36783 +603,78,1011,507,116,54,0,3,0.34545 +604,78,1011,507,116,54,0,3,0.43636 +605,78,1011,507,116,54,0,3,0.4 +606,78,1010,507,118,54,0,3,0.4 +607,78,1010,507,119,54,0,3,0.41818 +608,78,1010,507,121,54,0,3,0.43636 +609,78,1009,507,123,54,0,3,0.45455 +610,78,1009,507,125,54,0,3,0.45455 +611,78,1009,507,126,54,0,3,0.47273 +612,78,1008,507,128,54,0,3,0.49091 +613,78,1008,507,130,54,0,3,0.49091 +614,78,1008,507,131,54,0,3,0.50909 +615,78,1008,508,133,53,0,3,0.51852 +616,78,1008,511,133,53,0,3,0.51852 +617,78,1008,511,134,53,0,3,0.57407 +618,78,1009,511,134,53,0,3,0.61111 +619,78,1009,512,135,52,0,3,0.61543 +620,78,1010,512,135,53,0,3,0.65142 +621,78,1010,513,136,52,0,3,0.6926 +622,78,1011,513,136,52,0,3,0.73778 +623,78,1012,514,136,52,0,3,0.76243 +624,78,1014,516,137,53,0,3,0.75738 +625,78,1017,518,138,54,0,3,0.75317 +626,78,1020,516,138,54,0,3,0.77606 +627,78,1023,515,138,53,0,3,0.80975 +628,78,1027,518,138,54,0,3,0.77763 +629,78,1031,516,139,56,0,3,0.76667 +630,78,1035,515,140,57,0,3,0.7931 +631,78,1040,514,140,58,0,3,0.81608 +632,78,1043,513,141,58,0,3,0.85629 +633,78,1046,513,142,58,0,3,0.88479 +634,78,1050,513,142,58,0,3,0.90992 +635,78,1055,514,143,60,0,3,0.89162 +636,78,1061,516,144,61,0,3,0.91802 +637,78,1067,518,145,62,0,3,0.93259 +638,78,1072,520,145,62,0,3,0.94423 +639,78,1077,523,146,61,0,3,0.95348 +640,78,1082,525,147,61,0,3,0.96861 +641,78,1087,528,148,61,0,3,0.97337 +642,78,1093,529,148,61,0,3,0.98528 +643,78,1100,530,147,61,0,3,0.99412 +644,78,1107,531,147,61,0,3,1 +645,78,1114,532,146,61,0,3,1 +646,78,1121,533,145,61,0,3,1 +647,78,1128,534,145,62,0,3,1 +648,78,1135,534,147,62,0,3,1 +649,78,1143,534,148,62,0,3,1 +650,78,1150,534,150,62,0,3,1 +651,78,1158,534,152,62,0,3,1 +652,78,1166,531,152,61,0,3,0.99072 +653,78,1175,528,152,61,0,3,0.99114 +654,78,1185,521,153,61,0,3,0.99246 +655,78,1195,523,153,62,0,3,1 +656,78,1205,526,153,62,0,3,0.98825 +657,78,1218,530,154,58,0,3,0.98917 +658,78,1227,538,156,58,0,3,0.98057 +659,78,1237,546,157,59,0,3,0.97722 +660,78,1244,548,158,60,0,3,0.97773 +661,78,1251,551,160,60,0,3,0.97801 +662,78,1258,554,162,60,0,3,0.96741 +663,78,1267,558,164,60,0,3,0.96324 +664,78,1277,562,165,60,0,3,0.95763 +665,78,1286,563,166,61,0,3,0.94978 +666,78,1295,564,168,62,0,3,0.94224 +667,78,1305,566,169,62,0,3,0.93725 +668,78,1315,566,169,70,0,3,0.93099 +669,78,1326,566,169,69,0,3,0.93286 +670,78,1337,567,169,68,0,3,0.92941 +671,78,1347,565,169,68,0,3,0.91586 +672,78,1357,564,169,68,0,3,0.91185 +673,78,1367,563,169,67,0,3,0.90657 +674,78,1378,562,169,67,0,3,0.89836 +675,78,1389,561,167,70,0,3,0.90552 +676,78,1400,560,165,73,0,3,0.90866 +677,78,1410,569,172,65,0,3,0.89595 +678,78,1421,561,170,74,0,3,0.89302 +679,78,1433,566,173,78,0,3,0.87778 +680,78,1445,573,173,78,0,3,0.88608 +681,78,1451,578,180,82,0,3,0.88005 +682,78,1467,560,180,80,0,3,0.91222 +683,78,1469,569,180,78,0,3,0.86908 +684,78,1481,562,180,76,0,3,0.87522 +685,78,1493,549,181,77,0,3,0.87687 +686,78,1505,548,181,75,0,3,0.86813 +687,78,1518,547,180,73,0,3,0.87517 +688,78,1527,550,183,73,0,3,0.85473 +689,78,1536,553,186,73,0,3,0.83697 +690,78,1546,557,188,73,0,3,0.81403 +691,78,1555,548,188,86,0,3,0.81609 +692,78,1565,554,187,84,0,3,0.82278 +693,78,1575,560,186,82,0,3,0.78893 +694,78,1586,566,184,81,0,3,0.78906 +695,78,1596,572,183,79,0,3,0.79063 +696,78,1607,578,181,78,0,3,0.76631 +697,78,1613,583,181,73,0,3,0.73938 +698,78,1624,590,188,73,0,3,0.72201 +699,78,1635,597,196,73,0,3,0.75518 +700,78,1645,595,205,74,0,3,0.76647 +701,78,1655,603,205,74,0,3,0.71709 +702,78,1666,607,205,74,0,3,0.7356 +703,78,1675,618,207,76,0,3,0.70654 +704,78,1685,618,205,83,0,3,0.68759 +705,78,1697,623,206,83,0,3,0.68605 +706,78,1706,632,208,82,0,3,0.65135 +707,78,1715,621,208,82,0,3,0.70554 +708,78,1725,617,209,82,0,3,0.68285 +709,78,1736,613,209,82,0,3,0.66575 +710,78,1744,635,208,81,0,3,0.48092 +711,78,1752,615,210,81,0,3,0.43937 +712,78,1763,620,209,82,0,3,0.41744 +713,78,1772,606,208,94,0,3,0.33921 +714,78,1785,598,208,90,0,3,0.34324 +715,78,1793,596,207,90,0,3,0.33136 +716,78,1801,594,206,90,0,3,0.29941 +717,78,1810,600,208,82,0,3,0.26235 +718,78,1820,594,205,90,0,3,0.25862 +719,78,1830,597,205,89,0,3,0.29941 +720,78,1840,600,206,88,0,3,0.21544 +721,78,1851,604,206,87,0,3,0.18445 +722,78,1861,607,207,86,0,3,0.1691 +723,78,1871,610,207,86,0,3,0.15197 +724,78,1882,614,207,84,0,3,0.12794 +725,78,1892,617,208,84,0,3,0.099578 +726,78,1902,620,209,83,0,3,0.070011 +521,79,1905,594,193,86,0,3,0.082474 +522,79,1883,579,193,86,0,3,0.19588 +523,79,1858,579,193,86,0,3,0.32474 +524,79,1834,576,193,86,0,3,0.44845 +525,79,1810,575,199,90,0,3,0.555 +526,79,1786,574,205,94,0,3,0.65534 +527,79,1762,573,211,98,0,3,0.75 +528,79,1739,572,217,103,0,3,0.83486 +529,79,1719,573,226,104,0,3,0.88987 +530,79,1700,575,235,104,0,3,0.93644 +531,79,1680,576,244,105,0,3,0.98367 +532,79,1661,578,253,106,0,3,1 +533,79,1642,579,261,105,0,3,1 +534,79,1623,581,258,102,0,3,1 +535,79,1607,582,255,102,0,3,1 +536,79,1591,583,253,102,0,3,1 +537,79,1572,575,249,101,0,3,1 +538,79,1553,588,251,101,0,3,1 +539,79,1538,585,250,102,0,3,1 +540,79,1524,586,245,106,0,3,1 +541,79,1509,587,241,105,0,3,1 +542,79,1493,593,238,102,0,3,1 +543,79,1479,593,237,102,0,3,1 +544,79,1465,593,234,105,0,3,1 +545,79,1452,591,228,105,0,3,1 +546,79,1438,590,226,105,0,3,1 +547,79,1425,589,223,106,0,3,1 +548,79,1412,588,221,107,0,3,1 +549,79,1400,586,219,109,0,3,1 +550,79,1389,585,217,110,0,3,1 +551,79,1377,584,215,111,0,3,1 +552,79,1366,583,213,112,0,3,1 +553,79,1354,582,211,113,0,3,1 +554,79,1343,581,209,114,0,3,1 +555,79,1333,581,207,114,0,3,1 +556,79,1324,582,205,114,0,3,1 +557,79,1314,582,205,114,0,3,1 +558,79,1304,582,204,115,0,3,1 +559,79,1295,581,204,118,0,3,1 +560,79,1286,582,202,118,0,3,1 +561,79,1277,583,201,119,0,3,1 +562,79,1268,584,200,121,0,3,1 +563,79,1260,585,198,123,0,3,1 +564,79,1252,586,197,126,0,3,1 +565,79,1244,587,198,127,0,3,1 +566,79,1237,588,199,129,0,3,1 +567,79,1230,590,200,129,0,3,1 +568,79,1222,591,202,131,0,3,1 +569,79,1215,592,203,132,0,3,1 +570,79,1208,594,204,133,0,3,1 +571,79,1201,595,206,134,0,3,1 +572,79,1195,596,207,136,0,3,1 +573,79,1189,597,208,138,0,3,1 +574,79,1183,599,209,139,0,3,1 +575,79,1176,600,213,142,0,3,1 +576,79,1170,602,216,144,0,3,1 +577,79,1164,604,220,146,0,3,1 +578,79,1161,605,224,149,0,3,1 +579,79,1159,607,227,151,0,3,1 +580,79,1156,609,231,153,0,3,1 +581,79,1154,610,235,156,0,3,1 +582,79,1151,612,239,158,0,3,1 +583,79,1149,614,242,160,0,3,1 +584,79,1147,616,246,162,0,3,1 +585,79,1146,615,252,165,0,3,1 +586,79,1146,614,258,169,0,3,1 +587,79,1146,613,264,173,0,3,1 +588,79,1146,615,273,177,0,3,1 +589,79,1145,618,280,182,0,3,1 +590,79,1146,621,289,185,0,3,1 +591,79,1148,625,297,188,0,3,1 +592,79,1153,628,304,191,0,3,1 +593,79,1158,631,311,195,0,3,1 +594,79,1164,634,317,199,0,3,1 +595,79,1168,637,331,206,0,3,1 +596,79,1172,640,345,213,0,3,1 +597,79,1177,643,358,221,0,3,1 +598,79,1186,646,369,228,0,3,1 +599,79,1195,650,381,234,0,3,1 +600,79,1204,653,395,240,0,3,1 +601,79,1213,656,409,247,0,3,1 +602,79,1225,659,424,254,0,3,1 +603,79,1238,662,438,262,0,3,1 +604,79,1251,665,453,270,0,3,1 +605,79,1265,673,475,281,0,3,1 +606,79,1280,681,496,292,0,3,1 +607,79,1295,690,518,302,0,3,1 +608,79,1309,691,545,317,0,3,1 +609,79,1325,696,574,326,0,3,1 +610,79,1344,706,580,339,0,3,0.99312 +611,79,1363,716,586,363,0,3,0.9506 +612,79,1384,727,595,365,0,3,0.87147 +613,79,1406,739,603,367,0,3,0.79241 +614,79,1428,751,612,369,0,3,0.7173 +615,79,1447,764,613,370,0,3,0.65962 +616,79,1474,783,614,368,0,3,0.58698 +617,79,1502,797,614,368,0,3,0.52436 +618,79,1535,817,613,369,0,3,0.44856 +619,79,1569,830,613,370,0,3,0.38786 +620,79,1602,848,613,369,0,3,0.32717 +621,79,1646,860,613,368,0,3,0.26824 +622,79,1689,874,613,370,0,3,0.21082 +623,79,1734,886,613,369,0,3,0.16051 +624,79,1788,897,612,369,0,3,0.1079 +1,80,1163,516,130,57,0,3,0.81574 +2,80,1145,513,133,56,0,3,0.73737 +3,80,1129,514,135,55,0,3,0.63078 +4,80,1113,516,137,54,0,3,0.56653 +5,80,1088,517,148,54,0,3,0.48164 +6,80,1075,530,150,54,0,3,0.387 +7,80,1059,522,151,54,0,3,0.44569 +8,80,1044,528,151,50,0,3,0.58127 +9,80,1031,529,153,52,0,3,0.62632 +10,80,1015,535,154,49,0,3,0.63897 +11,80,999,526,157,56,0,3,0.673 +12,80,980,529,157,56,0,3,0.64801 +13,80,966,522,157,56,0,3,0.70686 +14,80,951,522,158,55,0,3,0.72821 +15,80,936,522,160,55,0,3,0.76786 +16,80,919,522,160,55,0,3,0.77795 +17,80,903,522,159,56,0,3,0.77807 +18,80,887,523,158,56,0,3,0.79124 +19,80,871,523,157,57,0,3,0.83435 +20,80,855,523,156,58,0,3,0.87887 +21,80,839,524,156,58,0,3,0.91687 +22,80,822,525,156,58,0,3,0.95725 +23,80,806,526,156,58,0,3,0.99525 +24,80,788,528,156,58,0,3,1 +25,80,773,534,158,56,0,3,1 +26,80,755,533,159,54,0,3,1 +27,80,737,537,159,54,0,3,1 +28,80,721,540,159,55,0,3,1 +29,80,704,539,162,55,0,3,1 +30,80,682,541,164,61,0,3,0.93118 +31,80,675,552,156,58,0,3,0.91914 +32,80,654,549,162,58,0,3,0.80212 +33,80,638,542,156,58,0,3,0.77038 +34,80,618,546,163,61,0,3,0.66227 +35,80,605,536,158,60,0,3,0.61511 +36,80,586,533,162,59,0,3,0.52249 +37,80,568,532,160,54,0,3,0.45692 +38,80,551,532,158,55,0,3,0.44429 +39,80,534,532,157,56,0,3,0.43904 +40,80,517,532,156,58,0,3,0.43053 +10,81,1510,550,119,46,0,3,0.675 +11,81,1500,541,125,48,0,3,0.61791 +12,81,1491,532,131,51,0,3,0.62107 +13,81,1482,527,137,54,0,3,0.56798 +14,81,1471,519,143,59,0,3,0.55903 +15,81,1466,519,150,58,0,3,0.59558 +16,81,1456,525,155,54,0,3,0.59895 +17,81,1446,524,162,55,0,3,0.56748 +18,81,1437,524,169,55,0,3,0.50987 +19,81,1428,523,176,56,0,3,0.48023 +20,81,1419,523,183,56,0,3,0.47883 +21,81,1409,524,183,55,0,3,0.47913 +22,81,1400,526,182,54,0,3,0.52221 +23,81,1389,527,181,54,0,3,0.58332 +24,81,1382,525,176,54,0,3,0.59784 +25,81,1373,530,177,55,0,3,0.63604 +26,81,1365,532,178,56,0,3,0.68597 +27,81,1354,534,178,55,0,3,0.76796 +28,81,1347,536,178,53,0,3,0.77188 +29,81,1337,539,179,56,0,3,0.77037 +30,81,1324,541,181,54,0,3,0.78102 +31,81,1316,547,181,55,0,3,0.7968 +32,81,1307,549,181,56,0,3,0.84683 +33,81,1299,538,181,56,0,3,0.92288 +34,81,1290,535,181,57,0,3,0.90603 +35,81,1281,533,181,57,0,3,0.92308 +36,81,1272,530,181,58,0,3,0.92308 +37,81,1263,528,181,58,0,3,0.9052 +38,81,1254,526,181,59,0,3,0.87482 +39,81,1245,525,181,59,0,3,0.84341 +40,81,1236,524,182,60,0,3,0.81331 +41,81,1226,526,186,60,0,3,0.77365 +42,81,1218,527,184,60,0,3,0.74284 +43,81,1210,529,183,59,0,3,0.79303 +44,81,1202,531,182,58,0,3,0.77948 +45,81,1195,533,180,58,0,3,0.74398 +46,81,1187,533,180,59,0,3,0.73002 +47,81,1179,534,180,60,0,3,0.69649 +48,81,1171,535,180,61,0,3,0.66396 +49,81,1163,536,181,62,0,3,0.64382 +50,81,1156,536,179,59,0,3,0.64157 +51,81,1148,538,175,58,0,3,0.6121 +52,81,1141,539,174,58,0,3,0.5846 +53,81,1134,539,173,56,0,3,0.62835 +54,81,1127,538,172,55,0,3,0.66422 +55,81,1120,537,171,54,0,3,0.70825 +56,81,1113,536,170,53,0,3,0.76381 +57,81,1106,533,169,53,0,3,0.79521 +58,81,1100,531,168,53,0,3,0.82084 +59,81,1093,529,170,54,0,3,0.82531 +60,81,1087,528,165,59,0,3,0.79347 +61,81,1081,526,162,59,0,3,0.82342 +62,81,1076,525,158,58,0,3,0.90076 +63,81,1071,524,155,57,0,3,0.87776 +64,81,1066,526,153,61,0,3,0.87547 +65,81,1061,526,150,61,0,3,0.88347 +66,81,1056,527,147,60,0,3,0.89466 +67,81,1051,528,145,59,0,3,0.91164 +68,81,1044,528,142,59,0,3,0.93124 +69,81,1037,529,140,58,0,3,0.94843 +70,81,1032,526,139,59,0,3,0.98036 +71,81,1027,526,136,60,0,3,0.98684 +72,81,1023,526,132,61,0,3,0.9886 +73,81,1017,525,129,61,0,3,0.9933 +74,81,1012,525,126,60,0,3,1 +75,81,1007,525,123,59,0,3,1 +76,81,1002,525,120,58,0,3,1 +77,81,997,524,117,58,0,3,1 +78,81,992,524,114,57,0,3,1 +79,81,987,524,111,56,0,3,1 +80,81,982,524,108,55,0,3,1 +81,81,979,524,105,55,0,3,1 +82,81,973,522,103,57,0,3,1 +83,81,968,521,100,59,0,3,1 +84,81,965,518,94,61,0,3,1 +85,81,961,519,92,60,0,3,1 +86,81,957,521,90,59,0,3,1 +87,81,953,523,89,58,0,3,1 +88,81,949,525,87,56,0,3,1 +89,81,945,527,85,55,0,3,1 +90,81,942,529,83,54,0,3,1 +91,81,937,527,84,60,0,3,1 +92,81,932,532,80,53,0,3,1 +93,81,928,534,79,53,0,3,1 +94,81,924,537,79,53,0,3,1 +95,81,920,536,78,53,0,3,1 +96,81,917,536,76,53,0,3,1 +97,81,913,536,74,53,0,3,1 +98,81,909,537,73,52,0,3,1 +99,81,905,537,71,52,0,3,1 +100,81,901,538,70,52,0,3,1 +101,81,897,538,70,52,0,3,1 +102,81,894,538,69,52,0,3,1 +103,81,890,537,69,51,0,3,1 +104,81,886,536,70,51,0,3,1 +105,81,883,535,69,51,0,3,1 +106,81,879,534,70,51,0,3,1 +107,81,875,533,70,51,0,3,1 +108,81,872,532,70,51,0,3,1 +109,81,868,531,70,51,0,3,1 +110,81,865,531,70,50,0,3,1 +111,81,864,532,65,52,0,3,1 +112,81,859,531,65,52,0,3,1 +113,81,855,531,65,52,0,3,1 +114,81,851,530,65,52,0,3,1 +115,81,846,530,65,52,0,3,1 +116,81,842,529,65,52,0,3,1 +117,81,838,529,65,52,0,3,1 +118,81,833,528,65,52,0,3,1 +119,81,829,528,65,52,0,3,1 +120,81,825,528,65,52,0,3,1 +121,81,820,528,66,51,0,3,1 +122,81,816,526,63,51,0,3,1 +123,81,814,526,64,51,0,3,1 +124,81,809,526,64,51,0,3,1 +125,81,805,526,64,51,0,3,1 +126,81,801,526,64,51,0,3,1 +127,81,797,526,63,51,0,3,1 +128,81,793,526,63,51,0,3,1 +129,81,789,526,63,51,0,3,1 +130,81,785,527,63,50,0,3,1 +131,81,781,530,63,50,0,3,1 +132,81,777,529,62,49,0,3,1 +133,81,773,528,61,49,0,3,1 +134,81,769,527,60,48,0,3,1 +135,81,765,527,60,47,0,3,1 +136,81,761,526,60,47,0,3,1 +137,81,757,525,60,47,0,3,1 +138,81,753,524,60,47,0,3,1 +139,81,750,523,59,48,0,3,1 +140,81,748,521,59,49,0,3,1 +141,81,745,522,59,49,0,3,1 +142,81,742,521,58,47,0,3,1 +143,81,739,520,58,46,0,3,1 +144,81,736,522,58,46,0,3,1 +145,81,731,523,58,45,0,3,1 +146,81,730,522,57,44,0,3,1 +147,81,727,524,57,45,0,3,1 +148,81,723,523,58,46,0,3,1 +149,81,719,522,59,47,0,3,1 +150,81,715,523,58,44,0,3,1 +151,81,711,527,58,43,0,3,1 +152,81,706,526,57,43,0,3,1 +153,81,701,525,56,44,0,3,1 +154,81,696,524,56,45,0,3,1 +155,81,692,523,55,44,0,3,1 +156,81,687,523,57,44,0,3,1 +157,81,683,523,56,44,0,3,1 +158,81,679,523,55,44,0,3,1 +159,81,675,524,55,43,0,3,1 +160,81,672,524,53,44,0,3,1 +161,81,668,528,53,42,0,3,1 +162,81,665,527,53,42,0,3,1 +163,81,662,527,53,42,0,3,1 +164,81,658,526,53,42,0,3,1 +165,81,655,526,53,42,0,3,1 +166,81,652,526,52,42,0,3,1 +167,81,649,525,52,43,0,3,1 +168,81,646,525,51,43,0,3,1 +169,81,643,525,51,43,0,3,1 +170,81,640,522,53,43,0,3,1 +171,81,636,523,52,41,0,3,1 +172,81,636,522,52,41,0,3,1 +173,81,633,523,52,40,0,3,1 +174,81,630,524,52,40,0,3,1 +175,81,626,522,53,41,0,3,1 +176,81,622,521,54,41,0,3,1 +177,81,622,519,52,40,0,3,1 +178,81,619,519,51,40,0,3,1 +179,81,618,521,51,39,0,3,1 +180,81,614,519,52,41,0,3,1 +181,81,612,520,51,41,0,3,1 +182,81,610,522,51,40,0,3,1 +183,81,608,522,50,39,0,3,1 +184,81,606,522,50,39,0,3,1 +185,81,604,522,50,39,0,3,1 +186,81,602,522,50,39,0,3,1 +187,81,600,522,50,39,0,3,1 +188,81,598,522,50,39,0,3,1 +189,81,596,522,50,39,0,3,1 +190,81,594,523,50,38,0,3,1 +191,81,593,524,50,37,0,3,1 +192,81,592,527,51,35,0,3,1 +193,81,589,527,50,36,0,3,1 +194,81,587,527,50,36,0,3,1 +195,81,585,527,50,36,0,3,1 +196,81,584,528,50,36,0,3,1 +197,81,582,527,50,36,0,3,1 +198,81,581,527,49,36,0,3,1 +199,81,580,527,48,36,0,3,1 +200,81,579,527,48,36,0,3,1 +201,81,577,527,48,36,0,3,1 +202,81,576,527,48,36,0,3,1 +203,81,575,527,48,36,0,3,1 +204,81,574,527,48,36,0,3,1 +205,81,573,526,49,36,0,3,1 +206,81,571,527,47,35,0,3,1 +207,81,571,528,47,35,0,3,1 +208,81,569,528,47,35,0,3,1 +209,81,568,528,47,36,0,3,1 +210,81,568,528,45,36,0,3,1 +211,81,569,530,45,36,0,3,1 +212,81,569,530,45,36,0,3,1 +213,81,569,531,45,35,0,3,1 +214,81,568,535,44,31,0,3,1 +215,81,569,533,44,31,0,3,1 +216,81,568,535,44,32,0,3,1 +217,81,569,533,44,33,0,3,1 +218,81,569,532,44,33,0,3,1 +219,81,570,531,44,34,0,3,1 +220,81,571,530,44,35,0,3,1 +221,81,571,529,44,35,0,3,1 +222,81,572,529,44,35,0,3,1 +223,81,573,530,44,34,0,3,1 +224,81,574,531,44,34,0,3,1 +225,81,575,532,44,33,0,3,1 +226,81,577,534,43,32,0,3,1 +227,81,578,533,43,32,0,3,1 +228,81,580,532,42,32,0,3,1 +229,81,580,532,42,32,0,3,1 +230,81,580,531,43,33,0,3,1 +231,81,583,534,42,32,0,3,1 +232,81,583,532,41,30,0,3,1 +233,81,587,532,41,30,0,3,1 +234,81,588,530,41,30,0,3,1 +235,81,589,529,41,30,0,3,1 +236,81,590,527,41,31,0,3,1 +237,81,592,526,40,31,0,3,1 +238,81,594,528,41,30,0,3,1 +239,81,599,525,41,31,0,3,1 +240,81,598,522,40,32,0,3,1 +241,81,601,523,40,31,0,3,1 +242,81,604,524,40,30,0,3,1 +243,81,606,523,40,29,0,3,1 +244,81,609,522,39,28,0,3,1 +245,81,612,523,39,28,0,3,1 +246,81,616,524,39,29,0,3,1 +247,81,618,521,39,28,0,3,1 +248,81,623,522,40,29,0,3,1 +249,81,625,521,40,29,0,3,1 +250,81,628,521,40,30,0,3,1 +251,81,633,522,39,29,0,3,1 +252,81,637,522,39,29,0,3,1 +253,81,641,522,39,29,0,3,1 +254,81,645,522,40,30,0,3,1 +255,81,649,522,40,30,0,3,1 +256,81,654,523,40,30,0,3,1 +257,81,659,523,38,29,0,3,1 +258,81,664,524,36,27,0,3,1 +259,81,669,525,35,26,0,3,1 +260,81,671,521,38,29,0,3,1 +261,81,676,522,38,29,0,3,1 +262,81,681,524,38,29,0,3,1 +263,81,685,523,37,29,0,3,1 +264,81,690,523,36,29,0,3,1 +265,81,694,522,36,29,0,3,1 +266,81,699,522,35,29,0,3,1 +267,81,704,522,34,29,0,3,1 +268,81,708,522,35,27,0,3,1 +269,81,713,521,35,26,0,3,1 +270,81,718,520,35,26,0,3,1 +271,81,722,518,35,26,0,3,1 +272,81,727,517,35,26,0,3,1 +273,81,731,516,35,26,0,3,1 +274,81,736,515,35,26,0,3,1 +275,81,739,516,35,26,0,3,1 +276,81,744,514,35,26,0,3,1 +277,81,749,513,35,26,0,3,1 +278,81,753,511,33,29,0,3,1 +279,81,757,513,35,26,0,3,1 +280,81,762,515,35,26,0,3,1 +281,81,765,514,35,26,0,3,1 +282,81,769,514,35,26,0,3,1 +283,81,773,514,35,26,0,3,1 +284,81,777,513,35,26,0,3,1 +285,81,781,513,35,26,0,3,1 +286,81,784,513,35,26,0,3,1 +287,81,788,512,35,26,0,3,1 +288,81,792,512,35,26,0,3,1 +289,81,796,512,35,26,0,3,1 +290,81,800,512,35,26,0,3,1 +291,81,805,513,34,24,0,3,1 +292,81,810,513,35,23,0,3,1 +293,81,813,513,36,24,0,3,1 +294,81,815,513,36,23,0,3,1 +295,81,814,512,37,24,0,3,1 +296,81,820,514,34,24,0,3,1 +297,81,820,512,38,25,0,3,1 +298,81,825,511,38,25,0,3,1 +299,81,828,512,36,26,0,3,1 +300,81,831,513,35,26,0,3,1 +301,81,833,513,35,26,0,3,1 +302,81,836,513,35,26,0,3,1 +303,81,840,515,35,25,0,3,1 +304,81,844,517,35,25,0,3,1 +305,81,845,518,34,25,0,3,1 +306,81,846,520,34,24,0,3,1 +307,81,849,522,34,24,0,3,1 +308,81,852,525,35,24,0,3,1 +309,81,854,524,35,24,0,3,1 +310,81,856,523,36,25,0,3,1 +311,81,857,523,37,25,0,3,1 +312,81,858,524,38,24,0,3,1 +313,81,859,524,39,24,0,3,1 +314,81,861,525,39,24,0,3,1 +315,81,862,524,39,24,0,3,1 +316,81,864,524,38,23,0,3,1 +317,81,866,524,37,22,0,3,1 +318,81,868,524,37,22,0,3,1 +319,81,870,524,36,22,0,3,1 +320,81,872,525,35,22,0,3,1 +321,81,871,523,37,21,0,3,1 +322,81,873,524,37,21,0,3,1 +323,81,874,523,37,21,0,3,1 +324,81,875,522,37,21,0,3,1 +325,81,876,521,37,22,0,3,1 +326,81,876,520,36,22,0,3,1 +327,81,876,520,35,22,0,3,1 +328,81,876,520,35,22,0,3,0.98188 +329,81,876,517,35,22,0,3,1 +330,81,877,516,35,22,0,3,1 +331,81,877,513,35,22,0,3,1 +332,81,875,510,35,22,0,3,1 +333,81,874,508,35,22,0,3,1 +334,81,873,505,35,23,0,3,1 +335,81,871,502,35,23,0,3,1 +336,81,870,500,35,22,0,3,1 +337,81,869,501,35,22,0,3,1 +338,81,868,502,35,22,0,3,1 +339,81,867,504,35,22,0,3,1 +340,81,866,500,36,22,0,3,1 +341,81,863,502,35,23,0,3,1 +342,81,863,503,35,23,0,3,1 +343,81,863,506,35,21,0,3,1 +344,81,860,510,35,21,0,3,1 +345,81,858,514,34,22,0,3,1 +346,81,856,518,35,23,0,3,1 +347,81,854,519,35,22,0,3,1 +348,81,852,520,35,22,0,3,1 +349,81,850,521,35,22,0,3,0.97222 +350,81,849,522,34,22,0,3,0.94286 +351,81,847,521,35,22,0,3,0.86111 +352,81,845,521,36,22,0,3,0.81081 +353,81,844,521,36,23,0,3,0.78378 +354,81,843,522,36,23,0,3,0.75676 +355,81,839,522,36,22,0,3,0.64865 +356,81,837,522,36,22,0,3,0.59459 +357,81,834,522,36,22,0,3,0.53467 +358,81,832,522,36,22,0,3,0.53467 +359,81,832,525,36,22,0,3,0.54054 +360,81,828,527,36,22,0,3,0.48649 +361,81,824,525,36,22,0,3,0.40541 +362,81,823,528,36,23,0,3,0.40541 +363,81,822,531,35,19,0,3,0.38889 +364,81,819,531,36,23,0,3,0.35135 +365,81,818,536,34,18,0,3,0.28571 +366,81,815,535,37,24,0,3,0.28947 +1,82,1019,487,28,15,0,3,1 +2,82,1021,480,26,15,0,3,1 +3,82,1022,486,27,15,0,3,1 +4,82,1026,483,25,15,0,3,1 +5,82,1028,484,26,16,0,3,1 +6,82,1031,495,26,17,0,3,1 +7,82,1031,487,27,17,0,3,1 +8,82,1032,494,27,17,0,3,1 +9,82,1035,496,27,15,0,3,1 +10,82,1037,501,26,14,0,3,1 +11,82,1035,494,26,15,0,3,1 +12,82,1037,499,27,15,0,3,1 +13,82,1036,490,27,15,0,3,1 +14,82,1037,490,27,15,0,3,1 +15,82,1038,490,28,16,0,3,1 +16,82,1039,490,28,16,0,3,1 +17,82,1041,491,27,16,0,3,1 +18,82,1042,491,28,16,0,3,1 +19,82,1044,490,28,16,0,3,0.9432 +20,82,1043,491,29,16,0,3,0.94118 +21,82,1044,491,29,16,0,3,0.88235 +22,82,1045,492,29,16,0,3,0.82157 +23,82,1046,492,29,16,0,3,0.75294 +24,82,1046,492,29,16,0,3,0.77059 +25,82,1048,496,29,16,0,3,0.64706 +26,82,1050,497,28,16,0,3,0.62069 +27,82,1051,498,28,16,0,3,0.71602 +28,82,1053,500,27,16,0,3,0.72269 +29,82,1053,503,26,16,0,3,0.78431 +30,82,1053,506,26,16,0,3,0.57516 +31,82,1055,512,28,17,0,3,0.62644 +32,82,1055,506,28,17,0,3,0.65517 +33,82,1055,500,29,17,0,3,0.72222 +34,82,1056,503,30,17,0,3,0.75806 +35,82,1058,496,30,19,0,3,0.75806 +36,82,1058,493,31,18,0,3,0.80263 +37,82,1059,491,31,17,0,3,0.84375 +38,82,1061,490,32,16,0,3,0.75936 +39,82,1060,489,31,17,0,3,0.73264 +40,82,1060,488,32,17,0,3,0.73737 +41,82,1061,487,32,17,0,3,0.78114 +42,82,1062,487,31,19,0,3,0.775 +43,82,1063,488,31,20,0,3,0.80357 +44,82,1063,489,31,20,0,3,0.82143 +45,82,1064,490,31,20,0,3,0.85714 +46,82,1065,491,30,20,0,3,0.87097 +47,82,1066,492,30,20,0,3,0.89247 +48,82,1067,493,30,20,0,3,0.94009 +49,82,1065,492,33,24,0,3,0.94824 +50,82,1070,492,30,20,0,3,1 +51,82,1072,496,31,21,0,3,1 +52,82,1072,495,31,21,0,3,1 +53,82,1073,495,30,20,0,3,1 +54,82,1075,495,30,21,0,3,1 +55,82,1077,495,30,22,0,3,1 +56,82,1074,495,30,20,0,3,1 +57,82,1074,493,30,20,0,3,1 +58,82,1075,491,29,20,0,3,1 +59,82,1075,491,29,19,0,3,1 +60,82,1075,491,30,19,0,3,1 +61,82,1078,489,29,18,0,3,1 +62,82,1078,487,28,19,0,3,1 +63,82,1077,487,28,19,0,3,1 +64,82,1081,487,30,20,0,3,1 +65,82,1081,488,28,19,0,3,1 +66,82,1081,489,26,19,0,3,1 +67,82,1082,491,24,18,0,3,1 +68,82,1080,491,26,18,0,3,1 +69,82,1078,491,28,19,0,3,1 +70,82,1075,490,28,19,0,3,1 +71,82,1075,490,27,17,0,3,1 +72,82,1074,488,29,22,0,3,1 +73,82,1073,489,29,21,0,3,1 +74,82,1072,490,29,20,0,3,1 +75,82,1071,492,30,18,0,3,1 +76,82,1068,491,30,19,0,3,1 +77,82,1066,491,30,19,0,3,1 +78,82,1064,491,30,20,0,3,1 +79,82,1063,488,28,18,0,3,1 +80,82,1061,488,27,18,0,3,1 +81,82,1060,489,25,18,0,3,1 +82,82,1057,488,27,19,0,3,1 +83,82,1055,488,28,19,0,3,1 +84,82,1052,488,30,19,0,3,1 +85,82,1049,489,29,18,0,3,1 +86,82,1046,490,28,18,0,3,1 +87,82,1043,491,27,18,0,3,1 +88,82,1041,492,26,19,0,3,1 +89,82,1038,493,26,19,0,3,1 +90,82,1036,495,25,19,0,3,1 +91,82,1034,498,29,19,0,3,1 +92,82,1032,498,28,18,0,3,1 +93,82,1029,499,28,18,0,3,1 +94,82,1024,499,30,19,0,3,1 +95,82,1020,500,30,19,0,3,1 +96,82,1019,503,31,20,0,3,1 +97,82,1015,503,31,20,0,3,1 +98,82,1011,503,31,20,0,3,1 +99,82,1007,502,31,20,0,3,1 +100,82,1004,502,31,20,0,3,1 +101,82,1001,502,31,20,0,3,1 +102,82,999,503,31,20,0,3,1 +103,82,997,505,31,19,0,3,1 +104,82,996,504,31,19,0,3,1 +105,82,990,504,30,18,0,3,1 +106,82,987,503,30,18,0,3,1 +107,82,985,502,30,19,0,3,1 +108,82,983,503,30,21,0,3,1 +109,82,980,502,30,20,0,3,1 +110,82,978,502,30,19,0,3,1 +111,82,973,501,30,20,0,3,1 +112,82,969,501,30,21,0,3,1 +113,82,966,501,29,20,0,3,1 +114,82,963,501,28,20,0,3,1 +115,82,960,501,27,20,0,3,1 +116,82,956,502,28,21,0,3,1 +117,82,952,501,28,21,0,3,1 +118,82,948,501,28,21,0,3,1 +119,82,944,501,29,21,0,3,1 +120,82,940,500,29,22,0,3,1 +121,82,937,500,29,22,0,3,1 +122,82,933,500,29,22,0,3,1 +123,82,929,499,30,23,0,3,1 +124,82,925,499,30,23,0,3,1 +125,82,922,499,30,23,0,3,0.98387 +126,82,918,500,30,23,0,3,1 +127,82,915,502,30,22,0,3,0.98036 +128,82,911,502,30,22,0,3,0.98177 +129,82,907,502,30,22,0,3,0.98177 +130,82,904,502,30,22,0,3,0.96353 +131,82,900,502,30,23,0,3,0.98253 +132,82,896,502,30,23,0,3,0.98118 +133,82,893,502,30,23,0,3,0.98118 +134,82,889,502,30,23,0,3,0.98118 +135,82,886,503,30,23,0,3,0.97984 +136,82,883,502,31,24,0,3,0.94375 +137,82,879,501,31,24,0,3,0.965 +138,82,876,501,31,24,0,3,0.9475 +139,82,873,501,31,24,0,3,0.9475 +140,82,870,501,31,24,0,3,0.93 +141,82,867,500,31,24,0,3,0.935 +142,82,864,500,31,24,0,3,0.91875 +143,82,860,500,31,24,0,3,0.935 +144,82,857,501,31,24,0,3,0.9125 +145,82,856,501,30,23,0,3,0.89516 +146,82,852,500,31,24,0,3,0.88625 +147,82,848,500,32,24,0,3,0.8897 +148,82,845,501,32,24,0,3,0.86424 +149,82,841,501,33,24,0,3,0.86824 +150,82,838,502,33,24,0,3,0.84118 +151,82,833,502,33,24,0,3,0.87647 +152,82,828,503,34,24,0,3,0.85371 +153,82,823,503,34,24,0,3,0.872 +154,82,819,504,34,24,0,3,0.872 +155,82,816,504,34,23,0,3,0.83929 +156,82,812,504,33,22,0,3,0.85678 +157,82,807,505,33,23,0,3,0.87132 +158,82,803,505,33,23,0,3,0.88971 +159,82,799,505,33,23,0,3,0.90809 +160,82,796,505,32,24,0,3,0.92727 +161,82,793,505,32,23,0,3,0.92929 +162,82,789,506,32,23,0,3,0.94318 +163,82,786,507,32,24,0,3,0.94182 +164,82,783,506,31,24,0,3,0.96 +165,82,780,506,31,24,0,3,0.96 +166,82,777,506,31,23,0,3,0.95833 +167,82,774,506,31,23,0,3,0.95833 +168,82,772,506,31,23,0,3,0.9375 +169,82,769,506,31,23,0,3,0.93359 +170,82,767,506,31,23,0,3,0.91146 +171,82,764,506,31,22,0,3,0.91304 +172,82,761,506,31,22,0,3,0.91304 +173,82,759,506,31,22,0,3,0.91304 +174,82,756,506,31,22,0,3,0.91304 +175,82,754,506,31,22,0,3,0.91304 +176,82,751,506,32,22,0,3,0.8946 +177,82,749,506,32,23,0,3,0.89268 +178,82,747,506,32,23,0,3,0.87121 +179,82,745,506,32,24,0,3,0.86909 +180,82,742,506,33,24,0,3,0.85176 +181,82,740,506,33,24,0,3,0.86 +182,82,738,506,33,24,0,3,0.84941 +183,82,736,506,33,25,0,3,0.8552 +184,82,734,507,32,25,0,3,0.86946 +185,82,732,508,32,25,0,3,0.85082 +186,82,731,507,33,26,0,3,0.8366 +187,82,728,507,33,26,0,3,0.86275 +188,82,726,507,33,26,0,3,0.85839 +189,82,724,508,33,26,0,3,0.85839 +190,82,722,508,33,26,0,3,0.86928 +191,82,719,509,34,25,0,3,0.88132 +192,82,717,509,34,26,0,3,0.9037 +193,82,715,510,34,25,0,3,0.93407 +194,82,713,510,34,25,0,3,0.96044 +195,82,711,511,34,25,0,3,0.98681 +196,82,709,511,34,25,0,3,0.98681 +197,82,708,511,34,25,0,3,0.98791 +198,82,707,512,34,25,0,3,0.97363 +199,82,705,512,34,25,0,3,0.98791 +200,82,704,513,34,25,0,3,0.97363 +201,82,703,513,34,25,0,3,0.97582 +202,82,701,513,34,25,0,3,0.97802 +203,82,700,514,34,25,0,3,0.96703 +204,82,699,514,34,25,0,3,0.97033 +205,82,698,515,34,25,0,3,0.96703 +206,82,696,515,34,25,0,3,0.99011 +207,82,695,516,34,25,0,3,0.99011 +208,82,694,517,34,25,0,3,1 +209,82,693,518,34,25,0,3,1 +210,82,692,519,34,25,0,3,1 +211,82,691,520,34,25,0,3,1 +212,82,692,523,34,25,0,3,1 +213,82,691,522,34,25,0,3,1 +214,82,690,522,34,25,0,3,1 +215,82,690,522,34,25,0,3,1 +216,82,690,523,35,26,0,3,1 +217,82,690,523,35,25,0,3,1 +218,82,690,523,35,25,0,3,1 +219,82,690,523,36,25,0,3,1 +220,82,690,523,36,25,0,3,1 +221,82,691,523,36,24,0,3,1 +222,82,691,523,36,24,0,3,1 +223,82,691,523,37,24,0,3,1 +224,82,691,523,37,24,0,3,1 +225,82,692,523,37,24,0,3,1 +226,82,693,527,39,29,0,3,1 +227,82,693,524,38,27,0,3,1 +228,82,694,524,38,28,0,3,1 +229,82,695,525,39,28,0,3,1 +230,82,695,523,40,29,0,3,1 +231,82,696,523,40,29,0,3,1 +232,82,698,523,39,29,0,3,1 +233,82,699,522,39,29,0,3,1 +234,82,700,521,40,29,0,3,1 +235,82,701,520,41,30,0,3,1 +236,82,704,523,41,29,0,3,1 +237,82,706,522,40,28,0,3,1 +238,82,708,521,40,28,0,3,1 +239,82,709,521,41,29,0,3,1 +240,82,711,519,42,30,0,3,1 +241,82,713,519,41,29,0,3,1 +242,82,717,520,39,28,0,3,1 +243,82,719,519,40,28,0,3,1 +244,82,722,518,40,29,0,3,1 +245,82,725,518,41,30,0,3,1 +246,82,728,518,41,30,0,3,1 +247,82,731,519,41,30,0,3,1 +248,82,734,520,41,30,0,3,1 +249,82,739,520,41,30,0,3,1 +250,82,741,520,41,30,0,3,1 +251,82,745,520,41,30,0,3,1 +252,82,750,521,40,29,0,3,1 +253,82,754,521,41,30,0,3,1 +254,82,759,522,40,29,0,3,1 +255,82,764,523,40,29,0,3,1 +256,82,769,522,40,30,0,3,1 +257,82,774,522,41,30,0,3,1 +258,82,779,521,41,31,0,3,1 +259,82,784,521,42,31,0,3,1 +260,82,789,520,42,32,0,3,1 +261,82,794,520,43,32,0,3,1 +262,82,799,520,44,32,0,3,1 +263,82,802,520,45,32,0,3,1 +264,82,806,520,45,33,0,3,1 +265,82,811,520,46,34,0,3,1 +266,82,818,520,43,33,0,3,1 +267,82,823,522,43,33,0,3,1 +268,82,828,524,44,34,0,3,1 +269,82,833,522,45,34,0,3,1 +270,82,839,520,45,35,0,3,1 +271,82,843,520,46,35,0,3,1 +272,82,848,520,46,35,0,3,1 +273,82,853,520,46,36,0,3,1 +274,82,859,517,46,36,0,3,1 +275,82,865,518,46,36,0,3,1 +276,82,869,517,47,36,0,3,1 +277,82,874,516,47,36,0,3,1 +278,82,879,516,48,36,0,3,1 +279,82,884,518,48,36,0,3,1 +280,82,889,520,49,36,0,3,1 +281,82,894,519,49,36,0,3,1 +282,82,899,519,49,36,0,3,1 +283,82,904,518,50,37,0,3,1 +284,82,909,518,50,37,0,3,1 +285,82,915,518,50,37,0,3,1 +286,82,920,518,50,37,0,3,1 +287,82,926,518,50,37,0,3,1 +288,82,931,518,50,38,0,3,1 +289,82,937,518,50,38,0,3,1 +290,82,942,518,50,38,0,3,1 +291,82,948,518,50,39,0,3,1 +292,82,953,517,50,40,0,3,1 +293,82,958,517,51,40,0,3,1 +294,82,963,517,51,40,0,3,1 +295,82,968,517,52,40,0,3,1 +296,82,972,518,53,39,0,3,1 +297,82,977,519,53,39,0,3,1 +298,82,982,520,54,39,0,3,1 +299,82,985,520,54,40,0,3,1 +300,82,989,521,54,40,0,3,1 +301,82,993,522,54,41,0,3,1 +302,82,999,523,52,38,0,3,1 +303,82,1003,524,53,40,0,3,1 +304,82,1007,525,54,42,0,3,1 +305,82,1012,527,55,43,0,3,1 +306,82,1016,530,55,43,0,3,1 +307,82,1020,531,55,42,0,3,1 +308,82,1024,532,55,42,0,3,1 +309,82,1028,533,56,42,0,3,1 +310,82,1032,534,56,42,0,3,1 +311,82,1036,535,57,42,0,3,1 +312,82,1040,536,57,42,0,3,1 +313,82,1045,538,57,41,0,3,1 +314,82,1049,536,57,43,0,3,1 +315,82,1054,535,57,45,0,3,1 +316,82,1057,535,58,45,0,3,1 +317,82,1060,536,59,45,0,3,1 +318,82,1063,537,60,45,0,3,1 +319,82,1067,538,60,45,0,3,1 +320,82,1071,537,60,45,0,3,1 +321,82,1074,537,60,45,0,3,1 +322,82,1077,537,61,45,0,3,1 +323,82,1081,537,61,45,0,3,1 +324,82,1084,537,62,45,0,3,1 +325,82,1088,537,62,45,0,3,1 +326,82,1090,536,62,46,0,3,1 +327,82,1092,536,62,46,0,3,1 +328,82,1094,536,63,47,0,3,1 +329,82,1097,532,62,48,0,3,1 +330,82,1097,532,65,47,0,3,1 +331,82,1099,529,64,48,0,3,1 +332,82,1101,526,64,49,0,3,1 +333,82,1103,524,64,49,0,3,1 +334,82,1105,521,64,50,0,3,1 +335,82,1108,519,63,50,0,3,1 +336,82,1109,517,64,51,0,3,1 +337,82,1111,519,64,51,0,3,1 +338,82,1113,521,65,51,0,3,1 +339,82,1113,520,67,51,0,3,1 +340,82,1113,519,69,52,0,3,1 +341,82,1114,521,69,53,0,3,1 +342,82,1115,524,69,54,0,3,1 +343,82,1119,528,70,54,0,3,1 +344,82,1117,529,69,55,0,3,1 +345,82,1118,536,73,54,0,3,1 +346,82,1120,540,73,53,0,3,1 +347,82,1122,543,73,53,0,3,1 +348,82,1123,545,73,54,0,3,1 +349,82,1124,548,74,54,0,3,1 +350,82,1126,551,74,54,0,3,1 +351,82,1126,550,75,55,0,3,1 +352,82,1127,550,75,55,0,3,1 +353,82,1128,550,75,56,0,3,1 +354,82,1128,552,75,56,0,3,1 +355,82,1129,555,75,56,0,3,1 +356,82,1129,555,77,58,0,3,1 +357,82,1129,555,78,59,0,3,1 +358,82,1130,555,79,60,0,3,1 +359,82,1130,557,80,60,0,3,1 +360,82,1130,559,81,61,0,3,1 +361,82,1131,561,81,62,0,3,1 +362,82,1131,563,83,62,0,3,1 +363,82,1132,565,83,63,0,3,1 +364,82,1132,567,84,64,0,3,1 +365,82,1133,569,85,65,0,3,1 +366,82,1133,571,86,66,0,3,1 +367,82,1134,574,87,67,0,3,1 +368,82,1134,577,88,68,0,3,1 +369,82,1134,579,89,67,0,3,1 +370,82,1135,582,90,66,0,3,1 +371,82,1135,582,90,67,0,3,1 +372,82,1136,582,90,68,0,3,1 +373,82,1136,583,91,69,0,3,1 +374,82,1137,583,91,70,0,3,1 +375,82,602,169,127,0,3,1 +441,82,359,604,171,128,0,3,1 +442,82,334,605,171,128,0,3,1 +443,82,309,606,172,129,0,3,0.99546 +444,82,280,608,176,130,0,3,0.97757 +445,82,252,610,180,132,0,3,0.96037 +446,82,225,611,178,133,0,3,0.95139 +447,82,196,613,181,134,0,3,0.9396 +448,82,167,614,183,133,0,3,0.91896 +449,82,136,615,183,134,0,3,0.90531 +450,82,106,616,183,136,0,3,0.88765 +451,82,75,617,184,138,0,3,0.87221 +452,82,43,618,186,141,0,3,0.86292 +453,82,10,618,193,149,0,3,0.84873 +454,82,-17,620,185,144,0,3,0.7564 +455,82,-45,624,180,147,0,3,0.58948 +456,82,-79,629,180,147,0,3,0.39779 +515,83,1860,522,89,74,0,3,0.47556 +516,83,1835,521,88,72,0,3,0.80422 +517,83,1810,521,88,70,0,3,0.86422 +518,83,1786,520,86,70,0,3,0.89639 +519,83,1762,519,85,70,0,3,0.93957 +520,83,1738,518,83,70,0,3,0.98625 +521,83,1714,517,82,70,0,3,1 +522,83,1690,516,88,70,0,3,1 +523,83,1667,515,87,71,0,3,1 +524,83,1644,515,86,71,0,3,1 +525,83,1621,515,85,72,0,3,1 +526,83,1599,515,87,72,0,3,1 +527,83,1578,516,89,71,0,3,1 +528,83,1555,517,89,72,0,3,1 +529,83,1535,517,89,71,0,3,1 +530,83,1515,517,90,71,0,3,1 +531,83,1493,516,90,74,0,3,1 +532,83,1474,516,91,74,0,3,1 +533,83,1456,517,91,74,0,3,1 +534,83,1438,518,91,74,0,3,1 +535,83,1420,519,92,74,0,3,1 +536,83,1403,518,93,74,0,3,1 +537,83,1387,517,93,74,0,3,1 +538,83,1371,525,94,74,0,3,1 +539,83,1354,524,93,75,0,3,1 +540,83,1337,525,94,75,0,3,1 +541,83,1320,526,96,75,0,3,1 +542,83,1304,530,98,76,0,3,1 +543,83,1288,530,99,77,0,3,1 +544,83,1273,531,100,78,0,3,1 +545,83,1259,528,102,79,0,3,1 +546,83,1246,527,102,80,0,3,0.99269 +547,83,1230,526,103,79,0,3,0.98558 +548,83,1216,524,103,79,0,3,0.97163 +549,83,1203,522,103,79,0,3,0.96454 +550,83,1190,521,106,80,0,3,0.94369 +551,83,1177,521,110,80,0,3,0.88277 +552,83,1166,521,110,80,0,3,1 +553,83,1155,521,111,81,0,3,1 +554,83,1144,521,112,81,0,3,1 +555,83,1133,521,113,82,0,3,1 +556,83,1122,518,113,83,0,3,1 +557,83,1112,515,112,85,0,3,1 +558,83,1102,514,115,85,0,3,1 +559,83,1093,514,117,85,0,3,1 +560,83,1084,514,119,85,0,3,1 +561,83,1073,515,121,83,0,3,1 +562,83,1063,516,122,85,0,3,1 +563,83,1055,515,123,86,0,3,1 +564,83,1047,514,125,88,0,3,1 +565,83,1040,513,126,90,0,3,1 +566,83,1030,514,129,91,0,3,1 +567,83,1023,516,130,91,0,3,1 +568,83,1017,518,131,91,0,3,1 +569,83,1009,518,133,91,0,3,1 +570,83,1002,518,134,92,0,3,1 +571,83,995,519,135,91,0,3,1 +572,83,988,519,136,92,0,3,1 +573,83,981,520,138,92,0,3,1 +574,83,976,520,139,92,0,3,1 +575,83,971,520,141,93,0,3,1 +576,83,965,522,142,93,0,3,1 +577,83,960,524,143,93,0,3,1 +578,83,955,523,144,94,0,3,1 +579,83,951,523,145,94,0,3,1 +580,83,947,523,146,94,0,3,1 +581,83,943,523,148,95,0,3,1 +582,83,940,523,149,96,0,3,1 +583,83,937,523,150,98,0,3,1 +584,83,934,523,151,99,0,3,1 +585,83,931,523,153,101,0,3,1 +586,83,930,524,154,103,0,3,1 +587,83,929,523,155,104,0,3,1 +588,83,927,522,156,106,0,3,1 +589,83,925,522,158,108,0,3,1 +590,83,925,523,160,110,0,3,1 +591,83,923,522,162,112,0,3,1 +592,83,924,521,162,114,0,3,1 +593,83,925,521,163,115,0,3,1 +594,83,926,521,164,116,0,3,1 +595,83,927,521,165,118,0,3,1 +596,83,929,523,166,116,0,3,1 +597,83,931,525,168,115,0,3,1 +598,83,934,527,169,114,0,3,1 +599,83,937,526,171,116,0,3,1 +600,83,940,526,173,117,0,3,1 +601,83,943,526,175,118,0,3,1 +602,83,946,526,177,119,0,3,1 +603,83,949,526,179,121,0,3,1 +604,83,952,531,180,121,0,3,1 +605,83,956,529,182,123,0,3,1 +606,83,960,529,184,124,0,3,1 +607,83,964,530,187,124,0,3,1 +608,83,968,531,189,124,0,3,1 +609,83,972,532,192,124,0,3,1 +610,83,976,532,194,127,0,3,1 +611,83,980,533,196,130,0,3,1 +612,83,984,534,199,132,0,3,1 +613,83,988,534,201,136,0,3,1 +614,83,992,535,203,138,0,3,1 +615,83,997,536,205,141,0,3,1 +616,83,1001,539,209,142,0,3,1 +617,83,1006,542,213,144,0,3,1 +618,83,1007,544,214,146,0,3,1 +619,83,1013,544,218,147,0,3,1 +620,83,1018,546,220,149,0,3,1 +621,83,1023,548,223,151,0,3,1 +622,83,1029,550,225,153,0,3,1 +623,83,1034,552,227,155,0,3,1 +624,83,1039,554,230,157,0,3,1 +625,83,1045,556,232,159,0,3,1 +626,83,1052,555,237,162,0,3,1 +627,83,1060,555,241,165,0,3,1 +628,83,1066,556,246,168,0,3,1 +629,83,1073,554,249,171,0,3,1 +630,83,1082,555,254,171,0,3,1 +631,83,1091,556,259,171,0,3,1 +632,83,1099,558,264,174,0,3,1 +633,83,1108,560,268,178,0,3,1 +634,83,1117,562,273,182,0,3,1 +635,83,1131,561,275,184,0,3,1 +636,83,1139,567,281,189,0,3,1 +637,83,1151,571,282,191,0,3,1 +638,83,1161,574,289,195,0,3,1 +639,83,1171,577,297,199,0,3,1 +640,83,1182,581,304,203,0,3,1 +641,83,1195,584,309,207,0,3,1 +642,83,1208,587,315,212,0,3,1 +643,83,1221,590,321,217,0,3,1 +644,83,1234,593,327,222,0,3,1 +645,83,1247,597,333,226,0,3,1 +646,83,1259,600,344,230,0,3,1 +647,83,1272,604,354,234,0,3,1 +648,83,1286,606,363,241,0,3,1 +649,83,1303,606,370,241,0,3,1 +650,83,1318,612,381,251,0,3,1 +651,83,1335,611,390,253,0,3,1 +652,83,1353,609,398,260,0,3,1 +653,83,1371,605,411,265,0,3,1 +654,83,1389,601,425,270,0,3,1 +655,83,1410,608,438,279,0,3,1 +656,83,1430,606,450,284,0,3,1 +657,83,1457,614,460,291,0,3,1 +658,83,1476,623,464,301,0,3,0.95699 +659,83,1496,633,467,311,0,3,0.90812 +660,83,1516,643,471,321,0,3,0.85805 +661,83,1538,653,474,326,0,3,0.80632 +662,83,1560,663,477,332,0,3,0.75523 +663,83,1582,673,480,338,0,3,0.70478 +664,83,1604,684,483,343,0,3,0.65496 +665,83,1627,693,490,354,0,3,0.59878 +666,83,1652,702,492,344,0,3,0.54564 +667,83,1675,706,492,341,0,3,0.49899 +668,83,1702,708,493,342,0,3,0.44332 +669,83,1729,711,495,342,0,3,0.3871 +670,83,1758,713,495,342,0,3,0.32863 +671,83,1788,716,494,342,0,3,0.26869 +672,83,1819,718,492,345,0,3,0.2069 +673,83,1850,720,490,348,0,3,0.1446 +674,83,1882,723,488,350,0,3,0.079755 +520,84,1896,552,95,53,0,3,0.26042 +521,84,1869,544,92,61,0,3,0.52584 +522,84,1844,543,93,61,0,3,0.64962 +523,84,1819,543,95,60,0,3,0.75666 +524,84,1794,543,97,59,0,3,0.73367 +525,84,1769,543,99,59,0,3,0.72467 +526,84,1745,543,100,58,0,3,0.71807 +527,84,1721,543,101,57,0,3,0.71129 +528,84,1698,543,101,56,0,3,0.70623 +529,84,1674,543,102,55,0,3,0.73856 +530,84,1651,543,102,54,0,3,0.78076 +531,84,1628,542,103,58,0,3,0.78814 +532,84,1609,544,101,59,0,3,0.78758 +533,84,1586,545,102,60,0,3,0.79803 +534,84,1567,547,101,60,0,3,0.80039 +535,84,1548,545,101,61,0,3,0.83001 +536,84,1528,541,100,61,0,3,0.87863 +537,84,1508,538,100,60,0,3,0.85587 +538,84,1489,548,99,61,0,3,0.87226 +539,84,1470,546,99,61,0,3,0.88129 +540,84,1450,550,101,61,0,3,0.88488 +541,84,1435,546,100,61,0,3,0.90945 +542,84,1416,554,100,61,0,3,0.91185 +543,84,1398,553,100,61,0,3,0.92973 +544,84,1381,553,100,61,0,3,0.94027 +545,84,1364,550,100,61,0,3,0.9564 +546,84,1348,547,99,61,0,3,0.96935 +547,84,1332,546,100,60,0,3,0.97663 +548,84,1316,545,102,60,0,3,0.97995 +549,84,1302,543,99,60,0,3,0.9941 +550,84,1289,541,95,60,0,3,0.91667 +551,84,1271,540,100,61,0,3,0.83168 +552,84,1256,539,100,61,0,3,0.79208 +553,84,1242,539,100,61,0,3,0.75248 +554,84,1228,539,100,61,0,3,0.71287 +555,84,1214,536,100,61,0,3,0.67327 +556,84,1201,534,100,61,0,3,0.65347 +557,84,1189,533,100,61,0,3,0.64356 +558,84,1177,532,100,61,0,3,0.59406 +559,84,1165,530,100,61,0,3,0.54455 +560,84,1153,529,100,61,0,3,0.49505 +561,84,1141,528,100,61,0,3,0.46535 +562,84,1129,528,100,61,0,3,0.43564 +563,84,1118,529,100,61,0,3,0.39604 +564,84,1107,530,100,61,0,3,0.34653 +565,84,1097,532,99,61,0,3,0.3 +566,84,1086,532,100,61,0,3,0.26733 +567,84,1076,532,100,61,0,3,0.22772 +568,84,1066,533,100,61,0,3,0.17822 +569,84,1056,533,100,61,0,3,0.13861 +570,84,1046,534,100,61,0,3,0.09901 +571,84,1039,533,100,61,0,3,0.089109 +572,84,1029,535,100,61,0,3,0.049505 +573,84,1020,537,100,61,0,3,0.009901 +574,84,1009,536,100,61,0,3,0 +1,85,909,478,41,44,0,3,1 +2,85,911,472,41,42,0,3,1 +3,85,912,480,41,41,0,3,1 +4,85,914,476,40,42,0,3,1 +5,85,916,476,40,43,0,3,1 +6,85,916,488,40,44,0,3,1 +7,85,917,478,40,45,0,3,1 +8,85,918,486,41,45,0,3,1 +9,85,919,486,40,45,0,3,1 +10,85,920,487,40,45,0,3,1 +11,85,916,485,41,44,0,3,1 +12,85,917,488,41,44,0,3,1 +13,85,920,478,40,43,0,3,1 +14,85,918,482,40,42,0,3,0.98639 +15,85,919,481,40,42,0,3,0.97277 +16,85,920,480,41,42,0,3,0.97674 +17,85,920,482,41,43,0,3,0.90909 +18,85,920,481,41,43,0,3,0.95455 +19,85,921,480,41,43,0,3,0.97727 +20,85,920,481,41,43,0,3,0.95455 +21,85,922,480,41,44,0,3,0.97778 +22,85,921,481,41,43,0,3,1 +23,85,921,482,40,42,0,3,1 +24,85,922,485,41,42,0,3,1 +25,85,922,487,41,42,0,3,1 +26,85,922,489,42,42,0,3,1 +27,85,922,490,42,43,0,3,1 +28,85,922,492,43,43,0,3,1 +29,85,922,494,42,43,0,3,1 +30,85,923,497,41,43,0,3,1 +31,85,922,503,42,49,0,3,1 +32,85,922,496,42,48,0,3,1 +33,85,922,489,42,48,0,3,1 +34,85,921,494,43,49,0,3,1 +35,85,924,485,43,47,0,3,1 +36,85,924,484,43,45,0,3,1 +37,85,925,483,43,44,0,3,1 +38,85,924,480,43,44,0,3,1 +39,85,925,479,42,44,0,3,1 +40,85,926,478,42,44,0,3,1 +41,85,927,478,42,43,0,3,1 +42,85,927,478,42,44,0,3,1 +43,85,927,478,42,45,0,3,1 +44,85,927,479,42,45,0,3,1 +45,85,927,479,42,46,0,3,1 +46,85,927,480,43,47,0,3,1 +47,85,927,480,43,48,0,3,1 +48,85,927,481,43,48,0,3,1 +49,85,927,481,43,49,0,3,1 +50,85,927,482,44,50,0,3,1 +51,85,927,484,44,49,0,3,1 +52,85,927,483,43,50,0,3,1 +53,85,927,483,43,50,0,3,1 +54,85,927,483,43,50,0,3,1 +55,85,927,483,43,50,0,3,1 +56,85,927,483,43,50,0,3,1 +57,85,926,481,43,50,0,3,1 +58,85,926,479,43,51,0,3,1 +59,85,926,478,43,51,0,3,1 +60,85,926,477,43,51,0,3,1 +61,85,926,477,43,50,0,3,1 +62,85,926,474,44,50,0,3,1 +63,85,925,475,44,50,0,3,1 +64,85,925,476,43,50,0,3,1 +65,85,924,477,43,50,0,3,1 +66,85,924,478,43,50,0,3,1 +67,85,922,478,43,50,0,3,1 +68,85,920,478,44,50,0,3,1 +69,85,919,478,43,50,0,3,1 +70,85,917,478,44,50,0,3,1 +71,85,916,478,44,50,0,3,1 +72,85,913,477,44,50,0,3,1 +73,85,911,477,44,50,0,3,1 +74,85,909,476,44,50,0,3,1 +75,85,907,476,44,50,0,3,1 +76,85,905,475,44,50,0,3,1 +77,85,902,475,44,50,0,3,1 +78,85,900,474,44,50,0,3,1 +79,85,898,474,44,50,0,3,1 +80,85,896,473,44,50,0,3,1 +81,85,894,473,44,50,0,3,1 +82,85,891,473,43,50,0,3,1 +83,85,888,474,43,50,0,3,1 +84,85,885,475,43,50,0,3,1 +85,85,882,475,43,51,0,3,1 +86,85,879,476,43,51,0,3,1 +87,85,876,477,43,51,0,3,1 +88,85,873,477,43,52,0,3,1 +89,85,870,478,43,52,0,3,1 +90,85,867,479,43,52,0,3,1 +91,85,864,480,43,52,0,3,1 +92,85,860,480,43,52,0,3,1 +93,85,856,481,43,52,0,3,1 +94,85,852,482,44,52,0,3,1 +95,85,849,483,43,52,0,3,1 +96,85,845,484,44,52,0,3,1 +97,85,841,485,44,51,0,3,1 +98,85,838,486,43,51,0,3,1 +99,85,834,487,44,51,0,3,1 +100,85,830,488,44,51,0,3,1 +101,85,827,489,44,51,0,3,1 +102,85,823,488,45,51,0,3,1 +103,85,819,488,46,51,0,3,1 +104,85,816,487,46,52,0,3,1 +105,85,812,487,47,51,0,3,1 +106,85,808,486,48,52,0,3,1 +107,85,805,486,48,52,0,3,1 +108,85,801,485,47,52,0,3,1 +109,85,798,485,46,52,0,3,1 +110,85,794,485,45,51,0,3,1 +111,85,791,485,44,51,0,3,1 +112,85,786,485,44,51,0,3,1 +113,85,781,485,45,51,0,3,1 +114,85,776,485,46,51,0,3,1 +115,85,771,485,47,51,0,3,1 +116,85,767,485,47,51,0,3,1 +117,85,762,485,47,51,0,3,1 +118,85,757,485,48,51,0,3,1 +119,85,752,485,49,51,0,3,1 +120,85,747,485,50,51,0,3,1 +121,85,743,486,50,51,0,3,1 +122,85,739,486,50,51,0,3,1 +123,85,735,486,50,51,0,3,1 +124,85,731,486,50,51,0,3,1 +125,85,727,487,50,51,0,3,1 +126,85,723,487,50,51,0,3,1 +127,85,719,487,50,51,0,3,1 +128,85,715,488,50,51,0,3,1 +129,85,711,488,50,51,0,3,1 +130,85,707,488,50,51,0,3,1 +131,85,703,489,51,51,0,3,0.98891 +132,85,698,488,51,52,0,3,0.98875 +133,85,694,488,51,52,0,3,0.9775 +134,85,690,488,51,53,0,3,0.97792 +135,85,686,487,51,54,0,3,0.96853 +136,85,682,487,51,55,0,3,0.95604 +137,85,678,487,50,55,0,3,0.95518 +138,85,674,486,50,56,0,3,0.94496 +139,85,670,486,50,57,0,3,0.93306 +140,85,666,486,50,57,0,3,1 +141,85,662,486,50,58,0,3,1 +142,85,658,486,50,58,0,3,1 +143,85,654,486,50,58,0,3,1 +144,85,650,486,50,58,0,3,1 +145,85,646,486,50,59,0,3,1 +146,85,642,487,50,58,0,3,1 +147,85,638,487,50,58,0,3,1 +148,85,634,487,50,59,0,3,1 +149,85,630,487,50,59,0,3,1 +150,85,626,487,50,59,0,3,1 +151,85,623,488,50,59,0,3,1 +152,85,618,488,50,59,0,3,1 +153,85,613,488,50,59,0,3,1 +154,85,608,488,51,59,0,3,1 +155,85,603,489,51,59,0,3,1 +156,85,599,489,51,59,0,3,1 +157,85,594,489,51,59,0,3,1 +158,85,589,490,51,59,0,3,1 +159,85,584,490,52,59,0,3,1 +160,85,579,490,52,59,0,3,1 +161,85,575,491,52,59,0,3,1 +162,85,570,492,52,59,0,3,1 +163,85,566,493,52,59,0,3,1 +164,85,562,494,52,59,0,3,1 +165,85,558,495,52,59,0,3,1 +166,85,554,494,52,59,0,3,1 +167,85,550,494,53,58,0,3,0.84181 +168,85,547,493,53,59,0,3,0.85556 +169,85,543,493,54,58,0,3,0.85978 +170,85,539,492,55,58,0,3,0.86229 +171,85,536,492,55,58,0,3,0.86229 +172,85,533,492,55,58,0,3,0.85835 +173,85,531,492,55,58,0,3,0.85835 +174,85,528,492,55,58,0,3,1 +175,85,526,492,55,58,0,3,1 +176,85,523,492,55,58,0,3,1 +177,85,521,492,55,58,0,3,1 +178,85,518,492,55,58,0,3,1 +179,85,516,492,55,58,0,3,1 +180,85,513,492,55,58,0,3,1 +181,85,511,493,55,58,0,3,1 +182,85,507,493,56,58,0,3,0.86798 +183,85,504,494,56,58,0,3,0.87898 +184,85,501,495,56,57,0,3,0.88022 +185,85,498,496,56,57,0,3,0.89111 +186,85,495,497,56,56,0,3,0.90305 +187,85,492,497,56,57,0,3,0.90472 +188,85,489,498,56,56,0,3,0.92675 +189,85,486,499,56,56,0,3,0.94768 +190,85,483,500,56,55,0,3,0.94674 +191,85,480,501,56,55,0,3,0.93421 +192,85,477,501,57,55,0,3,0.94612 +193,85,475,501,57,56,0,3,0.96824 +194,85,473,501,57,57,0,3,0.9893 +195,85,471,501,57,57,0,3,1 +196,85,469,502,57,57,0,3,1 +197,85,466,502,58,58,0,3,1 +198,85,464,502,58,58,0,3,1 +199,85,462,502,58,59,0,3,1 +200,85,460,502,58,60,0,3,1 +201,85,458,503,59,60,0,3,1 +202,85,456,503,59,61,0,3,1 +203,85,455,504,59,61,0,3,1 +204,85,453,505,59,61,0,3,1 +205,85,452,506,59,61,0,3,1 +206,85,451,507,59,61,0,3,1 +207,85,449,508,59,61,0,3,1 +208,85,448,509,59,61,0,3,1 +209,85,446,510,59,61,0,3,1 +210,85,445,511,59,61,0,3,1 +211,85,444,512,59,61,0,3,1 +212,85,443,512,59,61,0,3,1 +213,85,442,512,59,61,0,3,1 +214,85,441,512,59,61,0,3,1 +215,85,440,513,59,61,0,3,1 +216,85,439,513,59,61,0,3,1 +217,85,439,513,59,61,0,3,1 +218,85,439,513,59,61,0,3,1 +219,85,439,513,59,61,0,3,1 +220,85,439,513,59,61,0,3,1 +221,85,439,514,59,60,0,3,1 +222,85,439,514,59,60,0,3,1 +223,85,439,514,59,60,0,3,1 +224,85,439,514,59,60,0,3,1 +225,85,439,514,59,61,0,3,1 +226,85,439,515,59,60,0,3,1 +227,85,439,515,59,60,0,3,1 +228,85,439,515,59,61,0,3,1 +229,85,439,515,59,61,0,3,1 +230,85,439,515,59,61,0,3,1 +231,85,439,516,59,61,0,3,1 +232,85,439,515,59,61,0,3,1 +233,85,440,514,59,61,0,3,1 +234,85,441,513,58,61,0,3,1 +235,85,442,513,58,60,0,3,1 +236,85,443,511,59,63,0,3,1 +237,85,444,510,60,65,0,3,1 +238,85,446,509,60,68,0,3,1 +239,85,447,509,60,66,0,3,1 +240,85,449,510,59,63,0,3,1 +241,85,451,511,59,61,0,3,1 +242,85,453,510,59,61,0,3,1 +243,85,455,510,60,61,0,3,1 +244,85,458,510,60,60,0,3,1 +245,85,460,510,61,60,0,3,1 +246,85,463,510,61,60,0,3,1 +247,85,465,509,62,60,0,3,1 +248,85,468,509,62,60,0,3,1 +249,85,470,509,63,60,0,3,1 +250,85,473,509,63,60,0,3,1 +251,85,476,509,64,60,0,3,1 +252,85,480,513,64,59,0,3,1 +253,85,484,512,64,60,0,3,1 +254,85,489,512,63,60,0,3,1 +255,85,493,511,63,62,0,3,0.99107 +256,85,498,511,62,62,0,3,0.99118 +257,85,503,511,62,63,0,3,0.99157 +258,85,505,514,62,61,0,3,0.97619 +259,85,510,513,62,61,0,3,0.97696 +260,85,515,512,62,61,0,3,0.97773 +261,85,521,512,62,61,0,3,0.9703 +262,85,523,514,63,61,0,3,0.95413 +263,85,528,514,63,61,0,3,0.9496 +264,85,533,514,63,61,0,3,0.94556 +265,85,538,514,63,61,0,3,0.94204 +266,85,543,514,63,62,0,3,0.93725 +267,85,548,514,63,62,0,3,0.93452 +268,85,553,514,63,62,0,3,0.93229 +269,85,558,515,63,62,0,3,0.9256 +270,85,562,512,63,61,0,3,0.94556 +271,85,567,509,62,61,0,3,0.95904 +272,85,571,508,62,61,0,3,0.96416 +273,85,576,508,62,61,0,3,0.96339 +274,85,581,507,62,61,0,3,0.96928 +275,85,586,507,61,61,0,3,0.97138 +276,85,591,506,61,62,0,3,0.97235 +277,85,595,506,62,61,0,3,0.98029 +278,85,600,505,61,62,0,3,0.98592 +279,85,605,505,61,61,0,3,0.98959 +280,85,610,504,61,62,0,3,0.99155 +281,85,615,504,61,62,0,3,0.99437 +282,85,619,504,61,62,0,3,1 +283,85,624,504,61,63,0,3,1 +284,85,628,504,62,64,0,3,1 +285,85,633,504,62,64,0,3,1 +286,85,637,505,63,64,0,3,1 +287,85,642,505,62,65,0,3,1 +288,85,646,505,63,65,0,3,1 +289,85,651,505,63,66,0,3,1 +290,85,655,505,64,67,0,3,1 +291,85,660,506,64,67,0,3,1 +292,85,664,506,64,67,0,3,1 +293,85,668,506,64,67,0,3,1 +294,85,672,506,64,67,0,3,1 +295,85,676,506,64,68,0,3,1 +296,85,681,507,64,67,0,3,1 +297,85,685,507,64,67,0,3,1 +298,85,689,507,64,68,0,3,1 +299,85,693,507,64,68,0,3,1 +300,85,697,507,64,68,0,3,1 +301,85,702,508,64,68,0,3,1 +302,85,705,509,64,68,0,3,1 +303,85,708,510,65,68,0,3,1 +304,85,711,511,66,68,0,3,1 +305,85,715,512,65,68,0,3,1 +306,85,718,513,66,68,0,3,1 +307,85,721,514,67,68,0,3,1 +308,85,725,515,66,68,0,3,1 +309,85,728,516,67,68,0,3,1 +310,85,731,517,68,68,0,3,1 +311,85,735,518,68,69,0,3,1 +312,85,738,517,67,69,0,3,1 +313,85,741,517,67,69,0,3,1 +314,85,744,517,67,68,0,3,1 +315,85,747,517,66,68,0,3,1 +316,85,750,517,66,68,0,3,1 +317,85,753,516,66,68,0,3,1 +318,85,756,516,65,68,0,3,1 +319,85,759,516,65,67,0,3,1 +320,85,762,516,65,67,0,3,1 +321,85,765,516,65,67,0,3,1 +322,85,766,515,65,67,0,3,1 +323,85,767,514,66,67,0,3,1 +324,85,768,513,67,67,0,3,1 +325,85,769,512,68,68,0,3,1 +326,85,771,511,68,68,0,3,1 +327,85,772,510,69,68,0,3,1 +328,85,773,509,70,69,0,3,1 +329,85,774,508,71,69,0,3,1 +330,85,775,507,72,69,0,3,1 +331,85,777,506,72,70,0,3,1 +332,85,777,504,72,70,0,3,1 +333,85,778,502,72,71,0,3,1 +334,85,779,501,72,71,0,3,1 +335,85,779,499,73,71,0,3,1 +336,85,780,497,73,71,0,3,1 +337,85,780,497,73,71,0,3,1 +338,85,780,497,74,71,0,3,1 +339,85,780,497,74,71,0,3,1 +340,85,781,498,74,71,0,3,1 +341,85,782,501,74,72,0,3,1 +342,85,781,503,73,72,0,3,1 +343,85,780,506,73,71,0,3,1 +344,85,779,508,73,71,0,3,1 +345,85,779,511,72,71,0,3,1 +346,85,779,515,72,71,0,3,1 +347,85,779,516,71,73,0,3,1 +348,85,778,516,72,73,0,3,1 +349,85,778,517,72,72,0,3,1 +350,85,778,517,72,72,0,3,1 +351,85,778,518,73,71,0,3,1 +352,85,777,518,74,72,0,3,1 +353,85,777,519,74,72,0,3,1 +354,85,777,520,74,72,0,3,1 +355,85,776,521,75,72,0,3,1 +356,85,776,522,75,72,0,3,1 +357,85,776,523,75,73,0,3,1 +358,85,775,523,74,74,0,3,1 +359,85,774,523,74,76,0,3,1 +360,85,773,523,73,77,0,3,1 +361,85,772,523,73,79,0,3,1 +362,85,771,525,73,79,0,3,1 +363,85,771,527,72,79,0,3,1 +364,85,770,529,72,79,0,3,1 +365,85,770,531,72,79,0,3,1 +366,85,769,533,72,79,0,3,1 +367,85,769,535,71,79,0,3,1 +368,85,768,537,72,79,0,3,1 +369,85,768,539,71,79,0,3,1 +370,85,767,541,71,79,0,3,1 +371,85,767,544,71,78,0,3,1 +372,85,764,543,72,74,0,3,1 +373,85,760,541,76,82,0,3,1 +374,85,759,541,76,82,0,3,1 +375,85,758,542,76,81,0,3,1 +376,85,757,543,76,80,0,3,1 +377,85,756,544,76,80,0,3,1 +378,85,752,542,77,79,0,3,1 +379,85,749,540,77,78,0,3,1 +380,85,745,538,78,77,0,3,1 +381,85,742,536,78,77,0,3,1 +382,85,737,533,79,78,0,3,1 +383,85,732,531,80,79,0,3,1 +384,85,727,529,81,80,0,3,1 +385,85,722,527,82,81,0,3,1 +386,85,717,526,82,79,0,3,1 +387,85,713,525,81,78,0,3,1 +388,85,709,524,80,76,0,3,1 +389,85,705,523,79,75,0,3,1 +390,85,701,522,79,74,0,3,1 +391,85,697,520,77,75,0,3,1 +392,85,689,521,79,81,0,3,1 +393,85,682,521,80,80,0,3,1 +394,85,674,520,80,80,0,3,1 +395,85,666,519,80,80,0,3,1 +396,85,658,518,80,80,0,3,1 +397,85,652,518,80,79,0,3,1 +398,85,643,516,80,80,0,3,1 +399,85,634,515,81,80,0,3,1 +400,85,625,514,81,80,0,3,1 +401,85,616,513,82,80,0,3,1 +402,85,605,512,82,81,0,3,1 +403,85,594,512,83,81,0,3,1 +404,85,584,512,83,82,0,3,1 +405,85,572,512,83,82,0,3,1 +406,85,561,512,83,83,0,3,1 +407,85,549,512,83,82,0,3,1 +408,85,539,511,83,83,0,3,1 +409,85,526,510,83,84,0,3,1 +410,85,513,509,84,85,0,3,1 +411,85,500,508,85,86,0,3,1 +412,85,485,508,85,86,0,3,1 +413,85,471,508,85,87,0,3,1 +414,85,456,508,85,87,0,3,1 +415,85,442,508,85,88,0,3,1 +416,85,425,506,86,89,0,3,1 +417,85,409,505,87,89,0,3,1 +418,85,393,504,88,89,0,3,1 +419,85,377,503,88,89,0,3,1 +420,85,361,502,89,89,0,3,1 +421,85,345,501,90,89,0,3,1 +422,85,325,501,91,87,0,3,1 +423,85,306,502,91,84,0,3,1 +424,85,288,500,92,84,0,3,1 +425,85,267,498,93,85,0,3,1 +426,85,245,498,94,86,0,3,1 +427,85,224,499,95,87,0,3,1 +428,85,202,500,97,87,0,3,1 +429,85,181,501,98,88,0,3,1 +430,85,159,502,99,90,0,3,1 +431,85,138,503,99,93,0,3,1 +432,85,114,503,99,92,0,3,1 +433,85,93,502,99,92,0,3,1 +434,85,68,505,99,92,0,3,1 +435,85,48,507,100,92,0,3,1 +436,85,22,507,100,92,0,3,1 +437,85,-2,507,99,92,0,3,0.97 +438,85,-20,507,100,92,0,3,0.79208 +439,85,-47,507,100,92,0,3,0.52475 +522,86,1552,504,49,42,0,3,0.93907 +523,86,1530,503,49,42,0,3,0.93163 +524,86,1508,503,49,42,0,3,0.90698 +525,86,1486,502,49,42,0,3,0.95349 +526,86,1464,502,49,42,0,3,0.93023 +527,86,1442,501,49,42,0,3,0.95349 +528,86,1420,501,49,42,0,3,0.93023 +529,86,1398,501,50,42,0,3,0.93023 +530,86,1377,503,50,41,0,3,0.92857 +531,86,1359,504,50,42,0,3,0.86047 +532,86,1341,506,50,43,0,3,0.79545 +533,86,1322,506,50,42,0,3,0.7907 +534,86,1305,505,50,42,0,3,0.81395 +535,86,1288,505,50,42,0,3,0.74419 +536,86,1271,505,51,42,0,3,0.76744 +537,86,1252,502,51,42,0,3,0.88596 +538,86,1234,507,50,42,0,3,0.8249 +539,86,1218,505,50,42,0,3,0.77428 +540,86,1200,507,50,40,0,3,0.83644 +541,86,1183,509,49,38,0,3,0.79692 +542,86,1168,511,49,43,0,3,0.79636 +543,86,1153,511,49,42,0,3,0.84279 +544,86,1138,511,49,41,0,3,0.88 +545,86,1120,510,51,42,0,3,0.8873 +546,86,1106,507,52,41,0,3,0.89937 +547,86,1091,506,53,41,0,3,0.92504 +548,86,1077,506,53,41,0,3,0.95767 +549,86,1063,506,54,41,0,3,0.99221 +550,86,1049,505,55,41,0,3,1 +551,86,1035,505,56,41,0,3,1 +552,86,1022,505,57,41,0,3,1 +553,86,1009,504,58,41,0,3,1 +554,86,997,503,59,41,0,3,1 +555,86,985,502,59,41,0,3,1 +556,86,973,501,60,41,0,3,1 +557,86,961,501,61,41,0,3,1 +558,86,950,500,61,41,0,3,1 +559,86,939,499,62,41,0,3,1 +560,86,928,498,62,41,0,3,1 +561,86,917,497,63,41,0,3,1 +562,86,906,496,64,42,0,3,1 +563,86,896,496,64,42,0,3,1 +564,86,886,496,65,42,0,3,1 +565,86,877,496,64,42,0,3,1 +566,86,867,496,65,42,0,3,1 +567,86,858,497,65,42,0,3,1 +568,86,850,499,65,42,0,3,1 +569,86,841,498,65,43,0,3,1 +570,86,832,498,65,44,0,3,1 +571,86,823,498,65,45,0,3,1 +572,86,817,496,65,47,0,3,1 +573,86,808,498,65,47,0,3,1 +574,86,800,499,66,47,0,3,1 +575,86,792,500,68,47,0,3,1 +576,86,785,502,69,46,0,3,1 +577,86,778,499,70,46,0,3,1 +578,86,770,499,70,45,0,3,1 +579,86,764,498,70,47,0,3,1 +580,86,758,498,71,48,0,3,1 +581,86,752,498,72,50,0,3,1 +582,86,748,497,72,49,0,3,1 +583,86,742,497,72,49,0,3,1 +584,86,736,498,73,49,0,3,1 +585,86,732,497,74,50,0,3,1 +586,86,729,497,74,50,0,3,1 +587,86,725,497,75,51,0,3,1 +588,86,722,497,76,51,0,3,1 +589,86,718,497,77,52,0,3,1 +590,86,715,497,77,52,0,3,1 +591,86,712,497,78,53,0,3,1 +592,86,708,499,80,54,0,3,1 +593,86,707,499,81,54,0,3,1 +594,86,706,499,82,55,0,3,1 +595,86,706,500,82,55,0,3,1 +596,86,705,498,85,54,0,3,1 +597,86,705,498,86,55,0,3,1 +598,86,706,499,86,56,0,3,1 +599,86,706,500,87,56,0,3,1 +600,86,707,501,87,57,0,3,1 +601,86,707,502,88,57,0,3,1 +602,86,708,503,89,58,0,3,1 +603,86,709,503,91,58,0,3,1 +604,86,711,503,92,58,0,3,1 +605,86,713,503,93,58,0,3,1 +606,86,715,503,95,59,0,3,1 +607,86,717,503,96,59,0,3,1 +608,86,718,503,98,59,0,3,1 +609,86,720,503,100,60,0,3,1 +610,86,722,503,101,60,0,3,1 +611,86,724,503,102,60,0,3,1 +612,86,726,503,104,61,0,3,1 +613,86,727,500,106,60,0,3,1 +614,86,728,501,107,60,0,3,1 +615,86,730,502,108,61,0,3,1 +616,86,732,503,109,62,0,3,1 +617,86,734,504,109,63,0,3,1 +618,86,736,505,110,63,0,3,1 +619,86,738,506,111,64,0,3,1 +620,86,740,507,111,65,0,3,1 +621,86,742,508,112,66,0,3,1 +622,86,744,510,113,66,0,3,1 +623,86,746,512,114,67,0,3,1 +624,86,749,514,115,68,0,3,1 +625,86,752,517,116,68,0,3,1 +626,86,757,512,117,70,0,3,1 +627,86,760,512,118,70,0,3,1 +628,86,763,513,119,70,0,3,1 +629,86,766,514,121,70,0,3,1 +630,86,774,515,120,70,0,3,1 +631,86,779,516,120,69,0,3,1 +632,86,784,517,121,69,0,3,1 +633,86,789,520,121,69,0,3,0.99368 +634,86,794,517,122,70,0,3,0.98282 +635,86,799,519,123,71,0,3,0.97581 +636,86,805,521,124,72,0,3,0.95781 +637,86,811,523,125,73,0,3,0.94595 +638,86,817,525,126,72,0,3,0.93593 +639,86,823,527,127,72,0,3,0.92487 +640,86,829,529,128,71,0,3,0.91441 +641,86,835,532,130,70,0,3,0.89937 +642,86,840,533,132,70,0,3,0.89537 +643,86,846,533,133,72,0,3,0.899 +644,86,853,534,133,74,0,3,0.89453 +645,86,863,537,132,74,0,3,0.87779 +646,86,869,538,131,75,0,3,0.86842 +647,86,875,540,130,75,0,3,0.87626 +648,86,883,542,130,74,0,3,0.87461 +649,86,891,541,130,74,0,3,0.86891 +650,86,899,540,130,75,0,3,0.86832 +651,86,907,539,131,76,0,3,0.86305 +652,86,915,531,129,78,0,3,0.87527 +653,86,924,532,129,78,0,3,0.87118 +654,86,933,531,129,77,0,3,0.8716 +655,86,942,531,130,77,0,3,0.86044 +656,86,955,534,129,77,0,3,0.83156 +657,86,965,540,129,77,0,3,0.83491 +658,86,975,546,129,78,0,3,0.83797 +659,86,985,553,129,78,0,3,0.84907 +660,86,992,554,130,79,0,3,0.84866 +661,86,1000,555,131,80,0,3,0.84287 +662,86,1008,557,132,81,0,3,0.84596 +663,86,1017,561,132,81,0,3,0.84898 +664,86,1026,562,133,81,0,3,0.84711 +665,86,1035,563,134,82,0,3,0.84212 +666,86,1045,565,134,82,0,3,0.834 +667,86,1054,564,135,83,0,3,0.83447 +668,86,1064,564,136,83,0,3,0.82795 +669,86,1073,563,137,84,0,3,0.82899 +670,86,1083,563,138,84,0,3,0.82818 +671,86,1093,561,137,86,0,3,0.82725 +672,86,1103,560,137,87,0,3,0.82642 +673,86,1112,558,137,86,0,3,0.83783 +674,86,1121,556,137,85,0,3,0.84589 +675,86,1131,557,138,86,0,3,0.83354 +676,86,1141,556,141,85,0,3,0.82607 +677,86,1150,558,142,87,0,3,0.85577 +678,86,1160,560,143,89,0,3,0.83472 +679,86,1169,567,143,91,0,3,0.8362 +680,86,1178,574,144,93,0,3,0.83566 +681,86,1188,582,144,94,0,3,0.8347 +682,86,1200,579,144,94,0,3,0.83797 +683,86,1204,572,146,94,0,3,0.84647 +684,86,1214,566,146,93,0,3,0.82776 +685,86,1222,558,148,94,0,3,0.83214 +686,86,1231,553,149,97,0,3,0.83163 +687,86,1241,552,150,97,0,3,0.83227 +688,86,1249,552,152,97,0,3,0.84154 +689,86,1258,552,154,97,0,3,0.84575 +690,86,1269,552,156,99,0,3,0.83949 +691,86,1281,553,157,100,0,3,0.83074 +692,86,1288,559,157,101,0,3,0.85232 +693,86,1298,561,161,101,0,3,0.84314 +694,86,1307,566,163,102,0,3,0.84869 +695,86,1316,572,165,103,0,3,0.85809 +696,86,1328,572,169,101,0,3,0.85006 +697,86,1337,577,171,103,0,3,0.84956 +698,86,1346,583,173,104,0,3,0.85025 +699,86,1355,589,175,105,0,3,0.86353 +700,86,1362,587,177,106,0,3,0.88055 +701,86,1372,592,179,108,0,3,0.87513 +702,86,1383,598,180,110,0,3,0.8676 +703,86,1391,603,182,109,0,3,0.8773 +704,86,1399,608,184,113,0,3,0.86155 +705,86,1407,612,187,115,0,3,0.85748 +706,86,1415,616,190,117,0,3,0.85691 +707,86,1423,614,191,118,0,3,0.86765 +708,86,1432,613,192,118,0,3,0.87682 +709,86,1440,609,194,121,0,3,0.88903 +710,86,1448,623,197,122,0,3,0.87189 +711,86,1455,608,198,125,0,3,0.88083 +712,86,1464,617,197,126,0,3,0.90098 +713,86,1474,605,201,126,0,3,0.88867 +714,86,1484,601,206,130,0,3,0.87949 +715,86,1487,606,209,134,0,3,0.88825 +716,86,1494,600,212,133,0,3,0.89573 +717,86,1501,601,215,133,0,3,0.89932 +718,86,1509,602,218,134,0,3,0.90039 +719,86,1520,613,221,133,0,3,0.89828 +720,86,1528,607,225,132,0,3,0.89404 +721,86,1536,609,229,134,0,3,0.89333 +722,86,1549,614,233,135,0,3,0.88436 +723,86,1556,618,236,137,0,3,0.89705 +724,86,1564,622,238,140,0,3,0.90819 +725,86,1572,622,241,143,0,3,0.91919 +726,86,1582,634,246,146,0,3,0.9101 +727,86,1590,630,250,146,0,3,0.92398 +728,86,1600,642,253,150,0,3,0.91912 +729,86,1609,643,257,152,0,3,0.91724 +730,86,1619,645,260,153,0,3,0.92118 +731,86,1625,649,264,154,0,3,0.92511 +732,86,1634,648,268,158,0,3,0.90847 +733,86,1645,651,269,157,0,3,0.82883 +734,86,1653,656,269,157,0,3,0.81149 +735,86,1662,654,269,158,0,3,0.76604 +736,86,1671,653,269,158,0,3,0.69783 +737,86,1680,652,270,158,0,3,0.60449 +738,86,1689,656,270,158,0,3,0.53262 +739,86,1699,661,269,157,0,3,0.46709 +740,86,1709,663,269,157,0,3,0.43371 +741,86,1719,665,269,158,0,3,0.45986 +742,86,1729,668,269,158,0,3,0.53629 +743,86,1735,671,269,160,0,3,0.68889 +744,86,1742,675,269,162,0,3,0.66296 +745,86,1749,677,269,165,0,3,0.63704 +746,86,1757,680,269,167,0,3,0.60741 +747,86,1767,678,269,170,0,3,0.57037 +748,86,1775,681,270,157,0,3,0.53875 +749,86,1784,683,270,157,0,3,0.50554 +750,86,1794,685,269,158,0,3,0.47037 +520,87,1475,500,42,29,0,3,1 +521,87,1450,499,42,29,0,3,1 +522,87,1425,499,42,28,0,3,1 +523,87,1403,498,42,28,0,3,1 +524,87,1381,497,42,28,0,3,1 +525,87,1359,496,42,29,0,3,1 +526,87,1337,496,42,28,0,3,1 +527,87,1315,495,42,28,0,3,1 +528,87,1293,494,42,29,0,3,1 +529,87,1271,493,42,29,0,3,1 +530,87,1249,493,42,29,0,3,1 +531,87,1229,494,41,29,0,3,1 +532,87,1209,496,41,29,0,3,1 +533,87,1190,495,41,28,0,3,1 +534,87,1169,495,42,28,0,3,1 +535,87,1149,495,41,28,0,3,1 +536,87,1136,494,37,27,0,3,1 +537,87,1117,490,37,30,0,3,1 +538,87,1101,496,37,28,0,3,1 +539,87,1082,494,38,28,0,3,1 +540,87,1066,495,42,29,0,3,1 +541,87,1049,496,41,29,0,3,1 +542,87,1032,498,41,28,0,3,1 +543,87,1017,497,41,29,0,3,1 +478,88,1892,780,105,153,0,10,0.27358 +479,88,1859,781,105,153,0,10,0.58491 +480,88,1823,782,113,154,0,10,0.85965 +481,88,1787,784,122,154,0,10,1 +482,88,1751,782,121,158,0,10,1 +483,88,1715,781,120,162,0,10,1 +484,88,1679,782,118,163,0,10,1 +485,88,1643,783,117,165,0,10,1 +486,88,1607,785,116,166,0,10,1 +487,88,1571,789,119,165,0,10,1 +488,88,1535,793,122,165,0,10,1 +489,88,1500,798,117,166,0,10,1 +490,88,1460,801,120,166,0,10,1 +491,88,1421,804,122,166,0,10,1 +492,88,1381,807,125,169,0,10,1 +493,88,1343,812,125,171,0,10,1 +494,88,1305,817,125,173,0,10,1 +495,88,1265,824,125,174,0,10,1 +496,88,1225,827,127,176,0,10,1 +497,88,1185,830,129,178,0,10,1 +498,88,1147,829,127,180,0,10,1 +499,88,1110,829,125,181,0,10,1 +500,88,1074,832,121,182,0,10,1 +501,88,1038,835,117,185,0,10,1 +502,88,995,833,118,190,0,10,1 +503,88,952,833,125,186,0,10,1 +504,88,915,836,122,186,0,10,1 +505,88,874,838,124,190,0,10,1 +506,88,829,844,126,191,0,10,1 +507,88,791,844,126,198,0,10,1 +508,88,750,856,124,199,0,10,1 +509,88,705,863,129,205,0,10,1 +510,88,660,872,133,205,0,10,1 +511,88,613,883,135,205,0,10,0.96117 +512,88,567,894,138,204,0,10,0.9122 +513,88,520,900,140,205,0,10,0.87864 +514,88,473,907,143,204,0,10,0.84878 +515,88,423,915,144,203,0,10,0.81373 +516,88,377,920,146,202,0,10,0.7931 +517,88,325,925,148,202,0,10,0.76847 +518,88,273,930,151,202,0,10,0.74384 +519,88,222,935,153,202,0,10,0.71921 +520,88,170,943,154,202,0,10,0.6798 +521,88,114,945,160,206,0,10,0.657 +522,88,58,953,165,205,0,10,0.62136 +523,88,7,957,161,202,0,10,0.61084 +524,88,-47,968,161,202,0,10,0.39172 +81,89,1095,492,36,25,0,3,1 +82,89,1092,492,36,25,0,3,1 +83,89,1090,493,36,25,0,3,1 +84,89,1087,494,37,25,0,3,1 +85,89,1085,495,36,25,0,3,1 +86,89,1083,496,36,25,0,3,1 +87,89,1080,496,37,26,0,3,1 +88,89,1078,497,36,26,0,3,1 +89,89,1075,498,37,26,0,3,1 +90,89,1073,499,37,26,0,3,1 +91,89,1071,500,37,26,0,3,1 +92,89,1067,501,36,25,0,3,1 +93,89,1064,502,36,25,0,3,1 +94,89,1061,503,36,25,0,3,1 +95,89,1058,504,36,25,0,3,1 +96,89,1055,505,36,25,0,3,1 +97,89,1052,506,36,25,0,3,1 +98,89,1049,508,36,25,0,3,1 +99,89,1045,507,36,25,0,3,1 +100,89,1042,507,36,25,0,3,1 +101,89,1039,507,36,25,0,3,1 +102,89,1035,507,36,25,0,3,1 +103,89,1032,507,36,25,0,3,1 +104,89,1029,507,36,25,0,3,1 +105,89,1025,507,36,25,0,3,1 +106,89,1022,507,36,25,0,3,1 +107,89,1019,507,36,25,0,3,1 +108,89,1015,507,36,25,0,3,1 +109,89,1012,507,36,25,0,3,1 +110,89,1009,507,36,25,0,3,1 +111,89,1006,507,36,25,0,3,1 +112,89,1002,507,36,25,0,3,1 +113,89,998,507,36,25,0,3,1 +114,89,994,507,36,25,0,3,1 +115,89,990,508,36,25,0,3,1 +116,89,987,508,36,25,0,3,1 +117,89,983,508,36,25,0,3,1 +118,89,979,509,36,25,0,3,1 +119,89,975,509,36,25,0,3,1 +120,89,971,509,36,25,0,3,1 +121,89,968,510,36,25,0,3,1 +122,89,964,510,36,25,0,3,1 +123,89,960,510,36,25,0,3,1 +124,89,956,510,36,25,0,3,1 +125,89,952,511,36,25,0,3,1 +126,89,949,511,36,25,0,3,1 +127,89,945,511,36,25,0,3,1 +128,89,941,512,36,25,0,3,1 +129,89,937,512,36,25,0,3,1 +130,89,933,512,36,25,0,3,1 +131,89,930,513,36,25,0,3,1 +132,89,926,512,36,26,0,3,1 +133,89,923,512,36,26,0,3,1 +134,89,919,512,37,26,0,3,1 +135,89,916,512,37,26,0,3,1 +136,89,912,512,37,27,0,3,1 +137,89,909,512,37,27,0,3,1 +138,89,905,512,38,27,0,3,1 +139,89,902,512,38,27,0,3,1 +140,89,898,512,38,27,0,3,1 +141,89,895,512,38,28,0,3,1 +142,89,891,512,39,28,0,3,1 +143,89,888,512,39,28,0,3,1 +144,89,884,512,39,28,0,3,1 +145,89,881,512,39,28,0,3,1 +146,89,877,512,40,29,0,3,1 +147,89,874,512,40,29,0,3,1 +148,89,870,512,40,29,0,3,1 +149,89,867,512,40,29,0,3,1 +150,89,863,512,41,29,0,3,1 +151,89,860,512,41,30,0,3,1 +152,89,855,512,41,30,0,3,1 +153,89,851,512,41,31,0,3,1 +154,89,847,513,40,31,0,3,1 +155,89,842,513,41,31,0,3,1 +156,89,838,513,40,32,0,3,1 +157,89,834,514,40,32,0,3,1 +158,89,831,514,39,32,0,3,1 +159,89,828,514,39,33,0,3,1 +160,89,825,515,39,32,0,3,1 +161,89,822,515,39,33,0,3,1 +162,89,819,515,39,33,0,3,1 +163,89,816,516,39,33,0,3,1 +164,89,813,515,39,33,0,3,1 +165,89,810,515,39,33,0,3,1 +166,89,807,514,39,34,0,3,1 +167,89,804,514,39,34,0,3,1 +168,89,801,514,39,34,0,3,1 +169,89,798,513,39,35,0,3,1 +170,89,795,513,39,35,0,3,1 +171,89,792,513,39,35,0,3,1 +172,89,789,513,40,35,0,3,1 +173,89,787,513,40,36,0,3,1 +174,89,784,513,41,36,0,3,1 +175,89,782,513,42,37,0,3,1 +176,89,779,513,43,37,0,3,1 +177,89,777,513,43,38,0,3,1 +178,89,774,513,45,38,0,3,1 +179,89,772,513,45,39,0,3,1 +180,89,769,513,46,39,0,3,1 +181,89,767,514,47,39,0,3,1 +182,89,764,515,47,39,0,3,1 +183,89,762,516,47,39,0,3,1 +184,89,760,517,47,39,0,3,1 +185,89,757,518,48,39,0,3,1 +186,89,755,519,47,39,0,3,1 +187,89,753,520,47,39,0,3,1 +188,89,750,521,48,39,0,3,1 +189,89,748,522,48,39,0,3,1 +190,89,746,523,48,40,0,3,1 +191,89,745,523,48,40,0,3,1 +192,89,745,523,48,40,0,3,1 +193,89,745,524,48,40,0,3,1 +194,89,745,524,48,40,0,3,1 +195,89,745,525,48,40,0,3,1 +196,89,743,525,48,40,0,3,1 +197,89,742,526,47,39,0,3,1 +198,89,740,526,48,40,0,3,1 +199,89,739,527,47,39,0,3,1 +200,89,737,527,47,39,0,3,1 +201,89,736,528,47,39,0,3,1 +202,89,734,529,48,39,0,3,1 +203,89,732,530,49,39,0,3,1 +204,89,731,531,50,40,0,3,1 +205,89,730,531,51,41,0,3,1 +206,89,730,532,51,41,0,3,1 +207,89,729,533,52,42,0,3,1 +208,89,729,534,52,42,0,3,1 +209,89,728,535,53,42,0,3,1 +210,89,728,536,53,43,0,3,1 +211,89,728,536,53,44,0,3,1 +212,89,727,537,54,44,0,3,1 +213,89,727,538,54,45,0,3,1 +214,89,726,539,55,45,0,3,1 +215,89,726,540,55,45,0,3,1 +216,89,726,541,55,46,0,3,1 +217,89,726,541,56,46,0,3,1 +218,89,727,542,56,46,0,3,0.95745 +219,89,728,542,56,47,0,3,0.91667 +220,89,729,543,57,47,0,3,0.875 +221,89,729,543,58,47,0,3,0.85417 +222,89,730,544,58,47,0,3,0.85417 +223,89,731,544,58,48,0,3,0.83673 +224,89,732,545,59,48,0,3,0.81633 +225,89,733,544,60,49,0,3,0.82 +226,89,735,544,60,49,0,3,0.82 +227,89,736,544,61,49,0,3,0.82 +228,89,738,544,62,49,0,3,0.8819 +229,89,739,544,62,49,0,3,0.87778 +230,89,740,544,63,49,0,3,0.8775 +231,89,741,544,64,50,0,3,0.88326 +232,89,743,544,63,50,0,3,0.89583 +233,89,744,544,64,51,0,3,0.90769 +234,89,745,544,65,51,0,3,0.92803 +235,89,747,544,65,52,0,3,0.95283 +236,89,749,543,66,53,0,3,0.98673 +237,89,752,543,66,53,0,3,1 +238,89,754,543,67,53,0,3,1 +239,89,757,542,68,54,0,3,1 +240,89,759,542,69,54,0,3,1 +241,89,762,542,69,54,0,3,1 +242,89,765,542,70,55,0,3,1 +243,89,769,542,71,55,0,3,1 +244,89,774,542,71,56,0,3,1 +245,89,779,542,71,57,0,3,1 +246,89,784,543,71,57,0,3,1 +247,89,787,543,72,58,0,3,1 +248,89,790,544,73,58,0,3,1 +249,89,793,544,74,59,0,3,1 +250,89,796,545,75,59,0,3,1 +251,89,800,546,75,59,0,3,1 +252,89,805,546,76,59,0,3,1 +253,89,811,546,76,60,0,3,1 +254,89,817,546,77,61,0,3,1 +255,89,823,547,77,61,0,3,1 +256,89,829,547,77,62,0,3,1 +257,89,835,547,78,62,0,3,1 +258,89,841,547,78,63,0,3,1 +259,89,847,548,78,63,0,3,1 +260,89,853,548,79,64,0,3,1 +261,89,859,548,79,65,0,3,1 +262,89,865,549,80,65,0,3,1 +263,89,869,549,84,66,0,3,1 +264,89,874,550,87,67,0,3,1 +265,89,879,551,90,67,0,3,1 +266,89,884,552,94,68,0,3,1 +267,89,890,552,96,68,0,3,1 +268,89,897,552,97,69,0,3,1 +269,89,903,552,99,69,0,3,1 +270,89,910,553,100,69,0,3,1 +271,89,918,552,101,70,0,3,1 +272,89,926,552,102,71,0,3,1 +273,89,934,552,103,72,0,3,1 +274,89,941,552,104,73,0,3,1 +275,89,948,553,105,73,0,3,0.99324 +276,89,955,553,107,74,0,3,0.98469 +277,89,962,554,108,74,0,3,1 +278,89,969,554,109,75,0,3,1 +279,89,976,555,111,75,0,3,1 +280,89,983,555,112,76,0,3,0.97724 +281,89,991,556,113,76,0,3,0.95033 +282,89,998,556,115,76,0,3,0.92208 +283,89,1005,556,118,76,0,3,0.90909 +284,89,1013,556,120,76,0,3,0.88312 +285,89,1020,556,123,76,0,3,0.87013 +286,89,1028,556,125,76,0,3,0.85714 +287,89,1035,556,127,76,0,3,0.83117 +288,89,1043,556,129,76,0,3,0.81818 +289,89,1050,556,132,76,0,3,0.80519 +290,89,1058,556,134,76,0,3,0.81818 +291,89,1065,556,137,76,0,3,0.84416 +292,89,1073,557,139,76,0,3,0.85714 +293,89,1080,557,141,76,0,3,0.87013 +294,89,1088,558,143,76,0,3,0.87013 +295,89,1096,559,145,76,0,3,0.87013 +296,89,1104,560,147,75,0,3,0.89474 +297,89,1111,560,150,76,0,3,0.87013 +298,89,1119,561,152,76,0,3,0.85714 +299,89,1127,562,154,75,0,3,0.85526 +300,89,1135,563,156,75,0,3,0.82895 +301,89,1143,564,158,75,0,3,0.81579 +302,89,1150,566,160,76,0,3,0.79221 +303,89,1157,568,162,77,0,3,0.78205 +304,89,1164,570,165,78,0,3,0.77215 +305,89,1171,572,167,80,0,3,0.75309 +306,89,1178,574,170,81,0,3,0.69106 +307,89,1185,576,172,82,0,3,0.65569 +308,89,1193,578,174,84,0,3,0.62319 +309,89,1200,578,176,86,0,3,0.6392 +310,89,1208,579,178,87,0,3,0.62925 +311,89,1215,580,180,88,0,3,0.64467 +312,89,1223,581,182,89,0,3,0.64906 +313,89,1231,582,184,90,0,3,0.67942 +314,89,1237,582,186,91,0,3,0.64706 +315,89,1243,583,188,92,0,3,0.57672 +316,89,1249,583,190,94,0,3,0.50262 +317,89,1255,584,192,95,0,3,0.45078 +318,89,1261,584,194,96,0,3,0.42564 +319,89,1267,585,196,97,0,3,0.40102 +320,89,1273,585,198,99,0,3,0.38693 +321,89,1279,586,200,100,0,3,0.37811 +322,89,1284,585,201,100,0,3,0.37624 +323,89,1289,584,202,101,0,3,0.35468 +324,89,1294,583,203,101,0,3,0.36275 +325,89,1299,582,204,102,0,3,0.38049 +326,89,1304,581,206,103,0,3,0.41546 +327,89,1309,580,207,103,0,3,0.45192 +328,89,1314,579,208,104,0,3,0.48435 +329,89,1319,578,209,104,0,3,0.51887 +330,89,1324,577,210,105,0,3,0.4907 +331,89,1329,576,212,106,0,3,0.41753 +332,89,1331,574,213,107,0,3,0.37673 +333,89,1333,573,214,107,0,3,0.34109 +334,89,1335,571,216,108,0,3,0.34554 +335,89,1337,570,217,108,0,3,0.34395 +336,89,1339,569,219,108,0,3,0.34137 +337,89,1343,569,220,108,0,3,0.34277 +338,89,1347,569,221,109,0,3,0.35168 +339,89,1351,569,222,110,0,3,0.32291 +340,89,1356,569,223,111,0,3,0.30796 +341,89,1358,572,224,111,0,3,0.33484 +342,89,1360,575,226,112,0,3,0.34088 +343,89,1363,578,226,112,0,3,0.36962 +344,89,1365,582,228,112,0,3,0.35657 +345,89,1367,585,229,113,0,3,0.34523 +346,89,1370,588,230,113,0,3,0.3647 +347,89,1372,591,231,114,0,3,0.36079 +348,89,1375,595,232,114,0,3,0.33902 +349,89,1376,596,234,115,0,3,0.32993 +350,89,1377,598,236,116,0,3,0.32929 +351,89,1379,600,237,117,0,3,0.34749 +352,89,1380,602,239,118,0,3,0.33669 +353,89,1381,604,241,119,0,3,0.32769 +354,89,1382,607,244,119,0,3,0.35034 +355,89,1383,609,246,120,0,3,0.37357 +356,89,1385,611,248,122,0,3,0.34313 +357,89,1386,614,250,122,0,3,0.33887 +358,89,1387,616,252,123,0,3,0.32912 +359,89,1388,618,255,124,0,3,0.34056 +360,89,1390,621,256,125,0,3,0.35368 +361,89,1391,623,259,126,0,3,0.36826 +362,89,1392,625,261,127,0,3,0.39346 +363,89,1393,628,263,127,0,3,0.37752 +364,89,1395,630,265,129,0,3,0.39401 +365,89,1396,632,267,130,0,3,0.41011 +366,89,1397,635,270,130,0,3,0.46894 +367,89,1398,637,272,131,0,3,0.50685 +368,89,1400,640,274,132,0,3,0.54977 +369,89,1401,640,276,132,0,3,0.53899 +370,89,1402,640,278,133,0,3,0.52627 +371,89,1403,640,280,134,0,3,0.51256 +372,89,1404,640,282,135,0,3,0.50294 +373,89,1405,640,284,135,0,3,0.48617 +374,89,1406,640,286,136,0,3,0.50334 +375,89,1407,640,288,137,0,3,0.51281 +376,89,1408,640,290,138,0,3,0.54031 +377,89,1410,640,292,139,0,3,0.5658 +378,89,1407,639,294,140,0,3,0.57947 +379,89,1404,639,297,141,0,3,0.60299 +380,89,1401,638,299,142,0,3,0.65023 +381,89,1399,638,301,143,0,3,0.69723 +382,89,1399,636,302,144,0,3,0.71672 +383,89,1399,634,304,146,0,3,0.71498 +384,89,1399,633,306,147,0,3,0.71082 +385,89,1395,633,307,148,0,3,0.71206 +386,89,1391,634,308,148,0,3,0.71037 +387,89,1387,635,310,149,0,3,0.71023 +388,89,1383,636,311,149,0,3,0.7022 +389,89,1380,636,312,151,0,3,0.68446 +390,89,1376,637,313,151,0,3,0.68367 +391,89,1372,638,315,152,0,3,0.69374 +392,89,1368,639,316,152,0,3,0.68827 +393,89,1365,640,317,153,0,3,0.70636 +394,89,1357,640,318,154,0,3,0.721 +395,89,1350,641,319,155,0,3,0.73381 +396,89,1342,642,321,156,0,3,0.74287 +397,89,1335,643,321,157,0,3,0.7523 +398,89,1327,644,323,158,0,3,0.76887 +399,89,1320,645,324,159,0,3,0.772 +400,89,1310,644,325,160,0,3,0.77556 +401,89,1301,644,326,160,0,3,0.77928 +402,89,1291,643,328,162,0,3,0.79018 +403,89,1282,643,329,162,0,3,0.79822 +404,89,1273,643,330,163,0,3,0.80119 +405,89,1262,643,331,164,0,3,0.80234 +406,89,1251,644,332,164,0,3,0.80046 +407,89,1240,645,334,165,0,3,0.79696 +408,89,1227,645,335,166,0,3,0.8091 +409,89,1215,645,336,167,0,3,0.83206 +410,89,1202,645,337,168,0,3,0.84097 +411,89,1190,646,338,168,0,3,0.85111 +412,89,1174,646,339,169,0,3,0.86303 +413,89,1158,646,340,170,0,3,0.91636 +414,89,1142,646,342,172,0,3,0.92922 +415,89,1126,646,343,173,0,3,0.93899 +416,89,1110,646,344,174,0,3,0.95548 +417,89,1095,647,345,175,0,3,0.96231 +418,89,1075,647,346,176,0,3,0.97099 +419,89,1055,647,347,177,0,3,0.98063 +420,89,1035,647,348,178,0,3,0.99376 +421,89,1016,647,349,179,0,3,1 +422,89,996,647,350,180,0,3,1 +423,89,976,647,351,181,0,3,1 +424,89,956,647,352,182,0,3,1 +425,89,937,647,353,183,0,3,1 +426,89,915,648,354,183,0,3,1 +427,89,893,649,355,184,0,3,1 +428,89,872,650,356,185,0,3,1 +429,89,848,653,357,186,0,3,1 +430,89,824,656,358,187,0,3,1 +431,89,801,660,359,188,0,3,1 +432,89,776,661,361,191,0,3,1 +433,89,751,663,363,193,0,3,1 +434,89,726,665,365,195,0,3,1 +435,89,702,667,366,197,0,3,1 +436,89,674,669,368,199,0,3,1 +437,89,646,671,370,201,0,3,1 +438,89,618,673,372,203,0,3,1 +439,89,591,676,374,204,0,3,1 +440,89,563,678,376,206,0,3,1 +441,89,535,680,378,208,0,3,1 +442,89,507,682,380,210,0,3,1 +443,89,480,685,382,212,0,3,1 +444,89,447,687,384,214,0,3,1 +445,89,415,690,385,215,0,3,0.95596 +446,89,382,692,387,217,0,3,0.91495 +447,89,350,695,388,218,0,3,0.88946 +448,89,314,694,390,220,0,3,0.88491 +449,89,278,694,392,222,0,3,0.8855 +450,89,242,694,394,223,0,3,0.88608 +451,89,207,694,395,225,0,3,0.88384 +452,89,174,695,395,226,0,3,0.88131 +453,89,142,697,394,227,0,3,0.87848 +454,89,109,699,395,227,0,3,0.87626 +455,89,77,701,394,228,0,3,0.87342 +456,89,44,703,394,228,0,3,0.87089 +457,89,12,705,394,229,0,3,0.87089 +458,89,-30,709,394,229,0,3,0.92152 +459,89,-72,713,394,230,0,3,0.81519 +460,89,-114,717,394,231,0,3,0.70886 +461,89,-156,721,394,232,0,3,0.60253 +462,89,-200,729,394,232,0,3,0.49114 +463,89,-244,738,394,232,0,3,0.37975 +464,89,-288,747,394,232,0,3,0.26835 +465,89,-339,747,394,232,0,3,0.13924 +98,90,1279,519,7,147,0,10,0.72297 +99,90,1275,519,8,147,0,10,0.73649 +100,90,1272,519,9,148,0,10,0.73826 +101,90,1269,520,10,148,0,10,0.75168 +102,90,1266,520,10,149,0,10,0.76 +103,90,1263,521,11,149,0,10,0.77333 +104,90,1260,521,12,150,0,10,0.77483 +105,90,1257,521,12,151,0,10,0.77632 +106,90,1254,522,13,151,0,10,0.78289 +107,90,1251,522,14,152,0,10,0.78431 +108,90,1248,523,15,152,0,10,0.79085 +109,90,1244,523,15,152,0,10,0.79739 +110,90,1240,523,15,153,0,10,0.7987 +111,90,1236,523,15,154,0,10,0.80645 +112,90,1233,523,15,154,0,10,0.8129 +113,90,1229,523,15,155,0,10,0.8141 +114,90,1225,523,15,156,0,10,0.81529 +115,90,1222,523,14,156,0,10,0.82166 +116,90,1218,523,15,157,0,10,0.82278 +117,90,1214,523,15,158,0,10,0.83019 +118,90,1211,523,14,159,0,10,0.83125 +119,90,1207,523,14,159,0,10,0.8125 +120,90,1203,523,15,160,0,10,0.78882 +121,90,1199,523,15,161,0,10,0.78395 +122,90,1196,523,14,161,0,10,0.79012 +123,90,1192,523,14,162,0,10,0.79141 +124,90,1188,523,15,163,0,10,0.79878 +125,90,1185,523,14,163,0,10,0.80488 +126,90,1181,523,14,164,0,10,0.82949 +127,90,1177,523,14,165,0,10,0.84217 +128,90,1174,523,14,166,0,10,0.86627 +129,90,1170,523,14,167,0,10,0.87857 +130,90,1166,523,14,168,0,10,0.90217 +131,90,1163,523,14,169,0,10,0.93137 +132,90,1159,523,14,170,0,10,0.94308 +133,90,1156,523,14,171,0,10,0.96589 +134,90,1152,523,14,172,0,10,0.98844 +135,90,1149,523,14,173,0,10,0.98851 +136,90,1145,524,14,173,0,10,0.99425 +137,90,1142,524,13,174,0,10,0.99429 +138,90,1138,524,14,175,0,10,0.99432 +139,90,1135,524,13,176,0,10,0.99435 +140,90,1131,524,14,177,0,10,0.99438 +141,90,1128,524,13,178,0,10,0.99441 +142,90,1124,524,14,179,0,10,0.99444 +143,90,1121,524,13,180,0,10,0.98895 +144,90,1117,525,13,180,0,10,0.99448 +145,90,1114,525,13,181,0,10,0.99451 +146,90,1110,525,13,182,0,10,0.99454 +147,90,1107,525,13,183,0,10,0.99457 +148,90,1103,525,13,184,0,10,0.98919 +149,90,1100,525,13,185,0,10,0.98925 +150,90,1096,525,13,186,0,10,0.9893 +151,90,1093,526,13,187,0,10,0.99468 +152,90,1088,526,13,188,0,10,0.99471 +153,90,1083,527,13,188,0,10,0.99471 +154,90,1078,527,13,190,0,10,0.99476 +155,90,1074,528,13,190,0,10,1 +156,90,1069,528,13,192,0,10,1 +157,90,1064,529,13,192,0,10,1 +158,90,1060,530,13,193,0,10,1 +159,90,1056,530,14,194,0,10,1 +160,90,1053,530,14,196,0,10,1 +161,90,1050,530,14,197,0,10,1 +162,90,1047,530,14,199,0,10,1 +163,90,1044,531,14,199,0,10,1 +164,90,1041,531,14,201,0,10,1 +165,90,1038,531,14,203,0,10,1 +166,90,1034,531,15,204,0,10,1 +167,90,1031,532,15,205,0,10,1 +168,90,1028,532,15,206,0,10,1 +169,90,1025,532,15,208,0,10,1 +170,90,1022,532,15,209,0,10,1 +171,90,1019,532,15,211,0,10,1 +172,90,1016,533,15,212,0,10,1 +173,90,1013,533,15,213,0,10,1 +174,90,1009,533,17,215,0,10,0.99537 +175,90,1006,533,17,216,0,10,0.99539 +176,90,1003,534,17,217,0,10,0.99541 +177,90,1000,534,17,219,0,10,0.99091 +178,90,997,534,17,220,0,10,0.98643 +179,90,994,534,17,222,0,10,0.98655 +180,90,991,534,17,223,0,10,0.98214 +181,90,988,535,17,224,0,10,0.98222 +182,90,984,535,18,225,0,10,0.97788 +183,90,981,535,18,227,0,10,0.97368 +184,90,978,535,18,229,0,10,0.96957 +185,90,975,536,18,229,0,10,0.97391 +186,90,972,536,18,231,0,10,0.96983 +187,90,969,536,18,232,0,10,0.96567 +188,90,966,536,18,234,0,10,0.9617 +189,90,963,537,19,235,0,10,0.96186 +190,90,960,537,20,237,0,10,0.95798 +191,90,958,538,20,238,0,10,0.95816 +192,90,956,539,20,239,0,10,0.9625 +193,90,954,540,20,240,0,10,0.96266 +194,90,952,541,20,242,0,10,0.96296 +195,90,950,542,20,243,0,10,0.96311 +196,90,948,543,20,244,0,10,0.96327 +197,90,946,544,20,245,0,10,0.96748 +198,90,944,545,20,246,0,10,0.96761 +199,90,942,546,20,248,0,10,0.96787 +200,90,940,546,20,250,0,10,0.96414 +201,90,938,547,20,251,0,10,0.96429 +202,90,936,548,20,252,0,10,0.96443 +203,90,934,549,20,253,0,10,0.9685 +204,90,932,549,21,255,0,10,0.96484 +205,90,930,550,21,256,0,10,0.96498 +206,90,928,551,21,257,0,10,0.96512 +207,90,926,552,21,258,0,10,0.96525 +208,90,924,553,22,259,0,10,0.96538 +209,90,922,553,22,262,0,10,0.96198 +210,90,921,554,22,265,0,10,0.96241 +211,90,920,555,22,267,0,10,0.96269 +212,90,918,556,23,270,0,10,0.9631 +213,90,917,557,23,272,0,10,0.96337 +214,90,916,558,23,275,0,10,0.96377 +215,90,916,558,23,278,0,10,0.96057 +216,90,916,559,23,280,0,10,0.96085 +217,90,916,559,24,283,0,10,0.95775 +218,90,916,560,24,286,0,10,0.95819 +219,90,916,560,24,289,0,10,0.95862 +220,90,916,561,25,291,0,10,0.9589 +221,90,916,561,25,295,0,10,0.95946 +222,90,916,562,26,297,0,10,0.95973 +223,90,916,562,26,300,0,10,0.96013 +224,90,916,563,26,303,0,10,0.96053 +225,90,916,563,27,306,0,10,0.95765 +226,90,916,564,27,308,0,10,0.96117 +227,90,917,565,27,311,0,10,0.96154 +228,90,918,566,27,313,0,10,0.96497 +229,90,919,567,28,316,0,10,0.9653 +230,90,921,568,27,319,0,10,0.96562 +231,90,922,569,28,321,0,10,0.96584 +232,90,923,570,28,324,0,10,0.96615 +233,90,925,571,28,327,0,10,0.96646 +234,90,926,572,28,330,0,10,0.96677 +235,90,927,573,29,332,0,10,0.96697 +236,90,929,574,28,335,0,10,0.96726 +237,90,930,575,29,338,0,10,0.96755 +238,90,932,576,29,341,0,10,0.96784 +239,90,935,574,30,346,0,10,0.95965 +240,90,938,572,31,352,0,10,0.95184 +241,90,942,571,31,357,0,10,0.94693 +242,90,946,572,32,362,0,10,0.95041 +243,90,950,573,33,368,0,10,0.95393 +244,90,954,575,34,372,0,10,0.9571 +245,90,959,576,34,378,0,10,0.96042 +246,90,963,578,35,383,0,10,0.96354 +247,90,967,579,36,388,0,10,0.96658 +248,90,972,580,36,394,0,10,0.96709 +249,90,976,582,37,398,0,10,0.96992 +250,90,980,583,38,404,0,10,0.9679 +251,90,985,585,39,409,0,10,0.97073 +252,90,992,587,39,414,0,10,0.97108 +253,90,999,589,40,420,0,10,0.9715 +254,90,1006,592,41,424,0,10,0.97412 +255,90,1013,594,42,430,0,10,0.97448 +256,90,1020,596,43,435,0,10,0.97477 +257,90,1027,599,44,440,0,10,0.97732 +258,90,1034,601,45,445,0,10,0.97758 +259,90,1042,604,45,450,0,10,0.98004 +260,90,1052,606,46,452,0,10,0.98013 +261,90,1063,609,46,453,0,10,0.98238 +262,90,1073,611,48,455,0,10,0.98246 +263,90,1084,614,48,457,0,10,0.98472 +264,90,1094,616,49,459,0,10,0.98478 +265,90,1105,619,50,460,0,10,0.98698 +266,90,1115,621,51,462,0,10,0.98056 +267,90,1126,624,52,464,0,10,0.97204 +268,90,1139,626,51,461,0,10,0.97403 +269,90,1152,629,50,458,0,10,0.97603 +270,90,1165,632,49,455,0,10,0.97807 +271,90,1178,635,48,451,0,10,0.98009 +272,90,1191,638,47,448,0,10,0.97773 +273,90,1204,641,46,445,0,10,0.97534 +274,90,1218,644,45,442,0,10,0.97291 +275,90,1234,647,46,439,0,10,0.97045 +276,90,1251,651,46,436,0,10,0.97025 +277,90,1267,655,47,433,0,10,0.96774 +278,90,1284,659,48,430,0,10,0.9652 +279,90,1301,664,49,430,0,10,0.95592 +280,90,1318,669,51,430,0,10,0.94664 +281,90,1335,675,52,430,0,10,0.93735 +282,90,1352,680,54,430,0,10,0.92343 +283,90,1369,685,55,430,0,10,0.90951 +284,90,1386,691,57,430,0,10,0.89559 +285,90,1409,696,59,430,0,10,0.88167 +286,90,1432,701,61,430,0,10,0.86775 +287,90,1455,706,63,430,0,10,0.85383 +288,90,1478,711,65,430,0,10,0.83991 +289,90,1502,716,66,430,0,10,0.82599 +290,90,1531,724,68,430,0,10,0.80974 +291,90,1561,732,69,430,0,10,0.78886 +292,90,1595,744,70,430,0,10,0.76566 +293,90,1629,757,72,429,0,10,0.74419 +294,90,1663,769,74,429,0,10,0.72093 +295,90,1698,782,75,429,0,10,0.6814 +296,90,1742,797,76,429,0,10,0.64186 +297,90,1786,812,78,429,0,10,0.60233 +298,90,1831,827,79,429,0,10,0.56047 +98,91,1270,446,39,83,0,11,1 +99,91,1267,445,39,83,0,11,1 +100,91,1264,445,39,83,0,11,1 +101,91,1261,445,39,83,0,11,1 +102,91,1258,445,39,83,0,11,1 +103,91,1255,445,39,83,0,11,1 +104,91,1252,445,39,83,0,11,1 +105,91,1249,445,39,83,0,11,1 +106,91,1246,445,39,83,0,11,1 +107,91,1243,445,39,83,0,11,1 +108,91,1240,445,39,83,0,11,1 +109,91,1237,445,39,83,0,11,1 +110,91,1235,445,39,83,0,11,1 +111,91,1231,444,39,83,0,11,1 +112,91,1227,444,39,83,0,11,1 +113,91,1224,444,39,83,0,11,1 +114,91,1220,444,39,83,0,11,1 +115,91,1216,444,39,83,0,11,1 +116,91,1213,444,39,83,0,11,1 +117,91,1209,443,39,83,0,11,1 +118,91,1206,443,39,83,0,11,1 +119,91,1202,443,39,83,0,11,1 +120,91,1198,443,39,83,0,11,1 +121,91,1195,443,39,83,0,11,1 +122,91,1191,443,39,83,0,11,1 +123,91,1188,443,39,83,0,11,1 +124,91,1184,442,39,83,0,11,1 +125,91,1180,442,39,83,0,11,1 +126,91,1176,442,39,83,0,11,1 +127,91,1172,442,39,83,0,11,1 +128,91,1168,442,39,83,0,11,1 +129,91,1164,442,39,83,0,11,1 +130,91,1160,442,39,83,0,11,1 +131,91,1156,441,39,83,0,11,1 +132,91,1152,441,39,83,0,11,1 +133,91,1148,441,39,83,0,11,1 +134,91,1144,441,39,83,0,11,1 +135,91,1140,441,39,83,0,11,1 +136,91,1136,441,39,83,0,11,1 +137,91,1132,441,39,83,0,11,1 +138,91,1128,441,39,83,0,11,1 +139,91,1124,440,39,84,0,11,1 +140,91,1120,440,39,84,0,11,1 +141,91,1116,439,40,85,0,11,1 +142,91,1112,439,40,85,0,11,1 +143,91,1108,439,40,86,0,11,1 +144,91,1104,438,41,87,0,11,1 +145,91,1100,438,41,87,0,11,1 +146,91,1096,438,41,87,0,11,1 +147,91,1092,437,42,88,0,11,1 +148,91,1088,437,42,89,0,11,1 +149,91,1084,437,42,89,0,11,1 +150,91,1080,436,43,90,0,11,1 +151,91,1076,436,43,90,0,11,1 +152,91,1072,435,43,91,0,11,1 +153,91,1068,435,44,92,0,11,1 +154,91,1064,435,44,92,0,11,1 +155,91,1060,434,44,93,0,11,1 +156,91,1056,434,45,93,0,11,1 +157,91,1052,434,45,94,0,11,1 +158,91,1048,433,45,95,0,11,1 +159,91,1044,433,46,95,0,11,1 +160,91,1040,433,46,95,0,11,1 +161,91,1036,432,46,96,0,11,1 +162,91,1032,432,47,97,0,11,1 +163,91,1028,431,47,98,0,11,1 +164,91,1024,431,47,98,0,11,1 +165,91,1020,431,48,98,0,11,1 +166,91,1016,430,48,99,0,11,1 +167,91,1012,430,48,100,0,11,1 +168,91,1008,430,49,100,0,11,1 +169,91,1004,429,49,101,0,11,1 +170,91,1000,429,49,101,0,11,1 +171,91,997,429,49,102,0,11,1 +172,91,994,429,50,102,0,11,1 +173,91,992,429,50,103,0,11,1 +174,91,990,429,50,104,0,11,1 +175,91,987,429,51,104,0,11,1 +176,91,985,429,51,105,0,11,1 +177,91,983,429,51,106,0,11,1 +178,91,981,430,51,106,0,11,1 +179,91,977,429,52,107,0,11,1 +180,91,974,429,52,108,0,11,1 +181,91,971,429,53,109,0,11,1 +182,91,968,429,53,110,0,11,1 +183,91,965,429,54,111,0,11,1 +184,91,962,429,54,112,0,11,1 +185,91,958,428,56,113,0,11,1 +186,91,955,428,56,114,0,11,1 +187,91,952,428,57,115,0,11,1 +188,91,949,428,57,116,0,11,1 +189,91,946,428,58,117,0,11,1 +190,91,943,428,58,118,0,11,1 +191,91,940,428,59,119,0,11,1 +192,91,937,427,60,120,0,11,1 +193,91,935,427,60,121,0,11,1 +194,91,932,427,61,122,0,11,1 +195,91,930,427,61,123,0,11,1 +196,91,927,427,62,124,0,11,1 +197,91,925,427,62,124,0,11,1 +198,91,922,427,63,125,0,11,1 +199,91,920,427,63,126,0,11,1 +200,91,917,426,65,128,0,11,1 +201,91,915,426,65,129,0,11,1 +202,91,912,426,66,130,0,11,1 +203,91,910,426,66,130,0,11,1 +204,91,907,426,67,131,0,11,1 +205,91,905,426,67,132,0,11,1 +206,91,902,426,68,133,0,11,1 +207,91,900,426,68,134,0,11,1 +208,91,898,426,69,135,0,11,1 +209,91,897,426,70,136,0,11,1 +210,91,896,426,71,137,0,11,1 +211,91,896,426,71,138,0,11,1 +212,91,895,426,72,139,0,11,1 +213,91,895,426,72,140,0,11,1 +214,91,894,426,73,141,0,11,1 +215,91,893,426,74,142,0,11,1 +216,91,893,426,74,143,0,11,1 +217,91,892,426,75,144,0,11,1 +218,91,892,426,75,145,0,11,1 +219,91,891,425,76,146,0,11,1 +220,91,891,424,76,148,0,11,1 +221,91,890,423,78,149,0,11,1 +222,91,890,422,78,151,0,11,1 +223,91,889,421,79,152,0,11,1 +224,91,889,420,80,154,0,11,1 +225,91,889,419,80,156,0,11,1 +226,91,888,418,81,157,0,11,1 +227,91,888,417,82,159,0,11,1 +228,91,887,416,83,160,0,11,1 +229,91,887,415,83,162,0,11,1 +230,91,887,414,84,164,0,11,1 +231,91,888,412,85,167,0,11,1 +232,91,890,411,86,169,0,11,1 +233,91,892,410,86,171,0,11,1 +234,91,894,408,87,174,0,11,1 +235,91,896,407,87,176,0,11,1 +236,91,897,406,89,178,0,11,1 +237,91,899,405,89,180,0,11,1 +238,91,901,403,90,183,0,11,1 +239,91,903,402,90,185,0,11,1 +240,91,905,401,91,187,0,11,1 +241,91,907,400,92,189,0,11,1 +242,91,911,399,92,190,0,11,1 +243,91,915,398,93,191,0,11,1 +244,91,919,397,94,193,0,11,1 +245,91,923,396,94,194,0,11,1 +246,91,927,395,95,196,0,11,1 +247,91,931,394,96,197,0,11,1 +248,91,936,394,96,198,0,11,1 +249,91,942,392,97,201,0,11,1 +250,91,948,390,98,205,0,11,1 +251,91,954,388,99,208,0,11,1 +252,91,960,386,100,212,0,11,1 +253,91,965,384,104,216,0,11,1 +254,91,971,382,107,220,0,11,1 +255,91,977,380,110,224,0,11,1 +256,91,983,378,114,228,0,11,1 +257,91,989,376,117,232,0,11,1 +258,91,995,374,120,236,0,11,1 +259,91,1001,372,123,240,0,11,1 +260,91,1007,370,127,244,0,11,1 +261,91,1017,368,130,248,0,11,1 +262,91,1028,366,132,252,0,11,1 +263,91,1039,364,134,256,0,11,1 +264,91,1050,362,137,260,0,11,1 +265,91,1061,361,139,263,0,11,1 +266,91,1071,359,142,267,0,11,1 +267,91,1082,357,145,271,0,11,1 +268,91,1093,355,147,275,0,11,1 +269,91,1104,353,149,279,0,11,1 +270,91,1115,352,152,282,0,11,1 +271,91,1129,348,156,289,0,11,1 +272,91,1144,344,159,297,0,11,1 +273,91,1159,340,162,305,0,11,1 +274,91,1173,336,166,313,0,11,1 +275,91,1188,332,169,321,0,11,1 +276,91,1203,329,173,327,0,11,1 +277,91,1218,325,176,335,0,11,1 +278,91,1232,321,180,343,0,11,1 +279,91,1247,317,183,351,0,11,1 +280,91,1262,313,186,359,0,11,1 +281,91,1277,310,190,366,0,11,1 +282,91,1297,302,198,380,0,11,1 +283,91,1317,295,207,393,0,11,1 +284,91,1338,288,214,406,0,11,1 +285,91,1358,281,223,419,0,11,1 +286,91,1379,274,230,432,0,11,1 +287,91,1399,267,239,445,0,11,1 +288,91,1420,260,246,458,0,11,1 +289,91,1440,253,255,471,0,11,1 +290,91,1461,246,263,485,0,11,1 +291,91,1491,235,276,505,0,11,1 +292,91,1522,224,289,526,0,11,1 +293,91,1553,213,302,547,0,11,1 +294,91,1584,203,315,567,0,11,1 +295,91,1625,196,309,591,0,11,1 +296,91,1667,189,303,615,0,11,1 +297,91,1708,182,298,639,0,11,1 +298,91,1750,176,292,663,0,11,1 +299,91,1801,167,292,698,0,11,1 +18,92,1339,398,13,188,0,10,1 +19,92,1341,398,13,188,0,10,1 +20,92,1343,398,13,188,0,10,1 +21,92,1345,398,13,188,0,10,1 +22,92,1347,398,13,188,0,10,1 +23,92,1349,399,13,188,0,10,1 +24,92,1351,399,13,188,0,10,1 +25,92,1353,399,13,188,0,10,1 +26,92,1355,399,13,188,0,10,0.91534 +27,92,1357,399,13,188,0,10,0.71429 +28,92,1359,400,13,188,0,10,0.71958 +29,92,1360,400,13,188,0,10,0.73545 +30,92,1362,401,13,188,0,10,0.74074 +31,92,1364,402,13,188,0,10,0.7672 +32,92,1366,403,13,188,0,10,0.77249 +33,92,1368,404,13,188,0,10,0.70899 +34,92,1370,404,13,188,0,10,0.69312 +35,92,1372,405,13,188,0,10,1 +36,92,1374,406,13,188,0,10,1 +37,92,1376,407,13,188,0,10,1 +38,92,1378,408,13,188,0,10,1 +39,92,1380,411,13,188,0,10,1 +40,92,1383,415,13,188,0,10,1 +41,92,1385,418,13,188,0,10,1 +42,92,1388,422,13,188,0,10,1 +43,92,1391,426,13,188,0,10,1 +44,92,1393,429,13,188,0,10,1 +45,92,1396,433,13,188,0,10,1 +46,92,1398,436,13,188,0,10,1 +47,92,1401,440,13,188,0,10,1 +48,92,1404,444,13,188,0,10,1 +49,92,1406,444,13,188,0,10,1 +50,92,1408,444,13,188,0,10,1 +51,92,1410,444,13,188,0,10,1 +52,92,1412,444,13,188,0,10,1 +53,92,1414,444,13,188,0,10,1 +54,92,1416,444,13,188,0,10,1 +55,92,1418,444,13,188,0,10,1 +56,92,1420,444,13,188,0,10,1 +57,92,1422,444,13,188,0,10,1 +58,92,1424,445,13,188,0,10,1 +59,92,1425,445,13,188,0,10,1 +60,92,1426,445,13,188,0,10,1 +61,92,1428,445,13,188,0,10,1 +62,92,1429,445,13,188,0,10,1 +63,92,1431,445,13,188,0,10,1 +64,92,1432,445,13,188,0,10,1 +65,92,1433,445,13,188,0,10,1 +66,92,1435,445,13,188,0,10,1 +67,92,1436,445,13,188,0,10,1 +68,92,1438,445,13,188,0,10,1 +69,92,1437,445,13,188,0,10,1 +70,92,1437,445,13,188,0,10,1 +71,92,1437,446,13,188,0,10,1 +72,92,1437,446,13,188,0,10,1 +73,92,1437,447,13,188,0,10,1 +74,92,1437,447,13,188,0,10,1 +75,92,1437,448,13,188,0,10,1 +76,92,1435,448,13,188,0,10,1 +77,92,1434,449,13,188,0,10,1 +78,92,1433,449,13,188,0,10,1 +79,92,1432,450,13,188,0,10,1 +80,92,1430,450,13,188,0,10,1 +81,92,1429,451,13,188,0,10,1 +82,92,1428,452,13,188,0,10,1 +83,92,1427,452,13,188,0,10,1 +84,92,1425,453,13,188,0,10,1 +85,92,1424,453,13,188,0,10,1 +86,92,1423,454,13,188,0,10,1 +87,92,1422,455,13,188,0,10,1 +88,92,1419,455,13,188,0,10,1 +89,92,1417,456,13,188,0,10,1 +90,92,1415,456,13,188,0,10,1 +91,92,1413,457,13,188,0,10,1 +92,92,1411,457,13,188,0,10,1 +93,92,1409,458,13,188,0,10,1 +94,92,1407,458,13,188,0,10,1 +95,92,1405,459,13,188,0,10,1 +96,92,1403,459,13,188,0,10,1 +97,92,1401,460,13,188,0,10,1 +98,92,1399,461,13,188,0,10,1 +99,92,1396,461,13,188,0,10,1 +100,92,1393,462,13,188,0,10,1 +101,92,1390,463,13,188,0,10,1 +102,92,1387,464,13,188,0,10,1 +103,92,1385,465,13,188,0,10,1 +104,92,1382,466,13,188,0,10,1 +105,92,1379,467,13,188,0,10,1 +106,92,1376,468,13,188,0,10,1 +107,92,1373,469,13,188,0,10,1 +108,92,1371,469,13,188,0,10,1 +109,92,1368,470,13,188,0,10,1 +110,92,1365,471,13,188,0,10,1 +111,92,1362,472,13,188,0,10,1 +112,92,1359,473,13,188,0,10,1 +113,92,1357,474,13,188,0,10,1 +114,92,1354,475,13,188,0,10,1 +115,92,1351,476,13,188,0,10,1 +116,92,1348,477,13,188,0,10,1 +117,92,1346,478,13,188,0,10,1 +118,92,1342,478,13,188,0,10,1 +119,92,1339,479,13,188,0,10,1 +120,92,1336,480,13,188,0,10,1 +121,92,1333,481,13,188,0,10,1 +122,92,1329,482,13,188,0,10,1 +123,92,1326,483,13,188,0,10,1 +124,92,1323,484,13,188,0,10,1 +125,92,1320,485,13,188,0,10,1 +126,92,1316,486,13,188,0,10,1 +127,92,1313,487,13,188,0,10,1 +128,92,1310,488,13,188,0,10,1 +129,92,1307,489,13,188,0,10,1 +130,92,1303,490,13,188,0,10,1 +131,92,1300,491,13,188,0,10,0.95465 +132,92,1297,492,13,188,0,10,0.94142 +133,92,1294,493,13,188,0,10,0.93953 +134,92,1290,494,13,188,0,10,0.95011 +135,92,1287,495,13,188,0,10,0.95314 +136,92,1284,496,13,188,0,10,0.95616 +137,92,1281,497,13,188,0,10,0.94709 +138,92,1278,498,13,188,0,10,0.94898 +139,92,1275,497,13,190,0,10,0.94951 +140,92,1272,497,14,191,0,10,0.95312 +141,92,1270,496,13,193,0,10,0.94845 +142,92,1267,496,14,194,0,10,0.95214 +143,92,1265,495,14,196,0,10,0.94112 +144,92,1262,495,14,197,0,10,0.95118 +145,92,1259,494,15,199,0,10,0.94375 +146,92,1257,494,14,200,0,10,0.95025 +147,92,1254,493,15,202,0,10,0.94273 +148,92,1252,493,15,204,0,10,0.94329 +149,92,1248,492,15,206,0,10,0.95169 +150,92,1244,492,15,207,0,10,0.95343 +151,92,1240,491,16,209,0,10,0.95518 +152,92,1237,491,15,210,0,10,0.95261 +153,92,1233,490,16,212,0,10,0.95581 +154,92,1229,490,16,213,0,10,0.9365 +155,92,1225,489,17,215,0,10,0.9321 +156,92,1222,489,16,216,0,10,0.9306 +157,92,1218,488,17,218,0,10,0.92237 +158,92,1214,488,17,220,0,10,0.92534 +159,92,1210,487,18,222,0,10,0.92211 +160,92,1207,487,17,223,0,10,0.93254 +161,92,1203,486,18,225,0,10,0.93479 +162,92,1199,486,18,226,0,10,0.94319 +163,92,1195,485,19,228,0,10,0.94498 +164,92,1192,485,18,229,0,10,0.95057 +165,92,1188,484,19,231,0,10,0.94569 +166,92,1184,484,19,232,0,10,0.94292 +167,92,1181,484,19,234,0,10,0.94043 +168,92,1179,483,19,236,0,10,0.95063 +169,92,1177,483,19,237,0,10,1 +170,92,1175,483,20,239,0,10,1 +171,92,1173,483,20,240,0,10,1 +172,92,1171,482,20,242,0,10,1 +173,92,1169,482,21,244,0,10,1 +174,92,1167,482,21,245,0,10,1 +175,92,1165,482,21,246,0,10,1 +176,92,1164,482,21,248,0,10,1 +177,92,1162,482,21,249,0,10,1 +178,92,1160,482,22,251,0,10,1 +179,92,1158,482,22,253,0,10,1 +180,92,1157,483,22,254,0,10,0.94408 +181,92,1155,483,22,256,0,10,0.95145 +182,92,1153,483,23,258,0,10,0.94723 +183,92,1151,483,23,260,0,10,0.94764 +184,92,1150,484,23,261,0,10,0.94132 +185,92,1148,484,24,262,0,10,0.94388 +186,92,1147,484,24,264,0,10,0.9443 +187,92,1146,484,24,266,0,10,0.94472 +188,92,1145,485,24,267,0,10,0.9403 +189,92,1144,483,24,271,0,10,0.93206 +190,92,1143,481,25,276,0,10,0.92974 +191,92,1142,479,25,280,0,10,1 +192,92,1141,478,26,284,0,10,1 +193,92,1140,476,26,288,0,10,1 +194,92,1139,474,27,293,0,10,1 +195,92,1138,472,27,297,0,10,1 +196,92,1137,471,28,301,0,10,1 +197,92,1136,469,28,306,0,10,1 +198,92,1135,467,29,310,0,10,1 +199,92,1134,466,29,314,0,10,1 +200,92,1133,464,30,318,0,10,1 +201,92,1132,462,30,323,0,10,1 +202,92,1131,460,31,327,0,10,1 +203,92,1130,459,31,331,0,10,1 +204,92,1129,457,32,335,0,10,1 +205,92,1128,455,32,340,0,10,1 +206,92,1128,454,32,344,0,10,1 +207,92,1128,452,32,348,0,10,1 +208,92,1128,451,33,352,0,10,1 +209,92,1128,450,33,356,0,10,1 +210,92,1128,448,34,361,0,10,1 +211,92,1128,447,34,365,0,10,1 +212,92,1128,446,35,369,0,10,1 +213,92,1128,444,35,374,0,10,1 +214,92,1128,443,36,378,0,10,1 +215,92,1128,442,36,382,0,10,1 +216,92,1128,440,37,387,0,10,1 +217,92,1128,439,37,391,0,10,1 +218,92,1128,438,38,395,0,10,1 +219,92,1129,437,38,399,0,10,1 +220,92,1131,436,39,403,0,10,1 +221,92,1134,435,39,407,0,10,1 +222,92,1137,434,39,412,0,10,1 +223,92,1139,433,40,416,0,10,1 +224,92,1142,432,40,421,0,10,1 +225,92,1145,432,41,424,0,10,1 +226,92,1147,431,42,428,0,10,1 +227,92,1150,430,42,433,0,10,1 +228,92,1153,429,42,437,0,10,1 +229,92,1155,428,43,442,0,10,1 +230,92,1158,427,43,446,0,10,1 +231,92,1161,427,44,450,0,10,1 +232,92,1166,427,44,454,0,10,1 +233,92,1171,427,45,459,0,10,1 +234,92,1176,427,45,463,0,10,1 +235,92,1181,428,46,467,0,10,1 +236,92,1186,428,46,471,0,10,1 +237,92,1191,428,47,476,0,10,1 +238,92,1197,429,47,480,0,10,1 +239,92,1204,426,47,489,0,10,1 +240,92,1212,424,47,497,0,10,1 +241,92,1219,422,48,505,0,10,1 +242,92,1227,420,47,513,0,10,1 +243,92,1234,417,48,522,0,10,1 +244,92,1242,415,48,530,0,10,1 +245,92,1249,413,48,538,0,10,1 +246,92,1257,411,48,546,0,10,1 +247,92,1265,409,48,554,0,10,1 +248,92,1276,407,48,562,0,10,1 +249,92,1287,405,48,570,0,10,1 +250,92,1298,403,48,579,0,10,1 +251,92,1309,401,48,587,0,10,1 +252,92,1320,399,48,596,0,10,1 +253,92,1331,397,48,604,0,10,1 +254,92,1342,396,49,612,0,10,1 +255,92,1356,394,49,620,0,10,0.87053 +256,92,1371,393,49,628,0,10,0.87644 +257,92,1386,391,49,637,0,10,0.88238 +258,92,1401,390,49,645,0,10,0.88384 +259,92,1413,401,49,645,0,10,0.90043 +260,92,1425,413,49,645,0,10,0.89672 +261,92,1438,425,49,645,0,10,0.90043 +262,92,1454,427,49,645,0,10,0.91146 +263,92,1471,429,49,645,0,10,0.90805 +264,92,1488,431,49,645,0,10,0.90464 +265,92,1505,434,49,645,0,10,0.90898 +266,92,1526,441,49,645,0,10,0.88966 +267,92,1548,448,49,645,0,10,0.90341 +268,92,1570,455,49,645,0,10,0.8961 +269,92,1588,453,49,645,0,10,0.97214 +270,92,1607,452,49,645,0,10,0.97368 +271,92,1626,451,49,645,0,10,0.97523 +272,92,1654,450,49,645,0,10,0.97678 +273,92,1682,449,49,645,0,10,0.97833 +274,92,1710,448,49,645,0,10,0.97988 +275,92,1737,447,49,645,0,10,0.98142 +276,92,1765,447,49,645,0,10,0.98142 +277,92,1792,446,49,645,0,10,0.98297 +278,92,1820,446,49,645,0,10,0.98297 +279,92,1850,449,49,645,0,10,0.97833 +122,93,1364,458,15,203,0,10,1 +123,93,1360,457,15,204,0,10,1 +124,93,1357,457,15,205,0,10,1 +125,93,1354,457,15,206,0,10,1 +126,93,1351,457,15,207,0,10,1 +127,93,1348,457,14,208,0,10,1 +128,93,1344,457,15,208,0,10,1 +129,93,1341,457,15,209,0,10,1 +130,93,1338,457,15,210,0,10,1 +131,93,1335,456,14,212,0,10,0.70423 +132,93,1332,456,14,213,0,10,0.70561 +133,93,1328,456,15,213,0,10,0.70561 +134,93,1325,456,15,214,0,10,0.70698 +135,93,1322,456,14,215,0,10,0.70833 +136,93,1319,456,14,216,0,10,0.70968 +137,93,1316,456,14,217,0,10,0.71101 +138,93,1313,456,14,218,0,10,0.71233 +139,93,1310,456,14,218,0,10,0.71233 +140,93,1307,456,14,219,0,10,0.71364 +141,93,1305,456,14,220,0,10,0.71493 +142,93,1302,456,14,221,0,10,0.71622 +143,93,1299,456,14,222,0,10,0.71749 +144,93,1297,456,14,223,0,10,0.71875 +145,93,1294,456,14,224,0,10,0.72 +146,93,1291,456,14,225,0,10,0.72124 +147,93,1289,456,14,226,0,10,0.72247 +148,93,1286,456,14,227,0,10,0.72368 +149,93,1283,456,14,228,0,10,0.72489 +150,93,1281,456,14,229,0,10,0.73043 +151,93,1278,456,14,230,0,10,0.7316 +152,93,1276,456,14,231,0,10,0.73276 +153,93,1272,455,14,232,0,10,0.73391 +154,93,1269,454,14,233,0,10,0.73504 +155,93,1265,453,14,234,0,10,0.73617 +156,93,1262,452,14,235,0,10,0.74153 +157,93,1258,451,14,236,0,10,0.7384 +158,93,1255,450,14,237,0,10,0.7395 +159,93,1251,449,14,238,0,10,0.74059 +160,93,1248,448,14,239,0,10,0.7375 +161,93,1245,448,14,240,0,10,0.73859 +162,93,1242,447,14,241,0,10,0.73967 +163,93,1239,447,14,242,0,10,0.74074 +164,93,1237,447,13,242,0,10,0.74074 +165,93,1234,446,14,244,0,10,0.74286 +166,93,1231,446,14,245,0,10,0.73171 +167,93,1229,446,13,245,0,10,0.72358 +168,93,1226,446,13,246,0,10,0.7247 +169,93,1223,445,14,248,0,10,1 +170,93,1221,445,13,248,0,10,1 +171,93,1218,445,13,249,0,10,1 +172,93,1216,445,13,250,0,10,1 +173,93,1214,445,13,250,0,10,1 +174,93,1213,445,13,251,0,10,1 +175,93,1211,445,13,252,0,10,1 +176,93,1210,445,13,253,0,10,1 +177,93,1209,445,13,254,0,10,1 +178,93,1207,445,13,255,0,10,1 +179,93,1206,445,13,256,0,10,1 +180,93,1204,445,13,257,0,10,0.72868 +181,93,1203,445,13,258,0,10,0.72973 +182,93,1202,445,13,259,0,10,0.73077 +183,93,1200,444,13,261,0,10,0.73282 +184,93,1199,443,13,264,0,10,0.73585 +185,93,1198,442,13,266,0,10,0.73783 +186,93,1196,442,14,268,0,10,0.73978 +187,93,1195,441,14,270,0,10,0.7417 +188,93,1194,440,14,273,0,10,0.74453 +189,93,1193,440,14,275,0,10,0.74638 +190,93,1191,439,15,277,0,10,0.73741 +191,93,1190,438,15,280,0,10,1 +192,93,1189,437,15,282,0,10,1 +193,93,1187,437,16,284,0,10,1 +194,93,1186,436,16,286,0,10,1 +195,93,1185,435,16,289,0,10,1 +196,93,1184,435,16,291,0,10,1 +197,93,1183,434,17,294,0,10,1 +198,93,1183,434,17,296,0,10,1 +199,93,1183,434,17,298,0,10,1 +200,93,1183,434,17,300,0,10,1 +201,93,1183,433,17,303,0,10,1 +202,93,1183,433,17,305,0,10,1 +203,93,1182,433,18,307,0,10,1 +204,93,1182,433,18,309,0,10,1 +205,93,1182,432,18,312,0,10,1 +206,93,1182,432,18,314,0,10,1 +207,93,1182,432,18,316,0,10,1 +208,93,1182,432,18,318,0,10,1 +209,93,1182,432,18,320,0,10,1 +210,93,1183,431,18,322,0,10,1 +211,93,1184,430,19,324,0,10,1 +212,93,1186,429,18,327,0,10,1 +213,93,1187,428,19,329,0,10,1 +214,93,1189,428,18,331,0,10,1 +215,93,1190,427,19,333,0,10,1 +216,93,1192,426,18,336,0,10,1 +217,93,1193,425,19,338,0,10,1 +218,93,1195,425,19,340,0,10,1 +219,93,1197,425,19,342,0,10,1 +220,93,1199,425,20,345,0,10,1 +221,93,1202,425,19,347,0,10,1 +222,93,1204,426,20,349,0,10,1 +223,93,1206,426,20,182,0,10,1 +336,94,1239,526,18,184,0,10,1 +337,94,1241,525,19,187,0,10,1 +338,94,1244,524,18,190,0,10,0.98953 +339,94,1247,524,18,192,0,10,0.98446 +340,94,1249,526,18,191,0,10,0.98438 +341,94,1251,528,18,191,0,10,0.98438 +342,94,1254,530,18,191,0,10,0.97917 +343,94,1256,532,18,191,0,10,0.97917 +344,94,1259,534,18,191,0,10,0.97917 +345,94,1261,536,18,191,0,10,0.97396 +346,94,1264,538,18,191,0,10,0.97396 +347,94,1266,540,18,191,0,10,0.97396 +348,94,1269,542,18,191,0,10,0.96875 +349,94,1271,544,18,191,0,10,0.96875 +350,94,1274,546,18,191,0,10,0.96354 +351,94,1275,548,18,196,0,10,0.96447 +352,94,1277,550,18,201,0,10,0.96535 +353,94,1279,552,18,206,0,10,0.96618 +354,94,1281,554,17,211,0,10,0.96698 +355,94,1282,557,18,215,0,10,0.96759 +356,94,1284,559,18,220,0,10,0.96833 +357,94,1286,561,17,225,0,10,0.96903 +358,94,1288,563,17,230,0,10,0.9697 +359,94,1289,565,18,235,0,10,0.97034 +360,94,1291,568,18,239,0,10,0.97083 +361,94,1293,570,17,244,0,10,0.97143 +362,94,1295,572,17,249,0,10,0.86311 +363,94,1296,574,18,254,0,10,0.8388 +364,94,1298,576,17,259,0,10,0.82692 +365,94,1300,579,17,263,0,10,0.82197 +366,94,1302,581,17,268,0,10,0.81784 +367,94,1303,583,17,273,0,10,0.82948 +368,94,1305,585,17,278,0,10,0.82597 +369,94,1307,587,17,283,0,10,0.80869 +370,94,1309,590,17,287,0,10,0.80671 +371,94,1308,589,18,290,0,10,0.84409 +372,94,1308,589,18,292,0,10,0.87354 +373,94,1308,589,18,295,0,10,0.90149 +374,94,1307,588,19,298,0,10,0.8903 +375,94,1307,588,19,300,0,10,0.88987 +376,94,1307,588,19,303,0,10,0.8898 +377,94,1307,588,19,305,0,10,0.88938 +378,94,1306,587,20,308,0,10,0.89105 +379,94,1306,587,20,311,0,10,0.88996 +380,94,1306,587,20,313,0,10,0.8896 +381,94,1306,587,20,316,0,10,0.88959 +382,94,1302,586,21,319,0,10,0.92557 +383,94,1299,586,21,321,0,10,0.95822 +384,94,1296,586,21,324,0,10,0.95105 +385,94,1293,586,21,326,0,10,0.9412 +386,94,1290,586,22,329,0,10,0.92398 +387,94,1287,585,22,332,0,10,0.91579 +388,94,1284,585,23,334,0,10,0.90547 +389,94,1281,584,23,337,0,10,0.89867 +390,94,1279,584,23,339,0,10,0.8864 +391,94,1272,586,23,341,0,10,0.91813 +392,94,1266,588,23,344,0,10,0.93696 +393,94,1259,590,24,346,0,10,0.9668 +394,94,1253,592,24,349,0,10,0.94491 +395,94,1245,591,24,352,0,10,0.93598 +396,94,1237,591,25,354,0,10,0.93261 +397,94,1229,590,25,357,0,10,0.93038 +398,94,1221,590,26,359,0,10,0.93374 +399,94,1213,589,26,362,0,10,0.98623 +400,94,1206,589,26,365,0,10,0.98361 +401,94,1192,589,26,365,0,10,0.98361 +402,94,1178,589,26,365,0,10,0.98087 +403,94,1164,589,26,365,0,10,0.97814 +404,94,1150,590,26,365,0,10,0.97814 +405,94,1136,590,26,365,0,10,0.97541 +406,94,1122,590,26,365,0,10,0.97268 +407,94,1108,591,26,365,0,10,0.97268 +408,94,1094,591,26,365,0,10,0.47966 +409,94,1080,591,26,365,0,10,0.51063 +410,94,1067,592,26,365,0,10,0.5936 +411,94,1048,592,26,369,0,10,0.602 +412,94,1029,592,26,373,0,10,0.54427 +413,94,1011,593,25,376,0,10,0.65181 +414,94,992,593,26,380,0,10,0.97638 +415,94,973,593,26,384,0,10,0.97922 +416,94,955,594,25,387,0,10,0.98196 +417,94,936,594,25,391,0,10,0.98469 +418,94,918,595,25,394,0,10,0.98734 +419,94,891,593,25,398,0,10,0.98496 +420,94,865,592,25,401,0,10,0.98259 +421,94,841,594,25,401,0,10,0.89437 +422,94,817,596,25,401,0,10,0.77497 +423,94,793,599,25,401,0,10,0.53157 +424,94,761,600,25,401,0,10,0.5 +425,94,730,601,25,401,0,10,0.50498 +426,94,699,603,25,401,0,10,0.50746 +427,94,668,604,25,401,0,10,0.51741 +428,94,637,606,25,401,0,10,0.52488 +429,94,604,608,25,401,0,10,0.55473 +430,94,571,610,25,401,0,10,0.56468 +431,94,533,613,25,401,0,10,0.58209 +432,94,495,617,25,401,0,10,0.59204 +433,94,458,621,25,401,0,10,0.59357 +434,94,420,624,25,401,0,10,0.56372 +435,94,383,628,25,401,0,10,0.52545 +436,94,345,632,25,401,0,10,0.48259 +437,94,308,636,25,401,0,10,0.49751 +438,94,261,638,25,401,0,10,0.49254 +439,94,214,640,25,401,0,10,0.50995 +440,94,168,643,25,401,0,10,0.52488 +441,94,121,647,25,401,0,10,0.5398 +442,94,74,652,25,401,0,10,0.56716 +330,95,1204,428,52,109,0,11,1 +331,95,1207,424,53,109,0,11,1 +332,95,1210,420,54,110,0,11,1 +333,95,1213,416,55,110,0,11,1 +334,95,1217,412,55,111,0,11,1 +335,95,1218,412,56,111,0,11,1 +336,95,1220,412,56,112,0,11,1 +337,95,1221,412,57,112,0,11,1 +338,95,1223,412,57,113,0,11,1 +339,95,1225,413,58,113,0,11,1 +340,95,1226,414,59,114,0,11,1 +341,95,1228,416,60,114,0,11,1 +342,95,1230,418,60,115,0,11,1 +343,95,1232,420,61,115,0,11,1 +344,95,1234,422,62,115,0,11,1 +345,95,1236,424,62,116,0,11,1 +346,95,1238,426,63,116,0,11,1 +347,95,1240,428,64,116,0,11,1 +348,95,1242,430,64,117,0,11,1 +349,95,1244,432,65,117,0,11,1 +350,95,1246,434,66,118,0,11,1 +351,95,1247,434,66,120,0,11,1 +352,95,1249,435,66,121,0,11,1 +353,95,1251,436,66,122,0,11,1 +354,95,1253,437,66,123,0,11,1 +355,95,1255,438,65,125,0,11,1 +356,95,1256,439,66,126,0,11,1 +357,95,1258,440,66,127,0,11,1 +358,95,1260,441,66,128,0,11,1 +359,95,1262,442,65,129,0,11,1 +360,95,1264,443,65,131,0,11,1 +361,95,1265,443,66,133,0,11,1 +362,95,1267,444,66,134,0,11,1 +363,95,1269,445,65,135,0,11,1 +364,95,1271,446,65,136,0,11,1 +365,95,1273,447,65,138,0,11,1 +366,95,1274,448,66,139,0,11,1 +367,95,1276,449,65,140,0,11,1 +368,95,1278,450,65,141,0,11,1 +369,95,1280,451,65,142,0,11,1 +370,95,1282,452,65,144,0,11,1 +371,95,1281,450,66,146,0,11,1 +372,95,1281,449,67,147,0,11,1 +373,95,1281,448,67,148,0,11,1 +374,95,1280,447,69,149,0,11,1 +375,95,1280,446,70,150,0,11,1 +376,95,1280,444,70,152,0,11,1 +377,95,1280,443,71,153,0,11,1 +378,95,1279,442,73,154,0,11,1 +379,95,1279,441,73,155,0,11,1 +380,95,1279,440,74,156,0,11,1 +381,95,1279,439,75,157,0,11,1 +382,95,1276,437,76,158,0,11,1 +383,95,1274,435,77,160,0,11,1 +384,95,1271,434,78,160,0,11,1 +385,95,1269,432,79,162,0,11,1 +386,95,1267,431,80,163,0,11,1 +387,95,1262,428,81,165,0,11,1 +388,95,1258,426,82,166,0,11,1 +389,95,1254,424,83,167,0,11,1 +390,95,1250,422,84,168,0,11,1 +391,95,1243,421,85,169,0,11,1 +392,95,1237,421,86,170,0,11,1 +393,95,1230,420,87,172,0,11,1 +394,95,1224,420,88,173,0,11,1 +395,95,1215,419,89,174,0,11,1 +396,95,1206,418,90,175,0,11,1 +397,95,1197,417,91,176,0,11,1 +398,95,1188,416,92,177,0,11,1 +399,95,1179,415,93,178,0,11,1 +400,95,1171,414,94,180,0,11,1 +401,95,1157,412,94,182,0,11,1 +402,95,1144,411,94,184,0,11,1 +403,95,1131,409,94,187,0,11,1 +404,95,1118,408,94,189,0,11,1 +405,95,1105,406,94,192,0,11,1 +406,95,1092,405,93,194,0,11,1 +407,95,1079,403,93,197,0,11,1 +408,95,1066,402,93,199,0,11,1 +409,95,1053,400,93,202,0,11,1 +410,95,1040,399,93,204,0,11,1 +411,95,1018,397,95,205,0,11,1 +412,95,996,396,98,206,0,11,1 +413,95,974,394,100,207,0,11,1 +414,95,952,393,103,208,0,11,1 +415,95,930,391,105,209,0,11,1 +416,95,908,390,108,210,0,11,1 +417,95,886,388,110,211,0,11,1 +418,95,864,387,113,212,0,11,1 +419,95,842,385,115,213,0,11,1 +420,95,820,384,118,214,0,11,1 +421,95,794,380,119,218,0,11,1 +422,95,768,377,120,221,0,11,1 +423,95,742,373,121,225,0,11,1 +424,95,716,370,123,229,0,11,1 +425,95,682,369,124,233,0,11,1 +426,95,649,369,125,237,0,11,1 +427,95,616,369,126,240,0,11,1 +428,95,583,369,127,244,0,11,1 +429,95,547,369,128,248,0,11,1 +430,95,512,370,129,252,0,11,1 +431,95,474,370,129,255,0,11,1 +432,95,436,370,129,258,0,11,1 +433,95,398,370,129,262,0,11,1 +434,95,360,371,129,264,0,11,1 +435,95,322,371,129,268,0,11,1 +436,95,284,371,129,271,0,11,1 +437,95,247,372,128,274,0,11,1 +438,95,200,369,128,277,0,11,1 +439,95,153,367,128,280,0,11,1 +440,95,106,365,128,283,0,11,1 +441,95,64,362,127,288,0,11,1 +442,95,22,359,127,293,0,11,1 +270,96,1102,435,19,233,0,10,0.70085 +271,96,1109,435,19,233,0,10,1 +272,96,1116,436,19,233,0,10,1 +273,96,1123,437,19,233,0,10,1 +274,96,1130,438,19,233,0,10,1 +275,96,1138,439,19,233,0,10,1 +276,96,1145,440,19,233,0,10,1 +277,96,1152,441,19,233,0,10,1 +278,96,1159,442,19,233,0,10,1 +279,96,1166,443,19,233,0,10,1 +280,96,1174,444,19,233,0,10,1 +281,96,1181,444,19,233,0,10,1 +282,96,1188,445,19,233,0,10,1 +283,96,1195,445,20,233,0,10,1 +284,96,1202,446,20,233,0,10,1 +285,96,1209,447,21,232,0,10,1 +286,96,1216,447,21,233,0,10,1 +287,96,1223,448,21,232,0,10,1 +288,96,1230,448,22,233,0,10,1 +289,96,1237,449,22,232,0,10,0.92834 +290,96,1244,450,23,232,0,10,0.75966 +291,96,1251,449,23,232,0,10,0.7382 +292,96,1258,449,23,232,0,10,0.74678 +293,96,1265,448,23,232,0,10,0.75536 +294,96,1272,448,23,232,0,10,0.75966 +295,96,1279,447,23,232,0,10,0.73498 +296,96,1286,447,23,232,0,10,0.7103 +297,96,1293,446,23,232,0,10,0.68187 +298,96,1300,446,23,232,0,10,0.65236 +299,96,1307,445,23,232,0,10,0.6309 +300,96,1315,445,23,232,0,10,0.59675 +301,96,1322,446,23,232,0,10,0.57189 +302,96,1329,447,23,232,0,10,0.55794 +303,96,1337,449,23,232,0,10,0.55365 +304,96,1344,450,23,232,0,10,0.55794 +305,96,1352,452,23,232,0,10,0.55794 +306,96,1359,453,23,232,0,10,0.56223 +307,96,1366,454,23,232,0,10,0.56652 +308,96,1374,456,23,232,0,10,0.56223 +309,96,1381,457,23,232,0,10,0.56652 +310,96,1389,459,23,232,0,10,0.56652 +311,96,1395,451,23,236,0,10,0.49367 +312,96,1402,454,23,239,0,10,0.47917 +313,96,1410,457,22,243,0,10,0.46311 +314,96,1417,460,23,247,0,10,0.59543 +315,96,1425,463,22,251,0,10,0.60386 +316,96,1432,467,23,253,0,10,0.62057 +317,96,1440,470,22,257,0,10,0.63313 +318,96,1447,473,23,261,0,10,0.95833 +319,96,1455,476,22,265,0,10,1 +320,96,1463,480,22,268,0,10,1 +321,96,1469,479,23,270,0,10,1 +322,96,1475,479,24,271,0,10,1 +323,96,1482,479,24,273,0,10,1 +324,96,1488,479,25,274,0,10,1 +325,96,1495,479,25,275,0,10,1 +326,96,1501,479,26,277,0,10,1 +327,96,1508,479,26,278,0,10,1 +328,96,1514,479,27,279,0,10,1 +329,96,1521,479,27,281,0,10,1 +330,96,1529,479,27,282,0,10,1 +331,96,1534,479,27,282,0,10,1 +332,96,1540,480,27,282,0,10,1 +333,96,1545,481,27,282,0,10,1 +334,96,1551,481,27,282,0,10,1 +335,96,1557,482,27,282,0,10,1 +336,96,1562,483,27,282,0,10,1 +337,96,1568,483,27,282,0,10,1 +338,96,1573,484,27,282,0,10,1 +339,96,1579,485,27,282,0,10,1 +340,96,1585,486,27,282,0,10,1 +341,96,1590,491,27,282,0,10,1 +342,96,1596,497,27,282,0,10,1 +343,96,1602,502,27,282,0,10,1 +344,96,1608,508,27,282,0,10,1 +345,96,1614,514,27,282,0,10,1 +346,96,1619,519,27,282,0,10,1 +347,96,1625,525,27,282,0,10,1 +348,96,1631,530,27,282,0,10,1 +349,96,1637,536,27,282,0,10,1 +350,96,1643,542,27,282,0,10,1 +351,96,1647,535,28,293,0,10,1 +352,96,1652,529,29,304,0,10,1 +353,96,1657,522,30,315,0,10,1 +354,96,1661,516,32,326,0,10,1 +355,96,1666,510,33,337,0,10,1 +356,96,1671,503,33,348,0,10,1 +357,96,1675,497,35,359,0,10,1 +358,96,1680,490,36,370,0,10,1 +359,96,1685,484,37,381,0,10,1 +360,96,1690,478,38,392,0,10,1 +361,96,1695,483,38,392,0,10,1 +362,96,1701,489,38,392,0,10,1 +363,96,1707,495,38,392,0,10,1 +364,96,1712,501,38,392,0,10,1 +365,96,1718,507,38,392,0,10,1 +366,96,1724,513,38,392,0,10,1 +367,96,1729,519,38,392,0,10,1 +368,96,1735,525,38,392,0,10,1 +369,96,1741,531,38,392,0,10,1 +370,96,1747,537,38,392,0,10,1 +371,96,1752,539,38,392,0,10,1 +372,96,1757,541,38,392,0,10,1 +373,96,1762,543,38,392,0,10,1 +374,96,1767,545,38,392,0,10,1 +375,96,1773,547,38,392,0,10,1 +376,96,1778,549,38,392,0,10,1 +377,96,1783,551,38,392,0,10,1 +378,96,1788,553,38,392,0,10,1 +379,96,1793,555,38,392,0,10,1 +380,96,1799,558,38,392,0,10,1 +381,96,1801,554,38,400,0,10,1 +382,96,1804,551,38,407,0,10,1 +383,96,1807,548,37,414,0,10,1 +384,96,1809,545,38,421,0,10,1 +385,96,1812,542,38,429,0,10,1 +386,96,1815,538,37,437,0,10,1 +387,96,1817,535,38,444,0,10,1 +388,96,1820,532,37,451,0,10,1 +389,96,1823,529,37,458,0,10,1 +390,96,1826,526,37,466,0,10,1 +391,96,1823,521,38,476,0,10,1 +392,96,1821,517,38,486,0,10,1 +393,96,1818,513,39,496,0,10,1 +394,96,1816,509,40,506,0,10,1 +395,96,1812,505,40,516,0,10,1 +396,96,1808,501,41,526,0,10,1 +397,96,1804,497,42,536,0,10,1 +398,96,1800,493,43,546,0,10,1 +399,96,1796,489,44,556,0,10,1 +400,96,1792,485,45,566,0,10,1 +401,96,1789,482,39,570,0,10,1 +402,96,1780,481,39,575,0,10,1 +403,96,1771,480,40,580,0,10,1 +404,96,1762,479,41,585,0,10,1 +405,96,1753,479,42,590,0,10,1 +406,96,1744,478,42,595,0,10,1 +407,96,1735,477,43,600,0,10,1 +408,96,1726,476,44,605,0,10,0.99835 +409,96,1718,476,44,610,0,10,0.99018 +410,96,1702,472,44,615,0,10,0.98864 +411,96,1689,471,43,615,0,10,0.99026 +412,96,1677,471,41,614,0,10,0.99187 +413,96,1665,470,39,614,0,10,0.9935 +414,96,1653,470,37,614,0,10,0.9935 +415,96,1637,469,38,615,0,10,0.99351 +416,96,1622,469,39,615,0,10,0.99351 +417,96,1606,469,41,615,0,10,0.99351 +418,96,1591,469,41,615,0,10,0.99351 +419,96,1575,469,43,615,0,10,0.99351 +420,96,1560,469,44,615,0,10,0.99351 +421,96,1536,468,43,615,0,10,0.99513 +422,96,1512,468,42,615,0,10,0.99513 +423,96,1488,468,42,614,0,10,0.99675 +424,96,1465,468,40,614,0,10,0.99675 +425,96,1441,467,39,615,0,10,0.99675 +426,96,1417,467,39,614,0,10,0.99837 +427,96,1393,467,38,614,0,10,0.99837 +428,96,1370,467,37,614,0,10,0.99837 +429,96,1342,467,40,614,0,10,0.99837 +430,96,1314,467,44,615,0,10,0.99675 +431,96,1283,468,42,615,0,10,0.99513 +432,96,1253,469,40,615,0,10,0.99351 +433,96,1222,470,39,615,0,10,0.99188 +434,96,1192,472,36,614,0,10,0.99024 +435,96,1161,473,35,614,0,10,0.98862 +436,96,1131,474,33,614,0,10,0.98699 +437,96,1101,476,31,614,0,10,0.98374 +438,96,1062,481,36,614,0,10,0.97561 +439,96,1024,486,40,614,0,10,0.96748 +440,96,986,491,44,615,0,10,0.95779 +441,96,947,489,43,615,0,10,0.96104 +442,96,909,488,41,615,0,10,0.96266 +443,96,870,487,40,614,0,10,0.96585 +444,96,832,486,38,614,0,10,0.96748 +445,96,784,484,40,614,0,10,0.97073 +446,96,737,483,41,614,0,10,0.97236 +447,96,690,481,42,615,0,10,0.97403 +448,96,643,480,44,615,0,10,0.97565 +449,96,588,479,44,615,0,10,0.97727 +450,96,534,479,44,615,0,10,0.97727 +451,96,485,434,45,655,0,10,0.98628 +452,96,417,393,46,695,0,10,0.98851 +453,96,350,353,47,734,0,10,0.99048 +454,96,283,313,48,774,0,10,0.99097 +455,96,216,273,49,813,0,10,0.99263 +456,96,149,233,50,853,0,10,0.99297 +457,96,74,231,50,853,0,10,0.99532 +509,97,1884,644,71,94,0,4,0.51389 +510,97,1854,645,73,97,0,4,0.90541 +511,97,1824,646,76,100,0,4,1 +512,97,1794,647,79,103,0,4,1 +513,97,1766,647,79,102,0,4,1 +514,97,1738,647,79,102,0,4,1 +515,97,1711,647,78,102,0,4,1 +516,97,1683,647,78,102,0,4,1 +517,97,1656,647,77,102,0,4,1 +518,97,1628,647,77,102,0,4,1 +519,97,1601,647,77,102,0,4,1 +520,97,1573,647,77,102,0,4,1 +521,97,1546,647,76,102,0,4,1 +522,97,1518,647,76,102,0,4,1 +523,97,1491,647,75,102,0,4,1 +524,97,1463,647,75,102,0,4,1 +525,97,1436,647,75,102,0,4,1 +526,97,1411,648,75,102,0,4,1 +527,97,1387,650,75,102,0,4,1 +528,97,1363,652,74,101,0,4,1 +529,97,1339,654,74,101,0,4,1 +530,97,1315,656,73,100,0,4,1 +531,97,1291,658,73,100,0,4,1 +532,97,1267,660,73,100,0,4,1 +533,97,1245,660,74,101,0,4,0.98588 +534,97,1224,661,75,101,0,4,0.95124 +535,97,1203,661,76,102,0,4,0.9188 +536,97,1181,662,78,102,0,4,0.91053 +537,97,1160,663,79,103,0,4,0.85 +538,97,1139,663,80,104,0,4,0.83974 +539,97,1117,664,81,104,0,4,0.80256 +540,97,1096,664,82,105,0,4,0.81541 +541,97,1075,665,83,106,0,4,0.78304 +542,97,1053,666,85,106,0,4,0.78537 +543,97,1032,666,86,107,0,4,0.82759 +544,97,1011,667,87,107,0,4,0.87963 +545,97,990,668,88,108,0,4,0.79817 +546,97,971,668,87,109,0,4,0.80909 +547,97,952,669,87,110,0,4,0.79279 +548,97,934,670,86,110,0,4,0.77477 +549,97,915,670,86,112,0,4,0.75221 +550,97,897,671,85,112,0,4,0.73204 +551,97,878,672,85,113,0,4,0.7144 +552,97,860,673,84,113,0,4,0.72126 +553,97,841,673,84,115,0,4,0.76897 +554,97,823,674,83,115,0,4,0.81527 +555,97,804,675,83,116,0,4,0.86569 +556,97,786,676,82,117,0,4,0.87135 +557,97,769,676,80,117,0,4,0.8847 +558,97,752,676,79,118,0,4,0.91597 +559,97,735,676,78,119,0,4,0.91646 +560,97,718,676,77,119,0,4,0.95417 +561,97,701,676,76,120,0,4,0.98283 +562,97,684,676,75,121,0,4,1 +563,97,667,678,76,122,0,4,1 +564,97,650,680,77,124,0,4,1 +565,97,633,682,79,125,0,4,1 +566,97,616,684,80,127,0,4,1 +567,97,600,686,81,129,0,4,1 +568,97,583,688,82,130,0,4,1 +569,97,566,690,84,132,0,4,1 +570,97,549,692,85,133,0,4,1 +571,97,533,694,86,135,0,4,1 +572,97,516,696,87,137,0,4,1 +573,97,499,698,89,138,0,4,1 +574,97,482,700,90,140,0,4,1 +575,97,466,702,91,142,0,4,1 +576,97,450,704,92,143,0,4,1 +577,97,435,706,93,145,0,4,1 +578,97,419,709,95,146,0,4,1 +579,97,404,711,96,148,0,4,1 +580,97,389,713,96,149,0,4,1 +581,97,373,716,98,150,0,4,1 +582,97,358,718,99,152,0,4,1 +583,97,343,721,100,153,0,4,1 +584,97,328,724,101,154,0,4,1 +585,97,313,727,102,156,0,4,1 +586,97,299,730,102,158,0,4,1 +587,97,284,733,103,160,0,4,1 +588,97,270,736,103,162,0,4,1 +589,97,255,739,104,164,0,4,1 +590,97,241,743,105,165,0,4,1 +591,97,228,747,107,167,0,4,1 +592,97,216,752,108,169,0,4,1 +593,97,203,756,110,172,0,4,1 +594,97,191,761,111,174,0,4,1 +595,97,179,765,112,177,0,4,1 +596,97,166,770,114,179,0,4,1 +597,97,154,774,115,182,0,4,1 +598,97,142,779,117,184,0,4,1 +599,97,127,784,119,186,0,4,1 +600,97,113,789,120,189,0,4,1 +601,97,99,795,121,191,0,4,1 +602,97,85,800,122,194,0,4,1 +603,97,71,805,124,197,0,4,1 +604,97,57,811,125,199,0,4,1 +605,97,43,816,126,202,0,4,1 +606,97,29,821,127,205,0,4,1 +607,97,15,827,129,207,0,4,1 +608,97,0,840,129,207,0,4,0.99231 +609,97,-16,845,129,207,0,4,0.86923 +610,97,-32,850,129,207,0,4,0.74615 +611,97,-48,855,129,207,0,4,0.62308 +600,98,293,477,66,27,0,11,1 +601,98,287,480,67,25,0,11,1 +602,98,285,479,67,25,0,11,1 +603,98,284,479,67,25,0,11,1 +604,98,278,480,66,30,0,11,1 +605,98,275,478,66,30,0,11,1 +606,98,272,477,67,30,0,11,1 +607,98,270,476,67,29,0,11,1 +608,98,267,474,67,30,0,11,1 +609,98,265,473,67,29,0,11,1 +610,98,262,472,68,29,0,11,1 +611,98,260,471,68,29,0,11,1 +612,98,255,472,67,29,0,11,1 +613,98,255,468,67,29,0,11,1 +614,98,251,469,67,29,0,11,1 +615,98,247,469,67,29,0,11,1 +616,98,244,467,67,29,0,11,1 +617,98,243,467,67,29,0,11,1 +618,98,238,467,67,29,0,11,1 +619,98,232,467,67,29,0,11,1 +620,98,230,467,71,29,0,11,1 +621,98,225,469,71,29,0,11,1 +622,98,221,469,71,29,0,11,1 +623,98,219,474,71,29,0,11,1 +624,98,218,471,71,29,0,11,1 +625,98,217,477,71,29,0,11,1 +626,98,215,474,71,30,0,11,1 +627,98,210,479,71,31,0,11,1 +628,98,208,481,72,32,0,11,1 +629,98,207,484,73,33,0,11,1 +630,98,207,483,74,34,0,11,1 +631,98,208,483,74,35,0,11,1 +632,98,207,485,75,36,0,11,1 +633,98,207,485,75,36,0,11,1 +634,98,207,485,75,37,0,11,1 +635,98,205,483,76,38,0,11,1 +636,98,207,487,75,38,0,11,1 +637,98,208,489,74,37,0,11,1 +638,98,209,492,74,35,0,11,1 +639,98,211,493,74,35,0,11,1 +640,98,213,494,74,36,0,11,1 +641,98,215,496,75,36,0,11,1 +642,98,215,496,75,36,0,11,1 +643,98,216,496,75,37,0,11,1 +644,98,219,496,75,37,0,11,1 +645,98,222,497,75,37,0,11,1 +646,98,223,497,76,37,0,11,1 +647,98,225,498,76,37,0,11,1 +648,98,227,499,77,37,0,11,1 +649,98,232,492,77,37,0,11,1 +650,98,234,495,77,37,0,11,1 +651,98,238,498,77,37,0,11,1 +652,98,241,489,78,36,0,11,1 +653,98,244,491,79,35,0,11,1 +654,98,248,493,79,35,0,11,1 +655,98,253,490,79,35,0,11,1 +656,98,258,500,79,35,0,11,1 +657,98,264,503,79,35,0,11,1 +658,98,270,505,80,36,0,11,1 +659,98,276,517,81,37,0,11,1 +660,98,278,515,81,38,0,11,1 +661,98,280,514,82,38,0,11,1 +662,98,284,512,82,39,0,11,1 +663,98,288,511,83,39,0,11,1 +664,98,293,507,84,40,0,11,1 +665,98,295,505,85,40,0,11,1 +666,98,299,502,86,40,0,11,1 +667,98,304,500,86,40,0,11,1 +668,98,309,498,87,40,0,11,1 +669,98,314,495,87,40,0,11,1 +670,98,319,492,88,41,0,11,1 +671,98,324,490,89,40,0,11,1 +672,98,329,487,90,41,0,11,1 +673,98,334,485,91,41,0,11,1 +674,98,338,476,92,41,0,11,1 +675,98,340,469,93,41,0,11,1 +676,98,345,477,93,41,0,11,1 +131,99,1310,458,58,62,0,11,1 +132,99,1306,460,58,62,0,11,1 +133,99,1303,462,58,62,0,11,1 +134,99,1300,464,58,62,0,11,1 +135,99,1297,463,58,62,0,11,1 +136,99,1294,462,58,62,0,11,1 +137,99,1290,462,58,62,0,11,1 +138,99,1287,462,58,62,0,11,1 +139,99,1284,461,58,62,0,11,1 +140,99,1282,461,58,62,0,11,1 +141,99,1279,461,58,62,0,11,1 +142,99,1277,461,58,62,0,11,1 +143,99,1274,461,58,62,0,11,1 +144,99,1272,461,58,62,0,11,1 +145,99,1269,461,58,62,0,11,1 +146,99,1267,461,58,62,0,11,1 +147,99,1264,461,58,62,0,11,1 +148,99,1262,461,58,62,0,11,1 +149,99,1259,461,58,62,0,11,1 +150,99,1255,461,60,61,0,11,1 +151,99,1252,461,61,61,0,11,1 +152,99,1248,461,61,61,0,11,1 +153,99,1245,460,61,61,0,11,1 +154,99,1239,461,61,61,0,11,1 +155,99,1235,460,62,61,0,11,1 +156,99,1231,460,63,60,0,11,1 +157,99,1227,460,62,61,0,11,1 +158,99,1223,459,62,61,0,11,1 +159,99,1219,458,62,61,0,11,1 +160,99,1217,458,61,62,0,11,1 +161,99,1214,458,61,62,0,11,1 +162,99,1211,458,61,62,0,11,1 +163,99,1208,458,61,62,0,11,1 +164,99,1205,458,61,62,0,11,1 +165,99,1201,457,61,62,0,11,1 +166,99,1197,456,62,65,0,11,1 +167,99,1194,456,62,67,0,11,1 +168,99,1193,454,62,67,0,11,1 +1,100,1860,557,41,111,0,8,1 +2,100,1870,559,40,115,0,8,1 +3,100,1880,547,40,115,0,8,1 +4,100,1890,548,39,120,0,8,0.775 +46,101,1480,496,16,72,0,10,1 +47,101,1482,499,16,72,0,10,1 +48,101,1483,499,15,72,0,10,1 +49,101,1484,499,15,72,0,10,1 +50,101,1485,499,15,72,0,10,1 +51,101,1487,500,15,72,0,10,1 +52,101,1490,501,15,72,0,10,1 +53,101,1494,503,15,72,0,10,1 +54,101,1495,503,15,72,0,10,1 +55,101,1496,504,15,72,0,10,1 +56,101,1497,505,15,72,0,10,1 +57,101,1499,503,15,72,0,10,1 +58,101,1499,501,15,73,0,10,1 +59,101,1500,499,14,74,0,10,1 +60,101,1501,499,14,74,0,10,1 +61,101,1503,494,14,74,0,10,1 +44,102,1562,514,12,60,0,10,0.65952 +45,102,1564,518,11,59,0,10,0.61806 +46,102,1566,518,11,59,0,10,0.51389 +47,102,1569,519,11,59,0,10,0.46667 +48,102,1570,518,11,59,0,10,0.30833 +49,102,1575,522,11,59,0,10,0.33333 +50,102,1577,521,11,59,0,10,0.225 +51,102,1581,525,11,59,0,10,0.17222 +52,102,1582,525,11,59,0,10,0.1 +53,102,1583,525,11,59,0,10,0.055556 +54,102,1584,522,11,59,0,10,0.025 +55,102,1590,520,11,59,0,10,0.034722 +362,103,1303,773,60,129,0,10,1 +363,103,1303,775,60,129,0,10,1 +364,103,1304,779,61,130,0,10,1 +365,103,1306,783,62,132,0,10,1 +366,103,1308,787,63,134,0,10,1 +367,103,1310,792,63,134,0,10,1 +368,103,1312,796,64,136,0,10,1 +369,103,1313,800,66,138,0,10,1 +370,103,1315,805,66,138,0,10,1 +371,103,1317,809,67,140,0,10,1 +372,103,1319,813,68,142,0,10,1 +373,103,1321,818,69,143,0,10,1 +374,103,1320,819,69,144,0,10,1 +375,103,1320,820,69,146,0,10,1 +376,103,1320,822,69,147,0,10,1 +377,103,1320,823,68,149,0,10,1 +378,103,1320,825,68,150,0,10,1 +379,103,1320,826,68,151,0,10,1 +380,103,1320,827,67,153,0,10,1 +381,103,1320,829,67,154,0,10,1 +382,103,1320,830,67,156,0,10,1 +383,103,1320,832,67,157,0,10,1 +384,103,1316,835,68,159,0,10,1 +385,103,1312,838,69,161,0,10,1 +386,103,1308,842,70,162,0,10,1 +387,103,1304,845,71,165,0,10,1 +388,103,1300,849,72,166,0,10,1 +389,103,1296,852,73,168,0,10,1 +390,103,1292,855,74,171,0,10,1 +391,103,1288,859,75,172,0,10,1 +392,103,1284,862,76,174,0,10,1 +393,103,1281,866,77,176,0,10,1 +394,103,1272,870,77,176,0,10,1 +395,103,1263,874,77,176,0,10,1 +396,103,1255,878,77,176,0,10,1 +397,103,1247,880,77,176,0,10,1 +398,103,1240,883,77,176,0,10,1 +1,104,773,530,19,31,0,10,1 +2,104,773,521,19,31,0,10,1 +3,104,774,531,18,30,0,10,1 +4,104,777,529,18,30,0,10,1 +5,104,776,528,18,30,0,10,1 +6,104,777,538,17,32,0,10,1 +7,104,777,532,17,32,0,10,1 +8,104,778,539,17,32,0,10,1 +9,104,777,539,17,32,0,10,1 +10,104,776,538,17,32,0,10,1 +11,104,775,539,17,32,0,10,1 +12,104,775,540,17,32,0,10,1 +13,104,775,527,17,32,0,10,1 +14,104,773,533,17,32,0,10,1 +15,104,774,532,17,32,0,10,1 +16,104,773,532,17,32,0,10,1 +17,104,773,532,17,32,0,10,1 +18,104,772,532,17,32,0,10,1 +19,104,772,532,17,32,0,10,1 +20,104,772,532,17,32,0,10,1 +21,104,772,533,17,32,0,10,1 +22,104,771,534,17,32,0,10,1 +23,104,771,536,17,32,0,10,1 +24,104,771,538,17,32,0,10,0.94444 +25,104,771,540,17,32,0,10,0.11111 +26,104,770,541,17,32,0,10,0 +27,104,770,542,17,32,0,10,0 +28,104,769,545,17,32,0,10,0 +29,104,769,549,17,32,0,10,0 +30,104,769,552,17,32,0,10,0 +31,104,768,560,17,32,0,10,0 +32,104,768,559,17,32,0,10,0 +33,104,768,549,17,32,0,10,0 +34,104,766,550,16,37,0,10,0.058824 +35,104,767,544,16,37,0,10,1 +36,104,765,541,16,37,0,10,1 +37,104,765,539,16,37,0,10,1 +38,104,764,538,16,37,0,10,1 +39,104,765,534,16,37,0,10,1 +40,104,763,533,16,37,0,10,1 +41,104,762,534,16,37,0,10,1 +42,104,762,535,16,37,0,10,1 +43,104,762,536,16,37,0,10,1 +44,104,762,538,16,37,0,10,1 +45,104,763,538,16,37,0,10,1 +46,104,762,539,16,37,0,10,1 +47,104,761,540,16,37,0,10,1 +48,104,760,542,16,37,0,10,1 +49,104,759,544,16,37,0,10,1 +50,104,760,543,16,37,0,10,1 +51,104,759,544,16,37,0,10,1 +52,104,758,544,16,37,0,10,1 +53,104,758,545,16,37,0,10,1 +54,104,756,544,16,37,0,10,1 +55,104,755,544,16,37,0,10,1 +56,104,754,544,16,37,0,10,1 +57,104,754,544,16,37,0,10,1 +58,104,754,541,16,37,0,10,1 +59,104,752,540,16,37,0,10,1 +60,104,750,539,16,37,0,10,1 +61,104,748,538,16,37,0,10,1 +62,104,747,537,16,38,0,10,1 +63,104,747,543,16,38,0,10,1 +64,104,747,536,16,38,0,10,1 +65,104,744,541,16,38,0,10,1 +66,104,743,543,16,38,0,10,1 +67,104,741,538,16,38,0,10,1 +68,104,739,542,16,38,0,10,1 +69,104,736,541,16,38,0,10,1 +70,104,734,540,16,38,0,10,1 +71,104,731,540,16,38,0,10,1 +72,104,729,539,16,38,0,10,1 +73,104,727,539,16,38,0,10,1 +74,104,723,538,16,39,0,10,1 +75,104,720,538,16,39,0,10,1 +76,104,716,538,16,40,0,10,1 +77,104,713,538,16,40,0,10,1 +78,104,709,538,16,41,0,10,1 +79,104,706,538,16,41,0,10,1 +80,104,703,538,16,42,0,10,1 +81,104,698,537,16,42,0,10,1 +82,104,694,537,16,42,0,10,1 +83,104,691,538,16,42,0,10,1 +84,104,686,540,16,42,0,10,1 +85,104,682,541,16,42,0,10,1 +86,104,677,541,16,42,0,10,1 +87,104,674,542,16,42,0,10,1 +88,104,670,543,16,42,0,10,1 +89,104,665,544,16,42,0,10,1 +90,104,660,547,16,42,0,10,1 +91,104,655,551,16,42,0,10,1 +92,104,651,552,16,42,0,10,1 +93,104,646,553,16,42,0,10,1 +94,104,642,557,16,42,0,10,1 +95,104,636,556,16,42,0,10,1 +96,104,633,561,16,42,0,10,1 +97,104,627,558,16,42,0,10,1 +98,104,622,560,15,47,0,10,1 +99,104,617,559,15,47,0,10,1 +100,104,613,560,15,47,0,10,1 +101,104,608,560,15,47,0,10,1 +102,104,602,561,15,47,0,10,1 +103,104,598,561,15,47,0,10,1 +104,104,592,559,15,47,0,10,1 +105,104,587,560,15,47,0,10,1 +106,104,581,559,15,47,0,10,1 +107,104,578,559,15,47,0,10,1 +108,104,572,558,15,47,0,10,1 +109,104,568,558,15,47,0,10,1 +110,104,561,557,15,47,0,10,1 +111,104,555,558,15,47,0,10,1 +112,104,550,559,15,47,0,10,1 +113,104,543,560,15,47,0,10,1 +114,104,537,560,15,47,0,10,1 +1,105,672,510,15,87,0,10,0.60227 +2,105,672,501,15,87,0,10,0.59659 +3,105,669,513,15,87,0,10,0.53977 +4,105,673,510,15,87,0,10,0.79545 +5,105,672,506,15,87,0,10,0.74787 +6,105,673,522,14,80,0,10,0.67407 +7,105,672,515,14,80,0,10,0.77942 +8,105,672,523,14,80,0,10,0.77613 +9,105,672,518,13,84,0,10,0.82605 +10,105,669,518,13,83,0,10,0.81633 +11,105,669,518,12,86,0,10,1 +12,105,668,520,12,86,0,10,1 +13,105,667,504,11,91,0,10,1 +14,105,666,512,11,91,0,10,0.73551 +15,105,665,512,11,91,0,10,1 +16,105,665,512,11,91,0,10,1 +17,105,662,512,11,91,0,10,0.60326 +18,105,660,512,11,91,0,10,0.53714 +19,105,659,512,11,91,0,10,0.6087 +20,105,658,513,11,91,0,10,0.66938 +21,105,658,516,11,91,0,10,0.72826 +22,105,658,520,11,91,0,10,1 +23,105,656,520,11,91,0,10,0.79076 +24,105,653,522,11,91,0,10,0.72101 +25,105,653,523,11,91,0,10,0.79348 +26,105,652,525,11,91,0,10,0.79348 +27,105,649,529,11,91,0,10,0.72101 +28,105,650,532,11,91,0,10,0.8587 +6,106,699,524,15,85,0,10,1 +7,106,700,514,12,84,0,10,1 +8,106,699,518,12,84,0,10,1 +9,106,697,518,12,84,0,10,1 +10,106,696,519,12,84,0,10,1 +11,106,695,520,12,84,0,10,1 +12,106,693,519,11,88,0,10,1 +13,106,693,508,11,87,0,10,1 +14,106,690,513,11,87,0,10,1 +15,106,690,512,11,87,0,10,1 +16,106,690,512,11,87,0,10,1 +17,106,688,515,11,87,0,10,1 +18,106,687,515,11,87,0,10,1 +19,106,687,515,11,87,0,10,1 +20,106,685,516,11,87,0,10,1 +21,106,684,517,11,87,0,10,1 +22,106,683,518,11,87,0,10,1 +23,106,683,519,11,87,0,10,1 +24,106,682,520,10,90,0,10,1 +25,106,681,522,10,92,0,10,1 +26,106,680,522,10,92,0,10,1 +27,106,678,524,10,92,0,10,1 +28,106,677,525,10,92,0,10,1 +29,106,676,531,10,92,0,10,1 +30,106,675,538,10,92,0,10,1 +31,106,674,545,10,92,0,10,1 +32,106,672,540,10,91,0,10,1 +33,106,669,532,10,91,0,10,1 +34,106,669,537,12,90,0,10,1 +35,106,669,528,12,90,0,10,1 +36,106,667,525,12,90,0,10,1 +37,106,665,523,12,90,0,10,1 +38,106,664,521,12,91,0,10,1 +39,106,663,519,12,93,0,10,1 +40,106,662,517,12,94,0,10,1 +41,106,662,515,11,96,0,10,1 +42,106,660,516,11,96,0,10,1 +43,106,659,517,11,96,0,10,1 +44,106,658,520,11,96,0,10,1 +45,106,657,520,11,96,0,10,1 +46,106,657,521,11,96,0,10,1 +47,106,657,522,11,96,0,10,1 +48,106,653,521,10,101,0,10,1 +49,106,653,524,10,101,0,10,1 +50,106,652,523,10,101,0,10,1 +51,106,651,522,10,101,0,10,0.11765 +52,106,649,524,12,100,0,10,1 +53,106,648,526,13,100,0,10,1 +54,106,645,525,13,100,0,10,1 +55,106,643,525,13,100,0,10,1 +56,106,640,524,13,100,0,10,1 +57,106,638,524,13,100,0,10,1 +58,106,635,523,13,100,0,10,1 +59,106,633,523,13,100,0,10,1 +60,106,631,523,13,100,0,10,1 +61,106,629,520,13,102,0,10,1 +62,106,628,518,12,103,0,10,1 +63,106,627,529,13,103,0,10,0.88462 +64,106,624,521,13,102,0,10,0.18585 +65,106,621,528,13,101,0,10,0.11765 +66,106,618,536,13,100,0,10,0.42079 +67,106,617,525,13,99,0,10,0.13 +68,106,613,533,13,99,0,10,0.56 +69,106,607,524,12,107,0,10,0.29487 +70,106,605,524,12,107,0,10,0.21368 +71,106,602,522,12,107,0,10,0.35185 +72,106,597,525,12,107,0,10,0.26353 +73,106,594,523,12,107,0,10,0.34473 +74,106,590,523,12,107,0,10,0.34473 +75,106,586,525,12,107,0,10,0.33048 +76,106,580,524,14,106,0,10,0.31215 +77,106,578,526,14,106,0,10,0.41433 +78,106,572,523,13,111,0,10,0.38776 +79,106,569,522,13,111,0,10,0.51531 +80,106,565,522,13,111,0,10,0.58036 +81,106,560,522,13,111,0,10,0.58036 +82,106,554,524,13,111,0,10,0.51531 +83,106,549,523,13,111,0,10,0.52041 +84,106,541,521,13,111,0,10,0.13393 +85,106,536,528,13,111,0,10,0.3125 +86,106,530,530,13,111,0,10,0.24235 +87,106,525,532,13,111,0,10,0.3125 +88,106,519,534,13,111,0,10,0.3125 +89,106,514,536,13,111,0,10,0.375 +90,106,508,537,13,111,0,10,0.098214 +91,106,502,539,13,111,0,10,0.089286 +92,106,496,541,13,111,0,10,0.089286 +93,106,490,543,12,111,0,10,0.080357 +94,106,484,546,12,110,0,10,0.063063 +95,106,479,549,11,110,0,10,0.045045 +96,106,470,547,13,115,0,10,0.086207 +97,106,465,548,13,115,0,10,0.086207 +98,106,458,549,13,115,0,10,0.094828 +99,106,451,552,13,115,0,10,0.45135 +100,106,444,550,13,115,0,10,0.077586 +101,106,438,549,13,115,0,10,0.086207 +102,106,432,551,13,115,0,10,0.068966 +103,106,423,553,13,115,0,10,0.58621 +104,106,416,552,13,115,0,10,0.59483 +105,106,411,544,11,126,0,10,0.74803 +106,106,407,548,12,122,0,10,0.94059 +107,106,399,547,12,122,0,10,1 +108,106,391,546,12,122,0,10,1 +109,106,385,549,12,122,0,10,1 +110,106,377,548,12,122,0,10,1 +111,106,368,550,12,122,0,10,1 +112,106,363,552,12,122,0,10,1 +113,106,354,552,12,122,0,10,1 +114,106,345,554,12,122,0,10,1 +115,106,338,555,12,122,0,10,1 +116,106,328,552,11,127,0,10,1 +117,106,320,553,10,127,0,10,1 +118,106,312,554,10,127,0,10,1 +119,106,304,555,10,127,0,10,1 +120,106,297,556,9,128,0,10,1 +121,106,289,558,10,125,0,10,1 +122,106,278,559,13,130,0,10,1 +123,106,271,562,10,126,0,10,1 +124,106,261,558,9,131,0,10,1 +125,106,253,559,11,132,0,10,1 +126,106,244,561,14,133,0,10,1 +127,106,239,553,11,144,0,10,1 +128,106,230,557,11,141,0,10,1 +129,106,221,555,11,143,0,10,1 +130,106,211,562,12,141,0,10,1 +131,106,202,540,11,160,0,10,0.21118 +132,106,196,552,10,154,0,10,1 +133,106,183,552,17,153,0,10,0.15584 +134,106,177,556,17,153,0,10,1 +135,106,164,563,16,147,0,10,1 +136,106,156,564,16,147,0,10,1 +137,106,150,565,16,147,0,10,1 +138,106,137,569,16,147,0,10,1 +139,106,128,568,16,147,0,10,1 +140,106,124,568,16,147,0,10,1 +141,106,115,569,16,147,0,10,0.087838 +142,106,106,572,16,147,0,10,1 +143,106,100,569,16,147,0,10,0.081081 +144,106,91,571,16,147,0,10,1 +145,106,81,570,16,147,0,10,0.074324 +146,106,72,574,16,147,0,10,1 +147,106,61,574,16,147,0,10,1 +148,106,53,573,15,151,0,10,1 +149,106,44,576,15,151,0,10,1 +150,106,33,577,15,151,0,10,1 +151,106,23,581,15,151,0,10,1 +152,106,13,582,15,151,0,10,1 +153,106,4,583,15,151,0,10,1 +76,107,1419,541,13,43,0,10,1 +77,107,1418,541,12,46,0,10,1 +78,107,1416,541,16,46,0,10,1 +79,107,1415,541,16,44,0,10,1 +80,107,1414,539,14,46,0,10,1 +81,107,1414,540,15,45,0,10,0.9375 +82,107,1408,540,17,44,0,10,1 +83,107,1407,541,15,44,0,10,1 +84,107,1406,540,16,45,0,10,1 +85,107,1403,542,22,46,0,10,0.91304 +86,107,1401,540,19,48,0,10,1 +87,107,1399,542,16,47,0,10,1 +88,107,1398,542,16,49,0,10,1 +89,107,1396,544,16,49,0,10,1 +90,107,1392,545,16,51,0,10,1 +91,107,1391,545,16,51,0,10,1 +92,107,1387,547,16,48,0,10,1 +93,107,1384,551,16,45,0,10,1 +94,107,1382,550,16,47,0,10,1 +95,107,1380,550,16,47,0,10,1 +96,107,1377,554,16,46,0,10,1 +97,107,1375,554,16,47,0,10,1 +98,107,1373,556,16,47,0,10,1 +99,107,1370,556,16,48,0,10,1 +100,107,1366,556,16,47,0,10,1 +101,107,1364,552,16,52,0,10,1 +102,107,1361,557,16,47,0,10,1 +103,107,1358,557,16,47,0,10,1 +104,107,1356,559,16,45,0,10,1 +105,107,1355,558,16,46,0,10,1 +106,107,1351,561,16,44,0,10,1 +107,107,1347,559,16,45,0,10,1 +108,107,1345,556,16,48,0,10,1 +109,107,1344,559,16,47,0,10,1 +110,107,1339,561,16,45,0,10,1 +111,107,1336,560,16,46,0,10,1 +112,107,1334,559,16,48,0,10,1 +113,107,1329,561,16,46,0,10,1 +114,107,1325,557,16,49,0,10,0.058824 +115,107,1321,562,16,44,0,10,0 +116,107,1319,559,16,47,0,10,1 +117,107,1313,561,16,44,0,10,0 +118,107,1313,561,16,45,0,10,0 +119,107,1308,561,16,45,0,10,1 +120,107,1304,559,16,47,0,10,1 +121,107,1300,559,16,47,0,10,0 +122,107,1297,556,16,50,0,10,0 +123,107,1294,559,16,49,0,10,1 +124,107,1291,559,16,47,0,10,0 +125,107,1287,558,16,48,0,10,0 +126,107,1284,558,15,48,0,10,0 +127,107,1280,559,15,48,0,10,0 +128,107,1277,561,15,47,0,10,0 +129,107,1274,561,15,48,0,10,0 +130,107,1271,561,15,48,0,10,0 +131,107,1266,562,17,51,0,10,1 +132,107,1264,559,16,51,0,10,0.17647 +133,107,1259,559,16,53,0,10,0.29412 +134,107,1255,559,15,54,0,10,0.5625 +135,107,1252,559,18,54,0,10,0.42105 +136,107,1248,558,16,55,0,10,0.47059 +137,107,1245,559,15,55,0,10,0.5 +138,107,1241,559,18,53,0,10,0.52632 +69,108,1478,503,8,89,0,10,1 +70,108,1476,501,12,89,0,10,1 +71,108,1478,502,10,90,0,10,1 +72,108,1478,527,9,66,0,10,1 +144,109,1265,515,13,103,0,10,0.13049 +145,109,1262,514,13,103,0,10,0.06456 +146,109,1258,520,13,103,0,10,0 +147,109,1255,522,13,103,0,10,0 +148,109,1251,516,12,108,0,10,0.076923 +149,109,1249,515,12,108,0,10,0 +150,109,1247,517,12,108,0,10,0 +151,109,1242,516,12,108,0,10,0 +152,109,1237,516,12,108,0,10,0 +153,109,1232,515,12,108,0,10,0.076923 +154,109,1227,515,12,108,0,10,0.15385 +155,109,1224,515,12,108,0,10,0.076923 +156,109,1220,515,12,108,0,10,0.15385 +157,109,1217,516,12,108,0,10,0.076923 +158,109,1214,516,12,108,0,10,0 +159,109,1211,516,12,108,0,10,0 +160,109,1209,516,12,108,0,10,0 +161,109,1205,515,12,109,0,10,0 +162,109,1201,515,12,109,0,10,0 +163,109,1197,514,12,110,0,10,0 +164,109,1194,514,12,111,0,10,0 +165,109,1191,514,12,112,0,10,0 +166,109,1189,514,12,113,0,10,0 +167,109,1186,512,12,114,0,10,0 +168,109,1183,511,12,115,0,10,0 +169,109,1180,509,12,116,0,10,0 +170,109,1178,508,11,117,0,10,0 +171,109,1177,507,11,117,0,10,0 +172,109,1176,507,11,117,0,10,0 +173,109,1175,507,11,117,0,10,0 +174,109,1172,511,11,117,0,10,0 +175,109,1170,507,11,117,0,10,0 +176,109,1169,507,11,117,0,10,0 +350,110,1638,614,24,142,0,10,0.0044755 +351,110,1641,618,24,142,0,10,0.0083916 +352,110,1645,622,24,142,0,10,0.0058741 +353,110,1648,626,23,142,0,10,0.0078671 +354,110,1651,630,22,142,0,10,0.0091213 +355,110,1654,634,22,142,0,10,0.010946 +356,110,1659,632,22,142,0,10,0.23016 +357,110,1668,638,22,142,0,10,0.30435 +358,110,1669,637,22,146,0,10,0.47826 +359,110,1671,637,21,150,0,10,0.63636 +360,110,1676,643,21,150,0,10,0.63636 +361,110,1683,644,21,150,0,10,0.54545 +362,110,1686,651,21,150,0,10,0.68182 +363,110,1689,655,21,152,0,10,0.81818 +364,110,1695,663,22,152,0,10,0.73913 +365,110,1701,661,22,152,0,10,0.73913 +366,110,1703,666,22,152,0,10,0.91304 +367,110,1711,671,22,152,0,10,0.78261 +368,110,1716,679,22,152,0,10,0.82609 +369,110,1722,679,22,152,0,10,0.82609 +370,110,1726,681,22,152,0,10,0.91304 +371,110,1730,683,22,152,0,10,0.95652 +372,110,1733,683,22,152,0,10,1 +373,110,1737,683,22,152,0,10,1 +374,110,1737,680,27,156,0,10,1 +375,110,1738,677,31,161,0,10,1 +376,110,1738,680,31,161,0,10,1 +377,110,1743,680,31,161,0,10,1 +378,110,1749,682,31,161,0,10,1 +379,110,1750,681,31,161,0,10,1 +380,110,1752,681,31,161,0,10,1 +381,110,1753,681,31,161,0,10,1 +382,110,1754,681,31,161,0,10,1 +383,110,1757,678,30,169,0,10,1 +384,110,1759,678,29,172,0,10,1 +385,110,1761,678,29,176,0,10,1 +386,110,1760,677,29,178,0,10,1 +387,110,1760,677,28,179,0,10,1 +388,110,1760,677,28,180,0,10,1 +389,110,1758,679,28,181,0,10,1 +390,110,1756,682,28,182,0,10,1 +391,110,1754,684,28,183,0,10,1 +392,110,1752,687,28,184,0,10,1 +393,110,1747,688,29,185,0,10,1 +394,110,1743,689,29,186,0,10,1 +395,110,1739,690,29,187,0,10,1 +396,110,1735,691,29,188,0,10,1 +397,110,1731,692,29,189,0,10,1 +398,110,1727,693,30,191,0,10,1 +399,110,1720,696,30,191,0,10,1 +400,110,1713,699,30,191,0,10,1 +401,110,1705,698,31,194,0,10,1 +402,110,1698,698,31,197,0,10,1 +403,110,1691,697,31,201,0,10,1 +404,110,1684,697,32,204,0,10,1 +525,111,1367,541,13,140,0,10,1 +526,111,1344,541,12,141,0,10,1 +527,111,1316,536,11,141,0,10,1 +528,111,1294,538,11,142,0,10,1 +529,111,1270,542,11,142,0,10,1 +530,111,1250,540,11,142,0,10,1 +531,111,1224,541,11,142,0,10,1 +532,111,1200,541,13,140,0,10,1 +533,111,1180,542,13,142,0,10,1 +534,111,1154,542,13,142,0,10,1 +535,111,1133,544,15,142,0,10,1 +536,111,1114,537,15,148,0,10,1 +537,111,1092,536,15,148,0,10,1 +538,111,1070,539,15,148,0,10,1 +539,111,1048,540,15,148,0,10,1 +540,111,1027,534,14,155,0,10,1 +541,111,1007,538,14,155,0,10,1 +542,111,988,541,14,155,0,10,1 +543,111,974,533,15,162,0,10,1 +544,111,948,537,15,162,0,10,0.91411 +545,111,929,534,15,162,0,10,1 +546,111,915,534,15,162,0,10,1 +547,111,893,534,17,161,0,10,1 +548,111,878,530,14,165,0,10,1 +549,111,860,530,14,165,0,10,1 +550,111,842,532,15,165,0,10,1 +551,111,823,532,15,165,0,10,1 +552,111,804,523,15,175,0,10,1 +553,111,785,523,15,175,0,10,1 +554,111,768,524,15,175,0,10,1 +561,112,689,408,85,135,0,11,1 +562,112,668,409,95,135,0,11,1 +563,112,654,409,95,135,0,11,1 +564,112,638,410,95,135,0,11,1 +565,112,620,409,95,135,0,11,1 +566,112,605,409,95,135,0,11,1 +567,112,589,410,95,135,0,11,1 +568,112,565,409,95,135,0,11,1 +569,112,554,409,95,135,0,11,1 +570,112,538,408,95,135,0,11,1 +571,112,521,406,95,143,0,11,1 +572,112,507,406,95,143,0,11,1 +573,112,485,403,95,143,0,11,1 +574,112,471,406,95,143,0,11,1 +575,112,453,400,98,154,0,11,1 +576,112,439,403,98,154,0,11,1 +577,112,419,399,98,155,0,11,1 +578,112,406,401,96,155,0,11,1 +579,112,394,397,96,155,0,11,1 +580,112,372,393,105,162,0,11,1 +581,112,362,393,105,162,0,11,1 +582,112,340,391,110,161,0,11,1 +583,112,327,391,110,161,0,11,1 +584,112,310,386,112,165,0,11,1 +585,112,294,388,114,165,0,11,1 +567,113,621,544,16,255,0,10,0.54688 +568,113,602,545,15,264,0,10,0.53962 +569,113,588,545,14,272,0,10,0.53114 +570,113,571,545,14,272,0,10,0.53846 +571,113,556,550,14,272,0,10,0.52747 +572,113,536,547,13,275,0,10,0.52899 +573,113,523,548,15,275,0,10,0.54348 +574,113,504,549,15,285,0,10,0.52448 +575,113,491,551,15,285,0,10,0.51399 +579,114,490,514,24,303,0,10,0.84 +580,114,475,518,24,304,0,10,0.82636 +581,114,463,522,25,304,0,10,0.85259 +582,114,446,522,25,304,0,10,0.81551 +583,114,432,525,25,304,0,10,0.81387 +584,114,421,527,25,305,0,10,0.87041 +585,114,406,523,25,311,0,10,0.8554 +586,114,395,528,25,311,0,10,0.90508 +587,114,381,519,25,325,0,10,0.9075 +588,114,369,523,25,325,0,10,0.93334 +589,114,356,518,24,335,0,10,0.94524 +590,114,345,518,25,335,0,10,0.97459 +591,114,332,523,25,335,0,10,0.94872 +592,114,319,520,24,344,0,10,0.92139 +620,115,265,491,11,135,0,10,0.26471 +621,115,265,495,11,131,0,10,0.27273 +622,115,261,495,15,133,0,10,0.27612 +623,115,256,501,12,135,0,10,0.25 +624,115,255,500,13,130,0,10,0.27481 +625,115,253,501,15,144,0,10,0.24828 +626,115,250,500,13,135,0,10,0.25 +627,115,245,505,12,138,0,10,0.28058 +628,115,247,510,13,135,0,10,0.25 +629,115,246,511,12,141,0,10,0.23239 +630,115,246,512,12,139,0,10,0.24286 +631,115,246,513,12,138,0,10,0.22302 +632,115,246,515,12,142,0,10,0.22378 +633,115,246,516,12,139,0,10,0.22857 +634,115,247,518,12,145,0,10,0.21918 +635,115,247,519,12,139,0,10,0.22143 +636,115,248,520,13,144,0,10,0.2 +637,115,248,521,12,145,0,10,0.20548 +638,115,248,526,14,147,0,10,0.20946 +639,115,250,525,12,144,0,10,0.22069 +640,115,252,526,15,148,0,10,0.26174 +641,115,253,527,15,147,0,10,0.35008 +1,116,806,503,9,51,0,10,0.73462 +2,116,807,492,9,57,0,10,1 +3,116,807,495,10,57,0,10,0.8558 +4,116,808,499,10,56,0,10,1 +5,116,809,502,10,56,0,10,1 +6,116,810,506,10,56,0,10,1 +7,116,810,506,10,56,0,10,1 +8,116,810,506,10,57,0,10,1 +9,116,810,507,10,57,0,10,1 +10,116,810,507,10,57,0,10,1 +11,116,810,507,10,58,0,10,1 +569,117,1872,555,29,196,0,10,0.778 +570,117,1867,556,29,196,0,10,1 +571,117,1862,558,29,196,0,10,1 +572,117,1857,560,29,195,0,10,1 +573,117,1852,561,29,196,0,10,1 +574,117,1847,563,29,196,0,10,1 +575,117,1842,565,29,195,0,10,1 +576,117,1837,566,29,196,0,10,1 +577,117,1832,568,29,195,0,10,1 +578,117,1827,570,29,195,0,10,1 +579,117,1822,572,29,195,0,10,1 +580,117,1819,573,29,195,0,10,1 +581,117,1817,574,29,196,0,10,1 +582,117,1814,576,29,195,0,10,1 +583,117,1812,577,29,196,0,10,1 +584,117,1810,579,29,196,0,10,1 +585,117,1810,579,29,195,0,10,1 +586,117,1810,579,29,195,0,10,1 +587,117,1810,579,29,195,0,10,1 +588,117,1811,579,29,196,0,10,1 +589,117,1814,575,28,201,0,10,1 +590,117,1815,569,28,211,0,10,1 +595,118,1735,563,24,201,0,10,1 +596,118,1741,561,24,202,0,10,1 +597,118,1747,559,24,203,0,10,1 +598,118,1753,558,24,204,0,10,1 +599,118,1759,558,24,205,0,10,1 +600,118,1766,558,24,206,0,10,1 +601,118,1773,558,23,208,0,10,1 +602,118,1780,558,23,209,0,10,1 +603,118,1787,558,22,211,0,10,1 +604,118,1794,558,22,212,0,10,1 +605,118,1801,559,22,213,0,10,1 +606,118,1811,562,22,213,0,10,1 +607,118,1821,565,22,214,0,10,1 +608,118,1831,568,22,215,0,10,0.56944 +609,118,1841,571,22,215,0,10,0.5787 +610,118,1851,574,22,216,0,10,0.60829 +611,118,1861,577,22,217,0,10,0.63761 +612,118,1871,580,22,218,0,10,0.67123 +613,118,1881,581,21,223,0,10,0.70536 +614,118,1891,583,20,227,0,10,0.73684 +707,119,1316,542,31,62,0,10,1 +708,119,1322,541,30,62,0,10,1 +709,119,1328,541,30,62,0,10,1 +710,119,1335,541,28,61,0,10,1 +711,119,1341,541,28,61,0,10,1 +712,119,1348,541,26,61,0,10,1 +713,119,1354,540,26,61,0,10,1 +714,119,1360,540,25,61,0,10,1 +715,119,1367,540,24,60,0,10,1 +716,119,1373,540,23,60,0,10,1 +717,119,1380,540,22,60,0,10,1 +718,119,1385,537,23,59,0,10,1 +719,119,1391,543,23,60,0,10,1 +720,119,1397,545,23,60,0,10,1 +721,119,1403,547,23,60,0,10,1 +722,119,1409,549,23,60,0,10,1 +723,119,1415,552,23,59,0,10,1 +724,119,1421,554,23,59,0,10,1 +725,119,1427,556,23,59,0,10,1 +726,119,1433,558,23,59,0,10,1 +727,119,1440,561,22,59,0,10,1 +728,119,1446,569,22,60,0,10,1 +729,119,1451,569,23,60,0,10,1 +730,119,1457,570,23,60,0,10,1 +731,119,1463,571,23,60,0,10,1 +732,119,1468,570,23,60,0,10,1 +733,119,1473,569,24,61,0,10,1 +734,119,1478,568,24,61,0,10,1 +735,119,1483,567,25,62,0,10,1 +736,119,1488,566,25,62,0,10,1 +737,119,1494,565,25,63,0,10,1 +738,119,1500,568,25,63,0,10,1 +739,119,1506,571,25,64,0,10,1 +740,119,1510,572,25,64,0,10,1 +741,119,1514,573,25,64,0,10,1 +742,119,1518,575,26,64,0,10,1 +743,119,1522,576,26,64,0,10,1 +744,119,1526,577,26,64,0,10,1 +745,119,1531,579,26,64,0,10,1 +746,119,1535,580,25,63,0,10,1 +747,119,1539,581,25,63,0,10,1 +748,119,1542,581,25,63,0,10,1 +749,119,1545,582,25,63,0,10,1 +750,119,1549,583,25,63,0,10,1 +259,120,1258,516,16,93,0,10,0.45745 +260,120,1265,511,17,93,0,10,0.5 +261,120,1270,514,16,93,0,10,0.45745 +262,120,1278,514,16,97,0,10,0.42857 +263,120,1286,510,16,100,0,10,0.45545 +264,120,1294,507,16,108,0,10,0.44954 +265,120,1300,500,13,121,0,10,0.69087 +266,120,1311,505,13,121,0,10,1 +267,120,1319,507,13,121,0,10,1 +268,120,1327,505,13,124,0,10,1 +269,120,1335,503,14,127,0,10,1 +270,120,1343,501,14,130,0,10,1 +271,120,1352,499,14,134,0,10,1 +272,120,1360,498,15,136,0,10,1 +273,120,1368,496,15,139,0,10,1 +274,120,1377,494,15,143,0,10,1 +275,120,1385,492,15,146,0,10,1 +276,120,1393,490,16,149,0,10,1 +277,120,1402,489,16,152,0,10,1 +278,120,1410,490,16,152,0,10,0.82353 +474,121,1181,763,75,509,0,10,0.62353 +475,121,1122,766,75,509,0,10,0.61765 +476,121,1063,770,76,508,0,10,0.611 +477,121,1005,774,76,508,0,10,0.17878 +478,121,938,784,75,510,0,10,0.58121 +479,121,871,794,74,512,0,10,0.55945 +480,121,804,804,74,514,0,10,0.53786 +481,121,727,795,74,516,0,10,0.55319 +504,122,1881,551,15,112,0,10,0.89381 +505,122,1851,552,15,112,0,10,0.90265 +506,122,1822,554,15,112,0,10,0.90265 +507,122,1792,556,15,112,0,10,0.91482 +508,122,1763,557,15,112,0,10,0.89491 +509,122,1734,559,14,112,0,10,0.88555 +510,122,1704,561,15,112,0,10,0.88496 +511,122,1675,562,14,112,0,10,0.9115 +512,122,1645,564,15,112,0,10,0.90265 +513,122,1616,566,14,112,0,10,0.14218 +514,122,1587,568,14,112,0,10,0.14159 +515,122,1558,567,14,112,0,10,0.3056 +675,123,1107,516,22,55,0,10,1 +676,123,1115,517,21,55,0,10,1 +677,123,1123,518,21,55,0,10,1 +678,123,1131,519,21,55,0,10,1 +679,123,1139,521,21,54,0,10,1 +680,123,1150,527,21,55,0,10,1 +681,123,1152,541,22,55,0,10,1 +682,123,1161,541,22,55,0,10,1 +683,123,1168,532,22,55,0,10,1 +684,123,1175,523,22,55,0,10,1 +512,124,1858,559,106,106,0,3,0.56223 +513,124,1828,555,121,110,0,3,0.73704 +514,124,1798,560,134,108,0,3,0.88121 +515,124,1760,558,134,108,0,3,0.95923 +516,124,1732,555,129,109,0,3,0.96224 +517,124,1703,553,128,107,0,3,0.96885 +518,124,1675,551,126,105,0,3,0.97697 +519,124,1645,549,125,104,0,3,0.98201 +520,124,1615,548,124,103,0,3,0.98615 +521,124,1585,547,123,102,0,3,0.99107 +522,124,1558,545,122,102,0,3,0.99708 +523,124,1531,543,121,102,0,3,1 +524,124,1505,542,119,102,0,3,1 +525,124,1480,543,117,97,0,3,1 +526,124,1452,542,117,97,0,3,1 +527,124,1427,542,114,96,0,3,1 +528,124,1403,541,112,95,0,3,1 +529,124,1379,541,110,94,0,3,1 +530,124,1355,542,110,94,0,3,1 +531,124,1332,541,109,93,0,3,1 +532,124,1309,541,108,92,0,3,1 +533,124,1286,540,107,92,0,3,1 +534,124,1263,540,106,91,0,3,1 +535,124,1241,537,105,90,0,3,1 +536,124,1220,538,104,90,0,3,1 +537,124,1199,540,103,89,0,3,1 +538,124,1179,542,102,89,0,3,1 +539,124,1159,537,103,89,0,3,1 +540,124,1136,539,101,88,0,3,1 +541,124,1117,537,101,93,0,3,1 +542,124,1099,541,100,92,0,3,1 +543,124,1079,541,99,91,0,3,1 +544,124,1060,541,98,90,0,3,1 +545,124,1039,539,98,88,0,3,1 +546,124,1023,533,96,90,0,3,1 +547,124,1004,531,96,87,0,3,1 +548,124,985,532,97,85,0,3,1 +549,124,966,530,97,83,0,3,1 +550,124,951,527,93,86,0,3,1 +551,124,936,526,92,86,0,3,1 +552,124,921,525,92,86,0,3,1 +553,124,906,524,92,86,0,3,1 +554,124,892,524,88,85,0,3,1 +555,124,878,524,85,85,0,3,1 +556,124,862,521,85,86,0,3,1 +557,124,847,518,85,87,0,3,1 +558,124,832,515,85,89,0,3,1 +559,124,815,514,86,88,0,3,1 +560,124,799,514,87,86,0,3,1 +561,124,783,513,88,86,0,3,1 +562,124,767,512,90,86,0,3,1 +563,124,751,511,91,86,0,3,1 +564,124,735,510,93,86,0,3,1 +565,124,726,510,90,82,0,3,1 +566,124,713,510,90,81,0,3,1 +567,124,700,511,90,80,0,3,1 +568,124,687,511,90,80,0,3,1 +569,124,675,512,90,79,0,3,1 +570,124,663,511,90,79,0,3,1 +571,124,652,510,89,79,0,3,1 +572,124,640,510,89,78,0,3,1 +573,124,629,509,88,78,0,3,1 +574,124,617,508,88,78,0,3,1 +575,124,606,508,88,78,0,3,1 +576,124,597,509,85,78,0,3,1 +577,124,585,508,86,77,0,3,1 +578,124,574,507,86,77,0,3,1 +579,124,564,506,86,77,0,3,1 +580,124,554,505,86,77,0,3,1 +581,124,544,504,87,78,0,3,1 +582,124,536,502,86,79,0,3,1 +583,124,528,501,86,80,0,3,1 +584,124,520,500,85,80,0,3,1 +585,124,512,499,85,81,0,3,1 +586,124,506,498,84,82,0,3,1 +587,124,496,496,85,81,0,3,1 +588,124,490,497,84,81,0,3,1 +589,124,484,498,84,81,0,3,1 +590,124,478,497,85,81,0,3,1 +591,124,470,496,85,82,0,3,1 +592,124,466,496,82,81,0,3,1 +593,124,462,496,80,81,0,3,1 +594,124,458,498,81,81,0,3,1 +595,124,454,495,80,81,0,3,1 +596,124,447,495,84,81,0,3,1 +597,124,444,495,81,79,0,3,1 +598,124,441,496,82,78,0,3,1 +599,124,439,497,82,77,0,3,1 +600,124,437,498,82,76,0,3,1 +601,124,436,499,82,76,0,3,1 +602,124,431,500,82,77,0,3,1 +603,124,429,499,81,77,0,3,1 +604,124,427,499,81,76,0,3,1 +605,124,425,497,81,76,0,3,1 +606,124,423,495,81,76,0,3,1 +607,124,422,494,80,75,0,3,1 +608,124,421,493,80,75,0,3,1 +609,124,420,492,79,74,0,3,1 +610,124,419,490,78,74,0,3,1 +611,124,418,489,78,74,0,3,1 +612,124,417,488,77,73,0,3,1 +613,124,416,487,77,73,0,3,1 +614,124,415,486,78,74,0,3,1 +615,124,414,485,79,75,0,3,1 +616,124,412,484,78,73,0,3,1 +617,124,410,484,78,74,0,3,1 +618,124,408,485,79,74,0,3,1 +619,124,407,485,79,73,0,3,1 +620,124,407,485,79,73,0,3,1 +621,124,405,484,78,74,0,3,1 +622,124,404,485,78,74,0,3,1 +623,124,404,486,77,74,0,3,1 +624,124,404,484,77,73,0,3,1 +625,124,405,490,77,75,0,3,1 +626,124,403,486,77,74,0,3,1 +627,124,403,491,77,73,0,3,1 +628,124,405,491,77,73,0,3,1 +629,124,407,492,77,73,0,3,1 +630,124,409,491,77,73,0,3,1 +631,124,412,491,76,73,0,3,1 +632,124,415,491,75,73,0,3,1 +633,124,417,491,75,73,0,3,1 +634,124,420,491,74,73,0,3,1 +635,124,423,491,73,73,0,3,1 +636,124,424,491,73,71,0,3,1 +637,124,428,496,73,71,0,3,1 +638,124,432,501,73,70,0,3,1 +639,124,435,500,73,71,0,3,1 +640,124,439,500,73,71,0,3,1 +641,124,442,500,74,71,0,3,1 +642,124,446,500,74,71,0,3,1 +643,124,450,500,74,71,0,3,1 +644,124,455,500,74,71,0,3,1 +645,124,461,500,73,71,0,3,1 +646,124,466,503,72,67,0,3,1 +647,124,471,501,72,66,0,3,1 +648,124,476,499,73,66,0,3,1 +649,124,482,497,73,66,0,3,1 +650,124,488,501,73,66,0,3,1 +651,124,494,500,70,66,0,3,1 +652,124,501,494,69,66,0,3,1 +653,124,507,493,70,67,0,3,1 +654,124,513,492,72,68,0,3,1 +655,124,520,491,73,69,0,3,1 +656,124,527,494,73,70,0,3,1 +657,124,539,499,74,69,0,3,1 +658,124,549,503,69,65,0,3,1 +659,124,555,516,69,66,0,3,1 +660,124,560,511,70,67,0,3,1 +661,124,564,514,69,66,0,3,1 +662,124,573,511,70,69,0,3,1 +663,124,580,508,69,70,0,3,1 +664,124,587,506,68,70,0,3,1 +665,124,594,504,68,71,0,3,1 +666,124,601,503,69,69,0,3,1 +667,124,607,503,69,67,0,3,1 +668,124,613,503,69,65,0,3,1 +669,124,621,501,69,65,0,3,1 +670,124,629,499,69,65,0,3,1 +671,124,636,497,69,65,0,3,1 +672,124,643,495,70,65,0,3,1 +673,124,651,494,70,64,0,3,1 +674,124,661,488,70,62,0,3,1 +675,124,666,483,72,65,0,3,1 +676,124,673,484,71,64,0,3,1 +677,124,681,485,70,63,0,3,1 +678,124,689,487,69,62,0,3,1 +679,124,696,491,68,66,0,3,1 +680,124,706,491,69,65,0,3,1 +681,124,707,514,70,66,0,3,1 +682,124,715,528,66,65,0,3,1 +683,124,720,504,65,65,0,3,1 +684,124,724,497,68,61,0,3,1 +685,124,730,492,69,63,0,3,1 +686,124,737,486,66,62,0,3,1 +687,124,744,483,66,61,0,3,1 +688,124,752,483,67,61,0,3,1 +689,124,758,480,67,62,0,3,1 +690,124,764,478,68,63,0,3,1 +691,124,770,475,69,63,0,3,1 +692,124,778,477,66,61,0,3,1 +693,124,784,475,65,61,0,3,1 +694,124,790,478,67,64,0,3,1 +695,124,796,482,69,66,0,3,1 +696,124,803,481,68,65,0,3,1 +697,124,810,480,68,65,0,3,1 +698,124,816,481,68,64,0,3,1 +699,124,823,482,67,63,0,3,1 +700,124,830,483,66,63,0,3,1 +701,124,837,484,65,62,0,3,1 +702,124,844,485,65,62,0,3,1 +703,124,849,487,65,63,0,3,1 +704,124,855,490,65,64,0,3,1 +705,124,861,489,65,66,0,3,1 +706,124,865,495,65,64,0,3,1 +707,124,869,493,65,64,0,3,1 +708,124,873,495,65,65,0,3,1 +709,124,877,495,64,65,0,3,1 +710,124,884,507,64,61,0,3,1 +711,124,887,504,64,61,0,3,1 +712,124,892,508,64,61,0,3,1 +713,124,894,506,65,62,0,3,1 +714,124,898,508,65,61,0,3,1 +715,124,903,508,64,59,0,3,1 +716,124,905,508,65,57,0,3,1 +717,124,908,509,65,57,0,3,1 +718,124,912,510,64,57,0,3,1 +719,124,916,510,64,57,0,3,1 +720,124,920,510,65,57,0,3,1 +721,124,924,511,66,57,0,3,1 +722,124,926,511,66,58,0,3,1 +723,124,932,513,65,58,0,3,1 +724,124,936,520,66,59,0,3,1 +725,124,941,516,65,61,0,3,1 +726,124,945,516,66,61,0,3,1 +727,124,949,521,64,60,0,3,1 +728,124,955,523,64,61,0,3,1 +729,124,958,523,65,60,0,3,1 +730,124,962,523,65,60,0,3,1 +731,124,965,522,65,60,0,3,1 +732,124,969,521,64,60,0,3,1 +733,124,973,520,63,60,0,3,1 +734,124,977,519,63,61,0,3,1 +735,124,979,518,62,62,0,3,1 +736,124,983,518,62,61,0,3,1 +737,124,985,515,61,62,0,3,1 +738,124,989,516,62,62,0,3,1 +739,124,991,517,62,62,0,3,1 +740,124,994,518,61,62,0,3,1 +741,124,997,520,61,61,0,3,1 +742,124,998,520,61,61,0,3,1 +743,124,1000,521,61,60,0,3,1 +744,124,1001,522,61,59,0,3,1 +745,124,1003,523,61,59,0,3,1 +746,124,1004,522,61,60,0,3,1 +747,124,1005,522,61,60,0,3,1 +748,124,1006,521,61,61,0,3,1 +749,124,1008,521,61,61,0,3,1 +750,124,1013,522,61,62,0,3,1 +53,125,548,552,29,72,1,1,0.48128 +54,125,544,552,29,72,1,1,0.54292 +55,125,541,552,29,72,1,1,0.57306 +56,125,537,552,29,72,1,1,0.67215 +57,125,534,552,29,73,1,1,0.70631 +58,125,530,551,29,73,1,1,0.73784 +59,125,527,551,29,73,1,1,0.73784 +60,125,523,550,29,74,1,1,0.77289 +61,125,520,550,29,74,1,1,0.772 +62,125,519,543,29,75,1,1,0.70351 +63,125,514,560,29,75,1,1,0.8 +64,125,511,546,29,75,1,1,0.77281 +65,125,508,552,29,76,1,1,0.74242 +66,125,506,559,29,76,1,1,0.74026 +67,125,499,550,29,76,1,1,0.86667 +68,125,495,557,29,76,1,1,0.86667 +69,125,491,554,29,76,1,1,0.9 +70,125,486,555,29,76,1,1,0.86667 +71,125,481,556,29,76,1,1,0.93333 +72,125,476,557,29,77,1,1,0.86667 +73,125,471,558,29,76,1,1,0.9 +74,125,467,559,29,76,1,1,1 +75,125,462,560,29,75,1,1,1 +76,125,458,562,29,74,1,1,0.93333 +77,125,451,559,29,77,1,1,1 +78,125,444,557,29,79,1,1,1 +79,125,437,555,30,82,1,1,1 +80,125,430,556,30,82,1,1,1 +81,125,424,557,30,83,1,1,1 +82,125,417,558,30,84,1,1,1 +83,125,411,559,30,85,1,1,1 +84,125,404,560,30,86,1,1,1 +85,125,398,562,30,86,1,1,1 +86,125,390,564,30,86,1,1,1 +87,125,383,566,30,87,1,1,1 +88,125,376,568,30,88,1,1,0.96774 +89,125,369,570,30,89,1,1,0.96774 +90,125,362,572,30,90,1,1,0.93548 +91,125,355,574,30,91,1,1,0.93548 +92,125,348,577,30,91,1,1,0.93548 +93,125,339,577,30,92,1,1,1 +94,125,330,578,31,92,1,1,1 +95,125,322,579,30,93,1,1,1 +96,125,313,579,31,94,1,1,1 +97,125,305,580,30,95,1,1,1 +98,125,296,581,31,95,1,1,1 +99,125,288,582,30,95,1,1,1 +100,125,279,582,31,97,1,1,1 +101,125,271,583,30,97,1,1,1 +102,125,262,584,31,98,1,1,1 +103,125,254,585,30,98,1,1,1 +104,125,245,585,31,99,1,1,1 +105,125,237,586,30,100,1,1,1 +106,125,228,587,31,100,1,1,1 +107,125,220,588,31,101,1,1,0.96906 +108,125,210,589,31,101,1,1,1 +109,125,200,590,31,102,1,1,1 +110,125,190,591,31,103,1,1,1 +111,125,181,592,31,104,1,1,0.96875 +112,125,171,593,31,104,1,1,0.96875 +113,125,161,594,31,105,1,1,0.90625 +114,125,151,595,31,106,1,1,0.84375 +115,125,142,597,31,106,1,1,0.75 +116,125,131,598,31,106,1,1,0.71875 +117,125,120,599,31,107,1,1,0.6875 +118,125,110,600,31,107,1,1,0.65625 +119,125,100,601,31,108,1,1,0.59375 +120,125,90,602,31,109,1,1,0.5625 +121,125,78,604,31,110,1,1,0.59375 +122,125,67,606,31,111,1,1,0.59375 +123,125,55,608,32,112,1,1,0.57576 +124,125,44,611,32,112,1,1,0.57576 +125,125,32,613,33,113,1,1,0.58824 +126,125,21,615,33,114,1,1,0.58824 +127,125,9,617,34,115,1,1,0.57143 +179,126,1175,531,26,66,1,1,0.023217 +180,126,1172,531,26,66,1,1,0.010503 +181,126,1169,531,26,66,1,1,0.0099502 +182,126,1166,531,26,67,1,1,0.012527 +183,126,1164,531,26,67,1,1,0.021786 +184,126,1161,531,26,68,1,1,0.032206 +185,126,1158,531,26,68,1,1,0.034353 +186,126,1156,532,26,68,1,1,0.05314 +187,126,1153,533,26,67,1,1,0.019063 +188,126,1150,534,26,66,1,1,0.01382 +189,126,1147,535,26,66,1,1,0.0088447 +190,126,1144,536,26,65,1,1,0.0044893 +191,126,1141,537,26,65,1,1,0 +192,126,1138,538,26,64,1,1,0 +193,126,1135,540,27,63,1,1,0 +194,126,1132,540,27,63,1,1,0 +195,126,1129,540,27,63,1,1,0 +196,126,1126,540,27,64,1,1,0 +197,126,1124,541,27,63,1,1,0 +198,126,1121,541,27,63,1,1,0 +199,126,1118,541,27,64,1,1,0 +200,126,1115,541,27,64,1,1,0 +201,126,1113,542,27,64,1,1,0 +202,126,1111,542,28,65,1,1,0 +203,126,1109,542,30,67,1,1,0 +204,126,1106,542,28,68,1,1,0 +205,126,1103,542,27,69,1,1,0.035714 +206,126,1101,543,25,69,1,1,0.076923 +207,126,1098,543,26,69,1,1,0.074074 +208,126,1096,543,26,70,1,1,0.074074 +209,126,1094,543,26,71,1,1,0 +210,126,1092,544,26,71,1,1,0.89558 +211,126,1089,544,27,71,1,1,0.86111 +212,126,1087,545,28,70,1,1,0.042739 +213,126,1084,545,29,71,1,1,0.6 +214,126,1082,546,29,71,1,1,0.60833 +215,126,1079,546,30,72,1,1,0.62042 +216,126,1077,547,30,73,1,1,0.6347 +217,126,1075,547,29,73,1,1,0.66577 +218,126,1074,547,28,73,1,1,0.67474 +219,126,1072,548,28,72,1,1,0.71752 +220,126,1071,548,27,72,1,1,0.71624 +221,126,1070,549,26,72,1,1,0.79401 +222,126,1068,548,28,73,1,1,0.83038 +223,126,1066,548,30,74,1,1,0.86753 +224,126,1064,548,32,74,1,1,0.87556 +225,126,1062,548,35,75,1,1,0.31871 +226,126,1056,547,39,81,1,1,0.92957 +227,126,1059,547,36,80,1,1,0.95996 +228,126,1062,547,34,80,1,1,0.96825 +229,126,1065,547,32,80,1,1,0.9783 +230,126,1064,547,33,79,1,1,0.98971 +231,126,1063,547,34,79,1,1,0.74286 +232,126,1063,547,35,79,1,1,0.72222 +233,126,1062,547,36,79,1,1,0.72973 +234,126,1062,547,37,79,1,1,0.73684 +235,126,1063,546,36,80,1,1,0.72973 +236,126,1064,546,35,81,1,1,0.75 +237,126,1065,546,34,81,1,1,0.59233 +238,126,1066,546,33,82,1,1,0.62792 +239,126,1068,546,31,83,1,1,0.38095 +240,126,1069,545,31,84,1,1,0.37647 +241,126,1070,544,32,85,1,1,0.37209 +242,126,1072,544,31,85,1,1,0.37209 +243,126,1073,543,32,86,1,1,0.36782 +244,126,1075,543,32,86,1,1,0.36782 +245,126,1077,543,32,86,1,1,0.34483 +246,126,1080,543,32,87,1,1,0.32955 +247,126,1082,543,33,87,1,1,0.31818 +248,126,1085,543,33,88,1,1,0.30337 +249,126,1087,543,34,88,1,1,0.30337 +250,126,1090,543,34,89,1,1,0.28889 +251,126,1093,543,34,90,1,1,0.27473 +252,126,1097,543,34,90,1,1,0.27473 +253,126,1101,543,34,91,1,1,0.26087 +254,126,1105,543,35,92,1,1,0.23656 +255,126,1109,543,35,93,1,1,0.2234 +256,126,1113,543,35,94,1,1,0.2 +257,126,1117,544,36,94,1,1,0.55619 +258,126,1121,544,37,94,1,1,0.91247 +259,126,1126,544,37,95,1,1,1 +260,126,1132,544,37,96,1,1,0.94221 +261,126,1138,545,37,96,1,1,0.80467 +262,126,1144,546,38,97,1,1,0.6753 +263,126,1149,547,39,97,1,1,0.52806 +264,126,1155,548,39,98,1,1,0.375 +265,126,1161,549,39,99,1,1,0.24 +266,126,1167,551,39,99,1,1,0.24 +267,126,1173,553,40,100,1,1,0.2113 +268,126,1179,551,40,101,1,1,0.15256 +269,126,1185,549,41,102,1,1,0.10541 +270,126,1192,548,41,102,1,1,0.070273 +271,126,1196,549,42,103,1,1,0.04025 +272,126,1201,551,42,103,1,1,0.014535 +273,126,1204,552,43,103,1,1,0 +274,126,1208,553,43,104,1,1,0.017316 +275,126,1212,554,43,104,1,1,0.02381 +276,126,1216,555,43,105,1,1,0.030017 +277,126,1220,556,43,105,1,1,0.009434 +278,126,1224,557,43,106,1,1,0.18182 +279,126,1228,558,44,107,1,1,0.42222 +280,126,1232,558,44,107,1,1,0.66667 +281,126,1236,558,45,108,1,1,0.8913 +282,126,1241,558,45,109,1,1,1 +283,126,1246,557,45,110,1,1,1 +284,126,1251,557,46,110,1,1,1 +285,126,1257,557,46,111,1,1,1 +286,126,1262,557,46,112,1,1,1 +287,126,1263,556,46,112,1,1,1 +288,126,1269,556,42,113,1,1,1 +289,126,1275,556,39,114,1,1,1 +290,126,1281,556,36,115,1,1,1 +291,126,1284,557,46,117,1,1,0.97079 +292,126,1288,559,47,117,1,1,0.83792 +293,126,1292,560,47,118,1,1,0.67262 +294,126,1296,562,47,119,1,1,0.525 +295,126,1300,564,48,119,1,1,0.51667 +296,126,1304,566,48,120,1,1,0.5124 +297,126,1308,568,49,120,1,1,0.4876 +298,126,1312,569,49,122,1,1,0.47154 +299,126,1316,571,50,122,1,1,0.45528 +300,126,1320,573,50,123,1,1,0.42742 +301,126,1324,575,51,123,1,1,0.41129 +302,126,1329,577,50,124,1,1,0.4 +303,126,1333,578,50,126,1,1,0.40157 +304,126,1337,580,51,126,1,1,0.40157 +305,126,1341,582,51,127,1,1,0.39844 +306,126,1345,584,52,127,1,1,0.375 +307,126,1349,586,52,128,1,1,0.35659 +308,126,1353,587,53,129,1,1,0.34615 +309,126,1357,589,53,130,1,1,0.32061 +310,126,1361,591,54,130,1,1,0.30534 +311,126,1365,593,54,131,1,1,0.28788 +312,126,1370,595,54,132,1,1,0.27068 +313,126,1374,595,54,133,1,1,0.26866 +314,126,1378,596,54,133,1,1,0.26119 +315,126,1382,597,54,134,1,1,0.46438 +316,126,1386,599,54,134,1,1,0.72148 +317,126,1390,602,54,134,1,1,1 +318,126,1394,604,54,135,1,1,1 +319,126,1398,607,54,134,1,1,1 +320,126,1402,609,54,135,1,1,1 +321,126,1406,612,54,135,1,1,1 +322,126,1406,610,56,138,1,1,1 +323,126,1406,608,58,141,1,1,1 +324,126,1406,606,61,144,1,1,1 +325,126,1413,606,63,147,1,1,1 +326,126,1420,606,65,150,1,1,1 +327,126,1428,607,55,149,1,1,1 +328,126,1428,605,55,151,1,1,1 +329,126,1429,604,54,152,1,1,1 +330,126,1430,602,53,154,1,1,1 +331,126,1431,601,52,155,1,1,1 +332,126,1427,599,59,158,1,1,1 +333,126,1423,597,66,161,1,1,1 +334,126,1420,596,72,163,1,1,1 +335,126,1422,595,73,162,1,1,1 +336,126,1426,595,73,165,1,1,1 +337,126,1431,596,70,170,1,1,1 +338,126,1436,597,69,172,1,1,1 +339,126,1441,599,69,173,1,1,1 +340,126,1442,602,70,173,1,1,1 +341,126,1443,605,72,173,1,1,1 +342,126,1445,609,73,173,1,1,1 +343,126,1443,612,70,177,1,1,1 +344,126,1443,619,68,178,1,1,1 +345,126,1444,626,65,179,1,1,1 +346,126,1448,629,57,181,1,1,1 +347,126,1448,633,60,185,1,1,1 +348,126,1449,637,61,186,1,1,1 +349,126,1449,640,65,186,1,1,1 +350,126,1444,643,69,189,1,1,1 +351,126,1445,646,70,191,1,1,1 +352,126,1446,650,72,192,1,1,1 +353,126,1447,654,73,193,1,1,1 +354,126,1448,658,75,194,1,1,1 +355,126,1449,662,76,195,1,1,1 +356,126,1451,666,77,196,1,1,1 +357,126,1451,669,71,199,1,1,1 +358,126,1452,671,69,201,1,1,1 +359,126,1453,674,68,203,1,1,1 +360,126,1454,677,66,205,1,1,1 +361,126,1455,680,65,207,1,1,1 +362,126,1453,685,70,209,1,1,1 +363,126,1451,690,76,211,1,1,1 +364,126,1450,695,81,213,1,1,1 +365,126,1451,700,81,215,1,1,1 +366,126,1453,706,81,216,1,1,1 +367,126,1454,712,81,217,1,1,1 +368,126,1456,718,81,219,1,1,1 +369,126,1457,720,83,224,1,1,1 +370,126,1458,723,86,228,1,1,1 +371,126,1456,721,86,233,1,1,1 +372,126,1455,720,85,237,1,1,1 +373,126,1454,719,84,241,1,1,1 +374,126,1454,720,84,244,1,1,1 +375,126,1454,722,85,247,1,1,1 +376,126,1454,723,86,250,1,1,1 +377,126,1455,725,86,253,1,1,1 +378,126,1453,726,87,256,1,1,1 +379,126,1452,728,87,259,1,1,1 +380,126,1451,729,87,263,1,1,1 +381,126,1449,731,88,265,1,1,1 +382,126,1448,732,88,269,1,1,1 +383,126,1447,734,88,272,1,1,1 +384,126,1442,736,89,275,1,1,1 +385,126,1438,739,90,278,1,1,1 +386,126,1433,741,91,281,1,1,1 +387,126,1429,744,92,284,1,1,1 +388,126,1423,745,93,287,1,1,1 +389,126,1417,747,94,290,1,1,1 +390,126,1412,749,95,293,1,1,1 +391,126,1403,754,96,296,1,1,1 +392,126,1397,756,97,299,1,1,1 +393,126,1391,758,98,303,1,1,1 +394,126,1385,760,99,307,1,1,1 +395,126,1380,763,99,310,1,1,1 +396,126,1368,765,100,314,1,1,1 +397,126,1356,768,101,317,1,1,0.98428 +398,126,1348,770,103,314,1,1,0.9873 +399,126,1341,773,104,310,1,1,0.99035 +400,126,1330,775,109,312,1,1,0.97764 +401,126,1319,777,114,315,1,1,0.96203 +402,126,1309,781,115,318,1,1,0.94044 +403,126,1299,785,116,321,1,1,0.91925 +404,126,1285,787,117,324,1,1,0.90462 +405,126,1271,790,118,326,1,1,0.88991 +406,126,1257,792,120,330,1,1,0.87311 +407,126,1243,795,121,332,1,1,0.85886 +408,126,1230,798,122,335,1,1,0.84226 +409,126,1212,802,124,337,1,1,0.82544 +410,126,1195,806,125,340,1,1,0.80645 +411,126,1178,810,126,343,1,1,0.78779 +412,126,1155,813,127,346,1,1,0.77233 +413,126,1132,816,128,349,1,1,0.75714 +414,126,1110,820,129,352,1,1,0.73938 +415,126,1085,823,130,355,1,1,0.72472 +416,126,1060,826,131,358,1,1,0.71031 +417,126,1035,830,133,361,1,1,0.69337 +418,126,1013,831,131,365,1,1,0.68306 +419,126,991,833,129,368,1,1,0.67209 +420,126,963,841,119,372,1,1,0.64343 +421,126,939,844,126,376,1,1,0.62865 +422,126,907,848,127,381,1,1,0.60995 +423,126,875,852,128,386,1,1,0.59173 +424,126,843,857,129,390,1,1,0.57289 +425,126,808,865,130,395,1,1,0.54545 +426,126,773,874,131,399,1,1,0.5175 +427,126,738,883,132,403,1,1,0.4901 +428,126,703,892,134,408,1,1,0.4621 +429,126,663,900,136,413,1,1,0.4372 +430,126,624,909,137,417,1,1,0.41148 +431,126,585,918,138,422,1,1,0.38534 +432,126,538,929,138,413,1,1,0.36715 +433,126,491,940,139,404,1,1,0.34815 +434,126,444,951,140,395,1,1,0.32828 +435,126,397,962,141,386,1,1,0.30749 +436,126,351,973,141,378,1,1,0.28496 +437,126,292,984,140,367,1,1,0.26359 +438,126,234,995,138,356,1,1,0.2409 +439,126,176,1006,136,345,1,1,0.21676 +440,126,118,1018,135,333,1,1,0.18862 +441,126,98,1025,98,326,1,1,0.17125 +442,126,42,1032,92,318,1,1,0.15361 +284,127,1280,546,37,108,1,1,0 +285,127,1287,550,38,106,1,1,0 +286,127,1293,546,35,110,1,1,0 +287,127,1301,549,34,107,1,1,0.0092593 +288,127,1308,545,35,113,1,1,0.0026803 +296,128,1366,548,42,119,1,1,0.023256 +297,128,1373,549,43,119,1,1,0.090909 +298,128,1380,551,44,118,1,1,0.099346 +299,128,1388,553,44,118,1,1,0.23492 +300,128,1392,557,45,116,1,1,0.58974 +301,128,1399,557,45,118,1,1,0.57983 +302,128,1406,558,46,120,1,1,0.57025 +303,128,1414,559,46,122,1,1,0.56911 +304,128,1420,561,46,123,1,1,0.56452 +305,128,1426,564,47,124,1,1,0.552 +306,128,1432,566,48,125,1,1,0.52381 +307,128,1438,569,48,126,1,1,0.49606 +308,128,1444,571,49,127,1,1,0.47656 +309,128,1451,574,49,128,1,1,0.44186 +310,128,1457,575,49,129,1,1,0.43077 +311,128,1463,576,50,130,1,1,0.41985 +312,128,1469,577,51,131,1,1,0.40909 +313,128,1475,578,52,132,1,1,0.3985 +314,128,1482,579,52,133,1,1,0.38806 +315,128,1488,580,53,134,1,1,0.40741 +316,128,1494,581,54,135,1,1,0.43382 +317,128,1500,582,55,136,1,1,0.40146 +318,128,1507,583,55,137,1,1,0.36957 +319,128,1513,584,56,138,1,1,0.33813 +320,128,1520,585,56,140,1,1,0.41471 +321,128,1527,587,56,141,1,1,0.65641 +322,128,1532,586,55,143,1,1,0.96205 +323,128,1537,586,54,145,1,1,1 +324,128,1543,586,53,147,1,1,1 +325,128,1546,585,52,149,1,1,1 +326,128,1550,585,51,151,1,1,1 +327,128,1554,585,49,153,1,1,1 +328,128,1558,585,48,155,1,1,1 +329,128,1562,584,47,156,1,1,1 +330,128,1566,583,47,157,1,1,1 +331,128,1570,582,46,158,1,1,1 +332,128,1574,581,46,160,1,1,1 +333,128,1578,580,45,161,1,1,1 +334,128,1582,579,45,162,1,1,1 +335,128,1586,579,45,163,1,1,1 +336,128,1586,572,44,164,1,1,0.91111 +337,128,1585,577,44,166,1,1,0.75556 +338,128,1590,574,44,169,1,1,0.75556 +339,128,1590,578,50,170,1,1,0.66667 +340,128,1588,581,56,170,1,1,0.5614 +341,128,1586,584,62,170,1,1,0.55556 +342,128,1585,587,67,171,1,1,0.58824 +343,128,1581,595,75,170,1,1,0.63158 +344,128,1577,603,83,169,1,1,0.66667 +345,128,1574,611,91,169,1,1,0.69565 +346,128,1583,618,90,168,1,1,0.69231 +347,128,1582,619,90,171,1,1,0.69231 +348,128,1581,620,90,174,1,1,0.69231 +349,128,1581,621,89,178,1,1,0.68889 +350,128,1580,622,89,181,1,1,0.7 +351,128,1579,623,89,184,1,1,0.75556 +352,128,1579,625,89,187,1,1,0.81111 +353,128,1578,629,89,186,1,1,0.87778 +354,128,1578,633,88,185,1,1,0.93258 +355,128,1578,637,88,185,1,1,0.98876 +356,128,1577,638,88,192,1,1,1 +357,128,1578,643,88,191,1,1,1 +358,128,1579,648,88,190,1,1,1 +359,128,1581,653,87,190,1,1,1 +360,128,1581,656,87,195,1,1,1 +361,128,1582,660,87,199,1,1,1 +362,128,1583,664,87,203,1,1,1 +363,128,1583,666,83,205,1,1,1 +364,128,1583,669,79,206,1,1,1 +365,128,1584,672,74,208,1,1,1 +366,128,1583,675,73,210,1,1,1 +367,128,1582,679,73,212,1,1,1 +368,128,1581,683,73,214,1,1,1 +369,128,1569,685,86,215,1,1,1 +370,128,1558,687,98,216,1,1,1 +371,128,1547,690,110,217,1,1,1 +372,128,1546,693,117,216,1,1,1 +373,128,1546,697,123,215,1,1,1 +374,128,1547,696,122,220,1,1,1 +375,128,1548,695,121,226,1,1,1 +376,128,1550,694,111,228,1,1,1 +377,128,1553,693,100,230,1,1,1 +378,128,1552,692,90,233,1,1,1 +379,128,1551,692,80,236,1,1,1 +380,128,1551,692,69,239,1,1,1 +381,128,1542,694,65,240,1,1,1 +382,128,1528,694,75,244,1,1,0.89995 +383,128,1514,694,85,248,1,1,0.78528 +384,128,1504,695,95,250,1,1,0.75598 +385,128,1494,697,106,252,1,1,0.7272 +386,128,1492,699,103,253,1,1,0.73516 +387,128,1490,702,101,253,1,1,0.73815 +388,128,1478,705,105,254,1,1,0.68979 +389,128,1467,708,109,256,1,1,0.65299 +390,128,1459,709,99,259,1,1,0.58538 +391,128,1451,711,90,261,1,1,0.54991 +392,128,1443,713,80,263,1,1,0.46259 +393,128,1435,715,71,266,1,1,0.35913 +394,128,1419,717,77,270,1,1,0.28811 +395,128,1403,720,83,274,1,1,0.22667 +396,128,1387,722,90,277,1,1,0.23828 +397,128,1371,725,97,279,1,1,0.24858 +398,128,1355,727,105,282,1,1,0.22395 +399,128,1340,730,111,284,1,1,0.20395 +400,128,1324,732,119,287,1,1,0.2202 +401,128,1308,735,126,289,1,1,0.22563 +402,128,1293,738,133,292,1,1,0.26137 +403,128,1282,740,124,295,1,1,0.26735 +404,128,1271,743,115,297,1,1,0.25052 +405,128,1256,747,118,301,1,1,0.25049 +406,128,1236,745,115,308,1,1,0.3056 +407,128,1216,748,114,310,1,1,0.35043 +408,128,1196,752,114,312,1,1,0.39917 +409,128,1177,756,113,314,1,1,0.40821 +410,128,1167,758,104,321,1,1,0.37598 +411,128,1140,760,112,329,1,1,0.42767 +412,128,18,16,40,1,1,1 +267,129,460,537,15,41,1,1,1 +268,129,464,537,15,41,1,1,1 +269,129,469,537,15,42,1,1,1 +270,129,473,536,15,42,1,1,1 +271,129,478,535,15,42,1,1,1 +272,129,482,534,15,42,1,1,1 +273,129,487,533,15,42,1,1,1 +274,129,492,532,15,42,1,1,1 +275,129,496,531,15,42,1,1,1 +276,129,501,530,15,42,1,1,1 +277,129,505,529,15,42,1,1,1 +278,129,510,528,15,42,1,1,1 +417,130,992,509,26,68,1,1,0.81481 +418,130,976,507,26,68,1,1,0.92593 +419,130,961,506,26,68,1,1,1 +420,130,948,505,26,68,1,1,1 +421,130,930,505,26,68,1,1,1 +422,130,913,505,26,68,1,1,1 +423,130,895,505,26,68,1,1,1 +424,130,878,505,26,68,1,1,1 +425,130,860,505,26,68,1,1,1 +426,130,843,505,26,68,1,1,1 +427,130,826,506,26,67,1,1,1 +428,130,806,505,23,66,1,1,1 +429,130,785,507,23,66,1,1,1 +430,130,764,509,24,66,1,1,1 +431,130,744,505,32,65,1,1,1 +432,130,732,505,29,65,1,1,1 +433,130,711,506,29,65,1,1,1 +434,130,690,507,30,65,1,1,1 +435,130,670,509,30,65,1,1,1 +436,130,651,511,28,66,1,1,1 +437,130,633,514,26,66,1,1,1 +438,130,614,512,24,66,1,1,1 +439,130,593,511,25,67,1,1,1 +440,130,573,511,26,68,1,1,1 +441,130,551,513,27,69,1,1,0.99388 +442,130,527,512,28,70,1,1,0.98932 +443,130,503,511,29,71,1,1,0.97454 +444,130,479,511,30,71,1,1,0.96864 +445,130,455,510,31,72,1,1,0.96147 +446,130,431,509,32,73,1,1,0.96069 +447,130,408,509,33,74,1,1,0.92 +448,130,182,508,32,73,1,1,1 +449,130,362,509,33,73,1,1,0.86049 +450,130,337,510,32,73,1,1,0.81572 +451,130,311,509,32,73,1,1,0.7973 +452,130,284,508,32,73,1,1,0.81081 +453,130,258,511,32,73,1,1,0.77027 +454,130,232,508,32,73,1,1,0.82432 +188,131,1175,526,23,70,1,1,0.13908 +189,131,1174,524,24,71,1,1,0.14778 +190,131,1171,523,24,71,1,1,0.14444 +191,131,1168,523,25,74,1,1,0.23231 +192,131,1165,523,26,77,1,1,0.17949 +193,131,1162,524,27,80,1,1,0.14991 +194,131,1156,525,27,79,1,1,0.12143 +195,131,1149,524,31,78,1,1,0.1068 +196,131,1149,525,30,79,1,1,0.10161 +197,131,1143,525,35,78,1,1,0.083685 +198,131,1141,525,34,78,1,1,0.063653 +199,131,1140,525,33,79,1,1,0.066176 +200,131,1139,525,32,79,1,1,0.051515 +201,131,1138,526,31,79,1,1,0.11875 +202,131,1136,527,31,78,1,1,0 +203,131,1135,528,31,78,1,1,0 +204,131,1134,526,33,83,1,1,0.13095 +205,131,1130,527,30,82,1,1,0 +206,131,1126,528,28,81,1,1,0.040791 +207,131,1122,529,26,80,1,1,0.12986 +208,131,1119,531,23,79,1,1,0.23229 +209,131,1117,534,23,81,1,1,0.45833 +210,131,1114,532,23,81,1,1,0.40142 +211,131,1112,537,26,76,1,1,0.42039 +212,131,1110,537,26,79,1,1,0.66667 +213,131,1108,538,26,82,1,1,0.74074 +214,131,1107,541,26,82,1,1,0.77778 +215,131,1106,540,27,83,1,1,0.78571 +216,131,1105,539,28,85,1,1,0.7931 +217,131,1103,536,29,87,1,1,0.83333 +218,131,1101,534,30,88,1,1,0.87097 +219,131,1100,534,28,87,1,1,0.84796 +220,131,1099,534,27,86,1,1,0.94048 +221,131,1098,535,26,85,1,1,0.80534 +222,131,1097,535,28,85,1,1,0.87009 +223,131,1096,535,28,85,1,1,0.68685 +224,131,1095,535,29,86,1,1,0.66513 +225,131,1094,535,29,86,1,1,0.64176 +226,131,1093,536,30,86,1,1,0.63849 +227,131,1092,536,30,86,1,1,0.63589 +228,131,1091,536,31,87,1,1,0.57955 +229,131,1090,537,32,87,1,1,0.52755 +230,131,1089,539,33,86,1,1,0.5497 +231,131,1089,542,34,85,1,1,0.77841 +232,131,1089,541,34,86,1,1,0.8 +233,131,1089,540,35,87,1,1,0.82008 +234,131,1090,539,35,88,1,1,0.83552 +235,131,1090,538,36,89,1,1,0.77177 +236,131,1091,537,36,90,1,1,0.66498 +237,131,1091,536,37,91,1,1,0.68593 +238,131,1091,535,38,92,1,1,0.71381 +239,131,1092,534,38,93,1,1,0.75668 +240,131,1092,533,39,94,1,1,0.61658 +241,131,1093,533,39,94,1,1,0.43211 +242,131,1096,534,37,92,1,1,0.37408 +243,131,1099,534,36,92,1,1,0.22871 +244,131,1102,534,35,93,1,1,0.36584 +245,131,1105,534,34,93,1,1,0.33708 +246,131,1108,535,33,93,1,1,0.31602 +247,131,1111,534,32,94,1,1,0.31547 +248,131,1114,533,32,96,1,1,0.30272 +249,131,1117,533,31,96,1,1,0.30026 +250,131,1120,532,31,98,1,1,0.28851 +251,131,1123,532,31,99,1,1,0.27875 +252,131,1126,532,32,99,1,1,0.27333 +253,131,1129,532,34,100,1,1,0.29901 +254,131,1132,533,36,100,1,1,0.26385 +255,131,1135,533,37,100,1,1,0.25221 +256,131,1138,534,39,100,1,1,0.2255 +257,131,1141,534,41,101,1,1,0.21312 +258,131,1144,535,43,101,1,1,0.19162 +259,131,1147,533,45,104,1,1,0.37474 +260,131,1150,532,47,106,1,1,0.59852 +261,131,1154,531,49,109,1,1,0.616 +262,131,1158,531,48,109,1,1,0.55102 +263,131,1163,532,46,108,1,1,0.25669 +264,131,1167,532,42,108,1,1,0.2332 +265,131,1171,537,41,107,1,1,0.28571 +280,132,1246,535,40,125,1,1,0.071235 +281,132,1243,535,43,120,1,1,0.14688 +282,132,1248,536,42,119,1,1,0.2593 +283,132,1253,537,42,118,1,1,0.13289 +284,132,1259,539,41,117,1,1,0.14165 +285,132,1265,543,40,117,1,1,0.10418 +286,132,1263,543,50,114,1,1,0.095482 +287,132,1261,544,60,111,1,1,0.10319 +288,132,1265,544,64,110,1,1,0.12654 +289,132,1270,545,68,108,1,1,0.20343 +290,132,1275,544,65,110,1,1,0.24242 +291,132,1280,543,62,112,1,1,0.13626 +292,132,1286,542,58,115,1,1,0.128 +293,132,1291,541,55,117,1,1,0.12182 +294,132,1297,540,51,120,1,1,0.11538 +295,132,1305,542,47,121,1,1,0.093921 +296,132,1309,543,44,118,1,1,0.11597 +297,132,1314,545,41,116,1,1,0.12637 +298,132,1317,545,38,113,1,1,0.14575 +299,132,1320,548,39,125,1,1,0.10496 +300,132,1323,549,35,119,1,1,0.1 +301,132,1327,551,31,113,1,1,0.085526 +302,132,1330,552,27,108,1,1,0.040957 +303,132,1334,554,23,102,1,1,0.029126 +304,132,1338,558,25,104,1,1,0.048352 +305,132,1341,561,27,106,1,1,0.077103 +306,132,1343,565,29,108,1,1,0.12232 +307,132,1343,566,32,110,1,1,0.20093 +308,132,1344,566,34,112,1,1,0.26169 +309,132,1353,568,30,116,1,1,0.20844 +310,132,1352,567,30,121,1,1,0.29191 +311,132,1356,569,30,126,1,1,0.27584 +312,132,1357,575,32,132,1,1,0.25701 +313,132,1359,577,43,140,1,1,0.2147 +314,132,1358,578,48,139,1,1,0.42085 +315,132,1352,579,60,140,1,1,0.55668 +316,132,1345,578,65,141,1,1,0.67723 +317,132,1342,579,70,144,1,1,0.72744 +318,132,1344,581,75,143,1,1,0.71254 +319,132,1346,582,81,143,1,1,0.69766 +320,132,1350,582,79,145,1,1,0.68236 +321,132,1355,582,76,147,1,1,0.69393 +322,132,1360,581,72,147,1,1,0.66772 +323,132,1361,581,74,148,1,1,0.64107 +324,132,1368,583,69,148,1,1,0.58696 +325,132,1374,582,63,150,1,1,0.64911 +326,132,1379,580,55,154,1,1,0.76509 +327,132,1382,579,47,153,1,1,0.96212 +328,132,1379,579,44,159,1,1,1 +329,132,1379,576,41,159,1,1,1 +330,132,1377,577,50,159,1,1,1 +331,132,1367,575,62,159,1,1,0.98413 +332,132,1357,573,71,157,1,1,0.97679 +333,132,1350,571,82,160,1,1,0.72289 +334,132,1349,569,92,157,1,1,0.63441 +335,132,1350,567,94,160,1,1,0.61053 +336,132,1352,565,93,160,1,1,0.60638 +337,132,1353,570,93,160,1,1,0.61702 +338,132,1358,571,88,159,1,1,0.61798 +339,132,1358,571,85,163,1,1,0.68605 +340,132,1362,571,77,164,1,1,0.78205 +341,132,1366,575,68,165,1,1,0.76812 +342,132,1370,575,56,171,1,1,0.84211 +343,132,1372,577,43,173,1,1,1 +344,132,1370,578,45,178,1,1,0.8913 +345,132,1371,585,42,180,1,1,0.65116 +346,132,1368,585,47,181,1,1,0.51648 +347,132,1358,594,56,178,1,1,0.45614 +348,132,1350,598,61,175,1,1,0.6129 +349,132,1344,605,69,174,1,1,0.62857 +350,132,1345,605,68,177,1,1,0.65217 +351,132,1345,605,69,175,1,1,0.7 +352,132,1345,605,68,180,1,1,0.78261 +353,132,1348,607,70,184,1,1,0.73239 +354,132,1352,608,69,187,1,1,0.58571 +355,132,1355,610,69,187,1,1,0.47143 +356,132,1355,611,61,189,1,1,0.41935 +357,132,1354,611,56,191,1,1,0.3644 +358,132,1352,612,54,188,1,1,0.37374 +359,132,1349,612,49,193,1,1,0.35701 +360,132,1345,618,51,193,1,1,0.37847 +361,132,1342,620,56,193,1,1,0.39546 +362,132,1341,624,55,196,1,1,0.28644 +363,132,1341,625,54,196,1,1,0.29303 +364,132,1339,631,54,196,1,1,0.33484 +365,132,1337,635,57,195,1,1,0.39796 +366,132,1336,639,65,198,1,1,0.37437 +367,132,1336,641,63,198,1,1,0.4218 +368,132,1330,643,71,203,1,1,0.41299 +369,132,1330,646,70,202,1,1,0.38708 +370,132,1328,645,64,204,1,1,0.44533 +371,132,1328,648,61,203,1,1,0.47494 +372,132,1322,648,61,203,1,1,0.50024 +373,132,1324,649,68,201,1,1,0.36225 +374,132,1322,648,65,201,1,1,0.38141 +375,132,1314,649,58,202,1,1,0.34566 +376,132,1315,647,50,199,1,1,0.40716 +377,132,1306,645,55,198,1,1,0.38092 +378,132,1302,648,56,199,1,1,0.41789 +379,132,1298,646,54,209,1,1,0.43221 +380,132,1294,644,57,212,1,1,0.40724 +381,132,1284,645,57,212,1,1,0.47377 +382,132,1273,645,63,214,1,1,0.51083 +383,132,1263,644,72,213,1,1,0.52138 +384,132,1257,644,69,214,1,1,0.62219 +385,132,1250,648,72,216,1,1,0.59005 +386,132,1245,645,75,217,1,1,0.59452 +387,132,1241,644,74,218,1,1,0.61479 +388,132,1235,648,74,218,1,1,0.58667 +389,132,1230,646,74,224,1,1,0.43342 +390,132,1225,644,71,229,1,1,0.39293 +391,132,1218,647,71,229,1,1,0.41636 +392,132,1213,647,70,232,1,1,0.42586 +393,132,1204,648,61,233,1,1,0.49104 +394,132,1193,651,61,233,1,1,0.56272 +395,132,1185,647,59,239,1,1,0.59014 +396,132,1169,647,57,245,1,1,0.77138 +397,132,1163,652,51,245,1,1,0.79448 +398,132,1147,651,52,247,1,1,0.87165 +399,132,1125,653,63,247,1,1,0.80261 +400,132,1102,656,81,247,1,1,0.68804 +401,132,1087,658,83,248,1,1,0.67202 +402,132,1070,659,83,250,1,1,0.7177 +403,132,1054,661,83,252,1,1,0.69415 +404,132,1038,663,82,254,1,1,0.60865 +405,132,1022,664,82,257,1,1,0.50574 +406,132,1005,666,82,258,1,1,0.41876 +407,132,989,668,82,260,1,1,0.3475 +408,132,973,669,81,263,1,1,0.33689 +409,132,957,671,81,265,1,1,0.35137 +410,132,941,673,81,267,1,1,0.31962 +411,132,925,671,81,272,1,1,0.30157 +412,132,909,669,82,278,1,1,0.23332 +413,132,884,669,82,281,1,1,0.18098 +414,132,860,669,82,284,1,1,0.11786 +415,132,834,670,82,286,1,1,0.068301 +416,132,809,671,82,289,1,1,0.034483 +417,132,784,672,82,292,1,1,0.040956 +418,132,759,673,82,295,1,1,0.030405 +419,132,734,674,82,298,1,1,0.0301 +420,132,711,677,90,298,1,1,0.0301 +421,132,674,678,99,297,1,1,0.036913 +422,132,638,679,107,297,1,1,0.033557 +423,132,602,680,115,297,1,1,0.040268 +424,132,548,677,123,297,1,1,0.15891 +425,132,510,682,131,297,1,1,0.16123 +426,132,472,688,139,297,1,1,0.18212 +427,132,434,695,147,296,1,1,0.17945 +428,132,396,702,155,295,1,1,0.18579 +429,132,358,709,164,295,1,1,0.18342 +430,132,320,714,160,303,1,1,0.25008 +431,132,282,717,155,312,1,1,0.26399 +432,132,244,721,151,320,1,1,0.33522 +433,132,202,724,147,323,1,1,0.30368 +434,132,160,727,144,326,1,1,0.34603 +435,132,119,730,140,329,1,1,0.32128 +436,132,55,735,137,328,1,1,0.21307 +437,132,-8,740,133,327,1,1,0.098835 +438,132,-70,741,146,325,1,1,0.017445 +195,133,970,530,18,49,1,1,0.54947 +196,133,968,525,16,57,1,1,0.50304 +197,133,966,525,16,57,1,1,0.50304 +198,133,964,526,17,56,1,1,0.49708 +199,133,963,527,17,55,1,1,0.51786 +200,133,961,527,18,55,1,1,0.5 +201,133,960,528,18,54,1,1,0.49091 +202,133,958,529,19,53,1,1,0.48148 +203,133,957,529,19,53,1,1,0.48148 +204,133,955,530,20,52,1,1,0.44924 +205,133,954,531,20,52,1,1,0.47439 +206,133,951,531,21,52,1,1,0.45712 +207,133,949,531,22,52,1,1,0.35111 +208,133,947,532,23,52,1,1,0.35456 +209,133,946,532,22,53,1,1,0.33977 +210,133,945,533,22,53,1,1,0.31481 +211,133,944,533,22,54,1,1,0.30909 +212,133,944,534,20,55,1,1,0.28571 +213,133,943,534,20,56,1,1,0.22055 +214,133,942,535,20,56,1,1,0.2005 +271,134,1124,516,28,65,1,1,0 +272,134,1129,516,28,66,1,1,0.27586 +273,134,1135,516,27,67,1,1,0.57143 +274,134,1141,517,27,67,1,1,0.67857 +275,134,1147,516,27,67,1,1,0.60714 +276,134,1153,516,27,67,1,1,0.57143 +313,135,1387,539,28,58,1,1,0.049679 +314,135,1389,541,27,60,1,1,0.057377 +315,135,1399,539,26,61,1,1,0.11649 +316,135,1400,541,28,66,1,1,0.073598 +317,135,1408,541,28,70,1,1,0.1151 +318,135,1412,541,28,76,1,1,0.098074 +319,135,1416,542,29,82,1,1,0.29518 +320,135,1421,542,30,82,1,1,0.34473 +321,135,1426,542,31,82,1,1,0.30648 +322,135,1434,541,26,81,1,1,0.34824 +323,135,1442,541,26,81,1,1,0.3645 +324,135,1445,540,27,81,1,1,0.34495 +325,135,1448,539,29,82,1,1,0.40161 +326,135,1451,538,30,82,1,1,0.44656 +327,135,1454,537,32,83,1,1,0.39538 +328,135,1457,534,32,83,1,1,0.48846 +329,135,1461,532,32,83,1,1,0.50577 +330,135,1465,531,30,83,1,1,0.51959 +331,135,1469,530,28,84,1,1,0.29006 +332,135,1473,529,27,85,1,1,0.5 +333,135,1476,525,26,86,1,1,0.52448 +334,135,1479,522,26,86,1,1,0.55981 +335,135,1482,519,26,86,1,1,0.58323 +336,135,1482,519,26,86,1,1,0.5513 +337,135,1488,519,26,92,1,1,0.53445 +338,135,1491,514,26,91,1,1,0.59783 +339,135,1491,517,27,91,1,1,0.56522 +340,135,1495,519,28,89,1,1,0.55556 +341,135,1500,521,28,88,1,1,0.1976 +342,135,1501,521,28,88,1,1,0.25107 +343,135,1502,523,29,88,1,1,0.26779 +344,135,1504,526,30,88,1,1,0.28416 +345,135,1506,529,31,88,1,1,0.29494 +346,135,1508,532,31,87,1,1,0.33807 +347,135,1510,534,32,88,1,1,0.29111 +348,135,1512,537,33,88,1,1,0.29379 +349,135,1514,540,33,87,1,1,0.28075 +350,135,1516,543,34,87,1,1,0.28571 +351,135,1518,546,35,87,1,1,0.28977 +352,135,1521,547,35,89,1,1,0.2716 +353,135,1525,549,35,90,1,1,0.23504 +354,135,1526,550,35,91,1,1,0.61957 +355,135,1528,552,35,92,1,1,0.6129 +356,135,1530,553,34,94,1,1,0.61053 +357,135,1532,555,34,95,1,1,0.61458 +358,135,1534,556,34,97,1,1,0.61224 +359,135,1536,558,33,98,1,1,0.60606 +360,135,1538,559,33,100,1,1,0.61386 +361,135,1540,561,33,101,1,1,0.60784 +362,135,1541,563,33,101,1,1,0.60784 +363,135,1543,565,33,101,1,1,0.61765 +364,135,1545,567,33,101,1,1,0.61765 +365,135,1547,570,33,101,1,1,0.60784 +366,135,1549,572,33,101,1,1,0.61765 +367,135,1551,574,33,101,1,1,0.61765 +368,135,1553,577,33,101,1,1,0.61765 +369,135,1555,579,33,101,1,1,0.59804 +370,135,1557,581,33,101,1,1,0.57843 +371,135,1559,584,33,101,1,1,0.54902 +372,135,1559,582,33,101,1,1,0.56863 +373,135,1559,581,33,101,1,1,0.57843 +374,135,1559,579,33,101,1,1,0.59804 +375,135,1559,578,34,101,1,1,0.60784 +376,135,1559,576,33,101,1,1,0.31373 +377,135,1559,574,33,101,1,1,0.34256 +378,135,1559,573,33,101,1,1,0.64706 +379,135,1559,571,33,101,1,1,0.66667 +380,135,1559,569,33,101,1,1,0.67647 +381,135,1559,568,33,101,1,1,0.68627 +382,135,1557,568,33,101,1,1,0.66667 +383,135,1556,568,33,101,1,1,0.64706 +384,135,1554,569,33,101,1,1,0.62745 +385,135,1553,569,33,101,1,1,0.62745 +386,135,1552,570,33,101,1,1,0.62745 +387,135,1549,570,33,101,1,1,0.63725 +388,135,1546,570,33,101,1,1,0.26644 +389,135,1543,571,33,101,1,1,0.24366 +390,135,1540,571,33,101,1,1,0.64706 +391,135,1538,572,33,101,1,1,0.17128 +392,135,1530,571,33,101,1,1,0.21569 +393,135,1523,571,33,101,1,1,0.25865 +394,135,1516,570,33,101,1,1,0.28258 +395,135,1509,570,33,101,1,1,0.32757 +396,135,1502,569,33,101,1,1,0.31574 +397,135,1495,569,33,101,1,1,0.40542 +398,135,1488,568,33,101,1,1,0.37255 +399,135,1481,568,33,101,1,1,0.33304 +400,135,1474,567,33,101,1,1,0.28864 +401,135,1467,567,33,101,1,1,0.22203 +402,135,1457,566,33,101,1,1,0.24423 +403,135,1447,566,33,101,1,1,0.26644 +404,135,1437,566,33,101,1,1,0.28864 +405,135,1427,566,34,101,1,1,0.30196 +406,135,1417,566,34,101,1,1,0.26218 +407,135,1407,566,34,101,1,1,0.35406 +408,135,1398,566,34,101,1,1,0.26555 +409,135,1386,566,34,101,1,1,0.26555 +410,135,1374,566,34,101,1,1,0 +411,135,1363,567,33,101,1,1,0.045559 +412,135,1349,565,34,104,1,1,0 +413,135,1336,563,34,107,1,1,0 +414,135,1321,562,35,109,1,1,0 +415,135,1307,561,35,112,1,1,0 +416,135,1292,560,36,114,1,1,0.38402 +417,135,1278,559,37,117,1,1,0.74576 +418,135,1261,558,37,116,1,1,0.76068 +419,135,1244,557,38,115,1,1,0 +420,135,1227,556,39,114,1,1,0 +421,135,1210,556,41,108,1,1,0 +422,135,1191,554,41,112,1,1,0 +423,135,1172,553,42,116,1,1,0 +424,135,1152,552,43,117,1,1,0 +425,135,1133,551,43,119,1,1,0 +426,135,1114,550,43,121,1,1,0 +427,135,1096,549,43,124,1,1,0 +428,135,1075,552,43,126,1,1,0.70222 +429,135,1050,554,44,128,1,1,0.64806 +430,135,1031,556,40,129,1,1,0.60375 +431,135,1012,558,37,130,1,1,0.67818 +432,135,992,557,40,134,1,1,0.6439 +433,135,973,564,41,129,1,1,0.63462 +434,135,951,565,40,130,1,1,0.61441 +435,135,930,566,39,131,1,1,0.66951 +436,135,908,566,39,132,1,1,0.69699 +437,135,886,566,39,134,1,1,0.7587 +438,135,865,567,39,135,1,1,0.74044 +439,135,843,568,39,136,1,1,0.70949 +440,135,821,569,39,137,1,1,0.67138 +441,135,799,571,40,137,1,1,0.53941 +442,135,775,571,39,139,1,1,0.43607 +443,135,750,570,39,141,1,1,0.34824 +444,135,725,570,39,142,1,1,0.25035 +445,135,701,569,39,145,1,1,0.28784 +446,135,676,569,39,146,1,1,0.32653 +447,135,652,569,39,148,1,1,0.35302 +448,135,627,567,39,149,1,1,0.018667 +449,135,603,566,39,150,1,1,0.21192 +450,135,579,564,39,152,1,1,0.45752 +451,135,555,563,39,153,1,1,0.62029 +452,135,524,565,44,153,1,1,0.49048 +453,135,494,567,48,153,1,1,0.55314 +454,135,463,569,53,153,1,1,0.62867 +455,135,433,571,57,153,1,1,0.69145 +456,135,403,573,62,153,1,1,0.73676 +457,135,372,575,64,153,1,1,0.73427 +458,135,342,577,65,154,1,1,0.76764 +459,135,312,580,66,153,1,1,0.73134 +460,135,282,582,67,154,1,1,0.33824 +461,135,252,585,68,154,1,1,0.36232 +462,135,218,585,66,156,1,1,0.68657 +463,135,185,586,63,157,1,1,0.6875 +464,135,152,586,61,159,1,1,0.16129 +465,135,119,587,58,160,1,1,0.13559 +466,135,86,587,56,162,1,1,0.070175 +467,135,53,588,53,163,1,1,0.92593 +468,135,20,589,51,164,1,1,1 +292,136,1511,519,28,100,1,1,0.37931 +293,136,1518,519,30,101,1,1,0.67742 +294,136,1526,519,32,102,1,1,0.75758 +295,136,1533,520,35,101,1,1,1 +296,136,1541,521,38,101,1,1,1 +297,136,1549,521,36,102,1,1,1 +298,136,1557,522,34,102,1,1,1 +299,136,1565,523,33,102,1,1,1 +300,136,1575,526,33,101,1,1,1 +301,136,1579,528,39,101,1,1,1 +302,136,1592,529,34,102,1,1,1 +303,136,1598,530,33,105,1,1,1 +304,136,1609,537,34,103,1,1,1 +305,136,1615,535,35,110,1,1,1 +306,136,1623,541,35,110,1,1,0.96496 +307,136,1630,541,35,110,1,1,0.85986 +308,136,1638,541,35,110,1,1,0.81982 +309,136,1646,546,34,104,1,1,0.80952 +310,136,1650,543,35,110,1,1,0.79279 +311,136,1661,544,35,110,1,1,0.78378 +312,136,1667,544,35,110,1,1,0.78378 +313,136,1674,545,35,110,1,1,0.77477 +314,136,1682,545,34,107,1,1,0.7963 +315,136,1693,545,32,104,1,1,0.85714 +316,136,1701,545,32,104,1,1,0.90476 +317,136,1708,545,32,104,1,1,0.87619 +318,136,1715,545,35,103,1,1,0.85577 +319,136,1721,545,37,102,1,1,0.83495 +320,136,1729,544,37,102,1,1,0.81553 +321,136,1738,544,37,102,1,1,0.79612 +322,136,1742,545,37,102,1,1,0.80583 +323,136,1748,544,37,102,1,1,0.84466 +324,136,1757,545,37,102,1,1,0.86408 +325,136,1766,547,37,102,1,1,0.86408 +326,136,1771,544,36,112,1,1,0.84071 +327,136,1773,544,43,117,1,1,0.83051 +328,136,1780,544,42,120,1,1,0.80992 +329,136,1788,541,42,120,1,1,0.83471 +330,136,1797,540,41,123,1,1,0.91551 +331,136,1802,537,41,123,1,1,1 +332,136,1810,537,40,120,1,1,1 +333,136,1815,534,39,123,1,1,1 +334,136,1817,526,42,130,1,1,1 +335,136,1828,527,39,123,1,1,1 +336,136,1831,520,38,130,1,1,1 +337,136,1835,527,41,129,1,1,1 +338,136,1840,521,41,129,1,1,1 +339,136,1847,522,40,130,1,1,1 +340,136,1852,522,40,130,1,1,1 +341,136,1858,528,40,130,1,1,1 +342,136,1863,528,40,130,1,1,1 +343,136,1866,533,44,131,1,1,1 +344,136,1874,536,44,131,1,1,1 +345,136,1877,541,46,137,1,1,0.93617 +346,136,1881,541,46,137,1,1,0.85106 +347,136,1884,545,46,137,1,1,0.78723 +348,136,1891,548,46,137,1,1,0.6383 +349,136,1895,548,46,137,1,1,0.55319 +350,136,1901,551,46,137,1,1,0.42553 +351,136,1906,553,46,137,1,1,0.31915 +352,136,1911,554,46,137,1,1,0.21277 +410,137,1911,606,46,137,1,1,0.21277 +411,137,1900,594,45,185,1,1,0.45652 +412,137,1886,592,55,185,1,1,0.625 +413,137,1873,591,55,185,1,1,0.85714 +414,137,1860,591,62,192,1,1,0.96825 +415,137,1846,589,65,191,1,1,1 +416,137,1830,587,65,191,1,1,1 +417,137,1815,588,65,191,1,1,1 +418,137,1801,588,65,191,1,1,1 +419,137,1785,585,65,191,1,1,1 +420,137,1771,588,65,191,1,1,1 +421,137,1754,585,64,197,1,1,1 +422,137,1739,585,63,194,1,1,1 +423,137,1717,584,62,197,1,1,1 +424,137,1695,584,65,197,1,1,1 +425,137,1676,584,65,197,1,1,1 +426,137,1657,582,65,197,1,1,1 +427,137,1635,585,65,197,1,1,1 +428,137,1610,585,72,201,1,1,1 +429,137,1589,588,72,201,1,1,1 +430,137,1563,589,75,203,1,1,1 +431,137,1538,596,80,198,1,1,1 +432,137,1514,594,82,202,1,1,1 +433,137,1493,598,75,203,1,1,1 +434,137,1470,600,75,203,1,1,1 +435,137,1449,603,73,203,1,1,1 +436,137,1425,602,79,206,1,1,1 +437,137,1403,605,76,205,1,1,1 +438,137,1379,605,81,207,1,1,1 +439,137,1351,606,85,205,1,1,0.96935 +440,137,1330,607,83,209,1,1,0.98957 +441,137,1304,607,82,212,1,1,0.96861 +442,137,1283,607,76,211,1,1,1 +443,137,1258,611,79,208,1,1,0.989 +444,137,1231,612,81,210,1,1,0.94625 +445,137,1203,614,81,210,1,1,0.89192 +446,137,1172,614,81,210,1,1,0.79575 +447,137,1146,615,81,210,1,1,0.75275 +448,137,1117,612,80,213,1,1,0.67982 +449,137,1084,612,80,213,1,1,0.58602 +450,137,1054,607,78,219,1,1,0.513 +451,137,1025,607,78,219,1,1,0.49735 +452,137,998,612,78,219,1,1,0.463 +453,137,972,612,77,222,1,1,0.46372 +454,137,944,612,76,229,1,1,0.44709 +455,137,920,617,76,229,1,1,0.46877 +456,137,885,620,76,229,1,1,0.35483 +457,137,847,623,76,229,1,1,0.22857 +458,137,803,624,78,213,1,1,0.14409 +459,137,774,627,74,212,1,1,0.14817 +460,137,736,630,74,212,1,1,0.13746 +461,137,700,635,74,212,1,1,0.12851 +462,137,662,638,79,217,1,1,0.12408 +463,137,625,639,78,228,1,1,0.1231 +464,137,587,643,86,230,1,1,0.1233 +465,137,548,646,77,229,1,1,0.12207 +466,137,507,649,77,229,1,1,0.11054 +467,137,470,657,77,229,1,1,0.091973 +468,137,432,657,77,246,1,1,0.094571 +469,137,387,656,77,246,1,1,0.090626 +470,137,350,660,71,245,1,1,0.079268 +471,137,307,656,71,245,1,1,0.086721 +472,137,261,655,73,252,1,1,0.082897 +473,137,208,660,79,257,1,1,0.054651 +474,137,167,660,75,264,1,1,0.075074 +475,137,119,659,75,264,1,1,0.096326 +476,137,65,664,75,264,1,1,0.09007 +477,137,1,676,75,264,1,1,0.075472 +85,138,1619,510,22,59,1,1,0.38551 +86,138,1615,509,22,59,1,1,0.54783 +87,138,1611,510,22,59,1,1,0.69855 +88,138,1608,511,22,59,1,1,0.77391 +89,138,1603,512,23,60,1,1,0.92623 +90,138,1599,513,23,61,1,1,1 +91,138,1595,514,24,62,1,1,1 +92,138,1590,515,25,63,1,1,0.88221 +93,138,1586,516,25,64,1,1,0.80118 +94,138,1582,517,26,65,1,1,0.74747 +95,138,1578,517,29,63,1,1,0.70625 +96,138,1574,518,28,62,1,1,0.711 +97,138,1571,519,27,62,1,1,0.70068 +98,138,1568,520,26,62,1,1,0.68959 +99,138,1565,521,24,61,1,1,0.65935 +100,138,1562,522,23,61,1,1,0.6371 +101,138,1559,523,22,61,1,1,0.62132 +102,138,1556,521,21,60,1,1,0.62444 +103,138,1553,522,21,60,1,1,0.6155 +104,138,1550,523,21,61,1,1,0.6393 +105,138,1545,523,21,61,1,1,0.6305 +106,138,1541,523,21,61,1,1,0.66935 +107,138,1536,523,22,61,1,1,0.73492 +108,138,1532,523,21,61,1,1,0.78446 +109,138,1528,523,21,62,1,1,0.77273 +110,138,1523,523,22,62,1,1,0.90269 +111,138,1519,523,21,62,1,1,0.96609 +112,138,1514,523,22,62,1,1,0 +113,138,1510,523,22,62,1,1,0 +114,138,1506,523,22,63,1,1,0 +115,138,1501,522,22,63,1,1,0 +116,138,1496,522,23,63,1,1,0 +117,138,1491,522,23,63,1,1,0.015625 +118,138,1486,521,24,64,1,1,0.015385 +119,138,1482,521,24,64,1,1,0.015385 +120,138,1477,521,24,63,1,1,0.055 +121,138,1472,520,25,64,1,1,0.038462 +122,138,1467,520,25,64,1,1,0.038462 +123,138,1462,520,26,64,1,1,0.11111 +124,138,1458,520,26,64,1,1,0.18519 +125,138,1454,520,25,64,1,1,0.26923 +126,138,1450,520,25,65,1,1,0.26923 +127,138,1446,521,24,65,1,1,0.28 +128,138,1442,521,24,66,1,1,0.28 +129,138,1439,522,22,66,1,1,0.30435 +130,138,1435,522,22,66,1,1,0.30435 +131,138,1431,522,21,67,1,1,0.27273 +132,138,1427,523,21,67,1,1,1 +133,138,1423,523,20,68,1,1,1 +134,138,1420,524,19,68,1,1,1 +135,138,1416,523,19,69,1,1,1 +136,138,1412,523,19,69,1,1,1 +137,138,1408,523,20,69,1,1,1 +138,138,1405,523,19,69,1,1,1 +139,138,1401,523,20,69,1,1,1 +140,138,1397,523,20,69,1,1,1 +141,138,1394,523,19,69,1,1,1 +142,138,1390,523,20,69,1,1,1 +143,138,1386,523,20,69,1,1,1 +144,138,1383,523,20,70,1,1,1 +145,138,1377,522,22,71,1,1,1 +146,138,1372,522,23,71,1,1,1 +147,138,1366,522,25,71,1,1,1 +148,138,1361,522,26,71,1,1,1 +149,138,1355,522,28,71,1,1,1 +150,138,1350,522,29,71,1,1,1 +151,138,1344,522,31,71,1,1,1 +152,138,1339,522,32,71,1,1,1 +153,138,1334,522,33,71,1,1,1 +154,138,1329,523,29,71,1,1,1 +155,138,1323,522,29,71,1,1,1 +156,138,1318,522,29,71,1,1,1 +157,138,1312,522,30,71,1,1,1 +158,138,1307,522,29,71,1,1,1 +159,138,1302,522,29,71,1,1,1 +160,138,1296,521,30,71,1,1,1 +161,138,1291,521,29,71,1,1,1 +162,138,1285,521,30,71,1,1,1 +163,138,1280,521,30,71,1,1,0.53629 +164,138,1275,521,30,71,1,1,1 +165,138,1270,521,29,71,1,1,1 +166,138,1267,521,24,71,1,1,1 +167,138,1259,521,29,74,1,1,1 +168,138,1250,519,27,74,1,1,0.82 +169,138,1248,521,26,70,1,1,0.85185 +170,138,1246,520,25,73,1,1,0.84615 +171,138,1244,518,23,75,1,1,0.875 +172,138,1238,519,29,74,1,1,0.73333 +173,138,1237,521,29,71,1,1,0.73333 +174,138,1236,518,23,75,1,1,0.75 +175,138,1228,520,31,74,1,1,0.625 +176,138,1227,522,29,74,1,1,1 +177,138,1223,522,29,74,1,1,1 +178,138,1220,524,30,74,1,1,0.96774 +179,138,1216,521,30,74,1,1,0.41935 +180,138,1213,523,30,74,1,1,0.3828 +181,138,1209,522,30,74,1,1,0.28258 +182,138,1208,522,30,74,1,1,0.72215 +195,139,1167,526,29,74,1,1,0.028444 +196,139,1166,526,29,75,1,1,0.029825 +197,139,1165,525,30,75,1,1,0.028862 +198,139,1162,525,30,76,1,1,0.046921 +199,139,1160,525,30,77,1,1,0.066998 +200,139,1157,526,31,77,1,1,0.070513 +201,139,1155,526,30,78,1,1,0.084933 +202,139,1153,527,30,78,1,1,0.097999 +203,139,1150,527,31,80,1,1,0.22994 +204,139,1148,528,31,80,1,1,0.078704 +205,139,1146,528,30,81,1,1,0.25098 +206,139,1143,529,31,81,1,1,0.24162 +207,139,1141,529,31,82,1,1,0.2387 +208,139,1139,530,31,83,1,1,0.19159 +209,139,1138,532,30,83,1,1,0.22581 +210,139,1138,533,30,81,1,1,0.19355 +211,139,1140,533,31,82,1,1,0.23306 +212,139,1138,533,31,83,1,1,0.1875 +213,139,1137,534,31,83,1,1,0.15625 +214,139,1136,534,31,84,1,1,0.09375 +215,139,1135,535,31,84,1,1,0.0625 +216,139,1134,535,31,86,1,1,0 +217,139,1133,536,31,86,1,1,0 +218,139,1132,537,31,87,1,1,0 +219,139,1126,536,31,86,1,1,0.09375 +220,139,1122,533,31,86,1,1,0.1268 +221,139,1123,534,29,87,1,1,0.36667 +222,139,1123,533,29,86,1,1,0.36897 +223,139,1121,534,28,87,1,1,0.62069 +224,139,1121,533,29,88,1,1,0.56966 +225,139,1121,533,30,89,1,1,0.77419 +226,139,1121,533,32,89,1,1,0.7 +227,139,1121,533,33,90,1,1,0.85294 +228,139,1121,533,35,90,1,1,0.80739 +229,139,1121,533,36,91,1,1,0.84019 +230,139,1121,533,37,91,1,1,0.87185 +231,139,1121,533,39,92,1,1,0.85726 +232,139,1121,533,40,92,1,1,0.91896 +233,139,1122,533,41,93,1,1,0.90451 +234,139,1122,532,38,94,1,1,0.85641 +235,139,1122,532,35,95,1,1,0.79803 +236,139,1122,532,33,94,1,1,0.74303 +237,139,1122,531,31,94,1,1,0.69145 +238,139,1122,530,29,95,1,1,0.62083 +239,139,1122,530,32,95,1,1,0.58302 +240,139,1122,530,35,95,1,1,0.5463 +241,139,1123,531,37,94,1,1,0.55762 +242,139,1123,531,40,94,1,1,0.50347 +243,139,1124,532,43,94,1,1,0.41627 +244,139,1126,531,43,94,1,1,0.34545 +245,139,1129,531,42,93,1,1,0.34067 +246,139,1132,531,41,93,1,1,0.34245 +247,139,1134,530,40,93,1,1,0.34017 +248,139,1137,530,39,92,1,1,0.33065 +249,139,1140,530,38,91,1,1,0.34197 +250,139,1144,530,36,90,1,1,0.34066 +251,139,1148,530,35,89,1,1,0.34444 +252,139,1153,530,33,88,1,1,0.35558 +253,139,1157,530,34,90,1,1,0.32967 +254,139,1161,529,33,92,1,1,0.30614 +255,139,1165,529,33,94,1,1,0.29164 +256,139,1169,528,33,97,1,1,0.27131 +257,139,1173,528,34,99,1,1,0.25286 +258,139,1177,528,34,101,1,1,0.23669 +259,139,1182,528,34,103,1,1,0.21951 +260,139,1186,527,34,106,1,1,0.20641 +261,139,1190,527,35,108,1,1,0.44419 +262,139,1194,527,35,110,1,1,0.6519 +263,139,1199,527,35,113,1,1,0.70785 +264,139,1204,529,41,111,1,1,0.86097 +265,139,1209,525,32,116,1,1,0.89122 +266,139,1212,532,36,110,1,1,0.95374 +267,139,1219,530,41,115,1,1,0.81712 +268,139,1222,532,43,116,1,1,0.63462 +269,139,1228,534,43,116,1,1,0.5 +270,139,1237,532,39,116,1,1,0.31774 +271,139,1245,534,35,116,1,1,0.11111 +283,140,1287,536,50,123,1,1,0.5068 +284,140,1298,537,56,131,1,1,0.70175 +285,140,1301,537,61,126,1,1,0.87859 +286,140,1303,537,58,126,1,1,0.91432 +287,140,1306,537,53,126,1,1,0.93701 +288,140,1309,532,54,132,1,1,0.9553 +289,140,1320,532,30,129,1,1,1 +290,140,1324,533,34,129,1,1,1 +291,140,1331,534,36,129,1,1,1 +292,140,1330,535,45,130,1,1,0.89346 +293,140,1330,536,54,132,1,1,0.85099 +294,140,1330,537,63,133,1,1,0.80061 +295,140,1330,538,72,135,1,1,0.68795 +296,140,1337,539,70,133,1,1,0.63559 +297,140,1344,541,68,131,1,1,0.56083 +298,140,1351,543,66,129,1,1,0.5729 +299,140,1354,541,61,133,1,1,0.55416 +300,140,1357,543,59,128,1,1,0.32468 +301,140,1361,546,56,123,1,1,0.34295 +302,140,1365,548,53,119,1,1,0.39907 +303,140,1369,551,50,113,1,1,0.46594 +304,140,1373,553,47,109,1,1,0.51364 +305,140,1377,556,44,104,1,1,0.56063 +306,140,1379,559,44,107,1,1,0.4677 +307,140,1382,564,44,110,1,1,0.39319 +308,140,1384,565,44,113,1,1,0.32593 +309,140,1387,566,44,116,1,1,0.28547 +310,140,1390,567,44,120,1,1,0.23655 +311,140,1393,568,44,123,1,1,0.32419 +312,140,1395,569,44,126,1,1,0.29921 +313,140,1398,570,44,130,1,1,0.1391 +314,140,1401,571,44,133,1,1,0.098176 +315,140,1404,573,44,136,1,1,0.065531 +316,140,1406,573,48,139,1,1,0.083236 +317,140,1408,573,53,143,1,1,0.10455 +318,140,1411,573,56,147,1,1,0.10775 +319,140,1413,573,61,151,1,1,0.13678 +320,140,1416,574,65,154,1,1,0.23118 +321,140,1418,574,66,155,1,1,0.23555 +322,140,1420,574,67,157,1,1,0.32055 +323,140,1423,574,68,159,1,1,0.37572 +324,140,1426,574,68,160,1,1,0.41084 +325,140,1429,575,62,164,1,1,0.38124 +326,140,1431,577,58,162,1,1,0.23365 +327,140,1429,571,57,170,1,1,0.25136 +328,140,1432,574,46,168,1,1,0.18343 +329,140,1432,571,38,166,1,1,0.1976 +330,140,1433,571,38,168,1,1,0.18343 +331,140,1429,567,50,171,1,1,0.22914 +332,140,1430,567,50,171,1,1,0.18605 +333,140,1410,565,73,168,1,1,0.33176 +334,140,1408,563,71,168,1,1,0.32939 +335,140,1408,563,74,167,1,1,0.34159 +336,140,1409,558,77,170,1,1,0.38716 +337,140,1411,561,77,170,1,1,0.40861 +338,140,1413,561,76,174,1,1,0.44297 +339,140,1417,563,71,173,1,1,0.47126 +340,140,1423,562,69,177,1,1,0.43515 +341,140,1419,567,63,177,1,1,0.50843 +342,140,1418,567,60,184,1,1,0.56916 +343,140,1416,573,57,185,1,1,0.57759 +344,140,1411,578,69,184,1,1,0.57745 +345,140,1399,584,85,185,1,1,0.63091 +346,140,1392,591,91,184,1,1,0.68907 +347,140,1384,594,102,188,1,1,0.69949 +348,140,1388,597,108,187,1,1,0.65333 +349,140,1388,597,107,192,1,1,0.66177 +350,140,1390,600,107,192,1,1,0.6114 +351,140,1394,602,86,190,1,1,0.68153 +352,140,1399,600,80,195,1,1,0.68733 +353,140,1400,602,81,198,1,1,0.6847 +354,140,1393,608,71,196,1,1,0.82382 +355,140,1388,607,61,202,1,1,0.98824 +356,140,1381,609,69,204,1,1,1 +357,140,1374,615,78,200,1,1,0.98148 +358,140,1372,615,82,202,1,1,0.97383 +359,140,1366,617,90,206,1,1,0.96815 +360,140,1364,622,94,205,1,1,0.96142 +361,140,1364,623,94,209,1,1,0.96932 +362,140,1361,629,96,211,1,1,0.95215 +363,140,1361,630,103,210,1,1,0.89464 +364,140,1362,638,98,209,1,1,0.90577 +365,140,1367,638,92,212,1,1,0.92453 +366,140,1369,640,76,213,1,1,0.9878 +367,140,1371,644,70,214,1,1,0.98683 +368,140,1369,646,63,218,1,1,0.96062 +369,140,1366,647,62,219,1,1,0.93232 +370,140,1364,651,59,219,1,1,0.91 +371,140,1365,650,55,222,1,1,0.8975 +372,140,1365,651,58,225,1,1,0.88961 +373,140,1356,653,73,223,1,1,0.87542 +374,140,1355,657,73,222,1,1,0.87062 +375,140,1350,658,79,222,1,1,0.86323 +376,140,1350,655,78,226,1,1,0.86617 +377,140,1349,655,78,226,1,1,0.8684 +378,140,1349,655,77,227,1,1,0.86955 +379,140,1345,655,77,226,1,1,0.86084 +380,140,1340,652,76,231,1,1,0.84684 +381,140,1333,652,73,232,1,1,0.82137 +382,140,1328,651,65,231,1,1,0.79232 +383,140,1323,649,54,228,1,1,0.79913 +384,140,1323,650,50,227,1,1,0.8114 +385,140,1314,650,50,226,1,1,0.81195 +386,140,1312,650,47,230,1,1,0.81385 +387,140,1307,648,47,229,1,1,0.80299 +388,140,1279,648,69,246,1,1,0.54806 +389,140,1262,652,77,242,1,1,0.6129 +390,140,1252,655,79,241,1,1,0.63709 +391,140,1247,656,79,246,1,1,0.63097 +392,140,1242,659,76,244,1,1,0.62375 +393,140,1233,661,76,244,1,1,0.6202 +394,140,1227,659,74,253,1,1,0.61249 +395,140,1219,660,74,253,1,1,0.61627 +396,140,1213,660,76,256,1,1,0.60913 +397,140,1204,659,64,261,1,1,0.56629 +398,140,1193,658,59,264,1,1,0.53742 +399,140,1176,660,58,266,1,1,0.62712 +400,140,1158,660,57,272,1,1,0.82759 +401,140,1143,662,61,274,1,1,0.79032 +402,140,1130,662,60,277,1,1,0.78689 +403,140,1112,664,67,278,1,1,0.76471 +404,140,1088,667,76,277,1,1,0.80519 +405,140,1063,670,88,276,1,1,0.82022 +406,140,1039,670,106,280,1,1,0.7757 +407,140,1017,672,105,283,1,1,0.85849 +408,140,1000,672,110,286,1,1,1 +409,140,985,675,110,286,1,1,1 +410,140,967,674,112,290,1,1,1 +411,140,948,679,112,290,1,1,1 +412,140,926,679,117,292,1,1,1 +413,140,896,681,125,295,1,1,1 +414,140,866,683,123,297,1,1,1 +415,140,836,683,125,297,1,1,1 +416,140,803,681,109,308,1,1,1 +417,140,778,684,109,308,1,1,1 +418,140,750,682,119,311,1,1,1 +419,140,718,683,124,316,1,1,1 +420,140,688,686,129,315,1,1,1 +421,140,659,689,135,314,1,1,1 +422,140,624,689,140,319,1,1,1 +423,140,596,692,139,322,1,1,1 +424,140,561,695,148,320,1,1,1 +425,140,525,698,154,323,1,1,1 +426,140,491,704,154,323,1,1,1 +427,140,455,708,154,328,1,1,1 +428,140,421,711,149,335,1,1,1 +429,140,385,716,138,334,1,1,1 +430,140,353,722,123,339,1,1,1 +431,140,310,728,118,337,1,1,1 +432,140,266,736,105,340,1,1,1 +433,140,214,730,104,353,1,1,0.99153 +434,140,162,731,95,358,1,1,0.97493 +435,140,114,741,103,360,1,1,0.94183 +436,140,65,745,111,359,1,1,0.93333 +437,140,10,752,119,363,1,1,0.90385 +438,140,-27,752,119,363,1,1,0.69295 +257,141,-19,602,33,103,1,1,0.019796 +258,141,-17,607,33,103,1,1,0.47059 +259,141,-15,607,33,103,1,1,0.52941 +260,141,-13,607,33,103,1,1,0.58824 +261,141,-10,608,33,102,1,1,0.67647 +262,141,-8,609,33,102,1,1,0.73529 +263,141,-5,610,32,102,1,1,0.81818 +264,141,-6,609,32,101,1,1,0.78788 +265,141,-7,609,33,100,1,1,0.33227 +266,141,-8,608,34,105,1,1,0.74286 +267,141,-5,607,34,105,1,1,0.47466 +268,141,-1,607,33,104,1,1,0.49748 +269,141,2,607,33,103,1,1,0.59219 +270,141,6,607,32,103,1,1,1 +271,141,6,605,36,102,1,1,1 +272,141,7,603,40,102,1,1,0.55008 +273,141,10,603,40,102,1,1,0.50272 +274,141,13,604,40,102,1,1,1 +275,141,17,605,39,102,1,1,1 +276,141,18,604,40,102,1,1,0.41463 +277,141,18,603,39,104,1,1,1 +278,141,19,603,39,106,1,1,1 +279,141,21,603,39,109,1,1,1 +280,141,23,604,40,110,1,1,1 +281,141,26,606,40,111,1,1,1 +282,141,27,607,40,112,1,1,1 +283,141,28,609,40,112,1,1,1 +284,141,31,612,39,112,1,1,1 +285,141,30,611,47,113,1,1,1 +286,141,30,611,54,113,1,1,1 +287,141,36,614,51,112,1,1,0.37662 +288,141,37,615,48,114,1,1,1 +289,141,38,616,45,117,1,1,1 +290,141,40,616,50,116,1,1,1 +291,141,41,618,51,119,1,1,1 +292,141,41,621,48,118,1,1,1 +293,141,42,621,49,118,1,1,1 +294,141,45,621,49,117,1,1,1 +295,141,45,621,50,119,1,1,1 +296,141,46,621,51,121,1,1,1 +297,141,46,625,51,121,1,1,1 +298,141,47,625,51,121,1,1,1 +299,141,46,626,51,121,1,1,1 +300,141,46,627,51,121,1,1,1 +301,141,46,628,51,121,1,1,1 +302,141,46,630,51,121,1,1,1 +303,141,47,633,50,121,1,1,1 +304,141,46,636,50,121,1,1,1 +305,141,45,639,51,121,1,1,1 +306,141,44,634,50,122,1,1,1 +307,141,45,633,49,124,1,1,0.37168 +308,141,43,640,49,123,1,1,0.395 +309,141,41,640,50,124,1,1,1 +310,141,40,641,51,125,1,1,1 +311,141,40,641,48,130,1,1,1 +312,141,39,641,50,130,1,1,1 +313,141,37,643,51,131,1,1,1 +314,141,36,646,51,131,1,1,1 +315,141,34,644,51,132,1,1,1 +316,141,33,646,50,131,1,1,1 +317,141,32,646,49,131,1,1,1 +318,141,32,647,49,133,1,1,1 +319,141,29,650,51,132,1,1,1 +320,141,25,648,53,135,1,1,1 +321,141,23,648,52,139,1,1,1 +322,141,18,647,55,140,1,1,1 +323,141,16,646,55,140,1,1,1 +324,141,15,646,54,140,1,1,1 +325,141,14,648,54,140,1,1,1 +326,141,10,647,52,141,1,1,1 +327,141,5,646,52,141,1,1,1 +328,141,1,650,52,141,1,1,1 +329,141,-4,645,60,144,1,1,0.91803 +330,141,-8,645,60,144,1,1,0.85246 +331,141,-14,645,61,144,1,1,0.75806 +332,141,-23,643,61,142,1,1,0.6129 +333,141,-29,645,61,143,1,1,0.51613 +334,141,-31,645,61,143,1,1,0.48387 +335,141,-38,645,61,141,1,1,0.37097 +336,141,-44,646,60,142,1,1,0.2623 +707,142,1313,536,23,53,1,1,0.22222 +708,142,1319,536,23,53,1,1,0.20602 +709,142,1325,531,24,53,1,1,0.28296 +710,142,1333,543,24,55,1,1,0.08 +711,142,1338,539,24,55,1,1,0.15143 +712,142,1344,535,23,56,1,1,0.25439 +713,142,1349,533,23,56,1,1,0.30556 +714,142,1354,531,24,57,1,1,0.35793 +715,142,1360,529,24,58,1,1,0.41424 +716,142,1365,527,24,58,1,1,0.46983 +717,142,1370,525,25,59,1,1,0.53846 +718,142,1376,524,25,59,1,1,0.48782 +719,142,1382,530,25,60,1,1,0.4855 +720,142,1385,526,25,61,1,1,0.62655 +721,142,1391,527,25,61,1,1,0.63524 +722,142,1397,529,25,60,1,1,0.63808 +723,142,1402,531,25,61,1,1,0.66935 +724,142,1406,538,25,60,1,1,0.68789 +725,142,1414,535,24,60,1,1,0.68525 +726,142,1418,542,25,61,1,1,0.6861 +727,142,1424,543,25,61,1,1,0.72705 +728,142,1430,549,24,61,1,1,0.75613 +729,142,1436,545,24,60,1,1,0.75738 +730,142,1442,549,25,62,1,1,0.71795 +731,142,1448,554,26,64,1,1,0.67179 +732,142,1454,552,25,64,1,1,0.66627 +733,142,1459,552,26,65,1,1,0.64254 +734,142,1464,552,27,66,1,1,0.6194 +735,142,1468,547,27,67,1,1,0.67227 +736,142,1472,547,27,68,1,1,0.68944 +737,142,1477,547,27,69,1,1,0.70816 +738,142,1482,547,27,70,1,1,0.74849 +739,142,1487,547,27,72,1,1,0.78425 +740,142,1489,550,28,68,1,1,0.81209 +741,142,1492,551,28,70,1,1,0.83341 +742,142,1496,552,28,72,1,1,0.83467 +743,142,1499,553,28,74,1,1,0.85655 +744,142,1503,555,28,75,1,1,0.85299 +745,142,1506,554,28,75,1,1,0.90744 +746,142,1509,554,28,75,1,1,0.93194 +747,142,1513,553,28,75,1,1,0.93466 +748,142,1516,553,28,75,1,1,0.93466 +749,142,1520,553,28,75,1,1,0.9147 +750,142,1522,552,29,75,1,1,0.94079 +137,143,1308,520,19,61,1,1,0.25161 +138,143,1302,520,19,62,1,1,0.40635 +139,143,1296,520,19,63,1,1,0.54375 +140,143,1292,519,19,63,1,1,0.58203 +141,143,1288,518,19,63,1,1,0.67969 +142,143,1284,517,19,63,1,1,0.66797 +143,143,1280,517,19,62,1,1,0.62222 +144,143,1276,517,19,62,1,1,0.48889 +145,143,1272,517,19,62,1,1,0.4 +146,143,1268,517,19,62,1,1,0.4 +147,143,1264,517,19,62,1,1,0.31111 +148,143,1258,517,19,61,1,1,0.17742 +149,143,1252,517,19,61,1,1,0.17742 +150,143,1247,517,19,61,1,1,0.13548 +151,143,1241,517,19,61,1,1,0.090323 +152,143,1236,517,18,61,1,1,0.028862 +153,143,1230,517,19,61,1,1,0.032258 +154,143,1225,517,18,61,1,1,0.032258 +155,143,1219,517,18,61,1,1,0.080645 +156,143,1214,517,18,61,1,1,0.091681 +157,143,1208,517,18,61,1,1,0.13752 +158,143,1203,517,18,61,1,1,0.15874 +159,143,1197,517,18,61,1,1,0.30221 +160,143,1191,517,18,61,1,1,0.4601 +161,143,1185,517,18,61,1,1,0.59593 +162,143,1180,517,17,61,1,1,0.74731 +163,143,1177,518,17,61,1,1,0.78047 +164,143,1175,513,18,66,1,1,0.74077 +165,143,1170,512,18,66,1,1,0.91045 +166,143,1165,512,18,66,1,1,1 +167,143,1161,512,18,66,1,1,1 +168,143,1156,511,18,67,1,1,1 +169,143,1151,511,18,67,1,1,1 +170,143,1147,511,18,67,1,1,1 +171,143,1146,513,19,61,1,1,1 +172,143,1146,514,16,62,1,1,0.9253 +173,143,1141,514,18,62,1,1,0.90476 +174,143,1137,514,19,62,1,1,0.87937 +175,143,1133,514,21,63,1,1,0.85156 +176,143,1129,515,22,62,1,1,0.83851 +177,143,1124,515,24,62,1,1,0.8273 +178,143,1120,515,26,63,1,1,0.82292 +179,143,1116,515,27,63,1,1,0.83036 +180,143,1112,516,29,63,1,1,0.83177 +181,143,1108,516,29,63,1,1,0.83177 +182,143,1105,516,29,64,1,1,0.82462 +183,143,1101,516,30,65,1,1,0.84213 +184,143,1098,516,29,66,1,1,0.85821 +185,143,1095,516,29,67,1,1,0.84167 +186,143,1091,516,30,67,1,1,0.84677 +187,143,1088,516,29,68,1,1,0.85217 +188,143,1084,516,30,69,1,1,0.87558 +189,143,1081,516,30,70,1,1,0.88551 +190,143,1078,516,30,71,1,1,0.90323 +191,143,1075,516,30,70,1,1,0.92004 +192,143,1072,517,30,69,1,1,0.93779 +193,143,1070,517,29,69,1,1,0.95667 +194,143,1067,518,30,68,1,1,0.96353 +195,143,1065,518,29,68,1,1,0.98116 +196,143,1062,519,29,67,1,1,0.98382 +197,143,1059,519,30,67,1,1,0.98435 +198,143,1057,520,29,66,1,1,0.99502 +199,143,1054,520,29,66,1,1,1 +200,143,1052,521,29,65,1,1,1 +201,143,1049,521,29,65,1,1,1 +202,143,1047,521,29,66,1,1,1 +203,143,1044,522,30,66,1,1,1 +204,143,1042,522,29,67,1,1,1 +205,143,1040,523,29,67,1,1,1 +206,143,1037,523,30,68,1,1,1 +207,143,1035,523,29,69,1,1,1 +208,143,1032,524,30,69,1,1,1 +209,143,1030,524,30,70,1,1,1 +210,143,1028,525,30,70,1,1,1 +211,143,1026,525,29,70,1,1,1 +212,143,1024,525,28,70,1,1,1 +213,143,1022,526,28,70,1,1,1 +214,143,1020,526,27,70,1,1,1 +215,143,1019,527,26,70,1,1,1 +216,143,1017,527,27,70,1,1,1 +217,143,1016,528,28,70,1,1,1 +218,143,1014,529,30,69,1,1,1 +219,143,1013,530,31,69,1,1,1 +220,143,1012,531,32,69,1,1,1 +221,143,1012,530,31,69,1,1,1 +222,143,1012,529,30,69,1,1,1 +223,143,1013,528,28,69,1,1,1 +224,143,1010,528,32,70,1,1,1 +225,143,1011,528,28,71,1,1,1 +226,143,1013,528,23,73,1,1,1 +227,143,1011,529,25,72,1,1,1 +228,143,1010,530,27,71,1,1,1 +229,143,1009,531,29,70,1,1,1 +230,143,1008,532,31,69,1,1,1 +231,143,1008,531,30,69,1,1,1 +232,143,1008,530,30,69,1,1,0.95161 +233,143,1008,529,30,70,1,1,0.86188 +234,143,1009,528,29,70,1,1,0.78216 +235,143,1010,528,29,70,1,1,0.76056 +236,143,1012,527,28,70,1,1,0.76056 +237,143,1013,527,28,70,1,1,0.74648 +238,143,1015,526,27,70,1,1,0.74648 +239,143,1016,526,27,70,1,1,0.73239 +240,143,1018,526,26,70,1,1,0.71831 +241,143,1020,526,27,70,1,1,0.70423 +242,143,1022,526,28,70,1,1,0.70423 +243,143,1025,526,28,70,1,1,0.69014 +244,143,1027,526,29,70,1,1,0.69014 +245,143,1029,526,30,70,1,1,0.66197 +246,143,1032,526,30,70,1,1,0.64789 +247,143,1034,526,31,70,1,1,0.6338 +248,143,1037,526,31,71,1,1,0.61111 +249,143,1041,526,31,70,1,1,0.61972 +250,143,1045,526,32,70,1,1,0.56893 +251,143,1050,527,31,72,1,1,0.49144 +252,143,1057,526,31,73,1,1,0.49662 +253,143,1060,528,31,72,1,1,0.36729 +254,143,1062,529,31,72,1,1,0.23116 +296,144,1266,525,26,77,1,1,0.18993 +297,144,1271,525,26,77,1,1,0.27493 +298,144,1277,526,26,77,1,1,0.35043 +299,144,1282,527,26,77,1,1,0.42735 +300,144,1287,529,28,84,1,1,0.55375 +301,144,1294,530,28,85,1,1,0.48998 +302,144,1296,528,36,89,1,1,0.42342 +303,144,1303,530,29,87,1,1,0.50985 +304,144,1308,537,29,86,1,1,0.45747 +305,144,1311,536,31,87,1,1,0.42969 +306,144,1314,539,31,86,1,1,0.3926 +307,144,1319,541,30,88,1,1,0.36789 +308,144,1325,541,30,87,1,1,0.36767 +309,144,1329,543,30,86,1,1,0.37634 +310,144,1335,542,30,85,1,1,0.36722 +311,144,1339,542,30,85,1,1,0.3841 +312,144,1343,543,30,84,1,1,0.40835 +313,144,1347,542,36,82,1,1,0.44122 +314,144,1349,541,36,85,1,1,0.44155 +315,144,1352,540,35,88,1,1,0.4382 +316,144,1355,540,34,91,1,1,0.41304 +317,144,1360,543,33,90,1,1,0.3956 +318,144,1364,544,33,89,1,1,0.41111 +319,144,1369,546,33,87,1,1,0.40909 +320,144,1371,544,33,86,1,1,0.43678 +321,144,1376,546,32,85,1,1,0.4186 +322,144,1379,546,31,86,1,1,0.4023 +323,144,1382,546,31,87,1,1,0.39773 +324,144,1384,542,35,84,1,1,0.48235 +325,144,1386,541,34,82,1,1,0.49398 +326,144,1389,540,33,81,1,1,0.4878 +327,144,1392,542,32,80,1,1,0.45679 +328,144,1394,540,30,82,1,1,0.46988 +329,144,1398,538,32,84,1,1,0.45419 +330,144,1399,540,30,84,1,1,0.43529 +331,144,1401,538,29,81,1,1,0.44472 +332,144,1403,536,29,78,1,1,0.46118 +333,144,1405,534,29,75,1,1,0.42105 +334,144,1407,532,28,72,1,1,0.42749 +335,144,1409,530,28,69,1,1,0.47143 +336,144,1411,528,28,66,1,1,0.44776 +337,144,1411,527,28,69,1,1,0.48571 +338,144,1411,526,28,73,1,1,0.48043 +339,144,1412,525,27,77,1,1,0.50092 +340,144,1412,525,27,77,1,1,0.49542 +341,144,1413,528,31,75,1,1,0.49836 +342,144,1413,531,31,75,1,1,0.44572 +343,144,1414,534,31,75,1,1,0.45888 +344,144,1415,538,31,74,1,1,0.45625 +345,144,1415,542,31,74,1,1,0.56 +346,144,1416,546,31,74,1,1,0.56 +347,144,1416,547,32,75,1,1,0.57895 +348,144,1416,548,33,76,1,1,0.59244 +349,144,1416,550,35,76,1,1,0.5974 +350,144,1416,551,35,77,1,1,0.60256 +351,144,1416,552,35,78,1,1,0.60759 +352,144,1417,554,35,78,1,1,0.58228 +353,144,1417,555,35,80,1,1,0.58025 +354,144,1418,557,35,80,1,1,0.61728 +355,144,1418,558,35,81,1,1,0.60027 +356,144,1419,560,35,82,1,1,0.59304 +357,144,1419,562,35,83,1,1,0.61905 +358,144,1419,564,35,84,1,1,0.6 +359,144,1419,567,35,84,1,1,0.58824 +360,144,1419,569,36,85,1,1,0.60465 +361,144,1419,572,36,86,1,1,0.58621 +362,144,1419,574,36,87,1,1,0.57955 +363,144,1419,576,37,88,1,1,0.58427 +364,144,1419,579,37,88,1,1,0.57303 +365,144,1419,581,37,89,1,1,0.55175 +366,144,1420,584,37,90,1,1,0.54569 +367,144,1420,584,36,90,1,1,0.55094 +368,144,1420,585,36,90,1,1,0.55539 +369,144,1420,585,35,91,1,1,0.54801 +370,144,1420,586,35,91,1,1,0.52174 +371,144,1420,586,35,92,1,1,0.5 +372,144,1420,587,34,91,1,1,0.47733 +373,144,1420,587,34,92,1,1,0.45591 +374,144,1420,588,33,92,1,1,0.47691 +375,144,1420,588,33,93,1,1,0.48811 +376,144,1420,589,33,93,1,1,0.49468 +377,144,1416,587,34,94,1,1,0.4782 +378,144,1413,585,34,95,1,1,0.45 +379,144,1410,584,35,95,1,1,0.57292 +380,144,1407,582,35,96,1,1,0.57732 +381,144,1404,581,36,97,1,1,0.58163 +382,144,1400,579,37,98,1,1,0.57576 +383,144,1397,577,37,99,1,1,0.59263 +384,144,1394,576,38,99,1,1,0.62513 +385,144,1391,574,38,100,1,1,0.62681 +386,144,1388,573,39,101,1,1,0.62819 +387,144,1382,572,39,103,1,1,0.65505 +388,144,1376,572,39,104,1,1,0.67786 +389,144,1370,572,39,105,1,1,0.70283 +390,144,1364,572,40,106,1,1,0.72236 +391,144,1358,572,40,108,1,1,0.74021 +392,144,1352,571,40,110,1,1,0.76379 +393,144,1346,571,41,111,1,1,0.78975 +394,144,1340,571,41,112,1,1,0.76823 +395,144,1334,571,41,113,1,1,0.76107 +396,144,1328,571,42,115,1,1,0.73837 +397,144,1318,570,43,115,1,1,0.77253 +398,144,1309,569,44,116,1,1,0.78462 +399,144,1300,569,44,116,1,1,0.80532 +400,144,1291,568,45,116,1,1,0.79431 +401,144,1282,567,45,117,1,1,0.79606 +402,144,1273,567,46,117,1,1,0.78038 +403,144,1262,566,46,117,1,1,0.8004 +404,144,1251,566,46,117,1,1,0.81518 +405,144,1240,566,46,117,1,1,0.81518 +406,144,1230,566,46,117,1,1,0.81248 +407,144,1217,565,46,117,1,1,0.83556 +408,144,1204,565,46,117,1,1,0.83556 +409,144,1191,565,46,117,1,1,0.84241 +410,144,1178,565,46,117,1,1,0.84241 +411,144,1165,565,46,117,1,1,0.85323 +412,144,1152,565,46,117,1,1,0.83321 +413,144,1136,563,46,118,1,1,0.83908 +414,144,1120,562,46,118,1,1,0.84355 +415,144,1105,561,45,118,1,1,0.84472 +416,144,1089,560,45,119,1,1,0.84601 +417,144,1074,559,45,119,1,1,0.85507 +418,144,1058,557,45,120,1,1,0.83848 +419,144,1042,556,45,121,1,1,0.81771 +420,144,1027,555,44,121,1,1,0.79781 +421,144,1011,554,44,121,1,1,0.78871 +422,144,996,553,44,122,1,1,0.76423 +423,144,976,551,43,123,1,1,0.77419 +424,144,956,550,42,123,1,1,0.78226 +425,144,936,549,41,123,1,1,0.79531 +426,144,916,548,41,124,1,1,0.8 +427,144,895,550,41,123,1,1,0.79839 +428,144,874,553,41,122,1,1,0.78862 +429,144,853,556,42,121,1,1,0.79508 +430,144,832,559,42,119,1,1,0.80833 +431,144,811,562,42,118,1,1,0.82353 +432,144,791,565,42,117,1,1,0.81356 +433,144,767,565,43,118,1,1,0.82353 +434,144,743,566,44,118,1,1,0.83193 +435,144,720,566,44,119,1,1,0.84167 +436,144,696,567,46,119,1,1,0.85 +437,144,673,567,46,120,1,1,0.8595 +438,144,649,568,47,120,1,1,0.86777 +439,144,626,569,48,120,1,1,0.8843 +440,144,602,570,48,120,1,1,0.89256 +441,144,578,571,48,121,1,1,0.89344 +442,144,554,572,49,122,1,1,0.89431 +443,144,528,572,49,121,1,1,0.92623 +444,144,503,573,49,120,1,1,0.94215 +445,144,477,574,50,119,1,1,0.96667 +446,144,452,575,50,118,1,1,0.98319 +447,144,425,572,51,122,1,1,1 +448,144,398,570,52,125,1,1,0.98413 +449,144,369,570,53,125,1,1,0.98413 +450,144,340,569,53,125,1,1,0.99206 +451,144,311,568,54,126,1,1,0.99213 +452,144,282,568,55,126,1,1,1 +453,144,250,568,56,127,1,1,1 +454,144,218,569,57,128,1,1,1 +455,144,187,569,57,129,1,1,0.5 +456,144,155,570,58,130,1,1,0.23729 +457,144,123,570,59,131,1,1,0.96667 +458,144,92,571,59,132,1,1,1 +459,144,54,574,60,133,1,1,1 +117,145,1419,524,21,59,1,1,0.05 +118,145,1414,523,21,59,1,1,0.058333 +119,145,1409,523,21,59,1,1,0.058333 +120,145,1404,522,21,60,1,1,0.21386 +121,145,1399,522,22,60,1,1,0.19886 +122,145,1394,522,22,60,1,1,0.18532 +123,145,1389,521,22,61,1,1,0.14306 +124,145,1384,521,22,61,1,1,0.13114 +125,145,1379,521,23,61,1,1,0.12097 +126,145,1374,520,23,61,1,1,0.19892 +127,145,1369,520,23,61,1,1,0.1828 +128,145,1364,519,23,62,1,1,0.18122 +129,145,1359,519,24,62,1,1,0.13143 +130,145,1354,519,24,62,1,1,0.12571 +131,145,1349,518,24,63,1,1,0.19437 +132,145,1344,518,24,63,1,1,0.335 +133,145,1340,518,24,63,1,1,0.24938 +134,145,1335,520,24,63,1,1,0.24938 +135,145,1330,519,24,63,1,1,0.285 +136,145,1326,519,24,63,1,1,0.25375 +137,145,1321,519,25,63,1,1,0.24399 +138,145,1317,518,24,63,1,1,0.285 +139,145,1312,518,25,63,1,1,0.3137 +140,145,1308,518,25,63,1,1,0.34856 +141,145,1303,517,25,63,1,1,0.30829 +142,145,1299,517,25,63,1,1,0.27404 +143,145,1294,517,26,63,1,1,0.36227 +144,145,1290,517,25,63,1,1,0.33534 +145,145,1285,517,26,63,1,1,0.32639 +146,145,1281,516,26,64,1,1,0.30484 +147,145,1277,516,25,64,1,1,0.31598 +148,145,1272,516,26,64,1,1,0.37208 +149,145,1268,516,26,63,1,1,0.41088 +150,145,1263,516,27,63,1,1,0.45145 +151,145,1259,516,26,63,1,1,0.47859 +152,145,1254,515,27,64,1,1,0.54066 +153,145,1250,515,27,64,1,1,0.54396 +154,145,1246,515,26,64,1,1,0.53162 +155,145,1241,515,27,64,1,1,0.48242 +156,145,1237,515,27,64,1,1,0.48462 +157,145,1232,515,27,63,1,1,0.46038 +158,145,1228,514,27,64,1,1,0.48462 +159,145,1223,514,28,64,1,1,0.43607 +160,145,1219,514,28,64,1,1,0.34058 +161,145,1215,514,27,64,1,1,0.24011 +162,145,1210,514,28,64,1,1,0.18302 +163,145,1206,513,28,65,1,1,0.11442 +164,145,1201,513,28,65,1,1,0.096134 +165,145,1197,513,28,64,1,1,0.10716 +166,145,1192,513,29,64,1,1,0.089231 +167,145,1188,513,28,64,1,1,0.075332 +168,145,1184,513,28,64,1,1,0.077984 +169,145,1179,512,29,65,1,1,0.12626 +170,145,1175,512,29,65,1,1,0.1 +171,145,1170,512,29,65,1,1,0.16667 +172,145,1166,512,29,65,1,1,0.21515 +173,145,1161,512,30,64,1,1,0.26998 +174,145,1157,512,29,64,1,1,0.33333 +175,145,1153,511,29,65,1,1,0.33636 +176,145,1148,511,30,65,1,1,0.39492 +177,145,1144,511,29,65,1,1,0.44343 +178,145,1139,511,30,65,1,1,0.435 +179,145,1135,511,30,65,1,1,0.46921 +180,145,1131,511,30,65,1,1,0.51075 +181,145,1128,511,30,65,1,1,0.57283 +182,145,1125,512,30,64,1,1,0.6005 +183,145,1122,512,30,64,1,1,0.63275 +184,145,1119,513,30,64,1,1,0.72308 +185,145,1117,514,29,63,1,1,0.74167 +186,145,1114,514,29,63,1,1,0.74167 +187,145,1111,515,29,63,1,1,0.75781 +188,145,1108,515,29,63,1,1,0.7474 +189,145,1105,516,29,62,1,1,0.74021 +190,145,1103,517,29,62,1,1,0.76296 +191,145,1100,517,29,62,1,1,0.7619 +192,145,1097,517,29,63,1,1,0.75313 +193,145,1094,518,29,62,1,1,0.75556 +194,145,1091,518,29,63,1,1,0.7125 +195,145,1088,519,29,62,1,1,0.69894 +196,145,1085,519,29,63,1,1,0.70833 +197,145,1082,519,29,63,1,1,0.675 +198,145,1079,520,29,63,1,1,0.66771 +199,145,1076,520,29,63,1,1,0.67396 +200,145,1074,521,29,63,1,1,0.66406 +201,145,1072,521,28,63,1,1,0.6945 +202,145,1070,521,28,63,1,1,0.70205 +203,145,1068,521,28,63,1,1,0.71336 +204,145,1067,521,27,63,1,1,0.78404 +205,145,1065,521,27,64,1,1,0.7967 +206,145,1063,521,27,64,1,1,0.80055 +207,145,1062,521,26,64,1,1,0.87863 +208,145,1060,521,26,64,1,1,0.88832 +209,145,1058,521,26,64,1,1,0.89402 +210,145,1057,521,25,65,1,1,0.92774 +211,145,1056,522,24,70,1,1,0.98873 +212,145,1055,523,24,70,1,1,0.99155 +213,145,1054,525,24,70,1,1,0.99662 +214,145,1053,527,24,70,1,1,1 +215,145,1052,527,24,69,1,1,1 +216,145,1051,527,24,68,1,1,1 +217,145,1050,527,25,68,1,1,0.97269 +218,145,1049,527,25,67,1,1,0.97285 +219,145,1048,527,25,66,1,1,0.94719 +220,145,1048,528,25,65,1,1,0.91958 +221,145,1048,527,24,66,1,1,0.9194 +222,145,1048,527,24,66,1,1,0.85552 +223,145,1048,527,24,67,1,1,0.79765 +224,145,1048,527,24,67,1,1,0.74235 +225,145,1048,527,24,68,1,1,0.68812 +226,145,1048,527,24,68,1,1,0.51536 +227,145,1048,527,24,68,1,1,0.59884 +228,145,1048,527,24,69,1,1,0.68343 +229,145,1048,527,24,69,1,1,0.76571 +230,145,1049,527,23,70,1,1,0.72477 +231,145,1049,526,23,70,1,1,0.69777 +232,145,1050,526,23,70,1,1,0.66667 +233,145,1051,525,23,71,1,1,0.60532 +234,145,1051,525,23,70,1,1,0.60739 +235,145,1052,525,23,70,1,1,0.6027 +236,145,1053,524,23,71,1,1,0.52257 +237,145,1053,524,23,70,1,1,0.52347 +238,145,1054,523,23,71,1,1,0.51389 +239,145,1055,523,23,71,1,1,0.48553 +240,145,1056,523,23,71,1,1,0.45833 +241,145,1058,522,23,71,1,1,0.46644 +242,145,1061,522,23,71,1,1,0.46644 +243,145,1063,522,23,71,1,1,0.46181 +244,145,1066,521,23,72,1,1,0.45091 +245,145,1068,521,24,72,1,1,0.43507 +246,145,1071,521,23,71,1,1,0.44271 +247,145,1073,520,24,72,1,1,0.44603 +248,145,1076,520,23,72,1,1,0.44692 +249,145,1078,520,24,72,1,1,0.44164 +250,145,1081,520,24,72,1,1,0.43671 +251,145,1085,520,24,72,1,1,0.41753 +252,145,1089,520,24,72,1,1,0.41699 +253,145,1093,520,24,72,1,1,0.42027 +254,145,1098,520,23,72,1,1,0.40297 +255,145,1102,520,24,72,1,1,0.38411 +256,145,1106,520,24,72,1,1,0.45205 +257,145,1111,520,23,72,1,1,0.40068 +258,145,1115,520,23,72,1,1,0.33048 +259,145,1119,520,23,72,1,1,0.24658 +307,146,1354,541,23,61,1,1,0.090726 +308,146,1358,541,24,63,1,1,0.145 +309,146,1362,541,25,66,1,1,0.19116 +310,146,1367,541,25,69,1,1,0.22143 +311,146,1371,541,26,72,1,1,0.25571 +312,146,1376,541,27,75,1,1,0.30827 +313,146,1380,542,28,73,1,1,0.30149 +314,146,1384,543,29,71,1,1,0.35972 +315,146,1389,544,30,70,1,1,0.38392 +316,146,1392,544,32,67,1,1,0.3975 +317,146,1396,544,30,72,1,1,0.41052 +318,146,1401,544,28,78,1,1,0.38717 +319,146,1404,544,28,75,1,1,0.19465 +320,146,1409,543,27,74,1,1,0.20381 +321,146,1414,542,26,73,1,1,0.20821 +322,146,1420,541,25,72,1,1,0.24341 +323,146,1422,542,27,71,1,1,0.32093 +324,146,1424,543,29,70,1,1,0.31408 +325,146,1427,545,30,68,1,1,0.30108 +326,146,1427,544,32,66,1,1,0.36364 +327,146,1433,542,28,66,1,1,0.31343 +328,146,1433,542,31,67,1,1,0.35294 +329,146,1435,541,29,71,1,1,0.36111 +330,146,1437,540,28,76,1,1,0.4026 +331,146,1438,536,28,72,1,1,0.42466 +332,146,1440,533,28,67,1,1,0.5 +333,146,1441,530,29,67,1,1,0.34314 +334,146,1442,528,30,67,1,1,0.11622 +335,146,1443,526,31,66,1,1,0.13806 +336,146,1444,524,32,66,1,1,0.15378 +337,146,1444,522,33,70,1,1,0.21002 +338,146,1444,521,35,74,1,1,0.22222 +339,146,1444,524,37,73,1,1,0.52703 +340,146,1444,525,39,72,1,1,0.50685 +341,146,1445,526,40,71,1,1,0.30556 +342,146,1451,528,35,71,1,1,0.27083 +343,146,1449,531,37,73,1,1,0.32859 +344,146,1450,535,40,76,1,1,0.57111 +345,146,1449,541,43,78,1,1,0.54661 +346,146,1450,541,46,80,1,1,0.58025 +347,146,1449,543,47,79,1,1,0.6 +348,146,1449,546,44,81,1,1,0.59756 +349,146,1454,547,40,80,1,1,0.60494 +350,146,1457,550,35,80,1,1,0.59259 +351,146,1457,549,39,80,1,1,0.62963 +352,146,1458,551,37,78,1,1,0.59694 +353,146,1458,553,39,79,1,1,0.57469 +354,146,1458,555,41,81,1,1,0.58885 +355,146,1458,557,39,81,1,1,0.63415 +356,146,1458,558,35,80,1,1,0.65432 +357,146,1459,562,35,79,1,1,0.65 +358,146,1459,564,35,79,1,1,0.65 +359,146,1458,563,35,79,1,1,0.63021 +360,146,1457,568,37,80,1,1,0.65432 +361,146,1458,569,38,80,1,1,0.63248 +362,146,1455,571,39,83,1,1,0.62768 +363,146,1455,572,38,89,1,1,0.59259 +364,146,1456,574,37,90,1,1,0.60064 +365,146,1457,576,36,91,1,1,0.6087 +366,146,1458,578,36,91,1,1,0.61957 +367,146,1458,581,40,91,1,1,0.6087 +368,146,1458,584,43,89,1,1,0.62222 +369,146,1456,585,43,90,1,1,0.6044 +370,146,1459,586,43,91,1,1,0.58696 +371,146,1460,589,43,89,1,1,0.56667 +372,146,1457,586,45,91,1,1,0.52316 +373,146,1456,584,44,92,1,1,0.54863 +374,146,1455,582,43,93,1,1,0.61702 +375,146,1455,581,42,93,1,1,0.62766 +376,146,1459,581,40,93,1,1,0.62766 +377,146,1458,580,41,93,1,1,0.6383 +378,146,1456,579,42,94,1,1,0.63158 +379,146,1453,576,43,91,1,1,0.68478 +380,146,1453,573,41,94,1,1,0.68421 +381,146,1452,571,40,94,1,1,0.70526 +382,146,1446,572,44,93,1,1,0.68085 +383,146,1443,570,44,94,1,1,0.67368 +384,146,1440,569,44,94,1,1,0.67368 +385,146,1438,568,43,95,1,1,0.67708 +386,146,1435,568,44,99,1,1,0.66 +387,146,1432,564,44,102,1,1,0.68932 +388,146,1425,565,45,103,1,1,0.68269 +389,146,1419,566,50,103,1,1,0.67308 +390,146,1415,566,50,104,1,1,0.67619 +391,146,1412,570,49,104,1,1,0.64762 +392,146,1408,567,48,109,1,1,0.65455 +393,146,1401,566,50,115,1,1,0.63793 +394,146,1394,566,50,111,1,1,0.66071 +395,146,1387,566,51,108,1,1,0.68807 +396,146,1381,566,50,111,1,1,0.67857 +397,146,1372,566,50,112,1,1,0.68142 +398,146,1364,566,52,112,1,1,0.69027 +399,146,1357,566,51,111,1,1,0.70536 +400,146,1345,566,51,111,1,1,0.69643 +401,146,1337,566,52,111,1,1,0.69643 +402,146,1329,563,52,121,1,1,0.65574 +403,146,1316,562,54,122,1,1,0.65854 +404,146,1307,562,54,122,1,1,0.65854 +405,146,1300,562,51,123,1,1,0.65323 +406,146,1288,561,51,121,1,1,0.68033 +407,146,1278,563,51,121,1,1,0.67213 +408,146,1266,563,51,118,1,1,0.68908 +409,146,1258,563,51,119,1,1,0.68333 +410,146,1241,563,51,117,1,1,0.69492 +411,146,1229,563,51,121,1,1,0.68033 +412,146,1215,563,51,120,1,1,0.68595 +413,146,1201,560,51,121,1,1,0.70492 +414,146,1186,560,51,121,1,1,0.70492 +415,146,1168,560,51,121,1,1,0.70492 +416,146,1153,560,51,121,1,1,0.70492 +417,146,1136,556,51,121,1,1,0.7459 +418,146,1129,555,42,119,1,1,0.76667 +419,146,1112,553,42,119,1,1,0.78333 +420,146,1091,552,53,124,1,1,0.76 +421,146,1074,549,52,129,1,1,0.75385 +422,146,1055,548,52,131,1,1,0.75 +423,146,1036,546,52,133,1,1,0.75373 +424,146,1017,548,52,130,1,1,0.75573 +425,146,995,548,52,131,1,1,0.75 +426,146,977,548,52,125,1,1,0.79365 +427,146,956,551,60,122,1,1,0.79675 +428,146,936,549,60,123,1,1,0.81452 +429,146,913,552,60,118,1,1,0.84874 +430,146,895,561,59,115,1,1,0.81897 +431,146,871,556,60,121,1,1,0.85246 +432,146,849,561,58,122,1,1,0.81301 +433,146,823,561,60,124,1,1,0.816 +434,146,806,566,59,115,1,1,0.85345 +435,146,776,559,60,122,1,1,0.87805 +436,146,762,559,50,120,1,1,0.90909 +437,146,744,556,42,128,1,1,0.89147 +438,146,717,558,44,129,1,1,0.88462 +439,146,693,558,43,129,1,1,0.90769 +440,146,673,559,43,129,1,1,0.91538 +441,146,648,557,44,134,1,1,0.91111 +442,146,617,557,50,135,1,1,0.91912 +443,146,592,562,52,132,1,1,0.92481 +444,146,567,566,51,131,1,1,0.91667 +445,146,552,566,44,121,1,1,1 +446,146,522,566,44,121,1,1,1 +447,146,491,563,43,123,1,1,1 +448,146,472,551,34,138,1,1,1 +449,146,440,552,34,138,1,1,1 +450,146,409,556,43,132,1,1,1 +451,146,379,561,43,132,1,1,1 +452,146,350,563,41,132,1,1,0.99248 +455,147,258,568,43,132,1,1,0.81818 +456,147,223,568,43,132,1,1,1 +457,147,192,570,43,132,1,1,1 +458,147,160,569,43,132,1,1,1 +459,147,129,573,42,136,1,1,1 +460,147,87,570,50,140,1,1,1 +461,147,50,573,54,139,1,1,1 +462,147,13,574,54,139,1,1,1 +290,148,1232,532,30,88,1,1,0.3784 +291,148,1242,535,31,87,1,1,0.27486 +292,148,1249,534,31,89,1,1,0.27813 +293,148,1256,533,31,91,1,1,0.27819 +294,148,1263,533,31,93,1,1,0.27527 +295,148,1270,533,31,92,1,1,0.28125 +296,148,1277,534,31,91,1,1,0.28125 +297,148,1284,535,31,89,1,1,0.28125 +298,148,1291,536,31,88,1,1,0.28125 +299,148,1298,537,31,87,1,1,0.28125 +300,148,1305,538,31,85,1,1,0.3125 +301,148,1312,539,31,84,1,1,0.3125 +302,148,1319,540,31,83,1,1,0.3125 +303,148,1327,544,31,84,1,1,0.21103 +304,148,1335,548,31,85,1,1,0.09375 +305,148,1341,549,30,88,1,1,0.047843 +306,148,1348,550,29,91,1,1,0.059783 +307,148,1355,551,31,91,1,1,0.056046 +308,148,1362,552,30,92,1,1,0.058273 +309,148,1369,553,30,93,1,1,0.061771 +310,148,1376,554,29,95,1,1,0.092014 +311,148,1383,555,27,93,1,1,0.088146 +312,148,1390,556,28,95,1,1,0.077586 +313,148,1397,558,29,87,1,1,0.061742 +314,148,1406,557,29,92,1,1,0.055197 +315,148,1411,557,30,91,1,1,0.078541 +316,148,1416,558,31,89,1,1,0.083333 +317,148,1424,559,31,84,1,1,0.082353 +318,148,1428,556,31,100,1,1,0.099938 +319,148,1433,558,27,103,1,1,0.11332 +320,148,1445,559,32,92,1,1,0.087977 +321,148,1444,559,31,97,1,1,0.11958 +322,148,1453,559,30,87,1,1,0.12097 +323,148,1463,560,29,77,1,1,0.11368 +324,148,1463,558,27,77,1,1,0.18315 +325,148,1473,559,27,78,1,1,0.16863 +326,148,1479,557,24,80,1,1,0.23901 +327,148,1485,558,26,82,1,1,0.21776 +328,148,1489,558,27,86,1,1,0.21552 +329,148,1492,555,29,88,1,1,0.24981 +330,148,1496,553,30,89,1,1,0.26667 +331,148,1499,551,32,90,1,1,0.27473 +332,148,1503,549,33,91,1,1,0.27174 +333,148,1507,547,35,93,1,1,0.2766 +334,148,1511,544,35,94,1,1,0.28421 +335,148,1519,542,36,94,1,1,0.3138 +336,148,1521,540,36,93,1,1,0.30851 +337,148,1527,542,38,93,1,1,0.32379 +338,148,1531,542,38,94,1,1,0.28259 +339,148,1535,543,39,94,1,1,0.27211 +340,148,1540,541,40,93,1,1,0.29476 +341,148,1544,544,41,93,1,1,0.29939 +342,148,1549,547,41,93,1,1,0.30091 +343,148,1554,551,41,93,1,1,0.29787 +344,148,1561,554,35,94,1,1,0.30351 +345,148,1568,557,37,94,1,1,0.31717 +346,148,1571,559,39,94,1,1,0.32632 +347,148,1575,562,40,93,1,1,0.33342 +348,148,1578,565,42,93,1,1,0.34166 +349,148,1582,568,43,92,1,1,0.33407 +350,148,1586,571,45,92,1,1,0.3324 +351,148,1589,572,47,92,1,1,0.35036 +352,148,1592,574,49,92,1,1,0.36731 +353,148,1595,576,51,92,1,1,0.37945 +354,148,1609,578,42,93,1,1,0.40995 +355,148,1610,580,45,97,1,1,0.40728 +356,148,1614,581,44,103,1,1,0.23397 +357,148,1618,582,44,109,1,1,0.22727 +358,148,1622,581,43,117,1,1,0.22939 +359,148,1623,584,47,125,1,1,0.39732 +360,148,1625,588,50,133,1,1,0.42025 +361,148,1632,591,48,134,1,1,0.47377 +362,148,1639,594,46,135,1,1,0.54537 +363,148,1647,598,43,136,1,1,0.65893 +364,148,1651,605,48,137,1,1,0.74682 +365,148,1651,606,52,137,1,1,0.76689 +366,148,1656,608,51,137,1,1,0.75864 +367,148,1661,610,51,138,1,1,0.82346 +368,148,1666,612,51,138,1,1,0.84186 +369,148,1671,614,51,139,1,1,0.88008 +370,148,1677,616,50,140,1,1,0.91378 +371,148,1682,614,50,141,1,1,0.93772 +372,148,1688,613,49,142,1,1,0.94895 +373,148,1694,612,48,143,1,1,0.93793 +374,148,1700,611,47,144,1,1,0.87989 +375,148,1703,608,48,148,1,1,0.8466 +376,148,1706,606,49,150,1,1,0.81642 +377,148,1709,604,50,153,1,1,0.83117 +378,148,1711,603,54,153,1,1,0.84947 +379,148,1714,603,57,152,1,1,0.81406 +380,148,1717,603,61,152,1,1,0.78653 +381,148,1719,603,75,151,1,1,0.79501 +382,148,1723,606,76,150,1,1,0.79083 +383,148,1727,606,74,152,1,1,0.78118 +384,148,1731,606,72,154,1,1,0.77994 +385,148,1732,605,69,155,1,1,0.77198 +386,148,1733,604,67,157,1,1,0.76266 +387,148,1734,604,65,157,1,1,0.76362 +388,148,1735,603,63,159,1,1,0.75645 +389,148,1736,603,61,160,1,1,0.75306 +390,148,1735,606,64,160,1,1,0.76445 +391,148,1735,609,66,161,1,1,0.76755 +392,148,1734,610,70,163,1,1,0.78332 +393,148,1733,611,74,166,1,1,0.78443 +394,148,1733,612,77,169,1,1,0.78959 +395,148,1730,612,86,169,1,1,0.75592 +396,148,1726,612,91,169,1,1,0.71675 +397,148,1724,615,90,167,1,1,0.70055 +398,148,1721,618,89,168,1,1,0.68619 +399,148,1718,616,84,170,1,1,0.72356 +400,148,1715,615,80,172,1,1,0.76643 +401,148,1711,614,78,175,1,1,0.8153 +402,148,1708,613,74,176,1,1,0.80753 +403,148,1705,612,71,178,1,1,0.78538 +404,148,1702,611,66,180,1,1,0.77802 +405,148,1695,612,65,179,1,1,0.87879 +406,148,1689,613,64,179,1,1,0.84615 +407,148,1684,616,68,182,1,1,0.73913 +408,148,1674,617,68,187,1,1,0.75362 +409,148,1667,618,66,185,1,1,0.76119 +410,148,1657,620,69,184,1,1,0.64286 +411,148,1648,622,71,183,1,1,0.56944 +412,148,1638,622,69,182,1,1,0.55714 +413,148,1628,622,68,181,1,1,0.53623 +414,148,1614,622,71,180,1,1,0.54167 +415,148,1604,622,64,181,1,1,0.50769 +416,148,1590,622,87,182,1,1,0.54545 +417,148,1576,622,86,184,1,1,0.51724 +418,148,1563,622,84,187,1,1,0.50588 +419,148,1549,622,83,189,1,1,0.47619 +420,148,1536,623,81,191,1,1,0.45122 +421,148,1522,623,80,193,1,1,0.45679 +422,148,1509,623,78,196,1,1,0.4557 +423,148,1496,624,76,198,1,1,0.54545 +424,148,1482,624,78,201,1,1,0.6962 +425,148,1463,625,80,203,1,1,0.77778 +426,148,1444,626,82,205,1,1,0.84337 +427,148,1425,628,84,206,1,1,0.91765 +428,148,1406,632,85,206,1,1,0.97674 +429,148,1388,636,86,207,1,1,1 +430,148,1370,640,87,207,1,1,1 +431,148,1351,644,88,208,1,1,1 +432,148,1333,648,89,208,1,1,1 +433,148,1315,653,90,208,1,1,1 +434,148,1295,653,91,209,1,1,1 +435,148,1271,655,92,211,1,1,1 +436,148,1247,657,93,214,1,1,1 +437,148,1223,660,94,216,1,1,1 +438,148,1199,662,95,219,1,1,1 +439,148,1176,665,95,221,1,1,1 +440,148,1152,667,96,223,1,1,1 +441,148,1128,669,97,226,1,1,1 +442,148,1104,672,98,228,1,1,1 +443,148,1080,674,99,231,1,1,1 +444,148,1057,677,100,233,1,1,1 +445,148,1029,676,100,241,1,1,1 +446,148,1002,676,99,249,1,1,1 +447,148,973,671,98,263,1,1,1 +448,148,942,672,104,266,1,1,1 +449,148,912,674,110,268,1,1,1 +450,148,880,672,107,275,1,1,1 +451,148,853,680,104,278,1,1,1 +452,148,819,685,106,276,1,1,1 +453,148,785,691,101,276,1,1,1 +454,148,752,697,95,277,1,1,1 +455,148,715,697,90,283,1,1,1 +456,148,679,696,91,294,1,1,1 +457,148,646,696,85,309,1,1,1 +458,148,609,699,84,316,1,1,1 +459,148,564,706,89,323,1,1,1 +460,148,520,714,94,329,1,1,1 +461,148,474,727,100,332,1,1,1 +462,148,429,735,105,335,1,1,1 +463,148,384,745,119,338,1,1,0.99115 +464,148,335,756,137,330,1,1,0.98187 +465,148,284,759,151,341,1,1,0.94152 +466,148,230,758,160,354,1,1,0.90986 +467,148,174,762,167,369,1,1,0.86216 +468,148,113,763,179,377,1,1,0.84127 +469,148,49,768,188,376,1,1,0.83024 +470,148,-10,775,196,386,1,1,0.74655 +471,148,-65,784,196,386,1,1,0.51033 +472,148,-125,799,196,386,1,1,0.26262 +74,149,1604,515,23,50,1,1,0.16422 +75,149,1601,520,24,49,1,1,0.2552 +76,149,1598,519,24,49,1,1,0.4408 +77,149,1595,518,25,50,1,1,0.46908 +78,149,1592,517,25,51,1,1,0.40385 +79,149,1589,516,26,51,1,1,0.37678 +80,149,1586,515,26,52,1,1,0.34451 +81,149,1584,515,26,52,1,1,0.31307 +82,149,1581,514,25,53,1,1,0.39601 +83,149,1578,513,24,54,1,1,0.40727 +84,149,1575,513,23,54,1,1,0.49773 +85,149,1573,515,23,52,1,1,0.50943 +86,149,1569,513,21,55,1,1,0.44075 +87,149,1566,514,20,54,1,1,0.38182 +88,149,1563,515,19,54,1,1,0.27273 +89,149,1560,516,19,54,1,1,0.27273 +90,149,1557,517,18,54,1,1,0.23445 +91,149,1554,519,18,53,1,1,0.22027 +92,149,1550,520,19,53,1,1,0.21296 +93,149,1547,521,19,53,1,1,0.21296 +94,149,1544,522,19,53,1,1,0.21296 +95,149,1541,523,19,53,1,1,0.16667 +96,149,1538,524,20,54,1,1,0.50476 +97,149,1534,525,21,54,1,1,0.4843 +98,149,1531,526,21,54,1,1,0.4843 +99,149,1528,527,21,54,1,1,0.4843 +100,149,1525,528,21,54,1,1,0.44132 +101,149,1522,529,22,55,1,1,0.46506 +102,149,1517,528,23,56,1,1,0.42982 +103,149,1513,528,23,56,1,1,0.36623 +104,149,1509,528,23,56,1,1,0.36623 +105,149,1505,528,23,56,1,1,0.36623 +106,149,1501,528,23,56,1,1,0.36623 +107,149,1497,527,23,57,1,1,0.29023 +108,149,1493,527,23,57,1,1,0.19397 +109,149,1489,527,23,57,1,1,0.24569 +110,149,1485,527,23,57,1,1,0.31753 +111,149,1481,527,23,58,1,1,0.35169 +112,149,1477,527,22,58,1,1,0.36109 +113,149,1473,527,22,58,1,1,0.39867 +114,149,1470,527,21,58,1,1,0.44992 +115,149,1466,527,21,58,1,1,0.48921 +116,149,1463,527,20,58,1,1,0.55609 +117,149,1459,527,20,58,1,1,0.58838 +118,149,1455,527,20,58,1,1,0.62954 +119,149,1452,527,19,58,1,1,0.64746 +120,149,1448,527,19,58,1,1,0.69153 +121,149,1445,528,18,57,1,1,0.71688 +122,149,1440,527,18,58,1,1,0.62177 +123,149,1436,527,18,58,1,1,0.57449 +124,149,1432,527,18,58,1,1,0.61463 +125,149,1427,527,19,58,1,1,0.58814 +126,149,1423,527,19,58,1,1,0.58814 +127,149,1419,526,18,59,1,1,0.72105 +128,149,1414,526,19,59,1,1,0.78333 +129,149,1410,526,19,59,1,1,0.915 +130,149,1406,526,19,59,1,1,1 +131,149,1402,526,19,60,1,1,1 +132,149,1398,525,19,61,1,1,1 +133,149,1394,525,19,61,1,1,1 +134,149,1390,525,19,61,1,1,1 +135,149,1386,524,20,62,1,1,0.95238 +136,149,1383,524,19,62,1,1,0.7 +137,149,1379,524,19,62,1,1,0.65 +138,149,1375,523,20,63,1,1,0.57143 +139,149,1371,523,20,63,1,1,0.57143 +140,149,1367,523,20,63,1,1,0.57143 +141,149,1364,523,20,63,1,1,0.47619 +142,149,1360,523,20,63,1,1,0.42857 +143,149,1357,523,20,64,1,1,0.38095 +144,149,1353,523,20,64,1,1,0.33333 +145,149,1350,523,20,65,1,1,0.28571 +146,149,1346,524,21,65,1,1,0.22727 +147,149,1343,524,20,65,1,1,0.19048 +148,149,1339,524,21,66,1,1,0.13636 +149,149,1336,524,20,66,1,1,0.095238 +150,149,1332,524,21,67,1,1,0.045455 +284,150,1307,542,36,114,1,1,0 +285,150,1314,541,42,112,1,1,0 +286,150,1322,541,43,112,1,1,0.090909 +287,150,1330,541,39,113,1,1,0.25 +288,150,1338,541,35,114,1,1,0.27778 +289,150,1343,542,39,113,1,1,0.8 +290,150,1348,540,36,116,1,1,0.7027 +291,150,1353,540,31,115,1,1,0.53125 +292,150,1358,541,32,114,1,1,0.45455 +293,150,1363,542,33,113,1,1,0.35294 +294,150,1368,544,34,113,1,1,0.25714 +295,150,1373,546,34,113,1,1,0.14286 +296,150,1378,545,39,114,1,1,0.22565 +297,150,1383,546,40,114,1,1,0.17328 +298,150,1388,548,41,114,1,1,0.086128 +299,150,1393,549,44,117,1,1,0.086252 +300,150,1398,551,49,116,1,1,0.14974 +301,150,1403,553,47,120,1,1,0.10434 +302,150,1408,555,51,119,1,1,0.1024 +303,150,1413,557,50,118,1,1,0.062943 +304,150,1418,559,49,118,1,1,0.052101 +305,150,1424,561,47,118,1,1,0.04937 +306,150,1429,563,46,117,1,1,0.061125 +307,150,1435,565,45,117,1,1,0.068718 +308,150,1440,567,44,117,1,1,0.079849 +309,150,1446,569,42,116,1,1,0.099384 +310,150,1451,571,41,116,1,1,0.10256 +311,150,1457,573,40,116,1,1,0.094434 +367,150,1595,660,48,205,1,1,0.092233 +368,150,1597,663,54,206,1,1,0.096618 +369,150,1594,665,62,214,1,1,0.10742 +370,150,1586,667,75,219,1,1,0.15072 +371,150,1576,673,88,214,1,1,0.1515 +372,150,1563,674,101,216,1,1,0.096503 +373,150,1563,675,99,219,1,1,0.1 +374,150,1564,676,97,223,1,1,0.089286 +375,150,1565,677,95,227,1,1,0.078947 +376,150,1567,677,93,227,1,1,0.074561 +377,150,1569,678,91,227,1,1,0.13687 +378,150,1571,678,83,227,1,1,0.19549 +379,150,1564,680,84,228,1,1,0.24192 +380,150,1556,682,79,228,1,1,0.22298 +381,150,1568,682,52,227,1,1,0.285 +382,150,1560,682,57,229,1,1,0.28096 +383,150,1553,682,62,231,1,1,0.29256 +384,150,1538,682,74,233,1,1,0.21926 +385,150,1513,681,90,235,1,1,0.098529 +386,150,1514,684,90,237,1,1,0.15569 +387,150,1512,684,90,239,1,1,0.18681 +388,150,1511,687,90,241,1,1,0.25747 +389,150,1513,686,90,243,1,1,0.36012 +390,150,1498,690,101,245,1,1,0.44815 +391,150,1479,692,108,247,1,1,0.4663 +392,150,1472,694,113,249,1,1,0.57853 +393,150,1463,696,107,252,1,1,0.62319 +394,150,1455,698,100,255,1,1,0.61502 +395,150,1447,700,93,258,1,1,0.60733 +396,150,1433,700,88,260,1,1,0.537 +397,150,1420,700,82,263,1,1,0.46554 +398,150,1406,703,77,262,1,1,0.35922 +399,150,1392,703,77,266,1,1,0.30856 +400,150,1384,705,73,267,1,1,0.27088 +401,150,1376,707,69,268,1,1,0.24488 +402,150,1360,713,71,269,1,1,0.15561 +403,150,1351,716,69,270,1,1,0.17501 +404,150,1333,719,78,271,1,1,0.22487 +405,150,1314,721,87,273,1,1,0.24506 +406,150,1296,723,93,278,1,1,0.24304 +407,150,1282,720,94,283,1,1,0.27168 +408,150,1266,720,90,289,1,1,0.22266 +409,150,1245,724,86,295,1,1,0.18135 +410,150,1221,730,94,300,1,1,0.16688 +411,150,1199,731,94,305,1,1,0.16529 +412,150,1177,733,92,311,1,1,0.15647 +413,150,1155,734,59,316,1,1,0.10095 +414,150,1131,735,60,324,1,1,0.11491 +415,150,1107,737,62,331,1,1,0.13224 +416,150,1079,737,62,337,1,1,0.14117 +417,150,1059,738,62,334,1,1,0.17114 +418,150,1033,743,63,334,1,1,0.17127 +419,150,1005,745,64,333,1,1,0.17725 +420,150,974,748,65,333,1,1,0.17746 +421,150,945,752,66,332,1,1,0.1765 +422,150,915,751,67,332,1,1,0.18636 +423,150,880,756,68,331,1,1,0.19072 +424,150,846,761,69,330,1,1,0.2006 +425,150,812,766,70,329,1,1,0.20431 +426,150,772,768,71,347,1,1,0.19145 +427,150,730,773,73,355,1,1,0.18069 +428,150,689,779,78,347,1,1,0.18093 +429,150,647,783,79,357,1,1,0.19291 +430,150,610,791,76,373,1,1,0.18849 +431,150,572,798,74,348,1,1,0.20867 +432,150,528,805,78,370,1,1,0.21365 +433,150,483,812,82,402,1,1,0.20909 +434,150,438,819,86,423,1,1,0.21031 +435,150,393,827,91,403,1,1,0.22955 +436,150,342,837,90,416,1,1,0.23522 +437,150,298,847,91,416,1,1,0.26632 +438,150,247,845,91,415,1,1,0.31041 +439,150,193,853,91,440,1,1,0.30854 +440,150,136,860,99,423,1,1,0.33816 +441,150,77,868,91,414,1,1,0.40911 +442,150,18,881,108,405,1,1,0.3985 +170,151,976,519,17,61,1,1,1 +171,151,973,518,17,61,1,1,1 +172,151,972,516,17,61,1,1,0.79211 +173,151,971,515,17,61,1,1,0.84677 +174,151,969,515,20,60,1,1,0.91257 +175,151,967,516,20,60,1,1,0.89696 +176,151,965,516,21,61,1,1,0.8871 +177,151,962,520,21,61,1,1,0.98827 +178,151,961,517,21,61,1,1,0.88416 +179,151,957,513,23,65,1,1,0.7904 +180,151,952,516,27,64,1,1,0.92747 +181,151,950,516,27,64,1,1,0.91154 +182,151,953,516,27,65,1,1,0.83117 +183,151,948,515,27,65,1,1,0.65043 +184,151,946,515,27,65,1,1,0.63312 +185,151,943,515,27,65,1,1,0.58658 +186,151,941,516,27,65,1,1,0.56818 +187,151,941,517,26,65,1,1,0.55556 +188,151,941,518,25,65,1,1,0.51632 +189,151,941,519,24,65,1,1,0.41697 +190,151,942,521,23,64,1,1,0.35256 +191,151,941,521,23,64,1,1,0.34103 +192,151,940,522,23,64,1,1,0.35 +193,151,939,523,24,64,1,1,0.312 +194,151,935,522,26,65,1,1,0.27722 +195,151,934,522,27,66,1,1,0.24307 +196,151,934,522,28,67,1,1,0.23124 +197,151,935,524,22,66,1,1,0.27839 +198,151,935,524,22,66,1,1,0.22193 +199,151,934,524,22,67,1,1,0.19437 +200,151,931,526,22,68,1,1,0.22684 +207,152,932,522,22,68,1,1,0.13233 +208,152,929,526,23,68,1,1,0.11957 +209,152,928,527,23,68,1,1,0.13949 +210,152,927,530,23,68,1,1,0.14795 +211,152,926,532,23,68,1,1,0.15217 +212,152,927,532,23,69,1,1,0.19286 +213,152,929,533,23,69,1,1,0.25714 +214,152,929,536,23,70,1,1,0.29754 +215,152,928,535,23,71,1,1,0.26389 +216,152,925,533,23,72,1,1,0.18493 +217,152,925,531,23,72,1,1,0.15068 +218,152,928,531,23,72,1,1,0.20091 +219,152,925,531,23,72,1,1,0.14612 +220,152,926,530,23,72,1,1,0.13699 +221,152,927,528,23,72,1,1,0.14384 +222,152,930,528,23,72,1,1,0.16952 +223,152,930,531,23,72,1,1,0.18836 +224,152,931,530,23,72,1,1,0.19178 +225,152,931,530,23,73,1,1,0.16273 +226,152,933,530,23,74,1,1,0.087222 +227,152,933,529,27,73,1,1,0.061776 +228,152,931,529,27,73,1,1,0.069015 +229,152,933,533,27,73,1,1,0.056467 +230,152,935,533,27,74,1,1,0.046667 +231,152,936,533,27,75,1,1,0.036654 +300,153,1373,539,29,89,1,1,0.044444 +301,153,1380,537,25,90,1,1,0.098901 +302,153,1386,538,28,95,1,1,0.10417 +303,153,1394,541,28,82,1,1,0.12796 +304,153,1401,544,29,86,1,1,0.12644 +305,153,1407,546,28,86,1,1,0.19976 +306,153,1413,550,29,90,1,1,0.25311 +307,153,1411,551,32,93,1,1,0.31657 +308,153,1418,551,36,98,1,1,0.35081 +309,153,1426,552,29,95,1,1,0.47222 +310,153,1434,554,34,102,1,1,0.43024 +311,153,1443,553,28,102,1,1,0.46602 +312,153,1448,553,25,101,1,1,0.51131 +313,153,1453,553,25,109,1,1,0.5014 +314,153,1459,554,25,106,1,1,0.49533 +315,153,1465,555,25,101,1,1,0.53884 +316,153,1471,556,28,102,1,1,0.49414 +317,153,1477,557,29,102,1,1,0.44466 +318,153,1483,555,28,102,1,1,0.43555 +319,153,1489,559,29,103,1,1,0.48846 +320,153,1493,555,25,106,1,1,0.57728 +321,153,1499,556,26,102,1,1,0.53398 +322,153,1504,556,25,99,1,1,0.58 +323,153,1509,557,26,91,1,1,0.56522 +324,153,1514,558,27,84,1,1,0.5563 +325,153,1519,559,28,77,1,1,0.50663 +326,153,1524,557,28,79,1,1,0.3625 +327,153,1530,556,28,80,1,1,0.24691 +328,153,1536,555,28,81,1,1,0.18377 +329,153,1542,554,28,82,1,1,0.17366 +330,153,1548,553,28,84,1,1,0.15416 +331,153,1552,548,28,87,1,1,0.17124 +332,153,1557,546,29,88,1,1,0.17079 +333,153,1562,545,30,88,1,1,0.17398 +334,153,1567,543,31,89,1,1,0.17361 +335,153,1572,542,32,89,1,1,0.16835 +336,153,1578,541,33,89,1,1,0.17255 +337,153,1584,544,34,88,1,1,0.11814 +338,153,1590,537,33,89,1,1,0.21797 +339,153,1595,538,31,88,1,1,0.24228 +340,153,1600,539,30,87,1,1,0.15836 +341,153,1606,541,28,86,1,1,0.19461 +342,153,1608,545,30,87,1,1,0.14296 +343,153,1610,549,33,89,1,1,0.21046 +344,153,1613,553,34,90,1,1,0.18838 +345,153,1615,557,37,92,1,1,0.16808 +346,153,1617,561,39,93,1,1,0.17021 +347,153,1620,566,41,94,1,1,0.1609 +348,153,1623,566,40,94,1,1,0.14326 +349,153,1626,566,41,96,1,1,0.1458 +350,153,1633,569,41,97,1,1,0.19291 +351,153,1639,570,42,98,1,1,0.23209 +352,153,1642,572,43,104,1,1,0.20108 +353,153,1646,574,44,110,1,1,0.18238 +354,153,1650,576,44,116,1,1,0.13561 +355,153,1654,578,45,122,1,1,0.11877 +356,153,1660,581,40,122,1,1,0.11124 +357,153,1668,584,40,121,1,1,0.07557 +358,153,1670,586,43,121,1,1,0.095007 +359,153,1673,589,45,121,1,1,0.10264 +360,153,1680,592,41,118,1,1,0.10204 +361,153,1688,595,41,117,1,1,0.069209 +362,153,1687,597,48,118,1,1,0.12965 +363,153,1696,599,52,114,1,1,0.056604 +364,153,1700,601,52,117,1,1,0.1567 +365,153,1704,603,49,125,1,1,0.12889 +366,153,1708,605,49,130,1,1,0.14901 +367,153,1712,607,52,130,1,1,0.14792 +368,153,1717,609,54,126,1,1,0.17079 +369,153,1722,611,49,133,1,1,0.18313 +370,153,1729,613,47,132,1,1,0.19173 +371,153,1737,615,45,131,1,1,0.16798 +372,153,1740,613,47,132,1,1,0.19627 +373,153,1743,611,49,133,1,1,0.22269 +374,153,1746,609,49,137,1,1,0.21551 +375,153,1750,608,52,138,1,1,0.22519 +376,153,1754,607,56,137,1,1,0.27028 +377,153,1757,605,53,138,1,1,0.29803 +378,153,1761,604,49,138,1,1,0.30835 +379,153,1765,603,49,138,1,1,0.33223 +380,153,1769,602,50,138,1,1,0.35125 +381,153,1773,601,53,138,1,1,0.11697 +382,153,1774,601,53,140,1,1,0.091148 +383,153,1775,601,54,142,1,1,0.10807 +384,153,1776,601,55,144,1,1,0.10653 +385,153,1777,601,56,146,1,1,0.18737 +386,153,1778,601,57,148,1,1,0.24936 +387,153,1779,601,58,150,1,1,0.29521 +388,153,1780,601,59,152,1,1,0.35414 +389,153,1781,601,60,154,1,1,0.41343 +390,153,1782,601,61,156,1,1,0.4286 +391,153,1784,602,61,158,1,1,0.35149 +392,153,1783,602,61,158,1,1,0.27592 +393,153,1782,603,61,158,1,1,0.18239 +394,153,1781,604,61,157,1,1,0.10514 +395,153,1780,605,61,157,1,1,0.022866 +396,153,1779,606,62,157,1,1,0.01748 +397,153,1774,606,60,158,1,1,0.027838 +398,153,1773,607,70,157,1,1,0.026475 +399,153,1772,608,65,157,1,1,0.018412 +400,153,1771,609,70,158,1,1,0.067499 +401,153,1770,610,76,162,1,1,0.23982 +402,153,1762,611,86,161,1,1,0.33589 +403,153,1754,612,90,165,1,1,0.36264 +404,153,1747,614,88,166,1,1,0.35955 +405,153,1739,616,88,160,1,1,0.35955 +406,153,1732,618,88,154,1,1,0.38202 +407,153,1725,612,85,163,1,1,0.37493 +408,153,1717,612,83,163,1,1,0.36041 +409,153,1710,613,80,162,1,1,0.34871 +410,153,1705,609,73,165,1,1,0.43243 +411,153,1706,613,60,162,1,1,0.55738 +412,153,1695,612,61,164,1,1,0.6129 +413,153,1684,612,62,166,1,1,0.66667 +414,153,1673,612,63,167,1,1,0.71875 +415,153,1662,612,65,169,1,1,0.78788 +416,153,1649,611,67,170,1,1,0.58867 +417,153,1637,611,69,170,1,1,0.64236 +418,153,1625,610,71,172,1,1,0.69501 +419,153,1613,610,73,172,1,1,0.74285 +420,153,1601,609,75,173,1,1,0.79008 +421,153,1589,609,77,174,1,1,0.83487 +422,153,1570,609,76,175,1,1,0.78483 +423,153,1552,609,74,176,1,1,0.74373 +424,153,1534,609,73,177,1,1,0.66588 +425,153,1516,609,74,179,1,1,0.65985 +426,153,1498,609,75,181,1,1,0.65406 +427,153,1480,610,77,182,1,1,0.65322 +428,153,1462,610,80,183,1,1,0.67391 +429,153,1444,611,84,184,1,1,0.68458 +430,153,1426,614,85,186,1,1,0.67964 +431,153,1414,619,84,185,1,1,0.73523 +432,153,1398,621,93,186,1,1,0.77244 +433,153,1376,624,101,185,1,1,0.75174 +434,153,1357,627,105,186,1,1,0.75633 +435,153,1338,630,104,187,1,1,0.78531 +436,153,1318,630,104,190,1,1,0.81192 +437,153,1299,633,101,190,1,1,0.84006 +438,153,1275,633,101,194,1,1,0.83308 +439,153,1256,631,97,197,1,1,0.86477 +440,153,1237,633,93,198,1,1,0.89415 +441,153,1218,635,88,197,1,1,0.92555 +442,153,1195,635,87,199,1,1,0.92591 +443,153,1172,636,86,200,1,1,0.92543 +444,153,1150,637,85,202,1,1,0.92531 +445,153,1127,638,85,205,1,1,0.97155 +446,153,1105,639,85,208,1,1,1 +447,153,1083,640,85,211,1,1,1 +448,153,1061,641,85,214,1,1,1 +449,153,1037,642,85,213,1,1,1 +450,153,1013,643,86,213,1,1,1 +451,153,987,645,85,214,1,1,1 +452,153,963,649,85,212,1,1,1 +453,153,936,649,85,216,1,1,1 +454,153,909,650,85,219,1,1,1 +455,153,883,651,84,222,1,1,1 +456,153,854,653,88,221,1,1,1 +457,153,826,655,89,226,1,1,1 +458,153,795,657,92,226,1,1,1 +459,153,762,660,92,230,1,1,1 +460,153,730,662,96,234,1,1,1 +461,153,696,666,97,238,1,1,1 +462,153,661,670,105,238,1,1,1 +463,153,626,673,116,238,1,1,1 +464,153,592,678,121,238,1,1,1 +465,153,558,683,128,238,1,1,1 +466,153,507,685,138,245,1,1,1 +467,153,473,690,133,246,1,1,1 +468,153,439,693,128,250,1,1,1 +469,153,396,694,132,254,1,1,1 +470,153,359,697,125,258,1,1,1 +471,153,324,696,124,262,1,1,1 +472,153,277,696,129,265,1,1,1 +473,153,237,696,127,270,1,1,1 +474,153,197,697,126,274,1,1,1 +475,153,157,698,125,278,1,1,1 +476,153,115,698,123,284,1,1,1 +477,153,74,699,120,290,1,1,1 +478,153,24,706,120,302,1,1,1 +479,153,-26,714,121,314,1,1,0.77869 +356,154,1645,565,37,127,1,1,0.2354 +357,154,1648,568,38,128,1,1,0.30888 +358,154,1651,569,39,129,1,1,0.13577 +359,154,1655,571,39,129,1,1,0.10692 +360,154,1658,573,39,130,1,1,0.14122 +361,154,1661,576,39,130,1,1,0.19752 +362,154,1664,578,39,131,1,1,0.13087 +363,154,1667,581,40,132,1,1,0.17898 +364,154,1669,584,41,130,1,1,0.15231 +365,154,1671,588,42,128,1,1,0.13413 +366,154,1673,592,43,126,1,1,0.12115 +367,154,1676,596,44,124,1,1,0.1072 +368,154,1681,597,45,125,1,1,0.11387 +369,154,1686,598,47,126,1,1,0.12008 +370,154,1687,598,48,127,1,1,0.14764 +371,154,1688,598,50,129,1,1,0.16501 +372,154,1689,598,52,130,1,1,0.13467 +373,154,1691,599,53,131,1,1,0.14829 +374,154,1704,601,42,132,1,1,0.074838 +375,154,1706,599,44,134,1,1,0.066667 +376,154,1709,597,46,136,1,1,0.065693 +377,154,1711,595,48,138,1,1,0.064748 +378,154,1714,594,50,140,1,1,0.06383 +379,154,1718,589,52,142,1,1,0.097902 +380,154,1719,588,53,144,1,1,0.10294 +381,154,1720,587,55,146,1,1,0.10811 +382,154,1721,586,57,148,1,1,0.16119 +383,154,1723,586,58,150,1,1,0.18734 +384,154,1725,586,58,151,1,1,0.21543 +385,154,1727,586,58,153,1,1,0.1937 +386,154,1730,586,57,154,1,1,0.15851 +387,154,1732,586,57,156,1,1,0.14156 +388,154,1735,587,56,157,1,1,0.098601 +389,154,1737,586,56,158,1,1,0.10405 +390,154,1739,585,57,159,1,1,0.12317 +391,154,1738,589,58,160,1,1,0.11464 +392,154,1738,590,58,161,1,1,0.11174 +393,154,1738,591,59,162,1,1,0.10961 +394,154,1735,592,59,162,1,1,0.11125 +395,154,1732,592,59,162,1,1,0.11411 +396,154,1729,593,59,162,1,1,0.11043 +397,154,1726,593,59,162,1,1,0.12393 +398,154,1723,593,59,162,1,1,0.14213 +399,154,1718,593,59,162,1,1,0.1362 +400,154,1713,593,59,162,1,1,0.15092 +401,154,1709,594,59,162,1,1,0.13988 +402,154,1705,592,59,162,1,1,0.15429 +403,154,1701,591,59,162,1,1,0.1636 +404,154,1692,591,60,162,1,1,0.20919 +405,154,1684,591,60,163,1,1,0.28529 +406,154,1676,591,60,164,1,1,0.31803 +407,154,1668,591,60,165,1,1,0.37182 +408,154,1660,592,60,165,1,1,0.34357 +409,154,1651,592,61,165,1,1,0.37281 +410,154,1643,592,61,166,1,1,0.3475 +411,154,1635,592,61,167,1,1,0.32776 +412,154,1627,592,61,168,1,1,0.28908 +413,154,1619,593,62,168,1,1,0.24364 +414,154,1606,592,62,168,1,1,0.23687 +415,154,1594,592,62,168,1,1,0.25171 +416,154,1582,592,62,168,1,1,0.21715 +417,154,1570,592,62,168,1,1,0.17977 +418,154,1558,592,62,168,1,1,0.15826 +419,154,1546,592,62,168,1,1,0.12088 +420,154,1534,592,62,168,1,1,0.10162 +421,154,1522,592,62,168,1,1,0.055321 +422,154,1510,592,62,168,1,1,0.054288 +423,154,1498,592,62,168,1,1,0.077487 +424,154,1479,593,62,169,1,1,0.092997 +425,154,1460,595,63,170,1,1,0.10618 +426,154,1442,597,62,171,1,1,0.11748 +427,154,1423,599,63,172,1,1,0.13268 +428,154,1405,601,63,173,1,1,0.15598 +429,154,1386,603,63,173,1,1,0.20151 +430,154,1367,605,64,174,1,1,0.22321 +431,154,1349,607,63,175,1,1,0.23491 +432,154,1330,609,64,176,1,1,0.25632 +433,154,1312,611,64,177,1,1,0.26871 +434,154,1291,611,64,178,1,1,0.28174 +435,154,1271,612,64,179,1,1,0.23889 +436,154,1250,612,64,181,1,1,0.24725 +437,154,1230,613,64,182,1,1,0.25683 +438,154,1210,613,63,184,1,1,0.26486 +439,154,1189,614,64,185,1,1,0.27419 +440,154,1169,614,63,187,1,1,0.28191 +441,154,1148,615,64,188,1,1,0.28571 +442,154,1128,615,63,190,1,1,0.29843 +443,154,1108,616,63,191,1,1,0.30208 +444,154,1084,616,67,195,1,1,0.30522 +445,154,1060,617,71,198,1,1,0.28322 +446,154,1036,617,75,202,1,1,0.30185 +447,154,1012,618,79,205,1,1,0.34248 +448,154,989,618,82,209,1,1,0.36288 +449,154,965,619,86,212,1,1,0.35168 +450,154,941,619,90,216,1,1,0.42396 +451,154,917,620,94,219,1,1,0.45287 +452,154,893,620,98,223,1,1,0.50839 +453,154,870,621,102,227,1,1,0.57052 +454,154,839,624,100,228,1,1,0.66721 +455,154,808,628,99,229,1,1,0.775 +456,154,777,631,98,231,1,1,0.79885 +457,154,746,635,97,232,1,1,0.83209 +458,154,715,638,96,234,1,1,0.83891 +459,154,684,642,95,235,1,1,0.8268 +460,154,653,645,94,237,1,1,0.82406 +461,154,622,649,93,238,1,1,0.80237 +462,154,591,652,92,240,1,1,0.77116 +463,154,560,656,91,241,1,1,0.73724 +464,154,520,657,93,244,1,1,0.78602 +465,154,481,659,95,247,1,1,0.82124 +466,154,442,660,97,251,1,1,0.69667 +467,154,402,662,100,254,1,1,0.73559 +468,154,363,664,102,257,1,1,0.76733 +469,154,324,665,104,261,1,1,0.7205 +470,154,284,667,107,264,1,1,0.72904 +471,154,245,668,109,268,1,1,0.74752 +472,154,206,670,111,271,1,1,0.66892 +473,154,167,672,113,274,1,1,0.64772 +474,154,122,677,109,276,1,1,0.70479 +475,154,77,682,105,278,1,1,0.76878 +476,154,32,687,102,280,1,1,0.81343 +477,154,-23,696,120,272,1,1,0.60549 +127,155,1169,524,18,46,1,1,0.40985 +128,155,1164,524,18,46,1,1,0.51288 +129,155,1160,524,18,46,1,1,0.51288 +130,155,1155,524,19,46,1,1,0.53723 +131,155,1151,524,18,46,1,1,0.62374 +132,155,1147,524,18,47,1,1,0.6239 +133,155,1142,524,19,47,1,1,0.69167 +134,155,1138,524,18,47,1,1,0.72807 +135,155,1133,524,19,47,1,1,0.79063 +136,155,1129,524,19,47,1,1,0.79063 +137,155,1125,524,19,48,1,1,0.8398 +138,155,1121,523,19,48,1,1,0.82959 +139,155,1117,523,19,48,1,1,0.87755 +140,155,1113,523,19,48,1,1,0.87755 +141,155,1110,522,18,49,1,1,0.90947 +142,155,1106,522,19,49,1,1,0.864 +143,155,1102,522,19,48,1,1,0.89694 +144,155,1099,521,18,49,1,1,0.87895 +145,155,1095,521,18,49,1,1,0.92632 +146,155,1091,521,18,49,1,1,0.92632 +147,155,1088,521,18,49,1,1,0.92105 +148,155,1083,521,18,49,1,1,0.91158 +149,155,1078,521,18,49,1,1,0.91789 +150,155,1073,521,18,49,1,1,0.92421 +151,155,1068,521,19,50,1,1,0.92941 +152,155,1063,521,19,50,1,1,0.93529 +153,155,1058,521,19,50,1,1,0.93137 +154,155,1054,522,19,50,1,1,0.94118 +155,155,1050,521,19,50,1,1,0.93137 +156,155,1045,523,19,51,1,1,0.95673 +157,155,1036,523,23,50,1,1,0.87745 +158,155,1032,523,22,49,1,1,0.87652 +159,155,1028,523,22,49,1,1,0.92 +160,155,1024,523,22,49,1,1,0.92 +161,155,1020,523,23,49,1,1,0.835 +162,155,1017,523,22,49,1,1,0.82087 +163,155,1013,523,23,50,1,1,0.82353 +164,155,1009,523,23,50,1,1,0.78186 +165,155,1006,523,22,50,1,1,0.81586 +166,155,1002,523,23,50,1,1,0.77614 +167,155,998,523,23,50,1,1,0.76797 +168,155,995,523,23,51,1,1,0.92949 +169,155,989,522,23,51,1,1,0.9351 +170,155,983,522,23,51,1,1,0.49119 +171,155,980,522,23,51,1,1,0.48558 +263,156,1028,524,30,77,1,1,0.35484 +264,156,1032,525,31,76,1,1,0.5625 +265,156,1036,526,32,76,1,1,0.75758 +266,156,1040,528,33,75,1,1,0.91176 +267,156,1049,529,33,75,1,1,0.97059 +268,156,1049,529,37,77,1,1,1 +269,156,1055,530,37,77,1,1,1 +270,156,1060,529,37,77,1,1,1 +271,156,1065,529,37,76,1,1,1 +272,156,1071,529,37,75,1,1,0.87361 +273,156,1075,528,37,76,1,1,0.90021 +274,156,1080,527,36,77,1,1,0.9501 +275,156,1085,527,36,77,1,1,0.94941 +276,156,1090,527,36,77,1,1,0.94941 +277,156,1095,528,36,77,1,1,0.94802 +278,156,1100,528,36,77,1,1,0.94802 +279,156,1105,528,36,77,1,1,0.94733 +280,156,1110,529,37,77,1,1,0.92206 +281,156,1115,529,38,77,1,1,0.89875 +282,156,1121,529,38,77,1,1,0.87344 +283,156,1127,529,38,77,1,1,0.84813 +284,156,1133,529,38,77,1,1,0.80605 +285,156,1137,528,38,76,1,1,0.73393 +286,156,1142,527,38,76,1,1,0.65634 +287,156,1147,527,37,75,1,1,0.60976 +288,156,1152,526,37,75,1,1,0.53566 +289,156,1157,525,36,75,1,1,0.47866 +290,156,1162,525,36,74,1,1,0.4018 +291,156,1167,525,35,72,1,1,0.39041 +292,156,1172,526,35,70,1,1,0.40023 +293,156,1177,527,35,68,1,1,0.39855 +294,156,1182,528,35,66,1,1,0.41045 +295,156,1186,527,36,70,1,1,0.41416 +296,156,1191,526,36,74,1,1,0.41766 +297,156,1196,526,36,77,1,1,0.4359 +298,156,1201,527,39,73,1,1,0.39459 +299,156,1206,527,39,77,1,1,0.44872 +300,156,1211,529,41,70,1,1,0.39302 +301,156,1216,532,44,63,1,1,0.37778 +302,156,1221,532,42,64,1,1,0.42004 +303,156,1226,532,40,65,1,1,0.46009 +304,156,1231,535,37,68,1,1,0.46949 +305,156,1236,538,35,66,1,1,0.47927 +306,156,1241,542,34,64,1,1,0.47824 +307,156,1246,543,32,63,1,1,0.51562 +308,156,1251,544,31,62,1,1,0.53968 +309,156,1256,545,31,62,1,1,0.52381 +310,156,1261,547,31,61,1,1,0.51613 +311,156,1259,547,36,62,1,1,0.52381 +312,156,1267,547,33,61,1,1,0.54839 +313,156,1269,548,34,64,1,1,0.52308 +314,156,1272,548,34,63,1,1,0.53125 +315,156,1276,548,34,62,1,1,0.55556 +316,156,1280,547,35,62,1,1,0.57143 +317,156,1285,546,35,63,1,1,0.59375 +318,156,1291,545,35,64,1,1,0.6 +319,156,1291,545,39,70,1,1,0.56338 +320,156,1296,545,41,71,1,1,0.55556 +321,156,1295,545,42,74,1,1,0.54667 +322,156,1304,546,42,71,1,1,0.54167 +323,156,1307,543,42,75,1,1,0.53947 +324,156,1311,541,42,75,1,1,0.55263 +325,156,1313,540,42,76,1,1,0.54545 +326,156,1316,540,42,76,1,1,0.53247 +327,156,1319,540,41,78,1,1,0.50633 +328,156,1323,540,43,77,1,1,0.5 +329,156,1326,539,43,75,1,1,0.51316 +330,156,1329,539,43,75,1,1,0.5 +331,156,1331,537,43,75,1,1,0.51077 +332,156,1333,534,43,78,1,1,0.50058 +333,156,1335,531,44,74,1,1,0.54222 +334,156,1337,527,44,75,1,1,0.55965 +335,156,1340,525,44,76,1,1,0.55411 +336,156,1343,524,44,77,1,1,0.4698 +337,156,1342,523,44,77,1,1,0.55185 +338,156,1342,522,44,78,1,1,0.60394 +339,156,1344,521,44,79,1,1,0.62778 +340,156,1346,521,44,80,1,1,0.64911 +341,156,1347,522,46,81,1,1,0.64971 +342,156,1349,524,47,81,1,1,0.64456 +343,156,1350,526,46,82,1,1,0.67598 +344,156,1351,529,46,83,1,1,0.67503 +345,156,1352,531,46,85,1,1,0.74666 +346,156,1353,534,46,85,1,1,0.72291 +347,156,1354,537,46,86,1,1,0.66324 +348,156,1356,539,45,88,1,1,0.64314 +349,156,1357,542,45,89,1,1,0.6413 +350,156,1358,545,45,89,1,1,0.62101 +351,156,1359,547,45,91,1,1,0.59972 +352,156,1360,550,45,92,1,1,0.56989 +353,156,1362,553,44,93,1,1,0.55272 +354,156,1362,554,45,94,1,1,0.56247 +355,156,1363,556,45,94,1,1,0.55286 +356,156,1364,557,45,96,1,1,0.5437 +357,156,1365,559,45,96,1,1,0.53608 +358,156,1366,561,46,97,1,1,0.52432 +359,156,1366,562,47,98,1,1,0.52083 +360,156,1367,564,47,98,1,1,0.55682 +361,156,1368,565,47,100,1,1,0.55507 +362,156,1369,567,47,100,1,1,0.56848 +363,156,1370,569,48,101,1,1,0.56283 +364,156,1370,570,48,101,1,1,0.59464 +365,156,1371,571,48,102,1,1,0.60769 +366,156,1372,572,48,103,1,1,0.62539 +367,156,1372,574,49,103,1,1,0.62577 +368,156,1373,575,49,104,1,1,0.63448 +369,156,1374,576,48,104,1,1,0.64101 +370,156,1374,578,49,104,1,1,0.62743 +371,156,1375,579,49,105,1,1,0.62264 +372,156,1376,580,49,106,1,1,0.61383 +373,156,1377,582,49,106,1,1,0.59813 +374,156,1375,580,49,106,1,1,0.63738 +375,156,1374,578,49,106,1,1,0.69047 +376,156,1373,577,49,106,1,1,0.68692 +377,156,1371,575,49,106,1,1,0.66729 +378,156,1370,574,49,106,1,1,0.64748 +379,156,1369,572,49,106,1,1,0.63832 +380,156,1367,570,49,106,1,1,0.61981 +381,156,1366,569,49,106,1,1,0.60336 +382,156,1365,567,49,106,1,1,0.60187 +383,156,1364,566,49,106,1,1,0.63215 +384,156,1360,565,49,106,1,1,0.65533 +385,156,1356,565,49,106,1,1,0.68822 +386,156,1352,564,49,106,1,1,0.71215 +387,156,1349,564,49,106,1,1,0.65963 +388,156,1345,564,49,106,1,1,0.63121 +389,156,1341,563,49,106,1,1,0.61533 +390,156,1338,563,49,106,1,1,0.56037 +391,156,1334,562,49,106,1,1,0.5286 +392,156,1330,562,49,106,1,1,0.4871 +393,156,1327,562,49,106,1,1,0.43215 +394,156,1320,561,49,106,1,1,0.45607 +395,156,1313,561,49,106,1,1,0.47421 +396,156,1306,561,49,106,1,1,0.49234 +397,156,1300,560,49,106,1,1,0.41981 +398,156,1293,560,49,106,1,1,0.3772 +399,156,1286,560,49,106,1,1,0.34056 +400,156,1280,559,49,106,1,1,0.28561 +401,156,1273,559,49,106,1,1,0.24131 +402,156,1266,559,49,106,1,1,0.2043 +403,156,1260,559,49,106,1,1,0.1172 +404,156,1247,558,49,106,1,1,0.14879 +405,156,1235,558,49,106,1,1,0.16729 +406,156,1223,557,49,106,1,1,0.21234 +407,156,1211,557,49,106,1,1,0.18579 +408,156,1199,557,49,106,1,1,0.16729 +409,156,1187,556,49,106,1,1,0.15738 +410,156,1175,556,49,106,1,1,0.13907 +411,156,1163,555,49,106,1,1,0.14486 +412,156,1151,555,49,106,1,1,0.14187 +413,156,1139,555,49,106,1,1,0.16785 +414,156,1123,553,49,107,1,1,0.17667 +415,156,1108,551,49,109,1,1,0.19909 +416,156,1093,550,49,109,1,1,0.216 +417,156,1078,548,49,111,1,1,0.22393 +418,156,1063,547,49,111,1,1,0.23393 +419,156,1048,545,48,113,1,1,0.24311 +420,156,1033,543,48,114,1,1,0.26761 +421,156,1018,542,48,115,1,1,0.28343 +422,156,1003,540,48,116,1,1,0.29147 +423,156,988,539,48,117,1,1,0.36648 +424,156,968,540,48,117,1,1,0.38672 +425,156,948,541,48,117,1,1,0.35559 +426,156,928,542,48,117,1,1,0.37945 +427,156,908,543,48,117,1,1,0.38481 +428,156,889,545,48,117,1,1,0.40194 +429,156,869,546,48,117,1,1,0.36648 +430,156,849,547,48,117,1,1,0.43826 +431,156,829,548,48,117,1,1,0.39952 +432,156,809,549,48,117,1,1,0.37842 +433,156,790,551,48,117,1,1,0.31097 +434,156,767,551,48,117,1,1,0.43532 +435,156,745,551,48,117,1,1,0.29747 +436,156,722,551,48,117,1,1,0.45832 +437,156,700,551,48,117,1,1,0.54946 +438,156,678,552,48,117,1,1,0.47112 +439,156,655,552,48,117,1,1,0.43756 +440,156,633,552,48,117,1,1,0.51591 +441,156,610,552,48,117,1,1,0.49395 +442,156,588,552,48,117,1,1,0.33795 +443,156,566,553,48,117,1,1,0.36095 +444,156,539,553,48,117,1,1,0.38136 +445,156,515,557,48,117,1,1,0.5467 +446,156,493,557,49,117,1,1,0.44254 +447,156,467,559,49,117,1,1,0.31966 +448,156,441,556,49,117,1,1,0.44373 +449,156,422,556,49,117,1,1,0.34237 +450,156,395,557,49,117,1,1,0.28 +451,156,366,557,49,117,1,1,0.28508 +452,156,322,550,48,123,1,1,0.33723 +453,156,294,552,48,123,1,1,0.76893 +453,157,504,560,44,147,1,1,0.17432 +454,157,471,561,45,150,1,1,0.051828 +455,157,438,562,46,153,1,1,0.055955 +456,157,406,564,47,155,1,1,0.053686 +457,157,373,565,48,159,1,1,0.057526 +458,157,340,566,49,162,1,1,0.061595 +459,157,308,568,50,164,1,1,0.059655 +460,157,275,569,51,167,1,1,0.059066 +461,157,243,571,52,170,1,1,0.46044 +462,157,211,573,50,165,1,1,0.055752 +463,157,180,575,56,165,1,1,0.055696 +464,157,146,577,57,174,1,1,0.58867 +465,157,100,578,69,171,1,1,0.52326 +466,157,66,576,72,174,1,1,0.61487 +467,157,31,576,69,174,1,1,0.068571 +468,157,-4,576,69,174,1,1,0.32024 +452,158,448,571,44,157,1,1,0.10464 +453,158,423,570,44,158,1,1,0.426 +454,158,395,571,44,157,1,1,0.48608 +455,158,368,572,41,158,1,1,0.5602 +456,158,338,574,41,162,1,1,0.56529 +457,158,307,576,45,162,1,1,0.55055 +458,158,276,578,49,162,1,1,0.5465 +459,158,241,580,56,162,1,1,0.50102 +460,158,206,582,63,162,1,1,0.5047 +461,158,172,584,69,163,1,1,0.47735 +462,158,134,587,70,162,1,1,0.52761 +463,158,100,589,70,162,1,1,0.55362 +464,158,61,589,73,170,1,1,0.60139 +465,158,23,589,77,170,1,1,0.5063 +466,158,-12,588,76,169,1,1,0.31169 +31,159,1473,522,22,51,1,1,0.020903 +32,159,1473,520,25,51,1,1,0.064349 +33,159,1474,508,24,51,1,1,0.11154 +34,159,1476,506,23,51,1,1,0.45192 +35,159,1478,504,23,51,1,1,0.38462 +36,159,1479,501,22,51,1,1,0.50669 +37,159,1479,500,22,51,1,1,0.60368 +38,159,1480,499,21,51,1,1,0.73601 +39,159,1483,502,21,51,1,1,0.76399 +40,159,1482,498,20,51,1,1,0.89011 +41,159,1483,499,20,52,1,1,0.91105 +42,159,1485,501,19,52,1,1,0.93774 +43,159,1486,506,18,47,1,1,0.98026 +44,159,1486,504,19,52,1,1,1 +45,159,1487,508,19,52,1,1,1 +46,159,1489,505,19,52,1,1,0.6 +47,159,1488,507,19,52,1,1,0.45 +48,159,1487,509,19,52,1,1,0.4 +49,159,1487,512,19,52,1,1,0.35 +50,159,1487,510,19,52,1,1,0.3 +51,159,1487,510,19,52,1,1,0.2 +52,159,1487,510,19,52,1,1,0.2 +53,159,1487,511,19,52,1,1,0.35 +54,159,1487,511,19,52,1,1,0.4 +55,159,1487,511,19,52,1,1,0.45 +56,159,1488,512,19,52,1,1,0.45 +57,159,1488,510,19,52,1,1,0.55 +58,159,1488,508,19,52,1,1,0.55 +59,159,1488,506,19,52,1,1,0.6 +60,159,1488,504,19,52,1,1,0.65 +61,159,1488,502,19,52,1,1,0.75 +62,159,1489,507,19,52,1,1,1 +63,159,1488,493,19,52,1,1,1 +64,159,1488,503,19,52,1,1,1 +65,159,1487,500,19,52,1,1,1 +66,159,1486,497,19,52,1,1,1 +67,159,1486,508,22,51,1,1,1 +68,159,1484,502,23,51,1,1,1 +69,159,1484,510,19,52,1,1,0.85 +70,159,1482,506,19,52,1,1,0.65 +71,159,1479,510,19,52,1,1,0.5 +72,159,1479,507,19,52,1,1,0.71981 +97,160,1395,522,19,52,1,1,0.15 +98,160,1390,521,18,54,1,1,0.26699 +99,160,1385,521,18,56,1,1,0.53832 +100,160,1382,520,19,54,1,1,0.35727 +101,160,1376,522,20,52,1,1,0.38095 +102,160,1372,520,20,52,1,1,0.43935 +103,160,1368,518,21,52,1,1,0.50858 +104,160,1364,519,21,52,1,1,0.52744 +105,160,1360,518,21,52,1,1,0.5446 +106,160,1356,518,21,52,1,1,0.60549 +107,160,1352,518,21,52,1,1,0.57633 +108,160,1348,517,22,52,1,1,0.55373 +109,160,1344,517,22,52,1,1,0.47006 +110,160,1340,517,22,52,1,1,0.56932 +111,160,1337,517,22,52,1,1,0.49713 +112,160,1332,517,22,52,1,1,0.43888 +113,160,1327,517,22,52,1,1,0.39869 +114,160,1322,517,22,52,1,1,0.35603 +115,160,1317,517,22,52,1,1,0.24364 +116,160,1312,517,23,52,1,1,0.2272 +117,160,1307,517,23,52,1,1,0.21698 +118,160,1302,517,23,52,1,1,0.19182 +119,160,1297,517,23,52,1,1,0.12893 +120,160,1292,517,23,52,1,1,0.038522 +121,160,1288,518,23,51,1,1,0.14183 +122,160,1284,518,23,51,1,1,0.14103 +123,160,1281,518,23,51,1,1,0.15385 +124,160,1278,519,23,51,1,1,0.14583 +125,160,1274,519,24,51,1,1,0.14462 +126,160,1271,519,24,51,1,1,0.18846 +127,160,1268,520,24,51,1,1,0.16538 +128,160,1264,520,24,51,1,1,0.15462 +129,160,1261,521,24,51,1,1,0.23692 +130,160,1258,521,24,51,1,1,0.30769 +131,160,1254,521,25,51,1,1,0.36982 +132,160,1251,522,25,51,1,1,0.40163 +133,160,1248,522,25,51,1,1,0.4253 +134,160,1245,523,25,51,1,1,0.49926 +135,160,1241,522,24,52,1,1,0.51774 +136,160,1237,522,24,52,1,1,0.52075 +137,160,1232,522,24,52,1,1,0.53962 +138,160,1228,522,24,52,1,1,0.57585 +139,160,1224,522,23,52,1,1,0.75 +140,160,1219,522,24,52,1,1,0.72 +141,160,1215,522,24,53,1,1,0.72 +142,160,1211,522,23,53,1,1,0.70833 +143,160,1206,522,24,53,1,1,0.68 +144,160,1202,522,23,53,1,1,0.70833 +145,160,1198,522,23,53,1,1,0.70833 +146,160,1194,523,23,53,1,1,1 +147,160,1189,522,23,53,1,1,0.66667 +148,160,1184,522,23,53,1,1,0.625 +149,160,1180,522,22,53,1,1,1 +150,160,1175,522,22,53,1,1,1 +151,160,1171,522,21,53,1,1,1 +152,160,1166,522,21,53,1,1,1 +153,160,1162,522,21,53,1,1,1 +154,160,1155,522,22,53,1,1,1 +155,160,1148,522,23,53,1,1,1 +200,161,900,529,24,55,1,1,0.44 +201,161,898,529,24,55,1,1,0.84571 +202,161,896,530,24,55,1,1,0.82643 +203,161,894,530,24,56,1,1,0.82947 +204,161,892,531,24,56,1,1,0.81053 +205,161,891,531,23,57,1,1,0.79885 +206,161,889,532,23,56,1,1,0.77485 +207,161,887,532,23,57,1,1,0.77083 +208,161,885,533,23,57,1,1,0.77083 +209,161,883,533,23,58,1,1,0.78814 +210,161,882,534,23,58,1,1,0.78814 +211,161,881,533,23,59,1,1,0.8 +212,161,880,533,23,59,1,1,0.79375 +213,161,880,533,23,60,1,1,0.79098 +214,161,879,533,23,60,1,1,0.78484 +215,161,879,533,23,60,1,1,0.7541 +216,161,878,533,23,61,1,1,0.77218 +217,161,878,533,23,61,1,1,0.70699 +218,161,877,533,23,61,1,1,0.67809 +219,161,877,533,23,62,1,1,0.58995 +220,161,878,536,23,62,1,1,0.5086 +221,161,878,539,22,58,1,1,0.4871 +222,161,876,534,22,60,1,1,0.57947 +223,161,876,533,22,61,1,1,0.55119 +224,161,877,533,21,61,1,1,0.53079 +225,161,877,533,22,62,1,1,0.49896 +226,161,878,533,21,62,1,1,0.4531 +227,161,878,533,21,62,1,1,0.44444 +228,161,879,533,21,63,1,1,0.42188 +229,161,879,533,21,63,1,1,0.39631 +230,161,880,533,21,64,1,1,0.33287 +231,161,881,532,21,64,1,1,0.32727 +232,161,882,532,22,64,1,1,0.32375 +233,161,884,532,21,63,1,1,0.31534 +234,161,885,531,22,64,1,1,0.31304 +235,161,886,531,22,63,1,1,0.34647 +236,161,888,531,22,63,1,1,0.30571 +237,161,888,531,23,61,1,1,0.36223 +238,161,888,531,24,60,1,1,0.40918 +239,161,889,531,25,59,1,1,0.42179 +240,161,891,530,27,60,1,1,0.38525 +241,161,892,529,27,60,1,1,0.41276 +242,161,893,529,25,63,1,1,0.50841 +243,161,898,529,25,68,1,1,0.44872 +244,161,900,529,25,67,1,1,0.681 +245,161,905,529,25,67,1,1,0.70928 +246,161,907,529,25,67,1,1,0.7862 +247,161,910,529,25,67,1,1,0.82183 +248,161,913,529,25,67,1,1,0.8914 +249,161,917,529,25,67,1,1,0.96324 +250,161,921,529,25,67,1,1,1 +251,161,925,530,25,67,1,1,1 +252,161,930,530,25,67,1,1,1 +253,161,934,532,25,67,1,1,1 +254,161,940,531,25,67,1,1,1 +255,161,944,531,25,67,1,1,1 +256,161,950,531,25,67,1,1,1 +257,161,954,531,25,67,1,1,1 +258,161,959,531,25,67,1,1,1 +259,161,964,531,25,67,1,1,1 +260,161,969,531,25,67,1,1,1 +261,161,974,531,25,67,1,1,1 +262,161,980,531,25,67,1,1,1 +263,161,985,531,25,67,1,1,1 +264,161,990,531,25,67,1,1,1 +265,161,995,531,25,67,1,1,1 +266,161,1000,531,25,67,1,1,1 +267,161,1006,532,25,67,1,1,1 +268,161,1011,531,24,72,1,1,1 +269,161,1016,530,24,71,1,1,1 +270,161,1022,530,23,69,1,1,1 +271,161,1027,529,25,70,1,1,1 +272,161,1032,528,28,72,1,1,1 +273,161,1040,530,23,70,1,1,1 +274,161,1046,529,23,70,1,1,1 +275,161,1052,529,23,70,1,1,0.94484 +276,161,1058,528,23,70,1,1,0.86502 +277,161,1064,528,24,70,1,1,0.82254 +278,161,1070,528,24,68,1,1,0.77565 +279,161,1076,528,24,67,1,1,0.71059 +280,161,1082,528,24,65,1,1,0.66909 +281,161,1088,528,24,64,1,1,0.61292 +282,161,1095,528,24,63,1,1,0.5725 +283,161,1100,528,24,61,1,1,0.47355 +284,161,1106,528,24,60,1,1,0.45902 +285,161,1112,528,24,59,1,1,0.46667 +286,161,1118,529,24,58,1,1,0.43932 +287,161,1125,529,24,57,1,1,0.40966 +288,161,1130,528,24,57,1,1,0.42483 +289,161,1136,528,23,56,1,1,0.42982 +290,161,1142,528,23,55,1,1,0.41667 +291,161,1148,527,23,55,1,1,0.40997 +292,161,1154,527,23,54,1,1,0.40909 +293,161,1160,527,23,53,1,1,0.39352 +294,161,1165,527,23,52,1,1,0.41981 +295,161,1170,527,23,51,1,1,0.41026 +296,161,1175,527,23,50,1,1,0.43137 +297,161,1180,527,23,50,1,1,0.43137 +298,161,1188,528,23,50,1,1,0.35049 +299,161,1193,529,23,50,1,1,0.35049 +300,161,1198,531,23,50,1,1,0.33987 +301,161,1204,532,23,50,1,1,0.31373 +302,161,1209,534,23,50,1,1,0.31373 +303,161,1214,535,23,50,1,1,0.32353 +304,161,1220,537,23,50,1,1,0.29657 +305,161,1225,538,23,50,1,1,0.30556 +306,161,1230,539,23,50,1,1,0.34641 +281,162,1165,530,26,71,1,1,0.22222 +282,162,1170,530,27,72,1,1,0.28571 +283,162,1175,530,28,73,1,1,0.37931 +284,162,1181,530,29,74,1,1,0.43333 +285,162,1189,530,24,74,1,1,0.64 +286,162,1194,528,26,75,1,1,0.66667 +287,162,1199,526,28,76,1,1,0.69324 +288,162,1204,525,30,77,1,1,0.71299 +289,162,1209,525,30,77,1,1,0.80893 +290,162,1214,525,30,78,1,1,0.5194 +291,162,1219,525,30,79,1,1,0.77419 +292,162,1224,525,30,79,1,1,0.82823 +293,162,1229,525,30,80,1,1,0.88371 +294,162,1234,526,30,80,1,1,0.94106 +295,162,1237,525,30,80,1,1,0.90641 +296,162,1242,526,30,80,1,1,0.81282 +297,162,1248,528,29,79,1,1,0.72 +298,162,1253,530,29,78,1,1,0.61519 +299,162,1259,532,28,78,1,1,0.50808 +300,162,1264,531,27,77,1,1,0.337 +301,162,1269,530,26,76,1,1,0.40885 +302,162,1274,530,26,75,1,1,0.38596 +303,162,1279,533,25,74,1,1,0.43077 +304,162,1285,537,24,73,1,1,0.41027 +305,162,1287,541,24,73,1,1,0.40216 +306,162,1291,541,25,73,1,1,0.39449 +307,162,1296,542,26,72,1,1,0.39675 +308,162,1300,543,27,74,1,1,0.41667 +309,162,1305,545,26,73,1,1,0.3964 +310,162,1309,545,27,73,1,1,0.42664 +311,162,1313,545,26,74,1,1,0.44938 +312,162,1318,546,24,74,1,1,0.46667 +313,162,1323,547,22,74,1,1,0.46667 +314,162,1327,548,23,68,1,1,0.45169 +315,162,1332,550,27,64,1,1,0.36264 +316,162,1336,550,27,64,1,1,0.31703 +317,162,1340,551,27,64,1,1,0.31319 +318,162,1344,552,27,64,1,1,0.31868 +319,162,1348,553,27,64,1,1,0.33462 +320,162,1351,548,27,63,1,1,0.20089 +321,162,1355,548,26,63,1,1,0.22801 +322,162,1359,548,26,63,1,1,0.20255 +323,162,1363,549,26,63,1,1,0.17245 +324,162,1367,549,26,63,1,1,0.14931 +325,162,1371,550,26,63,1,1,0.12963 +326,162,1376,548,26,63,1,1,0.12963 +327,162,1379,546,26,63,1,1,0.13368 +328,162,1382,544,26,63,1,1,0.14178 +329,162,1385,542,26,63,1,1,0.1603 +330,162,1386,539,26,63,1,1,0.14815 +331,162,1388,537,26,63,1,1,0.14815 +332,162,1390,535,26,63,1,1,0.13194 +333,162,1392,532,26,63,1,1,0.12731 +334,162,1394,530,26,63,1,1,0.11285 +335,162,1396,528,26,63,1,1,0.14062 +336,162,1399,528,26,63,1,1,0.11458 +270,163,1093,532,21,72,1,1,0.18182 +271,163,1098,532,21,72,1,1,0.27273 +272,163,1104,532,21,72,1,1,0.31818 +273,163,1109,532,22,72,1,1,0.43478 +274,163,1115,533,22,72,1,1,0.65217 +275,163,1120,532,23,73,1,1,0.75 +276,163,1125,532,24,73,1,1,0.8 +277,163,1130,531,25,74,1,1,0.76923 +278,163,1135,531,26,74,1,1,0.81481 +279,163,1140,530,25,75,1,1,0.92308 +280,163,1145,530,25,76,1,1,0.88462 +281,163,1150,530,24,77,1,1,1 +282,163,1155,530,24,77,1,1,1 +283,163,1160,530,23,78,1,1,1 +284,163,1165,530,23,79,1,1,1 +285,163,1170,529,22,79,1,1,1 +286,163,1175,528,22,79,1,1,1 +287,163,1180,528,22,78,1,1,1 +288,163,1185,527,22,78,1,1,1 +289,163,1190,527,21,77,1,1,1 +290,163,1195,526,21,77,1,1,0.86364 +291,163,1200,526,21,76,1,1,0.7804 +292,163,1205,525,21,76,1,1,0.65112 +293,163,1210,525,21,75,1,1,0.54785 +294,163,1215,525,21,75,1,1,0.42823 +295,163,1220,526,22,74,1,1,0.32522 +296,163,1225,527,23,73,1,1,0.26014 +297,163,1230,528,24,72,1,1,0.26301 +298,163,1235,529,26,71,1,1,0.20216 +299,163,1240,530,25,70,1,1,0.23294 +300,163,1245,531,25,70,1,1,0.32936 +301,163,1250,532,24,70,1,1,0.34254 +302,163,1255,534,24,69,1,1,0.34743 +303,163,1260,535,24,69,1,1,0.35829 +304,163,1266,537,24,68,1,1,0.36348 +305,163,1270,538,24,67,1,1,0.35412 +306,163,1275,539,24,67,1,1,0.32118 +307,163,1279,540,24,67,1,1,0.36941 +308,163,1284,541,24,67,1,1,0.35882 +309,163,1289,543,24,66,1,1,0.34507 +310,163,1293,544,24,65,1,1,0.34485 +311,163,1298,545,24,65,1,1,0.31818 +312,163,1302,546,24,65,1,1,0.33939 +313,163,1307,547,24,65,1,1,0.33939 +314,163,1312,549,24,64,1,1,0.30462 +315,163,1316,549,24,64,1,1,0.34031 +316,163,1320,549,24,64,1,1,0.34031 +317,163,1324,549,24,64,1,1,0.35569 +318,163,1328,549,24,64,1,1,0.36123 +319,163,1332,550,24,64,1,1,0.35754 +320,163,1336,550,24,64,1,1,0.47508 +321,163,1340,550,24,64,1,1,0.52923 +322,163,1344,550,24,64,1,1,0.45169 +323,163,1348,550,24,64,1,1,0.45908 +324,163,1352,551,24,64,1,1,0.45292 +325,163,1354,549,24,64,1,1,0.30954 +326,163,1357,547,24,64,1,1,0.35938 +327,163,1359,546,25,64,1,1,0.48107 +328,163,1362,544,24,64,1,1,0.43077 +329,163,1364,543,25,64,1,1,0.40118 +330,163,1367,541,25,64,1,1,0.42604 +331,163,1369,539,25,64,1,1,0.42604 +332,163,1372,538,25,64,1,1,0.43491 +333,163,1374,536,26,64,1,1,0.4188 +334,163,1377,535,26,64,1,1,0.42621 +335,163,1378,535,26,65,1,1,0.35915 +336,163,1380,536,26,65,1,1,0.3092 +337,163,1382,536,25,66,1,1,0.49254 +338,163,1383,537,26,67,1,1,0.47059 +339,163,1385,538,26,67,1,1,0.45588 +340,163,1387,538,25,68,1,1,0.44928 +341,163,1388,539,26,69,1,1,0.47143 +342,163,1390,539,25,70,1,1,0.50704 +343,163,1392,540,25,70,1,1,0.51679 +344,163,1394,541,25,71,1,1,0.336 +345,163,1395,542,25,72,1,1,0.35406 +346,163,1396,544,26,72,1,1,0.33993 +347,163,1398,546,26,73,1,1,0.34234 +348,163,1399,548,26,73,1,1,0.32933 +349,163,1401,550,26,74,1,1,0.29531 +350,163,1402,551,27,75,1,1,0.26504 +351,163,1403,553,27,75,1,1,0.24295 +352,163,1405,555,27,76,1,1,0.22959 +353,163,1406,557,28,76,1,1,0.20152 +507,164,1905,503,61,53,0,3,0.25806 +508,164,1872,507,69,49,0,3,0.7 +509,164,1843,507,72,50,0,3,1 +510,164,1815,507,70,53,0,3,1 +511,164,1785,508,70,52,0,3,1 +512,164,1756,510,70,51,0,3,1 +513,164,1727,511,69,51,0,3,1 +514,164,1698,513,69,50,0,3,1 +515,164,1670,512,68,50,0,3,1 +516,164,1643,511,66,50,0,3,1 +517,164,1615,510,65,50,0,3,1 +518,164,1588,509,64,50,0,3,1 +519,164,1563,507,64,50,0,3,1 +520,164,1539,506,63,50,0,3,1 +521,164,1514,505,63,50,0,3,1 +522,164,1490,504,62,50,0,3,1 +523,164,1466,503,61,50,0,3,1 +524,164,1442,502,60,50,0,3,1 +525,164,1418,501,60,50,0,3,1 +526,164,1394,500,59,50,0,3,0.99412 +527,164,1370,499,59,50,0,3,0.99216 +528,164,1347,499,58,49,0,3,0.99186 +529,164,1325,498,58,49,0,3,0.98814 +530,164,1304,497,57,49,0,3,0.98793 +531,164,1280,498,57,50,0,3,0.98377 +532,164,1261,499,58,49,0,3,0.97017 +533,164,1238,497,58,49,0,3,0.9739 +546,165,999,511,58,49,0,3,0.6678 +547,165,982,505,58,46,0,3,0.7198 +548,165,966,505,57,45,0,3,0.72226 +549,165,949,500,57,45,0,3,0.75412 +550,165,935,494,56,43,0,3,0.82018 +551,165,921,493,55,42,0,3,0.82973 +552,165,908,492,54,41,0,3,0.83636 +553,165,895,491,53,40,0,3,0.84463 +554,165,882,491,52,39,0,3,0.85802 +555,165,868,490,52,38,0,3,0.89598 +556,165,855,489,51,37,0,3,0.86336 +557,165,842,488,50,36,0,3,0.82936 +558,165,829,488,49,35,0,3,0.765 +559,165,814,487,51,36,0,3,0.73493 +560,165,799,487,53,37,0,3,0.71053 +561,165,787,486,53,37,0,3,0.71053 +562,165,775,486,53,37,0,3,0.68421 +563,165,763,486,54,37,0,3,0.65789 +564,165,751,486,54,37,0,3,0.63158 +565,165,739,485,54,38,0,3,0.64103 +566,165,727,485,55,38,0,3,0.64103 +567,165,715,485,55,38,0,3,0.66667 +568,165,703,485,56,38,0,3,0.66667 +569,165,693,484,54,38,0,3,0.71795 +570,165,683,484,53,37,0,3,0.71053 +571,165,673,483,53,37,0,3,0.71053 +572,165,663,483,54,37,0,3,0.71053 +573,165,654,482,54,38,0,3,0.69231 +574,165,644,482,55,38,0,3,0.66667 +575,165,634,482,55,37,0,3,0.68421 +576,165,625,481,55,38,0,3,0.71795 +577,165,615,481,56,38,0,3,0.69231 +578,165,606,481,56,38,0,3,0.67836 +579,165,600,482,52,38,0,3,0.6299 +580,165,594,483,49,38,0,3,0.59026 +581,165,586,482,50,38,0,3,0.60684 +582,165,579,481,50,39,0,3,0.5902 +583,165,571,481,51,39,0,3,0.57692 +584,165,564,480,52,40,0,3,0.59411 +585,165,557,479,52,41,0,3,0.59479 +586,165,549,479,53,41,0,3,0.57407 +587,165,542,478,53,42,0,3,0.56934 +588,165,535,478,54,42,0,3,0.59408 +589,165,531,477,53,42,0,3,0.63997 +590,165,527,477,52,41,0,3,0.63432 +591,165,523,477,52,41,0,3,0.65903 +592,165,520,477,52,41,0,3,0.70036 +593,165,516,477,52,41,0,3,0.72102 +594,165,513,477,52,41,0,3,0.74528 +595,165,509,477,53,41,0,3,0.72487 +596,165,506,477,52,41,0,3,0.71968 +597,165,502,477,53,41,0,3,0.74603 +598,165,499,477,53,42,0,3,0.7416 +599,165,498,481,53,42,0,3,0.72093 +600,165,498,486,53,42,0,3,0.70629 +601,165,497,484,53,42,0,3,0.73471 +602,165,496,483,53,42,0,3,0.79845 +603,165,495,482,53,42,0,3,0.82084 +604,165,494,481,53,42,0,3,0.8385 +605,165,493,480,53,42,0,3,0.84324 +606,165,492,479,53,42,0,3,0.84884 +607,165,491,478,53,42,0,3,0.86047 +608,165,491,477,53,42,0,3,0.87209 +609,165,490,476,53,42,0,3,0.88372 +610,165,489,476,53,42,0,3,0.8876 +611,165,488,475,53,42,0,3,0.8876 +612,165,488,475,53,42,0,3,0.90956 +613,165,487,475,53,42,0,3,0.90655 +614,165,486,474,53,42,0,3,0.8932 +615,165,486,474,53,42,0,3,0.88975 +616,165,485,473,53,42,0,3,0.91731 +617,165,484,473,53,42,0,3,0.93109 +618,165,484,473,53,42,0,3,0.9466 +619,165,483,473,53,42,0,3,0.9466 +620,165,483,474,53,42,0,3,0.94488 +621,165,482,475,53,42,0,3,0.97071 +622,165,482,476,53,42,0,3,0.98536 +623,165,483,476,53,42,0,3,1 +624,165,484,477,53,42,0,3,1 +625,165,485,478,53,42,0,3,1 +626,165,486,479,53,42,0,3,1 +627,165,487,480,53,42,0,3,1 +628,165,488,481,53,42,0,3,1 +629,165,491,485,53,42,0,3,1 +630,165,494,485,53,42,0,3,1 +631,165,497,486,53,41,0,3,1 +632,165,500,486,53,41,0,3,1 +633,165,504,487,53,41,0,3,1 +634,165,507,488,53,41,0,3,1 +635,165,510,489,53,41,0,3,1 +636,165,514,490,53,42,0,3,1 +637,165,517,491,53,42,0,3,1 +638,165,521,493,53,42,0,3,1 +639,165,525,493,53,42,0,3,1 +640,165,530,493,53,42,0,3,1 +641,165,535,494,53,42,0,3,1 +642,165,540,494,53,42,0,3,1 +643,165,545,495,53,42,0,3,1 +644,165,549,495,53,42,0,3,1 +645,165,554,495,53,42,0,3,1 +646,165,559,496,53,42,0,3,1 +647,165,564,496,53,42,0,3,1 +648,165,569,497,53,42,0,3,1 +649,165,574,497,53,41,0,3,1 +650,165,579,497,53,41,0,3,1 +651,165,587,494,53,41,0,3,1 +652,165,595,491,54,41,0,3,1 +653,165,599,491,53,41,0,3,1 +654,165,607,490,53,41,0,3,1 +655,165,615,489,54,42,0,3,1 +656,165,622,493,53,42,0,3,1 +657,165,631,495,53,41,0,3,1 +658,165,641,496,53,43,0,3,1 +659,165,648,510,53,42,0,3,1 +660,165,654,509,53,42,0,3,1 +661,165,659,509,53,42,0,3,1 +662,165,665,509,53,42,0,3,1 +663,165,672,507,53,42,0,3,1 +664,165,679,506,53,42,0,3,1 +665,165,686,504,53,42,0,3,1 +666,165,693,503,53,42,0,3,1 +667,165,700,501,53,43,0,3,1 +668,165,707,500,53,43,0,3,1 +669,165,716,497,53,42,0,3,1 +670,165,723,494,53,43,0,3,1 +671,165,730,492,53,43,0,3,1 +672,165,738,490,53,43,0,3,1 +673,165,745,488,53,43,0,3,1 +674,165,752,486,53,43,0,3,1 +675,165,760,484,53,43,0,3,1 +676,165,767,484,53,43,0,3,1 +677,165,774,484,53,43,0,3,1 +678,165,782,484,53,43,0,3,1 +679,165,788,492,53,43,0,3,1 +680,165,798,490,53,43,0,3,1 +681,165,800,511,53,42,0,3,1 +682,165,804,525,54,42,0,3,1 +683,165,811,503,53,43,0,3,1 +684,165,816,495,53,41,0,3,1 +685,165,823,490,53,41,0,3,1 +686,165,830,485,53,42,0,3,1 +687,165,837,482,53,43,0,3,1 +688,165,845,480,53,43,0,3,1 +689,165,851,479,53,42,0,3,1 +690,165,857,479,53,41,0,3,1 +691,165,863,478,53,42,0,3,1 +692,165,869,477,53,44,0,3,1 +693,165,876,477,53,45,0,3,1 +694,165,883,480,53,45,0,3,1 +695,165,891,483,53,45,0,3,1 +696,165,896,483,53,46,0,3,1 +697,165,902,483,53,47,0,3,1 +698,165,908,483,53,49,0,3,1 +699,165,918,485,53,48,0,3,1 +700,165,922,486,54,48,0,3,1 +701,165,928,486,54,48,0,3,1 +702,165,934,487,54,48,0,3,1 +703,165,939,489,54,49,0,3,1 +704,165,944,492,55,49,0,3,1 +705,165,950,494,54,49,0,3,1 +706,165,956,496,54,49,0,3,1 +707,165,959,496,55,49,0,3,1 +708,165,962,497,56,49,0,3,1 +709,165,967,500,58,50,0,3,1 +710,165,973,508,57,49,0,3,1 +711,165,976,504,57,50,0,3,1 +712,165,981,506,57,49,0,3,1 +713,165,984,504,58,50,0,3,1 +714,165,988,504,57,50,0,3,1 +715,165,992,504,57,50,0,3,1 +716,165,996,504,56,50,0,3,1 +717,165,1000,504,56,50,0,3,1 +718,165,1004,505,56,49,0,3,1 +719,165,1008,506,56,49,0,3,1 +720,165,1012,507,56,49,0,3,1 +721,165,1016,508,57,49,0,3,1 +722,165,1020,509,57,49,0,3,1 +723,165,1025,511,57,49,0,3,1 +724,165,1027,520,58,48,0,3,1 +725,165,1032,517,57,49,0,3,1 +726,165,1037,519,57,49,0,3,1 +727,165,1042,522,57,49,0,3,1 +728,165,1047,525,58,49,0,3,1 +729,165,1050,524,58,49,0,3,1 +730,165,1054,524,58,49,0,3,1 +731,165,1057,523,59,49,0,3,1 +732,165,1061,522,59,49,0,3,1 +733,165,1064,522,60,49,0,3,1 +734,165,1068,521,60,49,0,3,1 +735,165,1071,521,61,49,0,3,1 +736,165,1075,520,61,49,0,3,1 +737,165,1079,520,62,49,0,3,1 +738,165,1081,521,61,49,0,3,1 +739,165,1084,521,61,49,0,3,1 +740,165,1087,521,61,50,0,3,1 +741,165,1089,523,61,50,0,3,1 +742,165,1091,525,61,50,0,3,1 +743,165,1093,528,61,49,0,3,1 +744,165,1094,528,61,49,0,3,1 +745,165,1096,528,61,49,0,3,1 +746,165,1098,528,61,49,0,3,1 +747,165,1100,528,61,49,0,3,1 +748,165,1102,528,61,50,0,3,1 +749,165,1104,528,61,50,0,3,1 +750,165,1107,528,61,50,0,3,1 +586,166,920,526,100,61,0,3,0.09901 +587,166,915,525,100,61,0,3,0.13861 +588,166,910,524,100,61,0,3,0.16832 +589,166,906,524,100,61,0,3,0.18812 +590,166,901,523,100,61,0,3,0.23762 +591,166,897,523,100,61,0,3,0.25743 +592,166,894,522,102,62,0,3,0.29126 +593,166,891,522,104,63,0,3,0.32381 +594,166,889,522,105,63,0,3,0.34906 +595,166,886,522,107,64,0,3,0.37963 +596,166,884,522,108,65,0,3,0.42174 +597,166,883,521,110,69,0,3,0.46486 +598,166,882,521,111,68,0,3,0.51087 +599,166,881,521,113,68,0,3,0.5281 +600,166,880,521,114,68,0,3,0.5564 +601,166,880,521,115,68,0,3,0.57621 +602,166,879,521,115,69,0,3,0.60776 +603,166,878,522,116,70,0,3,0.62899 +604,166,878,523,116,71,0,3,0.67331 +605,166,878,522,116,72,0,3,0.69863 +606,166,878,522,117,73,0,3,0.72377 +607,166,878,522,118,73,0,3,0.75267 +608,166,879,521,117,75,0,3,0.78657 +609,166,879,521,118,75,0,3,0.81314 +610,166,879,521,119,76,0,3,0.83571 +611,166,880,521,119,77,0,3,0.85897 +612,166,880,521,119,77,0,3,0.88889 +613,166,880,522,120,77,0,3,0.90909 +614,166,880,522,120,78,0,3,0.93786 +615,166,880,523,121,77,0,3,0.96585 +616,166,880,523,121,78,0,3,0.99346 +617,166,880,524,122,78,0,3,1 +618,166,880,524,122,78,0,3,1 +619,166,880,525,123,78,0,3,1 +620,166,880,525,123,79,0,3,1 +621,166,881,526,123,79,0,3,1 +622,166,881,527,124,80,0,3,1 +623,166,882,529,124,80,0,3,1 +624,166,883,532,125,80,0,3,1 +625,166,885,535,125,80,0,3,1 +626,166,886,531,124,80,0,3,1 +627,166,890,534,123,79,0,3,1 +628,166,893,533,125,79,0,3,1 +629,166,896,533,127,79,0,3,1 +630,166,899,532,129,79,0,3,1 +631,166,903,532,130,79,0,3,1 +632,166,906,534,131,79,0,3,1 +633,166,910,536,131,79,0,3,1 +634,166,914,538,131,80,0,3,1 +635,166,919,537,132,80,0,3,1 +636,166,923,539,133,80,0,3,1 +637,166,928,541,133,81,0,3,1 +638,166,933,544,133,80,0,3,1 +639,166,938,546,133,81,0,3,1 +640,166,943,548,133,81,0,3,1 +641,166,948,551,134,81,0,3,1 +642,166,954,552,135,82,0,3,1 +643,166,961,554,135,83,0,3,1 +644,166,967,556,136,83,0,3,1 +645,166,973,559,138,83,0,3,1 +646,166,977,559,139,83,0,3,1 +647,166,984,560,140,84,0,3,1 +648,166,992,561,141,86,0,3,1 +649,166,999,560,142,87,0,3,1 +650,166,1007,559,142,89,0,3,1 +651,166,1015,558,142,91,0,3,1 +652,166,1024,549,143,92,0,3,1 +653,166,1033,548,143,93,0,3,1 +654,166,1042,547,144,93,0,3,1 +655,166,1050,547,144,94,0,3,1 +656,166,1057,551,150,87,0,3,1 +657,166,1068,556,152,88,0,3,1 +658,166,1079,561,152,92,0,3,1 +659,166,1090,570,152,93,0,3,1 +660,166,1097,573,152,96,0,3,1 +661,166,1104,576,152,100,0,3,1 +662,166,1113,579,153,99,0,3,1 +663,166,1123,582,153,98,0,3,1 +664,166,1132,584,155,100,0,3,1 +665,166,1141,585,157,100,0,3,1 +666,166,1150,586,159,100,0,3,1 +667,166,1159,587,161,101,0,3,1 +668,166,1168,588,163,101,0,3,1 +669,166,1177,589,165,101,0,3,1 +670,166,1187,590,167,102,0,3,1 +671,166,1197,587,170,103,0,3,1 +672,166,1207,586,171,103,0,3,1 +673,166,1217,586,173,103,0,3,1 +674,166,1228,583,174,104,0,3,1 +675,166,1237,583,174,106,0,3,1 +676,166,1247,583,174,109,0,3,1 +677,166,1260,591,176,112,0,3,1 +678,166,1270,587,178,113,0,3,1 +679,166,1282,589,180,114,0,3,1 +680,166,1291,598,182,115,0,3,1 +681,166,1300,608,184,116,0,3,1 +682,166,1314,602,185,119,0,3,1 +683,166,1319,600,188,119,0,3,1 +684,166,1326,592,191,118,0,3,1 +685,166,1338,581,192,121,0,3,1 +686,166,1348,576,194,122,0,3,1 +687,166,1358,577,197,122,0,3,1 +688,166,1369,578,200,123,0,3,1 +689,166,1380,579,202,123,0,3,1 +690,166,1391,580,205,124,0,3,1 +691,166,1402,581,208,125,0,3,1 +692,166,1412,591,211,125,0,3,1 +693,166,1424,591,213,129,0,3,1 +694,166,1435,598,214,130,0,3,1 +695,166,1447,606,215,131,0,3,1 +696,166,1458,609,218,133,0,3,1 +697,166,1470,612,220,136,0,3,1 +698,166,1482,616,222,138,0,3,1 +699,166,1493,628,224,140,0,3,1 +700,166,1505,629,227,141,0,3,1 +701,166,1517,631,230,142,0,3,1 +702,166,1526,639,234,144,0,3,1 +703,166,1536,648,238,146,0,3,1 +704,166,1544,649,242,149,0,3,1 +705,166,1553,654,246,150,0,3,1 +706,166,1563,659,250,152,0,3,1 +707,166,1573,661,254,153,0,3,1 +708,166,1584,663,258,154,0,3,1 +709,166,1595,665,261,155,0,3,1 +710,166,1606,668,265,156,0,3,1 +711,166,1618,651,269,157,0,3,1 +712,166,1632,661,269,158,0,3,1 +713,166,1642,648,269,160,0,3,1 +714,166,1653,646,269,161,0,3,0.99259 +715,166,1664,645,269,162,0,3,0.95185 +716,166,1675,641,269,163,0,3,0.91111 +717,166,1686,641,269,164,0,3,0.87037 +718,166,1697,642,270,164,0,3,0.82657 +719,166,1708,658,270,166,0,3,0.78598 +720,166,1719,649,269,166,0,3,0.74815 +721,166,1730,652,268,168,0,3,0.71004 +722,166,1743,658,267,168,0,3,0.66418 +723,166,1756,665,267,168,0,3,0.61567 +724,166,1769,672,267,168,0,3,0.56716 +725,166,1782,678,267,168,0,3,0.51866 +726,166,1795,685,267,168,0,3,0.47015 +727,166,1808,692,267,168,0,3,0.42164 +728,166,1821,699,267,168,0,3,0.37313 +729,166,1834,697,268,168,0,3,0.32342 +730,166,1847,703,268,168,0,3,0.27509 +731,166,1861,709,268,168,0,3,0.22305 +732,166,1870,710,267,168,0,3,0.1903 +733,166,1879,711,267,168,0,3,0.15672 +734,166,1898,716,269,169,0,3,0.085185 +563,167,732,482,42,28,0,3,0.34082 +564,167,720,479,41,29,0,3,0.46587 +565,167,710,479,41,29,0,3,0.60952 +566,167,701,479,41,29,0,3,0.69524 +567,167,692,479,41,29,0,3,0.6381 +568,167,682,479,41,29,0,3,0.6 +569,167,673,479,41,29,0,3,0.56349 +570,167,664,479,41,29,0,3,0.54365 +571,167,655,479,41,29,0,3,0.50476 +572,167,646,479,41,29,0,3,0.48413 +573,167,637,479,41,29,0,3,0.46429 +574,167,629,479,41,29,0,3,0.40952 +575,167,620,479,41,29,0,3,0.38889 +576,167,611,479,41,29,0,3,0.37778 +577,167,603,479,41,29,0,3,0.32381 +578,167,594,479,41,29,0,3,0.31429 +579,167,585,479,41,29,0,3,0.38571 +580,167,577,479,41,29,0,3,0.43016 +581,167,570,477,42,29,0,3,0.43953 +582,167,564,476,42,29,0,3,0.41085 +583,167,557,475,42,30,0,3,0.4036 +584,167,550,475,42,30,0,3,0.37134 +585,167,544,475,41,30,0,3,0.32873 +586,167,539,474,41,30,0,3,0.30722 +587,167,534,474,41,30,0,3,0.23963 +588,167,530,474,41,30,0,3,0.202 +589,167,525,474,41,30,0,3,0.19355 +590,167,521,474,41,30,0,3,0.18894 +591,167,517,474,41,30,0,3,0.18433 +592,167,514,475,41,30,0,3,0.15207 +593,167,510,475,41,30,0,3,0.15207 +594,167,506,475,41,30,0,3,0.17742 +595,167,505,472,42,29,0,3,0.22248 +596,167,501,472,42,29,0,3,0.23643 +597,167,498,473,42,29,0,3,0.18915 +598,167,496,475,42,29,0,3,0.11085 +599,167,494,477,42,29,0,3,0.18295 +600,167,493,479,41,30,0,3,0.27189 +601,167,495,478,33,30,0,3,0.22201 +602,167,494,477,34,30,0,3,0.22488 +603,167,493,476,35,30,0,3,0.22401 +604,167,493,476,36,30,0,3,0.17698 +605,167,492,475,37,30,0,3,0.17572 +606,167,492,475,37,30,0,3,0.12903 +607,167,491,474,39,30,0,3,0.12903 +608,167,491,474,39,30,0,3,0.096774 +609,167,490,473,40,30,0,3,0.096774 +180,168,1172,454,69,69,0,11,1 +181,168,1171,454,69,69,0,11,1 +182,168,1169,454,69,69,0,11,1 +183,168,1167,454,69,69,0,11,1 +184,168,1165,455,69,69,0,11,1 +185,168,1164,455,69,69,0,11,1 +186,168,1163,455,69,69,0,11,1 +187,168,1162,455,69,69,0,11,1 +188,168,1160,455,69,69,0,11,1 +189,168,1158,455,69,69,0,11,1 +190,168,1158,454,68,72,0,11,1 +255,169,1376,425,140,133,0,11,1 +256,169,1392,423,140,133,0,11,1 +257,169,1408,422,140,133,0,11,1 +258,169,1423,420,140,133,0,11,1 +259,169,1439,418,140,133,0,11,1 +260,169,1451,416,143,138,0,11,1 +261,169,1464,415,146,143,0,11,1 +262,169,1482,414,150,142,0,11,1 +263,169,1499,413,155,150,0,11,1 +264,169,1516,413,160,157,0,11,1 +265,169,1534,413,165,160,0,11,1 +266,169,1552,414,170,162,0,11,1 +267,169,1579,415,170,162,0,11,1 +268,169,1601,416,170,162,0,11,1 +114,170,1413,517,14,78,0,10,1 +115,170,1411,517,14,78,0,10,1 +116,170,1407,514,13,83,0,10,1 +117,170,1405,513,13,83,0,10,1 +118,170,1402,511,13,83,0,10,1 +119,170,1400,510,13,83,0,10,1 +120,170,1396,510,13,83,0,10,1 +121,170,1393,510,13,83,0,10,1 +122,170,1389,510,13,83,0,10,1 +123,170,1386,510,13,83,0,10,1 +124,170,1382,511,13,83,0,10,1 +125,170,1379,511,13,83,0,10,1 +126,170,1375,511,13,83,0,10,1 +127,170,1372,511,13,83,0,10,1 +128,170,1368,511,13,83,0,10,1 +129,170,1365,512,13,83,0,10,1 +130,170,1361,512,13,83,0,10,1 +131,170,1358,513,13,82,0,10,0.92427 +132,170,1355,513,12,83,0,10,0.90842 +133,170,1351,514,13,82,0,10,0.89587 +134,170,1348,514,12,82,0,10,0.86747 +135,170,1345,515,12,82,0,10,0.88786 +136,170,1341,515,12,81,0,10,0.88743 +137,170,1338,515,12,81,0,10,0.89681 +138,170,1336,514,12,81,0,10,0.89681 +139,170,1334,514,12,81,0,10,0.91557 +140,170,1332,514,12,81,0,10,0.91557 +141,170,1330,514,12,81,0,10,0.92495 +142,170,1328,514,12,81,0,10,0.92495 +143,170,1325,514,12,81,0,10,0.92495 +144,170,1322,514,12,81,0,10,0.91557 +145,170,1319,516,12,81,0,10,0.93246 +146,170,1316,518,12,81,0,10,0.94371 +147,170,1313,517,12,81,0,10,0.93433 +148,170,1311,517,12,81,0,10,0.93433 +149,170,1307,518,12,80,0,10,0.93732 +150,170,1304,520,12,79,0,10,0.96538 +151,170,1300,520,12,79,0,10,0.9625 +152,170,1296,520,12,79,0,10,0.9625 +153,170,1292,518,12,79,0,10,0.95 +154,170,1288,516,12,79,0,10,0.9125 +155,170,1284,515,12,79,0,10,0.9125 +156,170,1280,515,12,79,0,10,0.925 +157,170,1276,515,12,79,0,10,0.9125 +158,170,1272,515,12,79,0,10,0.925 +159,170,1268,516,12,79,0,10,0.95 +160,170,1264,516,12,79,0,10,0.9375 +161,170,1260,516,12,79,0,10,0.9375 +162,170,1256,517,12,79,0,10,0.87692 +163,170,1254,515,12,81,0,10,0.92683 +164,170,1252,513,12,83,0,10,0.90476 +165,170,1251,512,11,84,0,10,0.90588 +166,170,1248,511,11,84,0,10,0.87059 +167,170,1245,511,11,84,0,10,0.84706 +168,170,1243,511,11,84,0,10,0.87059 +169,170,1240,511,11,84,0,10,1 +170,170,1238,511,11,84,0,10,1 +171,170,1235,510,11,84,0,10,1 +172,170,1234,510,11,84,0,10,1 +173,170,1233,511,11,84,0,10,1 +174,170,1230,513,11,84,0,10,1 +175,170,1228,515,11,84,0,10,1 +176,170,1227,509,13,83,0,10,0.15476 +177,170,1225,510,13,83,0,10,0.14286 +178,170,1224,512,13,83,0,10,0.14286 +179,170,1223,514,13,83,0,10,1 +180,170,1222,516,13,83,0,10,0.90476 +181,170,1219,518,13,83,0,10,0.92857 +66,171,1606,511,11,59,0,10,0.11667 +67,171,1609,527,11,59,0,10,0.36667 +68,171,1607,525,10,51,0,10,0.26923 +69,171,1610,537,10,51,0,10,0.48077 +70,171,1609,535,10,51,0,10,0.42308 +71,171,1608,535,10,51,0,10,0.60839 +72,171,1608,535,10,51,0,10,0.72902 +73,171,1607,536,10,51,0,10,0.8951 +74,171,1607,536,10,51,0,10,1 +75,171,1607,537,10,51,0,10,1 +76,171,1606,537,10,51,0,10,1 +77,171,1605,537,10,51,0,10,1 +78,171,1604,537,10,51,0,10,1 +79,171,1604,538,10,51,0,10,1 +80,171,1604,535,10,51,0,10,1 +81,171,1602,535,10,51,0,10,1 +82,171,1601,535,10,51,0,10,1 +83,171,1599,535,10,51,0,10,1 +92,172,1584,530,9,64,0,10,1 +93,172,1581,533,11,63,0,10,1 +94,172,1579,533,11,63,0,10,1 +95,172,1578,534,11,63,0,10,1 +96,172,1575,537,11,63,0,10,1 +97,172,1573,538,11,63,0,10,1 +98,172,1570,539,11,63,0,10,1 +99,172,1568,539,11,63,0,10,1 +100,172,1564,539,11,63,0,10,1 +101,172,1563,540,11,63,0,10,1 +102,172,1561,540,11,63,0,10,1 +103,172,1558,540,11,63,0,10,1 +104,172,1555,544,11,63,0,10,1 +105,172,1553,543,11,63,0,10,1 +106,172,1552,544,11,63,0,10,1 +107,172,1550,543,11,63,0,10,1 +108,172,1547,543,11,63,0,10,1 +109,172,1543,541,11,63,0,10,1 +110,172,1543,539,11,63,0,10,1 +111,172,1540,539,10,68,0,10,1 +421,173,817,989,84,186,0,10,0.49198 +422,173,784,996,83,186,0,10,0.45455 +423,173,754,1001,83,186,0,10,0.42781 +424,173,715,1007,83,186,0,10,0.39572 +425,173,686,1014,83,186,0,10,0.35829 +426,173,649,1025,83,186,0,10,0.29947 +427,173,614,1034,83,186,0,10,0.25134 +428,173,572,1044,83,186,0,10,0.19786 +429,173,534,1057,83,186,0,10,0.039725 +172,174,1131,557,18,69,0,10,1 +173,174,1128,558,18,69,0,10,1 +174,174,1126,558,18,69,0,10,1 +175,174,1125,559,18,69,0,10,1 +176,174,1123,560,18,69,0,10,1 +177,174,1121,561,18,69,0,10,1 +178,174,1119,562,18,69,0,10,1 +179,174,1118,563,18,69,0,10,1 +180,174,1115,563,18,69,0,10,1 +181,174,1113,563,18,69,0,10,1 +182,174,1112,563,18,69,0,10,1 +183,174,1110,565,18,69,0,10,1 +184,174,1108,568,18,69,0,10,1 +185,174,1105,567,18,69,0,10,1 +186,174,1103,567,18,69,0,10,1 +187,174,1101,567,18,69,0,10,1 +188,174,1100,568,18,69,0,10,1 +189,174,1098,569,18,69,0,10,1 +190,174,1097,570,18,69,0,10,1 +191,174,1095,571,18,69,0,10,1 +192,174,1094,572,18,69,0,10,1 +193,174,1093,574,18,69,0,10,1 +194,174,1092,574,18,69,0,10,1 +195,174,1092,574,18,69,0,10,1 +196,174,1089,576,18,69,0,10,1 +197,174,1087,576,18,69,0,10,1 +198,174,1086,577,18,69,0,10,1 +199,174,1085,578,18,69,0,10,1 +200,174,1084,578,18,69,0,10,1 +201,174,1084,578,18,69,0,10,1 +202,174,1084,578,18,69,0,10,1 +203,174,1084,578,18,69,0,10,1 +204,174,1083,579,19,71,0,10,1 +205,174,1082,581,21,72,0,10,1 +206,174,1079,582,21,72,0,10,1 +207,174,1077,584,21,72,0,10,1 +208,174,1077,585,21,72,0,10,1 +209,174,1077,586,21,72,0,10,1 +210,174,1077,587,21,72,0,10,1 +211,174,1077,588,21,72,0,10,1 +212,174,1077,589,21,72,0,10,1 +213,174,1078,590,21,72,0,10,1 +214,174,1078,591,21,72,0,10,1 +215,174,1078,592,21,72,0,10,1 +216,174,1078,593,21,72,0,10,1 +217,174,1078,594,21,72,0,10,1 +218,174,1079,596,21,72,0,10,1 +219,174,1079,596,25,74,0,10,1 +220,174,1079,592,24,78,0,10,1 +221,174,1083,593,24,78,0,10,1 +222,174,1084,594,24,78,0,10,1 +223,174,1086,595,24,78,0,10,1 +224,174,1086,595,24,78,0,10,1 +225,174,1087,595,24,78,0,10,1 +226,174,1089,596,24,79,0,10,1 +227,174,1092,598,23,80,0,10,1 +228,174,1094,598,23,80,0,10,1 +229,174,1096,599,23,80,0,10,1 +230,174,1097,599,23,80,0,10,1 +231,174,1100,599,22,84,0,10,1 +232,174,1103,599,22,84,0,10,1 +233,174,1106,598,22,84,0,10,1 +234,174,1109,597,22,84,0,10,1 +235,174,1112,597,22,84,0,10,1 +236,174,1115,598,22,84,0,10,1 +237,174,1117,598,22,84,0,10,1 +238,174,1120,598,22,84,0,10,1 +239,174,1125,597,22,84,0,10,1 +240,174,1131,597,22,84,0,10,1 +241,174,1134,597,22,87,0,10,1 +242,174,1138,597,21,91,0,10,0.81818 +243,174,1142,597,21,91,0,10,0.27273 +244,174,1147,598,21,91,0,10,0 +245,174,1152,599,21,91,0,10,0 +246,174,1158,601,21,91,0,10,0 +247,174,1163,601,21,91,0,10,0 +248,174,1168,602,21,91,0,10,0 +249,174,1173,602,21,91,0,10,0 +131,175,1330,546,9,73,0,10,0.5 +132,175,1328,544,9,75,0,10,0.4 +133,175,1325,553,9,66,0,10,0.3 +134,175,1321,554,9,67,0,10,0.4 +135,175,1317,544,9,76,0,10,0.5 +136,175,1314,550,11,66,0,10,0.41667 +137,175,1312,546,9,73,0,10,0.4 +138,175,1310,541,9,81,0,10,0.3 +139,175,1306,548,8,71,0,10,0.44444 +140,175,1303,548,8,72,0,10,0.44444 +141,175,1301,553,9,67,0,10,0.4 +142,175,1301,550,9,68,0,10,0.1 +143,175,1297,552,8,66,0,10,0.22222 +144,175,1294,558,8,62,0,10,0.33333 +145,175,1290,551,7,69,0,10,0.5 +146,175,1288,548,9,77,0,10,0.3 +147,175,1284,551,9,75,0,10,0.5 +148,175,1281,552,9,73,0,10,0.5 +149,175,1278,554,10,71,0,10,0.45455 +150,175,1274,549,9,77,0,10,0.7 +151,175,1270,548,8,79,0,10,0.88889 +152,175,1267,550,9,76,0,10,0.9 +153,175,1263,553,8,72,0,10,1 +154,175,1260,550,9,77,0,10,0.9 +155,175,1255,549,10,75,0,10,0.90909 +156,175,1251,546,9,79,0,10,1 +157,175,1247,546,8,79,0,10,1 +158,175,1243,545,7,80,0,10,1 +159,175,1240,542,7,84,0,10,1 +160,175,1237,543,8,83,0,10,1 +161,175,1233,541,9,85,0,10,1 +162,175,1230,547,11,79,0,10,1 +163,175,1227,543,11,83,0,10,1 +164,175,1224,544,11,83,0,10,1 +165,175,1221,542,11,85,0,10,1 +166,175,1219,541,11,85,0,10,0.75 +167,175,1213,544,13,83,0,10,0.35714 +168,175,1213,545,11,81,0,10,0.33333 +169,175,1211,543,10,82,0,10,0.18182 +170,175,1209,543,10,83,0,10,1 +171,175,1207,544,9,82,0,10,1 +172,175,1206,544,9,85,0,10,1 +173,175,1204,543,10,86,0,10,0 +174,175,1201,543,9,85,0,10,0 +175,175,1200,550,10,79,0,10,1 +176,175,1197,542,10,88,0,10,0 +177,175,1196,546,9,84,0,10,0 +178,175,1195,545,9,85,0,10,0 +179,175,1194,543,9,88,0,10,1 +180,175,1192,544,8,87,0,10,0 +181,175,1190,546,8,86,0,10,0 +182,175,1190,546,10,89,0,10,0 +183,175,1188,553,9,82,0,10,0 +184,175,1186,561,9,74,0,10,0 +185,175,1184,557,10,78,0,10,0 +186,175,1182,555,9,81,0,10,0 +187,175,1180,551,8,86,0,10,0 +188,175,1179,550,8,88,0,10,0 +189,175,1178,553,11,86,0,10,0 +190,175,1176,551,8,88,0,10,0 +191,175,1176,549,9,93,0,10,0 +192,175,1174,556,11,85,0,10,0 +193,175,1173,555,9,88,0,10,0 +194,175,1172,564,8,81,0,10,0 +195,175,1171,562,10,82,0,10,0 +196,175,1170,556,9,89,0,10,0 +197,175,1169,550,10,95,0,10,0 +198,175,1168,561,9,85,0,10,0 +199,175,1167,560,8,86,0,10,0 +200,175,1169,561,8,87,0,10,0 +201,175,1168,564,9,84,0,10,0 +202,175,1167,565,9,84,0,10,1 +203,175,1166,568,9,84,0,10,1 +204,175,1166,567,8,86,0,10,1 +205,175,1166,566,8,88,0,10,1 +206,175,1166,564,9,91,0,10,1 +207,175,1166,565,10,90,0,10,0.36364 +208,175,1166,569,7,88,0,10,1 +184,176,1150,524,12,116,0,10,0 +185,176,1150,527,12,116,0,10,0 +186,176,1148,527,12,116,0,10,0 +187,176,1147,524,12,116,0,10,0 +188,176,1147,522,12,116,0,10,0 +189,176,1144,529,12,116,0,10,0 +190,176,1142,530,12,116,0,10,0.076923 +191,176,1140,529,12,117,0,10,0.15385 +192,176,1138,528,12,118,0,10,0.23077 +193,176,1137,527,11,120,0,10,0.25 +194,176,1136,536,11,119,0,10,0.25 +195,176,1136,536,11,119,0,10,0.16667 +196,176,1135,533,11,123,0,10,0.16667 +197,176,1134,530,11,127,0,10,0.16667 +198,176,1133,527,11,131,0,10,0.16667 +199,176,1132,525,11,134,0,10,0.16667 +200,176,1136,492,11,170,0,10,0 +201,176,1133,502,11,161,0,10,0 +202,176,1131,512,10,152,0,10,0 +203,176,1129,522,10,143,0,10,0.090909 +204,176,1129,519,9,141,0,10,0 +205,176,1129,516,8,139,0,10,0 +206,176,1130,513,9,146,0,10,0 +207,176,1130,510,8,148,0,10,0 +208,176,1130,507,8,151,0,10,0 +209,176,1131,504,9,158,0,10,0 +210,176,1131,501,11,160,0,10,0 +211,176,1130,511,11,152,0,10,0 +212,176,1129,522,11,143,0,10,0 +213,176,1129,533,11,134,0,10,0 +214,176,1130,531,11,135,0,10,0 +215,176,1131,529,11,137,0,10,0 +216,176,1132,527,11,139,0,10,0 +217,176,1133,525,11,141,0,10,0 +218,176,1134,523,11,143,0,10,0 +219,176,1135,521,11,145,0,10,0 +220,176,1136,519,11,147,0,10,0 +221,176,1138,519,11,147,0,10,0 +222,176,1140,519,11,147,0,10,0 +223,176,1142,520,11,147,0,10,0 +224,176,1144,520,11,147,0,10,0 +225,176,1146,521,11,147,0,10,0 +226,176,1148,521,11,147,0,10,0 +227,176,1150,521,11,147,0,10,0 +228,176,1152,522,11,147,0,10,0.083333 +229,176,1154,522,11,147,0,10,0.083333 +230,176,1156,523,11,147,0,10,0.16667 +231,176,1158,523,11,147,0,10,0.25 +46,177,803,504,9,61,0,10,1 +47,177,802,503,9,62,0,10,1 +48,177,802,503,9,63,0,10,1 +49,177,801,503,10,63,0,10,1 +50,177,801,503,9,64,0,10,1 +51,177,801,503,9,64,0,10,1 +52,177,800,503,10,65,0,10,1 +53,177,800,503,9,65,0,10,1 +54,177,799,503,10,66,0,10,1 +55,177,799,503,10,66,0,10,1 +56,177,799,503,10,67,0,10,1 +57,177,798,502,10,67,0,10,1 +58,177,797,501,10,67,0,10,1 +59,177,796,500,11,67,0,10,1 +60,177,795,499,11,67,0,10,1 +61,177,794,498,11,67,0,10,1 +62,177,794,497,11,67,0,10,1 +63,177,793,498,10,67,0,10,1 +64,177,792,500,10,67,0,10,1 +65,177,791,501,10,67,0,10,1 +66,177,790,503,10,67,0,10,1 +67,177,787,502,10,67,0,10,1 +68,177,785,501,10,67,0,10,1 +69,177,782,501,11,66,0,10,1 +70,177,780,500,10,66,0,10,1 +71,177,778,500,10,66,0,10,1 +72,177,775,499,11,66,0,10,1 +73,177,773,498,10,66,0,10,1 +74,177,770,498,11,65,0,10,1 +75,177,768,497,11,65,0,10,1 +76,177,766,497,11,65,0,10,1 +77,177,763,499,11,65,0,10,1 +78,177,761,499,11,65,0,10,1 +79,177,759,499,11,65,0,10,1 +80,177,755,499,11,65,0,10,1 +81,177,751,498,11,65,0,10,1 +82,177,747,498,11,65,0,10,1 +83,177,744,499,11,65,0,10,1 +84,177,739,498,11,65,0,10,0.13636 +85,177,735,499,11,65,0,10,0.13636 +86,177,732,501,11,65,0,10,0.13636 +87,177,728,503,11,65,0,10,1 +88,177,725,504,11,65,0,10,1 +89,177,723,504,11,65,0,10,0.13636 +90,177,715,508,11,65,0,10,1 +91,177,711,511,11,65,0,10,1 +92,177,706,511,11,65,0,10,1 +93,177,700,513,11,65,0,10,1 +94,177,696,509,10,70,0,10,1 +95,177,694,510,10,70,0,10,1 +96,177,691,513,10,70,0,10,1 +97,177,686,513,10,70,0,10,1 +98,177,681,516,10,70,0,10,1 +99,177,675,513,10,70,0,10,1 +100,177,672,515,10,70,0,10,1 +101,177,666,509,9,75,0,10,0.59868 +102,177,663,511,11,74,0,10,1 +103,177,659,513,11,74,0,10,1 +104,177,653,510,10,77,0,10,1 +105,177,650,510,10,77,0,10,1 +106,177,643,506,10,77,0,10,0.63869 +107,177,639,509,11,75,0,10,0.58553 +108,177,635,511,11,75,0,10,1 +109,177,629,510,11,76,0,10,1 +110,177,624,510,11,76,0,10,1 +111,177,619,510,11,76,0,10,1 +112,177,614,510,10,76,0,10,1 +113,177,609,510,10,77,0,10,1 +114,177,603,510,11,77,0,10,1 +115,177,598,510,10,77,0,10,1 +116,177,593,510,10,77,0,10,1 +117,177,588,510,10,77,0,10,1 +118,177,583,510,10,78,0,10,1 +119,177,577,510,10,78,0,10,1 +120,177,572,510,10,79,0,10,1 +121,177,566,510,10,79,0,10,1 +122,177,561,511,10,79,0,10,1 +123,177,556,511,10,80,0,10,1 +124,177,550,511,10,80,0,10,1 +125,177,545,512,10,80,0,10,1 +126,177,539,512,10,80,0,10,1 +127,177,534,512,10,81,0,10,1 +128,177,529,513,10,81,0,10,1 +129,177,523,513,10,81,0,10,1 +130,177,518,514,10,81,0,10,1 +131,177,512,515,10,81,0,10,1 +132,177,507,515,10,81,0,10,1 +133,177,502,516,10,81,0,10,1 +134,177,496,517,10,81,0,10,1 +135,177,491,517,10,81,0,10,1 +136,177,485,518,10,81,0,10,1 +137,177,480,519,10,81,0,10,1 +138,177,475,520,10,81,0,10,1 +139,177,470,519,10,82,0,10,1 +140,177,465,519,10,82,0,10,1 +141,177,460,519,10,82,0,10,1 +142,177,455,519,10,82,0,10,1 +143,177,450,519,10,82,0,10,1 +144,177,445,518,10,83,0,10,1 +145,177,440,518,10,83,0,10,1 +146,177,435,518,10,83,0,10,1 +147,177,430,518,10,83,0,10,1 +148,177,426,518,9,83,0,10,1 +149,177,419,518,10,84,0,10,1 +150,177,413,519,10,84,0,10,1 +151,177,406,520,11,85,0,10,1 +152,177,400,520,11,86,0,10,1 +153,177,394,521,11,87,0,10,1 +154,177,387,522,12,87,0,10,1 +155,177,381,522,12,88,0,10,1 +156,177,374,523,13,89,0,10,1 +157,177,368,524,13,89,0,10,1 +158,177,362,525,13,90,0,10,1 +159,177,356,525,13,90,0,10,1 +160,177,350,526,13,90,0,10,1 +161,177,345,527,13,90,0,10,1 +162,177,339,527,13,90,0,10,1 +163,177,334,528,13,90,0,10,1 +164,177,328,529,13,90,0,10,1 +165,177,322,529,13,90,0,10,1 +166,177,317,530,13,90,0,10,1 +167,177,311,531,13,90,0,10,1 +168,177,306,532,13,90,0,10,1 +169,177,301,532,13,90,0,10,1 +170,177,296,532,13,90,0,10,1 +171,177,291,532,13,90,0,10,1 +172,177,287,533,13,90,0,10,1 +173,177,282,533,13,90,0,10,1 +174,177,277,533,13,90,0,10,1 +175,177,273,534,13,90,0,10,1 +176,177,268,534,13,90,0,10,1 +177,177,263,534,13,90,0,10,1 +292,178,1523,471,26,177,0,10,0 +293,178,1539,482,26,176,0,10,0.51852 +294,178,1551,483,25,174,0,10,1 diff --git a/Yolov5-Deepsort/image.png b/Yolov5-Deepsort/image.png new file mode 100644 index 0000000000000000000000000000000000000000..ace8fcff2c3fa4f16cd87a47467f0f755beaed1e Binary files /dev/null and b/Yolov5-Deepsort/image.png differ diff --git a/Yolov5-Deepsort/manbo.mp4 b/Yolov5-Deepsort/manbo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..840289199ef681528e7898a57105787f19bbff46 Binary files /dev/null and b/Yolov5-Deepsort/manbo.mp4 differ diff --git a/Yolov5-Deepsort/models/__init__.py b/Yolov5-Deepsort/models/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/models/__pycache__/__init__.cpython-36.pyc b/Yolov5-Deepsort/models/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9746b6598ac986fbff7cb2365a7a441cec36779 Binary files /dev/null and b/Yolov5-Deepsort/models/__pycache__/__init__.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/models/__pycache__/__init__.cpython-37.pyc b/Yolov5-Deepsort/models/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..652f93beb9f9231da6eb6ec57d6160ad011178fd Binary files /dev/null and b/Yolov5-Deepsort/models/__pycache__/__init__.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/models/__pycache__/common.cpython-36.pyc b/Yolov5-Deepsort/models/__pycache__/common.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9734cfb03cba91dbf15e38722d0509cb47641a91 Binary files /dev/null and b/Yolov5-Deepsort/models/__pycache__/common.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/models/__pycache__/common.cpython-37.pyc b/Yolov5-Deepsort/models/__pycache__/common.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4edaea39d903d09c0ad337ec4bff5b9565ea21b Binary files /dev/null and b/Yolov5-Deepsort/models/__pycache__/common.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/models/__pycache__/experimental.cpython-36.pyc b/Yolov5-Deepsort/models/__pycache__/experimental.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..caa1ef7d5155d2c5bf348930ddf08fbcb5131007 Binary files /dev/null and b/Yolov5-Deepsort/models/__pycache__/experimental.cpython-36.pyc differ diff --git a/Yolov5-Deepsort/models/__pycache__/experimental.cpython-37.pyc b/Yolov5-Deepsort/models/__pycache__/experimental.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03d97117b57b37f651134f40a2305512b53bc8dc Binary files /dev/null and b/Yolov5-Deepsort/models/__pycache__/experimental.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/models/__pycache__/yolo.cpython-37.pyc b/Yolov5-Deepsort/models/__pycache__/yolo.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c4abfe75e25b31af450916e37b66ea4aeb10c72 Binary files /dev/null and b/Yolov5-Deepsort/models/__pycache__/yolo.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/models/common.py b/Yolov5-Deepsort/models/common.py new file mode 100644 index 0000000000000000000000000000000000000000..4211db406c3d85e652bc11280cf9856f500ef835 --- /dev/null +++ b/Yolov5-Deepsort/models/common.py @@ -0,0 +1,395 @@ +# YOLOv5 common modules + +import math +from copy import copy +from pathlib import Path + +import numpy as np +import pandas as pd +import requests +import torch +import torch.nn as nn +from PIL import Image +from torch.cuda import amp + +from utils.datasets import letterbox +from utils.general import non_max_suppression, make_divisible, scale_coords, increment_path, xyxy2xywh, save_one_box +from utils.plots import colors, plot_one_box +from utils.torch_utils import time_synchronized + + +def autopad(k, p=None): # kernel, padding + # Pad to 'same' + if p is None: + p = k // 2 if isinstance(k, int) else [x // 2 for x in k] # auto-pad + return p + + +def DWConv(c1, c2, k=1, s=1, act=True): + # Depthwise convolution + return Conv(c1, c2, k, s, g=math.gcd(c1, c2), act=act) + + +class Conv(nn.Module): + # Standard convolution + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups + super(Conv, self).__init__() + self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g, bias=False) + self.bn = nn.BatchNorm2d(c2) + self.act = nn.SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity()) + + def forward(self, x): + return self.act(self.bn(self.conv(x))) + + def fuseforward(self, x): + return self.act(self.conv(x)) + + +class TransformerLayer(nn.Module): + # Transformer layer https://arxiv.org/abs/2010.11929 (LayerNorm layers removed for better performance) + def __init__(self, c, num_heads): + super().__init__() + self.q = nn.Linear(c, c, bias=False) + self.k = nn.Linear(c, c, bias=False) + self.v = nn.Linear(c, c, bias=False) + self.ma = nn.MultiheadAttention(embed_dim=c, num_heads=num_heads) + self.fc1 = nn.Linear(c, c, bias=False) + self.fc2 = nn.Linear(c, c, bias=False) + + def forward(self, x): + x = self.ma(self.q(x), self.k(x), self.v(x))[0] + x + x = self.fc2(self.fc1(x)) + x + return x + + +class TransformerBlock(nn.Module): + # Vision Transformer https://arxiv.org/abs/2010.11929 + def __init__(self, c1, c2, num_heads, num_layers): + super().__init__() + self.conv = None + if c1 != c2: + self.conv = Conv(c1, c2) + self.linear = nn.Linear(c2, c2) # learnable position embedding + self.tr = nn.Sequential(*[TransformerLayer(c2, num_heads) for _ in range(num_layers)]) + self.c2 = c2 + + def forward(self, x): + if self.conv is not None: + x = self.conv(x) + b, _, w, h = x.shape + p = x.flatten(2) + p = p.unsqueeze(0) + p = p.transpose(0, 3) + p = p.squeeze(3) + e = self.linear(p) + x = p + e + + x = self.tr(x) + x = x.unsqueeze(3) + x = x.transpose(0, 3) + x = x.reshape(b, self.c2, w, h) + return x + + +class Bottleneck(nn.Module): + # Standard bottleneck + def __init__(self, c1, c2, shortcut=True, g=1, e=0.5): # ch_in, ch_out, shortcut, groups, expansion + super(Bottleneck, self).__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = Conv(c_, c2, 3, 1, g=g) + self.add = shortcut and c1 == c2 + + def forward(self, x): + return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) + + +class BottleneckCSP(nn.Module): + # CSP Bottleneck https://github.com/WongKinYiu/CrossStagePartialNetworks + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion + super(BottleneckCSP, self).__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False) + self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False) + self.cv4 = Conv(2 * c_, c2, 1, 1) + self.bn = nn.BatchNorm2d(2 * c_) # applied to cat(cv2, cv3) + self.act = nn.LeakyReLU(0.1, inplace=True) + self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) + + def forward(self, x): + y1 = self.cv3(self.m(self.cv1(x))) + y2 = self.cv2(x) + return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1)))) + + +class C3(nn.Module): + # CSP Bottleneck with 3 convolutions + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion + super(C3, self).__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = Conv(c1, c_, 1, 1) + self.cv3 = Conv(2 * c_, c2, 1) # act=FReLU(c2) + self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)]) + # self.m = nn.Sequential(*[CrossConv(c_, c_, 3, 1, g, 1.0, shortcut) for _ in range(n)]) + + def forward(self, x): + return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), dim=1)) + + +class C3TR(C3): + # C3 module with TransformerBlock() + def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5): + super().__init__(c1, c2, n, shortcut, g, e) + c_ = int(c2 * e) + self.m = TransformerBlock(c_, c_, 4, n) + + +class SPP(nn.Module): + # Spatial pyramid pooling layer used in YOLOv3-SPP + def __init__(self, c1, c2, k=(5, 9, 13)): + super(SPP, self).__init__() + c_ = c1 // 2 # hidden channels + self.cv1 = Conv(c1, c_, 1, 1) + self.cv2 = Conv(c_ * (len(k) + 1), c2, 1, 1) + self.m = nn.ModuleList([nn.MaxPool2d(kernel_size=x, stride=1, padding=x // 2) for x in k]) + + def forward(self, x): + x = self.cv1(x) + return self.cv2(torch.cat([x] + [m(x) for m in self.m], 1)) + + +class Focus(nn.Module): + # Focus wh information into c-space + def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True): # ch_in, ch_out, kernel, stride, padding, groups + super(Focus, self).__init__() + self.conv = Conv(c1 * 4, c2, k, s, p, g, act) + # self.contract = Contract(gain=2) + + def forward(self, x): # x(b,c,w,h) -> y(b,4c,w/2,h/2) + return self.conv(torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)) + # return self.conv(self.contract(x)) + + +class Contract(nn.Module): + # Contract width-height into channels, i.e. x(1,64,80,80) to x(1,256,40,40) + def __init__(self, gain=2): + super().__init__() + self.gain = gain + + def forward(self, x): + N, C, H, W = x.size() # assert (H / s == 0) and (W / s == 0), 'Indivisible gain' + s = self.gain + x = x.view(N, C, H // s, s, W // s, s) # x(1,64,40,2,40,2) + x = x.permute(0, 3, 5, 1, 2, 4).contiguous() # x(1,2,2,64,40,40) + return x.view(N, C * s * s, H // s, W // s) # x(1,256,40,40) + + +class Expand(nn.Module): + # Expand channels into width-height, i.e. x(1,64,80,80) to x(1,16,160,160) + def __init__(self, gain=2): + super().__init__() + self.gain = gain + + def forward(self, x): + N, C, H, W = x.size() # assert C / s ** 2 == 0, 'Indivisible gain' + s = self.gain + x = x.view(N, s, s, C // s ** 2, H, W) # x(1,2,2,16,80,80) + x = x.permute(0, 3, 4, 1, 5, 2).contiguous() # x(1,16,80,2,80,2) + return x.view(N, C // s ** 2, H * s, W * s) # x(1,16,160,160) + + +class Concat(nn.Module): + # Concatenate a list of tensors along dimension + def __init__(self, dimension=1): + super(Concat, self).__init__() + self.d = dimension + + def forward(self, x): + return torch.cat(x, self.d) + + +class NMS(nn.Module): + # Non-Maximum Suppression (NMS) module + conf = 0.25 # confidence threshold + iou = 0.45 # IoU threshold + classes = None # (optional list) filter by class + max_det = 1000 # maximum number of detections per image + + def __init__(self): + super(NMS, self).__init__() + + def forward(self, x): + return non_max_suppression(x[0], self.conf, iou_thres=self.iou, classes=self.classes, max_det=self.max_det) + + +class AutoShape(nn.Module): + # input-robust model wrapper for passing cv2/np/PIL/torch inputs. Includes preprocessing, inference and NMS + conf = 0.25 # NMS confidence threshold + iou = 0.45 # NMS IoU threshold + classes = None # (optional list) filter by class + max_det = 1000 # maximum number of detections per image + + def __init__(self, model): + super(AutoShape, self).__init__() + self.model = model.eval() + + def autoshape(self): + print('AutoShape already enabled, skipping... ') # model already converted to model.autoshape() + return self + + @torch.no_grad() + def forward(self, imgs, size=640, augment=False, profile=False): + # Inference from various sources. For height=640, width=1280, RGB images example inputs are: + # filename: imgs = 'data/images/zidane.jpg' + # URI: = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/zidane.jpg' + # OpenCV: = cv2.imread('image.jpg')[:,:,::-1] # HWC BGR to RGB x(640,1280,3) + # PIL: = Image.open('image.jpg') # HWC x(640,1280,3) + # numpy: = np.zeros((640,1280,3)) # HWC + # torch: = torch.zeros(16,3,320,640) # BCHW (scaled to size=640, 0-1 values) + # multiple: = [Image.open('image1.jpg'), Image.open('image2.jpg'), ...] # list of images + + t = [time_synchronized()] + p = next(self.model.parameters()) # for device and type + if isinstance(imgs, torch.Tensor): # torch + with amp.autocast(enabled=p.device.type != 'cpu'): + return self.model(imgs.to(p.device).type_as(p), augment, profile) # inference + + # Pre-process + n, imgs = (len(imgs), imgs) if isinstance(imgs, list) else (1, [imgs]) # number of images, list of images + shape0, shape1, files = [], [], [] # image and inference shapes, filenames + for i, im in enumerate(imgs): + f = f'image{i}' # filename + if isinstance(im, str): # filename or uri + im, f = np.asarray(Image.open(requests.get(im, stream=True).raw if im.startswith('http') else im)), im + elif isinstance(im, Image.Image): # PIL Image + im, f = np.asarray(im), getattr(im, 'filename', f) or f + files.append(Path(f).with_suffix('.jpg').name) + if im.shape[0] < 5: # image in CHW + im = im.transpose((1, 2, 0)) # reverse dataloader .transpose(2, 0, 1) + im = im[:, :, :3] if im.ndim == 3 else np.tile(im[:, :, None], 3) # enforce 3ch input + s = im.shape[:2] # HWC + shape0.append(s) # image shape + g = (size / max(s)) # gain + shape1.append([y * g for y in s]) + imgs[i] = im if im.data.contiguous else np.ascontiguousarray(im) # update + shape1 = [make_divisible(x, int(self.stride.max())) for x in np.stack(shape1, 0).max(0)] # inference shape + x = [letterbox(im, new_shape=shape1, auto=False)[0] for im in imgs] # pad + x = np.stack(x, 0) if n > 1 else x[0][None] # stack + x = np.ascontiguousarray(x.transpose((0, 3, 1, 2))) # BHWC to BCHW + x = torch.from_numpy(x).to(p.device).type_as(p) / 255. # uint8 to fp16/32 + t.append(time_synchronized()) + + with amp.autocast(enabled=p.device.type != 'cpu'): + # Inference + y = self.model(x, augment, profile)[0] # forward + t.append(time_synchronized()) + + # Post-process + y = non_max_suppression(y, self.conf, iou_thres=self.iou, classes=self.classes, max_det=self.max_det) # NMS + for i in range(n): + scale_coords(shape1, y[i][:, :4], shape0[i]) + + t.append(time_synchronized()) + return Detections(imgs, y, files, t, self.names, x.shape) + + +class Detections: + # detections class for YOLOv5 inference results + def __init__(self, imgs, pred, files, times=None, names=None, shape=None): + super(Detections, self).__init__() + d = pred[0].device # device + gn = [torch.tensor([*[im.shape[i] for i in [1, 0, 1, 0]], 1., 1.], device=d) for im in imgs] # normalizations + self.imgs = imgs # list of images as numpy arrays + self.pred = pred # list of tensors pred[0] = (xyxy, conf, cls) + self.names = names # class names + self.files = files # image filenames + self.xyxy = pred # xyxy pixels + self.xywh = [xyxy2xywh(x) for x in pred] # xywh pixels + self.xyxyn = [x / g for x, g in zip(self.xyxy, gn)] # xyxy normalized + self.xywhn = [x / g for x, g in zip(self.xywh, gn)] # xywh normalized + self.n = len(self.pred) # number of images (batch size) + self.t = tuple((times[i + 1] - times[i]) * 1000 / self.n for i in range(3)) # timestamps (ms) + self.s = shape # inference BCHW shape + + def display(self, pprint=False, show=False, save=False, crop=False, render=False, save_dir=Path('')): + for i, (im, pred) in enumerate(zip(self.imgs, self.pred)): + str = f'image {i + 1}/{len(self.pred)}: {im.shape[0]}x{im.shape[1]} ' + if pred is not None: + for c in pred[:, -1].unique(): + n = (pred[:, -1] == c).sum() # detections per class + str += f"{n} {self.names[int(c)]}{'s' * (n > 1)}, " # add to string + if show or save or render or crop: + for *box, conf, cls in pred: # xyxy, confidence, class + label = f'{self.names[int(cls)]} {conf:.2f}' + if crop: + save_one_box(box, im, file=save_dir / 'crops' / self.names[int(cls)] / self.files[i]) + else: # all others + plot_one_box(box, im, label=label, color=colors(cls)) + + im = Image.fromarray(im.astype(np.uint8)) if isinstance(im, np.ndarray) else im # from np + if pprint: + print(str.rstrip(', ')) + if show: + im.show(self.files[i]) # show + if save: + f = self.files[i] + im.save(save_dir / f) # save + print(f"{'Saved' * (i == 0)} {f}", end=',' if i < self.n - 1 else f' to {save_dir}\n') + if render: + self.imgs[i] = np.asarray(im) + + def print(self): + self.display(pprint=True) # print results + print(f'Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape {tuple(self.s)}' % self.t) + + def show(self): + self.display(show=True) # show results + + def save(self, save_dir='runs/hub/exp'): + save_dir = increment_path(save_dir, exist_ok=save_dir != 'runs/hub/exp', mkdir=True) # increment save_dir + self.display(save=True, save_dir=save_dir) # save results + + def crop(self, save_dir='runs/hub/exp'): + save_dir = increment_path(save_dir, exist_ok=save_dir != 'runs/hub/exp', mkdir=True) # increment save_dir + self.display(crop=True, save_dir=save_dir) # crop results + print(f'Saved results to {save_dir}\n') + + def render(self): + self.display(render=True) # render results + return self.imgs + + def pandas(self): + # return detections as pandas DataFrames, i.e. print(results.pandas().xyxy[0]) + new = copy(self) # return copy + ca = 'xmin', 'ymin', 'xmax', 'ymax', 'confidence', 'class', 'name' # xyxy columns + cb = 'xcenter', 'ycenter', 'width', 'height', 'confidence', 'class', 'name' # xywh columns + for k, c in zip(['xyxy', 'xyxyn', 'xywh', 'xywhn'], [ca, ca, cb, cb]): + a = [[x[:5] + [int(x[5]), self.names[int(x[5])]] for x in x.tolist()] for x in getattr(self, k)] # update + setattr(new, k, [pd.DataFrame(x, columns=c) for x in a]) + return new + + def tolist(self): + # return a list of Detections objects, i.e. 'for result in results.tolist():' + x = [Detections([self.imgs[i]], [self.pred[i]], self.names, self.s) for i in range(self.n)] + for d in x: + for k in ['imgs', 'pred', 'xyxy', 'xyxyn', 'xywh', 'xywhn']: + setattr(d, k, getattr(d, k)[0]) # pop out of list + return x + + def __len__(self): + return self.n + + +class Classify(nn.Module): + # Classification head, i.e. x(b,c1,20,20) to x(b,c2) + def __init__(self, c1, c2, k=1, s=1, p=None, g=1): # ch_in, ch_out, kernel, stride, padding, groups + super(Classify, self).__init__() + self.aap = nn.AdaptiveAvgPool2d(1) # to x(b,c1,1,1) + self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p), groups=g) # to x(b,c2,1,1) + self.flat = nn.Flatten() + + def forward(self, x): + z = torch.cat([self.aap(y) for y in (x if isinstance(x, list) else [x])], 1) # cat if list + return self.flat(self.conv(z)) # flatten to x(b,c2) diff --git a/Yolov5-Deepsort/models/experimental.py b/Yolov5-Deepsort/models/experimental.py new file mode 100644 index 0000000000000000000000000000000000000000..afa787907104f1134335ed3ac7bfdd8ac4fd4ae9 --- /dev/null +++ b/Yolov5-Deepsort/models/experimental.py @@ -0,0 +1,137 @@ +# YOLOv5 experimental modules + +import numpy as np +import torch +import torch.nn as nn + +from models.common import Conv, DWConv +from utils.google_utils import attempt_download + + +class CrossConv(nn.Module): + # Cross Convolution Downsample + def __init__(self, c1, c2, k=3, s=1, g=1, e=1.0, shortcut=False): + # ch_in, ch_out, kernel, stride, groups, expansion, shortcut + super(CrossConv, self).__init__() + c_ = int(c2 * e) # hidden channels + self.cv1 = Conv(c1, c_, (1, k), (1, s)) + self.cv2 = Conv(c_, c2, (k, 1), (s, 1), g=g) + self.add = shortcut and c1 == c2 + + def forward(self, x): + return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) + + +class Sum(nn.Module): + # Weighted sum of 2 or more layers https://arxiv.org/abs/1911.09070 + def __init__(self, n, weight=False): # n: number of inputs + super(Sum, self).__init__() + self.weight = weight # apply weights boolean + self.iter = range(n - 1) # iter object + if weight: + self.w = nn.Parameter(-torch.arange(1., n) / 2, requires_grad=True) # layer weights + + def forward(self, x): + y = x[0] # no weight + if self.weight: + w = torch.sigmoid(self.w) * 2 + for i in self.iter: + y = y + x[i + 1] * w[i] + else: + for i in self.iter: + y = y + x[i + 1] + return y + + +class GhostConv(nn.Module): + # Ghost Convolution https://github.com/huawei-noah/ghostnet + def __init__(self, c1, c2, k=1, s=1, g=1, act=True): # ch_in, ch_out, kernel, stride, groups + super(GhostConv, self).__init__() + c_ = c2 // 2 # hidden channels + self.cv1 = Conv(c1, c_, k, s, None, g, act) + self.cv2 = Conv(c_, c_, 5, 1, None, c_, act) + + def forward(self, x): + y = self.cv1(x) + return torch.cat([y, self.cv2(y)], 1) + + +class GhostBottleneck(nn.Module): + # Ghost Bottleneck https://github.com/huawei-noah/ghostnet + def __init__(self, c1, c2, k=3, s=1): # ch_in, ch_out, kernel, stride + super(GhostBottleneck, self).__init__() + c_ = c2 // 2 + self.conv = nn.Sequential(GhostConv(c1, c_, 1, 1), # pw + DWConv(c_, c_, k, s, act=False) if s == 2 else nn.Identity(), # dw + GhostConv(c_, c2, 1, 1, act=False)) # pw-linear + self.shortcut = nn.Sequential(DWConv(c1, c1, k, s, act=False), + Conv(c1, c2, 1, 1, act=False)) if s == 2 else nn.Identity() + + def forward(self, x): + return self.conv(x) + self.shortcut(x) + + +class MixConv2d(nn.Module): + # Mixed Depthwise Conv https://arxiv.org/abs/1907.09595 + def __init__(self, c1, c2, k=(1, 3), s=1, equal_ch=True): + super(MixConv2d, self).__init__() + groups = len(k) + if equal_ch: # equal c_ per group + i = torch.linspace(0, groups - 1E-6, c2).floor() # c2 indices + c_ = [(i == g).sum() for g in range(groups)] # intermediate channels + else: # equal weight.numel() per group + b = [c2] + [0] * groups + a = np.eye(groups + 1, groups, k=-1) + a -= np.roll(a, 1, axis=1) + a *= np.array(k) ** 2 + a[0] = 1 + c_ = np.linalg.lstsq(a, b, rcond=None)[0].round() # solve for equal weight indices, ax = b + + self.m = nn.ModuleList([nn.Conv2d(c1, int(c_[g]), k[g], s, k[g] // 2, bias=False) for g in range(groups)]) + self.bn = nn.BatchNorm2d(c2) + self.act = nn.LeakyReLU(0.1, inplace=True) + + def forward(self, x): + return x + self.act(self.bn(torch.cat([m(x) for m in self.m], 1))) + + +class Ensemble(nn.ModuleList): + # Ensemble of models + def __init__(self): + super(Ensemble, self).__init__() + + def forward(self, x, augment=False): + y = [] + for module in self: + y.append(module(x, augment)[0]) + # y = torch.stack(y).max(0)[0] # max ensemble + # y = torch.stack(y).mean(0) # mean ensemble + y = torch.cat(y, 1) # nms ensemble + return y, None # inference, train output + + +def attempt_load(weights, map_location=None, inplace=True): + from models.yolo import Detect, Model + + # Loads an ensemble of models weights=[a,b,c] or a single model weights=[a] or weights=a + model = Ensemble() + for w in weights if isinstance(weights, list) else [weights]: + attempt_download(w) + ckpt = torch.load(w, map_location=map_location) # load + model.append(ckpt['ema' if ckpt.get('ema') else 'model'].float().fuse().eval()) # FP32 model + + # Compatibility updates + for m in model.modules(): + if type(m) in [nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6, nn.SiLU, Detect, Model]: + m.inplace = inplace # pytorch 1.7.0 compatibility + elif type(m) is Conv: + m._non_persistent_buffers_set = set() # pytorch 1.6.0 compatibility + + if len(model) == 1: + return model[-1] # return model + else: + print(f'Ensemble created with {weights}\n') + for k in ['names']: + setattr(model, k, getattr(model[-1], k)) + model.stride = model[torch.argmax(torch.tensor([m.stride.max() for m in model])).int()].stride # max stride + return model # return ensemble diff --git a/Yolov5-Deepsort/models/export.py b/Yolov5-Deepsort/models/export.py new file mode 100644 index 0000000000000000000000000000000000000000..65721f65d88835bfba6a7b5318af26ae8890bd8a --- /dev/null +++ b/Yolov5-Deepsort/models/export.py @@ -0,0 +1,143 @@ +"""Exports a YOLOv5 *.pt model to TorchScript, ONNX, CoreML formats + +Usage: + $ python path/to/models/export.py --weights yolov5s.pt --img 640 --batch 1 +""" + +import argparse +import sys +import time +from pathlib import Path + +sys.path.append(Path(__file__).parent.parent.absolute().__str__()) # to run '$ python *.py' files in subdirectories + +import torch +import torch.nn as nn +from torch.utils.mobile_optimizer import optimize_for_mobile + +import models +from models.experimental import attempt_load +from utils.activations import Hardswish, SiLU +from utils.general import colorstr, check_img_size, check_requirements, file_size, set_logging +from utils.torch_utils import select_device + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--weights', type=str, default='./yolov5s.pt', help='weights path') + parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='image size') # height, width + parser.add_argument('--batch-size', type=int, default=1, help='batch size') + parser.add_argument('--device', default='cpu', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') + parser.add_argument('--include', nargs='+', default=['torchscript', 'onnx', 'coreml'], help='include formats') + parser.add_argument('--half', action='store_true', help='FP16 half-precision export') + parser.add_argument('--inplace', action='store_true', help='set YOLOv5 Detect() inplace=True') + parser.add_argument('--train', action='store_true', help='model.train() mode') + parser.add_argument('--optimize', action='store_true', help='optimize TorchScript for mobile') # TorchScript-only + parser.add_argument('--dynamic', action='store_true', help='dynamic ONNX axes') # ONNX-only + parser.add_argument('--simplify', action='store_true', help='simplify ONNX model') # ONNX-only + parser.add_argument('--opset-version', type=int, default=12, help='ONNX opset version') # ONNX-only + opt = parser.parse_args() + opt.img_size *= 2 if len(opt.img_size) == 1 else 1 # expand + opt.include = [x.lower() for x in opt.include] + print(opt) + set_logging() + t = time.time() + + # Load PyTorch model + device = select_device(opt.device) + model = attempt_load(opt.weights, map_location=device) # load FP32 model + labels = model.names + + # Checks + gs = int(max(model.stride)) # grid size (max stride) + opt.img_size = [check_img_size(x, gs) for x in opt.img_size] # verify img_size are gs-multiples + assert not (opt.device.lower() == 'cpu' and opt.half), '--half only compatible with GPU export, i.e. use --device 0' + + # Input + img = torch.zeros(opt.batch_size, 3, *opt.img_size).to(device) # image size(1,3,320,192) iDetection + + # Update model + if opt.half: + img, model = img.half(), model.half() # to FP16 + if opt.train: + model.train() # training mode (no grid construction in Detect layer) + for k, m in model.named_modules(): + m._non_persistent_buffers_set = set() # pytorch 1.6.0 compatibility + if isinstance(m, models.common.Conv): # assign export-friendly activations + if isinstance(m.act, nn.Hardswish): + m.act = Hardswish() + elif isinstance(m.act, nn.SiLU): + m.act = SiLU() + elif isinstance(m, models.yolo.Detect): + m.inplace = opt.inplace + m.onnx_dynamic = opt.dynamic + # m.forward = m.forward_export # assign forward (optional) + + for _ in range(2): + y = model(img) # dry runs + print(f"\n{colorstr('PyTorch:')} starting from {opt.weights} ({file_size(opt.weights):.1f} MB)") + + # TorchScript export ----------------------------------------------------------------------------------------------- + if 'torchscript' in opt.include or 'coreml' in opt.include: + prefix = colorstr('TorchScript:') + try: + print(f'\n{prefix} starting export with torch {torch.__version__}...') + f = opt.weights.replace('.pt', '.torchscript.pt') # filename + ts = torch.jit.trace(model, img, strict=False) + (optimize_for_mobile(ts) if opt.optimize else ts).save(f) + print(f'{prefix} export success, saved as {f} ({file_size(f):.1f} MB)') + except Exception as e: + print(f'{prefix} export failure: {e}') + + # ONNX export ------------------------------------------------------------------------------------------------------ + if 'onnx' in opt.include: + prefix = colorstr('ONNX:') + try: + import onnx + + print(f'{prefix} starting export with onnx {onnx.__version__}...') + f = opt.weights.replace('.pt', '.onnx') # filename + torch.onnx.export(model, img, f, verbose=False, opset_version=opt.opset_version, input_names=['images'], + dynamic_axes={'images': {0: 'batch', 2: 'height', 3: 'width'}, # size(1,3,640,640) + 'output': {0: 'batch', 2: 'y', 3: 'x'}} if opt.dynamic else None) + + # Checks + model_onnx = onnx.load(f) # load onnx model + onnx.checker.check_model(model_onnx) # check onnx model + # print(onnx.helper.printable_graph(model_onnx.graph)) # print + + # Simplify + if opt.simplify: + try: + check_requirements(['onnx-simplifier']) + import onnxsim + + print(f'{prefix} simplifying with onnx-simplifier {onnxsim.__version__}...') + model_onnx, check = onnxsim.simplify( + model_onnx, + dynamic_input_shape=opt.dynamic, + input_shapes={'images': list(img.shape)} if opt.dynamic else None) + assert check, 'assert check failed' + onnx.save(model_onnx, f) + except Exception as e: + print(f'{prefix} simplifier failure: {e}') + print(f'{prefix} export success, saved as {f} ({file_size(f):.1f} MB)') + except Exception as e: + print(f'{prefix} export failure: {e}') + + # CoreML export ---------------------------------------------------------------------------------------------------- + if 'coreml' in opt.include: + prefix = colorstr('CoreML:') + try: + import coremltools as ct + + print(f'{prefix} starting export with coremltools {ct.__version__}...') + assert opt.train, 'CoreML exports should be placed in model.train() mode with `python export.py --train`' + model = ct.convert(ts, inputs=[ct.ImageType('image', shape=img.shape, scale=1 / 255.0, bias=[0, 0, 0])]) + f = opt.weights.replace('.pt', '.mlmodel') # filename + model.save(f) + print(f'{prefix} export success, saved as {f} ({file_size(f):.1f} MB)') + except Exception as e: + print(f'{prefix} export failure: {e}') + + # Finish + print(f'\nExport complete ({time.time() - t:.2f}s). Visualize with https://github.com/lutzroeder/netron.') diff --git a/Yolov5-Deepsort/models/hub/anchors.yaml b/Yolov5-Deepsort/models/hub/anchors.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a07a4dc72387ef79ee0d473ac1055d23c6543ee9 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/anchors.yaml @@ -0,0 +1,58 @@ +# Default YOLOv5 anchors for COCO data + + +# P5 ------------------------------------------------------------------------------------------------------------------- +# P5-640: +anchors_p5_640: + - [ 10,13, 16,30, 33,23 ] # P3/8 + - [ 30,61, 62,45, 59,119 ] # P4/16 + - [ 116,90, 156,198, 373,326 ] # P5/32 + + +# P6 ------------------------------------------------------------------------------------------------------------------- +# P6-640: thr=0.25: 0.9964 BPR, 5.54 anchors past thr, n=12, img_size=640, metric_all=0.281/0.716-mean/best, past_thr=0.469-mean: 9,11, 21,19, 17,41, 43,32, 39,70, 86,64, 65,131, 134,130, 120,265, 282,180, 247,354, 512,387 +anchors_p6_640: + - [ 9,11, 21,19, 17,41 ] # P3/8 + - [ 43,32, 39,70, 86,64 ] # P4/16 + - [ 65,131, 134,130, 120,265 ] # P5/32 + - [ 282,180, 247,354, 512,387 ] # P6/64 + +# P6-1280: thr=0.25: 0.9950 BPR, 5.55 anchors past thr, n=12, img_size=1280, metric_all=0.281/0.714-mean/best, past_thr=0.468-mean: 19,27, 44,40, 38,94, 96,68, 86,152, 180,137, 140,301, 303,264, 238,542, 436,615, 739,380, 925,792 +anchors_p6_1280: + - [ 19,27, 44,40, 38,94 ] # P3/8 + - [ 96,68, 86,152, 180,137 ] # P4/16 + - [ 140,301, 303,264, 238,542 ] # P5/32 + - [ 436,615, 739,380, 925,792 ] # P6/64 + +# P6-1920: thr=0.25: 0.9950 BPR, 5.55 anchors past thr, n=12, img_size=1920, metric_all=0.281/0.714-mean/best, past_thr=0.468-mean: 28,41, 67,59, 57,141, 144,103, 129,227, 270,205, 209,452, 455,396, 358,812, 653,922, 1109,570, 1387,1187 +anchors_p6_1920: + - [ 28,41, 67,59, 57,141 ] # P3/8 + - [ 144,103, 129,227, 270,205 ] # P4/16 + - [ 209,452, 455,396, 358,812 ] # P5/32 + - [ 653,922, 1109,570, 1387,1187 ] # P6/64 + + +# P7 ------------------------------------------------------------------------------------------------------------------- +# P7-640: thr=0.25: 0.9962 BPR, 6.76 anchors past thr, n=15, img_size=640, metric_all=0.275/0.733-mean/best, past_thr=0.466-mean: 11,11, 13,30, 29,20, 30,46, 61,38, 39,92, 78,80, 146,66, 79,163, 149,150, 321,143, 157,303, 257,402, 359,290, 524,372 +anchors_p7_640: + - [ 11,11, 13,30, 29,20 ] # P3/8 + - [ 30,46, 61,38, 39,92 ] # P4/16 + - [ 78,80, 146,66, 79,163 ] # P5/32 + - [ 149,150, 321,143, 157,303 ] # P6/64 + - [ 257,402, 359,290, 524,372 ] # P7/128 + +# P7-1280: thr=0.25: 0.9968 BPR, 6.71 anchors past thr, n=15, img_size=1280, metric_all=0.273/0.732-mean/best, past_thr=0.463-mean: 19,22, 54,36, 32,77, 70,83, 138,71, 75,173, 165,159, 148,334, 375,151, 334,317, 251,626, 499,474, 750,326, 534,814, 1079,818 +anchors_p7_1280: + - [ 19,22, 54,36, 32,77 ] # P3/8 + - [ 70,83, 138,71, 75,173 ] # P4/16 + - [ 165,159, 148,334, 375,151 ] # P5/32 + - [ 334,317, 251,626, 499,474 ] # P6/64 + - [ 750,326, 534,814, 1079,818 ] # P7/128 + +# P7-1920: thr=0.25: 0.9968 BPR, 6.71 anchors past thr, n=15, img_size=1920, metric_all=0.273/0.732-mean/best, past_thr=0.463-mean: 29,34, 81,55, 47,115, 105,124, 207,107, 113,259, 247,238, 222,500, 563,227, 501,476, 376,939, 749,711, 1126,489, 801,1222, 1618,1227 +anchors_p7_1920: + - [ 29,34, 81,55, 47,115 ] # P3/8 + - [ 105,124, 207,107, 113,259 ] # P4/16 + - [ 247,238, 222,500, 563,227 ] # P5/32 + - [ 501,476, 376,939, 749,711 ] # P6/64 + - [ 1126,489, 801,1222, 1618,1227 ] # P7/128 diff --git a/Yolov5-Deepsort/models/hub/yolov3-spp.yaml b/Yolov5-Deepsort/models/hub/yolov3-spp.yaml new file mode 100644 index 0000000000000000000000000000000000000000..38dcc449f0d0c1b85b4e6ff426da0d9e9df07d4e --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov3-spp.yaml @@ -0,0 +1,51 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# darknet53 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Conv, [32, 3, 1]], # 0 + [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 + [-1, 1, Bottleneck, [64]], + [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 + [-1, 2, Bottleneck, [128]], + [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 + [-1, 8, Bottleneck, [256]], + [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 + [-1, 8, Bottleneck, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 + [-1, 4, Bottleneck, [1024]], # 10 + ] + +# YOLOv3-SPP head +head: + [[-1, 1, Bottleneck, [1024, False]], + [-1, 1, SPP, [512, [5, 9, 13]]], + [-1, 1, Conv, [1024, 3, 1]], + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large) + + [-2, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 8], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium) + + [-2, 1, Conv, [128, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P3 + [-1, 1, Bottleneck, [256, False]], + [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small) + + [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov3-tiny.yaml b/Yolov5-Deepsort/models/hub/yolov3-tiny.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ff7638cad3beb5a0186cc67b84e23799ffb53bae --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov3-tiny.yaml @@ -0,0 +1,41 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: + - [10,14, 23,27, 37,58] # P4/16 + - [81,82, 135,169, 344,319] # P5/32 + +# YOLOv3-tiny backbone +backbone: + # [from, number, module, args] + [[-1, 1, Conv, [16, 3, 1]], # 0 + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 1-P1/2 + [-1, 1, Conv, [32, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 3-P2/4 + [-1, 1, Conv, [64, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 5-P3/8 + [-1, 1, Conv, [128, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 7-P4/16 + [-1, 1, Conv, [256, 3, 1]], + [-1, 1, nn.MaxPool2d, [2, 2, 0]], # 9-P5/32 + [-1, 1, Conv, [512, 3, 1]], + [-1, 1, nn.ZeroPad2d, [[0, 1, 0, 1]]], # 11 + [-1, 1, nn.MaxPool2d, [2, 1, 0]], # 12 + ] + +# YOLOv3-tiny head +head: + [[-1, 1, Conv, [1024, 3, 1]], + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, Conv, [512, 3, 1]], # 15 (P5/32-large) + + [-2, 1, Conv, [128, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 8], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Conv, [256, 3, 1]], # 19 (P4/16-medium) + + [[19, 15], 1, Detect, [nc, anchors]], # Detect(P4, P5) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov3.yaml b/Yolov5-Deepsort/models/hub/yolov3.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f2e76135546945f3ccbb3311c99bf3882a90c199 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov3.yaml @@ -0,0 +1,51 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# darknet53 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Conv, [32, 3, 1]], # 0 + [-1, 1, Conv, [64, 3, 2]], # 1-P1/2 + [-1, 1, Bottleneck, [64]], + [-1, 1, Conv, [128, 3, 2]], # 3-P2/4 + [-1, 2, Bottleneck, [128]], + [-1, 1, Conv, [256, 3, 2]], # 5-P3/8 + [-1, 8, Bottleneck, [256]], + [-1, 1, Conv, [512, 3, 2]], # 7-P4/16 + [-1, 8, Bottleneck, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 9-P5/32 + [-1, 4, Bottleneck, [1024]], # 10 + ] + +# YOLOv3 head +head: + [[-1, 1, Bottleneck, [1024, False]], + [-1, 1, Conv, [512, [1, 1]]], + [-1, 1, Conv, [1024, 3, 1]], + [-1, 1, Conv, [512, 1, 1]], + [-1, 1, Conv, [1024, 3, 1]], # 15 (P5/32-large) + + [-2, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 8], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Bottleneck, [512, False]], + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, Conv, [512, 3, 1]], # 22 (P4/16-medium) + + [-2, 1, Conv, [128, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P3 + [-1, 1, Bottleneck, [256, False]], + [-1, 2, Bottleneck, [256, False]], # 27 (P3/8-small) + + [[27, 22, 15], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5-fpn.yaml b/Yolov5-Deepsort/models/hub/yolov5-fpn.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e772bffecbbca75c536cd43d9e1659e41910b337 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5-fpn.yaml @@ -0,0 +1,42 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Focus, [64, 3]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, Bottleneck, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 9, BottleneckCSP, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, BottleneckCSP, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 1, SPP, [1024, [5, 9, 13]]], + [-1, 6, BottleneckCSP, [1024]], # 9 + ] + +# YOLOv5 FPN head +head: + [[-1, 3, BottleneckCSP, [1024, False]], # 10 (P5/32-large) + + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 1, Conv, [512, 1, 1]], + [-1, 3, BottleneckCSP, [512, False]], # 14 (P4/16-medium) + + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 1, Conv, [256, 1, 1]], + [-1, 3, BottleneckCSP, [256, False]], # 18 (P3/8-small) + + [[18, 14, 10], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5-p2.yaml b/Yolov5-Deepsort/models/hub/yolov5-p2.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0633a90fd065efce8d9c771da36815ae353fa2f2 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5-p2.yaml @@ -0,0 +1,54 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: 3 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [ [ -1, 1, Focus, [ 64, 3 ] ], # 0-P1/2 + [ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4 + [ -1, 3, C3, [ 128 ] ], + [ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8 + [ -1, 9, C3, [ 256 ] ], + [ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16 + [ -1, 9, C3, [ 512 ] ], + [ -1, 1, Conv, [ 1024, 3, 2 ] ], # 7-P5/32 + [ -1, 1, SPP, [ 1024, [ 5, 9, 13 ] ] ], + [ -1, 3, C3, [ 1024, False ] ], # 9 + ] + +# YOLOv5 head +head: + [ [ -1, 1, Conv, [ 512, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P4 + [ -1, 3, C3, [ 512, False ] ], # 13 + + [ -1, 1, Conv, [ 256, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3 + [ -1, 3, C3, [ 256, False ] ], # 17 (P3/8-small) + + [ -1, 1, Conv, [ 128, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 2 ], 1, Concat, [ 1 ] ], # cat backbone P2 + [ -1, 1, C3, [ 128, False ] ], # 21 (P2/4-xsmall) + + [ -1, 1, Conv, [ 128, 3, 2 ] ], + [ [ -1, 18 ], 1, Concat, [ 1 ] ], # cat head P3 + [ -1, 3, C3, [ 256, False ] ], # 24 (P3/8-small) + + [ -1, 1, Conv, [ 256, 3, 2 ] ], + [ [ -1, 14 ], 1, Concat, [ 1 ] ], # cat head P4 + [ -1, 3, C3, [ 512, False ] ], # 27 (P4/16-medium) + + [ -1, 1, Conv, [ 512, 3, 2 ] ], + [ [ -1, 10 ], 1, Concat, [ 1 ] ], # cat head P5 + [ -1, 3, C3, [ 1024, False ] ], # 30 (P5/32-large) + + [ [ 24, 27, 30 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5-p6.yaml b/Yolov5-Deepsort/models/hub/yolov5-p6.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3728a118f09016eebc68538e7651134e070bd79f --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5-p6.yaml @@ -0,0 +1,56 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: 3 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [ [ -1, 1, Focus, [ 64, 3 ] ], # 0-P1/2 + [ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4 + [ -1, 3, C3, [ 128 ] ], + [ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8 + [ -1, 9, C3, [ 256 ] ], + [ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16 + [ -1, 9, C3, [ 512 ] ], + [ -1, 1, Conv, [ 768, 3, 2 ] ], # 7-P5/32 + [ -1, 3, C3, [ 768 ] ], + [ -1, 1, Conv, [ 1024, 3, 2 ] ], # 9-P6/64 + [ -1, 1, SPP, [ 1024, [ 3, 5, 7 ] ] ], + [ -1, 3, C3, [ 1024, False ] ], # 11 + ] + +# YOLOv5 head +head: + [ [ -1, 1, Conv, [ 768, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 8 ], 1, Concat, [ 1 ] ], # cat backbone P5 + [ -1, 3, C3, [ 768, False ] ], # 15 + + [ -1, 1, Conv, [ 512, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P4 + [ -1, 3, C3, [ 512, False ] ], # 19 + + [ -1, 1, Conv, [ 256, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3 + [ -1, 3, C3, [ 256, False ] ], # 23 (P3/8-small) + + [ -1, 1, Conv, [ 256, 3, 2 ] ], + [ [ -1, 20 ], 1, Concat, [ 1 ] ], # cat head P4 + [ -1, 3, C3, [ 512, False ] ], # 26 (P4/16-medium) + + [ -1, 1, Conv, [ 512, 3, 2 ] ], + [ [ -1, 16 ], 1, Concat, [ 1 ] ], # cat head P5 + [ -1, 3, C3, [ 768, False ] ], # 29 (P5/32-large) + + [ -1, 1, Conv, [ 768, 3, 2 ] ], + [ [ -1, 12 ], 1, Concat, [ 1 ] ], # cat head P6 + [ -1, 3, C3, [ 1024, False ] ], # 32 (P5/64-xlarge) + + [ [ 23, 26, 29, 32 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5, P6) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5-p7.yaml b/Yolov5-Deepsort/models/hub/yolov5-p7.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ca8f8492ce0e9750e1856ac67f19ff4bf92d1948 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5-p7.yaml @@ -0,0 +1,67 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: 3 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [ [ -1, 1, Focus, [ 64, 3 ] ], # 0-P1/2 + [ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4 + [ -1, 3, C3, [ 128 ] ], + [ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8 + [ -1, 9, C3, [ 256 ] ], + [ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16 + [ -1, 9, C3, [ 512 ] ], + [ -1, 1, Conv, [ 768, 3, 2 ] ], # 7-P5/32 + [ -1, 3, C3, [ 768 ] ], + [ -1, 1, Conv, [ 1024, 3, 2 ] ], # 9-P6/64 + [ -1, 3, C3, [ 1024 ] ], + [ -1, 1, Conv, [ 1280, 3, 2 ] ], # 11-P7/128 + [ -1, 1, SPP, [ 1280, [ 3, 5 ] ] ], + [ -1, 3, C3, [ 1280, False ] ], # 13 + ] + +# YOLOv5 head +head: + [ [ -1, 1, Conv, [ 1024, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 10 ], 1, Concat, [ 1 ] ], # cat backbone P6 + [ -1, 3, C3, [ 1024, False ] ], # 17 + + [ -1, 1, Conv, [ 768, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 8 ], 1, Concat, [ 1 ] ], # cat backbone P5 + [ -1, 3, C3, [ 768, False ] ], # 21 + + [ -1, 1, Conv, [ 512, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P4 + [ -1, 3, C3, [ 512, False ] ], # 25 + + [ -1, 1, Conv, [ 256, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3 + [ -1, 3, C3, [ 256, False ] ], # 29 (P3/8-small) + + [ -1, 1, Conv, [ 256, 3, 2 ] ], + [ [ -1, 26 ], 1, Concat, [ 1 ] ], # cat head P4 + [ -1, 3, C3, [ 512, False ] ], # 32 (P4/16-medium) + + [ -1, 1, Conv, [ 512, 3, 2 ] ], + [ [ -1, 22 ], 1, Concat, [ 1 ] ], # cat head P5 + [ -1, 3, C3, [ 768, False ] ], # 35 (P5/32-large) + + [ -1, 1, Conv, [ 768, 3, 2 ] ], + [ [ -1, 18 ], 1, Concat, [ 1 ] ], # cat head P6 + [ -1, 3, C3, [ 1024, False ] ], # 38 (P6/64-xlarge) + + [ -1, 1, Conv, [ 1024, 3, 2 ] ], + [ [ -1, 14 ], 1, Concat, [ 1 ] ], # cat head P7 + [ -1, 3, C3, [ 1280, False ] ], # 41 (P7/128-xxlarge) + + [ [ 29, 32, 35, 38, 41 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5, P6, P7) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5-panet.yaml b/Yolov5-Deepsort/models/hub/yolov5-panet.yaml new file mode 100644 index 0000000000000000000000000000000000000000..340f95a4dbc9a7a3250cd6e41422ea4c520991c8 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5-panet.yaml @@ -0,0 +1,48 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Focus, [64, 3]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, BottleneckCSP, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 9, BottleneckCSP, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, BottleneckCSP, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 1, SPP, [1024, [5, 9, 13]]], + [-1, 3, BottleneckCSP, [1024, False]], # 9 + ] + +# YOLOv5 PANet head +head: + [[-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, BottleneckCSP, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, BottleneckCSP, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, BottleneckCSP, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, BottleneckCSP, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5l6.yaml b/Yolov5-Deepsort/models/hub/yolov5l6.yaml new file mode 100644 index 0000000000000000000000000000000000000000..11298b01f47915d729c747714caf308b676ec579 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5l6.yaml @@ -0,0 +1,60 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: + - [ 19,27, 44,40, 38,94 ] # P3/8 + - [ 96,68, 86,152, 180,137 ] # P4/16 + - [ 140,301, 303,264, 238,542 ] # P5/32 + - [ 436,615, 739,380, 925,792 ] # P6/64 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [ [ -1, 1, Focus, [ 64, 3 ] ], # 0-P1/2 + [ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4 + [ -1, 3, C3, [ 128 ] ], + [ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8 + [ -1, 9, C3, [ 256 ] ], + [ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16 + [ -1, 9, C3, [ 512 ] ], + [ -1, 1, Conv, [ 768, 3, 2 ] ], # 7-P5/32 + [ -1, 3, C3, [ 768 ] ], + [ -1, 1, Conv, [ 1024, 3, 2 ] ], # 9-P6/64 + [ -1, 1, SPP, [ 1024, [ 3, 5, 7 ] ] ], + [ -1, 3, C3, [ 1024, False ] ], # 11 + ] + +# YOLOv5 head +head: + [ [ -1, 1, Conv, [ 768, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 8 ], 1, Concat, [ 1 ] ], # cat backbone P5 + [ -1, 3, C3, [ 768, False ] ], # 15 + + [ -1, 1, Conv, [ 512, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P4 + [ -1, 3, C3, [ 512, False ] ], # 19 + + [ -1, 1, Conv, [ 256, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3 + [ -1, 3, C3, [ 256, False ] ], # 23 (P3/8-small) + + [ -1, 1, Conv, [ 256, 3, 2 ] ], + [ [ -1, 20 ], 1, Concat, [ 1 ] ], # cat head P4 + [ -1, 3, C3, [ 512, False ] ], # 26 (P4/16-medium) + + [ -1, 1, Conv, [ 512, 3, 2 ] ], + [ [ -1, 16 ], 1, Concat, [ 1 ] ], # cat head P5 + [ -1, 3, C3, [ 768, False ] ], # 29 (P5/32-large) + + [ -1, 1, Conv, [ 768, 3, 2 ] ], + [ [ -1, 12 ], 1, Concat, [ 1 ] ], # cat head P6 + [ -1, 3, C3, [ 1024, False ] ], # 32 (P6/64-xlarge) + + [ [ 23, 26, 29, 32 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5, P6) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5m6.yaml b/Yolov5-Deepsort/models/hub/yolov5m6.yaml new file mode 100644 index 0000000000000000000000000000000000000000..48afc865593ae964493e8fbd042a72209ab6487f --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5m6.yaml @@ -0,0 +1,60 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 0.67 # model depth multiple +width_multiple: 0.75 # layer channel multiple + +# anchors +anchors: + - [ 19,27, 44,40, 38,94 ] # P3/8 + - [ 96,68, 86,152, 180,137 ] # P4/16 + - [ 140,301, 303,264, 238,542 ] # P5/32 + - [ 436,615, 739,380, 925,792 ] # P6/64 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [ [ -1, 1, Focus, [ 64, 3 ] ], # 0-P1/2 + [ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4 + [ -1, 3, C3, [ 128 ] ], + [ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8 + [ -1, 9, C3, [ 256 ] ], + [ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16 + [ -1, 9, C3, [ 512 ] ], + [ -1, 1, Conv, [ 768, 3, 2 ] ], # 7-P5/32 + [ -1, 3, C3, [ 768 ] ], + [ -1, 1, Conv, [ 1024, 3, 2 ] ], # 9-P6/64 + [ -1, 1, SPP, [ 1024, [ 3, 5, 7 ] ] ], + [ -1, 3, C3, [ 1024, False ] ], # 11 + ] + +# YOLOv5 head +head: + [ [ -1, 1, Conv, [ 768, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 8 ], 1, Concat, [ 1 ] ], # cat backbone P5 + [ -1, 3, C3, [ 768, False ] ], # 15 + + [ -1, 1, Conv, [ 512, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P4 + [ -1, 3, C3, [ 512, False ] ], # 19 + + [ -1, 1, Conv, [ 256, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3 + [ -1, 3, C3, [ 256, False ] ], # 23 (P3/8-small) + + [ -1, 1, Conv, [ 256, 3, 2 ] ], + [ [ -1, 20 ], 1, Concat, [ 1 ] ], # cat head P4 + [ -1, 3, C3, [ 512, False ] ], # 26 (P4/16-medium) + + [ -1, 1, Conv, [ 512, 3, 2 ] ], + [ [ -1, 16 ], 1, Concat, [ 1 ] ], # cat head P5 + [ -1, 3, C3, [ 768, False ] ], # 29 (P5/32-large) + + [ -1, 1, Conv, [ 768, 3, 2 ] ], + [ [ -1, 12 ], 1, Concat, [ 1 ] ], # cat head P6 + [ -1, 3, C3, [ 1024, False ] ], # 32 (P6/64-xlarge) + + [ [ 23, 26, 29, 32 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5, P6) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5s-transformer.yaml b/Yolov5-Deepsort/models/hub/yolov5s-transformer.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f2d666722b30508eea865cf4d51ce607589a60ec --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5s-transformer.yaml @@ -0,0 +1,48 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Focus, [64, 3]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 9, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 1, SPP, [1024, [5, 9, 13]]], + [-1, 3, C3TR, [1024, False]], # 9 <-------- C3TR() Transformer module + ] + +# YOLOv5 head +head: + [[-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5s6.yaml b/Yolov5-Deepsort/models/hub/yolov5s6.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1df577a2cc97c66763eafd37c70b97f6e893d4fd --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5s6.yaml @@ -0,0 +1,60 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple + +# anchors +anchors: + - [ 19,27, 44,40, 38,94 ] # P3/8 + - [ 96,68, 86,152, 180,137 ] # P4/16 + - [ 140,301, 303,264, 238,542 ] # P5/32 + - [ 436,615, 739,380, 925,792 ] # P6/64 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [ [ -1, 1, Focus, [ 64, 3 ] ], # 0-P1/2 + [ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4 + [ -1, 3, C3, [ 128 ] ], + [ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8 + [ -1, 9, C3, [ 256 ] ], + [ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16 + [ -1, 9, C3, [ 512 ] ], + [ -1, 1, Conv, [ 768, 3, 2 ] ], # 7-P5/32 + [ -1, 3, C3, [ 768 ] ], + [ -1, 1, Conv, [ 1024, 3, 2 ] ], # 9-P6/64 + [ -1, 1, SPP, [ 1024, [ 3, 5, 7 ] ] ], + [ -1, 3, C3, [ 1024, False ] ], # 11 + ] + +# YOLOv5 head +head: + [ [ -1, 1, Conv, [ 768, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 8 ], 1, Concat, [ 1 ] ], # cat backbone P5 + [ -1, 3, C3, [ 768, False ] ], # 15 + + [ -1, 1, Conv, [ 512, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P4 + [ -1, 3, C3, [ 512, False ] ], # 19 + + [ -1, 1, Conv, [ 256, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3 + [ -1, 3, C3, [ 256, False ] ], # 23 (P3/8-small) + + [ -1, 1, Conv, [ 256, 3, 2 ] ], + [ [ -1, 20 ], 1, Concat, [ 1 ] ], # cat head P4 + [ -1, 3, C3, [ 512, False ] ], # 26 (P4/16-medium) + + [ -1, 1, Conv, [ 512, 3, 2 ] ], + [ [ -1, 16 ], 1, Concat, [ 1 ] ], # cat head P5 + [ -1, 3, C3, [ 768, False ] ], # 29 (P5/32-large) + + [ -1, 1, Conv, [ 768, 3, 2 ] ], + [ [ -1, 12 ], 1, Concat, [ 1 ] ], # cat head P6 + [ -1, 3, C3, [ 1024, False ] ], # 32 (P6/64-xlarge) + + [ [ 23, 26, 29, 32 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5, P6) + ] diff --git a/Yolov5-Deepsort/models/hub/yolov5x6.yaml b/Yolov5-Deepsort/models/hub/yolov5x6.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5ebc02124fe785d730316fde42bde40c830eac66 --- /dev/null +++ b/Yolov5-Deepsort/models/hub/yolov5x6.yaml @@ -0,0 +1,60 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.33 # model depth multiple +width_multiple: 1.25 # layer channel multiple + +# anchors +anchors: + - [ 19,27, 44,40, 38,94 ] # P3/8 + - [ 96,68, 86,152, 180,137 ] # P4/16 + - [ 140,301, 303,264, 238,542 ] # P5/32 + - [ 436,615, 739,380, 925,792 ] # P6/64 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [ [ -1, 1, Focus, [ 64, 3 ] ], # 0-P1/2 + [ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4 + [ -1, 3, C3, [ 128 ] ], + [ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8 + [ -1, 9, C3, [ 256 ] ], + [ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16 + [ -1, 9, C3, [ 512 ] ], + [ -1, 1, Conv, [ 768, 3, 2 ] ], # 7-P5/32 + [ -1, 3, C3, [ 768 ] ], + [ -1, 1, Conv, [ 1024, 3, 2 ] ], # 9-P6/64 + [ -1, 1, SPP, [ 1024, [ 3, 5, 7 ] ] ], + [ -1, 3, C3, [ 1024, False ] ], # 11 + ] + +# YOLOv5 head +head: + [ [ -1, 1, Conv, [ 768, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 8 ], 1, Concat, [ 1 ] ], # cat backbone P5 + [ -1, 3, C3, [ 768, False ] ], # 15 + + [ -1, 1, Conv, [ 512, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone P4 + [ -1, 3, C3, [ 512, False ] ], # 19 + + [ -1, 1, Conv, [ 256, 1, 1 ] ], + [ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ], + [ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3 + [ -1, 3, C3, [ 256, False ] ], # 23 (P3/8-small) + + [ -1, 1, Conv, [ 256, 3, 2 ] ], + [ [ -1, 20 ], 1, Concat, [ 1 ] ], # cat head P4 + [ -1, 3, C3, [ 512, False ] ], # 26 (P4/16-medium) + + [ -1, 1, Conv, [ 512, 3, 2 ] ], + [ [ -1, 16 ], 1, Concat, [ 1 ] ], # cat head P5 + [ -1, 3, C3, [ 768, False ] ], # 29 (P5/32-large) + + [ -1, 1, Conv, [ 768, 3, 2 ] ], + [ [ -1, 12 ], 1, Concat, [ 1 ] ], # cat head P6 + [ -1, 3, C3, [ 1024, False ] ], # 32 (P6/64-xlarge) + + [ [ 23, 26, 29, 32 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5, P6) + ] diff --git a/Yolov5-Deepsort/models/yolo.py b/Yolov5-Deepsort/models/yolo.py new file mode 100644 index 0000000000000000000000000000000000000000..06b80032d3d3b6d84162e040e45e0e276a619a34 --- /dev/null +++ b/Yolov5-Deepsort/models/yolo.py @@ -0,0 +1,304 @@ +# YOLOv5 YOLO-specific modules + +import argparse +import logging +import sys +from copy import deepcopy +from pathlib import Path + +sys.path.append(Path(__file__).parent.parent.absolute().__str__()) # to run '$ python *.py' files in subdirectories +logger = logging.getLogger(__name__) + +from models.common import * +from models.experimental import * +from utils.autoanchor import check_anchor_order +from utils.general import make_divisible, check_file, set_logging +from utils.torch_utils import time_synchronized, fuse_conv_and_bn, model_info, scale_img, initialize_weights, \ + select_device, copy_attr + +try: + import thop # for FLOPS computation +except ImportError: + thop = None + + +class Detect(nn.Module): + stride = None # strides computed during build + onnx_dynamic = False # ONNX export parameter + + def __init__(self, nc=80, anchors=(), ch=(), inplace=True): # detection layer + super(Detect, self).__init__() + self.nc = nc # number of classes + self.no = nc + 5 # number of outputs per anchor + self.nl = len(anchors) # number of detection layers + self.na = len(anchors[0]) // 2 # number of anchors + self.grid = [torch.zeros(1)] * self.nl # init grid + a = torch.tensor(anchors).float().view(self.nl, -1, 2) + self.register_buffer('anchors', a) # shape(nl,na,2) + self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) + self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv + self.inplace = inplace # use in-place ops (e.g. slice assignment) + + def forward(self, x): + # x = x.copy() # for profiling + z = [] # inference output + for i in range(self.nl): + x[i] = self.m[i](x[i]) # conv + bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) + x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() + + if not self.training: # inference + if self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic: + self.grid[i] = self._make_grid(nx, ny).to(x[i].device) + + y = x[i].sigmoid() + if self.inplace: + y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy + y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh + else: # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953 + xy = (y[..., 0:2] * 2. - 0.5 + self.grid[i]) * self.stride[i] # xy + wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i].view(1, self.na, 1, 1, 2) # wh + y = torch.cat((xy, wh, y[..., 4:]), -1) + z.append(y.view(bs, -1, self.no)) + + return x if self.training else (torch.cat(z, 1), x) + + @staticmethod + def _make_grid(nx=20, ny=20): + yv, xv = torch.meshgrid([torch.arange(ny), torch.arange(nx)]) + return torch.stack((xv, yv), 2).view((1, 1, ny, nx, 2)).float() + + +class Model(nn.Module): + def __init__(self, cfg='yolov5s.yaml', ch=3, nc=None, anchors=None): # model, input channels, number of classes + super(Model, self).__init__() + if isinstance(cfg, dict): + self.yaml = cfg # model dict + else: # is *.yaml + import yaml # for torch hub + self.yaml_file = Path(cfg).name + with open(cfg) as f: + self.yaml = yaml.safe_load(f) # model dict + + # Define model + ch = self.yaml['ch'] = self.yaml.get('ch', ch) # input channels + if nc and nc != self.yaml['nc']: + logger.info(f"Overriding model.yaml nc={self.yaml['nc']} with nc={nc}") + self.yaml['nc'] = nc # override yaml value + if anchors: + logger.info(f'Overriding model.yaml anchors with anchors={anchors}') + self.yaml['anchors'] = round(anchors) # override yaml value + self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch]) # model, savelist + self.names = [str(i) for i in range(self.yaml['nc'])] # default names + self.inplace = self.yaml.get('inplace', True) + # logger.info([x.shape for x in self.forward(torch.zeros(1, ch, 64, 64))]) + + # Build strides, anchors + m = self.model[-1] # Detect() + if isinstance(m, Detect): + s = 256 # 2x min stride + m.inplace = self.inplace + m.stride = torch.tensor([s / x.shape[-2] for x in self.forward(torch.zeros(1, ch, s, s))]) # forward + m.anchors /= m.stride.view(-1, 1, 1) + check_anchor_order(m) + self.stride = m.stride + self._initialize_biases() # only run once + # logger.info('Strides: %s' % m.stride.tolist()) + + # Init weights, biases + initialize_weights(self) + self.info() + logger.info('') + + def forward(self, x, augment=False, profile=False): + if augment: + return self.forward_augment(x) # augmented inference, None + else: + return self.forward_once(x, profile) # single-scale inference, train + + def forward_augment(self, x): + img_size = x.shape[-2:] # height, width + s = [1, 0.83, 0.67] # scales + f = [None, 3, None] # flips (2-ud, 3-lr) + y = [] # outputs + for si, fi in zip(s, f): + xi = scale_img(x.flip(fi) if fi else x, si, gs=int(self.stride.max())) + yi = self.forward_once(xi)[0] # forward + # cv2.imwrite(f'img_{si}.jpg', 255 * xi[0].cpu().numpy().transpose((1, 2, 0))[:, :, ::-1]) # save + yi = self._descale_pred(yi, fi, si, img_size) + y.append(yi) + return torch.cat(y, 1), None # augmented inference, train + + def forward_once(self, x, profile=False): + y, dt = [], [] # outputs + for m in self.model: + if m.f != -1: # if not from previous layer + x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers + + if profile: + o = thop.profile(m, inputs=(x,), verbose=False)[0] / 1E9 * 2 if thop else 0 # FLOPS + t = time_synchronized() + for _ in range(10): + _ = m(x) + dt.append((time_synchronized() - t) * 100) + if m == self.model[0]: + logger.info(f"{'time (ms)':>10s} {'GFLOPS':>10s} {'params':>10s} {'module'}") + logger.info(f'{dt[-1]:10.2f} {o:10.2f} {m.np:10.0f} {m.type}') + + x = m(x) # run + y.append(x if m.i in self.save else None) # save output + + if profile: + logger.info('%.1fms total' % sum(dt)) + return x + + def _descale_pred(self, p, flips, scale, img_size): + # de-scale predictions following augmented inference (inverse operation) + if self.inplace: + p[..., :4] /= scale # de-scale + if flips == 2: + p[..., 1] = img_size[0] - p[..., 1] # de-flip ud + elif flips == 3: + p[..., 0] = img_size[1] - p[..., 0] # de-flip lr + else: + x, y, wh = p[..., 0:1] / scale, p[..., 1:2] / scale, p[..., 2:4] / scale # de-scale + if flips == 2: + y = img_size[0] - y # de-flip ud + elif flips == 3: + x = img_size[1] - x # de-flip lr + p = torch.cat((x, y, wh, p[..., 4:]), -1) + return p + + def _initialize_biases(self, cf=None): # initialize biases into Detect(), cf is class frequency + # https://arxiv.org/abs/1708.02002 section 3.3 + # cf = torch.bincount(torch.tensor(np.concatenate(dataset.labels, 0)[:, 0]).long(), minlength=nc) + 1. + m = self.model[-1] # Detect() module + for mi, s in zip(m.m, m.stride): # from + b = mi.bias.view(m.na, -1) # conv.bias(255) to (3,85) + b.data[:, 4] += math.log(8 / (640 / s) ** 2) # obj (8 objects per 640 image) + b.data[:, 5:] += math.log(0.6 / (m.nc - 0.99)) if cf is None else torch.log(cf / cf.sum()) # cls + mi.bias = torch.nn.Parameter(b.view(-1), requires_grad=True) + + def _print_biases(self): + m = self.model[-1] # Detect() module + for mi in m.m: # from + b = mi.bias.detach().view(m.na, -1).T # conv.bias(255) to (3,85) + logger.info( + ('%6g Conv2d.bias:' + '%10.3g' * 6) % (mi.weight.shape[1], *b[:5].mean(1).tolist(), b[5:].mean())) + + # def _print_weights(self): + # for m in self.model.modules(): + # if type(m) is Bottleneck: + # logger.info('%10.3g' % (m.w.detach().sigmoid() * 2)) # shortcut weights + + def fuse(self): # fuse model Conv2d() + BatchNorm2d() layers + logger.info('Fusing layers... ') + for m in self.model.modules(): + if type(m) is Conv and hasattr(m, 'bn'): + m.conv = fuse_conv_and_bn(m.conv, m.bn) # update conv + delattr(m, 'bn') # remove batchnorm + m.forward = m.fuseforward # update forward + self.info() + return self + + def nms(self, mode=True): # add or remove NMS module + present = type(self.model[-1]) is NMS # last layer is NMS + if mode and not present: + logger.info('Adding NMS... ') + m = NMS() # module + m.f = -1 # from + m.i = self.model[-1].i + 1 # index + self.model.add_module(name='%s' % m.i, module=m) # add + self.eval() + elif not mode and present: + logger.info('Removing NMS... ') + self.model = self.model[:-1] # remove + return self + + def autoshape(self): # add AutoShape module + logger.info('Adding AutoShape... ') + m = AutoShape(self) # wrap model + copy_attr(m, self, include=('yaml', 'nc', 'hyp', 'names', 'stride'), exclude=()) # copy attributes + return m + + def info(self, verbose=False, img_size=640): # print model information + model_info(self, verbose, img_size) + + +def parse_model(d, ch): # model_dict, input_channels(3) + logger.info('\n%3s%18s%3s%10s %-40s%-30s' % ('', 'from', 'n', 'params', 'module', 'arguments')) + anchors, nc, gd, gw = d['anchors'], d['nc'], d['depth_multiple'], d['width_multiple'] + na = (len(anchors[0]) // 2) if isinstance(anchors, list) else anchors # number of anchors + no = na * (nc + 5) # number of outputs = anchors * (classes + 5) + + layers, save, c2 = [], [], ch[-1] # layers, savelist, ch out + for i, (f, n, m, args) in enumerate(d['backbone'] + d['head']): # from, number, module, args + m = eval(m) if isinstance(m, str) else m # eval strings + for j, a in enumerate(args): + try: + args[j] = eval(a) if isinstance(a, str) else a # eval strings + except: + pass + + n = max(round(n * gd), 1) if n > 1 else n # depth gain + if m in [Conv, GhostConv, Bottleneck, GhostBottleneck, SPP, DWConv, MixConv2d, Focus, CrossConv, BottleneckCSP, + C3, C3TR]: + c1, c2 = ch[f], args[0] + if c2 != no: # if not output + c2 = make_divisible(c2 * gw, 8) + + args = [c1, c2, *args[1:]] + if m in [BottleneckCSP, C3, C3TR]: + args.insert(2, n) # number of repeats + n = 1 + elif m is nn.BatchNorm2d: + args = [ch[f]] + elif m is Concat: + c2 = sum([ch[x] for x in f]) + elif m is Detect: + args.append([ch[x] for x in f]) + if isinstance(args[1], int): # number of anchors + args[1] = [list(range(args[1] * 2))] * len(f) + elif m is Contract: + c2 = ch[f] * args[0] ** 2 + elif m is Expand: + c2 = ch[f] // args[0] ** 2 + else: + c2 = ch[f] + + m_ = nn.Sequential(*[m(*args) for _ in range(n)]) if n > 1 else m(*args) # module + t = str(m)[8:-2].replace('__main__.', '') # module type + np = sum([x.numel() for x in m_.parameters()]) # number params + m_.i, m_.f, m_.type, m_.np = i, f, t, np # attach index, 'from' index, type, number params + logger.info('%3s%18s%3s%10.0f %-40s%-30s' % (i, f, n, np, t, args)) # print + save.extend(x % i for x in ([f] if isinstance(f, int) else f) if x != -1) # append to savelist + layers.append(m_) + if i == 0: + ch = [] + ch.append(c2) + return nn.Sequential(*layers), sorted(save) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--cfg', type=str, default='yolov5s.yaml', help='model.yaml') + parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') + opt = parser.parse_args() + opt.cfg = check_file(opt.cfg) # check file + set_logging() + device = select_device(opt.device) + + # Create model + model = Model(opt.cfg).to(device) + model.train() + + # Profile + # img = torch.rand(8 if torch.cuda.is_available() else 1, 3, 320, 320).to(device) + # y = model(img, profile=True) + + # Tensorboard (not working https://github.com/ultralytics/yolov5/issues/2898) + # from torch.utils.tensorboard import SummaryWriter + # tb_writer = SummaryWriter('.') + # logger.info("Run 'tensorboard --logdir=models' to view tensorboard at http://localhost:6006/") + # tb_writer.add_graph(torch.jit.trace(model, img, strict=False), []) # add model graph + # tb_writer.add_image('test', img[0], dataformats='CWH') # add model to tensorboard diff --git a/Yolov5-Deepsort/models/yolov5l.yaml b/Yolov5-Deepsort/models/yolov5l.yaml new file mode 100644 index 0000000000000000000000000000000000000000..71ebf86e57918ca222264d47fa6f04205be445a7 --- /dev/null +++ b/Yolov5-Deepsort/models/yolov5l.yaml @@ -0,0 +1,48 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.0 # model depth multiple +width_multiple: 1.0 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Focus, [64, 3]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 9, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 1, SPP, [1024, [5, 9, 13]]], + [-1, 3, C3, [1024, False]], # 9 + ] + +# YOLOv5 head +head: + [[-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/yolov5m.yaml b/Yolov5-Deepsort/models/yolov5m.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3c749c916246815fbfaa3ac96506c85a65466c02 --- /dev/null +++ b/Yolov5-Deepsort/models/yolov5m.yaml @@ -0,0 +1,48 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 0.67 # model depth multiple +width_multiple: 0.75 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Focus, [64, 3]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 9, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 1, SPP, [1024, [5, 9, 13]]], + [-1, 3, C3, [1024, False]], # 9 + ] + +# YOLOv5 head +head: + [[-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/yolov5s.yaml b/Yolov5-Deepsort/models/yolov5s.yaml new file mode 100644 index 0000000000000000000000000000000000000000..aca669d60d8b5db54963302b1ae629afe4499565 --- /dev/null +++ b/Yolov5-Deepsort/models/yolov5s.yaml @@ -0,0 +1,48 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 0.33 # model depth multiple +width_multiple: 0.50 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Focus, [64, 3]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 9, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 1, SPP, [1024, [5, 9, 13]]], + [-1, 3, C3, [1024, False]], # 9 + ] + +# YOLOv5 head +head: + [[-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/models/yolov5x.yaml b/Yolov5-Deepsort/models/yolov5x.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d3babdf7baf01a95a2a8da760a6db41bb8c7dd79 --- /dev/null +++ b/Yolov5-Deepsort/models/yolov5x.yaml @@ -0,0 +1,48 @@ +# parameters +nc: 80 # number of classes +depth_multiple: 1.33 # model depth multiple +width_multiple: 1.25 # layer channel multiple + +# anchors +anchors: + - [10,13, 16,30, 33,23] # P3/8 + - [30,61, 62,45, 59,119] # P4/16 + - [116,90, 156,198, 373,326] # P5/32 + +# YOLOv5 backbone +backbone: + # [from, number, module, args] + [[-1, 1, Focus, [64, 3]], # 0-P1/2 + [-1, 1, Conv, [128, 3, 2]], # 1-P2/4 + [-1, 3, C3, [128]], + [-1, 1, Conv, [256, 3, 2]], # 3-P3/8 + [-1, 9, C3, [256]], + [-1, 1, Conv, [512, 3, 2]], # 5-P4/16 + [-1, 9, C3, [512]], + [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32 + [-1, 1, SPP, [1024, [5, 9, 13]]], + [-1, 3, C3, [1024, False]], # 9 + ] + +# YOLOv5 head +head: + [[-1, 1, Conv, [512, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 6], 1, Concat, [1]], # cat backbone P4 + [-1, 3, C3, [512, False]], # 13 + + [-1, 1, Conv, [256, 1, 1]], + [-1, 1, nn.Upsample, [None, 2, 'nearest']], + [[-1, 4], 1, Concat, [1]], # cat backbone P3 + [-1, 3, C3, [256, False]], # 17 (P3/8-small) + + [-1, 1, Conv, [256, 3, 2]], + [[-1, 14], 1, Concat, [1]], # cat head P4 + [-1, 3, C3, [512, False]], # 20 (P4/16-medium) + + [-1, 1, Conv, [512, 3, 2]], + [[-1, 10], 1, Concat, [1]], # cat head P5 + [-1, 3, C3, [1024, False]], # 23 (P5/32-large) + + [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5) + ] diff --git a/Yolov5-Deepsort/mot.mp4 b/Yolov5-Deepsort/mot.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..ad233d76ae04637c5d8950a7e50482f82400168f --- /dev/null +++ b/Yolov5-Deepsort/mot.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19075cdf256ef23ce5432e16ab4b6a8c5a75b5d8f0c5548955f6eacf672a06c5 +size 7869562 diff --git a/Yolov5-Deepsort/myresult.txt b/Yolov5-Deepsort/myresult.txt new file mode 100644 index 0000000000000000000000000000000000000000..8535951ffaed1fefe8d6a09be3a3c00d3074f50c --- /dev/null +++ b/Yolov5-Deepsort/myresult.txt @@ -0,0 +1,6619 @@ +3, 1, 477, 269, 43, 35, 1, 2, 1 +3, 2, 0, 339, 20, 108, 1, 0, 1 +3, 3, 540, 269, 56, 53, 1, 2, 1 +3, 4, 686, 256, 18, 49, 1, 0, 1 +3, 5, 810, 272, 28, 61, 1, 0, 1 +3, 6, 767, 277, 25, 58, 1, 0, 1 +3, 7, 250, 272, 17, 47, 1, 0, 1 +3, 8, 725, 243, 15, 44, 1, 0, 1 +3, 9, 267, 268, 19, 52, 1, 0, 1 +3, 10, 744, 255, 13, 35, 1, 0, 1 +3, 11, 52, 359, 24, 47, 1, 0, 1 +3, 12, 130, 298, 22, 68, 1, 0, 1 +4, 1, 478, 270, 43, 35, 1, 2, 1 +4, 2, 0, 346, 17, 92, 1, 0, 1 +4, 3, 541, 269, 57, 53, 1, 2, 1 +4, 4, 688, 253, 20, 52, 1, 0, 1 +4, 5, 815, 274, 29, 61, 1, 0, 1 +4, 6, 771, 278, 24, 58, 1, 0, 1 +4, 7, 249, 272, 19, 48, 1, 0, 1 +4, 8, 727, 243, 15, 44, 1, 0, 1 +4, 9, 268, 270, 18, 51, 1, 0, 1 +4, 10, 747, 255, 12, 34, 1, 0, 1 +4, 11, 46, 361, 23, 47, 1, 0, 1 +4, 12, 129, 299, 22, 69, 1, 0, 1 +5, 1, 479, 271, 43, 35, 1, 2, 1 +5, 2, 0, 350, 15, 88, 1, 0, 1 +5, 3, 541, 268, 59, 56, 1, 2, 1 +5, 4, 690, 256, 19, 54, 1, 0, 1 +5, 5, 818, 278, 29, 61, 1, 0, 1 +5, 6, 773, 283, 25, 56, 1, 0, 1 +5, 7, 248, 270, 18, 50, 1, 0, 1 +5, 8, 729, 246, 15, 44, 1, 0, 1 +5, 9, 267, 265, 19, 54, 1, 0, 1 +5, 10, 748, 256, 14, 37, 1, 0, 1 +5, 11, 38, 361, 23, 47, 1, 0, 1 +6, 1, 480, 275, 43, 35, 1, 2, 1 +6, 3, 542, 273, 60, 57, 1, 2, 1 +6, 4, 692, 259, 20, 55, 1, 0, 1 +6, 5, 821, 282, 30, 63, 1, 0, 1 +6, 6, 778, 287, 25, 59, 1, 0, 1 +6, 7, 247, 274, 19, 50, 1, 0, 1 +6, 8, 731, 251, 15, 43, 1, 0, 1 +6, 9, 268, 269, 18, 53, 1, 0, 1 +6, 10, 751, 261, 13, 36, 1, 0, 1 +6, 11, 31, 364, 25, 51, 1, 0, 1 +7, 1, 479, 273, 45, 37, 1, 2, 1 +7, 3, 543, 271, 61, 59, 1, 2, 1 +7, 4, 694, 260, 19, 53, 1, 0, 1 +7, 5, 825, 284, 30, 63, 1, 0, 1 +7, 6, 781, 288, 25, 57, 1, 0, 1 +7, 7, 246, 272, 19, 51, 1, 0, 1 +7, 8, 731, 250, 15, 44, 1, 0, 1 +7, 9, 268, 269, 18, 53, 1, 0, 1 +7, 10, 753, 260, 13, 38, 1, 0, 1 +7, 11, 25, 368, 24, 50, 1, 0, 1 +7, 12, 115, 306, 22, 67, 1, 0, 1 +8, 1, 480, 278, 43, 35, 1, 2, 1 +8, 3, 545, 274, 61, 59, 1, 2, 1 +8, 4, 695, 262, 20, 56, 1, 0, 1 +8, 5, 829, 288, 30, 63, 1, 0, 1 +8, 6, 785, 291, 25, 58, 1, 0, 1 +8, 7, 245, 273, 19, 52, 1, 0, 1 +8, 8, 733, 252, 15, 44, 1, 0, 1 +8, 9, 266, 270, 19, 55, 1, 0, 1 +8, 10, 755, 263, 14, 38, 1, 0, 1 +8, 11, 17, 371, 25, 53, 1, 0, 1 +8, 12, 111, 306, 22, 71, 1, 0, 1 +9, 1, 481, 279, 42, 35, 1, 2, 1 +9, 3, 545, 276, 61, 58, 1, 2, 1 +9, 4, 696, 265, 20, 54, 1, 0, 1 +9, 5, 833, 292, 29, 63, 1, 0, 1 +9, 6, 788, 293, 26, 60, 1, 0, 1 +9, 7, 244, 273, 19, 52, 1, 0, 1 +9, 8, 734, 253, 15, 46, 1, 0, 1 +9, 9, 265, 271, 19, 55, 1, 0, 1 +9, 10, 756, 264, 14, 39, 1, 0, 1 +9, 11, 7, 372, 26, 54, 1, 0, 1 +9, 12, 107, 309, 23, 69, 1, 0, 1 +9, 18, 338, 261, 14, 41, 1, 0, 1 +10, 1, 481, 281, 42, 34, 1, 2, 1 +10, 3, 545, 276, 63, 61, 1, 2, 1 +10, 4, 698, 269, 19, 54, 1, 0, 1 +10, 5, 835, 298, 31, 64, 1, 0, 1 +10, 6, 791, 297, 26, 63, 1, 0, 1 +10, 7, 243, 270, 20, 53, 1, 0, 1 +10, 8, 735, 258, 15, 45, 1, 0, 1 +10, 9, 264, 270, 18, 53, 1, 0, 1 +10, 10, 758, 272, 13, 35, 1, 0, 1 +10, 11, 0, 369, 25, 55, 1, 0, 1 +10, 12, 101, 300, 24, 76, 1, 0, 1 +10, 18, 337, 260, 14, 40, 1, 0, 1 +11, 1, 480, 280, 44, 35, 1, 2, 1 +11, 3, 545, 276, 63, 61, 1, 2, 1 +11, 4, 699, 266, 19, 53, 1, 0, 1 +11, 5, 840, 295, 30, 63, 1, 0, 1 +11, 6, 794, 295, 27, 64, 1, 0, 1 +11, 7, 242, 273, 19, 51, 1, 0, 1 +11, 8, 737, 256, 15, 44, 1, 0, 1 +11, 9, 262, 274, 18, 50, 1, 0, 1 +11, 10, 760, 268, 13, 35, 1, 0, 1 +11, 11, 0, 374, 21, 57, 1, 0, 1 +11, 12, 96, 298, 27, 83, 1, 0, 1 +11, 18, 337, 262, 13, 39, 1, 0, 1 +11, 20, 40, 308, 33, 67, 1, 0, 1 +12, 1, 479, 279, 45, 36, 1, 2, 1 +12, 3, 546, 278, 63, 59, 1, 2, 1 +12, 4, 701, 267, 19, 54, 1, 0, 1 +12, 5, 843, 295, 31, 64, 1, 0, 1 +12, 6, 797, 297, 27, 62, 1, 0, 1 +12, 7, 240, 274, 20, 51, 1, 0, 1 +12, 8, 737, 257, 16, 42, 1, 0, 1 +12, 9, 260, 272, 19, 54, 1, 0, 1 +12, 10, 763, 271, 12, 35, 1, 0, 1 +12, 11, 0, 377, 15, 57, 1, 0, 1 +12, 12, 92, 299, 27, 84, 1, 0, 1 +12, 18, 336, 262, 14, 39, 1, 0, 1 +12, 20, 34, 307, 34, 70, 1, 0, 1 +13, 1, 480, 277, 45, 36, 1, 2, 1 +13, 3, 546, 275, 63, 61, 1, 2, 1 +13, 4, 702, 266, 19, 52, 1, 0, 1 +13, 5, 846, 296, 31, 64, 1, 0, 1 +13, 6, 801, 298, 26, 62, 1, 0, 1 +13, 7, 239, 270, 19, 52, 1, 0, 1 +13, 8, 739, 258, 15, 42, 1, 0, 1 +13, 9, 258, 266, 20, 55, 1, 0, 1 +13, 10, 765, 272, 13, 35, 1, 0, 1 +13, 12, 85, 294, 28, 85, 1, 0, 1 +13, 20, 31, 307, 35, 71, 1, 0, 1 +13, 23, 509, 264, 46, 31, 1, 2, 1 +14, 1, 479, 277, 46, 37, 1, 2, 1 +14, 3, 546, 275, 63, 61, 1, 2, 1 +14, 4, 704, 264, 18, 51, 1, 0, 1 +14, 5, 851, 294, 30, 64, 1, 0, 1 +14, 6, 805, 295, 26, 63, 1, 0, 1 +14, 7, 239, 269, 19, 53, 1, 0, 1 +14, 8, 740, 258, 15, 43, 1, 0, 1 +14, 9, 258, 265, 19, 57, 1, 0, 1 +14, 10, 767, 268, 13, 36, 1, 0, 1 +14, 12, 81, 293, 29, 88, 1, 0, 1 +14, 18, 335, 261, 14, 40, 1, 0, 1 +14, 20, 22, 303, 37, 78, 1, 0, 1 +14, 23, 506, 264, 37, 24, 1, 2, 1 +15, 1, 478, 276, 48, 38, 1, 2, 1 +15, 3, 546, 275, 65, 62, 1, 2, 1 +15, 4, 705, 264, 18, 51, 1, 0, 1 +15, 5, 854, 293, 32, 68, 1, 0, 1 +15, 6, 808, 296, 27, 65, 1, 0, 1 +15, 7, 238, 268, 19, 54, 1, 0, 1 +15, 9, 258, 266, 19, 55, 1, 0, 1 +15, 10, 767, 262, 15, 42, 1, 0, 1 +15, 18, 335, 260, 14, 39, 1, 0, 1 +15, 20, 13, 296, 39, 83, 1, 0, 1 +15, 23, 507, 262, 34, 23, 1, 2, 1 +16, 1, 479, 278, 47, 37, 1, 2, 1 +16, 3, 547, 274, 65, 63, 1, 2, 1 +16, 4, 707, 265, 19, 53, 1, 0, 1 +16, 5, 858, 294, 31, 68, 1, 0, 1 +16, 6, 812, 297, 27, 65, 1, 0, 1 +16, 7, 237, 266, 20, 56, 1, 0, 1 +16, 8, 744, 257, 15, 41, 1, 0, 1 +16, 9, 258, 266, 19, 55, 1, 0, 1 +16, 10, 769, 264, 15, 40, 1, 0, 1 +16, 18, 336, 260, 13, 39, 1, 0, 1 +16, 20, 7, 294, 41, 86, 1, 0, 1 +16, 23, 507, 262, 32, 20, 1, 2, 1 +16, 24, 642, 282, 34, 29, 1, 2, 1 +17, 1, 480, 280, 45, 35, 1, 2, 1 +17, 3, 548, 274, 65, 64, 1, 2, 1 +17, 4, 708, 266, 19, 53, 1, 0, 1 +17, 5, 862, 295, 31, 69, 1, 0, 1 +17, 6, 816, 297, 27, 65, 1, 0, 1 +17, 7, 237, 269, 19, 53, 1, 0, 1 +17, 8, 745, 257, 15, 41, 1, 0, 1 +17, 9, 256, 268, 19, 54, 1, 0, 1 +17, 10, 772, 268, 13, 37, 1, 0, 1 +17, 12, 60, 297, 33, 100, 1, 0, 1 +17, 18, 335, 259, 14, 41, 1, 0, 1 +17, 20, 0, 297, 40, 86, 1, 0, 1 +17, 23, 504, 263, 30, 20, 1, 2, 1 +17, 24, 643, 282, 34, 29, 1, 2, 1 +18, 1, 481, 279, 45, 35, 1, 2, 1 +18, 3, 549, 275, 65, 63, 1, 2, 1 +18, 4, 710, 266, 19, 53, 1, 0, 1 +18, 5, 865, 296, 32, 68, 1, 0, 1 +18, 6, 820, 297, 28, 66, 1, 0, 1 +18, 7, 236, 268, 19, 54, 1, 0, 1 +18, 9, 256, 267, 19, 55, 1, 0, 1 +18, 10, 773, 268, 13, 36, 1, 0, 1 +18, 12, 55, 296, 34, 104, 1, 0, 1 +18, 18, 334, 258, 15, 42, 1, 0, 1 +18, 20, 0, 292, 36, 94, 1, 0, 1 +18, 23, 503, 262, 27, 18, 1, 2, 1 +18, 24, 643, 282, 34, 29, 1, 2, 1 +19, 1, 481, 280, 44, 35, 1, 2, 1 +19, 3, 550, 275, 65, 63, 1, 2, 1 +19, 4, 711, 265, 19, 54, 1, 0, 1 +19, 5, 869, 297, 32, 69, 1, 0, 1 +19, 6, 825, 296, 28, 67, 1, 0, 1 +19, 7, 235, 267, 19, 55, 1, 0, 1 +19, 8, 752, 259, 14, 39, 1, 0, 1 +19, 9, 255, 268, 19, 54, 1, 0, 1 +19, 10, 775, 266, 14, 39, 1, 0, 1 +19, 18, 334, 257, 15, 43, 1, 0, 1 +19, 20, 0, 291, 31, 97, 1, 0, 1 +20, 1, 481, 280, 45, 35, 1, 2, 1 +20, 3, 550, 275, 67, 66, 1, 2, 1 +20, 4, 712, 265, 19, 55, 1, 0, 1 +20, 5, 873, 297, 32, 70, 1, 0, 1 +20, 6, 829, 296, 28, 67, 1, 0, 1 +20, 7, 234, 272, 19, 52, 1, 0, 1 +20, 8, 754, 259, 14, 39, 1, 0, 1 +20, 9, 255, 271, 18, 53, 1, 0, 1 +20, 10, 778, 268, 13, 38, 1, 0, 1 +20, 18, 333, 258, 15, 43, 1, 0, 1 +20, 24, 646, 283, 33, 28, 1, 2, 1 +21, 1, 480, 279, 47, 37, 1, 2, 1 +21, 3, 551, 276, 67, 66, 1, 2, 1 +21, 4, 712, 265, 20, 56, 1, 0, 1 +21, 5, 878, 299, 32, 69, 1, 0, 1 +21, 6, 832, 297, 29, 69, 1, 0, 1 +21, 7, 234, 273, 18, 51, 1, 0, 1 +21, 9, 253, 273, 18, 52, 1, 0, 1 +21, 10, 780, 269, 13, 39, 1, 0, 1 +21, 18, 333, 258, 15, 43, 1, 0, 1 +21, 24, 648, 284, 33, 28, 1, 2, 1 +22, 1, 481, 281, 46, 35, 1, 2, 1 +22, 3, 551, 277, 68, 66, 1, 2, 1 +22, 4, 713, 265, 21, 57, 1, 0, 1 +22, 5, 883, 300, 32, 69, 1, 0, 1 +22, 6, 836, 298, 29, 70, 1, 0, 1 +22, 7, 234, 273, 19, 53, 1, 0, 1 +22, 9, 251, 272, 19, 54, 1, 0, 1 +22, 10, 781, 265, 14, 42, 1, 0, 1 +22, 18, 332, 259, 15, 44, 1, 0, 1 +22, 24, 649, 285, 33, 27, 1, 2, 1 +22, 29, 419, 263, 60, 27, 1, 2, 1 +23, 1, 480, 281, 47, 36, 1, 2, 1 +23, 3, 552, 276, 68, 67, 1, 2, 1 +23, 4, 714, 265, 21, 57, 1, 0, 1 +23, 5, 888, 300, 32, 71, 1, 0, 1 +23, 6, 839, 299, 29, 72, 1, 0, 1 +23, 7, 231, 273, 19, 54, 1, 0, 1 +23, 9, 250, 273, 19, 54, 1, 0, 1 +23, 10, 782, 264, 14, 39, 1, 0, 1 +23, 18, 332, 261, 14, 43, 1, 0, 1 +23, 29, 408, 263, 63, 27, 1, 2, 1 +24, 1, 480, 281, 48, 37, 1, 2, 1 +24, 3, 553, 276, 69, 67, 1, 2, 1 +24, 4, 716, 265, 20, 56, 1, 0, 1 +24, 5, 892, 299, 33, 72, 1, 0, 1 +24, 6, 843, 300, 29, 71, 1, 0, 1 +24, 7, 229, 275, 19, 53, 1, 0, 1 +24, 8, 760, 259, 14, 37, 1, 0, 1 +24, 9, 249, 275, 19, 53, 1, 0, 1 +24, 10, 784, 267, 13, 37, 1, 0, 1 +24, 18, 332, 262, 14, 42, 1, 0, 1 +24, 29, 399, 265, 62, 27, 1, 2, 1 +25, 1, 480, 282, 49, 38, 1, 2, 1 +25, 3, 553, 278, 68, 68, 1, 2, 1 +25, 4, 718, 266, 20, 58, 1, 0, 1 +25, 5, 897, 302, 33, 73, 1, 0, 1 +25, 6, 847, 301, 29, 74, 1, 0, 1 +25, 7, 229, 273, 20, 57, 1, 0, 1 +25, 8, 761, 259, 16, 42, 1, 0, 1 +25, 9, 249, 275, 19, 55, 1, 0, 1 +25, 10, 787, 271, 12, 38, 1, 0, 1 +25, 18, 332, 265, 14, 40, 1, 0, 1 +25, 29, 392, 267, 66, 29, 1, 2, 1 +26, 1, 480, 283, 50, 38, 1, 2, 1 +26, 3, 553, 280, 69, 68, 1, 2, 1 +26, 4, 720, 268, 20, 56, 1, 0, 1 +26, 5, 901, 302, 35, 76, 1, 0, 1 +26, 6, 851, 302, 30, 76, 1, 0, 1 +26, 7, 228, 275, 19, 55, 1, 0, 1 +26, 8, 763, 259, 16, 43, 1, 0, 1 +26, 9, 248, 275, 19, 57, 1, 0, 1 +26, 10, 789, 274, 13, 37, 1, 0, 1 +26, 18, 333, 265, 13, 41, 1, 0, 1 +26, 29, 393, 269, 59, 26, 1, 2, 1 +27, 1, 479, 284, 51, 39, 1, 2, 1 +27, 3, 553, 281, 69, 69, 1, 2, 1 +27, 4, 722, 270, 20, 56, 1, 0, 1 +27, 5, 907, 304, 34, 76, 1, 0, 1 +27, 6, 855, 305, 30, 75, 1, 0, 1 +27, 7, 226, 274, 20, 58, 1, 0, 1 +27, 8, 765, 260, 16, 43, 1, 0, 1 +27, 9, 247, 277, 19, 56, 1, 0, 1 +27, 10, 791, 270, 13, 40, 1, 0, 1 +27, 18, 332, 267, 13, 40, 1, 0, 1 +27, 29, 379, 269, 62, 27, 1, 2, 1 +28, 1, 479, 285, 51, 39, 1, 2, 1 +28, 3, 554, 282, 70, 70, 1, 2, 1 +28, 4, 724, 271, 20, 56, 1, 0, 1 +28, 5, 910, 305, 34, 76, 1, 0, 1 +28, 6, 859, 306, 30, 76, 1, 0, 1 +28, 7, 224, 271, 21, 62, 1, 0, 1 +28, 8, 767, 259, 16, 44, 1, 0, 1 +28, 9, 246, 278, 19, 55, 1, 0, 1 +28, 10, 791, 262, 16, 48, 1, 0, 1 +28, 18, 331, 269, 13, 38, 1, 0, 1 +28, 29, 370, 270, 62, 27, 1, 2, 1 +28, 36, 497, 250, 17, 13, 1, 2, 1 +29, 1, 480, 286, 51, 40, 1, 2, 1 +29, 3, 555, 285, 70, 70, 1, 2, 1 +29, 4, 725, 273, 20, 56, 1, 0, 1 +29, 5, 915, 310, 35, 76, 1, 0, 1 +29, 6, 864, 309, 30, 78, 1, 0, 1 +29, 7, 223, 272, 21, 61, 1, 0, 1 +29, 8, 768, 261, 16, 45, 1, 0, 1 +29, 9, 245, 277, 19, 56, 1, 0, 1 +29, 10, 793, 261, 16, 49, 1, 0, 1 +29, 12, 0, 284, 32, 153, 1, 0, 1 +29, 18, 330, 271, 13, 37, 1, 0, 1 +29, 29, 364, 271, 64, 27, 1, 2, 1 +29, 36, 496, 250, 19, 15, 1, 2, 1 +30, 1, 480, 289, 51, 38, 1, 2, 1 +30, 3, 555, 286, 70, 70, 1, 2, 1 +30, 4, 726, 274, 21, 57, 1, 0, 1 +30, 5, 921, 311, 33, 73, 1, 0, 1 +30, 6, 868, 311, 29, 75, 1, 0, 1 +30, 7, 222, 278, 20, 57, 1, 0, 1 +30, 8, 769, 262, 16, 45, 1, 0, 1 +30, 9, 243, 279, 20, 57, 1, 0, 1 +30, 10, 794, 260, 16, 51, 1, 0, 1 +30, 12, 0, 291, 29, 138, 1, 0, 1 +30, 18, 330, 272, 13, 36, 1, 0, 1 +30, 29, 371, 272, 59, 26, 1, 2, 1 +30, 36, 495, 250, 21, 17, 1, 2, 1 +31, 1, 481, 292, 51, 39, 1, 2, 1 +31, 3, 556, 288, 70, 71, 1, 2, 1 +31, 4, 727, 276, 21, 58, 1, 0, 1 +31, 5, 925, 312, 34, 73, 1, 0, 1 +31, 6, 873, 313, 30, 75, 1, 0, 1 +31, 7, 220, 284, 21, 58, 1, 0, 1 +31, 8, 771, 264, 17, 46, 1, 0, 1 +31, 9, 243, 285, 20, 56, 1, 0, 1 +31, 10, 796, 262, 17, 52, 1, 0, 1 +31, 12, 0, 291, 24, 141, 1, 0, 1 +31, 18, 330, 277, 13, 40, 1, 0, 1 +31, 29, 366, 273, 59, 25, 1, 2, 1 +31, 36, 494, 250, 23, 18, 1, 2, 1 +32, 1, 481, 294, 51, 38, 1, 2, 1 +32, 3, 556, 288, 71, 71, 1, 2, 1 +32, 4, 728, 276, 22, 61, 1, 0, 1 +32, 5, 928, 316, 31, 75, 1, 0, 1 +32, 6, 878, 313, 29, 75, 1, 0, 1 +32, 7, 220, 285, 19, 57, 1, 0, 1 +32, 8, 772, 265, 17, 45, 1, 0, 1 +32, 9, 242, 285, 20, 56, 1, 0, 1 +32, 10, 800, 275, 14, 42, 1, 0, 1 +32, 18, 328, 277, 14, 40, 1, 0, 1 +33, 1, 481, 290, 51, 38, 1, 2, 1 +33, 3, 557, 286, 71, 71, 1, 2, 1 +33, 4, 730, 273, 23, 63, 1, 0, 1 +33, 5, 930, 312, 29, 77, 1, 0, 1 +33, 6, 882, 311, 30, 76, 1, 0, 1 +33, 7, 218, 281, 20, 57, 1, 0, 1 +33, 8, 775, 261, 17, 46, 1, 0, 1 +33, 9, 240, 280, 21, 59, 1, 0, 1 +33, 10, 802, 266, 15, 48, 1, 0, 1 +33, 18, 326, 275, 14, 39, 1, 0, 1 +33, 36, 496, 249, 20, 16, 1, 2, 1 +34, 1, 481, 289, 52, 39, 1, 2, 1 +34, 3, 557, 285, 72, 73, 1, 2, 1 +34, 4, 732, 271, 23, 65, 1, 0, 1 +34, 5, 935, 313, 24, 75, 1, 0, 1 +34, 6, 888, 311, 30, 76, 1, 0, 1 +34, 7, 217, 283, 19, 56, 1, 0, 1 +34, 8, 777, 261, 17, 46, 1, 0, 1 +34, 9, 239, 280, 21, 59, 1, 0, 1 +34, 10, 802, 262, 16, 50, 1, 0, 1 +34, 18, 324, 275, 14, 40, 1, 0, 1 +34, 36, 497, 250, 19, 16, 1, 2, 1 +35, 1, 481, 287, 53, 40, 1, 2, 1 +35, 3, 557, 283, 74, 74, 1, 2, 1 +35, 4, 734, 271, 22, 63, 1, 0, 1 +35, 5, 940, 315, 19, 58, 1, 0, 1 +35, 6, 892, 310, 31, 78, 1, 0, 1 +35, 7, 216, 277, 20, 58, 1, 0, 1 +35, 8, 780, 259, 16, 46, 1, 0, 1 +35, 9, 237, 275, 22, 61, 1, 0, 1 +35, 10, 805, 266, 14, 45, 1, 0, 1 +35, 18, 323, 271, 15, 41, 1, 0, 1 +35, 36, 496, 250, 21, 17, 1, 2, 1 +36, 1, 481, 285, 54, 41, 1, 2, 1 +36, 3, 558, 282, 74, 75, 1, 2, 1 +36, 4, 737, 270, 21, 61, 1, 0, 1 +36, 5, 945, 316, 14, 57, 1, 0, 1 +36, 6, 897, 309, 32, 81, 1, 0, 1 +36, 7, 215, 276, 20, 58, 1, 0, 1 +36, 8, 782, 257, 17, 47, 1, 0, 1 +36, 9, 235, 272, 22, 63, 1, 0, 1 +36, 10, 809, 270, 12, 39, 1, 0, 1 +36, 18, 322, 269, 16, 42, 1, 0, 1 +36, 41, 307, 272, 15, 37, 1, 0, 1 +37, 1, 480, 284, 55, 41, 1, 2, 1 +37, 3, 559, 281, 74, 75, 1, 2, 1 +37, 4, 739, 269, 21, 62, 1, 0, 1 +37, 6, 901, 309, 34, 84, 1, 0, 1 +37, 7, 215, 276, 19, 55, 1, 0, 1 +37, 8, 785, 257, 17, 46, 1, 0, 1 +37, 9, 234, 270, 22, 63, 1, 0, 1 +37, 10, 812, 273, 11, 37, 1, 0, 1 +37, 18, 321, 268, 16, 41, 1, 0, 1 +37, 41, 307, 271, 15, 37, 1, 0, 1 +38, 1, 481, 283, 54, 40, 1, 2, 1 +38, 3, 559, 279, 75, 76, 1, 2, 1 +38, 4, 741, 268, 21, 61, 1, 0, 1 +38, 6, 907, 309, 34, 85, 1, 0, 1 +38, 7, 214, 276, 18, 55, 1, 0, 1 +38, 8, 786, 253, 17, 47, 1, 0, 1 +38, 9, 234, 270, 21, 63, 1, 0, 1 +38, 10, 813, 272, 12, 38, 1, 0, 1 +38, 18, 321, 269, 15, 39, 1, 0, 1 +38, 41, 307, 272, 15, 36, 1, 0, 1 +39, 1, 480, 282, 55, 40, 1, 2, 1 +39, 3, 560, 279, 75, 77, 1, 2, 1 +39, 4, 743, 269, 21, 61, 1, 0, 1 +39, 6, 912, 312, 35, 85, 1, 0, 1 +39, 7, 213, 273, 19, 55, 1, 0, 1 +39, 8, 789, 251, 18, 51, 1, 0, 1 +39, 9, 232, 266, 22, 64, 1, 0, 1 +39, 10, 815, 274, 12, 36, 1, 0, 1 +39, 18, 323, 266, 16, 40, 1, 0, 1 +39, 41, 306, 267, 16, 39, 1, 0, 1 +39, 46, 646, 263, 47, 21, 1, 2, 1 +39, 47, 500, 242, 17, 15, 1, 2, 1 +40, 1, 480, 281, 55, 41, 1, 2, 1 +40, 3, 562, 278, 74, 77, 1, 2, 1 +40, 4, 745, 268, 21, 61, 1, 0, 1 +40, 6, 917, 313, 36, 87, 1, 0, 1 +40, 7, 211, 272, 19, 57, 1, 0, 1 +40, 8, 791, 249, 19, 51, 1, 0, 1 +40, 9, 232, 265, 21, 64, 1, 0, 1 +40, 10, 817, 272, 11, 36, 1, 0, 1 +40, 18, 321, 263, 17, 43, 1, 0, 1 +40, 24, 665, 281, 43, 37, 1, 0, 1 +40, 41, 305, 265, 17, 41, 1, 0, 1 +40, 46, 646, 262, 47, 21, 1, 2, 1 +40, 47, 500, 242, 16, 15, 1, 2, 1 +40, 48, 289, 265, 14, 40, 1, 0, 1 +41, 1, 480, 282, 55, 41, 1, 2, 1 +41, 3, 563, 280, 74, 76, 1, 2, 1 +41, 4, 747, 270, 22, 61, 1, 0, 1 +41, 6, 923, 315, 36, 88, 1, 0, 1 +41, 7, 210, 270, 20, 58, 1, 0, 1 +41, 8, 794, 250, 18, 51, 1, 0, 1 +41, 9, 231, 265, 22, 63, 1, 0, 1 +41, 10, 819, 272, 11, 35, 1, 0, 1 +41, 18, 321, 260, 18, 46, 1, 0, 1 +41, 24, 666, 280, 44, 39, 1, 0, 1 +41, 41, 305, 264, 17, 42, 1, 0, 1 +41, 46, 641, 262, 51, 22, 1, 2, 1 +41, 47, 500, 243, 16, 14, 1, 2, 1 +41, 48, 288, 262, 15, 43, 1, 0, 1 +42, 1, 481, 282, 55, 42, 1, 2, 1 +42, 3, 564, 281, 75, 77, 1, 2, 1 +42, 4, 749, 270, 22, 63, 1, 0, 1 +42, 6, 927, 317, 32, 88, 1, 0, 1 +42, 7, 209, 269, 21, 60, 1, 0, 1 +42, 8, 795, 251, 19, 51, 1, 0, 1 +42, 9, 231, 266, 21, 63, 1, 0, 1 +42, 10, 822, 274, 12, 37, 1, 0, 1 +42, 18, 322, 259, 18, 48, 1, 0, 1 +42, 41, 304, 264, 17, 43, 1, 0, 1 +42, 46, 640, 263, 48, 21, 1, 2, 1 +42, 47, 500, 244, 15, 13, 1, 2, 1 +42, 48, 289, 262, 15, 44, 1, 0, 1 +42, 49, 253, 262, 16, 43, 1, 0, 1 +43, 1, 481, 284, 55, 41, 1, 2, 1 +43, 3, 564, 281, 77, 79, 1, 2, 1 +43, 4, 752, 272, 22, 64, 1, 0, 1 +43, 6, 931, 319, 28, 87, 1, 0, 1 +43, 7, 207, 267, 23, 65, 1, 0, 1 +43, 8, 798, 253, 19, 51, 1, 0, 1 +43, 9, 229, 266, 22, 64, 1, 0, 1 +43, 10, 825, 276, 12, 35, 1, 0, 1 +43, 18, 322, 261, 17, 46, 1, 0, 1 +43, 41, 304, 263, 17, 44, 1, 0, 1 +43, 46, 638, 262, 47, 21, 1, 2, 1 +43, 47, 500, 245, 16, 14, 1, 2, 1 +43, 48, 288, 263, 15, 44, 1, 0, 1 +43, 49, 252, 262, 16, 43, 1, 0, 1 +43, 50, 783, 256, 11, 28, 1, 0, 1 +44, 1, 481, 285, 55, 42, 1, 2, 1 +44, 3, 565, 283, 76, 79, 1, 2, 1 +44, 4, 754, 273, 22, 64, 1, 0, 1 +44, 6, 935, 319, 24, 88, 1, 0, 1 +44, 7, 206, 267, 23, 67, 1, 0, 1 +44, 8, 800, 254, 19, 52, 1, 0, 1 +44, 9, 226, 266, 23, 65, 1, 0, 1 +44, 10, 828, 276, 11, 35, 1, 0, 1 +44, 18, 321, 262, 17, 46, 1, 0, 1 +44, 47, 500, 246, 16, 13, 1, 2, 1 +44, 48, 288, 262, 15, 46, 1, 0, 1 +44, 49, 251, 263, 16, 42, 1, 0, 1 +44, 50, 783, 256, 11, 29, 1, 0, 1 +45, 1, 481, 286, 55, 41, 1, 2, 1 +45, 3, 566, 284, 77, 81, 1, 2, 1 +45, 4, 756, 275, 23, 65, 1, 0, 1 +45, 6, 939, 328, 20, 84, 1, 0, 1 +45, 7, 206, 267, 23, 66, 1, 0, 1 +45, 8, 802, 256, 19, 52, 1, 0, 1 +45, 9, 228, 267, 22, 65, 1, 0, 1 +45, 18, 322, 262, 16, 44, 1, 0, 1 +45, 47, 501, 246, 16, 14, 1, 2, 1 +45, 49, 251, 264, 15, 41, 1, 0, 1 +45, 50, 784, 257, 11, 29, 1, 0, 1 +46, 1, 481, 286, 56, 42, 1, 2, 1 +46, 3, 566, 283, 79, 83, 1, 2, 1 +46, 4, 759, 275, 23, 67, 1, 0, 1 +46, 6, 943, 329, 16, 85, 1, 0, 1 +46, 7, 206, 264, 24, 71, 1, 0, 1 +46, 8, 803, 256, 20, 52, 1, 0, 1 +46, 9, 225, 263, 24, 70, 1, 0, 1 +46, 18, 322, 262, 16, 43, 1, 0, 1 +46, 47, 501, 245, 17, 15, 1, 2, 1 +46, 49, 248, 264, 16, 42, 1, 0, 1 +46, 50, 784, 256, 11, 30, 1, 0, 1 +47, 1, 481, 286, 57, 43, 1, 2, 1 +47, 3, 567, 284, 79, 83, 1, 2, 1 +47, 4, 761, 276, 23, 68, 1, 0, 1 +47, 7, 205, 264, 24, 71, 1, 0, 1 +47, 8, 807, 259, 18, 49, 1, 0, 1 +47, 9, 225, 264, 23, 69, 1, 0, 1 +47, 18, 321, 261, 16, 44, 1, 0, 1 +47, 47, 501, 246, 17, 14, 1, 2, 1 +47, 49, 247, 265, 16, 43, 1, 0, 1 +47, 50, 784, 256, 12, 31, 1, 0, 1 +48, 1, 481, 287, 57, 43, 1, 2, 1 +48, 3, 567, 283, 81, 84, 1, 2, 1 +48, 4, 763, 278, 23, 67, 1, 0, 1 +48, 7, 202, 266, 24, 69, 1, 0, 1 +48, 8, 810, 262, 17, 47, 1, 0, 1 +48, 9, 224, 267, 23, 68, 1, 0, 1 +48, 18, 320, 262, 16, 44, 1, 0, 1 +48, 49, 245, 264, 18, 48, 1, 0, 1 +48, 50, 788, 257, 11, 30, 1, 0, 1 +49, 1, 480, 289, 58, 44, 1, 2, 1 +49, 3, 567, 285, 83, 87, 1, 2, 1 +49, 4, 766, 279, 23, 68, 1, 0, 1 +49, 7, 201, 268, 23, 67, 1, 0, 1 +49, 8, 812, 265, 17, 45, 1, 0, 1 +49, 9, 223, 271, 22, 65, 1, 0, 1 +49, 18, 319, 266, 16, 42, 1, 0, 1 +49, 49, 243, 265, 18, 48, 1, 0, 1 +49, 50, 789, 258, 11, 30, 1, 0, 1 +50, 1, 480, 289, 58, 44, 1, 2, 1 +50, 3, 568, 284, 84, 88, 1, 2, 1 +50, 4, 768, 278, 23, 69, 1, 0, 1 +50, 7, 200, 268, 23, 67, 1, 0, 1 +50, 8, 814, 266, 17, 44, 1, 0, 1 +50, 9, 222, 271, 21, 65, 1, 0, 1 +50, 10, 840, 277, 11, 35, 1, 0, 1 +50, 18, 319, 266, 15, 43, 1, 0, 1 +50, 48, 281, 267, 14, 43, 1, 0, 1 +50, 49, 242, 264, 18, 50, 1, 0, 1 +51, 1, 481, 289, 57, 44, 1, 2, 1 +51, 3, 569, 284, 84, 90, 1, 2, 1 +51, 4, 770, 279, 24, 70, 1, 0, 1 +51, 7, 199, 270, 23, 66, 1, 0, 1 +51, 8, 817, 266, 16, 45, 1, 0, 1 +51, 9, 221, 275, 21, 62, 1, 0, 1 +51, 10, 842, 277, 11, 35, 1, 0, 1 +51, 18, 318, 267, 16, 43, 1, 0, 1 +51, 41, 298, 274, 15, 38, 1, 0, 1 +51, 48, 280, 267, 15, 45, 1, 0, 1 +51, 49, 241, 264, 18, 49, 1, 0, 1 +51, 55, 408, 256, 13, 28, 1, 0, 1 +51, 56, 171, 277, 16, 55, 1, 0, 1 +52, 1, 481, 290, 57, 43, 1, 2, 1 +52, 3, 569, 285, 84, 91, 1, 2, 1 +52, 4, 772, 278, 25, 72, 1, 0, 1 +52, 7, 197, 271, 22, 65, 1, 0, 1 +52, 8, 819, 265, 17, 46, 1, 0, 1 +52, 9, 219, 278, 21, 60, 1, 0, 1 +52, 18, 317, 267, 17, 44, 1, 0, 1 +52, 41, 297, 274, 16, 38, 1, 0, 1 +52, 48, 279, 267, 15, 45, 1, 0, 1 +52, 49, 240, 265, 17, 46, 1, 0, 1 +52, 50, 800, 257, 13, 32, 1, 0, 1 +52, 55, 408, 256, 13, 28, 1, 0, 1 +52, 56, 169, 278, 16, 56, 1, 0, 1 +53, 1, 482, 290, 57, 44, 1, 2, 1 +53, 3, 569, 285, 85, 92, 1, 2, 1 +53, 4, 775, 279, 25, 73, 1, 0, 1 +53, 7, 196, 272, 23, 66, 1, 0, 1 +53, 8, 821, 267, 16, 43, 1, 0, 1 +53, 9, 218, 278, 21, 61, 1, 0, 1 +53, 10, 847, 278, 12, 36, 1, 0, 1 +53, 18, 316, 268, 17, 44, 1, 0, 1 +53, 41, 296, 274, 16, 41, 1, 0, 1 +53, 48, 279, 269, 15, 44, 1, 0, 1 +53, 49, 238, 266, 17, 46, 1, 0, 1 +53, 50, 802, 257, 13, 32, 1, 0, 1 +53, 55, 408, 257, 13, 27, 1, 0, 1 +53, 56, 167, 278, 16, 56, 1, 0, 1 +53, 57, 378, 258, 9, 27, 1, 0, 1 +54, 1, 481, 291, 58, 44, 1, 2, 1 +54, 3, 571, 288, 84, 91, 1, 2, 1 +54, 4, 777, 279, 25, 74, 1, 0, 1 +54, 7, 194, 271, 24, 68, 1, 0, 1 +54, 8, 824, 268, 15, 41, 1, 0, 1 +54, 9, 217, 279, 21, 61, 1, 0, 1 +54, 10, 849, 279, 12, 35, 1, 0, 1 +54, 18, 316, 268, 17, 45, 1, 0, 1 +54, 41, 295, 274, 16, 41, 1, 0, 1 +54, 48, 277, 269, 15, 45, 1, 0, 1 +54, 49, 237, 266, 16, 44, 1, 0, 1 +54, 50, 803, 258, 12, 31, 1, 0, 1 +54, 55, 408, 257, 13, 27, 1, 0, 1 +54, 56, 165, 278, 17, 57, 1, 0, 1 +54, 57, 378, 258, 9, 27, 1, 0, 1 +55, 1, 481, 290, 58, 45, 1, 2, 1 +55, 3, 572, 288, 84, 91, 1, 2, 1 +55, 4, 779, 279, 25, 74, 1, 0, 1 +55, 7, 193, 271, 23, 69, 1, 0, 1 +55, 8, 825, 267, 16, 43, 1, 0, 1 +55, 9, 216, 277, 21, 62, 1, 0, 1 +55, 10, 851, 279, 12, 35, 1, 0, 1 +55, 18, 315, 269, 17, 44, 1, 0, 1 +55, 41, 296, 275, 16, 39, 1, 0, 1 +55, 48, 276, 270, 15, 45, 1, 0, 1 +55, 49, 236, 268, 17, 44, 1, 0, 1 +55, 50, 805, 258, 12, 32, 1, 0, 1 +55, 55, 408, 258, 13, 26, 1, 0, 1 +55, 56, 163, 278, 17, 58, 1, 0, 1 +55, 57, 378, 257, 9, 29, 1, 0, 1 +56, 1, 481, 291, 58, 45, 1, 2, 1 +56, 3, 572, 288, 85, 93, 1, 2, 1 +56, 4, 781, 280, 25, 74, 1, 0, 1 +56, 7, 190, 273, 23, 65, 1, 0, 1 +56, 8, 828, 267, 16, 44, 1, 0, 1 +56, 9, 214, 278, 22, 62, 1, 0, 1 +56, 18, 314, 269, 17, 44, 1, 0, 1 +56, 41, 295, 275, 16, 40, 1, 0, 1 +56, 48, 277, 272, 14, 44, 1, 0, 1 +56, 49, 235, 270, 17, 43, 1, 0, 1 +56, 55, 408, 258, 13, 27, 1, 0, 1 +56, 56, 162, 278, 17, 59, 1, 0, 1 +56, 57, 377, 256, 10, 29, 1, 0, 1 +56, 61, 573, 269, 48, 28, 1, 2, 1 +57, 1, 480, 290, 59, 46, 1, 2, 1 +57, 3, 573, 289, 85, 92, 1, 2, 1 +57, 4, 782, 277, 27, 77, 1, 0, 1 +57, 7, 189, 273, 23, 67, 1, 0, 1 +57, 8, 829, 264, 18, 47, 1, 0, 1 +57, 9, 212, 275, 23, 65, 1, 0, 1 +57, 18, 314, 269, 17, 44, 1, 0, 1 +57, 48, 276, 271, 15, 45, 1, 0, 1 +57, 49, 232, 268, 17, 46, 1, 0, 1 +57, 55, 408, 256, 13, 27, 1, 0, 1 +57, 56, 160, 278, 18, 60, 1, 0, 1 +57, 57, 377, 256, 9, 29, 1, 0, 1 +57, 61, 569, 266, 54, 31, 1, 2, 1 +58, 1, 479, 289, 61, 46, 1, 2, 1 +58, 3, 573, 288, 85, 92, 1, 2, 1 +58, 4, 785, 276, 27, 78, 1, 0, 1 +58, 7, 187, 274, 23, 66, 1, 0, 1 +58, 8, 830, 261, 18, 51, 1, 0, 1 +58, 9, 210, 270, 24, 71, 1, 0, 1 +58, 18, 313, 267, 17, 46, 1, 0, 1 +58, 48, 275, 269, 14, 45, 1, 0, 1 +58, 49, 229, 265, 18, 50, 1, 0, 1 +58, 55, 408, 256, 13, 26, 1, 0, 1 +58, 56, 157, 277, 18, 60, 1, 0, 1 +58, 61, 566, 266, 56, 31, 1, 2, 1 +59, 1, 478, 288, 61, 47, 1, 2, 1 +59, 3, 574, 287, 86, 94, 1, 2, 1 +59, 4, 788, 277, 26, 77, 1, 0, 1 +59, 7, 185, 273, 23, 66, 1, 0, 1 +59, 8, 831, 259, 20, 52, 1, 0, 1 +59, 9, 207, 267, 25, 73, 1, 0, 1 +59, 18, 313, 265, 17, 47, 1, 0, 1 +59, 41, 288, 272, 16, 40, 1, 0, 1 +59, 48, 274, 269, 15, 44, 1, 0, 1 +59, 49, 226, 265, 19, 50, 1, 0, 1 +59, 55, 408, 255, 13, 26, 1, 0, 1 +59, 56, 154, 276, 19, 62, 1, 0, 1 +59, 57, 376, 256, 11, 31, 1, 0, 1 +59, 61, 563, 265, 55, 30, 1, 2, 1 +60, 1, 478, 287, 61, 47, 1, 2, 1 +60, 3, 574, 287, 87, 94, 1, 2, 1 +60, 4, 790, 278, 27, 77, 1, 0, 1 +60, 7, 182, 273, 23, 67, 1, 0, 1 +60, 8, 833, 258, 20, 54, 1, 0, 1 +60, 9, 207, 270, 24, 70, 1, 0, 1 +60, 18, 312, 265, 17, 46, 1, 0, 1 +60, 41, 287, 271, 16, 41, 1, 0, 1 +60, 48, 272, 268, 15, 45, 1, 0, 1 +60, 49, 225, 265, 19, 50, 1, 0, 1 +60, 55, 408, 255, 13, 26, 1, 0, 1 +60, 56, 153, 276, 19, 60, 1, 0, 1 +60, 57, 375, 255, 11, 33, 1, 0, 1 +60, 61, 557, 264, 57, 31, 1, 2, 1 +61, 1, 478, 287, 62, 48, 1, 2, 1 +61, 3, 576, 287, 86, 93, 1, 2, 1 +61, 4, 792, 277, 26, 77, 1, 0, 1 +61, 7, 181, 275, 22, 64, 1, 0, 1 +61, 8, 833, 256, 21, 55, 1, 0, 1 +61, 9, 206, 271, 23, 69, 1, 0, 1 +61, 18, 312, 266, 16, 45, 1, 0, 1 +61, 41, 284, 272, 17, 42, 1, 0, 1 +61, 47, 503, 240, 19, 17, 1, 2, 1 +61, 48, 271, 268, 16, 46, 1, 0, 1 +61, 55, 408, 254, 12, 26, 1, 0, 1 +61, 56, 151, 277, 20, 59, 1, 0, 1 +61, 57, 373, 253, 12, 35, 1, 0, 1 +61, 61, 551, 263, 60, 31, 1, 2, 1 +62, 1, 478, 287, 61, 47, 1, 2, 1 +62, 3, 576, 287, 86, 94, 1, 2, 1 +62, 4, 794, 278, 26, 75, 1, 0, 1 +62, 7, 180, 273, 21, 63, 1, 0, 1 +62, 8, 834, 256, 21, 55, 1, 0, 1 +62, 9, 205, 270, 23, 69, 1, 0, 1 +62, 18, 311, 265, 16, 46, 1, 0, 1 +62, 41, 282, 272, 17, 43, 1, 0, 1 +62, 47, 503, 240, 20, 17, 1, 2, 1 +62, 55, 407, 254, 13, 26, 1, 0, 1 +62, 56, 149, 274, 20, 61, 1, 0, 1 +62, 57, 373, 252, 12, 37, 1, 0, 1 +62, 61, 546, 263, 63, 31, 1, 2, 1 +63, 1, 477, 287, 64, 49, 1, 2, 1 +63, 3, 577, 287, 88, 94, 1, 2, 1 +63, 4, 798, 274, 26, 75, 1, 0, 1 +63, 7, 177, 276, 23, 66, 1, 0, 1 +63, 8, 838, 253, 20, 52, 1, 0, 1 +63, 9, 205, 273, 24, 71, 1, 0, 1 +63, 41, 281, 273, 19, 47, 1, 0, 1 +63, 48, 265, 271, 15, 44, 1, 0, 1 +63, 55, 406, 256, 13, 28, 1, 0, 1 +63, 56, 147, 280, 21, 61, 1, 0, 1 +63, 57, 372, 251, 12, 39, 1, 0, 1 +63, 61, 544, 262, 64, 32, 1, 2, 1 +64, 1, 477, 287, 64, 49, 1, 2, 1 +64, 3, 576, 287, 90, 97, 1, 2, 1 +64, 4, 800, 279, 27, 76, 1, 0, 1 +64, 7, 176, 273, 22, 65, 1, 0, 1 +64, 8, 842, 260, 19, 49, 1, 0, 1 +64, 9, 204, 271, 23, 69, 1, 0, 1 +64, 18, 309, 265, 16, 46, 1, 0, 1 +64, 41, 281, 269, 19, 48, 1, 0, 1 +64, 48, 264, 266, 15, 46, 1, 0, 1 +64, 49, 235, 274, 14, 37, 1, 0, 1 +64, 55, 406, 256, 13, 28, 1, 0, 1 +64, 56, 146, 276, 20, 60, 1, 0, 1 +64, 57, 371, 251, 13, 39, 1, 0, 1 +65, 1, 477, 288, 63, 49, 1, 2, 1 +65, 3, 576, 287, 90, 98, 1, 2, 1 +65, 4, 803, 280, 26, 74, 1, 0, 1 +65, 7, 173, 274, 23, 66, 1, 0, 1 +65, 8, 844, 261, 18, 47, 1, 0, 1 +65, 9, 201, 274, 23, 66, 1, 0, 1 +65, 18, 308, 264, 16, 47, 1, 0, 1 +65, 41, 282, 272, 18, 46, 1, 0, 1 +65, 47, 502, 240, 21, 18, 1, 2, 1 +65, 48, 263, 267, 15, 46, 1, 0, 1 +65, 49, 235, 277, 13, 34, 1, 0, 1 +65, 55, 405, 256, 12, 27, 1, 0, 1 +65, 56, 143, 278, 20, 59, 1, 0, 1 +65, 57, 371, 253, 10, 33, 1, 0, 1 +66, 1, 477, 289, 64, 49, 1, 2, 1 +66, 3, 576, 287, 92, 99, 1, 2, 1 +66, 4, 806, 280, 26, 74, 1, 0, 1 +66, 7, 172, 276, 23, 68, 1, 0, 1 +66, 8, 846, 259, 18, 47, 1, 0, 1 +66, 9, 200, 277, 23, 66, 1, 0, 1 +66, 41, 280, 275, 19, 46, 1, 0, 1 +66, 47, 502, 239, 21, 19, 1, 2, 1 +66, 48, 262, 268, 16, 50, 1, 0, 1 +66, 49, 234, 280, 13, 34, 1, 0, 1 +66, 50, 831, 250, 11, 27, 1, 0, 1 +66, 55, 404, 256, 13, 27, 1, 0, 1 +66, 56, 142, 280, 20, 60, 1, 0, 1 +66, 57, 370, 254, 11, 32, 1, 0, 1 +66, 61, 531, 261, 69, 34, 1, 2, 1 +67, 1, 476, 289, 64, 50, 1, 2, 1 +67, 3, 576, 288, 92, 101, 1, 2, 1 +67, 4, 807, 284, 26, 74, 1, 0, 1 +67, 7, 170, 275, 23, 66, 1, 0, 1 +67, 8, 849, 265, 17, 46, 1, 0, 1 +67, 9, 198, 277, 22, 63, 1, 0, 1 +67, 18, 299, 263, 18, 52, 1, 0, 1 +67, 41, 276, 273, 19, 46, 1, 0, 1 +67, 47, 502, 240, 22, 19, 1, 2, 1 +67, 48, 261, 268, 16, 49, 1, 0, 1 +67, 49, 231, 277, 13, 34, 1, 0, 1 +67, 50, 833, 250, 11, 27, 1, 0, 1 +67, 56, 140, 274, 21, 62, 1, 0, 1 +67, 57, 369, 253, 11, 34, 1, 0, 1 +67, 61, 527, 262, 67, 33, 1, 2, 1 +68, 1, 476, 289, 64, 51, 1, 2, 1 +68, 3, 576, 288, 93, 101, 1, 2, 1 +68, 4, 808, 283, 27, 76, 1, 0, 1 +68, 7, 168, 276, 23, 66, 1, 0, 1 +68, 8, 850, 264, 17, 45, 1, 0, 1 +68, 9, 196, 280, 22, 61, 1, 0, 1 +68, 18, 298, 266, 18, 52, 1, 0, 1 +68, 41, 273, 274, 20, 47, 1, 0, 1 +68, 47, 501, 240, 22, 19, 1, 2, 1 +68, 48, 259, 269, 17, 51, 1, 0, 1 +68, 49, 228, 278, 14, 36, 1, 0, 1 +68, 50, 831, 251, 12, 28, 1, 0, 1 +68, 56, 139, 278, 21, 60, 1, 0, 1 +68, 57, 369, 252, 11, 35, 1, 0, 1 +68, 61, 523, 261, 69, 34, 1, 2, 1 +69, 1, 474, 291, 64, 50, 1, 2, 1 +69, 3, 575, 290, 94, 103, 1, 2, 1 +69, 4, 810, 286, 28, 77, 1, 0, 1 +69, 7, 167, 274, 24, 68, 1, 0, 1 +69, 8, 852, 266, 17, 46, 1, 0, 1 +69, 9, 193, 278, 22, 63, 1, 0, 1 +69, 18, 298, 266, 18, 52, 1, 0, 1 +69, 41, 272, 273, 19, 48, 1, 0, 1 +69, 47, 501, 242, 20, 17, 1, 2, 1 +69, 48, 256, 268, 16, 48, 1, 0, 1 +69, 49, 225, 277, 14, 36, 1, 0, 1 +69, 50, 830, 254, 13, 29, 1, 0, 1 +69, 56, 137, 275, 22, 63, 1, 0, 1 +69, 57, 367, 253, 11, 33, 1, 0, 1 +69, 61, 520, 262, 67, 32, 1, 2, 1 +70, 1, 473, 291, 64, 51, 1, 2, 1 +70, 3, 574, 289, 96, 105, 1, 2, 1 +70, 4, 812, 286, 28, 77, 1, 0, 1 +70, 7, 164, 274, 24, 69, 1, 0, 1 +70, 8, 852, 266, 18, 46, 1, 0, 1 +70, 9, 190, 276, 23, 66, 1, 0, 1 +70, 18, 297, 268, 18, 50, 1, 0, 1 +70, 41, 270, 275, 19, 46, 1, 0, 1 +70, 47, 500, 242, 20, 17, 1, 2, 1 +70, 48, 253, 270, 17, 48, 1, 0, 1 +70, 49, 223, 276, 14, 36, 1, 0, 1 +70, 50, 832, 254, 12, 29, 1, 0, 1 +70, 56, 134, 274, 23, 66, 1, 0, 1 +70, 57, 365, 253, 12, 34, 1, 0, 1 +70, 61, 517, 262, 64, 31, 1, 2, 1 +71, 1, 472, 292, 64, 50, 1, 2, 1 +71, 3, 574, 291, 96, 106, 1, 2, 1 +71, 4, 814, 286, 29, 79, 1, 0, 1 +71, 7, 162, 273, 25, 70, 1, 0, 1 +71, 8, 852, 268, 18, 46, 1, 0, 1 +71, 9, 188, 275, 23, 66, 1, 0, 1 +71, 18, 296, 268, 18, 51, 1, 0, 1 +71, 41, 268, 275, 18, 47, 1, 0, 1 +71, 47, 499, 243, 18, 15, 1, 2, 1 +71, 48, 252, 269, 17, 51, 1, 0, 1 +71, 49, 220, 276, 13, 36, 1, 0, 1 +71, 56, 131, 273, 22, 64, 1, 0, 1 +71, 57, 365, 252, 11, 35, 1, 0, 1 +71, 61, 515, 262, 63, 31, 1, 2, 1 +71, 82, 558, 243, 17, 13, 1, 2, 1 +72, 1, 471, 291, 64, 51, 1, 2, 1 +72, 3, 573, 291, 98, 107, 1, 2, 1 +72, 4, 817, 286, 29, 80, 1, 0, 1 +72, 7, 160, 274, 24, 70, 1, 0, 1 +72, 8, 853, 268, 18, 46, 1, 0, 1 +72, 9, 186, 275, 23, 68, 1, 0, 1 +72, 41, 266, 277, 18, 46, 1, 0, 1 +72, 47, 498, 243, 18, 15, 1, 2, 1 +72, 48, 250, 270, 18, 52, 1, 0, 1 +72, 49, 217, 277, 14, 35, 1, 0, 1 +72, 55, 398, 256, 13, 27, 1, 0, 1 +72, 56, 128, 278, 22, 61, 1, 0, 1 +72, 57, 364, 253, 11, 36, 1, 0, 1 +72, 61, 511, 262, 64, 30, 1, 2, 1 +72, 82, 557, 241, 18, 15, 1, 2, 1 +73, 1, 469, 292, 65, 51, 1, 2, 1 +73, 3, 572, 292, 98, 108, 1, 2, 1 +73, 4, 819, 286, 29, 81, 1, 0, 1 +73, 7, 158, 273, 25, 70, 1, 0, 1 +73, 8, 854, 269, 18, 46, 1, 0, 1 +73, 9, 183, 275, 23, 66, 1, 0, 1 +73, 18, 294, 268, 16, 48, 1, 0, 1 +73, 41, 264, 276, 18, 45, 1, 0, 1 +73, 47, 496, 242, 20, 16, 1, 2, 1 +73, 48, 249, 271, 18, 51, 1, 0, 1 +73, 49, 214, 277, 13, 35, 1, 0, 1 +73, 55, 397, 256, 13, 28, 1, 0, 1 +73, 56, 125, 275, 22, 64, 1, 0, 1 +73, 57, 363, 252, 11, 37, 1, 0, 1 +73, 61, 509, 263, 62, 29, 1, 2, 1 +73, 82, 557, 242, 17, 14, 1, 2, 1 +74, 1, 468, 292, 65, 51, 1, 2, 1 +74, 3, 572, 291, 98, 110, 1, 2, 1 +74, 4, 821, 286, 30, 81, 1, 0, 1 +74, 7, 157, 273, 25, 70, 1, 0, 1 +74, 8, 855, 270, 17, 44, 1, 0, 1 +74, 9, 181, 274, 24, 69, 1, 0, 1 +74, 18, 293, 269, 16, 46, 1, 0, 1 +74, 24, 695, 303, 43, 35, 1, 2, 1 +74, 41, 262, 276, 18, 46, 1, 0, 1 +74, 47, 495, 242, 20, 17, 1, 2, 1 +74, 48, 243, 266, 19, 54, 1, 0, 1 +74, 49, 211, 277, 14, 35, 1, 0, 1 +74, 55, 396, 255, 13, 28, 1, 0, 1 +74, 56, 123, 273, 23, 67, 1, 0, 1 +74, 57, 361, 252, 12, 38, 1, 0, 1 +74, 61, 508, 263, 59, 28, 1, 2, 1 +74, 82, 556, 242, 18, 14, 1, 2, 1 +75, 1, 466, 291, 67, 53, 1, 2, 1 +75, 3, 571, 292, 99, 110, 1, 2, 1 +75, 4, 823, 288, 30, 82, 1, 0, 1 +75, 7, 153, 273, 24, 69, 1, 0, 1 +75, 8, 856, 270, 18, 47, 1, 0, 1 +75, 9, 178, 276, 24, 67, 1, 0, 1 +75, 18, 291, 268, 16, 48, 1, 0, 1 +75, 24, 696, 304, 42, 35, 1, 2, 1 +75, 41, 260, 276, 18, 46, 1, 0, 1 +75, 47, 494, 242, 20, 17, 1, 2, 1 +75, 48, 240, 265, 18, 51, 1, 0, 1 +75, 49, 207, 276, 14, 36, 1, 0, 1 +75, 55, 395, 255, 13, 27, 1, 0, 1 +75, 56, 120, 275, 22, 66, 1, 0, 1 +75, 57, 359, 252, 12, 38, 1, 0, 1 +75, 61, 504, 264, 58, 27, 1, 2, 1 +75, 82, 554, 241, 19, 16, 1, 2, 1 +75, 85, 799, 259, 11, 29, 1, 0, 1 +76, 1, 465, 291, 68, 54, 1, 2, 1 +76, 3, 571, 292, 100, 111, 1, 2, 1 +76, 4, 825, 288, 31, 83, 1, 0, 1 +76, 7, 149, 273, 25, 69, 1, 0, 1 +76, 8, 856, 269, 18, 47, 1, 0, 1 +76, 9, 175, 274, 24, 68, 1, 0, 1 +76, 18, 289, 268, 16, 46, 1, 0, 1 +76, 41, 257, 278, 18, 44, 1, 0, 1 +76, 48, 239, 265, 18, 51, 1, 0, 1 +76, 49, 203, 276, 14, 35, 1, 0, 1 +76, 55, 394, 254, 12, 27, 1, 0, 1 +76, 56, 117, 275, 22, 65, 1, 0, 1 +76, 57, 358, 252, 12, 38, 1, 0, 1 +76, 61, 499, 262, 61, 29, 1, 2, 1 +76, 82, 553, 241, 19, 15, 1, 2, 1 +76, 85, 799, 259, 11, 29, 1, 0, 1 +77, 1, 464, 291, 68, 54, 1, 2, 1 +77, 3, 570, 293, 100, 111, 1, 2, 1 +77, 4, 825, 289, 32, 86, 1, 0, 1 +77, 7, 146, 272, 26, 71, 1, 0, 1 +77, 8, 856, 270, 19, 47, 1, 0, 1 +77, 9, 173, 274, 23, 67, 1, 0, 1 +77, 18, 286, 268, 16, 47, 1, 0, 1 +77, 41, 254, 278, 18, 44, 1, 0, 1 +77, 48, 237, 268, 19, 52, 1, 0, 1 +77, 49, 200, 276, 14, 36, 1, 0, 1 +77, 55, 392, 254, 13, 28, 1, 0, 1 +77, 56, 114, 278, 21, 62, 1, 0, 1 +77, 57, 356, 251, 13, 39, 1, 0, 1 +77, 61, 495, 262, 63, 29, 1, 2, 1 +77, 82, 552, 242, 19, 15, 1, 2, 1 +77, 85, 798, 259, 11, 29, 1, 0, 1 +78, 1, 462, 291, 68, 54, 1, 2, 1 +78, 3, 568, 293, 102, 113, 1, 2, 1 +78, 4, 827, 289, 32, 87, 1, 0, 1 +78, 7, 143, 271, 26, 73, 1, 0, 1 +78, 8, 857, 270, 18, 48, 1, 0, 1 +78, 9, 169, 274, 24, 68, 1, 0, 1 +78, 18, 282, 269, 17, 49, 1, 0, 1 +78, 41, 251, 276, 18, 47, 1, 0, 1 +78, 48, 235, 271, 19, 51, 1, 0, 1 +78, 49, 194, 275, 15, 38, 1, 0, 1 +78, 55, 391, 254, 13, 28, 1, 0, 1 +78, 56, 111, 275, 23, 66, 1, 0, 1 +78, 57, 354, 252, 12, 37, 1, 0, 1 +78, 61, 493, 261, 61, 29, 1, 2, 1 +78, 82, 551, 241, 20, 16, 1, 2, 1 +78, 85, 797, 259, 11, 29, 1, 0, 1 +79, 1, 461, 291, 66, 53, 1, 2, 1 +79, 3, 568, 294, 100, 113, 1, 2, 1 +79, 4, 829, 290, 32, 86, 1, 0, 1 +79, 7, 138, 270, 27, 74, 1, 0, 1 +79, 8, 856, 270, 20, 48, 1, 0, 1 +79, 9, 167, 274, 23, 69, 1, 0, 1 +79, 18, 278, 266, 18, 53, 1, 0, 1 +79, 41, 248, 276, 18, 47, 1, 0, 1 +79, 48, 230, 265, 21, 56, 1, 0, 1 +79, 49, 192, 275, 15, 37, 1, 0, 1 +79, 56, 107, 276, 23, 65, 1, 0, 1 +79, 57, 353, 252, 11, 35, 1, 0, 1 +79, 61, 491, 261, 59, 29, 1, 2, 1 +79, 82, 550, 242, 19, 15, 1, 2, 1 +79, 85, 797, 259, 11, 29, 1, 0, 1 +80, 1, 459, 291, 66, 53, 1, 2, 1 +80, 3, 566, 293, 102, 115, 1, 2, 1 +80, 4, 829, 288, 33, 88, 1, 0, 1 +80, 7, 135, 270, 27, 74, 1, 0, 1 +80, 8, 856, 269, 19, 46, 1, 0, 1 +80, 9, 165, 274, 23, 70, 1, 0, 1 +80, 18, 274, 269, 19, 52, 1, 0, 1 +80, 41, 244, 276, 19, 48, 1, 0, 1 +80, 48, 228, 267, 20, 56, 1, 0, 1 +80, 49, 189, 277, 14, 36, 1, 0, 1 +80, 56, 105, 277, 22, 65, 1, 0, 1 +80, 57, 352, 252, 11, 35, 1, 0, 1 +80, 61, 489, 261, 58, 28, 1, 2, 1 +80, 82, 549, 242, 19, 15, 1, 2, 1 +80, 85, 796, 258, 11, 31, 1, 0, 1 +81, 1, 457, 291, 67, 54, 1, 2, 1 +81, 3, 564, 293, 104, 116, 1, 2, 1 +81, 4, 830, 287, 34, 90, 1, 0, 1 +81, 7, 133, 273, 26, 70, 1, 0, 1 +81, 8, 856, 268, 18, 46, 1, 0, 1 +81, 9, 161, 275, 24, 68, 1, 0, 1 +81, 18, 271, 270, 18, 52, 1, 0, 1 +81, 41, 241, 276, 19, 48, 1, 0, 1 +81, 48, 226, 269, 19, 56, 1, 0, 1 +81, 49, 185, 277, 14, 37, 1, 0, 1 +81, 56, 102, 277, 22, 65, 1, 0, 1 +81, 57, 349, 252, 12, 37, 1, 0, 1 +81, 61, 487, 261, 56, 27, 1, 2, 1 +81, 82, 548, 243, 17, 13, 1, 2, 1 +81, 85, 795, 258, 12, 31, 1, 0, 1 +81, 91, 75, 277, 20, 65, 1, 0, 1 +82, 1, 455, 291, 68, 54, 1, 2, 1 +82, 3, 562, 293, 106, 118, 1, 2, 1 +82, 4, 831, 287, 34, 91, 1, 0, 1 +82, 7, 130, 274, 26, 70, 1, 0, 1 +82, 8, 855, 267, 19, 47, 1, 0, 1 +82, 9, 158, 277, 23, 68, 1, 0, 1 +82, 18, 264, 273, 18, 50, 1, 0, 1 +82, 41, 237, 275, 20, 50, 1, 0, 1 +82, 48, 224, 272, 18, 52, 1, 0, 1 +82, 49, 180, 277, 16, 37, 1, 0, 1 +82, 56, 99, 276, 22, 67, 1, 0, 1 +82, 57, 348, 252, 12, 37, 1, 0, 1 +82, 61, 484, 261, 55, 27, 1, 2, 1 +82, 82, 547, 243, 17, 13, 1, 2, 1 +82, 85, 795, 258, 12, 32, 1, 0, 1 +82, 91, 70, 277, 21, 66, 1, 0, 1 +83, 1, 452, 291, 69, 56, 1, 2, 1 +83, 3, 561, 294, 106, 119, 1, 2, 1 +83, 4, 832, 287, 35, 92, 1, 0, 1 +83, 7, 127, 277, 24, 66, 1, 0, 1 +83, 8, 855, 266, 19, 48, 1, 0, 1 +83, 9, 154, 277, 24, 69, 1, 0, 1 +83, 18, 265, 271, 19, 51, 1, 0, 1 +83, 41, 234, 274, 21, 51, 1, 0, 1 +83, 48, 222, 269, 20, 57, 1, 0, 1 +83, 49, 177, 277, 16, 37, 1, 0, 1 +83, 55, 382, 255, 13, 27, 1, 0, 1 +83, 56, 96, 276, 23, 68, 1, 0, 1 +83, 57, 346, 252, 12, 39, 1, 0, 1 +83, 61, 482, 261, 55, 28, 1, 2, 1 +83, 82, 546, 244, 16, 12, 1, 2, 1 +83, 91, 66, 279, 20, 64, 1, 0, 1 +84, 1, 449, 291, 70, 56, 1, 2, 1 +84, 3, 560, 294, 106, 119, 1, 2, 1 +84, 4, 833, 286, 35, 93, 1, 0, 1 +84, 7, 122, 275, 26, 70, 1, 0, 1 +84, 8, 855, 265, 20, 49, 1, 0, 1 +84, 9, 151, 276, 24, 69, 1, 0, 1 +84, 18, 265, 269, 19, 53, 1, 0, 1 +84, 41, 232, 276, 20, 50, 1, 0, 1 +84, 48, 217, 270, 20, 56, 1, 0, 1 +84, 49, 173, 278, 16, 38, 1, 0, 1 +84, 55, 381, 255, 13, 27, 1, 0, 1 +84, 56, 93, 274, 24, 73, 1, 0, 1 +84, 57, 343, 251, 12, 38, 1, 0, 1 +84, 61, 480, 261, 54, 28, 1, 2, 1 +84, 82, 544, 243, 17, 12, 1, 2, 1 +84, 85, 792, 257, 12, 30, 1, 0, 1 +84, 91, 63, 280, 20, 64, 1, 0, 1 +85, 1, 448, 292, 69, 56, 1, 2, 1 +85, 3, 560, 295, 105, 118, 1, 2, 1 +85, 4, 834, 288, 34, 91, 1, 0, 1 +85, 7, 119, 276, 26, 70, 1, 0, 1 +85, 8, 854, 265, 20, 49, 1, 0, 1 +85, 9, 147, 278, 24, 68, 1, 0, 1 +85, 18, 264, 269, 19, 53, 1, 0, 1 +85, 41, 229, 275, 20, 51, 1, 0, 1 +85, 48, 213, 271, 20, 56, 1, 0, 1 +85, 49, 168, 278, 17, 42, 1, 0, 1 +85, 55, 379, 255, 13, 27, 1, 0, 1 +85, 56, 90, 274, 25, 73, 1, 0, 1 +85, 57, 341, 254, 12, 36, 1, 0, 1 +85, 61, 478, 261, 53, 27, 1, 2, 1 +85, 82, 543, 243, 17, 12, 1, 2, 1 +85, 85, 791, 257, 12, 30, 1, 0, 1 +85, 91, 58, 281, 21, 66, 1, 0, 1 +86, 1, 446, 293, 69, 55, 1, 2, 1 +86, 3, 559, 295, 106, 119, 1, 2, 1 +86, 4, 835, 288, 34, 90, 1, 0, 1 +86, 7, 115, 275, 26, 71, 1, 0, 1 +86, 8, 853, 264, 20, 49, 1, 0, 1 +86, 9, 143, 279, 24, 68, 1, 0, 1 +86, 18, 259, 270, 20, 54, 1, 0, 1 +86, 41, 226, 277, 20, 51, 1, 0, 1 +86, 48, 211, 274, 19, 53, 1, 0, 1 +86, 49, 165, 279, 17, 40, 1, 0, 1 +86, 55, 378, 255, 13, 27, 1, 0, 1 +86, 57, 339, 255, 11, 34, 1, 0, 1 +86, 61, 475, 261, 51, 27, 1, 2, 1 +86, 91, 54, 280, 23, 69, 1, 0, 1 +87, 1, 444, 293, 70, 57, 1, 2, 1 +87, 3, 557, 296, 108, 122, 1, 2, 1 +87, 4, 835, 287, 35, 93, 1, 0, 1 +87, 7, 111, 275, 27, 73, 1, 0, 1 +87, 8, 853, 266, 19, 47, 1, 0, 1 +87, 9, 141, 280, 23, 69, 1, 0, 1 +87, 18, 253, 272, 19, 54, 1, 0, 1 +87, 41, 222, 277, 20, 52, 1, 0, 1 +87, 48, 206, 273, 19, 54, 1, 0, 1 +87, 49, 162, 280, 16, 40, 1, 0, 1 +87, 57, 337, 257, 11, 34, 1, 0, 1 +87, 61, 472, 262, 52, 28, 1, 2, 1 +87, 82, 540, 244, 17, 14, 1, 2, 1 +87, 91, 51, 282, 23, 67, 1, 0, 1 +88, 1, 442, 295, 69, 56, 1, 2, 1 +88, 3, 554, 297, 110, 124, 1, 2, 1 +88, 4, 836, 287, 36, 95, 1, 0, 1 +88, 7, 107, 275, 27, 74, 1, 0, 1 +88, 8, 852, 266, 18, 45, 1, 0, 1 +88, 9, 136, 281, 24, 68, 1, 0, 1 +88, 18, 253, 271, 20, 54, 1, 0, 1 +88, 41, 219, 276, 21, 54, 1, 0, 1 +88, 48, 203, 272, 20, 57, 1, 0, 1 +88, 49, 157, 280, 18, 46, 1, 0, 1 +88, 55, 372, 257, 14, 28, 1, 0, 1 +88, 57, 334, 257, 12, 35, 1, 0, 1 +88, 61, 472, 263, 50, 27, 1, 2, 1 +88, 82, 538, 244, 18, 14, 1, 2, 1 +88, 91, 46, 282, 24, 72, 1, 0, 1 +88, 97, 188, 282, 16, 40, 1, 0, 1 +89, 1, 441, 296, 69, 56, 1, 2, 1 +89, 3, 552, 297, 112, 126, 1, 2, 1 +89, 4, 838, 291, 35, 93, 1, 0, 1 +89, 7, 104, 275, 28, 75, 1, 0, 1 +89, 8, 851, 266, 19, 44, 1, 0, 1 +89, 9, 134, 283, 23, 66, 1, 0, 1 +89, 18, 250, 271, 21, 56, 1, 0, 1 +89, 41, 215, 277, 22, 57, 1, 0, 1 +89, 48, 199, 274, 20, 55, 1, 0, 1 +89, 49, 153, 283, 17, 44, 1, 0, 1 +89, 55, 371, 257, 13, 29, 1, 0, 1 +89, 57, 332, 257, 12, 35, 1, 0, 1 +89, 61, 470, 264, 48, 26, 1, 2, 1 +89, 82, 537, 245, 18, 14, 1, 2, 1 +89, 91, 43, 282, 24, 68, 1, 0, 1 +89, 97, 184, 283, 16, 40, 1, 0, 1 +90, 1, 440, 297, 69, 56, 1, 2, 1 +90, 3, 551, 300, 112, 127, 1, 2, 1 +90, 4, 840, 292, 35, 94, 1, 0, 1 +90, 7, 101, 276, 28, 76, 1, 0, 1 +90, 8, 851, 267, 18, 43, 1, 0, 1 +90, 9, 130, 282, 24, 70, 1, 0, 1 +90, 18, 248, 272, 20, 57, 1, 0, 1 +90, 41, 211, 279, 22, 57, 1, 0, 1 +90, 48, 195, 274, 21, 59, 1, 0, 1 +90, 49, 150, 286, 16, 40, 1, 0, 1 +90, 55, 368, 259, 13, 27, 1, 0, 1 +90, 57, 330, 261, 10, 32, 1, 0, 1 +90, 61, 467, 264, 49, 28, 1, 2, 1 +90, 82, 536, 248, 16, 12, 1, 2, 1 +90, 91, 39, 283, 25, 71, 1, 0, 1 +90, 97, 181, 285, 16, 40, 1, 0, 1 +91, 1, 437, 297, 70, 57, 1, 2, 1 +91, 3, 550, 303, 112, 126, 1, 2, 1 +91, 4, 841, 297, 35, 92, 1, 0, 1 +91, 7, 98, 277, 27, 76, 1, 0, 1 +91, 8, 851, 269, 17, 39, 1, 0, 1 +91, 9, 127, 283, 24, 70, 1, 0, 1 +91, 18, 246, 273, 20, 57, 1, 0, 1 +91, 41, 208, 280, 22, 57, 1, 0, 1 +91, 48, 192, 280, 20, 56, 1, 0, 1 +91, 49, 147, 286, 16, 41, 1, 0, 1 +91, 55, 366, 259, 13, 27, 1, 0, 1 +91, 56, 73, 278, 24, 73, 1, 0, 1 +91, 57, 328, 260, 11, 32, 1, 0, 1 +91, 61, 464, 264, 49, 27, 1, 2, 1 +91, 82, 535, 249, 16, 12, 1, 2, 1 +91, 91, 34, 284, 26, 72, 1, 0, 1 +91, 97, 177, 286, 16, 39, 1, 0, 1 +92, 1, 436, 298, 70, 57, 1, 2, 1 +92, 3, 548, 304, 113, 128, 1, 2, 1 +92, 4, 843, 299, 35, 93, 1, 0, 1 +92, 7, 93, 277, 29, 79, 1, 0, 1 +92, 8, 851, 270, 17, 37, 1, 0, 1 +92, 9, 124, 283, 25, 71, 1, 0, 1 +92, 18, 238, 280, 19, 54, 1, 0, 1 +92, 41, 205, 282, 21, 57, 1, 0, 1 +92, 48, 189, 278, 21, 60, 1, 0, 1 +92, 55, 364, 261, 12, 26, 1, 0, 1 +92, 56, 70, 278, 24, 73, 1, 0, 1 +92, 57, 326, 259, 12, 35, 1, 0, 1 +92, 61, 461, 264, 48, 28, 1, 2, 1 +92, 82, 532, 249, 17, 12, 1, 2, 1 +92, 85, 794, 256, 14, 38, 1, 0, 1 +92, 91, 31, 285, 25, 71, 1, 0, 1 +92, 97, 174, 287, 16, 39, 1, 0, 1 +92, 101, 757, 259, 12, 30, 1, 0, 1 +93, 1, 433, 300, 70, 56, 1, 2, 1 +93, 3, 544, 302, 116, 132, 1, 2, 1 +93, 4, 844, 302, 35, 92, 1, 0, 1 +93, 7, 90, 279, 28, 78, 1, 0, 1 +93, 8, 850, 271, 17, 38, 1, 0, 1 +93, 9, 121, 287, 24, 68, 1, 0, 1 +93, 18, 237, 278, 19, 55, 1, 0, 1 +93, 41, 201, 282, 22, 58, 1, 0, 1 +93, 48, 185, 279, 21, 61, 1, 0, 1 +93, 49, 137, 288, 17, 44, 1, 0, 1 +93, 55, 361, 261, 13, 28, 1, 0, 1 +93, 57, 324, 259, 12, 36, 1, 0, 1 +93, 61, 459, 265, 48, 27, 1, 2, 1 +93, 82, 530, 249, 19, 13, 1, 2, 1 +93, 85, 794, 257, 15, 39, 1, 0, 1 +93, 91, 27, 287, 25, 69, 1, 0, 1 +93, 97, 169, 290, 16, 40, 1, 0, 1 +93, 101, 756, 260, 12, 30, 1, 0, 1 +94, 1, 431, 301, 69, 55, 1, 2, 1 +94, 3, 542, 303, 118, 133, 1, 2, 1 +94, 4, 845, 303, 36, 93, 1, 0, 1 +94, 7, 86, 281, 29, 78, 1, 0, 1 +94, 8, 849, 272, 19, 40, 1, 0, 1 +94, 9, 117, 288, 25, 70, 1, 0, 1 +94, 18, 229, 283, 20, 54, 1, 0, 1 +94, 41, 198, 287, 21, 54, 1, 0, 1 +94, 48, 185, 279, 22, 63, 1, 0, 1 +94, 49, 134, 289, 17, 44, 1, 0, 1 +94, 55, 359, 261, 13, 29, 1, 0, 1 +94, 56, 68, 285, 21, 64, 1, 0, 1 +94, 57, 321, 261, 12, 36, 1, 0, 1 +94, 61, 458, 266, 46, 27, 1, 2, 1 +94, 82, 529, 249, 19, 14, 1, 2, 1 +94, 85, 790, 258, 14, 38, 1, 0, 1 +94, 91, 22, 289, 25, 68, 1, 0, 1 +94, 97, 165, 291, 16, 41, 1, 0, 1 +94, 101, 753, 261, 12, 29, 1, 0, 1 +95, 1, 430, 302, 68, 55, 1, 2, 1 +95, 3, 541, 307, 117, 131, 1, 2, 1 +95, 4, 846, 305, 36, 93, 1, 0, 1 +95, 7, 83, 283, 28, 77, 1, 0, 1 +95, 8, 848, 272, 18, 42, 1, 0, 1 +95, 9, 112, 289, 26, 71, 1, 0, 1 +95, 18, 224, 284, 20, 55, 1, 0, 1 +95, 41, 195, 289, 21, 54, 1, 0, 1 +95, 48, 179, 279, 22, 64, 1, 0, 1 +95, 55, 357, 261, 13, 29, 1, 0, 1 +95, 56, 57, 287, 21, 68, 1, 0, 1 +95, 57, 319, 260, 13, 39, 1, 0, 1 +95, 61, 457, 266, 45, 27, 1, 2, 1 +95, 82, 528, 249, 19, 14, 1, 2, 1 +95, 85, 786, 259, 14, 38, 1, 0, 1 +95, 91, 18, 288, 26, 71, 1, 0, 1 +95, 97, 161, 292, 17, 42, 1, 0, 1 +95, 101, 751, 261, 13, 31, 1, 0, 1 +96, 1, 427, 303, 69, 55, 1, 2, 1 +96, 3, 539, 307, 118, 133, 1, 2, 1 +96, 4, 848, 305, 37, 94, 1, 0, 1 +96, 7, 80, 285, 28, 77, 1, 0, 1 +96, 8, 846, 273, 20, 44, 1, 0, 1 +96, 9, 109, 291, 25, 70, 1, 0, 1 +96, 18, 221, 284, 20, 56, 1, 0, 1 +96, 41, 191, 289, 21, 55, 1, 0, 1 +96, 48, 175, 283, 21, 60, 1, 0, 1 +96, 55, 355, 262, 13, 30, 1, 0, 1 +96, 56, 53, 288, 21, 67, 1, 0, 1 +96, 57, 317, 261, 13, 39, 1, 0, 1 +96, 61, 456, 267, 42, 26, 1, 2, 1 +96, 85, 784, 260, 13, 37, 1, 0, 1 +96, 91, 14, 291, 26, 71, 1, 0, 1 +96, 97, 158, 293, 16, 41, 1, 0, 1 +96, 101, 749, 261, 13, 32, 1, 0, 1 +97, 1, 424, 303, 70, 55, 1, 2, 1 +97, 3, 538, 310, 116, 131, 1, 2, 1 +97, 4, 849, 305, 37, 95, 1, 0, 1 +97, 7, 78, 286, 27, 75, 1, 0, 1 +97, 8, 845, 272, 21, 48, 1, 0, 1 +97, 9, 106, 291, 25, 70, 1, 0, 1 +97, 18, 221, 282, 21, 57, 1, 0, 1 +97, 41, 187, 287, 22, 58, 1, 0, 1 +97, 48, 170, 279, 23, 66, 1, 0, 1 +97, 55, 354, 263, 13, 29, 1, 0, 1 +97, 56, 49, 289, 22, 67, 1, 0, 1 +97, 57, 314, 267, 12, 33, 1, 0, 1 +97, 61, 453, 268, 42, 25, 1, 2, 1 +97, 82, 524, 250, 21, 15, 1, 2, 1 +97, 85, 783, 260, 13, 37, 1, 0, 1 +97, 91, 11, 286, 28, 78, 1, 0, 1 +97, 97, 153, 290, 18, 47, 1, 0, 1 +97, 101, 748, 261, 13, 31, 1, 0, 1 +97, 108, 554, 300, 75, 22, 1, 2, 1 +98, 1, 421, 303, 70, 57, 1, 2, 1 +98, 3, 536, 312, 117, 131, 1, 2, 1 +98, 4, 851, 306, 38, 96, 1, 0, 1 +98, 7, 75, 288, 27, 73, 1, 0, 1 +98, 8, 843, 273, 22, 49, 1, 0, 1 +98, 9, 101, 290, 27, 74, 1, 0, 1 +98, 18, 220, 283, 21, 55, 1, 0, 1 +98, 41, 183, 288, 23, 58, 1, 0, 1 +98, 48, 166, 278, 22, 66, 1, 0, 1 +98, 55, 352, 263, 13, 30, 1, 0, 1 +98, 56, 45, 290, 19, 60, 1, 0, 1 +98, 57, 312, 267, 12, 34, 1, 0, 1 +98, 61, 451, 268, 42, 26, 1, 2, 1 +98, 82, 522, 250, 21, 15, 1, 2, 1 +98, 85, 781, 260, 14, 36, 1, 0, 1 +98, 91, 7, 286, 29, 79, 1, 0, 1 +98, 97, 149, 293, 17, 44, 1, 0, 1 +98, 101, 746, 261, 13, 31, 1, 0, 1 +98, 108, 553, 299, 77, 23, 1, 2, 1 +99, 1, 419, 303, 70, 56, 1, 2, 1 +99, 3, 534, 312, 119, 133, 1, 2, 1 +99, 4, 853, 307, 38, 98, 1, 0, 1 +99, 7, 70, 287, 28, 75, 1, 0, 1 +99, 8, 842, 274, 21, 49, 1, 0, 1 +99, 9, 98, 290, 26, 73, 1, 0, 1 +99, 18, 212, 282, 21, 58, 1, 0, 1 +99, 41, 179, 287, 23, 60, 1, 0, 1 +99, 48, 161, 284, 21, 61, 1, 0, 1 +99, 56, 42, 291, 19, 59, 1, 0, 1 +99, 57, 308, 264, 13, 37, 1, 0, 1 +99, 61, 450, 268, 40, 26, 1, 2, 1 +99, 82, 520, 250, 21, 16, 1, 2, 1 +99, 85, 780, 259, 14, 39, 1, 0, 1 +99, 91, 3, 287, 30, 79, 1, 0, 1 +99, 97, 144, 294, 18, 45, 1, 0, 1 +99, 101, 745, 261, 13, 32, 1, 0, 1 +99, 108, 551, 300, 78, 23, 1, 2, 1 +100, 1, 416, 304, 71, 56, 1, 2, 1 +100, 3, 532, 313, 120, 135, 1, 2, 1 +100, 4, 854, 307, 39, 99, 1, 0, 1 +100, 7, 66, 290, 27, 74, 1, 0, 1 +100, 8, 842, 274, 21, 50, 1, 0, 1 +100, 9, 94, 291, 26, 72, 1, 0, 1 +100, 18, 206, 280, 22, 63, 1, 0, 1 +100, 41, 175, 289, 23, 59, 1, 0, 1 +100, 48, 158, 280, 22, 67, 1, 0, 1 +100, 55, 347, 264, 13, 29, 1, 0, 1 +100, 57, 306, 263, 13, 39, 1, 0, 1 +100, 61, 448, 268, 41, 26, 1, 2, 1 +100, 82, 519, 250, 21, 15, 1, 2, 1 +100, 85, 778, 259, 14, 41, 1, 0, 1 +100, 97, 140, 294, 18, 47, 1, 0, 1 +100, 101, 743, 262, 13, 31, 1, 0, 1 +100, 108, 548, 300, 77, 23, 1, 2, 1 +101, 1, 415, 304, 69, 56, 1, 2, 1 +101, 3, 529, 314, 122, 137, 1, 2, 1 +101, 4, 855, 308, 39, 101, 1, 0, 1 +101, 7, 61, 288, 28, 75, 1, 0, 1 +101, 8, 842, 275, 21, 51, 1, 0, 1 +101, 9, 90, 289, 27, 74, 1, 0, 1 +101, 18, 200, 281, 22, 64, 1, 0, 1 +101, 41, 171, 288, 24, 60, 1, 0, 1 +101, 48, 154, 288, 20, 58, 1, 0, 1 +101, 55, 344, 263, 13, 30, 1, 0, 1 +101, 57, 303, 264, 14, 39, 1, 0, 1 +101, 61, 446, 268, 40, 26, 1, 2, 1 +101, 82, 518, 251, 19, 14, 1, 2, 1 +101, 85, 776, 259, 14, 42, 1, 0, 1 +101, 97, 135, 295, 18, 45, 1, 0, 1 +101, 101, 741, 262, 13, 32, 1, 0, 1 +101, 108, 543, 300, 83, 26, 1, 2, 1 +102, 1, 412, 305, 70, 55, 1, 2, 1 +102, 3, 527, 316, 121, 137, 1, 2, 1 +102, 4, 856, 308, 40, 102, 1, 0, 1 +102, 7, 57, 290, 27, 73, 1, 0, 1 +102, 8, 841, 275, 21, 52, 1, 0, 1 +102, 9, 85, 289, 28, 75, 1, 0, 1 +102, 18, 196, 284, 22, 63, 1, 0, 1 +102, 41, 166, 287, 24, 62, 1, 0, 1 +102, 48, 150, 287, 20, 60, 1, 0, 1 +102, 55, 342, 264, 13, 29, 1, 0, 1 +102, 61, 445, 268, 39, 26, 1, 2, 1 +102, 82, 516, 252, 19, 14, 1, 2, 1 +102, 85, 773, 258, 15, 42, 1, 0, 1 +102, 97, 131, 294, 18, 47, 1, 0, 1 +102, 101, 740, 262, 13, 31, 1, 0, 1 +102, 108, 540, 301, 85, 25, 1, 2, 1 +102, 114, 213, 282, 18, 50, 1, 0, 1 +103, 1, 409, 304, 71, 57, 1, 2, 1 +103, 3, 525, 314, 123, 140, 1, 2, 1 +103, 4, 857, 308, 41, 104, 1, 0, 1 +103, 7, 52, 290, 28, 74, 1, 0, 1 +103, 8, 840, 274, 21, 54, 1, 0, 1 +103, 9, 81, 291, 27, 74, 1, 0, 1 +103, 18, 192, 282, 24, 67, 1, 0, 1 +103, 41, 163, 288, 24, 61, 1, 0, 1 +103, 48, 146, 282, 22, 66, 1, 0, 1 +103, 55, 340, 264, 13, 29, 1, 0, 1 +103, 57, 300, 264, 13, 38, 1, 0, 1 +103, 61, 443, 268, 39, 26, 1, 2, 1 +103, 82, 514, 251, 19, 15, 1, 2, 1 +103, 85, 771, 258, 14, 43, 1, 0, 1 +103, 97, 127, 295, 18, 47, 1, 0, 1 +103, 101, 737, 261, 13, 32, 1, 0, 1 +103, 108, 539, 300, 83, 26, 1, 2, 1 +103, 114, 210, 281, 18, 52, 1, 0, 1 +104, 1, 407, 304, 71, 57, 1, 2, 1 +104, 3, 522, 314, 124, 141, 1, 2, 1 +104, 4, 858, 311, 41, 104, 1, 0, 1 +104, 7, 49, 290, 27, 74, 1, 0, 1 +104, 8, 839, 275, 21, 53, 1, 0, 1 +104, 9, 77, 292, 27, 73, 1, 0, 1 +104, 18, 188, 285, 22, 65, 1, 0, 1 +104, 41, 158, 288, 24, 62, 1, 0, 1 +104, 48, 142, 288, 19, 59, 1, 0, 1 +104, 55, 338, 264, 13, 30, 1, 0, 1 +104, 56, 20, 290, 21, 69, 1, 0, 1 +104, 57, 297, 263, 13, 38, 1, 0, 1 +104, 61, 442, 267, 37, 26, 1, 2, 1 +104, 82, 513, 251, 20, 15, 1, 2, 1 +104, 85, 770, 259, 14, 41, 1, 0, 1 +104, 97, 122, 295, 18, 46, 1, 0, 1 +104, 101, 735, 262, 13, 32, 1, 0, 1 +104, 108, 538, 300, 83, 26, 1, 2, 1 +104, 114, 207, 281, 18, 51, 1, 0, 1 +105, 1, 405, 304, 71, 56, 1, 2, 1 +105, 3, 521, 317, 123, 139, 1, 2, 1 +105, 4, 860, 311, 42, 106, 1, 0, 1 +105, 7, 43, 290, 27, 74, 1, 0, 1 +105, 8, 838, 276, 21, 52, 1, 0, 1 +105, 9, 72, 293, 27, 73, 1, 0, 1 +105, 18, 184, 284, 23, 65, 1, 0, 1 +105, 41, 153, 287, 25, 63, 1, 0, 1 +105, 48, 137, 289, 19, 59, 1, 0, 1 +105, 55, 335, 263, 14, 31, 1, 0, 1 +105, 56, 15, 288, 22, 69, 1, 0, 1 +105, 57, 294, 264, 14, 37, 1, 0, 1 +105, 61, 440, 267, 37, 25, 1, 2, 1 +105, 82, 511, 251, 20, 15, 1, 2, 1 +105, 85, 769, 259, 13, 40, 1, 0, 1 +105, 97, 119, 297, 17, 45, 1, 0, 1 +105, 101, 734, 264, 12, 30, 1, 0, 1 +105, 108, 536, 301, 84, 26, 1, 2, 1 +105, 114, 203, 281, 18, 51, 1, 0, 1 +105, 118, 324, 262, 12, 32, 1, 0, 1 +106, 1, 403, 304, 70, 55, 1, 2, 1 +106, 3, 519, 318, 123, 139, 1, 2, 1 +106, 4, 861, 311, 42, 108, 1, 0, 1 +106, 7, 38, 288, 28, 77, 1, 0, 1 +106, 8, 838, 276, 20, 52, 1, 0, 1 +106, 9, 67, 289, 29, 76, 1, 0, 1 +106, 18, 179, 283, 22, 66, 1, 0, 1 +106, 41, 147, 284, 27, 68, 1, 0, 1 +106, 48, 132, 293, 18, 55, 1, 0, 1 +106, 55, 333, 262, 13, 32, 1, 0, 1 +106, 56, 8, 287, 23, 69, 1, 0, 1 +106, 57, 292, 263, 14, 37, 1, 0, 1 +106, 61, 438, 266, 37, 26, 1, 2, 1 +106, 82, 510, 251, 19, 15, 1, 2, 1 +106, 85, 767, 259, 14, 40, 1, 0, 1 +106, 97, 115, 296, 17, 45, 1, 0, 1 +106, 101, 732, 264, 13, 31, 1, 0, 1 +106, 108, 533, 301, 83, 26, 1, 2, 1 +106, 114, 200, 281, 17, 50, 1, 0, 1 +106, 118, 322, 262, 12, 32, 1, 0, 1 +107, 1, 401, 303, 70, 56, 1, 2, 1 +107, 3, 517, 319, 124, 140, 1, 2, 1 +107, 4, 861, 310, 43, 110, 1, 0, 1 +107, 7, 33, 287, 29, 77, 1, 0, 1 +107, 8, 837, 275, 19, 51, 1, 0, 1 +107, 9, 62, 287, 30, 78, 1, 0, 1 +107, 18, 175, 284, 22, 66, 1, 0, 1 +107, 41, 144, 287, 26, 64, 1, 0, 1 +107, 48, 128, 294, 18, 55, 1, 0, 1 +107, 55, 331, 262, 13, 31, 1, 0, 1 +107, 56, 4, 287, 23, 71, 1, 0, 1 +107, 57, 290, 263, 14, 38, 1, 0, 1 +107, 61, 437, 266, 35, 25, 1, 2, 1 +107, 82, 507, 250, 21, 16, 1, 2, 1 +107, 85, 767, 258, 14, 40, 1, 0, 1 +107, 97, 110, 296, 17, 45, 1, 0, 1 +107, 101, 730, 265, 12, 28, 1, 0, 1 +107, 108, 527, 300, 88, 28, 1, 2, 1 +107, 114, 197, 281, 17, 50, 1, 0, 1 +107, 118, 319, 261, 12, 32, 1, 0, 1 +108, 1, 398, 303, 71, 56, 1, 2, 1 +108, 3, 514, 318, 126, 143, 1, 2, 1 +108, 4, 862, 311, 43, 111, 1, 0, 1 +108, 7, 28, 286, 29, 77, 1, 0, 1 +108, 8, 836, 275, 19, 51, 1, 0, 1 +108, 9, 59, 287, 29, 79, 1, 0, 1 +108, 18, 170, 282, 22, 68, 1, 0, 1 +108, 41, 138, 282, 28, 70, 1, 0, 1 +108, 48, 124, 286, 21, 63, 1, 0, 1 +108, 55, 329, 263, 13, 30, 1, 0, 1 +108, 56, 0, 287, 24, 71, 1, 0, 1 +108, 61, 435, 266, 35, 25, 1, 2, 1 +108, 82, 506, 249, 20, 16, 1, 2, 1 +108, 85, 765, 259, 13, 38, 1, 0, 1 +108, 97, 105, 294, 18, 48, 1, 0, 1 +108, 101, 729, 265, 12, 29, 1, 0, 1 +108, 108, 519, 300, 97, 32, 1, 2, 1 +108, 114, 193, 280, 18, 51, 1, 0, 1 +108, 118, 317, 261, 11, 31, 1, 0, 1 +109, 1, 396, 303, 71, 56, 1, 2, 1 +109, 3, 511, 319, 127, 143, 1, 2, 1 +109, 4, 863, 311, 44, 113, 1, 0, 1 +109, 7, 23, 286, 29, 77, 1, 0, 1 +109, 8, 834, 275, 20, 52, 1, 0, 1 +109, 9, 55, 288, 29, 79, 1, 0, 1 +109, 18, 166, 280, 23, 72, 1, 0, 1 +109, 41, 135, 287, 25, 64, 1, 0, 1 +109, 48, 119, 290, 20, 62, 1, 0, 1 +109, 55, 326, 262, 13, 31, 1, 0, 1 +109, 56, 0, 287, 21, 73, 1, 0, 1 +109, 57, 287, 261, 14, 39, 1, 0, 1 +109, 61, 432, 266, 37, 25, 1, 2, 1 +109, 82, 505, 251, 19, 14, 1, 2, 1 +109, 85, 763, 259, 13, 37, 1, 0, 1 +109, 97, 99, 294, 19, 51, 1, 0, 1 +109, 101, 727, 265, 12, 29, 1, 0, 1 +109, 108, 522, 301, 88, 28, 1, 2, 1 +109, 114, 190, 280, 17, 52, 1, 0, 1 +109, 118, 315, 262, 11, 30, 1, 0, 1 +110, 1, 394, 302, 70, 56, 1, 2, 1 +110, 3, 509, 320, 128, 145, 1, 2, 1 +110, 4, 864, 312, 45, 115, 1, 0, 1 +110, 7, 17, 284, 31, 80, 1, 0, 1 +110, 8, 834, 277, 19, 52, 1, 0, 1 +110, 9, 50, 289, 30, 78, 1, 0, 1 +110, 18, 162, 282, 23, 70, 1, 0, 1 +110, 41, 131, 287, 25, 65, 1, 0, 1 +110, 48, 114, 293, 19, 57, 1, 0, 1 +110, 55, 324, 262, 13, 31, 1, 0, 1 +110, 56, 0, 284, 19, 75, 1, 0, 1 +110, 57, 285, 261, 14, 39, 1, 0, 1 +110, 61, 430, 265, 37, 26, 1, 2, 1 +110, 82, 503, 251, 19, 14, 1, 2, 1 +110, 85, 762, 260, 13, 37, 1, 0, 1 +110, 97, 95, 295, 19, 50, 1, 0, 1 +110, 108, 521, 301, 87, 28, 1, 2, 1 +110, 114, 186, 279, 18, 53, 1, 0, 1 +110, 118, 313, 261, 11, 31, 1, 0, 1 +111, 1, 391, 302, 71, 55, 1, 2, 1 +111, 3, 506, 320, 130, 147, 1, 2, 1 +111, 4, 865, 312, 45, 116, 1, 0, 1 +111, 7, 11, 283, 32, 83, 1, 0, 1 +111, 8, 832, 277, 19, 52, 1, 0, 1 +111, 9, 46, 289, 29, 79, 1, 0, 1 +111, 18, 158, 282, 23, 71, 1, 0, 1 +111, 41, 127, 290, 24, 61, 1, 0, 1 +111, 48, 108, 293, 19, 58, 1, 0, 1 +111, 55, 321, 262, 13, 31, 1, 0, 1 +111, 56, 0, 284, 15, 75, 1, 0, 1 +111, 61, 429, 264, 35, 26, 1, 2, 1 +111, 82, 501, 250, 20, 15, 1, 2, 1 +111, 85, 760, 259, 13, 37, 1, 0, 1 +111, 97, 90, 295, 19, 50, 1, 0, 1 +111, 108, 517, 301, 87, 28, 1, 2, 1 +111, 114, 181, 277, 19, 57, 1, 0, 1 +111, 118, 313, 261, 11, 32, 1, 0, 1 +112, 1, 390, 303, 71, 56, 1, 2, 1 +112, 3, 502, 321, 131, 147, 1, 2, 1 +112, 4, 866, 314, 44, 115, 1, 0, 1 +112, 7, 6, 284, 32, 82, 1, 0, 1 +112, 8, 831, 277, 19, 52, 1, 0, 1 +112, 9, 42, 289, 30, 79, 1, 0, 1 +112, 18, 153, 284, 22, 69, 1, 0, 1 +112, 41, 122, 289, 24, 63, 1, 0, 1 +112, 48, 103, 294, 18, 57, 1, 0, 1 +112, 55, 318, 262, 13, 31, 1, 0, 1 +112, 61, 426, 264, 37, 26, 1, 2, 1 +112, 82, 499, 250, 21, 16, 1, 2, 1 +112, 85, 758, 261, 13, 35, 1, 0, 1 +112, 97, 85, 296, 18, 49, 1, 0, 1 +112, 108, 512, 302, 93, 30, 1, 2, 1 +112, 114, 178, 279, 19, 55, 1, 0, 1 +112, 118, 311, 261, 12, 32, 1, 0, 1 +113, 1, 387, 303, 71, 56, 1, 2, 1 +113, 3, 500, 321, 131, 148, 1, 2, 1 +113, 4, 867, 316, 44, 114, 1, 0, 1 +113, 7, 1, 283, 32, 83, 1, 0, 1 +113, 9, 36, 288, 29, 80, 1, 0, 1 +113, 18, 148, 285, 22, 68, 1, 0, 1 +113, 41, 116, 287, 26, 66, 1, 0, 1 +113, 48, 96, 296, 19, 55, 1, 0, 1 +113, 55, 316, 262, 13, 31, 1, 0, 1 +113, 57, 277, 260, 14, 37, 1, 0, 1 +113, 61, 424, 264, 37, 26, 1, 2, 1 +113, 82, 498, 252, 19, 14, 1, 2, 1 +113, 85, 756, 262, 13, 34, 1, 0, 1 +113, 97, 80, 296, 18, 52, 1, 0, 1 +113, 108, 498, 303, 115, 38, 1, 2, 1 +113, 114, 175, 280, 18, 54, 1, 0, 1 +113, 118, 306, 261, 12, 32, 1, 0, 1 +114, 1, 385, 304, 71, 55, 1, 2, 1 +114, 3, 497, 322, 133, 149, 1, 2, 1 +114, 4, 869, 317, 43, 114, 1, 0, 1 +114, 7, 0, 284, 30, 82, 1, 0, 1 +114, 9, 30, 286, 31, 82, 1, 0, 1 +114, 18, 144, 286, 21, 68, 1, 0, 1 +114, 41, 110, 287, 26, 68, 1, 0, 1 +114, 48, 92, 296, 18, 56, 1, 0, 1 +114, 55, 313, 262, 13, 31, 1, 0, 1 +114, 57, 275, 260, 13, 37, 1, 0, 1 +114, 61, 423, 265, 34, 25, 1, 2, 1 +114, 82, 496, 251, 19, 15, 1, 2, 1 +114, 85, 755, 263, 13, 33, 1, 0, 1 +114, 97, 74, 297, 19, 51, 1, 0, 1 +114, 108, 489, 302, 129, 45, 1, 2, 1 +114, 114, 170, 280, 18, 55, 1, 0, 1 +114, 118, 302, 262, 12, 31, 1, 0, 1 +115, 1, 382, 303, 71, 56, 1, 2, 1 +115, 3, 494, 321, 134, 152, 1, 2, 1 +115, 4, 869, 318, 45, 115, 1, 0, 1 +115, 7, 0, 283, 28, 85, 1, 0, 1 +115, 9, 25, 288, 30, 81, 1, 0, 1 +115, 18, 139, 288, 21, 67, 1, 0, 1 +115, 41, 105, 290, 26, 65, 1, 0, 1 +115, 55, 311, 262, 13, 31, 1, 0, 1 +115, 61, 420, 263, 36, 26, 1, 2, 1 +115, 82, 494, 252, 19, 14, 1, 2, 1 +115, 85, 754, 262, 12, 33, 1, 0, 1 +115, 97, 70, 297, 19, 51, 1, 0, 1 +115, 108, 501, 302, 102, 35, 1, 2, 1 +115, 114, 166, 282, 19, 54, 1, 0, 1 +115, 118, 300, 262, 12, 31, 1, 0, 1 +116, 1, 379, 303, 71, 55, 1, 2, 1 +116, 3, 491, 321, 136, 153, 1, 2, 1 +116, 4, 871, 319, 44, 115, 1, 0, 1 +116, 7, 0, 289, 23, 79, 1, 0, 1 +116, 9, 20, 285, 31, 86, 1, 0, 1 +116, 18, 133, 289, 21, 68, 1, 0, 1 +116, 41, 99, 291, 26, 65, 1, 0, 1 +116, 48, 88, 285, 22, 66, 1, 0, 1 +116, 55, 309, 262, 13, 31, 1, 0, 1 +116, 61, 419, 265, 34, 25, 1, 2, 1 +116, 82, 492, 252, 19, 14, 1, 2, 1 +116, 85, 752, 262, 13, 34, 1, 0, 1 +116, 97, 65, 299, 19, 52, 1, 0, 1 +116, 108, 495, 302, 106, 37, 1, 2, 1 +116, 114, 163, 282, 18, 53, 1, 0, 1 +117, 1, 376, 303, 72, 55, 1, 2, 1 +117, 3, 488, 322, 136, 153, 1, 2, 1 +117, 4, 872, 320, 45, 117, 1, 0, 1 +117, 7, 0, 290, 22, 80, 1, 0, 1 +117, 9, 15, 288, 31, 82, 1, 0, 1 +117, 18, 128, 289, 21, 68, 1, 0, 1 +117, 41, 94, 288, 27, 71, 1, 0, 1 +117, 48, 80, 292, 19, 61, 1, 0, 1 +117, 55, 304, 262, 14, 31, 1, 0, 1 +117, 61, 417, 266, 33, 23, 1, 2, 1 +117, 82, 490, 252, 20, 15, 1, 2, 1 +117, 85, 751, 262, 12, 34, 1, 0, 1 +117, 97, 60, 299, 18, 53, 1, 0, 1 +117, 108, 492, 303, 106, 37, 1, 2, 1 +117, 114, 157, 279, 20, 58, 1, 0, 1 +118, 1, 372, 302, 73, 56, 1, 2, 1 +118, 3, 485, 323, 136, 153, 1, 2, 1 +118, 4, 872, 320, 46, 119, 1, 0, 1 +118, 7, 0, 294, 19, 77, 1, 0, 1 +118, 9, 10, 287, 31, 84, 1, 0, 1 +118, 18, 123, 288, 21, 71, 1, 0, 1 +118, 41, 88, 290, 28, 70, 1, 0, 1 +118, 48, 73, 297, 18, 58, 1, 0, 1 +118, 55, 301, 261, 14, 33, 1, 0, 1 +118, 57, 264, 261, 13, 36, 1, 0, 1 +118, 61, 415, 265, 33, 24, 1, 2, 1 +118, 82, 488, 252, 20, 15, 1, 2, 1 +118, 85, 743, 261, 12, 32, 1, 0, 1 +118, 97, 54, 299, 19, 53, 1, 0, 1 +118, 108, 484, 302, 116, 43, 1, 2, 1 +118, 114, 154, 280, 19, 58, 1, 0, 1 +119, 1, 369, 302, 74, 57, 1, 2, 1 +119, 3, 482, 323, 137, 154, 1, 2, 1 +119, 4, 873, 321, 46, 119, 1, 0, 1 +119, 7, 0, 295, 15, 77, 1, 0, 1 +119, 9, 5, 287, 32, 86, 1, 0, 1 +119, 18, 118, 288, 22, 73, 1, 0, 1 +119, 41, 83, 291, 29, 74, 1, 0, 1 +119, 48, 65, 299, 19, 59, 1, 0, 1 +119, 55, 297, 261, 15, 33, 1, 0, 1 +119, 57, 262, 261, 13, 36, 1, 0, 1 +119, 61, 413, 265, 33, 24, 1, 2, 1 +119, 82, 487, 252, 18, 15, 1, 2, 1 +119, 85, 741, 261, 12, 31, 1, 0, 1 +119, 97, 50, 301, 18, 51, 1, 0, 1 +119, 108, 485, 302, 109, 40, 1, 2, 1 +119, 114, 150, 281, 19, 57, 1, 0, 1 +120, 1, 367, 302, 73, 57, 1, 2, 1 +120, 3, 478, 324, 138, 155, 1, 2, 1 +120, 4, 873, 322, 47, 119, 1, 0, 1 +120, 9, 0, 286, 32, 89, 1, 0, 1 +120, 18, 112, 289, 22, 74, 1, 0, 1 +120, 41, 77, 291, 29, 76, 1, 0, 1 +120, 48, 58, 299, 20, 62, 1, 0, 1 +120, 55, 295, 262, 15, 32, 1, 0, 1 +120, 57, 260, 262, 12, 33, 1, 0, 1 +120, 61, 411, 265, 33, 24, 1, 2, 1 +120, 82, 484, 252, 19, 14, 1, 2, 1 +120, 97, 43, 301, 20, 54, 1, 0, 1 +120, 108, 486, 302, 101, 38, 1, 2, 1 +120, 114, 145, 279, 21, 61, 1, 0, 1 +121, 1, 364, 301, 75, 58, 1, 2, 1 +121, 3, 475, 323, 139, 156, 1, 2, 1 +121, 4, 876, 324, 47, 120, 1, 0, 1 +121, 9, 0, 279, 29, 96, 1, 0, 1 +121, 18, 107, 288, 23, 77, 1, 0, 1 +121, 41, 73, 294, 27, 72, 1, 0, 1 +121, 48, 52, 300, 20, 63, 1, 0, 1 +121, 55, 292, 262, 14, 32, 1, 0, 1 +121, 57, 257, 262, 12, 33, 1, 0, 1 +121, 61, 408, 264, 34, 24, 1, 2, 1 +121, 82, 482, 252, 19, 14, 1, 2, 1 +121, 85, 738, 261, 13, 33, 1, 0, 1 +121, 97, 38, 301, 18, 54, 1, 0, 1 +121, 108, 487, 302, 95, 35, 1, 2, 1 +121, 114, 141, 279, 21, 61, 1, 0, 1 +122, 1, 360, 300, 77, 59, 1, 2, 1 +122, 3, 473, 322, 139, 157, 1, 2, 1 +122, 4, 877, 324, 48, 122, 1, 0, 1 +122, 9, 0, 279, 26, 97, 1, 0, 1 +122, 18, 102, 289, 23, 75, 1, 0, 1 +122, 41, 68, 295, 27, 71, 1, 0, 1 +122, 48, 47, 301, 20, 63, 1, 0, 1 +122, 55, 289, 262, 15, 32, 1, 0, 1 +122, 57, 254, 262, 12, 34, 1, 0, 1 +122, 61, 406, 264, 33, 23, 1, 2, 1 +122, 82, 481, 252, 18, 14, 1, 2, 1 +122, 85, 733, 260, 13, 32, 1, 0, 1 +122, 97, 32, 302, 19, 55, 1, 0, 1 +122, 108, 488, 301, 87, 33, 1, 2, 1 +122, 114, 136, 278, 22, 63, 1, 0, 1 +123, 1, 358, 300, 77, 60, 1, 2, 1 +123, 3, 471, 322, 139, 158, 1, 2, 1 +123, 4, 879, 323, 49, 127, 1, 0, 1 +123, 9, 0, 282, 23, 96, 1, 0, 1 +123, 18, 97, 288, 23, 78, 1, 0, 1 +123, 41, 63, 297, 27, 69, 1, 0, 1 +123, 48, 40, 302, 20, 63, 1, 0, 1 +123, 55, 286, 262, 15, 33, 1, 0, 1 +123, 57, 251, 262, 12, 33, 1, 0, 1 +123, 61, 404, 264, 33, 24, 1, 2, 1 +123, 82, 479, 252, 19, 13, 1, 2, 1 +123, 85, 730, 260, 12, 31, 1, 0, 1 +123, 97, 27, 303, 18, 55, 1, 0, 1 +123, 108, 488, 301, 85, 32, 1, 2, 1 +123, 114, 132, 277, 23, 66, 1, 0, 1 +124, 1, 357, 301, 75, 58, 1, 2, 1 +124, 3, 467, 322, 140, 159, 1, 2, 1 +124, 4, 881, 323, 50, 128, 1, 0, 1 +124, 9, 0, 290, 19, 88, 1, 0, 1 +124, 18, 92, 292, 23, 77, 1, 0, 1 +124, 41, 58, 298, 27, 70, 1, 0, 1 +124, 48, 35, 304, 19, 61, 1, 0, 1 +124, 55, 282, 261, 17, 35, 1, 0, 1 +124, 57, 248, 262, 11, 33, 1, 0, 1 +124, 61, 402, 264, 33, 23, 1, 2, 1 +124, 82, 477, 252, 19, 14, 1, 2, 1 +124, 85, 727, 260, 13, 31, 1, 0, 1 +124, 97, 21, 303, 19, 56, 1, 0, 1 +124, 108, 488, 300, 81, 30, 1, 2, 1 +124, 114, 128, 278, 22, 65, 1, 0, 1 +125, 1, 355, 300, 75, 59, 1, 2, 1 +125, 3, 464, 322, 141, 160, 1, 2, 1 +125, 4, 883, 323, 50, 130, 1, 0, 1 +125, 7, 0, 308, 13, 53, 1, 0, 1 +125, 9, 0, 291, 15, 88, 1, 0, 1 +125, 18, 87, 292, 23, 77, 1, 0, 1 +125, 41, 53, 302, 26, 69, 1, 0, 1 +125, 48, 29, 306, 20, 63, 1, 0, 1 +125, 55, 279, 261, 17, 35, 1, 0, 1 +125, 57, 246, 262, 11, 31, 1, 0, 1 +125, 61, 401, 264, 32, 23, 1, 2, 1 +125, 82, 475, 253, 19, 14, 1, 2, 1 +125, 85, 725, 260, 13, 32, 1, 0, 1 +125, 97, 16, 306, 18, 55, 1, 0, 1 +125, 108, 484, 301, 80, 29, 1, 2, 1 +125, 114, 124, 278, 22, 65, 1, 0, 1 +126, 1, 352, 301, 75, 58, 1, 2, 1 +126, 3, 460, 322, 143, 163, 1, 2, 1 +126, 4, 884, 325, 51, 130, 1, 0, 1 +126, 7, 0, 310, 11, 51, 1, 0, 1 +126, 18, 82, 292, 24, 78, 1, 0, 1 +126, 41, 48, 304, 26, 68, 1, 0, 1 +126, 48, 24, 306, 20, 65, 1, 0, 1 +126, 55, 277, 262, 16, 34, 1, 0, 1 +126, 57, 244, 263, 11, 31, 1, 0, 1 +126, 61, 399, 264, 32, 23, 1, 2, 1 +126, 82, 473, 253, 19, 14, 1, 2, 1 +126, 85, 723, 260, 13, 33, 1, 0, 1 +126, 97, 12, 307, 18, 56, 1, 0, 1 +126, 101, 703, 263, 13, 32, 1, 0, 1 +126, 108, 479, 301, 83, 30, 1, 2, 1 +126, 114, 119, 279, 23, 67, 1, 0, 1 +127, 1, 350, 301, 74, 57, 1, 2, 1 +127, 3, 457, 321, 144, 165, 1, 2, 1 +127, 4, 887, 325, 51, 131, 1, 0, 1 +127, 18, 76, 294, 24, 78, 1, 0, 1 +127, 41, 41, 304, 28, 71, 1, 0, 1 +127, 48, 17, 308, 20, 62, 1, 0, 1 +127, 55, 275, 262, 17, 35, 1, 0, 1 +127, 57, 240, 262, 12, 31, 1, 0, 1 +127, 61, 397, 264, 32, 23, 1, 2, 1 +127, 82, 471, 253, 19, 14, 1, 2, 1 +127, 85, 720, 260, 13, 33, 1, 0, 1 +127, 97, 3, 309, 18, 53, 1, 0, 1 +127, 101, 701, 262, 14, 33, 1, 0, 1 +127, 108, 472, 301, 92, 34, 1, 2, 1 +127, 114, 116, 279, 23, 68, 1, 0, 1 +128, 1, 347, 301, 75, 58, 1, 2, 1 +128, 3, 452, 319, 146, 168, 1, 2, 1 +128, 4, 890, 323, 53, 137, 1, 0, 1 +128, 18, 71, 295, 24, 78, 1, 0, 1 +128, 41, 36, 304, 27, 71, 1, 0, 1 +128, 48, 11, 308, 20, 64, 1, 0, 1 +128, 55, 272, 261, 17, 35, 1, 0, 1 +128, 57, 237, 264, 11, 29, 1, 0, 1 +128, 61, 395, 265, 32, 23, 1, 2, 1 +128, 82, 470, 253, 19, 14, 1, 2, 1 +128, 85, 718, 260, 13, 33, 1, 0, 1 +128, 97, 0, 309, 16, 53, 1, 0, 1 +128, 108, 468, 301, 95, 35, 1, 2, 1 +128, 114, 112, 279, 23, 69, 1, 0, 1 +129, 1, 345, 302, 74, 57, 1, 2, 1 +129, 3, 451, 319, 146, 169, 1, 2, 1 +129, 4, 892, 324, 54, 140, 1, 0, 1 +129, 18, 65, 297, 25, 78, 1, 0, 1 +129, 41, 29, 303, 30, 75, 1, 0, 1 +129, 48, 4, 309, 21, 63, 1, 0, 1 +129, 55, 270, 262, 17, 35, 1, 0, 1 +129, 57, 235, 264, 11, 30, 1, 0, 1 +129, 61, 393, 265, 31, 22, 1, 2, 1 +129, 82, 468, 252, 19, 15, 1, 2, 1 +129, 85, 716, 260, 13, 32, 1, 0, 1 +129, 97, 0, 310, 11, 53, 1, 0, 1 +129, 108, 459, 301, 105, 39, 1, 2, 1 +129, 114, 108, 278, 23, 71, 1, 0, 1 +130, 1, 343, 303, 73, 56, 1, 2, 1 +130, 3, 448, 320, 148, 171, 1, 2, 1 +130, 4, 894, 324, 56, 144, 1, 0, 1 +130, 18, 61, 299, 24, 77, 1, 0, 1 +130, 41, 23, 302, 30, 77, 1, 0, 1 +130, 48, 0, 308, 21, 67, 1, 0, 1 +130, 55, 267, 263, 17, 34, 1, 0, 1 +130, 57, 231, 264, 12, 31, 1, 0, 1 +130, 61, 390, 264, 33, 23, 1, 2, 1 +130, 82, 465, 252, 20, 16, 1, 2, 1 +130, 85, 714, 260, 13, 33, 1, 0, 1 +130, 108, 462, 301, 96, 37, 1, 2, 1 +130, 114, 104, 279, 22, 71, 1, 0, 1 +131, 1, 340, 303, 72, 55, 1, 2, 1 +131, 3, 446, 325, 145, 166, 1, 2, 1 +131, 4, 897, 326, 55, 143, 1, 0, 1 +131, 18, 54, 299, 25, 78, 1, 0, 1 +131, 41, 18, 301, 30, 77, 1, 0, 1 +131, 48, 0, 309, 15, 67, 1, 0, 1 +131, 55, 265, 262, 16, 35, 1, 0, 1 +131, 57, 229, 264, 11, 30, 1, 0, 1 +131, 61, 389, 265, 31, 22, 1, 2, 1 +131, 82, 463, 253, 20, 15, 1, 2, 1 +131, 85, 712, 260, 13, 34, 1, 0, 1 +131, 101, 695, 262, 14, 33, 1, 0, 1 +131, 108, 456, 301, 103, 40, 1, 2, 1 +131, 114, 99, 281, 22, 69, 1, 0, 1 +132, 1, 338, 303, 71, 54, 1, 2, 1 +132, 3, 443, 326, 145, 165, 1, 2, 1 +132, 4, 899, 329, 56, 143, 1, 0, 1 +132, 18, 47, 299, 25, 80, 1, 0, 1 +132, 41, 13, 306, 28, 72, 1, 0, 1 +132, 48, 0, 302, 16, 74, 1, 0, 1 +132, 55, 262, 262, 17, 35, 1, 0, 1 +132, 57, 226, 264, 11, 29, 1, 0, 1 +132, 61, 387, 264, 31, 23, 1, 2, 1 +132, 82, 461, 254, 18, 13, 1, 2, 1 +132, 85, 710, 260, 13, 34, 1, 0, 1 +132, 101, 693, 262, 14, 33, 1, 0, 1 +132, 108, 451, 300, 107, 42, 1, 2, 1 +132, 114, 95, 282, 22, 69, 1, 0, 1 +133, 1, 335, 302, 71, 55, 1, 2, 1 +133, 3, 441, 327, 145, 166, 1, 2, 1 +133, 4, 902, 330, 56, 147, 1, 0, 1 +133, 18, 40, 300, 25, 80, 1, 0, 1 +133, 41, 6, 305, 30, 75, 1, 0, 1 +133, 48, 0, 300, 16, 78, 1, 0, 1 +133, 55, 260, 262, 17, 36, 1, 0, 1 +133, 57, 224, 265, 11, 29, 1, 0, 1 +133, 61, 385, 263, 31, 23, 1, 2, 1 +133, 82, 459, 254, 19, 14, 1, 2, 1 +133, 85, 707, 261, 13, 33, 1, 0, 1 +133, 108, 449, 300, 106, 43, 1, 2, 1 +133, 114, 91, 283, 22, 67, 1, 0, 1 +134, 1, 333, 303, 71, 53, 1, 2, 1 +134, 3, 438, 329, 144, 165, 1, 2, 1 +134, 4, 903, 331, 56, 148, 1, 0, 1 +134, 18, 35, 303, 25, 79, 1, 0, 1 +134, 41, 0, 305, 30, 77, 1, 0, 1 +134, 48, 0, 300, 11, 79, 1, 0, 1 +134, 55, 258, 264, 16, 36, 1, 0, 1 +134, 57, 220, 266, 12, 30, 1, 0, 1 +134, 61, 384, 264, 31, 22, 1, 2, 1 +134, 82, 457, 253, 20, 15, 1, 2, 1 +134, 85, 706, 261, 13, 33, 1, 0, 1 +134, 108, 447, 302, 104, 42, 1, 2, 1 +134, 114, 86, 284, 21, 68, 1, 0, 1 +135, 1, 330, 303, 71, 53, 1, 2, 1 +135, 3, 433, 330, 145, 165, 1, 2, 1 +135, 4, 903, 332, 56, 151, 1, 0, 1 +135, 18, 27, 297, 27, 86, 1, 0, 1 +135, 41, 0, 308, 25, 76, 1, 0, 1 +135, 55, 255, 263, 17, 37, 1, 0, 1 +135, 57, 217, 266, 11, 29, 1, 0, 1 +135, 61, 382, 264, 31, 22, 1, 2, 1 +135, 82, 456, 254, 19, 14, 1, 2, 1 +135, 85, 703, 260, 14, 34, 1, 0, 1 +135, 108, 447, 302, 99, 40, 1, 2, 1 +135, 114, 82, 287, 21, 65, 1, 0, 1 +136, 1, 327, 303, 71, 53, 1, 2, 1 +136, 3, 430, 331, 145, 164, 1, 2, 1 +136, 4, 905, 333, 54, 154, 1, 0, 1 +136, 18, 19, 293, 29, 92, 1, 0, 1 +136, 41, 0, 311, 21, 75, 1, 0, 1 +136, 55, 253, 263, 16, 37, 1, 0, 1 +136, 57, 214, 266, 12, 29, 1, 0, 1 +136, 61, 379, 264, 31, 22, 1, 2, 1 +136, 82, 453, 252, 21, 16, 1, 2, 1 +136, 85, 701, 260, 14, 35, 1, 0, 1 +136, 108, 446, 301, 96, 40, 1, 2, 1 +136, 114, 77, 284, 22, 69, 1, 0, 1 +136, 166, 336, 243, 28, 27, 1, 2, 1 +137, 1, 324, 302, 73, 55, 1, 2, 1 +137, 3, 427, 330, 145, 166, 1, 2, 1 +137, 4, 906, 337, 53, 154, 1, 0, 1 +137, 18, 12, 289, 31, 98, 1, 0, 1 +137, 41, 0, 312, 19, 76, 1, 0, 1 +137, 55, 250, 263, 17, 37, 1, 0, 1 +137, 57, 211, 267, 12, 30, 1, 0, 1 +137, 61, 376, 262, 33, 24, 1, 2, 1 +137, 82, 451, 251, 22, 17, 1, 2, 1 +137, 85, 699, 260, 14, 35, 1, 0, 1 +137, 108, 445, 300, 94, 40, 1, 2, 1 +137, 114, 73, 282, 23, 72, 1, 0, 1 +137, 166, 333, 243, 28, 27, 1, 2, 1 +137, 168, 850, 275, 23, 59, 1, 0, 1 +138, 1, 321, 301, 74, 56, 1, 2, 1 +138, 3, 426, 335, 141, 160, 1, 2, 1 +138, 4, 910, 340, 49, 151, 1, 0, 1 +138, 18, 6, 290, 30, 99, 1, 0, 1 +138, 41, 0, 313, 14, 77, 1, 0, 1 +138, 55, 247, 263, 17, 37, 1, 0, 1 +138, 57, 208, 267, 13, 30, 1, 0, 1 +138, 61, 375, 262, 31, 23, 1, 2, 1 +138, 82, 450, 252, 21, 16, 1, 2, 1 +138, 85, 697, 260, 14, 35, 1, 0, 1 +138, 108, 441, 300, 95, 40, 1, 2, 1 +138, 114, 68, 281, 23, 75, 1, 0, 1 +138, 166, 331, 243, 29, 27, 1, 2, 1 +138, 168, 850, 275, 23, 59, 1, 0, 1 +139, 1, 319, 300, 74, 55, 1, 2, 1 +139, 3, 424, 336, 141, 159, 1, 2, 1 +139, 4, 911, 342, 48, 150, 1, 0, 1 +139, 18, 0, 289, 31, 101, 1, 0, 1 +139, 55, 246, 263, 16, 37, 1, 0, 1 +139, 57, 206, 266, 12, 29, 1, 0, 1 +139, 61, 373, 261, 32, 23, 1, 2, 1 +139, 82, 448, 252, 22, 17, 1, 2, 1 +139, 85, 695, 260, 14, 35, 1, 0, 1 +139, 108, 439, 299, 95, 40, 1, 2, 1 +139, 114, 63, 279, 24, 77, 1, 0, 1 +139, 168, 849, 275, 23, 58, 1, 0, 1 +140, 1, 317, 298, 73, 56, 1, 2, 1 +140, 3, 420, 334, 142, 160, 1, 2, 1 +140, 4, 914, 343, 45, 150, 1, 0, 1 +140, 8, 782, 276, 20, 56, 1, 0, 1 +140, 18, 0, 288, 26, 103, 1, 0, 1 +140, 55, 244, 263, 16, 37, 1, 0, 1 +140, 57, 203, 266, 12, 29, 1, 0, 1 +140, 61, 372, 261, 31, 23, 1, 2, 1 +140, 82, 447, 253, 20, 15, 1, 2, 1 +140, 85, 692, 259, 15, 35, 1, 0, 1 +140, 108, 438, 299, 92, 39, 1, 2, 1 +140, 114, 59, 278, 23, 77, 1, 0, 1 +140, 168, 849, 275, 22, 57, 1, 0, 1 +141, 1, 315, 298, 74, 56, 1, 2, 1 +141, 3, 416, 332, 145, 162, 1, 2, 1 +141, 4, 916, 345, 43, 149, 1, 0, 1 +141, 8, 780, 275, 20, 57, 1, 0, 1 +141, 18, 0, 288, 23, 105, 1, 0, 1 +141, 55, 242, 263, 15, 37, 1, 0, 1 +141, 57, 201, 266, 12, 30, 1, 0, 1 +141, 61, 370, 262, 32, 24, 1, 2, 1 +141, 82, 446, 253, 19, 15, 1, 2, 1 +141, 85, 691, 259, 14, 34, 1, 0, 1 +141, 108, 437, 299, 90, 38, 1, 2, 1 +141, 114, 54, 278, 24, 78, 1, 0, 1 +141, 168, 850, 276, 21, 55, 1, 0, 1 +142, 1, 313, 298, 74, 56, 1, 2, 1 +142, 3, 413, 330, 148, 167, 1, 2, 1 +142, 4, 920, 350, 39, 142, 1, 0, 1 +142, 8, 779, 275, 19, 56, 1, 0, 1 +142, 18, 0, 285, 21, 112, 1, 0, 1 +142, 55, 240, 263, 16, 36, 1, 0, 1 +142, 57, 199, 266, 13, 31, 1, 0, 1 +142, 61, 369, 262, 31, 23, 1, 2, 1 +142, 82, 445, 252, 20, 15, 1, 2, 1 +142, 85, 689, 259, 14, 34, 1, 0, 1 +142, 108, 436, 298, 88, 38, 1, 2, 1 +142, 168, 850, 277, 21, 54, 1, 0, 1 +143, 1, 311, 296, 75, 57, 1, 2, 1 +143, 3, 409, 329, 150, 167, 1, 2, 1 +143, 4, 922, 349, 37, 144, 1, 0, 1 +143, 8, 778, 274, 20, 57, 1, 0, 1 +143, 18, 0, 284, 16, 114, 1, 0, 1 +143, 55, 238, 262, 15, 36, 1, 0, 1 +143, 57, 195, 265, 13, 31, 1, 0, 1 +143, 61, 367, 261, 31, 23, 1, 2, 1 +143, 82, 444, 252, 19, 15, 1, 2, 1 +143, 85, 687, 259, 14, 33, 1, 0, 1 +143, 108, 431, 298, 93, 40, 1, 2, 1 +143, 168, 850, 281, 20, 51, 1, 0, 1 +144, 1, 309, 296, 74, 57, 1, 2, 1 +144, 3, 406, 333, 147, 163, 1, 2, 1 +144, 4, 925, 354, 34, 135, 1, 0, 1 +144, 8, 776, 275, 20, 56, 1, 0, 1 +144, 55, 236, 262, 15, 37, 1, 0, 1 +144, 57, 193, 265, 13, 31, 1, 0, 1 +144, 61, 366, 262, 30, 22, 1, 2, 1 +144, 82, 442, 252, 20, 15, 1, 2, 1 +144, 85, 685, 260, 14, 34, 1, 0, 1 +144, 108, 429, 298, 92, 40, 1, 2, 1 +144, 168, 849, 284, 20, 52, 1, 0, 1 +145, 1, 306, 296, 72, 55, 1, 2, 1 +145, 3, 402, 332, 148, 164, 1, 2, 1 +145, 4, 927, 356, 32, 134, 1, 0, 1 +145, 8, 773, 276, 20, 56, 1, 0, 1 +145, 55, 234, 263, 15, 37, 1, 0, 1 +145, 57, 191, 264, 13, 31, 1, 0, 1 +145, 61, 364, 261, 31, 23, 1, 2, 1 +145, 82, 440, 252, 20, 16, 1, 2, 1 +145, 85, 683, 260, 14, 34, 1, 0, 1 +145, 108, 427, 298, 88, 38, 1, 2, 1 +145, 168, 847, 286, 20, 51, 1, 0, 1 +146, 1, 304, 296, 71, 54, 1, 2, 1 +146, 3, 398, 329, 150, 167, 1, 2, 1 +146, 8, 772, 276, 19, 57, 1, 0, 1 +146, 55, 231, 262, 15, 37, 1, 0, 1 +146, 57, 188, 264, 14, 32, 1, 0, 1 +146, 61, 363, 260, 30, 23, 1, 2, 1 +146, 82, 438, 252, 21, 17, 1, 2, 1 +146, 108, 427, 299, 84, 37, 1, 2, 1 +146, 168, 846, 287, 20, 49, 1, 0, 1 +147, 1, 303, 297, 71, 54, 1, 2, 1 +147, 3, 395, 329, 152, 169, 1, 2, 1 +147, 8, 770, 277, 19, 57, 1, 0, 1 +147, 55, 229, 263, 15, 36, 1, 0, 1 +147, 57, 186, 265, 14, 32, 1, 0, 1 +147, 61, 362, 261, 29, 22, 1, 2, 1 +147, 82, 437, 254, 19, 15, 1, 2, 1 +147, 108, 426, 300, 81, 36, 1, 2, 1 +147, 168, 844, 287, 20, 51, 1, 0, 1 +148, 1, 301, 296, 71, 55, 1, 2, 1 +148, 3, 393, 329, 151, 169, 1, 2, 1 +148, 8, 767, 277, 20, 58, 1, 0, 1 +148, 55, 226, 263, 15, 37, 1, 0, 1 +148, 57, 183, 266, 13, 30, 1, 0, 1 +148, 61, 359, 261, 31, 24, 1, 2, 1 +148, 82, 435, 253, 19, 15, 1, 2, 1 +148, 85, 677, 261, 14, 34, 1, 0, 1 +148, 108, 423, 300, 83, 36, 1, 2, 1 +148, 168, 843, 288, 20, 49, 1, 0, 1 +149, 1, 298, 296, 72, 55, 1, 2, 1 +149, 3, 389, 327, 153, 170, 1, 2, 1 +149, 8, 764, 278, 21, 57, 1, 0, 1 +149, 55, 223, 264, 15, 37, 1, 0, 1 +149, 57, 180, 266, 14, 32, 1, 0, 1 +149, 61, 358, 262, 29, 23, 1, 2, 1 +149, 82, 433, 254, 19, 15, 1, 2, 1 +149, 85, 674, 261, 15, 35, 1, 0, 1 +149, 108, 424, 302, 77, 33, 1, 2, 1 +149, 168, 842, 289, 20, 48, 1, 0, 1 +150, 1, 296, 296, 71, 54, 1, 2, 1 +150, 3, 385, 326, 154, 171, 1, 2, 1 +150, 8, 761, 277, 22, 57, 1, 0, 1 +150, 55, 221, 264, 15, 37, 1, 0, 1 +150, 57, 177, 266, 14, 32, 1, 0, 1 +150, 61, 356, 261, 30, 23, 1, 2, 1 +150, 82, 432, 254, 19, 15, 1, 2, 1 +150, 85, 672, 261, 14, 34, 1, 0, 1 +150, 108, 421, 301, 77, 33, 1, 2, 1 +150, 114, 16, 297, 21, 66, 1, 0, 1 +150, 168, 841, 288, 20, 48, 1, 0, 1 +151, 1, 295, 297, 69, 53, 1, 2, 1 +151, 3, 382, 326, 153, 171, 1, 2, 1 +151, 8, 758, 278, 22, 57, 1, 0, 1 +151, 55, 217, 264, 16, 37, 1, 0, 1 +151, 57, 174, 267, 14, 32, 1, 0, 1 +151, 61, 354, 262, 29, 22, 1, 2, 1 +151, 82, 429, 254, 21, 16, 1, 2, 1 +151, 85, 668, 262, 15, 33, 1, 0, 1 +151, 108, 418, 301, 79, 33, 1, 2, 1 +151, 114, 12, 296, 21, 68, 1, 0, 1 +151, 168, 838, 284, 22, 53, 1, 0, 1 +152, 1, 293, 296, 69, 53, 1, 2, 1 +152, 3, 378, 326, 152, 171, 1, 2, 1 +152, 8, 755, 278, 23, 57, 1, 0, 1 +152, 55, 214, 265, 15, 37, 1, 0, 1 +152, 57, 171, 267, 14, 32, 1, 0, 1 +152, 61, 352, 262, 29, 22, 1, 2, 1 +152, 82, 427, 254, 21, 16, 1, 2, 1 +152, 85, 666, 262, 14, 33, 1, 0, 1 +152, 108, 414, 301, 79, 33, 1, 2, 1 +152, 114, 7, 298, 21, 67, 1, 0, 1 +152, 166, 303, 243, 29, 27, 1, 2, 1 +152, 168, 837, 284, 21, 52, 1, 0, 1 +153, 1, 290, 296, 69, 53, 1, 2, 1 +153, 3, 374, 326, 152, 171, 1, 2, 1 +153, 8, 753, 277, 23, 58, 1, 0, 1 +153, 55, 211, 265, 15, 38, 1, 0, 1 +153, 57, 167, 267, 15, 33, 1, 0, 1 +153, 61, 350, 262, 28, 22, 1, 2, 1 +153, 82, 426, 255, 18, 15, 1, 2, 1 +153, 85, 663, 260, 15, 35, 1, 0, 1 +153, 108, 410, 301, 80, 33, 1, 2, 1 +153, 114, 3, 299, 21, 67, 1, 0, 1 +153, 166, 302, 244, 27, 26, 1, 2, 1 +153, 168, 837, 285, 19, 47, 1, 0, 1 +154, 1, 286, 296, 68, 52, 1, 2, 1 +154, 3, 371, 326, 152, 171, 1, 2, 1 +154, 8, 750, 277, 23, 57, 1, 0, 1 +154, 55, 208, 266, 15, 37, 1, 0, 1 +154, 57, 164, 267, 15, 34, 1, 0, 1 +154, 61, 347, 262, 28, 21, 1, 2, 1 +154, 82, 423, 255, 19, 15, 1, 2, 1 +154, 85, 660, 260, 16, 35, 1, 0, 1 +154, 108, 406, 301, 80, 34, 1, 2, 1 +154, 166, 298, 244, 29, 27, 1, 2, 1 +154, 168, 834, 284, 20, 51, 1, 0, 1 +155, 1, 283, 296, 68, 52, 1, 2, 1 +155, 3, 369, 328, 149, 167, 1, 2, 1 +155, 8, 747, 277, 24, 57, 1, 0, 1 +155, 55, 205, 265, 15, 39, 1, 0, 1 +155, 57, 161, 267, 15, 35, 1, 0, 1 +155, 61, 345, 262, 27, 21, 1, 2, 1 +155, 82, 421, 255, 20, 15, 1, 2, 1 +155, 108, 403, 301, 81, 34, 1, 2, 1 +155, 166, 295, 243, 29, 27, 1, 2, 1 +155, 168, 834, 285, 19, 49, 1, 0, 1 +156, 1, 280, 296, 69, 53, 1, 2, 1 +156, 3, 364, 327, 148, 167, 1, 2, 1 +156, 8, 743, 275, 23, 59, 1, 0, 1 +156, 55, 202, 266, 16, 39, 1, 0, 1 +156, 57, 157, 267, 16, 35, 1, 0, 1 +156, 61, 343, 262, 27, 21, 1, 2, 1 +156, 82, 419, 255, 21, 16, 1, 2, 1 +156, 85, 653, 259, 16, 35, 1, 0, 1 +156, 108, 399, 301, 82, 34, 1, 2, 1 +156, 166, 294, 244, 27, 26, 1, 2, 1 +156, 168, 834, 286, 18, 46, 1, 0, 1 +157, 1, 278, 296, 69, 52, 1, 2, 1 +157, 3, 361, 327, 149, 168, 1, 2, 1 +157, 8, 740, 275, 23, 57, 1, 0, 1 +157, 55, 199, 266, 15, 39, 1, 0, 1 +157, 57, 154, 269, 14, 34, 1, 0, 1 +157, 61, 341, 262, 27, 21, 1, 2, 1 +157, 82, 417, 256, 20, 15, 1, 2, 1 +157, 85, 650, 259, 16, 35, 1, 0, 1 +157, 108, 393, 300, 85, 36, 1, 2, 1 +157, 166, 290, 243, 29, 27, 1, 2, 1 +157, 168, 833, 287, 18, 44, 1, 0, 1 +158, 1, 275, 296, 70, 53, 1, 2, 1 +158, 3, 357, 328, 148, 167, 1, 2, 1 +158, 8, 738, 275, 22, 55, 1, 0, 1 +158, 55, 196, 267, 15, 38, 1, 0, 1 +158, 57, 151, 270, 15, 34, 1, 0, 1 +158, 61, 338, 263, 27, 21, 1, 2, 1 +158, 82, 415, 256, 18, 15, 1, 2, 1 +158, 85, 648, 259, 16, 36, 1, 0, 1 +158, 108, 390, 299, 86, 37, 1, 2, 1 +158, 166, 288, 243, 29, 27, 1, 2, 1 +159, 1, 273, 296, 69, 53, 1, 2, 1 +159, 3, 355, 332, 146, 164, 1, 2, 1 +159, 8, 735, 272, 23, 58, 1, 0, 1 +159, 55, 193, 268, 15, 38, 1, 0, 1 +159, 57, 148, 271, 15, 34, 1, 0, 1 +159, 61, 336, 263, 28, 21, 1, 2, 1 +159, 82, 414, 257, 18, 13, 1, 2, 1 +159, 85, 646, 259, 16, 36, 1, 0, 1 +159, 108, 385, 299, 90, 39, 1, 2, 1 +160, 1, 271, 296, 68, 52, 1, 2, 1 +160, 3, 353, 334, 144, 161, 1, 2, 1 +160, 8, 732, 273, 22, 58, 1, 0, 1 +160, 55, 190, 270, 15, 37, 1, 0, 1 +160, 57, 144, 271, 15, 35, 1, 0, 1 +160, 61, 335, 263, 27, 21, 1, 2, 1 +160, 82, 411, 257, 19, 14, 1, 2, 1 +160, 108, 382, 299, 89, 38, 1, 2, 1 +161, 1, 270, 296, 67, 51, 1, 2, 1 +161, 3, 349, 331, 148, 164, 1, 2, 1 +161, 8, 730, 273, 22, 57, 1, 0, 1 +161, 55, 187, 270, 15, 37, 1, 0, 1 +161, 57, 142, 273, 14, 33, 1, 0, 1 +161, 61, 332, 263, 27, 21, 1, 2, 1 +161, 82, 409, 257, 20, 15, 1, 2, 1 +161, 85, 640, 259, 17, 36, 1, 0, 1 +161, 108, 381, 300, 89, 38, 1, 2, 1 +162, 1, 268, 296, 66, 51, 1, 2, 1 +162, 3, 346, 330, 149, 165, 1, 2, 1 +162, 8, 729, 274, 21, 55, 1, 0, 1 +162, 55, 185, 270, 15, 37, 1, 0, 1 +162, 57, 139, 273, 15, 34, 1, 0, 1 +162, 61, 330, 263, 27, 21, 1, 2, 1 +162, 82, 407, 257, 21, 16, 1, 2, 1 +162, 85, 638, 258, 17, 37, 1, 0, 1 +162, 108, 380, 301, 86, 37, 1, 2, 1 +163, 1, 266, 296, 67, 51, 1, 2, 1 +163, 3, 342, 329, 148, 165, 1, 2, 1 +163, 8, 726, 275, 21, 55, 1, 0, 1 +163, 55, 182, 271, 15, 37, 1, 0, 1 +163, 57, 136, 273, 15, 35, 1, 0, 1 +163, 61, 329, 263, 27, 21, 1, 2, 1 +163, 82, 405, 257, 21, 16, 1, 2, 1 +163, 85, 635, 258, 17, 37, 1, 0, 1 +163, 108, 375, 300, 89, 39, 1, 2, 1 +164, 1, 261, 295, 69, 52, 1, 2, 1 +164, 3, 338, 328, 149, 165, 1, 2, 1 +164, 8, 723, 273, 22, 58, 1, 0, 1 +164, 55, 179, 270, 15, 38, 1, 0, 1 +164, 57, 133, 272, 15, 36, 1, 0, 1 +164, 61, 328, 263, 26, 20, 1, 2, 1 +164, 82, 404, 257, 21, 16, 1, 2, 1 +164, 108, 372, 300, 89, 39, 1, 2, 1 +165, 1, 259, 296, 68, 52, 1, 2, 1 +165, 3, 334, 328, 148, 165, 1, 2, 1 +165, 8, 720, 273, 23, 58, 1, 0, 1 +165, 55, 177, 271, 15, 38, 1, 0, 1 +165, 57, 130, 273, 15, 35, 1, 0, 1 +165, 61, 325, 263, 27, 20, 1, 2, 1 +165, 82, 401, 257, 21, 16, 1, 2, 1 +165, 85, 626, 255, 18, 39, 1, 0, 1 +165, 108, 370, 300, 87, 38, 1, 2, 1 +166, 1, 258, 296, 68, 51, 1, 2, 1 +166, 3, 331, 329, 147, 163, 1, 2, 1 +166, 8, 718, 272, 22, 58, 1, 0, 1 +166, 55, 175, 272, 15, 38, 1, 0, 1 +166, 57, 127, 273, 15, 37, 1, 0, 1 +166, 61, 323, 264, 27, 19, 1, 2, 1 +166, 82, 400, 257, 20, 15, 1, 2, 1 +166, 85, 623, 255, 19, 39, 1, 0, 1 +166, 108, 367, 299, 89, 40, 1, 2, 1 +167, 1, 257, 296, 66, 51, 1, 2, 1 +167, 3, 328, 330, 146, 161, 1, 2, 1 +167, 8, 716, 272, 22, 57, 1, 0, 1 +167, 55, 172, 272, 15, 37, 1, 0, 1 +167, 57, 125, 273, 15, 37, 1, 0, 1 +167, 61, 323, 264, 25, 19, 1, 2, 1 +167, 82, 399, 257, 20, 16, 1, 2, 1 +167, 85, 620, 256, 19, 39, 1, 0, 1 +167, 108, 361, 297, 95, 44, 1, 2, 1 +168, 1, 256, 296, 66, 50, 1, 2, 1 +168, 3, 324, 330, 145, 160, 1, 2, 1 +168, 8, 714, 271, 21, 57, 1, 0, 1 +168, 55, 169, 272, 15, 37, 1, 0, 1 +168, 57, 122, 273, 15, 36, 1, 0, 1 +168, 61, 321, 263, 26, 19, 1, 2, 1 +168, 82, 398, 257, 20, 16, 1, 2, 1 +168, 85, 618, 256, 19, 39, 1, 0, 1 +168, 108, 357, 296, 100, 47, 1, 2, 1 +169, 1, 254, 295, 66, 50, 1, 2, 1 +169, 3, 320, 329, 144, 160, 1, 2, 1 +169, 8, 711, 270, 22, 59, 1, 0, 1 +169, 55, 167, 271, 15, 39, 1, 0, 1 +169, 57, 119, 272, 15, 37, 1, 0, 1 +169, 61, 319, 263, 27, 19, 1, 2, 1 +169, 82, 397, 257, 21, 16, 1, 2, 1 +169, 85, 615, 256, 19, 39, 1, 0, 1 +169, 108, 354, 296, 99, 47, 1, 2, 1 +170, 1, 253, 294, 65, 50, 1, 2, 1 +170, 3, 318, 328, 143, 159, 1, 2, 1 +170, 8, 709, 270, 22, 61, 1, 0, 1 +170, 55, 164, 271, 15, 38, 1, 0, 1 +170, 57, 116, 271, 15, 38, 1, 0, 1 +170, 61, 317, 262, 27, 19, 1, 2, 1 +170, 82, 395, 256, 21, 16, 1, 2, 1 +170, 108, 353, 296, 98, 48, 1, 2, 1 +171, 1, 252, 293, 65, 49, 1, 2, 1 +171, 3, 315, 328, 144, 160, 1, 2, 1 +171, 8, 707, 270, 22, 60, 1, 0, 1 +171, 55, 162, 271, 16, 38, 1, 0, 1 +171, 57, 114, 272, 15, 38, 1, 0, 1 +171, 61, 316, 261, 26, 19, 1, 2, 1 +171, 82, 394, 256, 20, 15, 1, 2, 1 +171, 108, 350, 296, 99, 49, 1, 2, 1 +172, 1, 250, 293, 65, 49, 1, 2, 1 +172, 3, 313, 329, 142, 158, 1, 2, 1 +172, 8, 704, 268, 23, 61, 1, 0, 1 +172, 55, 160, 270, 15, 39, 1, 0, 1 +172, 57, 112, 271, 15, 38, 1, 0, 1 +172, 61, 315, 261, 25, 19, 1, 2, 1 +172, 82, 393, 257, 20, 15, 1, 2, 1 +172, 108, 347, 296, 101, 51, 1, 2, 1 +173, 1, 249, 293, 64, 48, 1, 2, 1 +173, 3, 309, 327, 143, 160, 1, 2, 1 +173, 8, 703, 268, 22, 61, 1, 0, 1 +173, 55, 157, 270, 16, 40, 1, 0, 1 +173, 57, 110, 271, 15, 39, 1, 0, 1 +173, 61, 314, 261, 25, 19, 1, 2, 1 +173, 82, 392, 257, 21, 15, 1, 2, 1 +173, 108, 345, 296, 101, 52, 1, 2, 1 +174, 1, 248, 293, 64, 48, 1, 2, 1 +174, 3, 306, 327, 143, 159, 1, 2, 1 +174, 8, 701, 268, 23, 61, 1, 0, 1 +174, 55, 155, 271, 16, 39, 1, 0, 1 +174, 57, 107, 271, 15, 39, 1, 0, 1 +174, 61, 314, 262, 24, 18, 1, 2, 1 +174, 82, 391, 257, 21, 15, 1, 2, 1 +174, 108, 345, 295, 96, 51, 1, 2, 1 +175, 1, 246, 291, 65, 49, 1, 2, 1 +175, 3, 305, 328, 142, 157, 1, 2, 1 +175, 8, 699, 269, 23, 62, 1, 0, 1 +175, 55, 152, 271, 17, 40, 1, 0, 1 +175, 57, 105, 271, 15, 39, 1, 0, 1 +175, 61, 312, 262, 24, 18, 1, 2, 1 +175, 82, 389, 257, 21, 15, 1, 2, 1 +175, 108, 343, 295, 96, 51, 1, 2, 1 +176, 1, 245, 291, 65, 49, 1, 2, 1 +176, 3, 303, 328, 141, 155, 1, 2, 1 +176, 8, 696, 268, 24, 64, 1, 0, 1 +176, 55, 150, 270, 16, 40, 1, 0, 1 +176, 57, 103, 271, 15, 39, 1, 0, 1 +176, 61, 311, 262, 24, 17, 1, 2, 1 +176, 82, 388, 257, 21, 16, 1, 2, 1 +176, 108, 340, 295, 100, 55, 1, 2, 1 +177, 1, 243, 290, 65, 49, 1, 2, 1 +177, 3, 300, 328, 140, 154, 1, 2, 1 +177, 8, 693, 268, 25, 64, 1, 0, 1 +177, 55, 149, 269, 16, 40, 1, 0, 1 +177, 57, 100, 271, 15, 38, 1, 0, 1 +177, 61, 310, 261, 24, 18, 1, 2, 1 +177, 82, 388, 257, 21, 15, 1, 2, 1 +177, 108, 337, 295, 103, 58, 1, 2, 1 +178, 1, 241, 290, 65, 49, 1, 2, 1 +178, 3, 297, 328, 139, 153, 1, 2, 1 +178, 8, 691, 267, 26, 65, 1, 0, 1 +178, 55, 146, 270, 17, 40, 1, 0, 1 +178, 57, 98, 272, 15, 38, 1, 0, 1 +178, 61, 308, 261, 24, 18, 1, 2, 1 +178, 82, 387, 257, 21, 16, 1, 2, 1 +178, 108, 335, 295, 104, 60, 1, 2, 1 +179, 1, 241, 291, 63, 47, 1, 2, 1 +179, 3, 295, 328, 138, 151, 1, 2, 1 +179, 8, 691, 269, 25, 64, 1, 0, 1 +179, 55, 144, 270, 17, 40, 1, 0, 1 +179, 57, 96, 270, 15, 40, 1, 0, 1 +179, 61, 308, 261, 24, 18, 1, 2, 1 +179, 82, 385, 258, 22, 15, 1, 2, 1 +179, 108, 336, 295, 98, 57, 1, 2, 1 +179, 168, 801, 272, 23, 63, 1, 0, 1 +180, 1, 240, 290, 63, 47, 1, 2, 1 +180, 3, 293, 329, 137, 149, 1, 2, 1 +180, 8, 690, 269, 25, 63, 1, 0, 1 +180, 55, 142, 271, 16, 39, 1, 0, 1 +180, 57, 94, 271, 15, 39, 1, 0, 1 +180, 61, 307, 261, 23, 17, 1, 2, 1 +180, 82, 383, 257, 23, 17, 1, 2, 1 +180, 108, 338, 295, 92, 55, 1, 2, 1 +180, 168, 802, 272, 22, 64, 1, 0, 1 +181, 1, 239, 290, 63, 47, 1, 2, 1 +181, 3, 289, 329, 135, 148, 1, 2, 1 +181, 8, 690, 269, 24, 63, 1, 0, 1 +181, 55, 139, 271, 17, 40, 1, 0, 1 +181, 57, 92, 272, 15, 39, 1, 0, 1 +181, 61, 306, 262, 23, 16, 1, 2, 1 +181, 82, 382, 257, 23, 17, 1, 2, 1 +181, 108, 336, 296, 92, 55, 1, 2, 1 +181, 168, 803, 278, 20, 58, 1, 0, 1 +182, 1, 237, 291, 63, 46, 1, 2, 1 +182, 3, 287, 329, 134, 147, 1, 2, 1 +182, 8, 688, 270, 25, 62, 1, 0, 1 +182, 55, 138, 272, 16, 40, 1, 0, 1 +182, 57, 89, 272, 15, 39, 1, 0, 1 +182, 61, 305, 262, 22, 16, 1, 2, 1 +182, 82, 381, 257, 23, 17, 1, 2, 1 +182, 108, 335, 296, 91, 55, 1, 2, 1 +182, 168, 801, 278, 21, 59, 1, 0, 1 +183, 1, 235, 290, 63, 47, 1, 2, 1 +183, 3, 284, 329, 136, 147, 1, 2, 1 +183, 8, 686, 269, 24, 63, 1, 0, 1 +183, 55, 136, 272, 17, 41, 1, 0, 1 +183, 57, 86, 270, 16, 43, 1, 0, 1 +183, 61, 304, 262, 22, 16, 1, 2, 1 +183, 82, 380, 257, 24, 18, 1, 2, 1 +183, 108, 335, 296, 91, 55, 1, 2, 1 +183, 168, 804, 280, 19, 57, 1, 0, 1 +184, 1, 234, 290, 63, 48, 1, 2, 1 +184, 3, 281, 329, 135, 146, 1, 2, 1 +184, 8, 685, 268, 24, 64, 1, 0, 1 +184, 55, 133, 272, 17, 41, 1, 0, 1 +184, 57, 83, 272, 15, 42, 1, 0, 1 +184, 61, 302, 262, 23, 17, 1, 2, 1 +184, 82, 379, 257, 24, 18, 1, 2, 1 +184, 108, 335, 296, 83, 51, 1, 2, 1 +184, 168, 804, 278, 20, 58, 1, 0, 1 +185, 1, 233, 291, 62, 47, 1, 2, 1 +185, 3, 276, 328, 137, 147, 1, 2, 1 +185, 8, 684, 267, 24, 65, 1, 0, 1 +185, 55, 130, 274, 17, 41, 1, 0, 1 +185, 57, 81, 273, 15, 42, 1, 0, 1 +185, 61, 301, 262, 24, 17, 1, 2, 1 +185, 82, 378, 258, 24, 18, 1, 2, 1 +185, 108, 331, 296, 88, 55, 1, 2, 1 +185, 168, 803, 281, 20, 55, 1, 0, 1 +186, 1, 232, 291, 62, 46, 1, 2, 1 +186, 3, 273, 327, 137, 148, 1, 2, 1 +186, 8, 683, 267, 23, 65, 1, 0, 1 +186, 55, 129, 274, 17, 42, 1, 0, 1 +186, 57, 79, 275, 15, 40, 1, 0, 1 +186, 61, 300, 262, 23, 17, 1, 2, 1 +186, 82, 377, 258, 23, 18, 1, 2, 1 +186, 108, 328, 296, 90, 57, 1, 2, 1 +186, 168, 803, 282, 19, 55, 1, 0, 1 +187, 1, 230, 291, 62, 46, 1, 2, 1 +187, 3, 271, 327, 136, 146, 1, 2, 1 +187, 8, 681, 267, 24, 65, 1, 0, 1 +187, 55, 127, 275, 17, 42, 1, 0, 1 +187, 57, 78, 280, 13, 35, 1, 0, 1 +187, 61, 299, 262, 24, 17, 1, 2, 1 +187, 82, 376, 259, 23, 17, 1, 2, 1 +187, 108, 327, 295, 88, 58, 1, 2, 1 +187, 168, 802, 283, 20, 53, 1, 0, 1 +188, 1, 229, 291, 62, 46, 1, 2, 1 +188, 3, 267, 325, 137, 148, 1, 2, 1 +188, 8, 680, 267, 24, 66, 1, 0, 1 +188, 55, 125, 275, 17, 41, 1, 0, 1 +188, 57, 76, 281, 13, 35, 1, 0, 1 +188, 61, 299, 262, 23, 17, 1, 2, 1 +188, 82, 375, 260, 23, 17, 1, 2, 1 +188, 108, 326, 296, 88, 57, 1, 2, 1 +188, 168, 802, 283, 20, 53, 1, 0, 1 +189, 1, 228, 292, 62, 46, 1, 2, 1 +189, 3, 265, 326, 135, 147, 1, 2, 1 +189, 8, 680, 268, 23, 64, 1, 0, 1 +189, 55, 124, 276, 16, 41, 1, 0, 1 +189, 57, 74, 282, 12, 34, 1, 0, 1 +189, 61, 298, 262, 23, 17, 1, 2, 1 +189, 82, 374, 260, 22, 17, 1, 2, 1 +189, 108, 324, 296, 91, 60, 1, 2, 1 +189, 168, 802, 282, 21, 55, 1, 0, 1 +190, 1, 227, 292, 62, 46, 1, 2, 1 +190, 3, 263, 325, 136, 147, 1, 2, 1 +190, 8, 679, 270, 23, 62, 1, 0, 1 +190, 55, 121, 275, 17, 43, 1, 0, 1 +190, 57, 70, 281, 14, 36, 1, 0, 1 +190, 61, 297, 262, 23, 17, 1, 2, 1 +190, 82, 374, 261, 21, 16, 1, 2, 1 +190, 108, 324, 295, 92, 63, 1, 2, 1 +190, 168, 802, 283, 21, 54, 1, 0, 1 +191, 1, 226, 293, 61, 45, 1, 2, 1 +191, 3, 260, 325, 136, 147, 1, 2, 1 +191, 8, 677, 272, 23, 62, 1, 0, 1 +191, 55, 119, 276, 17, 43, 1, 0, 1 +191, 57, 67, 283, 14, 35, 1, 0, 1 +191, 61, 296, 262, 23, 17, 1, 2, 1 +191, 82, 373, 262, 21, 15, 1, 2, 1 +191, 108, 324, 295, 91, 63, 1, 2, 1 +191, 168, 802, 283, 22, 55, 1, 0, 1 +192, 1, 225, 293, 61, 45, 1, 2, 1 +192, 3, 257, 325, 136, 147, 1, 2, 1 +192, 8, 676, 273, 22, 61, 1, 0, 1 +192, 55, 117, 276, 17, 44, 1, 0, 1 +192, 57, 64, 284, 14, 35, 1, 0, 1 +192, 61, 294, 262, 25, 18, 1, 2, 1 +192, 82, 372, 262, 21, 15, 1, 2, 1 +192, 108, 324, 296, 90, 62, 1, 2, 1 +192, 168, 804, 282, 21, 55, 1, 0, 1 +193, 1, 224, 294, 60, 44, 1, 2, 1 +193, 3, 255, 325, 136, 146, 1, 2, 1 +193, 8, 675, 273, 23, 62, 1, 0, 1 +193, 55, 114, 277, 17, 43, 1, 0, 1 +193, 57, 62, 283, 15, 37, 1, 0, 1 +193, 61, 293, 262, 25, 18, 1, 2, 1 +193, 82, 372, 262, 21, 16, 1, 2, 1 +193, 108, 323, 296, 90, 63, 1, 2, 1 +193, 168, 805, 281, 23, 57, 1, 0, 1 +194, 1, 224, 295, 59, 43, 1, 2, 1 +194, 3, 253, 325, 134, 145, 1, 2, 1 +194, 8, 674, 274, 23, 61, 1, 0, 1 +194, 55, 113, 279, 17, 42, 1, 0, 1 +194, 57, 60, 284, 14, 37, 1, 0, 1 +194, 61, 292, 262, 25, 19, 1, 2, 1 +194, 82, 370, 262, 23, 17, 1, 2, 1 +194, 108, 323, 295, 90, 64, 1, 2, 1 +194, 168, 807, 283, 22, 55, 1, 0, 1 +195, 1, 223, 295, 59, 43, 1, 2, 1 +195, 3, 252, 324, 133, 144, 1, 2, 1 +195, 8, 673, 273, 22, 62, 1, 0, 1 +195, 55, 111, 279, 17, 42, 1, 0, 1 +195, 57, 58, 285, 14, 37, 1, 0, 1 +195, 61, 291, 261, 25, 19, 1, 2, 1 +195, 82, 369, 262, 23, 18, 1, 2, 1 +195, 108, 323, 295, 89, 62, 1, 2, 1 +195, 168, 808, 283, 22, 55, 1, 0, 1 +196, 1, 223, 296, 57, 41, 1, 2, 1 +196, 3, 249, 324, 133, 143, 1, 2, 1 +196, 8, 671, 273, 23, 62, 1, 0, 1 +196, 55, 108, 280, 17, 41, 1, 0, 1 +196, 57, 57, 285, 14, 37, 1, 0, 1 +196, 61, 290, 261, 25, 19, 1, 2, 1 +196, 82, 368, 261, 23, 19, 1, 2, 1 +196, 108, 323, 294, 89, 63, 1, 2, 1 +196, 168, 809, 283, 21, 55, 1, 0, 1 +197, 1, 221, 295, 59, 43, 1, 2, 1 +197, 3, 245, 323, 134, 144, 1, 2, 1 +197, 8, 671, 272, 22, 62, 1, 0, 1 +197, 55, 106, 281, 17, 41, 1, 0, 1 +197, 57, 54, 282, 15, 41, 1, 0, 1 +197, 61, 289, 261, 26, 20, 1, 2, 1 +197, 82, 367, 261, 24, 19, 1, 2, 1 +197, 108, 323, 294, 89, 63, 1, 2, 1 +197, 168, 809, 284, 21, 54, 1, 0, 1 +198, 1, 220, 296, 59, 42, 1, 2, 1 +198, 3, 242, 322, 134, 146, 1, 2, 1 +198, 8, 671, 272, 22, 60, 1, 0, 1 +198, 55, 103, 281, 17, 41, 1, 0, 1 +198, 57, 51, 281, 16, 42, 1, 0, 1 +198, 61, 288, 261, 25, 19, 1, 2, 1 +198, 82, 366, 261, 25, 20, 1, 2, 1 +198, 108, 323, 294, 89, 63, 1, 2, 1 +198, 168, 810, 284, 21, 53, 1, 0, 1 +199, 1, 218, 296, 59, 41, 1, 2, 1 +199, 3, 240, 323, 133, 143, 1, 2, 1 +199, 8, 671, 271, 22, 60, 1, 0, 1 +199, 55, 102, 282, 17, 41, 1, 0, 1 +199, 57, 48, 282, 17, 42, 1, 0, 1 +199, 61, 288, 262, 25, 19, 1, 2, 1 +199, 82, 366, 262, 23, 20, 1, 2, 1 +199, 108, 323, 294, 88, 63, 1, 2, 1 +199, 168, 811, 283, 21, 53, 1, 0, 1 +200, 1, 217, 296, 59, 42, 1, 2, 1 +200, 3, 238, 323, 132, 144, 1, 2, 1 +200, 8, 671, 271, 21, 61, 1, 0, 1 +200, 55, 100, 282, 18, 42, 1, 0, 1 +200, 57, 45, 282, 17, 43, 1, 0, 1 +200, 61, 287, 262, 24, 19, 1, 2, 1 +200, 82, 366, 263, 23, 19, 1, 2, 1 +200, 108, 323, 294, 88, 63, 1, 2, 1 +200, 168, 810, 282, 22, 54, 1, 0, 1 +201, 1, 216, 296, 58, 41, 1, 2, 1 +201, 3, 236, 323, 131, 143, 1, 2, 1 +201, 8, 670, 271, 22, 61, 1, 0, 1 +201, 55, 98, 282, 18, 43, 1, 0, 1 +201, 57, 42, 282, 17, 43, 1, 0, 1 +201, 61, 287, 262, 24, 19, 1, 2, 1 +201, 82, 364, 263, 23, 19, 1, 2, 1 +201, 108, 323, 294, 89, 63, 1, 2, 1 +201, 168, 811, 281, 22, 56, 1, 0, 1 +202, 1, 215, 296, 59, 42, 1, 2, 1 +202, 3, 234, 324, 131, 141, 1, 2, 1 +202, 8, 670, 271, 22, 62, 1, 0, 1 +202, 55, 96, 283, 19, 43, 1, 0, 1 +202, 57, 40, 283, 17, 42, 1, 0, 1 +202, 61, 287, 262, 24, 19, 1, 2, 1 +202, 82, 364, 263, 22, 19, 1, 2, 1 +202, 108, 323, 293, 90, 65, 1, 2, 1 +202, 168, 811, 279, 24, 59, 1, 0, 1 +203, 1, 214, 297, 59, 41, 1, 2, 1 +203, 3, 232, 323, 129, 141, 1, 2, 1 +203, 8, 669, 271, 22, 63, 1, 0, 1 +203, 55, 94, 284, 18, 43, 1, 0, 1 +203, 57, 38, 283, 17, 42, 1, 0, 1 +203, 61, 287, 263, 23, 18, 1, 2, 1 +203, 82, 363, 264, 22, 19, 1, 2, 1 +203, 108, 322, 293, 92, 66, 1, 2, 1 +203, 168, 812, 279, 24, 59, 1, 0, 1 +204, 1, 213, 297, 60, 41, 1, 2, 1 +204, 3, 230, 324, 128, 139, 1, 2, 1 +204, 8, 668, 271, 23, 64, 1, 0, 1 +204, 55, 92, 285, 17, 43, 1, 0, 1 +204, 57, 36, 283, 17, 43, 1, 0, 1 +204, 61, 286, 262, 24, 18, 1, 2, 1 +204, 82, 363, 264, 22, 20, 1, 2, 1 +204, 108, 322, 293, 92, 65, 1, 2, 1 +204, 168, 814, 278, 24, 59, 1, 0, 1 +205, 1, 213, 297, 59, 42, 1, 2, 1 +205, 3, 229, 324, 127, 138, 1, 2, 1 +205, 8, 667, 271, 23, 64, 1, 0, 1 +205, 55, 89, 285, 19, 44, 1, 0, 1 +205, 57, 33, 283, 18, 43, 1, 0, 1 +205, 61, 285, 261, 25, 19, 1, 2, 1 +205, 82, 362, 264, 23, 20, 1, 2, 1 +205, 108, 323, 293, 92, 65, 1, 2, 1 +205, 168, 816, 277, 24, 61, 1, 0, 1 +206, 1, 212, 296, 59, 42, 1, 2, 1 +206, 3, 228, 323, 126, 138, 1, 2, 1 +206, 8, 667, 272, 23, 64, 1, 0, 1 +206, 55, 88, 284, 18, 44, 1, 0, 1 +206, 57, 33, 285, 16, 41, 1, 0, 1 +206, 61, 285, 262, 24, 18, 1, 2, 1 +206, 82, 361, 264, 23, 21, 1, 2, 1 +206, 108, 323, 292, 92, 66, 1, 2, 1 +206, 168, 818, 279, 23, 59, 1, 0, 1 +207, 1, 212, 296, 58, 41, 1, 2, 1 +207, 3, 224, 323, 129, 139, 1, 2, 1 +207, 8, 666, 271, 23, 65, 1, 0, 1 +207, 55, 86, 285, 19, 44, 1, 0, 1 +207, 57, 31, 285, 16, 42, 1, 0, 1 +207, 61, 284, 262, 24, 18, 1, 2, 1 +207, 108, 324, 293, 92, 65, 1, 2, 1 +207, 168, 820, 281, 22, 58, 1, 0, 1 +208, 1, 212, 297, 57, 40, 1, 2, 1 +208, 3, 222, 323, 129, 139, 1, 2, 1 +208, 8, 666, 273, 23, 64, 1, 0, 1 +208, 55, 84, 286, 19, 44, 1, 0, 1 +208, 57, 26, 286, 17, 43, 1, 0, 1 +208, 61, 283, 262, 25, 19, 1, 2, 1 +208, 108, 325, 293, 92, 66, 1, 2, 1 +208, 168, 820, 281, 23, 58, 1, 0, 1 +209, 1, 210, 296, 59, 41, 1, 2, 1 +209, 3, 221, 324, 127, 136, 1, 2, 1 +209, 8, 665, 273, 23, 64, 1, 0, 1 +209, 55, 83, 285, 19, 45, 1, 0, 1 +209, 57, 22, 286, 18, 43, 1, 0, 1 +209, 61, 282, 262, 25, 19, 1, 2, 1 +209, 108, 325, 293, 94, 66, 1, 2, 1 +209, 168, 822, 280, 23, 60, 1, 0, 1 +210, 1, 210, 297, 57, 40, 1, 2, 1 +210, 3, 219, 325, 127, 136, 1, 2, 1 +210, 8, 665, 272, 24, 66, 1, 0, 1 +210, 55, 81, 286, 19, 45, 1, 0, 1 +210, 57, 19, 285, 19, 45, 1, 0, 1 +210, 61, 282, 263, 23, 18, 1, 2, 1 +210, 108, 326, 294, 94, 66, 1, 2, 1 +210, 168, 824, 278, 23, 62, 1, 0, 1 +211, 1, 209, 297, 59, 41, 1, 2, 1 +211, 3, 217, 327, 126, 134, 1, 2, 1 +211, 8, 665, 272, 23, 66, 1, 0, 1 +211, 55, 80, 286, 19, 45, 1, 0, 1 +211, 57, 19, 286, 18, 45, 1, 0, 1 +211, 61, 282, 264, 23, 18, 1, 2, 1 +211, 108, 327, 295, 94, 66, 1, 2, 1 +211, 168, 825, 281, 23, 59, 1, 0, 1 +212, 1, 208, 297, 60, 41, 1, 2, 1 +212, 3, 215, 327, 126, 134, 1, 2, 1 +212, 8, 664, 272, 24, 67, 1, 0, 1 +212, 55, 78, 287, 19, 45, 1, 0, 1 +212, 57, 23, 286, 18, 45, 1, 0, 1 +212, 61, 282, 264, 22, 17, 1, 2, 1 +212, 108, 328, 295, 94, 67, 1, 2, 1 +212, 168, 827, 284, 22, 56, 1, 0, 1 +213, 1, 208, 297, 60, 41, 1, 2, 1 +213, 3, 213, 327, 125, 133, 1, 2, 1 +213, 8, 664, 273, 24, 66, 1, 0, 1 +213, 55, 77, 288, 19, 44, 1, 0, 1 +213, 57, 15, 288, 18, 43, 1, 0, 1 +213, 61, 282, 264, 23, 18, 1, 2, 1 +213, 108, 331, 296, 92, 64, 1, 2, 1 +213, 168, 827, 283, 25, 60, 1, 0, 1 +214, 1, 208, 297, 60, 42, 1, 2, 1 +214, 3, 211, 327, 126, 133, 1, 2, 1 +214, 8, 664, 273, 24, 67, 1, 0, 1 +214, 55, 75, 288, 19, 45, 1, 0, 1 +214, 57, 8, 289, 17, 41, 1, 0, 1 +214, 61, 281, 264, 24, 18, 1, 2, 1 +214, 108, 332, 296, 93, 64, 1, 2, 1 +214, 168, 831, 283, 24, 59, 1, 0, 1 +215, 1, 209, 297, 57, 40, 1, 2, 1 +215, 3, 210, 328, 125, 131, 1, 2, 1 +215, 8, 664, 274, 24, 66, 1, 0, 1 +215, 55, 74, 287, 20, 46, 1, 0, 1 +215, 57, 4, 288, 16, 40, 1, 0, 1 +215, 61, 281, 264, 24, 18, 1, 2, 1 +215, 108, 335, 296, 93, 63, 1, 2, 1 +215, 168, 833, 282, 25, 62, 1, 0, 1 +216, 1, 209, 297, 57, 40, 1, 2, 1 +216, 3, 209, 329, 124, 129, 1, 2, 1 +216, 8, 665, 275, 24, 65, 1, 0, 1 +216, 55, 73, 288, 19, 45, 1, 0, 1 +216, 57, 1, 290, 16, 38, 1, 0, 1 +216, 61, 282, 264, 24, 18, 1, 2, 1 +216, 108, 338, 296, 92, 63, 1, 2, 1 +216, 168, 834, 280, 26, 64, 1, 0, 1 +217, 1, 209, 297, 57, 40, 1, 2, 1 +217, 3, 209, 328, 123, 129, 1, 2, 1 +217, 8, 666, 276, 24, 65, 1, 0, 1 +217, 55, 72, 288, 19, 44, 1, 0, 1 +217, 57, 0, 290, 14, 39, 1, 0, 1 +217, 61, 282, 264, 23, 18, 1, 2, 1 +217, 108, 340, 297, 93, 61, 1, 2, 1 +217, 168, 838, 282, 25, 61, 1, 0, 1 +218, 1, 209, 296, 57, 40, 1, 2, 1 +218, 3, 209, 329, 123, 128, 1, 2, 1 +218, 8, 667, 277, 24, 64, 1, 0, 1 +218, 55, 70, 287, 19, 46, 1, 0, 1 +218, 57, 0, 290, 12, 39, 1, 0, 1 +218, 61, 282, 264, 23, 18, 1, 2, 1 +218, 108, 342, 296, 94, 62, 1, 2, 1 +218, 168, 840, 281, 26, 61, 1, 0, 1 +219, 1, 209, 294, 57, 41, 1, 2, 1 +219, 3, 207, 328, 126, 129, 1, 2, 1 +219, 8, 668, 278, 24, 64, 1, 0, 1 +219, 55, 68, 287, 20, 47, 1, 0, 1 +219, 57, 0, 291, 11, 39, 1, 0, 1 +219, 61, 283, 263, 22, 18, 1, 2, 1 +219, 108, 343, 295, 96, 62, 1, 2, 1 +219, 168, 843, 282, 26, 61, 1, 0, 1 +220, 1, 210, 295, 56, 40, 1, 2, 1 +220, 3, 205, 326, 126, 130, 1, 2, 1 +220, 8, 669, 276, 24, 66, 1, 0, 1 +220, 55, 67, 287, 20, 48, 1, 0, 1 +220, 57, 0, 293, 11, 39, 1, 0, 1 +220, 61, 283, 263, 22, 17, 1, 2, 1 +220, 108, 345, 295, 96, 62, 1, 2, 1 +220, 168, 846, 280, 27, 63, 1, 0, 1 +221, 1, 209, 294, 58, 41, 1, 2, 1 +221, 3, 204, 324, 128, 132, 1, 2, 1 +221, 8, 670, 276, 24, 66, 1, 0, 1 +221, 55, 65, 287, 20, 48, 1, 0, 1 +221, 57, 0, 293, 13, 40, 1, 0, 1 +221, 61, 284, 263, 22, 17, 1, 2, 1 +221, 108, 348, 294, 97, 62, 1, 2, 1 +221, 168, 850, 282, 26, 61, 1, 0, 1 +222, 1, 209, 293, 59, 42, 1, 2, 1 +222, 3, 204, 324, 129, 133, 1, 2, 1 +222, 8, 671, 274, 24, 68, 1, 0, 1 +222, 55, 65, 287, 20, 47, 1, 0, 1 +222, 57, 0, 293, 11, 40, 1, 0, 1 +222, 61, 284, 263, 23, 17, 1, 2, 1 +222, 108, 351, 293, 98, 62, 1, 2, 1 +222, 168, 853, 282, 26, 61, 1, 0, 1 +223, 1, 210, 292, 58, 43, 1, 2, 1 +223, 3, 204, 322, 131, 135, 1, 2, 1 +223, 8, 672, 273, 24, 69, 1, 0, 1 +223, 55, 64, 288, 20, 47, 1, 0, 1 +223, 57, 3, 292, 16, 42, 1, 0, 1 +223, 61, 284, 263, 22, 17, 1, 2, 1 +223, 108, 353, 292, 99, 63, 1, 2, 1 +223, 168, 856, 281, 27, 62, 1, 0, 1 +224, 1, 210, 293, 58, 42, 1, 2, 1 +224, 3, 203, 322, 132, 135, 1, 2, 1 +224, 8, 673, 273, 25, 69, 1, 0, 1 +224, 55, 63, 289, 20, 48, 1, 0, 1 +224, 57, 2, 291, 18, 45, 1, 0, 1 +224, 61, 285, 263, 21, 17, 1, 2, 1 +224, 108, 355, 292, 100, 64, 1, 2, 1 +224, 168, 860, 283, 26, 60, 1, 0, 1 +224, 212, 480, 260, 19, 35, 1, 0, 1 +225, 1, 211, 293, 57, 42, 1, 2, 1 +225, 3, 201, 322, 132, 135, 1, 2, 1 +225, 8, 674, 273, 24, 69, 1, 0, 1 +225, 55, 62, 289, 20, 47, 1, 0, 1 +225, 57, 1, 292, 17, 45, 1, 0, 1 +225, 61, 286, 263, 21, 17, 1, 2, 1 +225, 82, 346, 258, 17, 15, 1, 2, 1 +225, 108, 358, 291, 102, 65, 1, 2, 1 +225, 168, 864, 280, 27, 62, 1, 0, 1 +225, 212, 481, 260, 19, 36, 1, 0, 1 +226, 1, 211, 293, 57, 42, 1, 2, 1 +226, 3, 200, 323, 130, 134, 1, 2, 1 +226, 8, 675, 273, 25, 69, 1, 0, 1 +226, 55, 60, 290, 21, 49, 1, 0, 1 +226, 57, 1, 294, 17, 45, 1, 0, 1 +226, 61, 286, 263, 21, 16, 1, 2, 1 +226, 82, 345, 259, 18, 15, 1, 2, 1 +226, 108, 364, 291, 103, 65, 1, 2, 1 +226, 168, 867, 282, 26, 60, 1, 0, 1 +226, 212, 481, 261, 19, 37, 1, 0, 1 +227, 1, 212, 292, 55, 42, 1, 2, 1 +227, 3, 198, 322, 131, 135, 1, 2, 1 +227, 8, 676, 273, 25, 69, 1, 0, 1 +227, 55, 60, 290, 20, 50, 1, 0, 1 +227, 57, 0, 295, 17, 45, 1, 0, 1 +227, 82, 345, 261, 18, 14, 1, 2, 1 +227, 108, 369, 292, 104, 64, 1, 2, 1 +227, 168, 869, 282, 27, 61, 1, 0, 1 +227, 212, 481, 261, 20, 38, 1, 0, 1 +228, 1, 212, 293, 55, 41, 1, 2, 1 +228, 3, 199, 323, 131, 135, 1, 2, 1 +228, 8, 677, 274, 25, 69, 1, 0, 1 +228, 55, 59, 291, 20, 49, 1, 0, 1 +228, 57, 0, 296, 17, 46, 1, 0, 1 +228, 61, 287, 264, 22, 17, 1, 2, 1 +228, 82, 346, 261, 18, 15, 1, 2, 1 +228, 108, 373, 291, 107, 65, 1, 2, 1 +228, 168, 874, 282, 26, 60, 1, 0, 1 +228, 212, 482, 261, 20, 38, 1, 0, 1 +229, 1, 211, 291, 58, 44, 1, 2, 1 +229, 3, 200, 323, 130, 135, 1, 2, 1 +229, 8, 678, 273, 25, 71, 1, 0, 1 +229, 55, 58, 291, 21, 49, 1, 0, 1 +229, 57, 0, 295, 16, 47, 1, 0, 1 +229, 61, 288, 264, 21, 17, 1, 2, 1 +229, 82, 346, 260, 19, 15, 1, 2, 1 +229, 108, 377, 291, 108, 65, 1, 2, 1 +229, 168, 878, 283, 26, 59, 1, 0, 1 +229, 212, 482, 261, 20, 38, 1, 0, 1 +230, 1, 212, 290, 58, 44, 1, 2, 1 +230, 3, 199, 323, 130, 134, 1, 2, 1 +230, 8, 679, 274, 25, 70, 1, 0, 1 +230, 55, 57, 292, 20, 49, 1, 0, 1 +230, 57, 0, 295, 15, 47, 1, 0, 1 +230, 61, 288, 264, 21, 17, 1, 2, 1 +230, 82, 347, 261, 18, 14, 1, 2, 1 +230, 108, 380, 291, 109, 65, 1, 2, 1 +230, 168, 882, 277, 27, 63, 1, 0, 1 +230, 212, 484, 261, 18, 37, 1, 0, 1 +231, 1, 213, 290, 57, 42, 1, 2, 1 +231, 3, 199, 322, 130, 133, 1, 2, 1 +231, 8, 680, 276, 24, 69, 1, 0, 1 +231, 55, 56, 292, 20, 49, 1, 0, 1 +231, 57, 0, 295, 14, 48, 1, 0, 1 +231, 61, 288, 264, 22, 17, 1, 2, 1 +231, 82, 347, 261, 19, 15, 1, 2, 1 +231, 108, 385, 290, 109, 64, 1, 2, 1 +231, 168, 887, 280, 27, 61, 1, 0, 1 +231, 212, 484, 261, 19, 37, 1, 0, 1 +232, 1, 215, 290, 54, 41, 1, 2, 1 +232, 3, 198, 321, 128, 133, 1, 2, 1 +232, 8, 681, 276, 24, 69, 1, 0, 1 +232, 55, 56, 293, 20, 48, 1, 0, 1 +232, 57, 0, 295, 14, 48, 1, 0, 1 +232, 61, 290, 264, 21, 17, 1, 2, 1 +232, 82, 348, 261, 19, 15, 1, 2, 1 +232, 108, 392, 291, 107, 62, 1, 2, 1 +232, 168, 891, 278, 28, 63, 1, 0, 1 +232, 212, 485, 263, 17, 34, 1, 0, 1 +233, 1, 217, 290, 52, 40, 1, 2, 1 +233, 3, 198, 320, 129, 132, 1, 2, 1 +233, 8, 683, 278, 24, 68, 1, 0, 1 +233, 55, 55, 292, 20, 50, 1, 0, 1 +233, 57, 0, 297, 13, 45, 1, 0, 1 +233, 61, 290, 264, 21, 16, 1, 2, 1 +233, 82, 348, 261, 19, 14, 1, 2, 1 +233, 108, 397, 292, 107, 61, 1, 2, 1 +233, 168, 895, 277, 28, 65, 1, 0, 1 +233, 212, 485, 262, 17, 34, 1, 0, 1 +234, 1, 218, 290, 51, 39, 1, 2, 1 +234, 3, 197, 319, 130, 134, 1, 2, 1 +234, 8, 684, 277, 24, 69, 1, 0, 1 +234, 55, 54, 292, 21, 50, 1, 0, 1 +234, 57, 0, 299, 12, 43, 1, 0, 1 +234, 61, 291, 263, 21, 17, 1, 2, 1 +234, 82, 349, 261, 19, 14, 1, 2, 1 +234, 108, 401, 291, 110, 61, 1, 2, 1 +234, 168, 900, 278, 28, 65, 1, 0, 1 +234, 212, 486, 261, 17, 34, 1, 0, 1 +235, 1, 221, 289, 48, 36, 1, 2, 1 +235, 3, 197, 318, 130, 134, 1, 2, 1 +235, 8, 686, 276, 24, 69, 1, 0, 1 +235, 55, 53, 291, 21, 50, 1, 0, 1 +235, 57, 0, 299, 11, 42, 1, 0, 1 +235, 61, 291, 263, 21, 17, 1, 2, 1 +235, 82, 350, 260, 20, 14, 1, 2, 1 +235, 108, 405, 289, 113, 62, 1, 2, 1 +235, 168, 905, 276, 29, 66, 1, 0, 1 +235, 212, 486, 260, 17, 36, 1, 0, 1 +236, 1, 222, 289, 47, 35, 1, 2, 1 +236, 3, 198, 318, 129, 132, 1, 2, 1 +236, 8, 688, 274, 24, 70, 1, 0, 1 +236, 55, 53, 291, 20, 50, 1, 0, 1 +236, 57, 0, 299, 11, 42, 1, 0, 1 +236, 61, 292, 263, 20, 17, 1, 2, 1 +236, 82, 351, 259, 21, 15, 1, 2, 1 +236, 108, 410, 288, 115, 63, 1, 2, 1 +236, 168, 910, 275, 29, 66, 1, 0, 1 +236, 212, 486, 259, 18, 37, 1, 0, 1 +237, 1, 223, 289, 47, 34, 1, 2, 1 +237, 3, 199, 316, 130, 133, 1, 2, 1 +237, 8, 689, 273, 25, 71, 1, 0, 1 +237, 55, 53, 291, 20, 50, 1, 0, 1 +237, 61, 293, 263, 20, 16, 1, 2, 1 +237, 82, 351, 259, 21, 15, 1, 2, 1 +237, 108, 414, 287, 119, 65, 1, 2, 1 +237, 168, 915, 274, 30, 67, 1, 0, 1 +238, 1, 224, 288, 47, 35, 1, 2, 1 +238, 3, 199, 315, 131, 133, 1, 2, 1 +238, 8, 691, 274, 25, 71, 1, 0, 1 +238, 55, 52, 291, 21, 50, 1, 0, 1 +238, 82, 352, 258, 21, 16, 1, 2, 1 +238, 108, 419, 286, 121, 66, 1, 2, 1 +238, 168, 920, 273, 30, 68, 1, 0, 1 +239, 1, 224, 287, 49, 35, 1, 2, 1 +239, 3, 200, 314, 131, 133, 1, 2, 1 +239, 8, 693, 274, 25, 71, 1, 0, 1 +239, 55, 52, 290, 21, 50, 1, 0, 1 +239, 61, 297, 261, 20, 16, 1, 2, 1 +239, 82, 353, 258, 21, 16, 1, 2, 1 +239, 108, 425, 286, 120, 65, 1, 2, 1 +239, 168, 924, 272, 30, 68, 1, 0, 1 +240, 1, 225, 286, 49, 36, 1, 2, 1 +240, 3, 202, 314, 130, 131, 1, 2, 1 +240, 8, 694, 273, 25, 72, 1, 0, 1 +240, 55, 53, 290, 20, 51, 1, 0, 1 +240, 61, 298, 261, 20, 16, 1, 2, 1 +240, 82, 353, 257, 22, 17, 1, 2, 1 +240, 108, 432, 285, 121, 65, 1, 2, 1 +240, 168, 929, 270, 30, 70, 1, 0, 1 +241, 1, 227, 286, 48, 35, 1, 2, 1 +241, 3, 204, 314, 128, 129, 1, 2, 1 +241, 8, 696, 273, 25, 73, 1, 0, 1 +241, 55, 52, 290, 21, 51, 1, 0, 1 +241, 82, 354, 257, 22, 17, 1, 2, 1 +241, 108, 439, 286, 122, 64, 1, 2, 1 +241, 168, 934, 269, 25, 71, 1, 0, 1 +242, 1, 228, 286, 49, 35, 1, 2, 1 +242, 3, 205, 314, 128, 129, 1, 2, 1 +242, 8, 698, 273, 25, 73, 1, 0, 1 +242, 55, 52, 290, 21, 51, 1, 0, 1 +242, 82, 356, 257, 22, 17, 1, 2, 1 +242, 108, 445, 286, 121, 64, 1, 2, 1 +242, 168, 939, 277, 20, 58, 1, 0, 1 +243, 1, 230, 285, 49, 36, 1, 2, 1 +243, 3, 206, 312, 129, 129, 1, 2, 1 +243, 8, 701, 274, 24, 71, 1, 0, 1 +243, 55, 52, 290, 21, 51, 1, 0, 1 +243, 82, 357, 256, 23, 18, 1, 2, 1 +243, 108, 450, 286, 120, 62, 1, 2, 1 +243, 168, 942, 280, 17, 53, 1, 0, 1 +244, 1, 232, 285, 50, 36, 1, 2, 1 +244, 3, 207, 312, 129, 128, 1, 2, 1 +244, 8, 704, 274, 24, 70, 1, 0, 1 +244, 55, 52, 290, 21, 51, 1, 0, 1 +244, 82, 359, 256, 22, 17, 1, 2, 1 +244, 108, 456, 285, 119, 63, 1, 2, 1 +244, 168, 947, 281, 12, 52, 1, 0, 1 +244, 229, 391, 274, 29, 22, 1, 2, 1 +245, 1, 234, 285, 49, 36, 1, 2, 1 +245, 3, 208, 312, 130, 129, 1, 2, 1 +245, 8, 706, 277, 24, 69, 1, 0, 1 +245, 55, 52, 289, 22, 53, 1, 0, 1 +245, 82, 361, 257, 20, 15, 1, 2, 1 +245, 108, 463, 286, 118, 61, 1, 2, 1 +245, 229, 394, 274, 29, 23, 1, 2, 1 +246, 1, 235, 284, 49, 36, 1, 2, 1 +246, 3, 209, 311, 131, 129, 1, 2, 1 +246, 8, 709, 277, 24, 69, 1, 0, 1 +246, 55, 52, 289, 22, 53, 1, 0, 1 +246, 82, 364, 256, 20, 16, 1, 2, 1 +246, 108, 470, 285, 120, 62, 1, 2, 1 +246, 229, 396, 275, 28, 22, 1, 2, 1 +247, 1, 236, 284, 49, 36, 1, 2, 1 +247, 3, 212, 310, 132, 130, 1, 2, 1 +247, 8, 712, 275, 24, 70, 1, 0, 1 +247, 55, 52, 289, 22, 54, 1, 0, 1 +247, 82, 365, 256, 21, 16, 1, 2, 1 +247, 108, 484, 284, 122, 63, 1, 2, 1 +247, 229, 396, 275, 31, 24, 1, 2, 1 +248, 1, 238, 284, 49, 35, 1, 2, 1 +248, 3, 213, 310, 134, 130, 1, 2, 1 +248, 8, 716, 277, 24, 70, 1, 0, 1 +248, 55, 52, 290, 22, 53, 1, 0, 1 +248, 82, 366, 257, 21, 16, 1, 2, 1 +248, 108, 493, 284, 122, 62, 1, 2, 1 +248, 229, 398, 272, 34, 27, 1, 2, 1 +249, 1, 242, 285, 48, 34, 1, 2, 1 +249, 3, 216, 311, 134, 130, 1, 2, 1 +249, 8, 718, 277, 24, 72, 1, 0, 1 +249, 55, 53, 291, 21, 52, 1, 0, 1 +249, 82, 367, 257, 22, 17, 1, 2, 1 +249, 108, 499, 284, 125, 63, 1, 2, 1 +249, 229, 398, 268, 38, 30, 1, 2, 1 +250, 1, 244, 286, 48, 34, 1, 2, 1 +250, 3, 218, 311, 135, 129, 1, 2, 1 +250, 8, 722, 276, 25, 72, 1, 0, 1 +250, 55, 53, 292, 21, 53, 1, 0, 1 +250, 61, 315, 259, 19, 15, 1, 2, 1 +250, 82, 368, 257, 23, 18, 1, 2, 1 +250, 108, 506, 283, 126, 63, 1, 2, 1 +250, 229, 401, 270, 35, 29, 1, 2, 1 +250, 234, 671, 286, 23, 68, 1, 0, 1 +251, 1, 247, 285, 48, 35, 1, 2, 1 +251, 3, 223, 312, 134, 128, 1, 2, 1 +251, 8, 725, 275, 25, 74, 1, 0, 1 +251, 55, 53, 293, 22, 52, 1, 0, 1 +251, 61, 314, 258, 21, 16, 1, 2, 1 +251, 82, 370, 256, 23, 19, 1, 2, 1 +251, 108, 510, 283, 126, 63, 1, 2, 1 +251, 229, 405, 275, 32, 26, 1, 2, 1 +251, 234, 676, 288, 22, 69, 1, 0, 1 +252, 1, 249, 285, 48, 35, 1, 2, 1 +252, 3, 226, 312, 135, 128, 1, 2, 1 +252, 8, 728, 274, 25, 74, 1, 0, 1 +252, 55, 54, 294, 21, 51, 1, 0, 1 +252, 61, 316, 258, 20, 16, 1, 2, 1 +252, 82, 373, 257, 22, 17, 1, 2, 1 +252, 108, 515, 283, 124, 63, 1, 2, 1 +252, 229, 407, 275, 32, 26, 1, 2, 1 +252, 234, 679, 291, 22, 66, 1, 0, 1 +253, 1, 251, 285, 48, 35, 1, 2, 1 +253, 3, 230, 313, 134, 127, 1, 2, 1 +253, 8, 731, 272, 25, 76, 1, 0, 1 +253, 55, 55, 295, 21, 52, 1, 0, 1 +253, 61, 318, 258, 20, 16, 1, 2, 1 +253, 82, 375, 257, 22, 18, 1, 2, 1 +253, 108, 527, 283, 126, 63, 1, 2, 1 +253, 229, 408, 274, 34, 27, 1, 2, 1 +253, 234, 685, 293, 21, 61, 1, 0, 1 +254, 1, 255, 285, 48, 35, 1, 2, 1 +254, 3, 232, 312, 137, 128, 1, 2, 1 +254, 8, 734, 271, 25, 76, 1, 0, 1 +254, 55, 57, 295, 21, 53, 1, 0, 1 +254, 82, 377, 257, 23, 19, 1, 2, 1 +254, 108, 536, 281, 128, 64, 1, 2, 1 +254, 229, 411, 272, 36, 29, 1, 2, 1 +254, 234, 690, 294, 20, 60, 1, 0, 1 +255, 1, 257, 286, 48, 35, 1, 2, 1 +255, 3, 235, 313, 138, 128, 1, 2, 1 +255, 8, 738, 270, 25, 77, 1, 0, 1 +255, 55, 59, 296, 22, 54, 1, 0, 1 +255, 82, 379, 258, 22, 18, 1, 2, 1 +255, 108, 543, 280, 129, 65, 1, 2, 1 +255, 229, 413, 272, 36, 29, 1, 2, 1 +255, 234, 697, 295, 19, 57, 1, 0, 1 +256, 1, 259, 286, 49, 35, 1, 2, 1 +256, 3, 238, 313, 139, 129, 1, 2, 1 +256, 8, 742, 271, 25, 76, 1, 0, 1 +256, 55, 61, 297, 22, 54, 1, 0, 1 +256, 82, 382, 259, 22, 17, 1, 2, 1 +256, 108, 555, 280, 130, 66, 1, 2, 1 +256, 229, 417, 275, 33, 27, 1, 2, 1 +256, 234, 702, 296, 20, 59, 1, 0, 1 +257, 1, 261, 285, 49, 36, 1, 2, 1 +257, 3, 242, 312, 140, 129, 1, 2, 1 +257, 8, 746, 270, 25, 76, 1, 0, 1 +257, 55, 61, 297, 23, 55, 1, 0, 1 +257, 82, 385, 258, 22, 17, 1, 2, 1 +257, 108, 561, 278, 133, 68, 1, 2, 1 +257, 229, 419, 275, 35, 28, 1, 2, 1 +257, 234, 707, 297, 19, 58, 1, 0, 1 +258, 1, 265, 285, 48, 35, 1, 2, 1 +258, 3, 247, 313, 140, 128, 1, 2, 1 +258, 8, 750, 271, 25, 76, 1, 0, 1 +258, 55, 64, 298, 22, 54, 1, 0, 1 +258, 82, 387, 257, 22, 19, 1, 2, 1 +258, 108, 571, 277, 133, 69, 1, 2, 1 +258, 229, 423, 275, 34, 28, 1, 2, 1 +259, 1, 269, 286, 46, 33, 1, 2, 1 +259, 3, 252, 313, 141, 128, 1, 2, 1 +259, 8, 755, 273, 24, 75, 1, 0, 1 +259, 55, 65, 298, 22, 54, 1, 0, 1 +259, 82, 389, 257, 22, 19, 1, 2, 1 +259, 108, 589, 278, 133, 68, 1, 2, 1 +259, 229, 426, 275, 35, 28, 1, 2, 1 +260, 1, 272, 286, 46, 33, 1, 2, 1 +260, 3, 255, 313, 141, 127, 1, 2, 1 +260, 8, 757, 273, 26, 75, 1, 0, 1 +260, 55, 65, 298, 23, 54, 1, 0, 1 +260, 82, 392, 258, 22, 18, 1, 2, 1 +260, 108, 594, 280, 131, 66, 1, 2, 1 +260, 212, 479, 261, 17, 35, 1, 0, 1 +260, 229, 429, 274, 35, 28, 1, 2, 1 +261, 1, 275, 285, 45, 33, 1, 2, 1 +261, 3, 259, 313, 143, 127, 1, 2, 1 +261, 8, 761, 273, 27, 75, 1, 0, 1 +261, 55, 66, 298, 23, 55, 1, 0, 1 +261, 82, 395, 259, 21, 17, 1, 2, 1 +261, 108, 607, 279, 134, 67, 1, 2, 1 +261, 212, 480, 259, 17, 37, 1, 0, 1 +261, 229, 432, 274, 35, 28, 1, 2, 1 +262, 1, 277, 284, 46, 35, 1, 2, 1 +262, 3, 265, 313, 142, 126, 1, 2, 1 +262, 8, 765, 274, 29, 76, 1, 0, 1 +262, 55, 67, 299, 23, 54, 1, 0, 1 +262, 82, 398, 259, 20, 17, 1, 2, 1 +262, 108, 620, 278, 135, 67, 1, 2, 1 +262, 212, 485, 259, 16, 38, 1, 0, 1 +262, 229, 436, 275, 34, 27, 1, 2, 1 +262, 249, 571, 266, 21, 53, 1, 0, 1 +263, 1, 281, 284, 45, 34, 1, 2, 1 +263, 3, 269, 313, 142, 125, 1, 2, 1 +263, 8, 769, 274, 28, 76, 1, 0, 1 +263, 55, 69, 299, 22, 54, 1, 0, 1 +263, 82, 401, 259, 20, 16, 1, 2, 1 +263, 108, 633, 278, 143, 70, 1, 2, 1 +263, 212, 487, 260, 16, 37, 1, 0, 1 +263, 229, 439, 275, 35, 28, 1, 2, 1 +263, 249, 577, 265, 21, 54, 1, 0, 1 +264, 1, 284, 284, 45, 33, 1, 2, 1 +264, 3, 274, 312, 145, 127, 1, 2, 1 +264, 55, 71, 299, 23, 55, 1, 0, 1 +264, 82, 403, 258, 21, 17, 1, 2, 1 +264, 108, 644, 277, 145, 72, 1, 2, 1 +264, 212, 491, 260, 15, 37, 1, 0, 1 +264, 229, 441, 275, 37, 29, 1, 2, 1 +264, 249, 580, 264, 22, 55, 1, 0, 1 +265, 1, 286, 284, 45, 33, 1, 2, 1 +265, 3, 277, 312, 148, 128, 1, 2, 1 +265, 8, 780, 281, 28, 72, 1, 0, 1 +265, 55, 72, 299, 23, 55, 1, 0, 1 +265, 82, 404, 258, 23, 18, 1, 2, 1 +265, 108, 648, 278, 142, 71, 1, 2, 1 +265, 212, 491, 260, 16, 37, 1, 0, 1 +265, 229, 443, 274, 39, 30, 1, 2, 1 +266, 1, 289, 284, 45, 33, 1, 2, 1 +266, 3, 283, 311, 149, 129, 1, 2, 1 +266, 8, 786, 280, 29, 73, 1, 0, 1 +266, 55, 75, 299, 23, 55, 1, 0, 1 +266, 82, 407, 258, 22, 18, 1, 2, 1 +266, 108, 660, 277, 146, 73, 1, 2, 1 +266, 212, 497, 258, 16, 41, 1, 0, 1 +266, 229, 445, 274, 41, 32, 1, 2, 1 +267, 1, 292, 284, 44, 33, 1, 2, 1 +267, 3, 286, 311, 151, 129, 1, 2, 1 +267, 8, 790, 281, 29, 73, 1, 0, 1 +267, 55, 76, 300, 23, 54, 1, 0, 1 +267, 82, 409, 258, 22, 19, 1, 2, 1 +267, 108, 675, 276, 151, 76, 1, 2, 1 +267, 212, 500, 257, 17, 42, 1, 0, 1 +267, 229, 449, 275, 41, 32, 1, 2, 1 +268, 1, 296, 284, 44, 32, 1, 2, 1 +268, 3, 292, 312, 150, 128, 1, 2, 1 +268, 55, 78, 300, 23, 54, 1, 0, 1 +268, 82, 412, 259, 22, 19, 1, 2, 1 +268, 108, 695, 278, 142, 71, 1, 2, 1 +268, 212, 503, 258, 16, 40, 1, 0, 1 +268, 229, 452, 274, 43, 34, 1, 2, 1 +268, 261, 524, 252, 20, 51, 1, 0, 1 +269, 1, 299, 284, 43, 31, 1, 2, 1 +269, 3, 298, 312, 151, 129, 1, 2, 1 +269, 55, 78, 300, 24, 54, 1, 0, 1 +269, 61, 353, 258, 19, 15, 1, 2, 1 +269, 82, 414, 259, 23, 19, 1, 2, 1 +269, 108, 707, 278, 139, 68, 1, 2, 1 +269, 212, 505, 258, 16, 39, 1, 0, 1 +269, 229, 455, 274, 43, 34, 1, 2, 1 +269, 234, 783, 288, 36, 99, 1, 0, 1 +269, 261, 527, 252, 19, 51, 1, 0, 1 +270, 1, 302, 283, 43, 31, 1, 2, 1 +270, 3, 304, 312, 151, 127, 1, 2, 1 +270, 55, 79, 298, 24, 56, 1, 0, 1 +270, 61, 356, 257, 19, 15, 1, 2, 1 +270, 82, 417, 259, 22, 18, 1, 2, 1 +270, 108, 723, 278, 138, 66, 1, 2, 1 +270, 212, 508, 257, 15, 39, 1, 0, 1 +270, 229, 457, 273, 45, 35, 1, 2, 1 +270, 234, 787, 289, 36, 100, 1, 0, 1 +270, 261, 530, 250, 20, 52, 1, 0, 1 +271, 1, 307, 282, 42, 31, 1, 2, 1 +271, 3, 310, 312, 150, 125, 1, 2, 1 +271, 55, 81, 297, 23, 56, 1, 0, 1 +271, 61, 359, 257, 18, 15, 1, 2, 1 +271, 82, 421, 258, 22, 18, 1, 2, 1 +271, 108, 738, 279, 137, 64, 1, 2, 1 +271, 212, 509, 255, 16, 40, 1, 0, 1 +271, 229, 462, 273, 44, 35, 1, 2, 1 +271, 234, 790, 292, 35, 99, 1, 0, 1 +271, 261, 535, 257, 17, 45, 1, 0, 1 +272, 1, 310, 282, 42, 31, 1, 2, 1 +272, 3, 316, 311, 151, 125, 1, 2, 1 +272, 55, 82, 296, 23, 56, 1, 0, 1 +272, 61, 361, 257, 19, 15, 1, 2, 1 +272, 82, 424, 258, 21, 18, 1, 2, 1 +272, 108, 752, 278, 141, 66, 1, 2, 1 +272, 212, 512, 257, 15, 38, 1, 0, 1 +272, 229, 467, 274, 42, 34, 1, 2, 1 +272, 234, 796, 292, 36, 101, 1, 0, 1 +272, 261, 537, 256, 18, 46, 1, 0, 1 +273, 1, 311, 282, 44, 31, 1, 2, 1 +273, 3, 324, 310, 152, 125, 1, 2, 1 +273, 55, 83, 297, 24, 55, 1, 0, 1 +273, 61, 363, 257, 19, 15, 1, 2, 1 +273, 82, 426, 258, 23, 19, 1, 2, 1 +273, 108, 759, 279, 140, 65, 1, 2, 1 +273, 212, 516, 256, 15, 39, 1, 0, 1 +273, 229, 471, 275, 41, 32, 1, 2, 1 +273, 234, 803, 292, 36, 103, 1, 0, 1 +273, 261, 541, 257, 18, 45, 1, 0, 1 +274, 1, 314, 281, 42, 30, 1, 2, 1 +274, 3, 329, 309, 153, 125, 1, 2, 1 +274, 55, 83, 295, 24, 57, 1, 0, 1 +274, 61, 366, 255, 19, 16, 1, 2, 1 +274, 82, 428, 257, 23, 20, 1, 2, 1 +274, 108, 770, 277, 150, 69, 1, 2, 1 +274, 212, 519, 257, 15, 39, 1, 0, 1 +274, 229, 475, 275, 41, 33, 1, 2, 1 +274, 234, 811, 293, 37, 106, 1, 0, 1 +274, 261, 544, 259, 17, 43, 1, 0, 1 +275, 1, 318, 280, 40, 30, 1, 2, 1 +275, 3, 333, 308, 157, 126, 1, 2, 1 +275, 55, 84, 295, 25, 57, 1, 0, 1 +275, 61, 368, 255, 19, 16, 1, 2, 1 +275, 82, 431, 256, 23, 20, 1, 2, 1 +275, 108, 787, 279, 141, 63, 1, 2, 1 +275, 212, 522, 257, 15, 38, 1, 0, 1 +275, 229, 477, 275, 43, 33, 1, 2, 1 +275, 234, 818, 291, 39, 111, 1, 0, 1 +275, 261, 548, 258, 17, 43, 1, 0, 1 +276, 1, 321, 281, 39, 28, 1, 2, 1 +276, 3, 340, 308, 157, 126, 1, 2, 1 +276, 55, 86, 295, 24, 57, 1, 0, 1 +276, 82, 434, 256, 23, 19, 1, 2, 1 +276, 108, 797, 280, 137, 62, 1, 2, 1 +276, 212, 525, 257, 15, 37, 1, 0, 1 +276, 229, 480, 275, 44, 34, 1, 2, 1 +276, 234, 827, 292, 39, 114, 1, 0, 1 +276, 261, 550, 258, 17, 43, 1, 0, 1 +277, 1, 324, 279, 40, 29, 1, 2, 1 +277, 3, 348, 307, 159, 127, 1, 2, 1 +277, 55, 87, 295, 25, 57, 1, 0, 1 +277, 82, 437, 256, 24, 19, 1, 2, 1 +277, 108, 808, 279, 141, 63, 1, 2, 1 +277, 212, 528, 256, 15, 38, 1, 0, 1 +277, 229, 484, 275, 44, 34, 1, 2, 1 +277, 234, 835, 295, 40, 113, 1, 0, 1 +277, 261, 553, 260, 16, 40, 1, 0, 1 +277, 275, 796, 282, 59, 59, 1, 2, 1 +278, 1, 327, 278, 40, 29, 1, 2, 1 +278, 3, 354, 308, 160, 126, 1, 2, 1 +278, 55, 88, 295, 24, 58, 1, 0, 1 +278, 82, 439, 256, 24, 19, 1, 2, 1 +278, 108, 821, 276, 138, 63, 1, 2, 1 +278, 212, 531, 257, 15, 37, 1, 0, 1 +278, 229, 487, 274, 46, 35, 1, 2, 1 +278, 234, 843, 297, 41, 113, 1, 0, 1 +278, 261, 553, 261, 16, 39, 1, 0, 1 +278, 275, 801, 282, 59, 60, 1, 2, 1 +279, 1, 330, 278, 40, 29, 1, 2, 1 +279, 3, 362, 308, 162, 126, 1, 2, 1 +279, 55, 88, 296, 25, 58, 1, 0, 1 +279, 61, 376, 252, 21, 17, 1, 2, 1 +279, 82, 441, 256, 24, 19, 1, 2, 1 +279, 108, 830, 277, 129, 63, 1, 2, 1 +279, 212, 533, 257, 15, 36, 1, 0, 1 +279, 229, 492, 276, 45, 33, 1, 2, 1 +279, 234, 850, 299, 41, 114, 1, 0, 1 +279, 261, 553, 261, 16, 39, 1, 0, 1 +280, 1, 333, 279, 39, 28, 1, 2, 1 +280, 3, 368, 309, 163, 126, 1, 2, 1 +280, 55, 89, 296, 24, 59, 1, 0, 1 +280, 61, 379, 253, 18, 16, 1, 2, 1 +280, 82, 444, 256, 24, 20, 1, 2, 1 +280, 108, 842, 277, 117, 63, 1, 2, 1 +280, 212, 537, 257, 14, 37, 1, 0, 1 +280, 229, 495, 277, 45, 32, 1, 2, 1 +280, 234, 858, 299, 42, 118, 1, 0, 1 +280, 249, 609, 268, 25, 64, 1, 0, 1 +280, 261, 559, 261, 17, 40, 1, 0, 1 +280, 280, 591, 261, 16, 46, 1, 0, 1 +281, 1, 336, 279, 39, 28, 1, 2, 1 +281, 3, 376, 310, 163, 125, 1, 2, 1 +281, 8, 859, 274, 35, 91, 1, 0, 1 +281, 55, 90, 299, 24, 57, 1, 0, 1 +281, 61, 381, 253, 18, 16, 1, 2, 1 +281, 82, 446, 256, 25, 21, 1, 2, 1 +281, 212, 541, 254, 14, 39, 1, 0, 1 +281, 229, 499, 277, 46, 33, 1, 2, 1 +281, 234, 867, 300, 44, 119, 1, 0, 1 +281, 249, 615, 271, 23, 62, 1, 0, 1 +281, 261, 561, 257, 18, 44, 1, 0, 1 +281, 280, 595, 261, 17, 47, 1, 0, 1 +282, 1, 340, 280, 37, 27, 1, 2, 1 +282, 3, 382, 310, 164, 125, 1, 2, 1 +282, 8, 864, 273, 33, 90, 1, 0, 1 +282, 55, 91, 299, 24, 57, 1, 0, 1 +282, 82, 449, 257, 25, 20, 1, 2, 1 +282, 212, 543, 254, 15, 38, 1, 0, 1 +282, 229, 503, 277, 48, 33, 1, 2, 1 +282, 234, 876, 304, 45, 118, 1, 0, 1 +282, 249, 617, 276, 23, 57, 1, 0, 1 +282, 261, 563, 258, 18, 43, 1, 0, 1 +282, 280, 598, 260, 16, 46, 1, 0, 1 +283, 1, 342, 279, 40, 28, 1, 2, 1 +283, 3, 390, 309, 166, 125, 1, 2, 1 +283, 8, 869, 273, 33, 91, 1, 0, 1 +283, 55, 94, 299, 24, 58, 1, 0, 1 +283, 82, 451, 256, 25, 21, 1, 2, 1 +283, 229, 507, 278, 48, 34, 1, 2, 1 +283, 234, 890, 305, 45, 118, 1, 0, 1 +283, 249, 620, 274, 22, 58, 1, 0, 1 +283, 261, 566, 258, 18, 43, 1, 0, 1 +283, 280, 601, 260, 16, 46, 1, 0, 1 +283, 285, 891, 284, 68, 54, 1, 2, 1 +284, 1, 345, 279, 39, 27, 1, 2, 1 +284, 3, 398, 311, 167, 124, 1, 2, 1 +284, 8, 875, 273, 33, 95, 1, 0, 1 +284, 55, 96, 299, 24, 59, 1, 0, 1 +284, 82, 454, 256, 25, 21, 1, 2, 1 +284, 229, 510, 279, 50, 33, 1, 2, 1 +284, 234, 901, 305, 46, 120, 1, 0, 1 +284, 249, 622, 273, 22, 58, 1, 0, 1 +284, 261, 571, 257, 18, 44, 1, 0, 1 +284, 285, 906, 289, 53, 42, 1, 2, 1 +285, 1, 349, 279, 38, 27, 1, 2, 1 +285, 3, 405, 310, 169, 125, 1, 2, 1 +285, 8, 881, 274, 32, 94, 1, 0, 1 +285, 55, 97, 300, 25, 60, 1, 0, 1 +285, 82, 457, 256, 25, 21, 1, 2, 1 +285, 229, 514, 279, 50, 33, 1, 2, 1 +285, 234, 910, 305, 48, 123, 1, 0, 1 +285, 249, 626, 272, 23, 59, 1, 0, 1 +285, 261, 574, 260, 17, 41, 1, 0, 1 +285, 285, 919, 289, 40, 38, 1, 2, 1 +285, 288, 652, 266, 18, 61, 1, 0, 1 +286, 1, 352, 279, 37, 26, 1, 2, 1 +286, 3, 412, 310, 170, 125, 1, 2, 1 +286, 8, 889, 273, 32, 95, 1, 0, 1 +286, 55, 98, 301, 25, 59, 1, 0, 1 +286, 82, 460, 257, 24, 20, 1, 2, 1 +286, 229, 518, 278, 52, 35, 1, 2, 1 +286, 234, 918, 304, 41, 126, 1, 0, 1 +286, 249, 629, 273, 23, 59, 1, 0, 1 +286, 261, 575, 258, 18, 42, 1, 0, 1 +286, 285, 929, 291, 30, 32, 1, 2, 1 +286, 288, 657, 267, 18, 59, 1, 0, 1 +287, 1, 355, 279, 37, 26, 1, 2, 1 +287, 3, 422, 310, 172, 125, 1, 2, 1 +287, 8, 895, 273, 33, 95, 1, 0, 1 +287, 55, 99, 302, 24, 59, 1, 0, 1 +287, 82, 462, 257, 24, 20, 1, 2, 1 +287, 229, 522, 278, 54, 35, 1, 2, 1 +287, 234, 926, 306, 33, 121, 1, 0, 1 +287, 249, 630, 273, 23, 59, 1, 0, 1 +287, 261, 578, 258, 17, 42, 1, 0, 1 +287, 288, 660, 266, 19, 61, 1, 0, 1 +288, 1, 358, 279, 37, 26, 1, 2, 1 +288, 3, 430, 310, 173, 124, 1, 2, 1 +288, 8, 903, 272, 34, 98, 1, 0, 1 +288, 55, 100, 302, 25, 60, 1, 0, 1 +288, 82, 465, 257, 24, 21, 1, 2, 1 +288, 229, 527, 277, 56, 36, 1, 2, 1 +288, 234, 935, 319, 24, 110, 1, 0, 1 +288, 249, 633, 276, 21, 57, 1, 0, 1 +288, 288, 666, 267, 18, 59, 1, 0, 1 +288, 293, 598, 263, 13, 37, 1, 0, 1 +289, 1, 360, 278, 39, 27, 1, 2, 1 +289, 3, 436, 309, 176, 125, 1, 2, 1 +289, 8, 910, 273, 35, 98, 1, 0, 1 +289, 55, 101, 302, 25, 60, 1, 0, 1 +289, 82, 467, 256, 25, 22, 1, 2, 1 +289, 229, 531, 277, 55, 35, 1, 2, 1 +289, 234, 943, 321, 16, 110, 1, 0, 1 +289, 249, 637, 276, 22, 56, 1, 0, 1 +289, 288, 667, 266, 19, 61, 1, 0, 1 +289, 293, 600, 263, 12, 37, 1, 0, 1 +290, 1, 363, 278, 39, 26, 1, 2, 1 +290, 3, 445, 308, 178, 125, 1, 2, 1 +290, 8, 916, 272, 36, 100, 1, 0, 1 +290, 55, 102, 302, 25, 60, 1, 0, 1 +290, 82, 469, 256, 26, 22, 1, 2, 1 +290, 229, 535, 277, 55, 35, 1, 2, 1 +290, 249, 639, 275, 23, 57, 1, 0, 1 +290, 288, 670, 266, 19, 61, 1, 0, 1 +290, 293, 600, 263, 13, 37, 1, 0, 1 +291, 1, 366, 278, 38, 26, 1, 2, 1 +291, 3, 453, 306, 183, 128, 1, 2, 1 +291, 8, 922, 272, 36, 101, 1, 0, 1 +291, 55, 102, 304, 24, 58, 1, 0, 1 +291, 82, 473, 256, 25, 21, 1, 2, 1 +291, 229, 538, 277, 55, 34, 1, 2, 1 +291, 249, 641, 275, 24, 60, 1, 0, 1 +291, 288, 671, 268, 19, 61, 1, 0, 1 +291, 293, 607, 263, 13, 37, 1, 0, 1 +292, 1, 369, 278, 37, 25, 1, 2, 1 +292, 3, 463, 306, 184, 128, 1, 2, 1 +292, 8, 926, 270, 33, 103, 1, 0, 1 +292, 55, 104, 305, 23, 58, 1, 0, 1 +292, 82, 475, 256, 25, 21, 1, 2, 1 +292, 229, 542, 277, 55, 33, 1, 2, 1 +292, 249, 645, 276, 23, 60, 1, 0, 1 +292, 288, 672, 268, 19, 61, 1, 0, 1 +292, 293, 610, 263, 13, 37, 1, 0, 1 +293, 1, 371, 277, 39, 27, 1, 2, 1 +293, 3, 471, 307, 186, 128, 1, 2, 1 +293, 8, 932, 270, 27, 104, 1, 0, 1 +293, 55, 106, 305, 24, 61, 1, 0, 1 +293, 82, 477, 256, 26, 21, 1, 2, 1 +293, 229, 548, 278, 55, 31, 1, 2, 1 +293, 249, 647, 277, 24, 59, 1, 0, 1 +293, 288, 678, 268, 20, 61, 1, 0, 1 +293, 293, 612, 263, 13, 37, 1, 0, 1 +294, 1, 374, 277, 38, 26, 1, 2, 1 +294, 3, 479, 307, 188, 128, 1, 2, 1 +294, 8, 937, 269, 22, 105, 1, 0, 1 +294, 55, 106, 304, 25, 63, 1, 0, 1 +294, 82, 479, 256, 26, 21, 1, 2, 1 +294, 229, 555, 280, 51, 29, 1, 2, 1 +294, 249, 653, 270, 25, 64, 1, 0, 1 +294, 288, 682, 268, 20, 62, 1, 0, 1 +295, 1, 377, 277, 37, 26, 1, 2, 1 +295, 3, 488, 306, 190, 129, 1, 2, 1 +295, 55, 106, 305, 26, 63, 1, 0, 1 +295, 82, 481, 256, 27, 22, 1, 2, 1 +295, 229, 557, 280, 53, 29, 1, 2, 1 +295, 249, 655, 268, 26, 67, 1, 0, 1 +295, 288, 684, 270, 19, 62, 1, 0, 1 +296, 1, 379, 278, 37, 26, 1, 2, 1 +296, 3, 498, 307, 191, 129, 1, 2, 1 +296, 55, 107, 305, 25, 62, 1, 0, 1 +296, 82, 484, 257, 26, 21, 1, 2, 1 +296, 229, 557, 279, 59, 32, 1, 2, 1 +296, 249, 657, 275, 24, 62, 1, 0, 1 +296, 288, 688, 276, 18, 56, 1, 0, 1 +297, 1, 383, 277, 36, 26, 1, 2, 1 +297, 3, 506, 307, 194, 129, 1, 2, 1 +297, 55, 108, 305, 25, 63, 1, 0, 1 +297, 82, 486, 257, 27, 21, 1, 2, 1 +297, 229, 561, 279, 61, 33, 1, 2, 1 +297, 249, 658, 274, 26, 66, 1, 0, 1 +297, 288, 692, 278, 17, 54, 1, 0, 1 +297, 293, 623, 263, 14, 39, 1, 0, 1 +298, 1, 385, 277, 37, 25, 1, 2, 1 +298, 3, 516, 307, 195, 129, 1, 2, 1 +298, 55, 109, 305, 25, 64, 1, 0, 1 +298, 82, 488, 257, 27, 22, 1, 2, 1 +298, 229, 563, 279, 63, 34, 1, 2, 1 +298, 249, 671, 271, 24, 65, 1, 0, 1 +298, 288, 695, 277, 18, 56, 1, 0, 1 +298, 293, 626, 263, 14, 39, 1, 0, 1 +299, 1, 388, 277, 36, 25, 1, 2, 1 +299, 3, 525, 307, 197, 129, 1, 2, 1 +299, 55, 109, 305, 26, 63, 1, 0, 1 +299, 82, 490, 257, 27, 21, 1, 2, 1 +299, 229, 567, 279, 65, 35, 1, 2, 1 +299, 249, 671, 270, 21, 57, 1, 0, 1 +299, 288, 698, 279, 19, 54, 1, 0, 1 +299, 293, 631, 263, 15, 41, 1, 0, 1 +300, 1, 390, 277, 36, 25, 1, 2, 1 +300, 3, 535, 307, 200, 130, 1, 2, 1 +300, 55, 109, 305, 26, 64, 1, 0, 1 +300, 82, 493, 257, 27, 22, 1, 2, 1 +300, 229, 570, 280, 67, 35, 1, 2, 1 +300, 249, 679, 270, 19, 51, 1, 0, 1 +300, 288, 701, 277, 21, 59, 1, 0, 1 +300, 293, 635, 263, 15, 42, 1, 0, 1 +301, 1, 391, 276, 37, 26, 1, 2, 1 +301, 3, 545, 308, 203, 131, 1, 2, 1 +301, 55, 111, 306, 26, 63, 1, 0, 1 +301, 82, 495, 258, 27, 22, 1, 2, 1 +301, 229, 573, 281, 69, 36, 1, 2, 1 +301, 249, 681, 268, 19, 48, 1, 0, 1 +301, 288, 704, 281, 20, 58, 1, 0, 1 +301, 293, 638, 264, 15, 41, 1, 0, 1 +302, 1, 394, 275, 36, 26, 1, 2, 1 +302, 3, 556, 308, 204, 132, 1, 2, 1 +302, 55, 112, 307, 25, 63, 1, 0, 1 +302, 82, 496, 257, 28, 23, 1, 2, 1 +302, 229, 577, 281, 72, 38, 1, 2, 1 +302, 249, 682, 267, 18, 46, 1, 0, 1 +302, 288, 707, 282, 21, 58, 1, 0, 1 +302, 293, 644, 263, 16, 43, 1, 0, 1 +302, 314, 793, 261, 18, 51, 1, 0, 1 +303, 1, 397, 276, 35, 25, 1, 2, 1 +303, 3, 566, 309, 206, 132, 1, 2, 1 +303, 55, 113, 310, 24, 61, 1, 0, 1 +303, 82, 498, 258, 29, 23, 1, 2, 1 +303, 229, 579, 282, 76, 39, 1, 2, 1 +303, 249, 686, 266, 17, 45, 1, 0, 1 +303, 293, 648, 263, 17, 45, 1, 0, 1 +303, 314, 794, 261, 18, 51, 1, 0, 1 +304, 1, 400, 277, 35, 24, 1, 2, 1 +304, 3, 577, 311, 207, 133, 1, 2, 1 +304, 55, 113, 310, 25, 63, 1, 0, 1 +304, 82, 501, 259, 29, 23, 1, 2, 1 +304, 229, 583, 284, 77, 39, 1, 2, 1 +304, 293, 650, 266, 16, 40, 1, 0, 1 +304, 314, 803, 265, 19, 52, 1, 0, 1 +305, 1, 402, 278, 36, 25, 1, 2, 1 +305, 3, 588, 312, 207, 131, 1, 2, 1 +305, 55, 113, 312, 25, 62, 1, 0, 1 +305, 82, 503, 260, 29, 24, 1, 2, 1 +305, 229, 585, 284, 80, 42, 1, 2, 1 +305, 293, 653, 266, 16, 41, 1, 0, 1 +305, 314, 806, 265, 19, 52, 1, 0, 1 +306, 1, 404, 279, 36, 26, 1, 2, 1 +306, 3, 598, 313, 211, 133, 1, 2, 1 +306, 55, 113, 312, 25, 63, 1, 0, 1 +306, 82, 505, 262, 28, 22, 1, 2, 1 +306, 229, 589, 286, 81, 43, 1, 2, 1 +306, 293, 655, 268, 14, 36, 1, 0, 1 +306, 314, 810, 268, 19, 53, 1, 0, 1 +306, 319, 709, 277, 15, 39, 1, 0, 1 +307, 1, 406, 279, 37, 26, 1, 2, 1 +307, 3, 610, 313, 212, 133, 1, 2, 1 +307, 55, 113, 312, 25, 64, 1, 0, 1 +307, 82, 507, 262, 28, 23, 1, 2, 1 +307, 229, 593, 287, 81, 42, 1, 2, 1 +307, 293, 658, 269, 14, 35, 1, 0, 1 +307, 314, 814, 268, 20, 55, 1, 0, 1 +307, 319, 710, 278, 15, 37, 1, 0, 1 +307, 321, 23, 315, 29, 63, 1, 0, 1 +308, 1, 409, 279, 35, 25, 1, 2, 1 +308, 3, 621, 314, 214, 133, 1, 2, 1 +308, 55, 113, 313, 25, 64, 1, 0, 1 +308, 82, 509, 263, 27, 22, 1, 2, 1 +308, 229, 596, 287, 81, 43, 1, 2, 1 +308, 288, 734, 282, 13, 35, 1, 0, 1 +308, 314, 817, 268, 19, 54, 1, 0, 1 +308, 319, 716, 280, 14, 36, 1, 0, 1 +308, 321, 23, 319, 28, 61, 1, 0, 1 +309, 1, 412, 279, 35, 26, 1, 2, 1 +309, 3, 632, 313, 217, 135, 1, 2, 1 +309, 55, 113, 313, 26, 65, 1, 0, 1 +309, 82, 511, 263, 29, 23, 1, 2, 1 +309, 229, 599, 287, 81, 43, 1, 2, 1 +309, 288, 730, 284, 14, 33, 1, 0, 1 +309, 293, 662, 269, 12, 30, 1, 0, 1 +309, 314, 822, 269, 19, 55, 1, 0, 1 +309, 319, 718, 280, 15, 37, 1, 0, 1 +309, 321, 21, 320, 29, 61, 1, 0, 1 +310, 1, 414, 280, 35, 25, 1, 2, 1 +310, 3, 644, 313, 219, 135, 1, 2, 1 +310, 55, 113, 314, 26, 65, 1, 0, 1 +310, 82, 513, 264, 29, 23, 1, 2, 1 +310, 229, 601, 288, 82, 43, 1, 2, 1 +310, 249, 704, 278, 16, 40, 1, 0, 1 +310, 288, 730, 286, 13, 31, 1, 0, 1 +310, 293, 665, 269, 11, 30, 1, 0, 1 +310, 314, 826, 269, 19, 55, 1, 0, 1 +310, 319, 721, 281, 14, 37, 1, 0, 1 +310, 321, 21, 321, 29, 61, 1, 0, 1 +311, 1, 416, 279, 34, 26, 1, 2, 1 +311, 3, 655, 313, 220, 135, 1, 2, 1 +311, 55, 113, 315, 26, 65, 1, 0, 1 +311, 82, 515, 264, 29, 23, 1, 2, 1 +311, 229, 604, 288, 82, 45, 1, 2, 1 +311, 249, 706, 279, 16, 39, 1, 0, 1 +311, 288, 732, 286, 13, 30, 1, 0, 1 +311, 314, 829, 270, 19, 54, 1, 0, 1 +311, 319, 721, 281, 15, 37, 1, 0, 1 +311, 321, 20, 320, 29, 63, 1, 0, 1 +312, 1, 418, 279, 35, 25, 1, 2, 1 +312, 3, 667, 312, 223, 137, 1, 2, 1 +312, 55, 113, 315, 26, 66, 1, 0, 1 +312, 82, 517, 265, 30, 23, 1, 2, 1 +312, 229, 606, 288, 82, 45, 1, 2, 1 +312, 314, 834, 270, 19, 55, 1, 0, 1 +312, 319, 721, 279, 16, 40, 1, 0, 1 +312, 321, 20, 321, 29, 62, 1, 0, 1 +313, 1, 420, 279, 34, 25, 1, 2, 1 +313, 3, 677, 311, 229, 139, 1, 2, 1 +313, 55, 112, 317, 26, 66, 1, 0, 1 +313, 82, 519, 265, 30, 24, 1, 2, 1 +313, 229, 608, 288, 84, 47, 1, 2, 1 +313, 288, 740, 286, 16, 33, 1, 0, 1 +313, 314, 838, 271, 19, 55, 1, 0, 1 +313, 319, 726, 281, 16, 38, 1, 0, 1 +313, 321, 20, 322, 29, 63, 1, 0, 1 +314, 1, 422, 280, 33, 24, 1, 2, 1 +314, 3, 692, 312, 229, 139, 1, 2, 1 +314, 55, 111, 317, 26, 67, 1, 0, 1 +314, 82, 521, 265, 29, 23, 1, 2, 1 +314, 229, 613, 290, 82, 45, 1, 2, 1 +314, 288, 748, 289, 15, 31, 1, 0, 1 +314, 314, 842, 271, 18, 52, 1, 0, 1 +314, 319, 728, 281, 17, 40, 1, 0, 1 +314, 321, 19, 323, 29, 63, 1, 0, 1 +315, 1, 424, 279, 34, 24, 1, 2, 1 +315, 3, 704, 312, 231, 139, 1, 2, 1 +315, 55, 111, 318, 26, 67, 1, 0, 1 +315, 82, 523, 265, 30, 24, 1, 2, 1 +315, 229, 617, 290, 80, 46, 1, 2, 1 +315, 288, 751, 289, 16, 34, 1, 0, 1 +315, 314, 847, 273, 17, 48, 1, 0, 1 +315, 319, 731, 279, 18, 45, 1, 0, 1 +315, 321, 19, 323, 29, 64, 1, 0, 1 +316, 1, 426, 279, 33, 24, 1, 2, 1 +316, 3, 717, 312, 233, 139, 1, 2, 1 +316, 55, 111, 318, 26, 67, 1, 0, 1 +316, 82, 525, 265, 30, 24, 1, 2, 1 +316, 229, 620, 291, 80, 46, 1, 2, 1 +316, 288, 755, 290, 16, 33, 1, 0, 1 +316, 314, 851, 273, 17, 46, 1, 0, 1 +316, 319, 733, 279, 19, 46, 1, 0, 1 +316, 321, 18, 323, 29, 64, 1, 0, 1 +317, 1, 428, 278, 33, 25, 1, 2, 1 +317, 3, 726, 311, 233, 140, 1, 2, 1 +317, 55, 112, 319, 26, 67, 1, 0, 1 +317, 82, 526, 265, 30, 23, 1, 2, 1 +317, 229, 622, 290, 81, 48, 1, 2, 1 +317, 314, 855, 273, 16, 46, 1, 0, 1 +317, 321, 17, 323, 29, 64, 1, 0, 1 +318, 1, 430, 278, 33, 25, 1, 2, 1 +318, 3, 734, 313, 225, 139, 1, 2, 1 +318, 55, 113, 318, 26, 69, 1, 0, 1 +318, 82, 528, 265, 30, 23, 1, 2, 1 +318, 229, 624, 290, 80, 47, 1, 2, 1 +318, 314, 858, 273, 17, 44, 1, 0, 1 +318, 321, 16, 323, 29, 65, 1, 0, 1 +319, 1, 433, 279, 33, 24, 1, 2, 1 +319, 3, 743, 313, 216, 139, 1, 2, 1 +319, 55, 113, 319, 27, 69, 1, 0, 1 +319, 82, 530, 266, 29, 23, 1, 2, 1 +319, 229, 624, 290, 81, 49, 1, 2, 1 +319, 314, 863, 272, 17, 45, 1, 0, 1 +319, 321, 14, 323, 29, 66, 1, 0, 1 +320, 1, 434, 279, 33, 24, 1, 2, 1 +320, 3, 749, 312, 210, 139, 1, 2, 1 +320, 55, 113, 319, 27, 69, 1, 0, 1 +320, 82, 531, 265, 31, 24, 1, 2, 1 +320, 229, 629, 290, 78, 49, 1, 2, 1 +320, 314, 867, 272, 16, 45, 1, 0, 1 +320, 321, 13, 323, 30, 67, 1, 0, 1 +321, 1, 436, 278, 32, 24, 1, 2, 1 +321, 3, 758, 312, 201, 140, 1, 2, 1 +321, 55, 113, 319, 27, 69, 1, 0, 1 +321, 82, 533, 266, 31, 23, 1, 2, 1 +321, 229, 631, 291, 75, 48, 1, 2, 1 +321, 314, 870, 272, 17, 45, 1, 0, 1 +321, 321, 13, 323, 29, 68, 1, 0, 1 +321, 338, 760, 288, 29, 75, 1, 0, 1 +322, 1, 437, 277, 32, 23, 1, 2, 1 +322, 3, 766, 312, 193, 140, 1, 2, 1 +322, 55, 113, 320, 27, 69, 1, 0, 1 +322, 82, 536, 266, 29, 23, 1, 2, 1 +322, 229, 634, 291, 74, 48, 1, 2, 1 +322, 314, 874, 272, 17, 45, 1, 0, 1 +322, 321, 12, 323, 30, 69, 1, 0, 1 +322, 338, 765, 289, 27, 73, 1, 0, 1 +323, 1, 439, 277, 31, 23, 1, 2, 1 +323, 3, 779, 312, 180, 138, 1, 2, 1 +323, 55, 112, 319, 28, 71, 1, 0, 1 +323, 82, 537, 266, 31, 23, 1, 2, 1 +323, 229, 638, 290, 71, 48, 1, 2, 1 +323, 280, 705, 296, 29, 78, 1, 0, 1 +323, 314, 877, 270, 18, 47, 1, 0, 1 +323, 321, 11, 324, 31, 69, 1, 0, 1 +323, 338, 768, 290, 28, 73, 1, 0, 1 +324, 1, 441, 277, 31, 22, 1, 2, 1 +324, 3, 790, 313, 169, 135, 1, 2, 1 +324, 55, 111, 317, 28, 73, 1, 0, 1 +324, 82, 538, 265, 33, 24, 1, 2, 1 +324, 229, 642, 291, 69, 47, 1, 2, 1 +324, 280, 706, 297, 31, 78, 1, 0, 1 +324, 293, 705, 265, 15, 35, 1, 0, 1 +324, 314, 879, 269, 19, 50, 1, 0, 1 +324, 321, 11, 323, 30, 70, 1, 0, 1 +324, 338, 770, 290, 28, 73, 1, 0, 1 +325, 1, 443, 276, 31, 22, 1, 2, 1 +325, 3, 801, 312, 158, 135, 1, 2, 1 +325, 55, 111, 317, 28, 73, 1, 0, 1 +325, 82, 540, 264, 33, 25, 1, 2, 1 +325, 229, 645, 292, 66, 46, 1, 2, 1 +325, 280, 710, 300, 31, 75, 1, 0, 1 +325, 293, 708, 265, 15, 35, 1, 0, 1 +325, 314, 883, 269, 20, 52, 1, 0, 1 +325, 321, 10, 323, 30, 69, 1, 0, 1 +325, 338, 773, 291, 28, 73, 1, 0, 1 +326, 1, 445, 275, 31, 23, 1, 2, 1 +326, 3, 817, 314, 142, 128, 1, 2, 1 +326, 55, 111, 317, 28, 73, 1, 0, 1 +326, 82, 540, 264, 34, 25, 1, 2, 1 +326, 229, 647, 292, 66, 46, 1, 2, 1 +326, 280, 710, 302, 31, 74, 1, 0, 1 +326, 314, 885, 268, 22, 54, 1, 0, 1 +326, 321, 7, 325, 29, 68, 1, 0, 1 +326, 338, 775, 292, 28, 74, 1, 0, 1 +327, 1, 446, 275, 31, 22, 1, 2, 1 +327, 3, 828, 315, 131, 129, 1, 2, 1 +327, 55, 110, 318, 28, 73, 1, 0, 1 +327, 82, 541, 263, 35, 26, 1, 2, 1 +327, 229, 651, 292, 65, 46, 1, 2, 1 +327, 280, 711, 302, 30, 74, 1, 0, 1 +327, 314, 889, 267, 22, 58, 1, 0, 1 +327, 321, 8, 324, 29, 68, 1, 0, 1 +327, 338, 776, 293, 28, 74, 1, 0, 1 +328, 1, 448, 274, 30, 22, 1, 2, 1 +328, 3, 841, 316, 118, 125, 1, 2, 1 +328, 55, 103, 319, 28, 73, 1, 0, 1 +328, 82, 541, 263, 36, 26, 1, 2, 1 +328, 229, 652, 293, 64, 46, 1, 2, 1 +328, 280, 711, 301, 32, 75, 1, 0, 1 +328, 314, 891, 266, 24, 62, 1, 0, 1 +328, 321, 5, 325, 29, 67, 1, 0, 1 +328, 338, 776, 291, 30, 78, 1, 0, 1 +329, 1, 449, 273, 31, 22, 1, 2, 1 +329, 3, 858, 320, 101, 116, 1, 2, 1 +329, 55, 103, 317, 28, 74, 1, 0, 1 +329, 82, 543, 262, 35, 27, 1, 2, 1 +329, 229, 655, 291, 63, 46, 1, 2, 1 +329, 280, 712, 299, 32, 77, 1, 0, 1 +329, 314, 895, 266, 23, 64, 1, 0, 1 +329, 321, 4, 324, 29, 68, 1, 0, 1 +329, 338, 779, 289, 30, 79, 1, 0, 1 +329, 348, 0, 324, 18, 67, 1, 0, 1 +330, 1, 450, 272, 31, 22, 1, 2, 1 +330, 3, 871, 322, 88, 113, 1, 2, 1 +330, 55, 102, 315, 29, 76, 1, 0, 1 +330, 82, 544, 261, 36, 27, 1, 2, 1 +330, 229, 656, 290, 64, 48, 1, 2, 1 +330, 280, 712, 300, 32, 76, 1, 0, 1 +330, 293, 714, 262, 18, 43, 1, 0, 1 +330, 314, 898, 267, 24, 65, 1, 0, 1 +330, 321, 3, 324, 28, 68, 1, 0, 1 +330, 338, 781, 290, 30, 79, 1, 0, 1 +330, 348, 0, 325, 17, 65, 1, 0, 1 +331, 1, 451, 270, 32, 23, 1, 2, 1 +331, 3, 881, 323, 78, 110, 1, 2, 1 +331, 55, 99, 316, 30, 76, 1, 0, 1 +331, 82, 544, 260, 37, 28, 1, 2, 1 +331, 229, 656, 289, 61, 47, 1, 2, 1 +331, 280, 713, 299, 31, 76, 1, 0, 1 +331, 293, 714, 262, 19, 42, 1, 0, 1 +331, 314, 901, 266, 24, 66, 1, 0, 1 +331, 321, 1, 323, 28, 69, 1, 0, 1 +331, 338, 782, 288, 30, 82, 1, 0, 1 +331, 348, 0, 325, 16, 65, 1, 0, 1 +332, 1, 451, 268, 33, 24, 1, 2, 1 +332, 55, 98, 316, 29, 75, 1, 0, 1 +332, 82, 546, 260, 36, 26, 1, 2, 1 +332, 229, 661, 287, 67, 51, 1, 2, 1 +332, 280, 714, 298, 30, 76, 1, 0, 1 +332, 293, 717, 261, 18, 43, 1, 0, 1 +332, 314, 903, 263, 25, 67, 1, 0, 1 +332, 321, 0, 321, 27, 70, 1, 0, 1 +332, 338, 783, 286, 32, 84, 1, 0, 1 +332, 350, 687, 289, 27, 74, 1, 0, 1 +333, 1, 451, 266, 34, 25, 1, 2, 1 +333, 55, 98, 315, 29, 75, 1, 0, 1 +333, 82, 547, 259, 35, 26, 1, 2, 1 +333, 229, 660, 285, 64, 51, 1, 2, 1 +333, 280, 714, 297, 31, 78, 1, 0, 1 +333, 314, 906, 263, 25, 66, 1, 0, 1 +333, 321, 0, 322, 24, 69, 1, 0, 1 +333, 338, 786, 286, 31, 83, 1, 0, 1 +333, 350, 686, 286, 28, 77, 1, 0, 1 +334, 1, 452, 265, 32, 24, 1, 2, 1 +334, 55, 98, 314, 29, 76, 1, 0, 1 +334, 82, 548, 258, 34, 25, 1, 2, 1 +334, 229, 663, 285, 63, 51, 1, 2, 1 +334, 280, 714, 296, 32, 80, 1, 0, 1 +334, 314, 909, 260, 26, 67, 1, 0, 1 +334, 321, 0, 323, 22, 67, 1, 0, 1 +334, 338, 786, 285, 32, 86, 1, 0, 1 +334, 350, 685, 286, 29, 77, 1, 0, 1 +335, 1, 453, 264, 31, 23, 1, 2, 1 +335, 55, 89, 316, 29, 74, 1, 0, 1 +335, 82, 549, 257, 35, 25, 1, 2, 1 +335, 229, 664, 284, 65, 52, 1, 2, 1 +335, 280, 714, 293, 33, 83, 1, 0, 1 +335, 314, 912, 258, 26, 68, 1, 0, 1 +335, 321, 0, 323, 21, 67, 1, 0, 1 +335, 338, 790, 290, 31, 82, 1, 0, 1 +335, 350, 684, 280, 30, 82, 1, 0, 1 +336, 1, 454, 262, 31, 24, 1, 2, 1 +336, 55, 87, 316, 28, 75, 1, 0, 1 +336, 82, 550, 256, 35, 25, 1, 2, 1 +336, 280, 715, 293, 33, 83, 1, 0, 1 +336, 314, 915, 256, 26, 69, 1, 0, 1 +336, 321, 0, 324, 18, 65, 1, 0, 1 +336, 338, 791, 284, 32, 87, 1, 0, 1 +336, 350, 682, 275, 33, 87, 1, 0, 1 +337, 1, 455, 262, 30, 23, 1, 2, 1 +337, 55, 88, 315, 29, 77, 1, 0, 1 +337, 82, 551, 256, 35, 26, 1, 2, 1 +337, 280, 716, 295, 34, 83, 1, 0, 1 +337, 314, 917, 256, 26, 69, 1, 0, 1 +337, 321, 0, 325, 17, 65, 1, 0, 1 +337, 338, 785, 271, 37, 101, 1, 0, 1 +337, 350, 682, 274, 34, 90, 1, 0, 1 +338, 1, 456, 263, 29, 22, 1, 2, 1 +338, 55, 88, 317, 30, 79, 1, 0, 1 +338, 82, 552, 256, 36, 26, 1, 2, 1 +338, 280, 717, 295, 34, 85, 1, 0, 1 +338, 314, 920, 256, 26, 68, 1, 0, 1 +338, 321, 0, 331, 15, 61, 1, 0, 1 +338, 338, 785, 269, 39, 106, 1, 0, 1 +338, 350, 681, 274, 35, 90, 1, 0, 1 +339, 1, 457, 263, 29, 22, 1, 2, 1 +339, 55, 86, 318, 31, 79, 1, 0, 1 +339, 82, 552, 257, 37, 26, 1, 2, 1 +339, 280, 717, 295, 35, 88, 1, 0, 1 +339, 314, 922, 256, 26, 70, 1, 0, 1 +339, 321, 0, 332, 13, 61, 1, 0, 1 +339, 338, 786, 273, 37, 104, 1, 0, 1 +339, 350, 680, 278, 34, 87, 1, 0, 1 +339, 358, 718, 283, 58, 53, 1, 2, 1 +340, 1, 458, 262, 29, 23, 1, 2, 1 +340, 55, 81, 319, 30, 79, 1, 0, 1 +340, 82, 552, 256, 38, 27, 1, 2, 1 +340, 280, 719, 295, 36, 88, 1, 0, 1 +340, 314, 924, 256, 26, 69, 1, 0, 1 +340, 338, 788, 273, 38, 107, 1, 0, 1 +340, 350, 680, 278, 34, 88, 1, 0, 1 +340, 358, 718, 284, 58, 53, 1, 2, 1 +341, 1, 459, 262, 29, 23, 1, 2, 1 +341, 55, 78, 321, 29, 78, 1, 0, 1 +341, 82, 553, 257, 38, 27, 1, 2, 1 +341, 280, 718, 297, 38, 88, 1, 0, 1 +341, 314, 927, 258, 26, 69, 1, 0, 1 +341, 338, 787, 270, 40, 111, 1, 0, 1 +341, 350, 680, 283, 32, 84, 1, 0, 1 +342, 1, 459, 263, 30, 23, 1, 2, 1 +342, 55, 76, 322, 30, 80, 1, 0, 1 +342, 82, 554, 258, 38, 27, 1, 2, 1 +342, 280, 717, 299, 39, 88, 1, 0, 1 +342, 314, 930, 260, 26, 69, 1, 0, 1 +342, 338, 788, 272, 40, 111, 1, 0, 1 +342, 350, 678, 280, 35, 89, 1, 0, 1 +343, 1, 459, 265, 30, 22, 1, 2, 1 +343, 55, 74, 325, 29, 79, 1, 0, 1 +343, 82, 553, 260, 40, 27, 1, 2, 1 +343, 280, 717, 300, 40, 90, 1, 0, 1 +343, 314, 933, 262, 25, 67, 1, 0, 1 +343, 338, 788, 273, 40, 110, 1, 0, 1 +343, 350, 676, 274, 38, 99, 1, 0, 1 +343, 361, 712, 286, 74, 52, 1, 2, 1 +344, 1, 460, 266, 30, 23, 1, 2, 1 +344, 55, 73, 327, 29, 79, 1, 0, 1 +344, 82, 553, 261, 40, 28, 1, 2, 1 +344, 280, 719, 303, 39, 90, 1, 0, 1 +344, 314, 936, 266, 23, 65, 1, 0, 1 +344, 338, 788, 280, 40, 106, 1, 0, 1 +344, 350, 673, 268, 41, 107, 1, 0, 1 +344, 361, 710, 289, 74, 52, 1, 2, 1 +345, 1, 460, 268, 31, 24, 1, 2, 1 +345, 55, 68, 330, 30, 81, 1, 0, 1 +345, 82, 555, 264, 39, 28, 1, 2, 1 +345, 280, 717, 306, 39, 92, 1, 0, 1 +345, 314, 937, 269, 22, 65, 1, 0, 1 +345, 338, 788, 283, 40, 108, 1, 0, 1 +345, 350, 675, 279, 36, 96, 1, 0, 1 +345, 361, 708, 292, 78, 54, 1, 2, 1 +346, 1, 462, 270, 29, 23, 1, 2, 1 +346, 55, 66, 332, 30, 83, 1, 0, 1 +346, 82, 556, 267, 39, 27, 1, 2, 1 +346, 280, 718, 311, 39, 90, 1, 0, 1 +346, 314, 939, 270, 20, 66, 1, 0, 1 +346, 338, 789, 290, 40, 106, 1, 0, 1 +346, 350, 676, 285, 34, 93, 1, 0, 1 +346, 361, 709, 293, 79, 55, 1, 2, 1 +347, 1, 463, 272, 28, 21, 1, 2, 1 +347, 55, 63, 334, 31, 84, 1, 0, 1 +347, 82, 555, 268, 40, 28, 1, 2, 1 +347, 280, 719, 315, 37, 90, 1, 0, 1 +347, 314, 942, 271, 17, 66, 1, 0, 1 +347, 338, 790, 297, 40, 102, 1, 0, 1 +347, 350, 677, 289, 33, 91, 1, 0, 1 +347, 361, 711, 296, 79, 55, 1, 2, 1 +347, 369, 724, 269, 24, 27, 1, 0, 1 +348, 1, 463, 272, 27, 21, 1, 2, 1 +348, 55, 61, 334, 30, 84, 1, 0, 1 +348, 82, 558, 270, 38, 27, 1, 2, 1 +348, 280, 720, 317, 37, 90, 1, 0, 1 +348, 338, 788, 302, 37, 98, 1, 0, 1 +348, 350, 677, 289, 34, 94, 1, 0, 1 +348, 361, 711, 297, 80, 55, 1, 2, 1 +348, 369, 724, 270, 23, 26, 1, 0, 1 +349, 1, 463, 272, 27, 21, 1, 2, 1 +349, 55, 55, 337, 31, 84, 1, 0, 1 +349, 82, 559, 271, 38, 27, 1, 2, 1 +349, 280, 719, 320, 38, 91, 1, 0, 1 +349, 338, 788, 304, 37, 98, 1, 0, 1 +349, 350, 683, 292, 35, 97, 1, 0, 1 +349, 361, 711, 298, 80, 55, 1, 2, 1 +349, 369, 725, 270, 23, 28, 1, 0, 1 +350, 1, 464, 272, 27, 21, 1, 2, 1 +350, 55, 51, 338, 30, 83, 1, 0, 1 +350, 82, 560, 272, 38, 27, 1, 2, 1 +350, 280, 719, 320, 38, 94, 1, 0, 1 +350, 338, 789, 299, 40, 105, 1, 0, 1 +350, 350, 684, 294, 36, 98, 1, 0, 1 +350, 361, 708, 299, 82, 56, 1, 2, 1 +350, 369, 725, 270, 25, 29, 1, 0, 1 +351, 1, 464, 272, 28, 21, 1, 2, 1 +351, 55, 48, 337, 31, 86, 1, 0, 1 +351, 82, 560, 273, 39, 27, 1, 2, 1 +351, 280, 719, 321, 39, 95, 1, 0, 1 +351, 338, 790, 299, 40, 106, 1, 0, 1 +351, 350, 687, 295, 35, 98, 1, 0, 1 +351, 361, 708, 300, 84, 56, 1, 2, 1 +351, 369, 726, 270, 25, 30, 1, 0, 1 +352, 1, 465, 272, 28, 22, 1, 2, 1 +352, 55, 48, 338, 30, 85, 1, 0, 1 +352, 82, 561, 274, 38, 27, 1, 2, 1 +352, 280, 719, 322, 40, 97, 1, 0, 1 +352, 338, 791, 301, 40, 106, 1, 0, 1 +352, 350, 692, 297, 36, 99, 1, 0, 1 +352, 361, 706, 300, 87, 58, 1, 2, 1 +352, 369, 727, 270, 25, 31, 1, 0, 1 +352, 383, 550, 268, 29, 21, 1, 2, 1 +353, 1, 465, 273, 28, 22, 1, 2, 1 +353, 55, 44, 340, 30, 85, 1, 0, 1 +353, 82, 561, 274, 39, 27, 1, 2, 1 +353, 280, 720, 325, 40, 96, 1, 0, 1 +353, 338, 790, 302, 40, 105, 1, 0, 1 +353, 350, 696, 301, 33, 95, 1, 0, 1 +353, 361, 706, 300, 89, 59, 1, 2, 1 +353, 369, 729, 272, 24, 29, 1, 0, 1 +353, 383, 550, 268, 30, 22, 1, 2, 1 +354, 1, 465, 273, 29, 22, 1, 2, 1 +354, 55, 41, 340, 30, 85, 1, 0, 1 +354, 82, 562, 275, 39, 28, 1, 2, 1 +354, 280, 722, 330, 40, 93, 1, 0, 1 +354, 338, 790, 301, 40, 109, 1, 0, 1 +354, 350, 696, 301, 33, 96, 1, 0, 1 +354, 361, 705, 301, 90, 59, 1, 2, 1 +354, 369, 729, 272, 25, 30, 1, 0, 1 +354, 383, 552, 269, 27, 21, 1, 2, 1 +355, 1, 466, 273, 28, 22, 1, 2, 1 +355, 55, 38, 341, 32, 85, 1, 0, 1 +355, 82, 563, 276, 39, 28, 1, 2, 1 +355, 280, 723, 333, 39, 93, 1, 0, 1 +355, 338, 790, 304, 40, 108, 1, 0, 1 +355, 350, 694, 300, 34, 97, 1, 0, 1 +355, 361, 706, 303, 89, 59, 1, 2, 1 +355, 383, 552, 270, 27, 20, 1, 2, 1 +356, 1, 467, 273, 27, 22, 1, 2, 1 +356, 55, 36, 340, 31, 88, 1, 0, 1 +356, 82, 563, 276, 40, 28, 1, 2, 1 +356, 280, 722, 334, 41, 94, 1, 0, 1 +356, 338, 790, 310, 39, 103, 1, 0, 1 +356, 350, 691, 298, 35, 101, 1, 0, 1 +356, 361, 703, 303, 94, 61, 1, 2, 1 +356, 369, 738, 273, 26, 31, 1, 0, 1 +356, 383, 552, 270, 27, 20, 1, 2, 1 +357, 1, 467, 273, 27, 21, 1, 2, 1 +357, 55, 34, 340, 32, 88, 1, 0, 1 +357, 82, 564, 277, 41, 29, 1, 2, 1 +357, 280, 722, 334, 43, 98, 1, 0, 1 +357, 338, 789, 313, 40, 104, 1, 0, 1 +357, 350, 691, 301, 35, 100, 1, 0, 1 +357, 361, 701, 306, 95, 60, 1, 2, 1 +357, 369, 739, 276, 23, 28, 1, 0, 1 +357, 383, 551, 270, 27, 20, 1, 2, 1 +357, 392, 767, 274, 17, 37, 1, 0, 1 +358, 1, 467, 273, 27, 21, 1, 2, 1 +358, 55, 29, 342, 32, 88, 1, 0, 1 +358, 82, 565, 278, 40, 28, 1, 2, 1 +358, 280, 723, 335, 42, 98, 1, 0, 1 +358, 338, 790, 317, 39, 102, 1, 0, 1 +358, 350, 690, 301, 36, 102, 1, 0, 1 +358, 361, 702, 306, 96, 61, 1, 2, 1 +358, 369, 740, 277, 23, 28, 1, 0, 1 +358, 383, 551, 270, 27, 20, 1, 2, 1 +358, 392, 768, 276, 15, 33, 1, 0, 1 +359, 1, 468, 274, 26, 20, 1, 2, 1 +359, 55, 27, 343, 32, 89, 1, 0, 1 +359, 82, 566, 278, 39, 29, 1, 2, 1 +359, 280, 723, 336, 42, 98, 1, 0, 1 +359, 338, 789, 320, 41, 102, 1, 0, 1 +359, 350, 692, 307, 34, 98, 1, 0, 1 +359, 361, 704, 308, 95, 59, 1, 2, 1 +359, 383, 552, 270, 27, 21, 1, 2, 1 +360, 1, 468, 275, 26, 21, 1, 2, 1 +360, 55, 20, 343, 33, 91, 1, 0, 1 +360, 82, 567, 280, 39, 27, 1, 2, 1 +360, 280, 724, 339, 41, 97, 1, 0, 1 +360, 338, 790, 323, 41, 101, 1, 0, 1 +360, 350, 692, 312, 34, 96, 1, 0, 1 +360, 361, 705, 310, 94, 59, 1, 2, 1 +360, 383, 552, 272, 26, 20, 1, 2, 1 +361, 1, 468, 275, 26, 21, 1, 2, 1 +361, 55, 15, 345, 32, 90, 1, 0, 1 +361, 82, 567, 280, 39, 28, 1, 2, 1 +361, 280, 724, 339, 41, 101, 1, 0, 1 +361, 338, 791, 325, 41, 101, 1, 0, 1 +361, 350, 690, 314, 35, 96, 1, 0, 1 +361, 361, 703, 311, 96, 60, 1, 2, 1 +361, 383, 552, 273, 25, 19, 1, 2, 1 +362, 1, 468, 275, 26, 21, 1, 2, 1 +362, 55, 13, 348, 32, 91, 1, 0, 1 +362, 82, 568, 282, 38, 27, 1, 2, 1 +362, 280, 725, 341, 41, 102, 1, 0, 1 +362, 338, 792, 328, 41, 102, 1, 0, 1 +362, 350, 686, 314, 35, 98, 1, 0, 1 +362, 361, 703, 312, 96, 60, 1, 2, 1 +362, 369, 745, 282, 23, 30, 1, 0, 1 +362, 383, 553, 276, 23, 18, 1, 2, 1 +363, 1, 469, 277, 25, 20, 1, 2, 1 +363, 55, 12, 349, 31, 93, 1, 0, 1 +363, 82, 568, 283, 38, 27, 1, 2, 1 +363, 280, 725, 342, 42, 105, 1, 0, 1 +363, 338, 790, 329, 42, 102, 1, 0, 1 +363, 350, 684, 313, 35, 100, 1, 0, 1 +363, 361, 704, 312, 97, 60, 1, 2, 1 +363, 369, 745, 281, 24, 31, 1, 0, 1 +363, 383, 553, 277, 23, 18, 1, 2, 1 +364, 1, 468, 277, 27, 21, 1, 2, 1 +364, 55, 9, 348, 32, 93, 1, 0, 1 +364, 82, 567, 284, 39, 28, 1, 2, 1 +364, 280, 724, 343, 43, 108, 1, 0, 1 +364, 338, 789, 329, 44, 107, 1, 0, 1 +364, 350, 683, 314, 38, 104, 1, 0, 1 +364, 361, 703, 313, 99, 62, 1, 2, 1 +364, 369, 744, 283, 23, 30, 1, 0, 1 +364, 383, 552, 277, 25, 20, 1, 2, 1 +365, 1, 468, 278, 27, 21, 1, 2, 1 +365, 55, 4, 351, 31, 93, 1, 0, 1 +365, 82, 567, 285, 41, 29, 1, 2, 1 +365, 280, 724, 346, 43, 109, 1, 0, 1 +365, 319, 843, 296, 27, 67, 1, 0, 1 +365, 338, 787, 330, 44, 109, 1, 0, 1 +365, 350, 681, 315, 39, 106, 1, 0, 1 +365, 361, 703, 314, 100, 63, 1, 2, 1 +365, 369, 746, 285, 23, 30, 1, 0, 1 +365, 383, 552, 277, 27, 22, 1, 2, 1 +365, 414, 668, 311, 27, 98, 1, 0, 1 +366, 1, 469, 278, 27, 21, 1, 2, 1 +366, 55, 2, 352, 31, 93, 1, 0, 1 +366, 82, 566, 285, 43, 31, 1, 2, 1 +366, 280, 725, 350, 43, 108, 1, 0, 1 +366, 319, 845, 296, 27, 68, 1, 0, 1 +366, 338, 787, 331, 44, 112, 1, 0, 1 +366, 350, 679, 317, 40, 107, 1, 0, 1 +366, 361, 703, 314, 101, 65, 1, 2, 1 +366, 369, 747, 286, 23, 31, 1, 0, 1 +366, 383, 552, 277, 28, 23, 1, 2, 1 +366, 414, 668, 315, 28, 100, 1, 0, 1 +367, 1, 469, 279, 27, 21, 1, 2, 1 +367, 55, 0, 353, 29, 95, 1, 0, 1 +367, 82, 566, 287, 43, 31, 1, 2, 1 +367, 280, 726, 352, 44, 110, 1, 0, 1 +367, 338, 786, 333, 44, 113, 1, 0, 1 +367, 350, 680, 319, 39, 106, 1, 0, 1 +367, 361, 704, 316, 101, 65, 1, 2, 1 +367, 369, 749, 286, 23, 31, 1, 0, 1 +367, 383, 552, 279, 27, 21, 1, 2, 1 +367, 414, 668, 319, 28, 100, 1, 0, 1 +368, 1, 470, 280, 27, 21, 1, 2, 1 +368, 55, 0, 356, 26, 94, 1, 0, 1 +368, 82, 567, 288, 43, 31, 1, 2, 1 +368, 280, 727, 354, 45, 112, 1, 0, 1 +368, 338, 785, 334, 45, 115, 1, 0, 1 +368, 350, 676, 321, 40, 106, 1, 0, 1 +368, 361, 704, 318, 99, 64, 1, 2, 1 +368, 369, 748, 287, 24, 32, 1, 0, 1 +368, 383, 553, 280, 26, 22, 1, 2, 1 +368, 414, 668, 322, 28, 100, 1, 0, 1 +369, 1, 470, 282, 26, 20, 1, 2, 1 +369, 55, 0, 358, 23, 95, 1, 0, 1 +369, 82, 568, 290, 42, 30, 1, 2, 1 +369, 280, 728, 354, 46, 115, 1, 0, 1 +369, 338, 785, 334, 45, 117, 1, 0, 1 +369, 350, 675, 322, 41, 106, 1, 0, 1 +369, 361, 705, 320, 98, 63, 1, 2, 1 +369, 369, 749, 288, 23, 32, 1, 0, 1 +369, 383, 553, 282, 25, 21, 1, 2, 1 +370, 1, 470, 283, 25, 20, 1, 2, 1 +370, 55, 0, 359, 21, 93, 1, 0, 1 +370, 82, 569, 292, 41, 29, 1, 2, 1 +370, 280, 728, 356, 47, 117, 1, 0, 1 +370, 338, 783, 335, 46, 118, 1, 0, 1 +370, 350, 678, 322, 41, 107, 1, 0, 1 +370, 361, 707, 322, 95, 62, 1, 2, 1 +370, 369, 749, 289, 23, 33, 1, 0, 1 +370, 383, 553, 283, 26, 21, 1, 2, 1 +370, 414, 662, 325, 28, 97, 1, 0, 1 +371, 1, 470, 284, 25, 20, 1, 2, 1 +371, 55, 0, 358, 28, 94, 1, 0, 1 +371, 82, 570, 293, 41, 29, 1, 2, 1 +371, 280, 729, 357, 47, 118, 1, 0, 1 +371, 338, 782, 335, 48, 119, 1, 0, 1 +371, 350, 678, 323, 41, 108, 1, 0, 1 +371, 361, 707, 323, 94, 60, 1, 2, 1 +371, 369, 749, 289, 23, 34, 1, 0, 1 +371, 383, 553, 283, 27, 22, 1, 2, 1 +371, 414, 661, 325, 28, 98, 1, 0, 1 +372, 1, 470, 283, 25, 20, 1, 2, 1 +372, 55, 0, 359, 27, 92, 1, 0, 1 +372, 82, 569, 293, 43, 30, 1, 2, 1 +372, 280, 728, 359, 48, 119, 1, 0, 1 +372, 338, 782, 336, 49, 119, 1, 0, 1 +372, 350, 678, 325, 39, 108, 1, 0, 1 +372, 361, 708, 323, 95, 62, 1, 2, 1 +372, 369, 749, 290, 23, 34, 1, 0, 1 +372, 383, 553, 282, 27, 23, 1, 2, 1 +372, 414, 660, 326, 27, 96, 1, 0, 1 +373, 1, 470, 284, 25, 19, 1, 2, 1 +373, 55, 0, 362, 26, 92, 1, 0, 1 +373, 82, 568, 293, 44, 31, 1, 2, 1 +373, 280, 728, 360, 48, 120, 1, 0, 1 +373, 338, 783, 340, 49, 116, 1, 0, 1 +373, 350, 677, 329, 38, 105, 1, 0, 1 +373, 361, 710, 323, 96, 62, 1, 2, 1 +373, 369, 750, 289, 23, 34, 1, 0, 1 +373, 383, 553, 282, 27, 25, 1, 2, 1 +373, 414, 658, 326, 26, 94, 1, 0, 1 +374, 1, 471, 284, 24, 19, 1, 2, 1 +374, 55, 0, 364, 24, 90, 1, 0, 1 +374, 82, 567, 293, 45, 32, 1, 2, 1 +374, 280, 728, 361, 47, 120, 1, 0, 1 +374, 338, 783, 342, 49, 116, 1, 0, 1 +374, 350, 676, 329, 38, 105, 1, 0, 1 +374, 361, 712, 323, 99, 63, 1, 2, 1 +374, 369, 750, 289, 23, 34, 1, 0, 1 +374, 383, 553, 282, 28, 25, 1, 2, 1 +374, 414, 656, 325, 27, 95, 1, 0, 1 +375, 1, 470, 284, 25, 20, 1, 2, 1 +375, 55, 0, 365, 22, 92, 1, 0, 1 +375, 82, 568, 293, 45, 31, 1, 2, 1 +375, 280, 727, 361, 47, 121, 1, 0, 1 +375, 338, 783, 345, 49, 114, 1, 0, 1 +375, 350, 675, 328, 38, 108, 1, 0, 1 +375, 361, 712, 324, 101, 62, 1, 2, 1 +375, 369, 751, 290, 23, 34, 1, 0, 1 +375, 383, 552, 283, 28, 25, 1, 2, 1 +375, 414, 655, 323, 28, 98, 1, 0, 1 +376, 1, 470, 283, 25, 20, 1, 2, 1 +376, 55, 0, 366, 19, 93, 1, 0, 1 +376, 82, 568, 292, 44, 32, 1, 2, 1 +376, 280, 727, 362, 46, 120, 1, 0, 1 +376, 338, 781, 346, 50, 113, 1, 0, 1 +376, 350, 673, 328, 39, 108, 1, 0, 1 +376, 361, 708, 323, 103, 64, 1, 2, 1 +376, 383, 551, 282, 29, 26, 1, 2, 1 +376, 414, 654, 324, 28, 98, 1, 0, 1 +376, 441, 800, 338, 48, 49, 1, 2, 1 +377, 1, 470, 281, 24, 20, 1, 2, 1 +377, 55, 0, 367, 18, 93, 1, 0, 1 +377, 82, 567, 291, 46, 33, 1, 2, 1 +377, 280, 727, 361, 46, 123, 1, 0, 1 +377, 338, 778, 345, 51, 115, 1, 0, 1 +377, 350, 672, 328, 38, 109, 1, 0, 1 +377, 361, 706, 322, 106, 65, 1, 2, 1 +377, 369, 751, 286, 23, 34, 1, 0, 1 +377, 383, 551, 281, 28, 26, 1, 2, 1 +377, 441, 801, 339, 47, 47, 1, 2, 1 +378, 1, 469, 280, 24, 19, 1, 2, 1 +378, 82, 566, 290, 47, 34, 1, 2, 1 +378, 280, 726, 361, 46, 124, 1, 0, 1 +378, 338, 775, 343, 52, 120, 1, 0, 1 +378, 350, 670, 329, 35, 99, 1, 0, 1 +378, 361, 705, 320, 105, 65, 1, 2, 1 +378, 369, 751, 285, 23, 34, 1, 0, 1 +378, 383, 551, 280, 27, 26, 1, 2, 1 +378, 441, 802, 341, 45, 45, 1, 2, 1 +379, 1, 469, 279, 24, 19, 1, 2, 1 +379, 82, 566, 290, 47, 33, 1, 2, 1 +379, 280, 725, 362, 47, 126, 1, 0, 1 +379, 338, 771, 343, 52, 121, 1, 0, 1 +379, 350, 667, 326, 34, 95, 1, 0, 1 +379, 361, 703, 319, 105, 65, 1, 2, 1 +379, 369, 752, 284, 23, 34, 1, 0, 1 +379, 383, 550, 280, 28, 26, 1, 2, 1 +379, 441, 803, 341, 45, 45, 1, 2, 1 +380, 1, 468, 278, 23, 19, 1, 2, 1 +380, 82, 565, 289, 47, 34, 1, 2, 1 +380, 280, 724, 362, 48, 129, 1, 0, 1 +380, 319, 864, 301, 29, 72, 1, 0, 1 +380, 338, 769, 343, 52, 121, 1, 0, 1 +380, 350, 665, 325, 32, 93, 1, 0, 1 +380, 361, 703, 319, 105, 64, 1, 2, 1 +380, 369, 751, 283, 23, 34, 1, 0, 1 +380, 383, 549, 280, 29, 26, 1, 2, 1 +380, 441, 804, 342, 44, 43, 1, 2, 1 +381, 1, 468, 278, 23, 18, 1, 2, 1 +381, 82, 564, 288, 48, 35, 1, 2, 1 +381, 280, 724, 364, 49, 133, 1, 0, 1 +381, 319, 858, 300, 27, 72, 1, 0, 1 +381, 338, 764, 344, 52, 123, 1, 0, 1 +381, 350, 662, 325, 32, 93, 1, 0, 1 +381, 361, 705, 318, 107, 64, 1, 2, 1 +381, 369, 751, 282, 24, 35, 1, 0, 1 +381, 383, 548, 278, 28, 26, 1, 2, 1 +382, 1, 467, 276, 22, 18, 1, 2, 1 +382, 82, 564, 287, 48, 35, 1, 2, 1 +382, 280, 723, 364, 49, 136, 1, 0, 1 +382, 319, 856, 299, 28, 73, 1, 0, 1 +382, 338, 762, 346, 50, 121, 1, 0, 1 +382, 350, 660, 325, 32, 94, 1, 0, 1 +382, 361, 706, 318, 110, 65, 1, 2, 1 +382, 383, 547, 278, 28, 26, 1, 2, 1 +382, 459, 782, 338, 66, 49, 1, 2, 1 +383, 1, 465, 275, 23, 18, 1, 2, 1 +383, 82, 563, 286, 48, 36, 1, 2, 1 +383, 280, 722, 366, 50, 137, 1, 0, 1 +383, 319, 856, 298, 28, 73, 1, 0, 1 +383, 338, 759, 349, 49, 120, 1, 0, 1 +383, 350, 658, 324, 32, 95, 1, 0, 1 +383, 361, 705, 317, 113, 66, 1, 2, 1 +383, 383, 546, 278, 27, 25, 1, 2, 1 +383, 459, 780, 336, 67, 51, 1, 2, 1 +384, 1, 464, 274, 24, 18, 1, 2, 1 +384, 82, 562, 286, 48, 36, 1, 2, 1 +384, 280, 721, 365, 50, 140, 1, 0, 1 +384, 319, 856, 297, 29, 75, 1, 0, 1 +384, 338, 756, 348, 49, 122, 1, 0, 1 +384, 350, 654, 324, 32, 95, 1, 0, 1 +384, 361, 700, 316, 115, 67, 1, 2, 1 +384, 369, 748, 281, 24, 36, 1, 0, 1 +384, 383, 544, 277, 29, 26, 1, 2, 1 +384, 459, 777, 334, 71, 53, 1, 2, 1 +385, 1, 462, 273, 24, 18, 1, 2, 1 +385, 82, 561, 286, 48, 36, 1, 2, 1 +385, 280, 718, 367, 51, 141, 1, 0, 1 +385, 319, 857, 297, 29, 75, 1, 0, 1 +385, 338, 755, 350, 48, 120, 1, 0, 1 +385, 350, 653, 324, 31, 95, 1, 0, 1 +385, 361, 704, 314, 125, 71, 1, 2, 1 +385, 369, 747, 279, 25, 37, 1, 0, 1 +385, 383, 543, 276, 28, 26, 1, 2, 1 +385, 459, 775, 333, 72, 54, 1, 2, 1 +385, 466, 525, 263, 16, 13, 1, 2, 1 +386, 1, 461, 272, 22, 17, 1, 2, 1 +386, 82, 560, 284, 48, 37, 1, 2, 1 +386, 280, 716, 368, 51, 142, 1, 0, 1 +386, 319, 858, 298, 30, 75, 1, 0, 1 +386, 338, 753, 352, 48, 120, 1, 0, 1 +386, 350, 651, 324, 31, 95, 1, 0, 1 +386, 361, 704, 314, 130, 73, 1, 2, 1 +386, 369, 745, 278, 25, 39, 1, 0, 1 +386, 383, 541, 276, 29, 27, 1, 2, 1 +386, 414, 622, 324, 30, 102, 1, 0, 1 +386, 466, 523, 263, 15, 13, 1, 2, 1 +386, 470, 592, 270, 39, 27, 1, 2, 1 +387, 1, 460, 270, 23, 18, 1, 2, 1 +387, 82, 560, 284, 47, 37, 1, 2, 1 +387, 280, 715, 370, 50, 141, 1, 0, 1 +387, 319, 859, 298, 29, 75, 1, 0, 1 +387, 338, 752, 351, 49, 121, 1, 0, 1 +387, 350, 643, 322, 32, 98, 1, 0, 1 +387, 361, 704, 314, 132, 72, 1, 2, 1 +387, 369, 745, 277, 25, 39, 1, 0, 1 +387, 383, 539, 276, 29, 27, 1, 2, 1 +387, 414, 619, 322, 31, 106, 1, 0, 1 +387, 466, 522, 263, 15, 12, 1, 2, 1 +387, 470, 592, 271, 36, 25, 1, 2, 1 +388, 1, 457, 268, 25, 19, 1, 2, 1 +388, 82, 559, 286, 45, 35, 1, 2, 1 +388, 280, 712, 372, 50, 142, 1, 0, 1 +388, 319, 863, 299, 29, 73, 1, 0, 1 +388, 338, 749, 349, 50, 126, 1, 0, 1 +388, 350, 640, 322, 33, 98, 1, 0, 1 +388, 361, 703, 315, 135, 73, 1, 2, 1 +388, 369, 743, 278, 26, 39, 1, 0, 1 +388, 383, 538, 276, 28, 27, 1, 2, 1 +388, 414, 614, 321, 33, 111, 1, 0, 1 +388, 466, 521, 263, 15, 11, 1, 2, 1 +388, 470, 589, 271, 36, 25, 1, 2, 1 +389, 1, 455, 268, 25, 19, 1, 2, 1 +389, 82, 557, 287, 46, 35, 1, 2, 1 +389, 280, 710, 372, 50, 145, 1, 0, 1 +389, 319, 866, 299, 29, 76, 1, 0, 1 +389, 338, 748, 347, 50, 127, 1, 0, 1 +389, 350, 644, 325, 25, 76, 1, 0, 1 +389, 361, 699, 316, 139, 74, 1, 2, 1 +389, 369, 742, 278, 26, 40, 1, 0, 1 +389, 383, 536, 276, 28, 27, 1, 2, 1 +389, 414, 612, 322, 31, 106, 1, 0, 1 +389, 470, 588, 271, 35, 24, 1, 2, 1 +390, 1, 454, 268, 24, 18, 1, 2, 1 +390, 82, 554, 287, 46, 35, 1, 2, 1 +390, 280, 707, 372, 51, 147, 1, 0, 1 +390, 319, 868, 298, 29, 77, 1, 0, 1 +390, 338, 745, 347, 52, 128, 1, 0, 1 +390, 350, 642, 325, 25, 74, 1, 0, 1 +390, 361, 698, 317, 141, 74, 1, 2, 1 +390, 369, 740, 279, 25, 39, 1, 0, 1 +390, 383, 533, 276, 30, 27, 1, 2, 1 +390, 414, 610, 322, 32, 114, 1, 0, 1 +390, 466, 515, 262, 16, 13, 1, 2, 1 +391, 1, 452, 268, 23, 17, 1, 2, 1 +391, 82, 553, 287, 45, 36, 1, 2, 1 +391, 280, 705, 374, 52, 150, 1, 0, 1 +391, 319, 867, 298, 30, 81, 1, 0, 1 +391, 338, 743, 348, 51, 125, 1, 0, 1 +391, 361, 695, 319, 142, 74, 1, 2, 1 +391, 369, 739, 280, 25, 39, 1, 0, 1 +391, 383, 532, 276, 30, 27, 1, 2, 1 +391, 414, 605, 322, 31, 112, 1, 0, 1 +391, 466, 512, 263, 15, 11, 1, 2, 1 +392, 1, 449, 268, 23, 17, 1, 2, 1 +392, 82, 551, 288, 46, 35, 1, 2, 1 +392, 280, 700, 375, 54, 155, 1, 0, 1 +392, 319, 868, 300, 29, 77, 1, 0, 1 +392, 338, 737, 349, 52, 128, 1, 0, 1 +392, 361, 691, 319, 144, 73, 1, 2, 1 +392, 369, 736, 279, 25, 40, 1, 0, 1 +392, 383, 528, 276, 31, 27, 1, 2, 1 +392, 414, 601, 322, 32, 112, 1, 0, 1 +392, 466, 510, 263, 15, 11, 1, 2, 1 +393, 1, 447, 267, 23, 17, 1, 2, 1 +393, 82, 548, 287, 47, 37, 1, 2, 1 +393, 280, 698, 378, 53, 155, 1, 0, 1 +393, 319, 867, 301, 29, 79, 1, 0, 1 +393, 338, 730, 350, 51, 127, 1, 0, 1 +393, 361, 688, 320, 146, 74, 1, 2, 1 +393, 369, 732, 279, 26, 40, 1, 0, 1 +393, 383, 526, 276, 30, 27, 1, 2, 1 +393, 414, 598, 324, 29, 105, 1, 0, 1 +393, 466, 509, 263, 14, 11, 1, 2, 1 +394, 1, 444, 267, 24, 17, 1, 2, 1 +394, 82, 546, 288, 45, 36, 1, 2, 1 +394, 280, 693, 380, 52, 149, 1, 0, 1 +394, 319, 866, 302, 29, 80, 1, 0, 1 +394, 338, 723, 349, 51, 128, 1, 0, 1 +394, 361, 683, 321, 150, 74, 1, 2, 1 +394, 369, 730, 279, 26, 40, 1, 0, 1 +394, 383, 523, 276, 31, 27, 1, 2, 1 +394, 414, 593, 325, 29, 104, 1, 0, 1 +395, 1, 440, 266, 24, 18, 1, 2, 1 +395, 82, 542, 288, 47, 37, 1, 2, 1 +395, 280, 691, 380, 52, 150, 1, 0, 1 +395, 319, 864, 302, 31, 82, 1, 0, 1 +395, 338, 721, 351, 43, 108, 1, 0, 1 +395, 361, 681, 322, 149, 73, 1, 2, 1 +395, 369, 728, 280, 25, 40, 1, 0, 1 +395, 383, 519, 275, 33, 29, 1, 2, 1 +395, 414, 587, 325, 32, 111, 1, 0, 1 +396, 1, 437, 265, 24, 17, 1, 2, 1 +396, 82, 539, 288, 48, 37, 1, 2, 1 +396, 280, 687, 378, 54, 157, 1, 0, 1 +396, 319, 862, 302, 31, 81, 1, 0, 1 +396, 338, 714, 350, 47, 119, 1, 0, 1 +396, 361, 676, 321, 152, 75, 1, 2, 1 +396, 369, 723, 279, 26, 41, 1, 0, 1 +396, 383, 515, 275, 33, 29, 1, 2, 1 +396, 414, 583, 324, 33, 119, 1, 0, 1 +396, 492, 686, 275, 29, 48, 1, 0, 1 +397, 1, 435, 265, 23, 17, 1, 2, 1 +397, 82, 536, 288, 47, 38, 1, 2, 1 +397, 280, 682, 379, 55, 160, 1, 0, 1 +397, 319, 861, 302, 31, 82, 1, 0, 1 +397, 338, 709, 351, 45, 117, 1, 0, 1 +397, 361, 672, 322, 152, 75, 1, 2, 1 +397, 369, 720, 278, 26, 43, 1, 0, 1 +397, 383, 512, 276, 32, 27, 1, 2, 1 +397, 414, 577, 324, 33, 119, 1, 0, 1 +397, 492, 684, 275, 28, 48, 1, 0, 1 +398, 1, 432, 265, 23, 16, 1, 2, 1 +398, 82, 532, 287, 48, 38, 1, 2, 1 +398, 280, 677, 382, 55, 157, 1, 0, 1 +398, 319, 859, 302, 31, 82, 1, 0, 1 +398, 338, 703, 353, 41, 107, 1, 0, 1 +398, 361, 667, 322, 155, 75, 1, 2, 1 +398, 369, 717, 279, 26, 41, 1, 0, 1 +398, 383, 508, 275, 33, 28, 1, 2, 1 +398, 414, 572, 322, 35, 124, 1, 0, 1 +398, 492, 681, 277, 27, 46, 1, 0, 1 +399, 1, 428, 264, 23, 16, 1, 2, 1 +399, 82, 528, 287, 49, 39, 1, 2, 1 +399, 280, 672, 386, 55, 153, 1, 0, 1 +399, 319, 857, 304, 29, 79, 1, 0, 1 +399, 338, 701, 357, 34, 86, 1, 0, 1 +399, 361, 662, 322, 158, 76, 1, 2, 1 +399, 369, 714, 278, 25, 43, 1, 0, 1 +399, 383, 505, 274, 33, 29, 1, 2, 1 +399, 414, 567, 320, 37, 131, 1, 0, 1 +399, 492, 675, 277, 28, 47, 1, 0, 1 +400, 1, 423, 263, 25, 17, 1, 2, 1 +400, 82, 524, 287, 49, 40, 1, 2, 1 +400, 280, 668, 388, 55, 151, 1, 0, 1 +400, 319, 857, 306, 28, 78, 1, 0, 1 +400, 338, 697, 354, 33, 83, 1, 0, 1 +400, 361, 657, 322, 159, 76, 1, 2, 1 +400, 369, 708, 279, 25, 41, 1, 0, 1 +400, 383, 501, 274, 32, 28, 1, 2, 1 +400, 414, 562, 323, 38, 133, 1, 0, 1 +400, 492, 672, 278, 26, 46, 1, 0, 1 +401, 1, 419, 263, 24, 17, 1, 2, 1 +401, 82, 520, 288, 50, 41, 1, 2, 1 +401, 280, 662, 385, 57, 154, 1, 0, 1 +401, 319, 857, 307, 29, 79, 1, 0, 1 +401, 338, 691, 355, 31, 79, 1, 0, 1 +401, 361, 651, 322, 163, 78, 1, 2, 1 +401, 369, 705, 279, 25, 41, 1, 0, 1 +401, 383, 495, 274, 35, 30, 1, 2, 1 +401, 414, 553, 328, 38, 128, 1, 0, 1 +401, 492, 668, 278, 26, 45, 1, 0, 1 +402, 1, 415, 262, 25, 18, 1, 2, 1 +402, 82, 515, 288, 49, 41, 1, 2, 1 +402, 280, 658, 390, 55, 149, 1, 0, 1 +402, 319, 856, 307, 29, 79, 1, 0, 1 +402, 338, 679, 359, 30, 73, 1, 0, 1 +402, 361, 647, 322, 163, 78, 1, 2, 1 +402, 369, 700, 279, 26, 43, 1, 0, 1 +402, 383, 490, 274, 36, 31, 1, 2, 1 +402, 414, 545, 328, 38, 128, 1, 0, 1 +402, 492, 661, 275, 28, 48, 1, 0, 1 +403, 1, 411, 262, 25, 18, 1, 2, 1 +403, 82, 512, 288, 49, 42, 1, 2, 1 +403, 280, 651, 390, 57, 149, 1, 0, 1 +403, 319, 853, 306, 32, 85, 1, 0, 1 +403, 338, 673, 361, 29, 67, 1, 0, 1 +403, 361, 641, 322, 165, 79, 1, 2, 1 +403, 369, 695, 278, 26, 44, 1, 0, 1 +403, 383, 487, 275, 35, 30, 1, 2, 1 +403, 414, 541, 329, 39, 133, 1, 0, 1 +403, 492, 658, 276, 26, 47, 1, 0, 1 +404, 1, 406, 262, 25, 18, 1, 2, 1 +404, 82, 510, 289, 49, 41, 1, 2, 1 +404, 280, 645, 392, 57, 147, 1, 0, 1 +404, 319, 853, 306, 32, 86, 1, 0, 1 +404, 338, 668, 357, 30, 73, 1, 0, 1 +404, 361, 634, 322, 168, 80, 1, 2, 1 +404, 369, 691, 279, 26, 43, 1, 0, 1 +404, 383, 482, 275, 36, 31, 1, 2, 1 +404, 414, 531, 329, 41, 138, 1, 0, 1 +404, 492, 653, 276, 27, 47, 1, 0, 1 +405, 1, 402, 262, 24, 18, 1, 2, 1 +405, 82, 506, 288, 50, 43, 1, 2, 1 +405, 280, 637, 396, 57, 143, 1, 0, 1 +405, 319, 848, 304, 34, 90, 1, 0, 1 +405, 338, 659, 358, 30, 71, 1, 0, 1 +405, 361, 628, 322, 170, 80, 1, 2, 1 +405, 369, 686, 279, 26, 43, 1, 0, 1 +405, 383, 477, 274, 36, 32, 1, 2, 1 +405, 414, 523, 330, 41, 139, 1, 0, 1 +405, 492, 648, 277, 27, 48, 1, 0, 1 +406, 1, 397, 262, 24, 17, 1, 2, 1 +406, 82, 502, 289, 51, 42, 1, 2, 1 +406, 280, 623, 395, 60, 143, 1, 0, 1 +406, 319, 847, 304, 35, 91, 1, 0, 1 +406, 338, 649, 357, 30, 70, 1, 0, 1 +406, 361, 623, 322, 170, 81, 1, 2, 1 +406, 369, 681, 278, 26, 44, 1, 0, 1 +406, 383, 472, 274, 37, 32, 1, 2, 1 +406, 414, 517, 333, 43, 138, 1, 0, 1 +406, 492, 643, 275, 27, 50, 1, 0, 1 +407, 1, 392, 262, 24, 17, 1, 2, 1 +407, 82, 497, 289, 53, 43, 1, 2, 1 +407, 280, 614, 395, 62, 142, 1, 0, 1 +407, 319, 838, 303, 34, 91, 1, 0, 1 +407, 338, 643, 358, 28, 67, 1, 0, 1 +407, 361, 617, 322, 172, 82, 1, 2, 1 +407, 369, 674, 277, 27, 46, 1, 0, 1 +407, 383, 466, 274, 38, 34, 1, 2, 1 +407, 414, 510, 334, 43, 139, 1, 0, 1 +407, 492, 637, 275, 27, 50, 1, 0, 1 +408, 1, 387, 260, 25, 19, 1, 2, 1 +408, 82, 492, 289, 53, 44, 1, 2, 1 +408, 280, 600, 397, 66, 141, 1, 0, 1 +408, 319, 833, 302, 34, 92, 1, 0, 1 +408, 338, 630, 361, 29, 69, 1, 0, 1 +408, 361, 611, 322, 172, 82, 1, 2, 1 +408, 369, 670, 277, 27, 47, 1, 0, 1 +408, 383, 461, 275, 37, 33, 1, 2, 1 +408, 414, 501, 332, 46, 145, 1, 0, 1 +408, 492, 632, 276, 26, 49, 1, 0, 1 +409, 1, 383, 261, 24, 17, 1, 2, 1 +409, 82, 487, 291, 53, 43, 1, 2, 1 +409, 280, 600, 399, 65, 140, 1, 0, 1 +409, 319, 828, 301, 35, 95, 1, 0, 1 +409, 338, 623, 362, 28, 67, 1, 0, 1 +409, 361, 605, 322, 172, 82, 1, 2, 1 +409, 369, 663, 278, 26, 45, 1, 0, 1 +409, 383, 456, 274, 38, 33, 1, 2, 1 +409, 414, 489, 332, 48, 147, 1, 0, 1 +409, 492, 625, 275, 27, 51, 1, 0, 1 +410, 1, 378, 260, 24, 18, 1, 2, 1 +410, 82, 480, 291, 54, 43, 1, 2, 1 +410, 280, 592, 402, 65, 137, 1, 0, 1 +410, 319, 824, 302, 35, 97, 1, 0, 1 +410, 361, 598, 322, 174, 83, 1, 2, 1 +410, 369, 658, 277, 27, 47, 1, 0, 1 +410, 383, 450, 275, 37, 32, 1, 2, 1 +410, 414, 483, 334, 48, 148, 1, 0, 1 +410, 492, 620, 274, 26, 51, 1, 0, 1 +411, 1, 373, 261, 23, 17, 1, 2, 1 +411, 82, 473, 290, 56, 45, 1, 2, 1 +411, 280, 585, 406, 63, 133, 1, 0, 1 +411, 319, 817, 301, 34, 95, 1, 0, 1 +411, 338, 599, 360, 26, 61, 1, 0, 1 +411, 361, 592, 322, 174, 83, 1, 2, 1 +411, 369, 651, 277, 26, 48, 1, 0, 1 +411, 383, 445, 275, 37, 32, 1, 2, 1 +411, 414, 471, 334, 49, 148, 1, 0, 1 +411, 492, 613, 275, 27, 52, 1, 0, 1 +412, 1, 367, 260, 23, 18, 1, 2, 1 +412, 82, 466, 292, 56, 44, 1, 2, 1 +412, 280, 578, 408, 62, 131, 1, 0, 1 +412, 319, 812, 300, 34, 95, 1, 0, 1 +412, 338, 590, 360, 26, 59, 1, 0, 1 +412, 361, 583, 323, 176, 84, 1, 2, 1 +412, 369, 646, 277, 26, 48, 1, 0, 1 +412, 383, 439, 275, 37, 32, 1, 2, 1 +412, 414, 462, 335, 50, 150, 1, 0, 1 +412, 492, 606, 272, 27, 56, 1, 0, 1 +413, 1, 361, 259, 23, 17, 1, 2, 1 +413, 82, 459, 292, 56, 45, 1, 2, 1 +413, 280, 569, 411, 61, 128, 1, 0, 1 +413, 319, 808, 301, 33, 95, 1, 0, 1 +413, 361, 575, 323, 179, 85, 1, 2, 1 +413, 369, 638, 277, 26, 47, 1, 0, 1 +413, 383, 432, 274, 38, 33, 1, 2, 1 +413, 414, 453, 337, 51, 148, 1, 0, 1 +413, 492, 599, 275, 26, 51, 1, 0, 1 +414, 1, 355, 259, 24, 17, 1, 2, 1 +414, 82, 454, 293, 56, 44, 1, 2, 1 +414, 280, 559, 411, 61, 128, 1, 0, 1 +414, 319, 802, 299, 32, 96, 1, 0, 1 +414, 338, 566, 360, 30, 68, 1, 0, 1 +414, 361, 569, 324, 177, 85, 1, 2, 1 +414, 369, 632, 277, 25, 48, 1, 0, 1 +414, 383, 425, 275, 37, 31, 1, 2, 1 +414, 414, 437, 336, 52, 150, 1, 0, 1 +414, 492, 592, 273, 25, 52, 1, 0, 1 +414, 542, 534, 386, 41, 95, 1, 0, 1 +414, 544, 843, 304, 20, 70, 1, 0, 1 +415, 1, 350, 259, 21, 17, 1, 2, 1 +415, 82, 445, 294, 55, 44, 1, 2, 1 +415, 280, 547, 412, 61, 126, 1, 0, 1 +415, 319, 797, 298, 31, 93, 1, 0, 1 +415, 338, 554, 360, 32, 73, 1, 0, 1 +415, 361, 560, 324, 179, 85, 1, 2, 1 +415, 369, 624, 276, 26, 49, 1, 0, 1 +415, 383, 418, 275, 37, 31, 1, 2, 1 +415, 414, 423, 334, 53, 153, 1, 0, 1 +415, 492, 583, 272, 26, 54, 1, 0, 1 +415, 542, 524, 387, 38, 87, 1, 0, 1 +415, 544, 838, 304, 17, 57, 1, 0, 1 +416, 1, 342, 258, 23, 17, 1, 2, 1 +416, 82, 437, 295, 56, 44, 1, 2, 1 +416, 280, 536, 414, 60, 124, 1, 0, 1 +416, 319, 793, 296, 29, 89, 1, 0, 1 +416, 338, 543, 360, 32, 73, 1, 0, 1 +416, 361, 552, 323, 179, 86, 1, 2, 1 +416, 369, 616, 276, 25, 49, 1, 0, 1 +416, 383, 409, 274, 38, 33, 1, 2, 1 +416, 414, 409, 335, 53, 154, 1, 0, 1 +416, 492, 575, 269, 27, 56, 1, 0, 1 +416, 542, 509, 390, 47, 106, 1, 0, 1 +416, 544, 833, 303, 14, 50, 1, 0, 1 +417, 1, 336, 258, 22, 17, 1, 2, 1 +417, 82, 432, 295, 56, 44, 1, 2, 1 +417, 280, 525, 414, 60, 124, 1, 0, 1 +417, 319, 787, 295, 27, 84, 1, 0, 1 +417, 338, 530, 365, 32, 70, 1, 0, 1 +417, 361, 544, 322, 181, 88, 1, 2, 1 +417, 369, 611, 276, 24, 48, 1, 0, 1 +417, 383, 402, 274, 36, 33, 1, 2, 1 +417, 414, 393, 336, 55, 155, 1, 0, 1 +417, 492, 568, 269, 27, 56, 1, 0, 1 +417, 542, 495, 392, 48, 113, 1, 0, 1 +417, 544, 828, 303, 13, 43, 1, 0, 1 +418, 1, 329, 257, 23, 18, 1, 2, 1 +418, 280, 513, 416, 60, 122, 1, 0, 1 +418, 319, 782, 294, 27, 84, 1, 0, 1 +418, 338, 517, 367, 30, 64, 1, 0, 1 +418, 361, 536, 323, 180, 87, 1, 2, 1 +418, 369, 603, 276, 24, 48, 1, 0, 1 +418, 383, 394, 274, 37, 33, 1, 2, 1 +418, 414, 377, 337, 56, 155, 1, 0, 1 +418, 492, 560, 268, 27, 56, 1, 0, 1 +418, 542, 478, 394, 58, 135, 1, 0, 1 +418, 558, 900, 291, 36, 99, 1, 0, 1 +419, 1, 321, 256, 23, 17, 1, 2, 1 +419, 82, 423, 296, 55, 43, 1, 2, 1 +419, 280, 501, 417, 59, 121, 1, 0, 1 +419, 338, 502, 371, 32, 66, 1, 0, 1 +419, 361, 526, 323, 181, 88, 1, 2, 1 +419, 369, 595, 275, 25, 49, 1, 0, 1 +419, 383, 386, 274, 37, 34, 1, 2, 1 +419, 414, 362, 337, 58, 157, 1, 0, 1 +419, 492, 551, 267, 27, 57, 1, 0, 1 +419, 542, 465, 395, 57, 135, 1, 0, 1 +419, 558, 891, 289, 38, 101, 1, 0, 1 +419, 559, 807, 305, 32, 85, 1, 0, 1 +420, 1, 315, 255, 22, 17, 1, 2, 1 +420, 82, 416, 296, 56, 43, 1, 2, 1 +420, 280, 487, 416, 60, 122, 1, 0, 1 +420, 338, 491, 372, 28, 57, 1, 0, 1 +420, 361, 519, 323, 181, 88, 1, 2, 1 +420, 369, 588, 275, 23, 48, 1, 0, 1 +420, 383, 378, 274, 35, 33, 1, 2, 1 +420, 414, 348, 338, 59, 159, 1, 0, 1 +420, 492, 544, 265, 28, 59, 1, 0, 1 +420, 542, 451, 400, 58, 139, 1, 0, 1 +420, 558, 882, 289, 38, 100, 1, 0, 1 +420, 559, 801, 304, 33, 87, 1, 0, 1 +421, 1, 308, 255, 22, 17, 1, 2, 1 +421, 82, 408, 296, 57, 43, 1, 2, 1 +421, 280, 471, 417, 60, 122, 1, 0, 1 +421, 338, 477, 374, 29, 56, 1, 0, 1 +421, 361, 510, 324, 180, 87, 1, 2, 1 +421, 369, 579, 275, 24, 49, 1, 0, 1 +421, 383, 368, 274, 35, 34, 1, 2, 1 +421, 414, 330, 339, 61, 159, 1, 0, 1 +421, 492, 535, 265, 28, 60, 1, 0, 1 +421, 542, 441, 399, 48, 111, 1, 0, 1 +421, 558, 875, 290, 37, 100, 1, 0, 1 +421, 559, 792, 304, 33, 87, 1, 0, 1 +422, 1, 302, 254, 22, 17, 1, 2, 1 +422, 82, 397, 293, 61, 47, 1, 2, 1 +422, 280, 457, 421, 60, 118, 1, 0, 1 +422, 338, 460, 375, 32, 62, 1, 0, 1 +422, 361, 499, 322, 182, 89, 1, 2, 1 +422, 369, 571, 274, 24, 49, 1, 0, 1 +422, 383, 358, 273, 33, 34, 1, 2, 1 +422, 414, 316, 338, 62, 161, 1, 0, 1 +422, 492, 528, 266, 27, 57, 1, 0, 1 +422, 542, 423, 401, 56, 131, 1, 0, 1 +422, 558, 865, 289, 37, 100, 1, 0, 1 +422, 559, 785, 303, 33, 87, 1, 0, 1 +423, 1, 293, 253, 21, 17, 1, 2, 1 +423, 82, 387, 293, 63, 47, 1, 2, 1 +423, 280, 440, 423, 60, 116, 1, 0, 1 +423, 338, 444, 378, 31, 58, 1, 0, 1 +423, 361, 489, 323, 182, 89, 1, 2, 1 +423, 369, 562, 275, 23, 47, 1, 0, 1 +423, 383, 351, 273, 33, 34, 1, 2, 1 +423, 414, 303, 338, 64, 164, 1, 0, 1 +423, 492, 518, 264, 28, 59, 1, 0, 1 +423, 542, 404, 400, 59, 138, 1, 0, 1 +423, 558, 855, 288, 37, 101, 1, 0, 1 +423, 559, 776, 303, 33, 87, 1, 0, 1 +424, 1, 286, 253, 22, 17, 1, 2, 1 +424, 82, 377, 291, 66, 50, 1, 2, 1 +424, 280, 426, 426, 59, 113, 1, 0, 1 +424, 338, 426, 378, 36, 67, 1, 0, 1 +424, 361, 476, 322, 185, 91, 1, 2, 1 +424, 369, 553, 274, 23, 49, 1, 0, 1 +424, 414, 287, 340, 66, 163, 1, 0, 1 +424, 492, 508, 264, 28, 60, 1, 0, 1 +424, 542, 384, 399, 60, 140, 1, 0, 1 +424, 558, 846, 289, 37, 100, 1, 0, 1 +424, 559, 767, 302, 33, 88, 1, 0, 1 +425, 82, 365, 290, 68, 51, 1, 2, 1 +425, 280, 410, 425, 59, 114, 1, 0, 1 +425, 338, 407, 380, 36, 65, 1, 0, 1 +425, 361, 464, 322, 186, 91, 1, 2, 1 +425, 369, 542, 273, 24, 50, 1, 0, 1 +425, 414, 270, 341, 66, 165, 1, 0, 1 +425, 492, 498, 264, 28, 59, 1, 0, 1 +425, 542, 364, 402, 60, 137, 1, 0, 1 +425, 558, 835, 288, 37, 100, 1, 0, 1 +425, 559, 759, 301, 33, 89, 1, 0, 1 +425, 573, 134, 247, 43, 41, 1, 2, 1 +425, 575, 133, 246, 45, 43, 1, 2, 1 +426, 82, 358, 290, 66, 51, 1, 2, 1 +426, 280, 395, 430, 58, 109, 1, 0, 1 +426, 338, 389, 383, 36, 64, 1, 0, 1 +426, 361, 454, 322, 186, 92, 1, 2, 1 +426, 369, 531, 273, 24, 49, 1, 0, 1 +426, 414, 253, 343, 68, 167, 1, 0, 1 +426, 492, 489, 265, 27, 58, 1, 0, 1 +426, 542, 351, 406, 58, 133, 1, 0, 1 +426, 558, 826, 288, 37, 102, 1, 0, 1 +426, 559, 752, 301, 33, 89, 1, 0, 1 +426, 573, 129, 247, 43, 41, 1, 2, 1 +426, 575, 115, 236, 56, 53, 1, 2, 1 +427, 82, 347, 290, 68, 52, 1, 2, 1 +427, 280, 376, 434, 57, 105, 1, 0, 1 +427, 319, 721, 308, 32, 99, 1, 0, 1 +427, 338, 369, 384, 37, 66, 1, 0, 1 +427, 361, 444, 323, 187, 93, 1, 2, 1 +427, 369, 521, 273, 24, 51, 1, 0, 1 +427, 414, 235, 346, 70, 169, 1, 0, 1 +427, 492, 479, 265, 27, 59, 1, 0, 1 +427, 542, 331, 409, 57, 130, 1, 0, 1 +427, 558, 815, 287, 38, 105, 1, 0, 1 +427, 559, 744, 301, 32, 86, 1, 0, 1 +427, 573, 109, 239, 51, 49, 1, 2, 1 +427, 575, 109, 241, 50, 48, 1, 2, 1 +428, 82, 336, 292, 69, 52, 1, 2, 1 +428, 280, 362, 441, 55, 98, 1, 0, 1 +428, 319, 710, 310, 35, 104, 1, 0, 1 +428, 338, 346, 386, 41, 73, 1, 0, 1 +428, 361, 433, 325, 186, 92, 1, 2, 1 +428, 369, 512, 274, 24, 51, 1, 0, 1 +428, 414, 215, 349, 72, 171, 1, 0, 1 +428, 492, 468, 265, 29, 60, 1, 0, 1 +428, 542, 316, 417, 54, 122, 1, 0, 1 +428, 558, 805, 287, 38, 104, 1, 0, 1 +428, 559, 735, 303, 32, 85, 1, 0, 1 +428, 573, 99, 240, 52, 49, 1, 2, 1 +428, 575, 99, 243, 50, 47, 1, 2, 1 +429, 82, 325, 291, 70, 54, 1, 2, 1 +429, 280, 344, 446, 53, 93, 1, 0, 1 +429, 319, 698, 308, 36, 108, 1, 0, 1 +429, 338, 326, 389, 41, 73, 1, 0, 1 +429, 361, 421, 326, 186, 93, 1, 2, 1 +429, 369, 502, 275, 24, 52, 1, 0, 1 +429, 414, 194, 350, 74, 174, 1, 0, 1 +429, 492, 458, 267, 29, 60, 1, 0, 1 +429, 542, 294, 422, 48, 108, 1, 0, 1 +429, 558, 794, 288, 38, 105, 1, 0, 1 +429, 559, 726, 304, 33, 87, 1, 0, 1 +429, 573, 87, 241, 52, 49, 1, 2, 1 +429, 575, 90, 246, 47, 44, 1, 2, 1 +429, 584, 353, 260, 34, 30, 1, 2, 1 +430, 82, 313, 293, 73, 55, 1, 2, 1 +430, 280, 326, 450, 51, 88, 1, 0, 1 +430, 319, 686, 311, 37, 108, 1, 0, 1 +430, 338, 310, 391, 41, 74, 1, 0, 1 +430, 361, 408, 327, 188, 95, 1, 2, 1 +430, 369, 495, 276, 24, 53, 1, 0, 1 +430, 414, 174, 352, 74, 174, 1, 0, 1 +430, 492, 447, 267, 29, 61, 1, 0, 1 +430, 542, 270, 428, 48, 105, 1, 0, 1 +430, 558, 782, 290, 39, 105, 1, 0, 1 +430, 559, 718, 307, 32, 82, 1, 0, 1 +430, 573, 77, 244, 52, 49, 1, 2, 1 +430, 575, 74, 241, 55, 52, 1, 2, 1 +430, 584, 343, 262, 34, 30, 1, 2, 1 +431, 82, 301, 293, 75, 57, 1, 2, 1 +431, 280, 306, 456, 49, 82, 1, 0, 1 +431, 319, 675, 307, 39, 115, 1, 0, 1 +431, 338, 284, 397, 44, 79, 1, 0, 1 +431, 361, 396, 330, 189, 95, 1, 2, 1 +431, 369, 486, 279, 24, 54, 1, 0, 1 +431, 414, 151, 356, 74, 174, 1, 0, 1 +431, 492, 436, 269, 29, 61, 1, 0, 1 +431, 542, 252, 434, 47, 100, 1, 0, 1 +431, 558, 772, 292, 38, 105, 1, 0, 1 +431, 559, 709, 309, 34, 87, 1, 0, 1 +431, 573, 68, 244, 52, 49, 1, 2, 1 +431, 575, 64, 240, 56, 54, 1, 2, 1 +431, 584, 332, 261, 35, 32, 1, 2, 1 +431, 590, 406, 268, 28, 69, 1, 0, 1 +432, 82, 289, 294, 77, 59, 1, 2, 1 +432, 280, 285, 458, 48, 79, 1, 0, 1 +432, 319, 665, 308, 39, 117, 1, 0, 1 +432, 338, 264, 401, 42, 74, 1, 0, 1 +432, 361, 384, 331, 189, 96, 1, 2, 1 +432, 369, 471, 279, 23, 54, 1, 0, 1 +432, 414, 130, 358, 74, 174, 1, 0, 1 +432, 492, 425, 270, 28, 61, 1, 0, 1 +432, 542, 227, 436, 47, 99, 1, 0, 1 +432, 558, 761, 294, 39, 104, 1, 0, 1 +432, 559, 700, 310, 32, 81, 1, 0, 1 +432, 584, 322, 261, 35, 31, 1, 2, 1 +432, 590, 394, 270, 28, 68, 1, 0, 1 +433, 82, 278, 295, 78, 59, 1, 2, 1 +433, 280, 267, 466, 45, 71, 1, 0, 1 +433, 319, 657, 311, 38, 117, 1, 0, 1 +433, 338, 240, 406, 43, 75, 1, 0, 1 +433, 361, 372, 333, 189, 95, 1, 2, 1 +433, 369, 461, 280, 24, 55, 1, 0, 1 +433, 383, 260, 280, 34, 32, 1, 2, 1 +433, 414, 106, 361, 72, 168, 1, 0, 1 +433, 492, 413, 272, 28, 61, 1, 0, 1 +433, 542, 201, 438, 52, 100, 1, 0, 1 +433, 558, 750, 294, 40, 105, 1, 0, 1 +433, 559, 690, 311, 33, 84, 1, 0, 1 +433, 584, 310, 262, 38, 33, 1, 2, 1 +433, 590, 383, 270, 28, 67, 1, 0, 1 +434, 82, 266, 296, 79, 60, 1, 2, 1 +434, 280, 246, 472, 44, 65, 1, 0, 1 +434, 319, 646, 308, 40, 122, 1, 0, 1 +434, 338, 216, 408, 47, 82, 1, 0, 1 +434, 361, 359, 334, 189, 95, 1, 2, 1 +434, 369, 447, 280, 24, 55, 1, 0, 1 +434, 383, 247, 281, 37, 35, 1, 2, 1 +434, 414, 80, 363, 64, 152, 1, 0, 1 +434, 492, 401, 272, 29, 63, 1, 0, 1 +434, 542, 173, 439, 54, 99, 1, 0, 1 +434, 558, 739, 295, 40, 105, 1, 0, 1 +434, 559, 682, 312, 36, 88, 1, 0, 1 +434, 584, 300, 262, 37, 33, 1, 2, 1 +434, 590, 371, 272, 27, 65, 1, 0, 1 +434, 597, 494, 280, 21, 58, 1, 0, 1 +435, 82, 254, 296, 81, 62, 1, 2, 1 +435, 280, 223, 478, 41, 60, 1, 0, 1 +435, 319, 636, 318, 38, 115, 1, 0, 1 +435, 338, 195, 412, 47, 83, 1, 0, 1 +435, 361, 346, 334, 191, 98, 1, 2, 1 +435, 369, 439, 281, 24, 56, 1, 0, 1 +435, 383, 234, 282, 40, 37, 1, 2, 1 +435, 414, 52, 367, 66, 161, 1, 0, 1 +435, 492, 390, 273, 28, 64, 1, 0, 1 +435, 542, 151, 441, 57, 98, 1, 0, 1 +435, 558, 730, 294, 41, 109, 1, 0, 1 +435, 559, 673, 314, 37, 90, 1, 0, 1 +435, 584, 289, 262, 38, 33, 1, 2, 1 +435, 590, 361, 273, 27, 66, 1, 0, 1 +435, 597, 484, 279, 21, 59, 1, 0, 1 +435, 598, 463, 282, 25, 62, 1, 0, 1 +436, 82, 243, 297, 80, 61, 1, 2, 1 +436, 280, 197, 483, 40, 56, 1, 0, 1 +436, 319, 625, 317, 40, 118, 1, 0, 1 +436, 338, 173, 410, 47, 85, 1, 0, 1 +436, 361, 332, 336, 192, 97, 1, 2, 1 +436, 369, 428, 282, 24, 56, 1, 0, 1 +436, 383, 223, 282, 41, 37, 1, 2, 1 +436, 414, 27, 369, 65, 164, 1, 0, 1 +436, 492, 379, 273, 28, 64, 1, 0, 1 +436, 542, 127, 445, 58, 94, 1, 0, 1 +436, 558, 718, 296, 40, 108, 1, 0, 1 +436, 559, 663, 313, 39, 93, 1, 0, 1 +436, 584, 278, 261, 39, 33, 1, 2, 1 +436, 590, 349, 273, 27, 65, 1, 0, 1 +436, 597, 472, 278, 23, 63, 1, 0, 1 +436, 598, 451, 282, 26, 63, 1, 0, 1 +437, 82, 231, 298, 83, 63, 1, 2, 1 +437, 280, 169, 490, 36, 49, 1, 0, 1 +437, 319, 612, 321, 40, 117, 1, 0, 1 +437, 338, 149, 417, 48, 85, 1, 0, 1 +437, 361, 319, 336, 194, 99, 1, 2, 1 +437, 369, 418, 283, 24, 56, 1, 0, 1 +437, 383, 211, 283, 42, 38, 1, 2, 1 +437, 414, 3, 370, 65, 165, 1, 0, 1 +437, 492, 369, 273, 28, 64, 1, 0, 1 +437, 542, 102, 448, 59, 91, 1, 0, 1 +437, 558, 705, 297, 41, 107, 1, 0, 1 +437, 559, 653, 315, 38, 91, 1, 0, 1 +437, 573, 0, 236, 57, 61, 1, 2, 1 +437, 584, 269, 263, 37, 32, 1, 2, 1 +437, 590, 338, 274, 27, 66, 1, 0, 1 +437, 597, 461, 278, 24, 66, 1, 0, 1 +437, 598, 440, 283, 26, 64, 1, 0, 1 +438, 82, 219, 299, 84, 64, 1, 2, 1 +438, 280, 142, 498, 32, 41, 1, 0, 1 +438, 319, 602, 318, 41, 123, 1, 0, 1 +438, 338, 122, 419, 52, 92, 1, 0, 1 +438, 361, 305, 337, 195, 99, 1, 2, 1 +438, 369, 407, 283, 24, 57, 1, 0, 1 +438, 383, 199, 283, 43, 38, 1, 2, 1 +438, 414, 0, 372, 48, 166, 1, 0, 1 +438, 492, 358, 272, 28, 66, 1, 0, 1 +438, 542, 76, 455, 57, 84, 1, 0, 1 +438, 558, 692, 298, 40, 106, 1, 0, 1 +438, 559, 642, 315, 39, 92, 1, 0, 1 +438, 573, 0, 234, 48, 63, 1, 2, 1 +438, 584, 258, 261, 39, 34, 1, 2, 1 +438, 590, 326, 271, 28, 69, 1, 0, 1 +438, 597, 451, 278, 23, 64, 1, 0, 1 +438, 598, 428, 281, 27, 68, 1, 0, 1 +439, 82, 207, 300, 84, 64, 1, 2, 1 +439, 280, 116, 502, 31, 37, 1, 0, 1 +439, 319, 591, 319, 42, 124, 1, 0, 1 +439, 338, 94, 426, 51, 92, 1, 0, 1 +439, 361, 292, 337, 197, 101, 1, 2, 1 +439, 369, 396, 283, 24, 60, 1, 0, 1 +439, 383, 187, 283, 44, 39, 1, 2, 1 +439, 492, 346, 271, 29, 67, 1, 0, 1 +439, 542, 45, 458, 57, 81, 1, 0, 1 +439, 558, 680, 300, 40, 107, 1, 0, 1 +439, 559, 632, 315, 38, 90, 1, 0, 1 +439, 573, 0, 237, 38, 59, 1, 2, 1 +439, 584, 244, 258, 43, 37, 1, 2, 1 +439, 590, 313, 271, 29, 69, 1, 0, 1 +439, 597, 440, 278, 23, 65, 1, 0, 1 +439, 598, 416, 280, 28, 70, 1, 0, 1 +440, 82, 195, 300, 84, 65, 1, 2, 1 +440, 280, 90, 508, 28, 31, 1, 0, 1 +440, 319, 578, 321, 43, 126, 1, 0, 1 +440, 338, 63, 430, 51, 95, 1, 0, 1 +440, 361, 278, 339, 197, 102, 1, 2, 1 +440, 369, 386, 284, 25, 62, 1, 0, 1 +440, 383, 174, 283, 47, 41, 1, 2, 1 +440, 492, 332, 270, 29, 69, 1, 0, 1 +440, 542, 16, 465, 55, 74, 1, 0, 1 +440, 558, 667, 301, 39, 106, 1, 0, 1 +440, 559, 622, 316, 38, 92, 1, 0, 1 +440, 573, 0, 237, 29, 59, 1, 2, 1 +440, 584, 232, 256, 46, 40, 1, 2, 1 +440, 590, 301, 273, 27, 67, 1, 0, 1 +440, 597, 429, 278, 24, 66, 1, 0, 1 +440, 598, 405, 281, 28, 70, 1, 0, 1 +441, 1, 171, 253, 23, 17, 1, 2, 1 +441, 82, 182, 301, 84, 65, 1, 2, 1 +441, 280, 67, 513, 23, 26, 1, 0, 1 +441, 319, 567, 327, 42, 121, 1, 0, 1 +441, 338, 39, 434, 54, 100, 1, 0, 1 +441, 361, 263, 339, 199, 103, 1, 2, 1 +441, 369, 376, 285, 24, 61, 1, 0, 1 +441, 383, 161, 284, 47, 40, 1, 2, 1 +441, 492, 320, 269, 31, 71, 1, 0, 1 +441, 542, 0, 467, 50, 71, 1, 0, 1 +441, 558, 655, 301, 40, 108, 1, 0, 1 +441, 559, 610, 318, 40, 93, 1, 0, 1 +441, 584, 222, 258, 43, 38, 1, 2, 1 +441, 590, 288, 273, 27, 68, 1, 0, 1 +441, 597, 418, 278, 25, 69, 1, 0, 1 +441, 598, 395, 280, 28, 71, 1, 0, 1 +442, 1, 163, 254, 22, 17, 1, 2, 1 +442, 82, 169, 302, 84, 65, 1, 2, 1 +442, 319, 555, 331, 40, 118, 1, 0, 1 +442, 338, 9, 439, 55, 99, 1, 0, 1 +442, 361, 248, 340, 202, 105, 1, 2, 1 +442, 369, 364, 285, 25, 62, 1, 0, 1 +442, 383, 148, 283, 50, 43, 1, 2, 1 +442, 492, 308, 271, 29, 69, 1, 0, 1 +442, 542, 0, 470, 25, 68, 1, 0, 1 +442, 558, 641, 302, 39, 106, 1, 0, 1 +442, 559, 599, 318, 40, 95, 1, 0, 1 +442, 584, 211, 257, 42, 37, 1, 2, 1 +442, 590, 276, 273, 27, 68, 1, 0, 1 +442, 597, 409, 279, 24, 66, 1, 0, 1 +442, 598, 384, 282, 28, 70, 1, 0, 1 +443, 1, 152, 255, 23, 17, 1, 2, 1 +443, 82, 157, 304, 83, 63, 1, 2, 1 +443, 319, 544, 333, 41, 117, 1, 0, 1 +443, 338, 0, 442, 42, 97, 1, 0, 1 +443, 361, 232, 340, 204, 106, 1, 2, 1 +443, 369, 353, 286, 24, 64, 1, 0, 1 +443, 383, 136, 284, 49, 42, 1, 2, 1 +443, 492, 296, 269, 31, 72, 1, 0, 1 +443, 558, 628, 302, 40, 108, 1, 0, 1 +443, 559, 589, 318, 41, 97, 1, 0, 1 +443, 584, 200, 259, 41, 36, 1, 2, 1 +443, 590, 264, 279, 25, 62, 1, 0, 1 +443, 597, 398, 280, 24, 65, 1, 0, 1 +443, 598, 373, 282, 27, 71, 1, 0, 1 +444, 1, 141, 255, 23, 17, 1, 2, 1 +444, 82, 144, 305, 83, 63, 1, 2, 1 +444, 319, 531, 336, 42, 115, 1, 0, 1 +444, 361, 216, 339, 207, 109, 1, 2, 1 +444, 369, 341, 286, 25, 65, 1, 0, 1 +444, 383, 122, 284, 51, 44, 1, 2, 1 +444, 492, 283, 270, 30, 71, 1, 0, 1 +444, 558, 615, 302, 40, 109, 1, 0, 1 +444, 559, 578, 317, 41, 100, 1, 0, 1 +444, 584, 191, 261, 39, 34, 1, 2, 1 +444, 590, 251, 283, 23, 59, 1, 0, 1 +444, 597, 387, 281, 24, 64, 1, 0, 1 +444, 598, 360, 281, 28, 74, 1, 0, 1 +445, 1, 129, 255, 24, 17, 1, 2, 1 +445, 82, 130, 305, 85, 64, 1, 2, 1 +445, 319, 516, 336, 43, 119, 1, 0, 1 +445, 361, 201, 340, 208, 110, 1, 2, 1 +445, 369, 329, 285, 26, 68, 1, 0, 1 +445, 383, 110, 286, 50, 42, 1, 2, 1 +445, 492, 271, 263, 32, 78, 1, 0, 1 +445, 558, 601, 302, 42, 111, 1, 0, 1 +445, 559, 567, 317, 41, 101, 1, 0, 1 +445, 584, 178, 260, 40, 35, 1, 2, 1 +445, 590, 238, 285, 23, 58, 1, 0, 1 +445, 597, 375, 280, 23, 65, 1, 0, 1 +445, 598, 348, 280, 28, 75, 1, 0, 1 +446, 1, 117, 254, 25, 19, 1, 2, 1 +446, 82, 115, 307, 86, 66, 1, 2, 1 +446, 319, 502, 335, 45, 125, 1, 0, 1 +446, 361, 183, 343, 204, 109, 1, 2, 1 +446, 369, 318, 284, 25, 69, 1, 0, 1 +446, 383, 95, 286, 52, 43, 1, 2, 1 +446, 492, 259, 260, 33, 82, 1, 0, 1 +446, 558, 589, 302, 42, 112, 1, 0, 1 +446, 559, 556, 317, 42, 102, 1, 0, 1 +446, 584, 166, 258, 42, 38, 1, 2, 1 +446, 590, 226, 286, 23, 58, 1, 0, 1 +446, 597, 364, 281, 24, 65, 1, 0, 1 +446, 598, 336, 281, 27, 74, 1, 0, 1 +447, 1, 105, 254, 25, 19, 1, 2, 1 +447, 82, 101, 308, 87, 66, 1, 2, 1 +447, 319, 488, 334, 46, 130, 1, 0, 1 +447, 361, 165, 345, 201, 108, 1, 2, 1 +447, 369, 305, 286, 25, 69, 1, 0, 1 +447, 383, 81, 286, 53, 43, 1, 2, 1 +447, 492, 247, 258, 35, 85, 1, 0, 1 +447, 558, 573, 302, 41, 113, 1, 0, 1 +447, 559, 543, 318, 42, 103, 1, 0, 1 +447, 584, 155, 261, 40, 34, 1, 2, 1 +447, 590, 213, 287, 23, 57, 1, 0, 1 +447, 598, 325, 284, 25, 71, 1, 0, 1 +448, 1, 93, 254, 25, 19, 1, 2, 1 +448, 82, 84, 308, 89, 67, 1, 2, 1 +448, 319, 472, 334, 48, 132, 1, 0, 1 +448, 361, 152, 345, 202, 109, 1, 2, 1 +448, 369, 293, 285, 25, 70, 1, 0, 1 +448, 383, 67, 287, 52, 43, 1, 2, 1 +448, 492, 235, 257, 33, 85, 1, 0, 1 +448, 558, 560, 301, 40, 114, 1, 0, 1 +448, 559, 531, 316, 42, 106, 1, 0, 1 +448, 584, 142, 257, 42, 38, 1, 2, 1 +448, 590, 200, 285, 23, 58, 1, 0, 1 +448, 597, 342, 282, 23, 63, 1, 0, 1 +448, 598, 314, 285, 25, 71, 1, 0, 1 +449, 1, 80, 254, 26, 18, 1, 2, 1 +449, 82, 70, 309, 89, 67, 1, 2, 1 +449, 319, 456, 334, 48, 133, 1, 0, 1 +449, 361, 141, 346, 204, 110, 1, 2, 1 +449, 369, 273, 285, 25, 70, 1, 0, 1 +449, 383, 52, 288, 54, 44, 1, 2, 1 +449, 492, 222, 255, 34, 88, 1, 0, 1 +449, 558, 545, 302, 40, 113, 1, 0, 1 +449, 559, 519, 318, 42, 107, 1, 0, 1 +449, 584, 128, 256, 43, 38, 1, 2, 1 +449, 590, 186, 285, 24, 59, 1, 0, 1 +449, 597, 329, 281, 24, 67, 1, 0, 1 +450, 1, 68, 253, 26, 18, 1, 2, 1 +450, 82, 53, 308, 92, 70, 1, 2, 1 +450, 319, 441, 334, 49, 137, 1, 0, 1 +450, 361, 122, 344, 211, 114, 1, 2, 1 +450, 369, 261, 285, 26, 71, 1, 0, 1 +450, 383, 37, 287, 54, 43, 1, 2, 1 +450, 492, 206, 260, 33, 82, 1, 0, 1 +450, 558, 529, 304, 39, 115, 1, 0, 1 +450, 559, 506, 313, 43, 112, 1, 0, 1 +450, 584, 115, 254, 45, 41, 1, 2, 1 +450, 590, 171, 285, 24, 58, 1, 0, 1 +450, 597, 317, 279, 25, 68, 1, 0, 1 +450, 598, 284, 276, 28, 81, 1, 0, 1 +451, 1, 56, 252, 26, 19, 1, 2, 1 +451, 82, 38, 309, 92, 69, 1, 2, 1 +451, 319, 426, 336, 49, 136, 1, 0, 1 +451, 361, 103, 345, 214, 115, 1, 2, 1 +451, 369, 255, 283, 26, 74, 1, 0, 1 +451, 383, 23, 287, 55, 44, 1, 2, 1 +451, 492, 193, 268, 29, 75, 1, 0, 1 +451, 558, 515, 304, 39, 117, 1, 0, 1 +451, 559, 495, 313, 44, 114, 1, 0, 1 +451, 584, 102, 255, 44, 40, 1, 2, 1 +451, 590, 156, 284, 25, 59, 1, 0, 1 +451, 597, 303, 278, 26, 69, 1, 0, 1 +451, 598, 272, 276, 28, 81, 1, 0, 1 +452, 1, 42, 252, 27, 19, 1, 2, 1 +452, 82, 23, 309, 93, 71, 1, 2, 1 +452, 319, 411, 340, 50, 138, 1, 0, 1 +452, 361, 84, 345, 217, 117, 1, 2, 1 +452, 369, 238, 283, 26, 75, 1, 0, 1 +452, 383, 6, 287, 56, 45, 1, 2, 1 +452, 492, 177, 273, 28, 70, 1, 0, 1 +452, 558, 501, 304, 40, 118, 1, 0, 1 +452, 559, 484, 310, 44, 117, 1, 0, 1 +452, 584, 89, 256, 43, 39, 1, 2, 1 +452, 590, 142, 283, 25, 61, 1, 0, 1 +452, 597, 290, 277, 24, 67, 1, 0, 1 +452, 613, 901, 384, 46, 155, 1, 0, 1 +453, 1, 29, 252, 28, 20, 1, 2, 1 +453, 82, 7, 310, 93, 71, 1, 2, 1 +453, 319, 396, 342, 50, 137, 1, 0, 1 +453, 361, 64, 346, 218, 119, 1, 2, 1 +453, 369, 226, 283, 25, 76, 1, 0, 1 +453, 383, 0, 288, 50, 45, 1, 2, 1 +453, 492, 164, 274, 28, 70, 1, 0, 1 +453, 559, 469, 311, 45, 118, 1, 0, 1 +453, 584, 77, 256, 42, 39, 1, 2, 1 +453, 590, 128, 283, 25, 62, 1, 0, 1 +453, 597, 275, 277, 26, 70, 1, 0, 1 +453, 613, 893, 382, 48, 157, 1, 0, 1 +454, 1, 17, 252, 27, 20, 1, 2, 1 +454, 82, 0, 311, 86, 69, 1, 2, 1 +454, 319, 378, 344, 50, 138, 1, 0, 1 +454, 361, 46, 350, 216, 117, 1, 2, 1 +454, 369, 212, 283, 26, 78, 1, 0, 1 +454, 383, 0, 288, 35, 35, 1, 2, 1 +454, 559, 457, 320, 42, 110, 1, 0, 1 +454, 584, 62, 253, 45, 42, 1, 2, 1 +454, 590, 113, 283, 25, 64, 1, 0, 1 +454, 597, 262, 275, 26, 73, 1, 0, 1 +454, 613, 880, 384, 50, 155, 1, 0, 1 +455, 1, 2, 251, 28, 21, 1, 2, 1 +455, 82, 0, 311, 75, 71, 1, 2, 1 +455, 319, 359, 347, 50, 139, 1, 0, 1 +455, 361, 25, 350, 220, 120, 1, 2, 1 +455, 369, 199, 283, 26, 80, 1, 0, 1 +455, 383, 0, 289, 22, 33, 1, 2, 1 +455, 559, 443, 327, 40, 104, 1, 0, 1 +455, 584, 49, 256, 43, 41, 1, 2, 1 +455, 590, 99, 284, 26, 63, 1, 0, 1 +455, 597, 248, 275, 27, 75, 1, 0, 1 +455, 598, 218, 276, 29, 85, 1, 0, 1 +455, 613, 863, 382, 52, 157, 1, 0, 1 +456, 1, 0, 254, 18, 18, 1, 2, 1 +456, 82, 0, 312, 65, 73, 1, 2, 1 +456, 319, 339, 347, 52, 144, 1, 0, 1 +456, 361, 6, 351, 220, 120, 1, 2, 1 +456, 369, 184, 283, 26, 81, 1, 0, 1 +456, 559, 430, 332, 39, 101, 1, 0, 1 +456, 584, 34, 255, 44, 42, 1, 2, 1 +456, 597, 235, 277, 26, 75, 1, 0, 1 +456, 598, 204, 281, 27, 81, 1, 0, 1 +456, 613, 845, 381, 55, 158, 1, 0, 1 +457, 1, 0, 254, 7, 18, 1, 2, 1 +457, 82, 0, 312, 53, 74, 1, 2, 1 +457, 319, 319, 346, 54, 151, 1, 0, 1 +457, 361, 0, 352, 212, 122, 1, 2, 1 +457, 369, 169, 283, 26, 82, 1, 0, 1 +457, 559, 416, 332, 39, 102, 1, 0, 1 +457, 584, 21, 255, 45, 42, 1, 2, 1 +457, 590, 65, 286, 26, 64, 1, 0, 1 +457, 597, 221, 278, 26, 76, 1, 0, 1 +457, 598, 190, 281, 27, 82, 1, 0, 1 +457, 613, 827, 381, 57, 157, 1, 0, 1 +458, 319, 299, 347, 55, 157, 1, 0, 1 +458, 361, 0, 350, 208, 129, 1, 2, 1 +458, 369, 154, 284, 26, 81, 1, 0, 1 +458, 559, 400, 331, 41, 105, 1, 0, 1 +458, 590, 46, 282, 28, 69, 1, 0, 1 +458, 597, 207, 279, 27, 77, 1, 0, 1 +458, 598, 173, 280, 28, 84, 1, 0, 1 +458, 613, 808, 378, 61, 161, 1, 0, 1 +459, 319, 278, 350, 56, 162, 1, 0, 1 +459, 361, 0, 353, 192, 130, 1, 2, 1 +459, 369, 140, 284, 26, 84, 1, 0, 1 +459, 559, 384, 333, 42, 107, 1, 0, 1 +459, 590, 28, 280, 29, 72, 1, 0, 1 +459, 597, 194, 280, 27, 76, 1, 0, 1 +459, 598, 159, 283, 28, 83, 1, 0, 1 +459, 613, 789, 378, 64, 161, 1, 0, 1 +460, 319, 257, 354, 56, 163, 1, 0, 1 +460, 361, 0, 353, 181, 134, 1, 2, 1 +460, 369, 124, 285, 26, 84, 1, 0, 1 +460, 559, 368, 331, 44, 112, 1, 0, 1 +460, 590, 13, 280, 29, 73, 1, 0, 1 +460, 597, 178, 283, 27, 75, 1, 0, 1 +460, 598, 146, 285, 26, 81, 1, 0, 1 +460, 613, 769, 379, 66, 160, 1, 0, 1 +461, 319, 236, 360, 55, 163, 1, 0, 1 +461, 361, 0, 358, 165, 134, 1, 2, 1 +461, 369, 107, 287, 25, 84, 1, 0, 1 +461, 559, 351, 332, 45, 114, 1, 0, 1 +461, 590, 0, 287, 22, 67, 1, 0, 1 +461, 597, 163, 285, 27, 73, 1, 0, 1 +461, 598, 129, 286, 26, 80, 1, 0, 1 +461, 613, 750, 380, 69, 159, 1, 0, 1 +462, 319, 214, 365, 56, 165, 1, 0, 1 +462, 361, 0, 362, 145, 128, 1, 2, 1 +462, 369, 92, 288, 25, 85, 1, 0, 1 +462, 559, 335, 333, 46, 117, 1, 0, 1 +462, 590, 0, 287, 7, 68, 1, 0, 1 +462, 597, 149, 285, 27, 76, 1, 0, 1 +462, 598, 113, 285, 28, 85, 1, 0, 1 +462, 613, 732, 384, 69, 155, 1, 0, 1 +463, 319, 194, 370, 56, 162, 1, 0, 1 +463, 361, 0, 367, 133, 135, 1, 2, 1 +463, 369, 75, 290, 26, 84, 1, 0, 1 +463, 492, 23, 258, 35, 90, 1, 0, 1 +463, 559, 317, 330, 49, 123, 1, 0, 1 +463, 597, 135, 290, 26, 72, 1, 0, 1 +463, 598, 98, 286, 27, 83, 1, 0, 1 +463, 613, 715, 390, 69, 149, 1, 0, 1 +463, 640, 54, 295, 31, 81, 1, 0, 1 +464, 319, 173, 375, 58, 163, 1, 0, 1 +464, 361, 0, 368, 120, 137, 1, 2, 1 +464, 369, 57, 291, 26, 85, 1, 0, 1 +464, 492, 9, 257, 36, 91, 1, 0, 1 +464, 559, 301, 330, 51, 125, 1, 0, 1 +464, 597, 119, 290, 26, 72, 1, 0, 1 +464, 598, 84, 289, 26, 80, 1, 0, 1 +464, 613, 699, 398, 67, 141, 1, 0, 1 +464, 640, 35, 295, 31, 81, 1, 0, 1 +465, 319, 149, 377, 61, 162, 1, 0, 1 +465, 369, 45, 292, 29, 84, 1, 0, 1 +465, 559, 283, 328, 53, 130, 1, 0, 1 +465, 597, 103, 289, 28, 75, 1, 0, 1 +465, 598, 66, 288, 26, 81, 1, 0, 1 +465, 613, 681, 405, 67, 134, 1, 0, 1 +465, 640, 22, 293, 33, 85, 1, 0, 1 +466, 319, 125, 380, 62, 158, 1, 0, 1 +466, 369, 22, 290, 30, 90, 1, 0, 1 +466, 559, 266, 334, 52, 128, 1, 0, 1 +466, 597, 87, 287, 31, 82, 1, 0, 1 +466, 598, 49, 288, 26, 81, 1, 0, 1 +466, 613, 664, 413, 66, 126, 1, 0, 1 +466, 640, 10, 294, 33, 85, 1, 0, 1 +467, 319, 98, 381, 65, 158, 1, 0, 1 +467, 369, 2, 288, 31, 92, 1, 0, 1 +467, 559, 247, 336, 53, 130, 1, 0, 1 +467, 597, 70, 286, 33, 85, 1, 0, 1 +467, 598, 29, 287, 27, 85, 1, 0, 1 +467, 613, 647, 419, 65, 119, 1, 0, 1 +468, 319, 71, 385, 66, 154, 1, 0, 1 +468, 369, 0, 288, 18, 93, 1, 0, 1 +468, 559, 228, 340, 53, 130, 1, 0, 1 +468, 597, 53, 286, 33, 86, 1, 0, 1 +468, 598, 10, 286, 28, 87, 1, 0, 1 +468, 613, 630, 425, 64, 114, 1, 0, 1 +469, 319, 42, 388, 68, 151, 1, 0, 1 +469, 559, 209, 345, 53, 126, 1, 0, 1 +469, 597, 36, 286, 36, 93, 1, 0, 1 +469, 598, 0, 287, 22, 87, 1, 0, 1 +469, 613, 613, 427, 65, 112, 1, 0, 1 +470, 319, 14, 389, 70, 150, 1, 0, 1 +470, 559, 189, 346, 53, 128, 1, 0, 1 +470, 597, 22, 286, 36, 95, 1, 0, 1 +470, 613, 595, 428, 66, 111, 1, 0, 1 +471, 319, 0, 390, 64, 149, 1, 0, 1 +471, 559, 171, 347, 53, 130, 1, 0, 1 +471, 613, 575, 426, 69, 113, 1, 0, 1 +472, 319, 0, 393, 43, 146, 1, 0, 1 +472, 559, 150, 346, 55, 132, 1, 0, 1 +472, 613, 556, 426, 71, 113, 1, 0, 1 +473, 559, 130, 348, 55, 133, 1, 0, 1 +473, 613, 535, 425, 73, 114, 1, 0, 1 +474, 559, 110, 349, 54, 134, 1, 0, 1 +474, 613, 515, 425, 75, 114, 1, 0, 1 +475, 559, 87, 348, 56, 138, 1, 0, 1 +475, 613, 495, 425, 78, 114, 1, 0, 1 +476, 559, 65, 349, 57, 139, 1, 0, 1 +476, 613, 471, 427, 77, 112, 1, 0, 1 +477, 559, 42, 351, 56, 139, 1, 0, 1 +477, 613, 451, 431, 77, 108, 1, 0, 1 +478, 559, 15, 361, 48, 120, 1, 0, 1 +478, 613, 431, 435, 75, 104, 1, 0, 1 +479, 559, 0, 363, 43, 119, 1, 0, 1 +479, 613, 410, 440, 74, 98, 1, 0, 1 +480, 613, 388, 444, 74, 94, 1, 0, 1 +481, 613, 363, 442, 77, 97, 1, 0, 1 +482, 613, 338, 440, 79, 99, 1, 0, 1 +483, 613, 314, 439, 81, 100, 1, 0, 1 +483, 660, 867, 321, 40, 72, 1, 0, 1 +484, 613, 287, 438, 82, 101, 1, 0, 1 +484, 660, 845, 321, 41, 73, 1, 0, 1 +485, 613, 260, 438, 82, 101, 1, 0, 1 +485, 660, 822, 321, 42, 76, 1, 0, 1 +486, 613, 233, 440, 82, 99, 1, 0, 1 +486, 660, 791, 322, 60, 109, 1, 0, 1 +487, 613, 206, 443, 80, 96, 1, 0, 1 +487, 660, 767, 322, 66, 125, 1, 0, 1 +488, 613, 181, 449, 76, 90, 1, 0, 1 +488, 660, 745, 323, 67, 129, 1, 0, 1 +489, 613, 158, 455, 71, 83, 1, 0, 1 +489, 660, 720, 324, 69, 133, 1, 0, 1 +490, 613, 134, 463, 65, 74, 1, 0, 1 +490, 660, 697, 326, 68, 134, 1, 0, 1 +490, 666, 747, 326, 43, 148, 1, 0, 1 +491, 613, 111, 471, 61, 67, 1, 0, 1 +491, 660, 674, 329, 66, 132, 1, 0, 1 +491, 666, 734, 326, 44, 148, 1, 0, 1 +492, 613, 85, 477, 59, 62, 1, 0, 1 +492, 660, 654, 332, 64, 130, 1, 0, 1 +493, 613, 59, 480, 57, 59, 1, 0, 1 +493, 660, 636, 334, 61, 128, 1, 0, 1 +494, 613, 30, 483, 56, 56, 1, 0, 1 +494, 660, 616, 335, 60, 128, 1, 0, 1 +494, 667, 666, 341, 43, 75, 1, 0, 1 +495, 613, 3, 483, 56, 56, 1, 0, 1 +495, 660, 597, 337, 58, 130, 1, 0, 1 +495, 667, 641, 343, 46, 82, 1, 0, 1 +496, 613, 0, 484, 37, 55, 1, 0, 1 +496, 660, 575, 339, 58, 133, 1, 0, 1 +496, 667, 613, 347, 52, 93, 1, 0, 1 +497, 613, 0, 486, 10, 53, 1, 0, 1 +497, 660, 553, 340, 56, 135, 1, 0, 1 +497, 667, 593, 349, 55, 98, 1, 0, 1 +498, 660, 530, 340, 55, 133, 1, 0, 1 +499, 660, 507, 340, 54, 135, 1, 0, 1 +500, 660, 484, 340, 53, 136, 1, 0, 1 +500, 667, 512, 347, 70, 129, 1, 0, 1 +501, 660, 461, 341, 52, 135, 1, 0, 1 +501, 667, 488, 344, 71, 134, 1, 0, 1 +502, 660, 439, 340, 53, 136, 1, 0, 1 +502, 667, 464, 342, 72, 143, 1, 0, 1 +503, 660, 414, 341, 53, 136, 1, 0, 1 +503, 667, 442, 342, 68, 138, 1, 0, 1 +504, 660, 390, 343, 52, 133, 1, 0, 1 +504, 667, 419, 343, 68, 142, 1, 0, 1 +505, 660, 366, 342, 54, 141, 1, 0, 1 +505, 667, 398, 345, 69, 148, 1, 0, 1 +505, 671, 912, 322, 25, 90, 1, 0, 1 +506, 660, 340, 342, 56, 146, 1, 0, 1 +506, 667, 374, 346, 68, 152, 1, 0, 1 +506, 671, 893, 323, 25, 91, 1, 0, 1 +507, 660, 315, 346, 55, 144, 1, 0, 1 +507, 667, 348, 350, 68, 156, 1, 0, 1 +507, 671, 874, 324, 27, 91, 1, 0, 1 +508, 660, 290, 348, 54, 144, 1, 0, 1 +508, 667, 319, 353, 69, 162, 1, 0, 1 +508, 671, 857, 326, 27, 90, 1, 0, 1 +509, 660, 266, 352, 51, 141, 1, 0, 1 +509, 667, 292, 356, 70, 166, 1, 0, 1 +509, 671, 840, 329, 26, 88, 1, 0, 1 +510, 660, 239, 356, 53, 148, 1, 0, 1 +510, 667, 267, 360, 69, 167, 1, 0, 1 +510, 671, 822, 333, 26, 85, 1, 0, 1 +511, 660, 214, 359, 52, 146, 1, 0, 1 +511, 667, 243, 365, 66, 164, 1, 0, 1 +511, 671, 804, 334, 28, 87, 1, 0, 1 +512, 660, 187, 361, 50, 143, 1, 0, 1 +512, 667, 214, 368, 66, 164, 1, 0, 1 +512, 671, 786, 333, 30, 92, 1, 0, 1 +513, 660, 151, 362, 56, 157, 1, 0, 1 +513, 667, 185, 372, 66, 165, 1, 0, 1 +513, 671, 769, 334, 31, 93, 1, 0, 1 +514, 660, 119, 369, 57, 156, 1, 0, 1 +514, 667, 157, 375, 65, 162, 1, 0, 1 +514, 671, 751, 336, 31, 93, 1, 0, 1 +515, 660, 85, 373, 60, 158, 1, 0, 1 +515, 667, 128, 377, 65, 162, 1, 0, 1 +515, 671, 733, 335, 32, 95, 1, 0, 1 +515, 686, 897, 280, 46, 50, 1, 2, 1 +516, 660, 53, 374, 62, 161, 1, 0, 1 +516, 667, 101, 380, 64, 159, 1, 0, 1 +516, 671, 716, 335, 32, 95, 1, 0, 1 +516, 686, 882, 279, 47, 50, 1, 2, 1 +517, 660, 30, 378, 57, 153, 1, 0, 1 +517, 667, 70, 385, 63, 154, 1, 0, 1 +517, 671, 699, 335, 34, 96, 1, 0, 1 +517, 686, 866, 279, 46, 50, 1, 2, 1 +518, 660, 1, 379, 55, 150, 1, 0, 1 +518, 667, 37, 386, 64, 153, 1, 0, 1 +518, 671, 683, 335, 35, 97, 1, 0, 1 +518, 686, 850, 277, 46, 50, 1, 2, 1 +519, 660, 0, 382, 29, 150, 1, 0, 1 +519, 667, 7, 391, 63, 148, 1, 0, 1 +519, 671, 667, 338, 35, 96, 1, 0, 1 +519, 686, 835, 275, 48, 50, 1, 2, 1 +519, 697, 882, 259, 40, 33, 1, 2, 1 +520, 667, 0, 395, 45, 143, 1, 0, 1 +520, 671, 650, 338, 36, 96, 1, 0, 1 +520, 686, 820, 275, 47, 49, 1, 2, 1 +520, 697, 869, 259, 41, 33, 1, 2, 1 +520, 700, 692, 338, 36, 100, 1, 0, 1 +521, 667, 0, 398, 19, 141, 1, 0, 1 +521, 671, 633, 339, 37, 96, 1, 0, 1 +521, 686, 806, 274, 47, 49, 1, 2, 1 +521, 697, 857, 259, 40, 32, 1, 2, 1 +521, 700, 673, 338, 37, 101, 1, 0, 1 +522, 671, 617, 341, 37, 93, 1, 0, 1 +522, 686, 791, 273, 47, 49, 1, 2, 1 +522, 697, 845, 258, 39, 31, 1, 2, 1 +522, 700, 657, 336, 37, 102, 1, 0, 1 +523, 671, 599, 341, 38, 94, 1, 0, 1 +523, 686, 776, 273, 47, 48, 1, 2, 1 +523, 697, 832, 258, 40, 32, 1, 2, 1 +523, 700, 641, 338, 38, 103, 1, 0, 1 +523, 705, 923, 270, 28, 33, 1, 2, 1 +524, 671, 582, 342, 38, 94, 1, 0, 1 +524, 686, 762, 272, 47, 47, 1, 2, 1 +524, 697, 821, 258, 40, 31, 1, 2, 1 +524, 700, 624, 337, 38, 107, 1, 0, 1 +524, 705, 913, 271, 25, 28, 1, 2, 1 +525, 671, 566, 342, 37, 95, 1, 0, 1 +525, 686, 750, 272, 45, 46, 1, 2, 1 +525, 697, 811, 258, 40, 31, 1, 2, 1 +525, 700, 606, 336, 41, 111, 1, 0, 1 +525, 705, 898, 272, 24, 26, 1, 2, 1 +525, 711, 653, 279, 27, 57, 1, 0, 1 +526, 671, 548, 342, 38, 97, 1, 0, 1 +526, 686, 737, 272, 46, 45, 1, 2, 1 +526, 697, 799, 257, 41, 32, 1, 2, 1 +526, 700, 589, 336, 41, 112, 1, 0, 1 +526, 705, 887, 272, 25, 25, 1, 2, 1 +526, 711, 640, 280, 27, 56, 1, 0, 1 +526, 713, 907, 282, 41, 46, 1, 2, 1 +527, 671, 533, 342, 38, 98, 1, 0, 1 +527, 686, 725, 271, 45, 45, 1, 2, 1 +527, 697, 788, 257, 43, 33, 1, 2, 1 +527, 700, 573, 338, 41, 112, 1, 0, 1 +527, 705, 875, 272, 27, 25, 1, 2, 1 +527, 711, 628, 282, 25, 54, 1, 0, 1 +527, 713, 901, 284, 41, 45, 1, 2, 1 +528, 671, 517, 343, 39, 100, 1, 0, 1 +528, 686, 712, 271, 44, 44, 1, 2, 1 +528, 697, 777, 256, 45, 35, 1, 2, 1 +528, 700, 555, 339, 41, 113, 1, 0, 1 +528, 705, 862, 272, 29, 26, 1, 2, 1 +528, 711, 615, 285, 25, 52, 1, 0, 1 +528, 713, 894, 287, 44, 45, 1, 2, 1 +529, 671, 500, 345, 40, 104, 1, 0, 1 +529, 686, 700, 271, 44, 43, 1, 2, 1 +529, 697, 766, 257, 45, 34, 1, 2, 1 +529, 700, 539, 343, 41, 113, 1, 0, 1 +529, 705, 847, 273, 30, 25, 1, 2, 1 +529, 711, 603, 285, 24, 51, 1, 0, 1 +529, 713, 885, 287, 49, 47, 1, 2, 1 +530, 671, 482, 346, 41, 107, 1, 0, 1 +530, 686, 688, 271, 43, 44, 1, 2, 1 +530, 697, 756, 258, 44, 33, 1, 2, 1 +530, 700, 522, 344, 42, 116, 1, 0, 1 +530, 705, 834, 273, 32, 25, 1, 2, 1 +530, 711, 592, 285, 24, 52, 1, 0, 1 +530, 713, 876, 286, 55, 50, 1, 2, 1 +531, 671, 465, 346, 41, 109, 1, 0, 1 +531, 686, 676, 271, 43, 43, 1, 2, 1 +531, 697, 744, 258, 45, 34, 1, 2, 1 +531, 700, 505, 348, 44, 116, 1, 0, 1 +531, 705, 821, 273, 34, 25, 1, 2, 1 +531, 711, 581, 284, 24, 52, 1, 0, 1 +531, 713, 868, 286, 60, 51, 1, 2, 1 +532, 671, 449, 350, 41, 107, 1, 0, 1 +532, 686, 664, 271, 43, 43, 1, 2, 1 +532, 697, 736, 259, 44, 33, 1, 2, 1 +532, 700, 487, 351, 45, 117, 1, 0, 1 +532, 705, 810, 273, 33, 25, 1, 2, 1 +532, 711, 569, 283, 25, 54, 1, 0, 1 +532, 713, 859, 287, 64, 51, 1, 2, 1 +533, 671, 432, 352, 42, 110, 1, 0, 1 +533, 686, 654, 270, 41, 43, 1, 2, 1 +533, 697, 726, 259, 44, 33, 1, 2, 1 +533, 700, 472, 352, 45, 118, 1, 0, 1 +533, 705, 799, 273, 36, 25, 1, 2, 1 +533, 711, 558, 283, 25, 55, 1, 0, 1 +533, 713, 850, 288, 68, 50, 1, 2, 1 +534, 671, 416, 354, 42, 110, 1, 0, 1 +534, 686, 642, 270, 41, 42, 1, 2, 1 +534, 697, 717, 260, 44, 34, 1, 2, 1 +534, 700, 456, 352, 46, 119, 1, 0, 1 +534, 705, 789, 273, 36, 26, 1, 2, 1 +534, 711, 548, 286, 24, 53, 1, 0, 1 +534, 713, 838, 287, 74, 52, 1, 2, 1 +534, 720, 653, 252, 21, 17, 1, 2, 1 +534, 721, 650, 370, 63, 144, 1, 0, 1 +535, 671, 400, 354, 41, 112, 1, 0, 1 +535, 686, 631, 270, 41, 42, 1, 2, 1 +535, 697, 708, 260, 45, 34, 1, 2, 1 +535, 700, 440, 352, 47, 122, 1, 0, 1 +535, 705, 776, 272, 39, 27, 1, 2, 1 +535, 711, 537, 286, 25, 54, 1, 0, 1 +535, 713, 825, 286, 82, 54, 1, 2, 1 +535, 720, 644, 251, 21, 17, 1, 2, 1 +535, 721, 637, 376, 60, 139, 1, 0, 1 +536, 671, 383, 355, 42, 113, 1, 0, 1 +536, 686, 620, 270, 41, 42, 1, 2, 1 +536, 697, 699, 259, 45, 34, 1, 2, 1 +536, 700, 423, 352, 48, 127, 1, 0, 1 +536, 705, 768, 273, 39, 26, 1, 2, 1 +536, 711, 527, 286, 24, 55, 1, 0, 1 +536, 713, 816, 287, 83, 52, 1, 2, 1 +536, 720, 634, 251, 22, 18, 1, 2, 1 +536, 721, 626, 387, 55, 127, 1, 0, 1 +537, 671, 364, 354, 44, 119, 1, 0, 1 +537, 686, 609, 269, 41, 42, 1, 2, 1 +537, 697, 690, 258, 46, 35, 1, 2, 1 +537, 700, 405, 352, 49, 131, 1, 0, 1 +537, 705, 758, 272, 39, 25, 1, 2, 1 +537, 711, 516, 287, 25, 55, 1, 0, 1 +537, 713, 804, 285, 88, 53, 1, 2, 1 +537, 720, 625, 250, 22, 18, 1, 2, 1 +537, 721, 609, 374, 60, 141, 1, 0, 1 +538, 671, 346, 357, 43, 118, 1, 0, 1 +538, 686, 597, 270, 42, 42, 1, 2, 1 +538, 697, 682, 260, 45, 35, 1, 2, 1 +538, 700, 388, 353, 49, 132, 1, 0, 1 +538, 705, 747, 273, 42, 27, 1, 2, 1 +538, 711, 506, 288, 24, 55, 1, 0, 1 +538, 713, 794, 287, 91, 54, 1, 2, 1 +538, 720, 618, 252, 20, 16, 1, 2, 1 +538, 721, 594, 372, 62, 146, 1, 0, 1 +539, 671, 327, 357, 43, 120, 1, 0, 1 +539, 686, 587, 270, 41, 41, 1, 2, 1 +539, 697, 674, 260, 46, 35, 1, 2, 1 +539, 700, 370, 355, 49, 135, 1, 0, 1 +539, 705, 737, 273, 43, 27, 1, 2, 1 +539, 711, 496, 288, 24, 56, 1, 0, 1 +539, 713, 784, 288, 93, 53, 1, 2, 1 +539, 720, 610, 252, 21, 17, 1, 2, 1 +539, 721, 583, 385, 55, 132, 1, 0, 1 +540, 671, 310, 357, 44, 124, 1, 0, 1 +540, 686, 577, 270, 40, 41, 1, 2, 1 +540, 697, 665, 261, 47, 36, 1, 2, 1 +540, 700, 352, 357, 50, 138, 1, 0, 1 +540, 705, 728, 274, 43, 27, 1, 2, 1 +540, 711, 487, 289, 24, 55, 1, 0, 1 +540, 713, 774, 291, 96, 53, 1, 2, 1 +540, 720, 602, 253, 22, 17, 1, 2, 1 +540, 721, 569, 386, 55, 132, 1, 0, 1 +541, 671, 292, 360, 45, 124, 1, 0, 1 +541, 686, 567, 270, 41, 41, 1, 2, 1 +541, 697, 658, 262, 46, 35, 1, 2, 1 +541, 700, 334, 359, 50, 140, 1, 0, 1 +541, 705, 719, 274, 43, 27, 1, 2, 1 +541, 711, 477, 291, 23, 54, 1, 0, 1 +541, 713, 765, 292, 96, 52, 1, 2, 1 +541, 720, 593, 253, 22, 17, 1, 2, 1 +541, 721, 556, 386, 56, 135, 1, 0, 1 +542, 671, 271, 364, 45, 123, 1, 0, 1 +542, 686, 557, 270, 41, 42, 1, 2, 1 +542, 697, 649, 263, 47, 36, 1, 2, 1 +542, 700, 315, 364, 49, 138, 1, 0, 1 +542, 705, 710, 277, 43, 26, 1, 2, 1 +542, 711, 467, 292, 24, 55, 1, 0, 1 +542, 713, 757, 295, 97, 52, 1, 2, 1 +542, 720, 586, 255, 21, 17, 1, 2, 1 +542, 721, 537, 381, 60, 146, 1, 0, 1 +542, 722, 931, 312, 20, 55, 1, 2, 1 +543, 671, 254, 366, 47, 124, 1, 0, 1 +543, 686, 546, 270, 41, 41, 1, 2, 1 +543, 697, 642, 264, 47, 36, 1, 2, 1 +543, 700, 298, 367, 50, 141, 1, 0, 1 +543, 705, 702, 277, 44, 27, 1, 2, 1 +543, 711, 457, 292, 24, 55, 1, 0, 1 +543, 713, 747, 296, 99, 52, 1, 2, 1 +543, 720, 577, 256, 22, 17, 1, 2, 1 +543, 721, 525, 380, 60, 149, 1, 0, 1 +543, 722, 926, 315, 21, 55, 1, 2, 1 +544, 671, 233, 373, 50, 126, 1, 0, 1 +544, 686, 536, 271, 40, 41, 1, 2, 1 +544, 697, 635, 265, 46, 36, 1, 2, 1 +544, 700, 278, 372, 52, 146, 1, 0, 1 +544, 705, 690, 277, 46, 27, 1, 2, 1 +544, 711, 447, 293, 25, 57, 1, 0, 1 +544, 713, 738, 297, 101, 52, 1, 2, 1 +544, 720, 568, 256, 23, 17, 1, 2, 1 +544, 721, 509, 382, 61, 152, 1, 0, 1 +544, 722, 920, 315, 24, 59, 1, 2, 1 +545, 671, 215, 373, 51, 127, 1, 0, 1 +545, 686, 527, 270, 39, 40, 1, 2, 1 +545, 697, 628, 265, 46, 36, 1, 2, 1 +545, 700, 261, 372, 53, 148, 1, 0, 1 +545, 705, 680, 277, 46, 27, 1, 2, 1 +545, 711, 438, 292, 24, 57, 1, 0, 1 +545, 713, 730, 296, 102, 52, 1, 2, 1 +545, 720, 561, 255, 22, 18, 1, 2, 1 +545, 721, 498, 380, 60, 152, 1, 0, 1 +545, 722, 914, 315, 26, 59, 1, 2, 1 +546, 671, 198, 374, 54, 132, 1, 0, 1 +546, 686, 518, 268, 39, 41, 1, 2, 1 +546, 697, 621, 264, 46, 36, 1, 2, 1 +546, 700, 244, 373, 54, 150, 1, 0, 1 +546, 705, 672, 276, 46, 27, 1, 2, 1 +546, 711, 428, 291, 25, 57, 1, 0, 1 +546, 713, 721, 296, 104, 52, 1, 2, 1 +546, 720, 553, 254, 23, 18, 1, 2, 1 +546, 721, 484, 380, 60, 155, 1, 0, 1 +546, 722, 908, 314, 29, 59, 1, 2, 1 +547, 671, 177, 377, 53, 131, 1, 0, 1 +547, 686, 508, 267, 39, 40, 1, 2, 1 +547, 697, 613, 263, 47, 36, 1, 2, 1 +547, 700, 226, 374, 54, 151, 1, 0, 1 +547, 705, 664, 274, 46, 27, 1, 2, 1 +547, 711, 419, 291, 25, 57, 1, 0, 1 +547, 713, 713, 294, 106, 53, 1, 2, 1 +547, 720, 547, 254, 22, 16, 1, 2, 1 +547, 721, 471, 382, 59, 152, 1, 0, 1 +547, 722, 903, 312, 32, 57, 1, 2, 1 +548, 671, 156, 378, 54, 136, 1, 0, 1 +548, 686, 498, 265, 40, 41, 1, 2, 1 +548, 697, 607, 264, 47, 35, 1, 2, 1 +548, 700, 205, 375, 55, 157, 1, 0, 1 +548, 705, 657, 274, 45, 27, 1, 2, 1 +548, 711, 409, 292, 25, 57, 1, 0, 1 +548, 713, 705, 294, 106, 53, 1, 2, 1 +548, 720, 539, 253, 23, 17, 1, 2, 1 +548, 721, 459, 388, 56, 146, 1, 0, 1 +548, 722, 896, 312, 37, 59, 1, 2, 1 +549, 671, 137, 382, 55, 137, 1, 0, 1 +549, 686, 488, 264, 40, 41, 1, 2, 1 +549, 697, 602, 263, 46, 35, 1, 2, 1 +549, 700, 186, 378, 55, 157, 1, 0, 1 +549, 705, 648, 272, 48, 28, 1, 2, 1 +549, 711, 399, 292, 25, 58, 1, 0, 1 +549, 713, 699, 292, 106, 53, 1, 2, 1 +549, 720, 532, 253, 23, 16, 1, 2, 1 +549, 721, 445, 382, 58, 152, 1, 0, 1 +549, 722, 890, 309, 41, 60, 1, 2, 1 +549, 723, 454, 210, 42, 60, 1, 2, 1 +550, 671, 115, 380, 57, 144, 1, 0, 1 +550, 686, 480, 264, 40, 41, 1, 2, 1 +550, 697, 596, 263, 47, 35, 1, 2, 1 +550, 700, 166, 380, 56, 156, 1, 0, 1 +550, 705, 641, 272, 47, 27, 1, 2, 1 +550, 711, 390, 291, 26, 59, 1, 0, 1 +550, 713, 691, 291, 108, 55, 1, 2, 1 +550, 720, 526, 252, 24, 17, 1, 2, 1 +550, 721, 435, 386, 56, 147, 1, 0, 1 +550, 722, 883, 308, 47, 61, 1, 2, 1 +550, 723, 444, 210, 44, 63, 1, 2, 1 +551, 671, 93, 382, 57, 147, 1, 0, 1 +551, 686, 471, 263, 41, 42, 1, 2, 1 +551, 697, 589, 263, 48, 35, 1, 2, 1 +551, 700, 146, 382, 55, 156, 1, 0, 1 +551, 705, 634, 271, 47, 27, 1, 2, 1 +551, 711, 380, 291, 27, 59, 1, 0, 1 +551, 713, 684, 291, 110, 55, 1, 2, 1 +551, 720, 519, 252, 24, 17, 1, 2, 1 +551, 721, 424, 391, 53, 140, 1, 0, 1 +551, 722, 876, 307, 53, 63, 1, 2, 1 +551, 723, 437, 210, 44, 64, 1, 2, 1 +552, 671, 72, 383, 58, 152, 1, 0, 1 +552, 686, 463, 263, 41, 41, 1, 2, 1 +552, 697, 583, 262, 50, 36, 1, 2, 1 +552, 700, 124, 384, 54, 155, 1, 0, 1 +552, 705, 628, 271, 48, 27, 1, 2, 1 +552, 711, 371, 292, 26, 58, 1, 0, 1 +552, 713, 679, 291, 109, 55, 1, 2, 1 +552, 720, 512, 251, 25, 17, 1, 2, 1 +552, 721, 409, 393, 55, 143, 1, 0, 1 +552, 722, 869, 307, 60, 64, 1, 2, 1 +552, 723, 426, 210, 44, 63, 1, 2, 1 +553, 671, 51, 386, 57, 152, 1, 0, 1 +553, 686, 456, 262, 39, 41, 1, 2, 1 +553, 697, 578, 262, 49, 35, 1, 2, 1 +553, 700, 101, 388, 54, 151, 1, 0, 1 +553, 705, 621, 269, 49, 29, 1, 2, 1 +553, 711, 361, 291, 27, 59, 1, 0, 1 +553, 713, 673, 291, 110, 55, 1, 2, 1 +553, 720, 506, 251, 25, 17, 1, 2, 1 +553, 721, 397, 390, 56, 146, 1, 0, 1 +553, 722, 861, 306, 66, 66, 1, 2, 1 +553, 723, 416, 210, 45, 63, 1, 2, 1 +554, 671, 30, 393, 55, 146, 1, 0, 1 +554, 686, 446, 261, 40, 41, 1, 2, 1 +554, 697, 572, 262, 50, 35, 1, 2, 1 +554, 700, 76, 390, 54, 149, 1, 0, 1 +554, 705, 615, 269, 49, 29, 1, 2, 1 +554, 711, 352, 291, 27, 60, 1, 0, 1 +554, 713, 667, 291, 110, 56, 1, 2, 1 +554, 720, 500, 251, 26, 17, 1, 2, 1 +554, 721, 380, 389, 58, 149, 1, 0, 1 +554, 722, 852, 305, 71, 66, 1, 2, 1 +554, 723, 408, 209, 45, 65, 1, 2, 1 +555, 671, 7, 396, 55, 143, 1, 0, 1 +555, 686, 439, 261, 39, 40, 1, 2, 1 +555, 697, 567, 262, 48, 35, 1, 2, 1 +555, 700, 55, 395, 54, 144, 1, 0, 1 +555, 705, 610, 269, 47, 28, 1, 2, 1 +555, 711, 343, 290, 27, 61, 1, 0, 1 +555, 713, 662, 291, 110, 57, 1, 2, 1 +555, 720, 493, 251, 25, 17, 1, 2, 1 +555, 721, 369, 386, 59, 152, 1, 0, 1 +555, 722, 844, 305, 74, 65, 1, 2, 1 +556, 671, 0, 398, 43, 141, 1, 0, 1 +556, 686, 431, 260, 39, 40, 1, 2, 1 +556, 697, 561, 262, 50, 35, 1, 2, 1 +556, 700, 31, 401, 53, 138, 1, 0, 1 +556, 705, 605, 268, 45, 27, 1, 2, 1 +556, 711, 334, 290, 27, 61, 1, 0, 1 +556, 713, 657, 291, 108, 56, 1, 2, 1 +556, 720, 487, 250, 27, 18, 1, 2, 1 +556, 721, 363, 389, 52, 130, 1, 0, 1 +556, 722, 836, 305, 78, 65, 1, 2, 1 +556, 723, 389, 208, 45, 64, 1, 2, 1 +557, 671, 0, 401, 24, 138, 1, 0, 1 +557, 686, 421, 258, 41, 41, 1, 2, 1 +557, 697, 555, 261, 51, 36, 1, 2, 1 +557, 700, 8, 406, 52, 133, 1, 0, 1 +557, 705, 598, 267, 47, 28, 1, 2, 1 +557, 711, 324, 290, 27, 61, 1, 0, 1 +557, 713, 652, 291, 109, 56, 1, 2, 1 +557, 720, 482, 249, 26, 18, 1, 2, 1 +557, 721, 344, 385, 58, 147, 1, 0, 1 +557, 722, 828, 304, 81, 65, 1, 2, 1 +557, 723, 381, 207, 43, 61, 1, 2, 1 +558, 686, 414, 257, 41, 42, 1, 2, 1 +558, 697, 550, 260, 52, 36, 1, 2, 1 +558, 700, 0, 410, 38, 127, 1, 0, 1 +558, 705, 593, 266, 46, 29, 1, 2, 1 +558, 711, 315, 290, 27, 61, 1, 0, 1 +558, 713, 646, 290, 110, 57, 1, 2, 1 +558, 720, 476, 249, 26, 18, 1, 2, 1 +558, 721, 328, 383, 61, 154, 1, 0, 1 +558, 722, 818, 303, 88, 67, 1, 2, 1 +558, 723, 373, 206, 43, 62, 1, 2, 1 +558, 731, 360, 267, 18, 44, 1, 0, 1 +559, 686, 406, 257, 40, 40, 1, 2, 1 +559, 697, 547, 259, 53, 37, 1, 2, 1 +559, 700, 0, 413, 17, 125, 1, 0, 1 +559, 705, 587, 265, 46, 29, 1, 2, 1 +559, 711, 307, 290, 27, 62, 1, 0, 1 +559, 713, 642, 289, 109, 57, 1, 2, 1 +559, 720, 469, 247, 28, 19, 1, 2, 1 +559, 721, 315, 381, 62, 158, 1, 0, 1 +559, 722, 811, 303, 91, 67, 1, 2, 1 +559, 723, 363, 204, 44, 62, 1, 2, 1 +559, 731, 351, 264, 19, 47, 1, 0, 1 +560, 686, 398, 255, 41, 41, 1, 2, 1 +560, 697, 541, 258, 57, 39, 1, 2, 1 +560, 705, 581, 265, 46, 29, 1, 2, 1 +560, 711, 297, 289, 28, 64, 1, 0, 1 +560, 713, 637, 290, 108, 57, 1, 2, 1 +560, 720, 464, 247, 28, 19, 1, 2, 1 +560, 721, 301, 381, 62, 158, 1, 0, 1 +560, 722, 804, 303, 95, 67, 1, 2, 1 +560, 723, 353, 203, 46, 65, 1, 2, 1 +560, 731, 344, 265, 18, 44, 1, 0, 1 +561, 686, 390, 254, 42, 42, 1, 2, 1 +561, 697, 537, 258, 56, 38, 1, 2, 1 +561, 705, 577, 265, 44, 29, 1, 2, 1 +561, 711, 289, 289, 28, 64, 1, 0, 1 +561, 713, 633, 290, 109, 58, 1, 2, 1 +561, 720, 458, 247, 29, 19, 1, 2, 1 +561, 721, 288, 379, 63, 160, 1, 0, 1 +561, 722, 797, 302, 98, 68, 1, 2, 1 +561, 723, 345, 203, 48, 67, 1, 2, 1 +561, 731, 337, 266, 18, 43, 1, 0, 1 +562, 686, 384, 255, 41, 41, 1, 2, 1 +562, 697, 534, 259, 56, 38, 1, 2, 1 +562, 705, 572, 264, 44, 30, 1, 2, 1 +562, 711, 281, 289, 28, 66, 1, 0, 1 +562, 713, 627, 290, 111, 60, 1, 2, 1 +562, 720, 453, 246, 28, 19, 1, 2, 1 +562, 721, 275, 379, 63, 160, 1, 0, 1 +562, 722, 790, 302, 100, 67, 1, 2, 1 +562, 723, 336, 203, 49, 67, 1, 2, 1 +562, 731, 331, 268, 17, 41, 1, 0, 1 +563, 686, 378, 256, 40, 39, 1, 2, 1 +563, 697, 529, 259, 58, 39, 1, 2, 1 +563, 705, 568, 264, 43, 30, 1, 2, 1 +563, 711, 273, 290, 28, 66, 1, 0, 1 +563, 713, 621, 290, 113, 62, 1, 2, 1 +563, 720, 448, 247, 29, 20, 1, 2, 1 +563, 721, 262, 378, 64, 161, 1, 0, 1 +563, 722, 783, 302, 103, 68, 1, 2, 1 +563, 723, 328, 204, 46, 65, 1, 2, 1 +563, 731, 324, 269, 17, 42, 1, 0, 1 +564, 686, 370, 254, 43, 41, 1, 2, 1 +564, 697, 524, 259, 61, 40, 1, 2, 1 +564, 705, 563, 263, 43, 31, 1, 2, 1 +564, 711, 264, 290, 29, 67, 1, 0, 1 +564, 713, 617, 291, 113, 62, 1, 2, 1 +564, 720, 443, 247, 29, 20, 1, 2, 1 +564, 721, 249, 379, 64, 160, 1, 0, 1 +564, 722, 778, 303, 104, 67, 1, 2, 1 +564, 723, 318, 203, 49, 68, 1, 2, 1 +564, 731, 317, 270, 17, 41, 1, 0, 1 +565, 686, 363, 250, 45, 44, 1, 2, 1 +565, 697, 520, 259, 60, 39, 1, 2, 1 +565, 705, 559, 264, 40, 29, 1, 2, 1 +565, 711, 257, 290, 29, 68, 1, 0, 1 +565, 713, 613, 291, 113, 63, 1, 2, 1 +565, 720, 439, 247, 28, 19, 1, 2, 1 +565, 721, 236, 379, 64, 160, 1, 0, 1 +565, 722, 772, 303, 106, 67, 1, 2, 1 +565, 723, 309, 202, 50, 69, 1, 2, 1 +566, 686, 358, 253, 43, 41, 1, 2, 1 +566, 697, 516, 259, 62, 39, 1, 2, 1 +566, 705, 553, 263, 40, 30, 1, 2, 1 +566, 711, 248, 290, 30, 69, 1, 0, 1 +566, 713, 611, 292, 111, 61, 1, 2, 1 +566, 720, 434, 247, 29, 20, 1, 2, 1 +566, 721, 225, 384, 63, 155, 1, 0, 1 +566, 722, 767, 303, 107, 67, 1, 2, 1 +567, 686, 352, 252, 42, 41, 1, 2, 1 +567, 697, 513, 259, 64, 40, 1, 2, 1 +567, 711, 240, 291, 30, 68, 1, 0, 1 +567, 713, 608, 293, 111, 62, 1, 2, 1 +567, 720, 429, 247, 29, 20, 1, 2, 1 +567, 721, 211, 388, 62, 151, 1, 0, 1 +567, 722, 760, 303, 110, 68, 1, 2, 1 +568, 686, 345, 251, 42, 41, 1, 2, 1 +568, 697, 509, 259, 65, 41, 1, 2, 1 +568, 711, 232, 293, 30, 68, 1, 0, 1 +568, 713, 605, 294, 109, 61, 1, 2, 1 +568, 720, 426, 248, 28, 19, 1, 2, 1 +568, 721, 198, 391, 63, 148, 1, 0, 1 +568, 722, 754, 303, 114, 70, 1, 2, 1 +569, 686, 339, 251, 41, 42, 1, 2, 1 +569, 697, 504, 259, 65, 41, 1, 2, 1 +569, 711, 223, 293, 31, 69, 1, 0, 1 +569, 713, 602, 295, 108, 61, 1, 2, 1 +569, 720, 421, 247, 29, 21, 1, 2, 1 +569, 721, 184, 393, 63, 146, 1, 0, 1 +569, 722, 749, 303, 116, 70, 1, 2, 1 +570, 686, 333, 251, 42, 41, 1, 2, 1 +570, 697, 500, 259, 67, 42, 1, 2, 1 +570, 711, 215, 293, 31, 70, 1, 0, 1 +570, 713, 599, 295, 108, 62, 1, 2, 1 +570, 720, 416, 247, 31, 21, 1, 2, 1 +570, 721, 172, 395, 63, 144, 1, 0, 1 +570, 722, 744, 303, 118, 71, 1, 2, 1 +571, 686, 327, 252, 41, 40, 1, 2, 1 +571, 697, 496, 259, 68, 42, 1, 2, 1 +571, 711, 207, 294, 32, 72, 1, 0, 1 +571, 713, 594, 296, 110, 64, 1, 2, 1 +571, 720, 412, 247, 30, 22, 1, 2, 1 +571, 721, 158, 397, 64, 142, 1, 0, 1 +571, 722, 740, 304, 118, 70, 1, 2, 1 +572, 686, 321, 251, 41, 42, 1, 2, 1 +572, 697, 492, 260, 68, 42, 1, 2, 1 +572, 711, 199, 296, 31, 71, 1, 0, 1 +572, 713, 591, 297, 111, 65, 1, 2, 1 +572, 720, 407, 247, 32, 23, 1, 2, 1 +572, 721, 145, 398, 64, 141, 1, 0, 1 +572, 722, 735, 304, 122, 71, 1, 2, 1 +573, 686, 315, 251, 41, 41, 1, 2, 1 +573, 697, 489, 260, 68, 43, 1, 2, 1 +573, 711, 190, 297, 32, 71, 1, 0, 1 +573, 713, 588, 297, 113, 66, 1, 2, 1 +573, 720, 403, 248, 32, 22, 1, 2, 1 +573, 721, 132, 398, 65, 141, 1, 0, 1 +573, 722, 731, 304, 122, 71, 1, 2, 1 +573, 734, 931, 296, 25, 79, 1, 0, 1 +574, 686, 310, 250, 40, 41, 1, 2, 1 +574, 697, 486, 261, 68, 42, 1, 2, 1 +574, 711, 182, 298, 33, 71, 1, 0, 1 +574, 713, 584, 298, 114, 67, 1, 2, 1 +574, 720, 398, 248, 32, 22, 1, 2, 1 +574, 721, 118, 399, 66, 140, 1, 0, 1 +574, 722, 727, 305, 123, 71, 1, 2, 1 +574, 734, 929, 295, 26, 81, 1, 0, 1 +575, 686, 304, 250, 41, 41, 1, 2, 1 +575, 697, 482, 261, 70, 44, 1, 2, 1 +575, 711, 174, 298, 33, 71, 1, 0, 1 +575, 713, 582, 300, 113, 67, 1, 2, 1 +575, 720, 395, 247, 32, 23, 1, 2, 1 +575, 721, 104, 399, 67, 140, 1, 0, 1 +575, 722, 723, 306, 124, 72, 1, 2, 1 +575, 734, 926, 296, 25, 80, 1, 0, 1 +575, 735, 646, 266, 15, 31, 1, 0, 1 +575, 736, 290, 230, 32, 20, 1, 2, 1 +576, 686, 299, 252, 39, 40, 1, 2, 1 +576, 697, 480, 262, 70, 44, 1, 2, 1 +576, 711, 165, 299, 33, 72, 1, 0, 1 +576, 713, 580, 302, 114, 68, 1, 2, 1 +576, 720, 391, 248, 33, 23, 1, 2, 1 +576, 721, 91, 401, 67, 138, 1, 0, 1 +576, 722, 719, 307, 126, 72, 1, 2, 1 +576, 734, 921, 293, 27, 85, 1, 0, 1 +576, 735, 642, 266, 16, 33, 1, 0, 1 +576, 736, 286, 229, 32, 21, 1, 2, 1 +577, 686, 294, 252, 38, 39, 1, 2, 1 +577, 697, 477, 262, 71, 45, 1, 2, 1 +577, 711, 156, 299, 35, 73, 1, 0, 1 +577, 713, 579, 303, 116, 69, 1, 2, 1 +577, 720, 388, 247, 33, 23, 1, 2, 1 +577, 721, 77, 402, 67, 137, 1, 0, 1 +577, 722, 715, 307, 127, 73, 1, 2, 1 +577, 734, 918, 292, 27, 87, 1, 0, 1 +577, 735, 639, 263, 18, 39, 1, 0, 1 +578, 686, 289, 252, 38, 38, 1, 2, 1 +578, 697, 475, 262, 71, 45, 1, 2, 1 +578, 711, 148, 299, 35, 75, 1, 0, 1 +578, 713, 577, 303, 117, 71, 1, 2, 1 +578, 720, 385, 247, 32, 23, 1, 2, 1 +578, 721, 61, 405, 66, 134, 1, 0, 1 +578, 722, 713, 307, 128, 73, 1, 2, 1 +578, 734, 914, 292, 27, 88, 1, 0, 1 +578, 735, 635, 261, 19, 42, 1, 0, 1 +579, 686, 284, 251, 38, 38, 1, 2, 1 +579, 697, 474, 262, 71, 45, 1, 2, 1 +579, 711, 139, 298, 35, 76, 1, 0, 1 +579, 713, 575, 303, 119, 73, 1, 2, 1 +579, 720, 381, 247, 34, 24, 1, 2, 1 +579, 721, 49, 409, 66, 129, 1, 0, 1 +579, 722, 709, 307, 130, 74, 1, 2, 1 +579, 734, 909, 293, 28, 89, 1, 0, 1 +579, 735, 633, 267, 17, 38, 1, 0, 1 +579, 736, 277, 230, 31, 20, 1, 2, 1 +579, 737, 948, 379, 11, 42, 1, 2, 1 +580, 686, 278, 250, 40, 39, 1, 2, 1 +580, 697, 471, 262, 72, 46, 1, 2, 1 +580, 711, 131, 299, 36, 75, 1, 0, 1 +580, 713, 573, 304, 121, 74, 1, 2, 1 +580, 720, 379, 248, 33, 23, 1, 2, 1 +580, 721, 36, 412, 64, 124, 1, 0, 1 +580, 722, 706, 308, 130, 73, 1, 2, 1 +580, 734, 905, 296, 27, 87, 1, 0, 1 +580, 735, 629, 263, 19, 42, 1, 0, 1 +580, 736, 274, 231, 30, 19, 1, 2, 1 +580, 737, 948, 381, 11, 41, 1, 2, 1 +581, 686, 273, 249, 40, 40, 1, 2, 1 +581, 697, 469, 263, 73, 46, 1, 2, 1 +581, 711, 122, 299, 37, 78, 1, 0, 1 +581, 713, 572, 305, 122, 75, 1, 2, 1 +581, 720, 376, 248, 34, 23, 1, 2, 1 +581, 721, 20, 415, 65, 121, 1, 0, 1 +581, 722, 704, 308, 131, 74, 1, 2, 1 +581, 734, 901, 299, 28, 85, 1, 0, 1 +581, 735, 627, 266, 18, 38, 1, 0, 1 +581, 737, 948, 382, 11, 41, 1, 2, 1 +582, 686, 270, 248, 39, 40, 1, 2, 1 +582, 697, 468, 263, 72, 46, 1, 2, 1 +582, 711, 113, 299, 37, 79, 1, 0, 1 +582, 713, 572, 306, 122, 75, 1, 2, 1 +582, 720, 373, 247, 34, 24, 1, 2, 1 +582, 721, 6, 416, 66, 122, 1, 0, 1 +582, 722, 702, 309, 132, 74, 1, 2, 1 +582, 734, 898, 300, 27, 85, 1, 0, 1 +582, 735, 625, 265, 18, 41, 1, 0, 1 +582, 736, 264, 229, 31, 20, 1, 2, 1 +583, 686, 265, 249, 40, 39, 1, 2, 1 +583, 697, 466, 262, 73, 47, 1, 2, 1 +583, 711, 106, 300, 37, 79, 1, 0, 1 +583, 713, 572, 307, 123, 76, 1, 2, 1 +583, 720, 370, 247, 35, 24, 1, 2, 1 +583, 721, 0, 419, 62, 118, 1, 0, 1 +583, 722, 699, 308, 134, 75, 1, 2, 1 +583, 734, 894, 294, 30, 92, 1, 0, 1 +583, 736, 260, 228, 34, 21, 1, 2, 1 +584, 686, 262, 249, 38, 37, 1, 2, 1 +584, 697, 465, 262, 74, 47, 1, 2, 1 +584, 711, 98, 300, 38, 82, 1, 0, 1 +584, 713, 570, 306, 127, 79, 1, 2, 1 +584, 720, 368, 247, 35, 24, 1, 2, 1 +584, 721, 0, 419, 54, 118, 1, 0, 1 +584, 722, 697, 308, 135, 75, 1, 2, 1 +584, 734, 892, 293, 30, 94, 1, 0, 1 +584, 736, 255, 227, 33, 21, 1, 2, 1 +585, 686, 257, 248, 39, 38, 1, 2, 1 +585, 697, 464, 262, 74, 47, 1, 2, 1 +585, 711, 90, 301, 40, 84, 1, 0, 1 +585, 713, 570, 307, 129, 80, 1, 2, 1 +585, 720, 366, 247, 35, 24, 1, 2, 1 +585, 721, 0, 422, 44, 115, 1, 0, 1 +585, 722, 694, 308, 136, 76, 1, 2, 1 +585, 734, 889, 285, 32, 101, 1, 0, 1 +585, 735, 618, 265, 17, 36, 1, 0, 1 +585, 736, 253, 227, 33, 21, 1, 2, 1 +586, 686, 253, 248, 40, 39, 1, 2, 1 +586, 697, 462, 261, 76, 49, 1, 2, 1 +586, 711, 83, 301, 40, 86, 1, 0, 1 +586, 713, 569, 308, 132, 81, 1, 2, 1 +586, 720, 364, 247, 34, 23, 1, 2, 1 +586, 721, 0, 423, 32, 114, 1, 0, 1 +586, 722, 692, 308, 138, 76, 1, 2, 1 +586, 734, 887, 284, 33, 101, 1, 0, 1 +586, 735, 616, 262, 18, 40, 1, 0, 1 +586, 736, 252, 226, 35, 23, 1, 2, 1 +587, 686, 249, 248, 40, 39, 1, 2, 1 +587, 697, 460, 261, 77, 49, 1, 2, 1 +587, 711, 76, 303, 40, 85, 1, 0, 1 +587, 713, 570, 308, 134, 83, 1, 2, 1 +587, 720, 362, 247, 35, 23, 1, 2, 1 +587, 722, 691, 307, 140, 77, 1, 2, 1 +587, 734, 886, 286, 31, 97, 1, 0, 1 +587, 735, 613, 261, 19, 42, 1, 0, 1 +587, 736, 251, 225, 36, 23, 1, 2, 1 +588, 686, 246, 248, 39, 38, 1, 2, 1 +588, 697, 459, 261, 78, 50, 1, 2, 1 +588, 711, 70, 303, 40, 87, 1, 0, 1 +588, 713, 570, 309, 137, 85, 1, 2, 1 +588, 720, 360, 247, 35, 23, 1, 2, 1 +588, 722, 691, 308, 140, 77, 1, 2, 1 +588, 734, 886, 288, 30, 93, 1, 0, 1 +588, 735, 613, 266, 16, 36, 1, 0, 1 +588, 736, 244, 225, 33, 22, 1, 2, 1 +589, 686, 242, 248, 40, 38, 1, 2, 1 +589, 697, 458, 262, 78, 50, 1, 2, 1 +589, 711, 63, 305, 40, 88, 1, 0, 1 +589, 713, 571, 311, 140, 86, 1, 2, 1 +589, 720, 358, 246, 36, 25, 1, 2, 1 +589, 722, 690, 307, 142, 79, 1, 2, 1 +589, 734, 884, 288, 30, 91, 1, 0, 1 +589, 735, 612, 266, 16, 36, 1, 0, 1 +589, 736, 240, 225, 34, 21, 1, 2, 1 +590, 686, 240, 248, 39, 38, 1, 2, 1 +590, 697, 456, 261, 80, 51, 1, 2, 1 +590, 711, 55, 304, 42, 89, 1, 0, 1 +590, 713, 572, 312, 142, 88, 1, 2, 1 +590, 720, 356, 246, 37, 25, 1, 2, 1 +590, 722, 690, 307, 143, 80, 1, 2, 1 +590, 734, 883, 289, 29, 88, 1, 0, 1 +590, 735, 611, 264, 16, 37, 1, 0, 1 +590, 736, 240, 226, 32, 21, 1, 2, 1 +590, 745, 250, 226, 42, 26, 1, 2, 1 +591, 686, 237, 249, 38, 37, 1, 2, 1 +591, 697, 456, 262, 81, 51, 1, 2, 1 +591, 711, 48, 305, 41, 91, 1, 0, 1 +591, 713, 574, 314, 144, 89, 1, 2, 1 +591, 720, 355, 246, 39, 26, 1, 2, 1 +591, 722, 689, 308, 144, 80, 1, 2, 1 +591, 734, 882, 289, 28, 87, 1, 0, 1 +591, 735, 610, 261, 18, 42, 1, 0, 1 +591, 736, 240, 225, 35, 23, 1, 2, 1 +591, 745, 249, 226, 43, 27, 1, 2, 1 +592, 686, 234, 248, 38, 37, 1, 2, 1 +592, 697, 455, 262, 83, 52, 1, 2, 1 +592, 711, 41, 307, 42, 91, 1, 0, 1 +592, 713, 576, 316, 147, 90, 1, 2, 1 +592, 720, 354, 247, 39, 25, 1, 2, 1 +592, 722, 689, 307, 145, 81, 1, 2, 1 +592, 734, 881, 288, 29, 87, 1, 0, 1 +592, 735, 608, 259, 18, 43, 1, 0, 1 +592, 736, 239, 224, 38, 24, 1, 2, 1 +593, 686, 231, 248, 39, 38, 1, 2, 1 +593, 697, 455, 262, 84, 53, 1, 2, 1 +593, 711, 34, 308, 42, 92, 1, 0, 1 +593, 713, 579, 317, 152, 93, 1, 2, 1 +593, 720, 353, 247, 40, 26, 1, 2, 1 +593, 722, 688, 309, 147, 82, 1, 2, 1 +593, 734, 881, 290, 29, 87, 1, 0, 1 +593, 735, 607, 257, 20, 46, 1, 0, 1 +593, 736, 237, 224, 39, 25, 1, 2, 1 +594, 686, 229, 247, 39, 39, 1, 2, 1 +594, 697, 457, 262, 84, 53, 1, 2, 1 +594, 711, 28, 309, 42, 93, 1, 0, 1 +594, 713, 582, 319, 154, 94, 1, 2, 1 +594, 720, 352, 247, 40, 26, 1, 2, 1 +594, 722, 688, 309, 149, 83, 1, 2, 1 +594, 734, 881, 290, 29, 88, 1, 0, 1 +594, 735, 607, 258, 19, 45, 1, 0, 1 +594, 736, 238, 224, 39, 25, 1, 2, 1 +595, 686, 228, 248, 38, 37, 1, 2, 1 +595, 697, 459, 264, 83, 52, 1, 2, 1 +595, 711, 21, 310, 43, 93, 1, 0, 1 +595, 713, 584, 321, 159, 97, 1, 2, 1 +595, 720, 351, 247, 41, 27, 1, 2, 1 +595, 722, 690, 310, 148, 84, 1, 2, 1 +595, 734, 879, 292, 30, 87, 1, 0, 1 +595, 735, 607, 258, 19, 46, 1, 0, 1 +595, 736, 239, 225, 39, 25, 1, 2, 1 +595, 748, 442, 261, 34, 32, 1, 2, 1 +596, 686, 226, 247, 37, 37, 1, 2, 1 +596, 697, 460, 263, 84, 53, 1, 2, 1 +596, 711, 15, 312, 43, 93, 1, 0, 1 +596, 713, 586, 322, 165, 100, 1, 2, 1 +596, 720, 351, 248, 41, 26, 1, 2, 1 +596, 722, 691, 310, 151, 84, 1, 2, 1 +596, 734, 878, 291, 32, 88, 1, 0, 1 +596, 735, 608, 259, 19, 45, 1, 0, 1 +596, 736, 236, 224, 41, 27, 1, 2, 1 +596, 748, 443, 261, 34, 32, 1, 2, 1 +597, 686, 224, 246, 37, 37, 1, 2, 1 +597, 697, 461, 263, 85, 54, 1, 2, 1 +597, 711, 8, 311, 44, 96, 1, 0, 1 +597, 713, 590, 324, 169, 102, 1, 2, 1 +597, 720, 351, 247, 42, 27, 1, 2, 1 +597, 722, 693, 310, 151, 85, 1, 2, 1 +597, 734, 880, 294, 31, 84, 1, 0, 1 +597, 735, 609, 258, 18, 45, 1, 0, 1 +597, 736, 235, 225, 41, 27, 1, 2, 1 +597, 748, 443, 260, 34, 32, 1, 2, 1 +598, 686, 222, 247, 37, 37, 1, 2, 1 +598, 697, 464, 265, 83, 53, 1, 2, 1 +598, 711, 1, 317, 44, 96, 1, 0, 1 +598, 713, 594, 325, 176, 106, 1, 2, 1 +598, 720, 351, 248, 42, 27, 1, 2, 1 +598, 722, 696, 310, 152, 85, 1, 2, 1 +598, 734, 881, 294, 32, 84, 1, 0, 1 +598, 735, 609, 257, 18, 46, 1, 0, 1 +598, 736, 233, 224, 42, 28, 1, 2, 1 +598, 745, 232, 229, 32, 21, 1, 2, 1 +598, 748, 442, 261, 34, 32, 1, 2, 1 +599, 686, 220, 246, 37, 38, 1, 2, 1 +599, 697, 465, 266, 85, 53, 1, 2, 1 +599, 711, 0, 319, 41, 97, 1, 0, 1 +599, 713, 597, 325, 183, 111, 1, 2, 1 +599, 720, 351, 248, 43, 27, 1, 2, 1 +599, 722, 697, 310, 153, 85, 1, 2, 1 +599, 734, 882, 293, 34, 86, 1, 0, 1 +599, 735, 609, 256, 19, 48, 1, 0, 1 +599, 745, 230, 230, 32, 20, 1, 2, 1 +599, 748, 441, 260, 36, 33, 1, 2, 1 +599, 753, 251, 238, 25, 19, 1, 2, 1 +600, 686, 219, 247, 37, 37, 1, 2, 1 +600, 697, 468, 268, 83, 52, 1, 2, 1 +600, 711, 0, 322, 37, 97, 1, 0, 1 +600, 713, 603, 326, 189, 113, 1, 2, 1 +600, 720, 351, 248, 45, 28, 1, 2, 1 +600, 722, 697, 309, 157, 88, 1, 2, 1 +600, 734, 885, 291, 35, 88, 1, 0, 1 +600, 735, 610, 256, 19, 48, 1, 0, 1 +600, 748, 443, 262, 36, 32, 1, 2, 1 +600, 753, 251, 239, 24, 18, 1, 2, 1 +601, 686, 218, 248, 37, 37, 1, 2, 1 +601, 697, 468, 266, 87, 55, 1, 2, 1 +601, 711, 0, 324, 33, 97, 1, 0, 1 +601, 713, 608, 328, 193, 115, 1, 2, 1 +601, 720, 353, 249, 43, 27, 1, 2, 1 +601, 722, 698, 309, 158, 89, 1, 2, 1 +601, 734, 888, 289, 35, 90, 1, 0, 1 +601, 735, 612, 256, 19, 48, 1, 0, 1 +601, 745, 231, 231, 30, 19, 1, 2, 1 +601, 748, 442, 261, 37, 33, 1, 2, 1 +601, 753, 249, 238, 24, 19, 1, 2, 1 +602, 686, 217, 247, 37, 38, 1, 2, 1 +602, 697, 469, 265, 91, 58, 1, 2, 1 +602, 711, 0, 328, 29, 94, 1, 0, 1 +602, 713, 613, 330, 202, 120, 1, 2, 1 +602, 720, 353, 249, 44, 27, 1, 2, 1 +602, 722, 701, 311, 157, 87, 1, 2, 1 +602, 734, 891, 290, 34, 88, 1, 0, 1 +602, 735, 613, 256, 19, 49, 1, 0, 1 +602, 745, 230, 230, 33, 21, 1, 2, 1 +602, 748, 441, 262, 39, 33, 1, 2, 1 +602, 753, 247, 238, 24, 19, 1, 2, 1 +603, 686, 216, 247, 38, 38, 1, 2, 1 +603, 697, 471, 264, 92, 59, 1, 2, 1 +603, 711, 0, 334, 25, 92, 1, 0, 1 +603, 713, 617, 331, 214, 127, 1, 2, 1 +603, 720, 353, 249, 45, 28, 1, 2, 1 +603, 722, 704, 311, 158, 88, 1, 2, 1 +603, 734, 893, 288, 35, 90, 1, 0, 1 +603, 735, 613, 256, 19, 49, 1, 0, 1 +603, 736, 233, 229, 34, 23, 1, 2, 1 +603, 745, 229, 231, 32, 20, 1, 2, 1 +603, 748, 441, 262, 40, 33, 1, 2, 1 +603, 753, 246, 238, 25, 20, 1, 2, 1 +604, 686, 215, 248, 37, 37, 1, 2, 1 +604, 697, 472, 265, 93, 60, 1, 2, 1 +604, 711, 0, 336, 19, 92, 1, 0, 1 +604, 713, 623, 332, 224, 133, 1, 2, 1 +604, 720, 354, 250, 46, 28, 1, 2, 1 +604, 722, 705, 312, 161, 89, 1, 2, 1 +604, 734, 894, 283, 36, 97, 1, 0, 1 +604, 735, 615, 255, 19, 49, 1, 0, 1 +604, 736, 232, 229, 34, 23, 1, 2, 1 +604, 748, 441, 262, 41, 34, 1, 2, 1 +604, 753, 245, 240, 25, 19, 1, 2, 1 +605, 686, 214, 248, 37, 37, 1, 2, 1 +605, 697, 475, 265, 92, 60, 1, 2, 1 +605, 713, 630, 334, 233, 138, 1, 2, 1 +605, 720, 355, 250, 46, 29, 1, 2, 1 +605, 722, 707, 311, 162, 90, 1, 2, 1 +605, 734, 897, 282, 35, 99, 1, 0, 1 +605, 735, 617, 255, 18, 49, 1, 0, 1 +605, 748, 441, 262, 41, 34, 1, 2, 1 +605, 753, 245, 241, 24, 18, 1, 2, 1 +606, 686, 213, 248, 36, 37, 1, 2, 1 +606, 697, 476, 265, 93, 60, 1, 2, 1 +606, 713, 639, 336, 241, 143, 1, 2, 1 +606, 720, 355, 251, 46, 28, 1, 2, 1 +606, 722, 708, 311, 165, 91, 1, 2, 1 +606, 734, 898, 281, 36, 100, 1, 0, 1 +606, 735, 618, 254, 18, 49, 1, 0, 1 +606, 748, 441, 262, 42, 34, 1, 2, 1 +606, 753, 245, 241, 23, 18, 1, 2, 1 +607, 686, 212, 247, 37, 37, 1, 2, 1 +607, 697, 478, 265, 94, 61, 1, 2, 1 +607, 713, 645, 339, 251, 149, 1, 2, 1 +607, 720, 356, 250, 47, 28, 1, 2, 1 +607, 722, 710, 311, 169, 93, 1, 2, 1 +607, 735, 619, 254, 18, 49, 1, 0, 1 +607, 748, 442, 262, 42, 33, 1, 2, 1 +607, 753, 244, 240, 24, 18, 1, 2, 1 +608, 686, 211, 245, 38, 38, 1, 2, 1 +608, 697, 481, 266, 95, 61, 1, 2, 1 +608, 713, 655, 344, 259, 152, 1, 2, 1 +608, 720, 357, 250, 47, 29, 1, 2, 1 +608, 722, 710, 313, 174, 95, 1, 2, 1 +608, 735, 621, 254, 18, 50, 1, 0, 1 +608, 748, 442, 262, 43, 33, 1, 2, 1 +608, 753, 246, 240, 23, 18, 1, 2, 1 +609, 686, 211, 244, 36, 38, 1, 2, 1 +609, 697, 484, 267, 93, 60, 1, 2, 1 +609, 713, 663, 348, 274, 161, 1, 2, 1 +609, 720, 358, 250, 48, 29, 1, 2, 1 +609, 722, 713, 313, 175, 96, 1, 2, 1 +609, 735, 622, 255, 18, 50, 1, 0, 1 +609, 748, 442, 262, 44, 33, 1, 2, 1 +609, 753, 247, 239, 22, 18, 1, 2, 1 +610, 686, 210, 244, 36, 36, 1, 2, 1 +610, 697, 486, 267, 96, 62, 1, 2, 1 +610, 713, 668, 352, 285, 168, 1, 2, 1 +610, 720, 359, 249, 49, 30, 1, 2, 1 +610, 722, 714, 314, 181, 99, 1, 2, 1 +610, 735, 624, 256, 18, 48, 1, 0, 1 +610, 736, 233, 230, 32, 21, 1, 2, 1 +610, 748, 442, 262, 46, 34, 1, 2, 1 +610, 753, 246, 237, 23, 18, 1, 2, 1 +611, 686, 209, 242, 36, 37, 1, 2, 1 +611, 697, 487, 267, 98, 63, 1, 2, 1 +611, 713, 671, 358, 288, 173, 1, 2, 1 +611, 720, 361, 250, 48, 29, 1, 2, 1 +611, 722, 712, 316, 194, 105, 1, 2, 1 +611, 734, 903, 284, 37, 105, 1, 0, 1 +611, 735, 625, 257, 18, 49, 1, 0, 1 +611, 736, 233, 230, 31, 21, 1, 2, 1 +611, 748, 442, 262, 47, 34, 1, 2, 1 +611, 753, 246, 237, 23, 18, 1, 2, 1 +612, 686, 209, 242, 36, 37, 1, 2, 1 +612, 697, 490, 266, 100, 65, 1, 2, 1 +612, 713, 677, 362, 282, 175, 1, 2, 1 +612, 720, 363, 250, 48, 29, 1, 2, 1 +612, 722, 734, 317, 150, 76, 1, 2, 1 +612, 734, 906, 289, 34, 102, 1, 0, 1 +612, 735, 627, 258, 18, 48, 1, 0, 1 +612, 748, 443, 261, 47, 35, 1, 2, 1 +612, 753, 246, 235, 23, 19, 1, 2, 1 +613, 686, 208, 241, 36, 36, 1, 2, 1 +613, 697, 492, 266, 101, 66, 1, 2, 1 +613, 713, 689, 369, 270, 170, 1, 2, 1 +613, 720, 363, 250, 50, 28, 1, 2, 1 +613, 722, 740, 319, 147, 73, 1, 2, 1 +613, 734, 910, 293, 32, 97, 1, 0, 1 +613, 735, 628, 258, 17, 49, 1, 0, 1 +613, 748, 442, 261, 49, 35, 1, 2, 1 +613, 753, 245, 234, 23, 19, 1, 2, 1 +614, 686, 207, 240, 37, 37, 1, 2, 1 +614, 697, 494, 266, 102, 67, 1, 2, 1 +614, 713, 700, 376, 259, 163, 1, 2, 1 +614, 720, 364, 250, 51, 29, 1, 2, 1 +614, 722, 744, 321, 157, 76, 1, 2, 1 +614, 734, 915, 296, 32, 97, 1, 0, 1 +614, 735, 629, 259, 17, 48, 1, 0, 1 +614, 748, 443, 261, 49, 35, 1, 2, 1 +614, 753, 245, 234, 23, 19, 1, 2, 1 +615, 686, 206, 238, 38, 39, 1, 2, 1 +615, 697, 496, 267, 104, 68, 1, 2, 1 +615, 713, 711, 381, 248, 158, 1, 2, 1 +615, 720, 365, 250, 52, 29, 1, 2, 1 +615, 722, 735, 318, 177, 85, 1, 0, 1 +615, 734, 919, 299, 31, 97, 1, 0, 1 +615, 735, 630, 260, 18, 47, 1, 0, 1 +615, 748, 443, 262, 49, 34, 1, 2, 1 +615, 753, 244, 234, 24, 20, 1, 2, 1 +615, 770, 129, 250, 27, 70, 1, 0, 1 +616, 686, 206, 239, 37, 38, 1, 2, 1 +616, 697, 498, 269, 105, 68, 1, 2, 1 +616, 713, 725, 390, 234, 149, 1, 2, 1 +616, 720, 366, 250, 52, 30, 1, 2, 1 +616, 722, 737, 318, 179, 86, 1, 0, 1 +616, 734, 922, 300, 32, 100, 1, 0, 1 +616, 735, 632, 261, 18, 48, 1, 0, 1 +616, 748, 442, 263, 51, 34, 1, 2, 1 +616, 753, 244, 234, 24, 20, 1, 2, 1 +616, 770, 129, 256, 24, 64, 1, 0, 1 +617, 686, 206, 238, 37, 39, 1, 2, 1 +617, 697, 501, 271, 105, 68, 1, 2, 1 +617, 713, 740, 397, 219, 142, 1, 2, 1 +617, 720, 367, 251, 53, 30, 1, 2, 1 +617, 722, 742, 326, 183, 87, 1, 2, 1 +617, 734, 924, 300, 33, 102, 1, 0, 1 +617, 735, 634, 263, 18, 48, 1, 0, 1 +617, 748, 442, 264, 51, 34, 1, 2, 1 +617, 753, 243, 234, 25, 20, 1, 2, 1 +617, 770, 127, 258, 24, 62, 1, 0, 1 +618, 686, 205, 239, 37, 37, 1, 2, 1 +618, 697, 503, 272, 105, 69, 1, 2, 1 +618, 713, 756, 406, 203, 133, 1, 2, 1 +618, 720, 367, 251, 54, 31, 1, 2, 1 +618, 722, 744, 330, 190, 89, 1, 2, 1 +618, 734, 926, 301, 33, 104, 1, 0, 1 +618, 735, 635, 264, 18, 49, 1, 0, 1 +618, 748, 442, 265, 51, 34, 1, 2, 1 +618, 753, 243, 234, 24, 20, 1, 2, 1 +618, 770, 124, 253, 26, 68, 1, 0, 1 +619, 686, 204, 238, 37, 38, 1, 2, 1 +619, 697, 504, 273, 108, 71, 1, 2, 1 +619, 713, 772, 415, 187, 123, 1, 2, 1 +619, 720, 368, 251, 55, 31, 1, 2, 1 +619, 722, 741, 332, 204, 96, 1, 2, 1 +619, 734, 928, 302, 31, 102, 1, 0, 1 +619, 735, 636, 265, 18, 49, 1, 0, 1 +619, 748, 441, 265, 53, 35, 1, 2, 1 +619, 753, 242, 234, 24, 20, 1, 2, 1 +619, 770, 122, 250, 27, 72, 1, 0, 1 +620, 686, 203, 238, 37, 38, 1, 2, 1 +620, 697, 507, 275, 109, 71, 1, 2, 1 +620, 713, 790, 424, 169, 113, 1, 2, 1 +620, 720, 370, 252, 53, 30, 1, 2, 1 +620, 722, 740, 334, 212, 99, 1, 2, 1 +620, 734, 929, 301, 30, 107, 1, 0, 1 +620, 735, 637, 265, 19, 50, 1, 0, 1 +620, 748, 441, 265, 55, 36, 1, 2, 1 +620, 753, 242, 234, 24, 20, 1, 2, 1 +620, 770, 120, 249, 28, 74, 1, 0, 1 +621, 686, 203, 238, 37, 38, 1, 2, 1 +621, 697, 508, 276, 111, 72, 1, 2, 1 +621, 713, 808, 433, 151, 104, 1, 2, 1 +621, 720, 370, 252, 55, 31, 1, 2, 1 +621, 722, 738, 334, 221, 107, 1, 2, 1 +621, 734, 932, 304, 27, 105, 1, 0, 1 +621, 735, 640, 266, 18, 50, 1, 0, 1 +621, 748, 441, 266, 55, 36, 1, 2, 1 +621, 753, 243, 234, 23, 20, 1, 2, 1 +621, 770, 120, 251, 27, 73, 1, 0, 1 +622, 686, 202, 239, 37, 37, 1, 2, 1 +622, 697, 510, 277, 113, 74, 1, 2, 1 +622, 713, 828, 442, 131, 95, 1, 2, 1 +622, 720, 370, 252, 57, 32, 1, 2, 1 +622, 722, 736, 335, 223, 113, 1, 2, 1 +622, 734, 935, 305, 24, 101, 1, 0, 1 +622, 735, 641, 267, 18, 50, 1, 0, 1 +622, 748, 441, 266, 56, 36, 1, 2, 1 +622, 753, 243, 235, 23, 19, 1, 2, 1 +622, 770, 119, 254, 26, 70, 1, 0, 1 +623, 686, 202, 240, 36, 36, 1, 2, 1 +623, 697, 513, 277, 115, 75, 1, 2, 1 +623, 713, 841, 449, 118, 89, 1, 2, 1 +623, 720, 372, 253, 56, 31, 1, 2, 1 +623, 722, 735, 335, 224, 117, 1, 2, 1 +623, 734, 938, 303, 21, 100, 1, 0, 1 +623, 735, 643, 266, 18, 51, 1, 0, 1 +623, 748, 441, 267, 56, 36, 1, 2, 1 +623, 753, 242, 236, 23, 20, 1, 2, 1 +623, 770, 118, 253, 27, 73, 1, 0, 1 +624, 686, 202, 240, 36, 36, 1, 2, 1 +624, 697, 517, 278, 115, 75, 1, 2, 1 +624, 720, 374, 253, 56, 31, 1, 2, 1 +624, 722, 736, 336, 223, 121, 1, 2, 1 +624, 734, 940, 304, 19, 100, 1, 0, 1 +624, 735, 645, 265, 18, 51, 1, 0, 1 +624, 748, 442, 267, 56, 36, 1, 2, 1 +624, 753, 242, 236, 23, 19, 1, 2, 1 +624, 770, 118, 259, 25, 67, 1, 0, 1 +625, 686, 202, 242, 36, 35, 1, 2, 1 +625, 697, 519, 279, 119, 77, 1, 2, 1 +625, 720, 375, 255, 58, 32, 1, 2, 1 +625, 722, 739, 337, 220, 122, 1, 2, 1 +625, 735, 648, 267, 19, 52, 1, 0, 1 +625, 748, 443, 268, 56, 36, 1, 2, 1 +625, 753, 243, 239, 22, 18, 1, 2, 1 +625, 770, 117, 262, 25, 65, 1, 0, 1 +626, 686, 202, 241, 37, 36, 1, 2, 1 +626, 697, 523, 278, 120, 79, 1, 2, 1 +626, 720, 377, 255, 57, 31, 1, 2, 1 +626, 722, 742, 337, 217, 123, 1, 2, 1 +626, 735, 651, 266, 19, 53, 1, 0, 1 +626, 748, 445, 267, 56, 36, 1, 2, 1 +626, 753, 244, 237, 22, 19, 1, 2, 1 +626, 770, 117, 265, 24, 62, 1, 0, 1 +627, 686, 202, 242, 36, 36, 1, 2, 1 +627, 697, 526, 278, 122, 79, 1, 2, 1 +627, 720, 378, 255, 58, 33, 1, 2, 1 +627, 722, 746, 335, 213, 126, 1, 2, 1 +627, 735, 653, 265, 20, 54, 1, 0, 1 +627, 748, 445, 268, 57, 35, 1, 2, 1 +627, 753, 244, 239, 22, 19, 1, 2, 1 +627, 770, 118, 269, 23, 61, 1, 0, 1 +628, 686, 203, 243, 36, 35, 1, 2, 1 +628, 697, 530, 278, 123, 81, 1, 2, 1 +628, 720, 380, 256, 59, 33, 1, 2, 1 +628, 722, 749, 337, 210, 127, 1, 2, 1 +628, 735, 656, 265, 20, 55, 1, 0, 1 +628, 748, 446, 268, 58, 37, 1, 2, 1 +628, 753, 246, 239, 22, 19, 1, 2, 1 +628, 770, 118, 272, 22, 59, 1, 0, 1 +629, 686, 203, 244, 36, 35, 1, 2, 1 +629, 697, 534, 278, 124, 82, 1, 2, 1 +629, 720, 382, 256, 60, 33, 1, 2, 1 +629, 722, 754, 336, 205, 129, 1, 2, 1 +629, 735, 659, 264, 20, 55, 1, 0, 1 +629, 748, 447, 268, 60, 37, 1, 2, 1 +629, 753, 247, 241, 22, 19, 1, 2, 1 +629, 770, 118, 275, 23, 58, 1, 0, 1 +630, 686, 205, 246, 36, 34, 1, 2, 1 +630, 697, 538, 278, 127, 83, 1, 2, 1 +630, 720, 386, 256, 59, 33, 1, 2, 1 +630, 722, 759, 337, 200, 130, 1, 2, 1 +630, 735, 664, 265, 19, 53, 1, 0, 1 +630, 748, 449, 268, 60, 38, 1, 2, 1 +630, 753, 248, 241, 23, 19, 1, 2, 1 +630, 770, 118, 276, 24, 58, 1, 0, 1 +631, 686, 207, 246, 35, 34, 1, 2, 1 +631, 697, 543, 278, 129, 85, 1, 2, 1 +631, 720, 388, 256, 60, 33, 1, 2, 1 +631, 722, 764, 337, 195, 133, 1, 2, 1 +631, 735, 668, 265, 19, 54, 1, 0, 1 +631, 748, 451, 268, 60, 37, 1, 2, 1 +631, 753, 249, 241, 23, 19, 1, 2, 1 +631, 770, 118, 275, 24, 59, 1, 0, 1 +632, 686, 207, 245, 37, 35, 1, 2, 1 +632, 697, 548, 280, 130, 85, 1, 2, 1 +632, 720, 391, 256, 60, 33, 1, 2, 1 +632, 722, 769, 339, 190, 133, 1, 2, 1 +632, 735, 672, 266, 20, 55, 1, 0, 1 +632, 748, 453, 268, 60, 38, 1, 2, 1 +632, 753, 252, 242, 22, 19, 1, 2, 1 +632, 770, 118, 274, 25, 61, 1, 0, 1 +633, 686, 208, 245, 38, 36, 1, 2, 1 +633, 697, 552, 280, 132, 87, 1, 2, 1 +633, 720, 393, 256, 60, 33, 1, 2, 1 +633, 722, 774, 341, 185, 134, 1, 2, 1 +633, 735, 675, 266, 20, 56, 1, 0, 1 +633, 748, 454, 267, 62, 39, 1, 2, 1 +633, 753, 253, 242, 23, 18, 1, 2, 1 +633, 770, 118, 271, 27, 66, 1, 0, 1 +634, 686, 209, 245, 37, 35, 1, 2, 1 +634, 697, 557, 281, 134, 88, 1, 2, 1 +634, 720, 395, 257, 61, 34, 1, 2, 1 +634, 722, 779, 343, 180, 138, 1, 2, 1 +634, 735, 680, 267, 20, 56, 1, 0, 1 +634, 748, 455, 267, 64, 40, 1, 2, 1 +634, 753, 253, 242, 24, 19, 1, 2, 1 +634, 770, 118, 271, 27, 67, 1, 0, 1 +635, 686, 210, 244, 38, 36, 1, 2, 1 +635, 697, 561, 281, 138, 91, 1, 2, 1 +635, 720, 398, 257, 61, 34, 1, 2, 1 +635, 722, 787, 345, 172, 138, 1, 2, 1 +635, 735, 683, 267, 21, 59, 1, 0, 1 +635, 748, 458, 268, 63, 39, 1, 2, 1 +635, 753, 255, 241, 24, 20, 1, 2, 1 +635, 770, 118, 267, 28, 71, 1, 0, 1 +636, 686, 212, 245, 37, 35, 1, 2, 1 +636, 697, 565, 282, 143, 94, 1, 2, 1 +636, 720, 400, 259, 63, 34, 1, 2, 1 +636, 722, 794, 348, 165, 138, 1, 2, 1 +636, 735, 687, 270, 21, 58, 1, 0, 1 +636, 748, 460, 270, 62, 38, 1, 2, 1 +636, 753, 257, 243, 24, 19, 1, 2, 1 +636, 770, 119, 270, 28, 68, 1, 0, 1 +637, 686, 213, 245, 37, 36, 1, 2, 1 +637, 697, 571, 283, 146, 97, 1, 2, 1 +637, 720, 403, 260, 62, 34, 1, 2, 1 +637, 722, 808, 352, 151, 130, 1, 2, 1 +637, 735, 692, 270, 20, 59, 1, 0, 1 +637, 748, 463, 271, 61, 38, 1, 2, 1 +637, 753, 259, 243, 24, 20, 1, 2, 1 +637, 770, 120, 271, 28, 68, 1, 0, 1 +638, 686, 215, 246, 37, 36, 1, 2, 1 +638, 697, 577, 286, 146, 97, 1, 2, 1 +638, 720, 406, 261, 62, 34, 1, 2, 1 +638, 722, 819, 355, 140, 124, 1, 2, 1 +638, 735, 697, 270, 21, 58, 1, 0, 1 +638, 748, 466, 273, 60, 37, 1, 2, 1 +638, 753, 260, 244, 25, 20, 1, 2, 1 +638, 770, 122, 270, 27, 69, 1, 0, 1 +639, 686, 217, 246, 36, 35, 1, 2, 1 +639, 697, 583, 288, 149, 99, 1, 2, 1 +639, 720, 410, 262, 61, 34, 1, 2, 1 +639, 722, 829, 359, 130, 119, 1, 2, 1 +639, 735, 702, 272, 20, 57, 1, 0, 1 +639, 748, 468, 274, 63, 38, 1, 2, 1 +639, 753, 261, 244, 25, 20, 1, 2, 1 +639, 770, 123, 271, 28, 69, 1, 0, 1 +640, 686, 218, 248, 36, 34, 1, 2, 1 +640, 697, 589, 291, 150, 100, 1, 2, 1 +640, 720, 412, 263, 61, 34, 1, 2, 1 +640, 722, 837, 361, 122, 120, 1, 2, 1 +640, 735, 705, 272, 21, 58, 1, 0, 1 +640, 748, 470, 275, 64, 39, 1, 2, 1 +640, 753, 263, 245, 26, 21, 1, 2, 1 +640, 770, 124, 270, 28, 73, 1, 0, 1 +641, 686, 220, 249, 35, 34, 1, 2, 1 +641, 697, 594, 293, 153, 102, 1, 2, 1 +641, 720, 415, 264, 61, 34, 1, 2, 1 +641, 722, 847, 366, 112, 116, 1, 2, 1 +641, 748, 473, 275, 64, 40, 1, 2, 1 +641, 753, 265, 245, 25, 21, 1, 2, 1 +641, 770, 124, 271, 29, 73, 1, 0, 1 +642, 686, 222, 249, 35, 34, 1, 2, 1 +642, 697, 600, 295, 156, 104, 1, 2, 1 +642, 720, 418, 265, 63, 35, 1, 2, 1 +642, 722, 856, 370, 103, 115, 1, 2, 1 +642, 735, 718, 276, 20, 57, 1, 0, 1 +642, 748, 476, 276, 64, 40, 1, 2, 1 +642, 753, 267, 245, 25, 21, 1, 2, 1 +642, 770, 125, 271, 29, 74, 1, 0, 1 +643, 686, 224, 249, 36, 34, 1, 2, 1 +643, 697, 608, 298, 157, 104, 1, 2, 1 +643, 720, 422, 266, 62, 35, 1, 2, 1 +643, 722, 865, 376, 94, 113, 1, 2, 1 +643, 735, 724, 279, 20, 57, 1, 0, 1 +643, 748, 478, 277, 66, 41, 1, 2, 1 +643, 753, 270, 246, 25, 20, 1, 2, 1 +643, 770, 127, 274, 28, 71, 1, 0, 1 +644, 686, 227, 249, 35, 34, 1, 2, 1 +644, 697, 616, 299, 159, 106, 1, 2, 1 +644, 720, 424, 267, 64, 35, 1, 2, 1 +644, 722, 874, 379, 85, 113, 1, 2, 1 +644, 735, 729, 279, 21, 59, 1, 0, 1 +644, 748, 481, 278, 67, 41, 1, 2, 1 +644, 753, 272, 245, 25, 20, 1, 2, 1 +644, 770, 131, 282, 24, 63, 1, 0, 1 +645, 686, 229, 250, 36, 34, 1, 2, 1 +645, 697, 621, 301, 165, 110, 1, 2, 1 +645, 720, 427, 267, 64, 36, 1, 2, 1 +645, 722, 884, 383, 75, 115, 1, 2, 1 +645, 735, 737, 281, 19, 55, 1, 0, 1 +645, 748, 485, 279, 66, 41, 1, 2, 1 +645, 753, 273, 243, 28, 23, 1, 2, 1 +645, 770, 133, 283, 24, 63, 1, 0, 1 +646, 686, 232, 250, 35, 34, 1, 2, 1 +646, 697, 628, 301, 169, 113, 1, 2, 1 +646, 720, 431, 268, 63, 36, 1, 2, 1 +646, 722, 889, 386, 70, 114, 1, 2, 1 +646, 735, 741, 282, 20, 55, 1, 0, 1 +646, 748, 488, 279, 67, 42, 1, 2, 1 +646, 753, 276, 243, 28, 23, 1, 2, 1 +646, 770, 135, 284, 23, 62, 1, 0, 1 +647, 686, 234, 249, 35, 34, 1, 2, 1 +647, 697, 634, 302, 174, 116, 1, 2, 1 +647, 720, 434, 268, 64, 37, 1, 2, 1 +647, 748, 491, 279, 67, 42, 1, 2, 1 +647, 753, 279, 244, 26, 22, 1, 2, 1 +647, 770, 137, 283, 24, 64, 1, 0, 1 +648, 686, 237, 249, 35, 34, 1, 2, 1 +648, 697, 642, 304, 178, 119, 1, 2, 1 +648, 720, 438, 269, 64, 37, 1, 2, 1 +648, 748, 496, 280, 66, 41, 1, 2, 1 +648, 753, 282, 245, 26, 21, 1, 2, 1 +648, 770, 138, 281, 26, 67, 1, 0, 1 +649, 686, 241, 247, 34, 34, 1, 2, 1 +649, 697, 649, 306, 182, 122, 1, 2, 1 +649, 720, 442, 269, 64, 36, 1, 2, 1 +649, 748, 500, 280, 66, 41, 1, 2, 1 +649, 753, 284, 243, 27, 22, 1, 2, 1 +649, 770, 139, 276, 26, 70, 1, 0, 1 +650, 686, 242, 247, 35, 34, 1, 2, 1 +650, 697, 658, 306, 185, 124, 1, 2, 1 +650, 720, 445, 269, 63, 36, 1, 2, 1 +650, 748, 503, 280, 67, 41, 1, 2, 1 +650, 753, 287, 244, 27, 22, 1, 2, 1 +650, 770, 141, 279, 25, 67, 1, 0, 1 +651, 686, 245, 248, 34, 34, 1, 2, 1 +651, 697, 669, 308, 187, 125, 1, 2, 1 +651, 720, 448, 269, 64, 37, 1, 2, 1 +651, 748, 506, 280, 69, 43, 1, 2, 1 +651, 753, 291, 245, 26, 21, 1, 2, 1 +651, 770, 144, 279, 25, 69, 1, 0, 1 +652, 686, 249, 246, 33, 33, 1, 2, 1 +652, 697, 678, 307, 189, 126, 1, 2, 1 +652, 720, 453, 266, 64, 38, 1, 2, 1 +652, 748, 511, 279, 68, 42, 1, 2, 1 +652, 753, 295, 241, 26, 22, 1, 2, 1 +652, 770, 147, 273, 25, 71, 1, 0, 1 +653, 686, 252, 245, 34, 33, 1, 2, 1 +653, 697, 687, 307, 195, 129, 1, 2, 1 +653, 720, 457, 265, 64, 37, 1, 2, 1 +653, 748, 514, 277, 69, 43, 1, 2, 1 +653, 753, 299, 242, 25, 21, 1, 2, 1 +653, 770, 151, 272, 23, 66, 1, 0, 1 +654, 686, 255, 246, 34, 33, 1, 2, 1 +654, 697, 697, 306, 200, 132, 1, 2, 1 +654, 720, 461, 264, 63, 37, 1, 2, 1 +654, 748, 519, 275, 69, 43, 1, 2, 1 +654, 753, 301, 241, 25, 21, 1, 2, 1 +654, 770, 152, 268, 26, 76, 1, 0, 1 +655, 686, 259, 245, 33, 32, 1, 2, 1 +655, 697, 708, 306, 206, 135, 1, 2, 1 +655, 720, 467, 264, 62, 37, 1, 2, 1 +655, 748, 524, 276, 69, 42, 1, 2, 1 +655, 753, 306, 242, 25, 20, 1, 2, 1 +655, 770, 157, 264, 25, 73, 1, 0, 1 +656, 686, 265, 246, 32, 33, 1, 2, 1 +656, 697, 719, 306, 211, 138, 1, 2, 1 +656, 720, 472, 264, 63, 38, 1, 2, 1 +656, 748, 529, 276, 70, 43, 1, 2, 1 +656, 753, 309, 242, 26, 22, 1, 2, 1 +656, 770, 160, 267, 27, 78, 1, 0, 1 +657, 686, 268, 247, 34, 33, 1, 2, 1 +657, 697, 730, 309, 217, 142, 1, 2, 1 +657, 720, 477, 266, 63, 38, 1, 2, 1 +657, 748, 534, 278, 71, 43, 1, 2, 1 +657, 753, 313, 244, 26, 21, 1, 2, 1 +657, 770, 163, 263, 29, 86, 1, 0, 1 +658, 686, 272, 249, 33, 32, 1, 2, 1 +658, 697, 735, 311, 224, 146, 1, 2, 1 +658, 720, 482, 267, 64, 39, 1, 2, 1 +658, 748, 539, 280, 72, 43, 1, 2, 1 +658, 753, 319, 246, 23, 19, 1, 2, 1 +658, 770, 165, 262, 29, 88, 1, 0, 1 +659, 686, 277, 254, 32, 32, 1, 2, 1 +659, 697, 740, 316, 219, 151, 1, 2, 1 +659, 720, 489, 273, 61, 38, 1, 2, 1 +659, 748, 544, 284, 72, 44, 1, 2, 1 +659, 753, 324, 251, 23, 19, 1, 2, 1 +660, 686, 281, 256, 31, 31, 1, 2, 1 +660, 697, 745, 323, 214, 153, 1, 2, 1 +660, 720, 493, 276, 62, 38, 1, 2, 1 +660, 748, 548, 287, 73, 44, 1, 2, 1 +660, 753, 327, 253, 23, 19, 1, 2, 1 +661, 686, 284, 256, 31, 31, 1, 2, 1 +661, 697, 750, 327, 209, 157, 1, 2, 1 +661, 720, 497, 276, 62, 39, 1, 2, 1 +661, 748, 552, 289, 74, 45, 1, 2, 1 +661, 753, 331, 254, 22, 17, 1, 2, 1 +662, 686, 286, 256, 32, 31, 1, 2, 1 +662, 697, 754, 330, 205, 164, 1, 2, 1 +662, 720, 500, 278, 63, 39, 1, 2, 1 +662, 748, 555, 291, 75, 45, 1, 2, 1 +662, 753, 333, 254, 23, 18, 1, 2, 1 +662, 770, 186, 292, 23, 66, 1, 0, 1 +663, 686, 289, 255, 32, 32, 1, 2, 1 +663, 697, 759, 334, 200, 169, 1, 2, 1 +663, 720, 505, 279, 64, 40, 1, 2, 1 +663, 748, 560, 292, 76, 45, 1, 2, 1 +663, 753, 337, 254, 23, 18, 1, 2, 1 +663, 770, 191, 297, 20, 59, 1, 0, 1 +664, 686, 293, 254, 32, 32, 1, 2, 1 +664, 697, 765, 336, 194, 173, 1, 2, 1 +664, 720, 509, 279, 65, 41, 1, 2, 1 +664, 748, 565, 294, 76, 46, 1, 2, 1 +664, 753, 340, 253, 23, 18, 1, 2, 1 +664, 770, 195, 298, 21, 58, 1, 0, 1 +664, 789, 183, 264, 14, 37, 1, 0, 1 +665, 686, 296, 253, 32, 32, 1, 2, 1 +665, 720, 514, 280, 64, 41, 1, 2, 1 +665, 748, 570, 295, 75, 45, 1, 2, 1 +665, 753, 343, 252, 24, 18, 1, 2, 1 +665, 770, 199, 298, 22, 58, 1, 0, 1 +665, 789, 185, 263, 14, 38, 1, 0, 1 +666, 686, 299, 251, 33, 33, 1, 2, 1 +666, 720, 519, 281, 64, 40, 1, 2, 1 +666, 748, 574, 296, 77, 46, 1, 2, 1 +666, 753, 347, 252, 23, 18, 1, 2, 1 +666, 770, 202, 297, 23, 57, 1, 0, 1 +666, 789, 188, 262, 14, 37, 1, 0, 1 +667, 686, 303, 250, 32, 33, 1, 2, 1 +667, 720, 524, 281, 65, 42, 1, 2, 1 +667, 748, 578, 297, 78, 46, 1, 2, 1 +667, 753, 349, 250, 25, 20, 1, 2, 1 +667, 770, 204, 296, 25, 60, 1, 0, 1 +667, 789, 190, 260, 14, 39, 1, 0, 1 +668, 686, 307, 250, 31, 33, 1, 2, 1 +668, 720, 528, 281, 65, 42, 1, 2, 1 +668, 748, 584, 297, 79, 48, 1, 2, 1 +668, 753, 354, 250, 24, 19, 1, 2, 1 +668, 770, 206, 293, 28, 65, 1, 0, 1 +668, 789, 194, 260, 14, 38, 1, 0, 1 +669, 686, 311, 249, 31, 32, 1, 2, 1 +669, 720, 532, 281, 65, 42, 1, 2, 1 +669, 748, 588, 296, 82, 50, 1, 2, 1 +669, 753, 355, 248, 26, 19, 1, 2, 1 +669, 770, 211, 296, 28, 61, 1, 0, 1 +669, 789, 197, 259, 13, 36, 1, 0, 1 +670, 686, 315, 248, 32, 32, 1, 2, 1 +670, 720, 537, 281, 67, 44, 1, 2, 1 +670, 748, 593, 296, 82, 50, 1, 2, 1 +670, 753, 357, 245, 28, 21, 1, 2, 1 +670, 770, 214, 291, 33, 66, 1, 0, 1 +670, 789, 199, 256, 14, 39, 1, 0, 1 +670, 800, 666, 290, 30, 22, 1, 2, 1 +671, 686, 318, 246, 33, 33, 1, 2, 1 +671, 720, 542, 281, 66, 43, 1, 2, 1 +671, 748, 599, 297, 81, 48, 1, 2, 1 +671, 753, 364, 245, 25, 20, 1, 2, 1 +671, 770, 219, 291, 34, 65, 1, 0, 1 +671, 789, 201, 255, 15, 39, 1, 0, 1 +671, 800, 671, 288, 31, 23, 1, 2, 1 +672, 686, 322, 246, 31, 32, 1, 2, 1 +672, 720, 548, 280, 65, 43, 1, 2, 1 +672, 748, 604, 296, 83, 50, 1, 2, 1 +672, 753, 367, 244, 26, 21, 1, 2, 1 +672, 770, 225, 291, 35, 66, 1, 0, 1 +672, 789, 204, 253, 15, 39, 1, 0, 1 +672, 800, 678, 288, 31, 23, 1, 2, 1 +673, 686, 326, 246, 31, 31, 1, 2, 1 +673, 720, 554, 280, 64, 42, 1, 2, 1 +673, 748, 608, 295, 85, 51, 1, 2, 1 +673, 753, 371, 244, 26, 21, 1, 2, 1 +673, 770, 229, 291, 35, 67, 1, 0, 1 +673, 789, 208, 253, 14, 39, 1, 0, 1 +673, 800, 684, 287, 31, 23, 1, 2, 1 +673, 803, 269, 245, 12, 23, 1, 0, 1 +674, 686, 330, 243, 31, 31, 1, 2, 1 +674, 720, 558, 278, 65, 43, 1, 2, 1 +674, 748, 614, 294, 85, 51, 1, 2, 1 +674, 753, 376, 243, 25, 19, 1, 2, 1 +674, 789, 210, 251, 15, 38, 1, 0, 1 +674, 800, 689, 286, 31, 23, 1, 2, 1 +674, 803, 273, 242, 12, 23, 1, 0, 1 +675, 686, 333, 240, 31, 31, 1, 2, 1 +675, 720, 563, 278, 66, 43, 1, 2, 1 +675, 748, 618, 293, 87, 53, 1, 2, 1 +675, 753, 379, 240, 26, 21, 1, 2, 1 +675, 789, 213, 246, 15, 41, 1, 0, 1 +675, 800, 694, 287, 31, 23, 1, 2, 1 +675, 803, 276, 238, 12, 24, 1, 0, 1 +676, 686, 336, 240, 31, 31, 1, 2, 1 +676, 720, 567, 277, 68, 45, 1, 2, 1 +676, 748, 623, 292, 87, 53, 1, 2, 1 +676, 753, 381, 240, 26, 20, 1, 2, 1 +676, 789, 216, 248, 15, 40, 1, 0, 1 +676, 800, 698, 285, 33, 24, 1, 2, 1 +676, 803, 279, 239, 12, 24, 1, 0, 1 +677, 686, 341, 240, 30, 31, 1, 2, 1 +677, 720, 571, 278, 69, 45, 1, 2, 1 +677, 748, 629, 294, 88, 54, 1, 2, 1 +677, 753, 386, 241, 24, 19, 1, 2, 1 +677, 770, 262, 284, 36, 68, 1, 0, 1 +677, 789, 219, 246, 16, 41, 1, 0, 1 +677, 800, 706, 287, 31, 24, 1, 2, 1 +677, 803, 283, 239, 12, 23, 1, 0, 1 +678, 686, 345, 240, 31, 31, 1, 2, 1 +678, 720, 576, 279, 69, 46, 1, 2, 1 +678, 748, 634, 294, 90, 55, 1, 2, 1 +678, 753, 390, 242, 24, 19, 1, 2, 1 +678, 770, 267, 284, 37, 68, 1, 0, 1 +678, 789, 221, 246, 17, 43, 1, 0, 1 +678, 800, 712, 288, 32, 23, 1, 2, 1 +678, 803, 287, 240, 12, 23, 1, 0, 1 +679, 686, 348, 243, 31, 31, 1, 2, 1 +679, 720, 581, 280, 70, 47, 1, 2, 1 +679, 748, 639, 295, 90, 55, 1, 2, 1 +679, 753, 393, 243, 25, 20, 1, 2, 1 +679, 770, 277, 286, 37, 69, 1, 0, 1 +679, 789, 224, 251, 16, 41, 1, 0, 1 +679, 800, 718, 288, 31, 23, 1, 2, 1 +679, 803, 291, 243, 12, 23, 1, 0, 1 +680, 686, 352, 244, 31, 31, 1, 2, 1 +680, 720, 586, 283, 70, 47, 1, 2, 1 +680, 748, 645, 298, 90, 56, 1, 2, 1 +680, 753, 397, 244, 26, 20, 1, 2, 1 +680, 770, 284, 288, 35, 68, 1, 0, 1 +680, 789, 227, 252, 16, 40, 1, 0, 1 +680, 800, 723, 292, 33, 23, 1, 2, 1 +680, 803, 295, 243, 12, 23, 1, 0, 1 +681, 686, 355, 252, 30, 31, 1, 2, 1 +681, 720, 592, 288, 70, 48, 1, 2, 1 +681, 748, 650, 304, 91, 55, 1, 2, 1 +681, 753, 401, 244, 26, 20, 1, 2, 1 +681, 770, 289, 295, 36, 71, 1, 0, 1 +681, 789, 229, 259, 16, 42, 1, 0, 1 +681, 800, 728, 297, 31, 23, 1, 2, 1 +681, 803, 299, 243, 11, 23, 1, 0, 1 +682, 686, 357, 260, 30, 30, 1, 2, 1 +682, 720, 599, 289, 67, 45, 1, 2, 1 +682, 748, 658, 303, 89, 54, 1, 2, 1 +682, 770, 298, 305, 36, 69, 1, 0, 1 +682, 789, 231, 271, 16, 42, 1, 0, 1 +682, 800, 732, 293, 34, 24, 1, 2, 1 +683, 686, 360, 255, 30, 30, 1, 2, 1 +683, 720, 601, 287, 69, 46, 1, 2, 1 +683, 748, 661, 302, 91, 56, 1, 2, 1 +683, 753, 405, 248, 28, 21, 1, 2, 1 +683, 770, 305, 301, 34, 68, 1, 0, 1 +683, 789, 232, 264, 17, 42, 1, 0, 1 +683, 800, 734, 292, 37, 26, 1, 2, 1 +684, 686, 363, 249, 31, 31, 1, 2, 1 +684, 720, 604, 282, 72, 49, 1, 2, 1 +684, 748, 665, 299, 92, 56, 1, 2, 1 +684, 753, 407, 245, 27, 22, 1, 2, 1 +684, 770, 313, 299, 30, 62, 1, 0, 1 +684, 789, 234, 260, 16, 41, 1, 0, 1 +684, 800, 742, 290, 35, 25, 1, 2, 1 +684, 803, 304, 245, 13, 28, 1, 0, 1 diff --git a/Yolov5-Deepsort/niuzi.mp4 b/Yolov5-Deepsort/niuzi.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..f7ccbc70b3f6fb159dd97fabc2ee7068f29c20bc --- /dev/null +++ b/Yolov5-Deepsort/niuzi.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c29e6dcecff5ad08dcb96ca2a3f24860d2ab420bff194598ed51a674fc41447 +size 5859018 diff --git a/Yolov5-Deepsort/other_method.py b/Yolov5-Deepsort/other_method.py new file mode 100644 index 0000000000000000000000000000000000000000..63357d519a09e9972d8d6775f240fbed16dc737b --- /dev/null +++ b/Yolov5-Deepsort/other_method.py @@ -0,0 +1,46 @@ +import cv2 + +# Initialize video capture +cap = cv2.VideoCapture('mot.mp4') + +# Initialize tracker +tracker = cv2.TrackerCSRT_create() + +# Read the first frame +ret, frame = cap.read() +if not ret: + print("Failed to read video") + exit() + +# Detect initial bounding box +bbox = cv2.selectROI(frame, False) + +# Initialize tracker with first frame and bounding box +tracker.init(frame, bbox) + +while True: + ret, frame = cap.read() + if not ret: + break + + # Update tracker + success, bbox = tracker.update(frame) + + if success: + # Draw bounding box + p1 = (int(bbox[0]), int(bbox[1])) + p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3])) + cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1) + else: + # Tracking failure + cv2.putText(frame, "Tracking failure detected", (100,80), cv2.FONT_HERSHEY_SIMPLEX, 0.75,(0,0,255),2) + + # Display result + cv2.imshow("Tracking", frame) + + # Exit if ESC pressed + if cv2.waitKey(1) & 0xFF == 27: # ESC key + break + +cap.release() +cv2.destroyAllWindows() diff --git a/Yolov5-Deepsort/result.mp4 b/Yolov5-Deepsort/result.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..bd0ce22bd6b02a363521a3c2301c5e3c1fddc495 --- /dev/null +++ b/Yolov5-Deepsort/result.mp4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:363c4066a0672367bef8be6dfe6c882e709712911776644947d5f9813c9fa016 +size 23811638 diff --git a/Yolov5-Deepsort/su_demo.py b/Yolov5-Deepsort/su_demo.py new file mode 100644 index 0000000000000000000000000000000000000000..3c5b99ad9265b3f83aa2a0f26980177fde06d1bb --- /dev/null +++ b/Yolov5-Deepsort/su_demo.py @@ -0,0 +1,23 @@ +import cv2 +import rich + +if __name__ == '__main__': + videoCapture = cv2.VideoCapture('niuzi.mp4') + + # 创建一个窗口,并设置大小 + cv2.namedWindow('sudemo', cv2.WINDOW_NORMAL) + cv2.resizeWindow('sudemo', 800, 600) # 设置窗口的宽度和高度 + + while True: + ret, frame = videoCapture.read() + if not ret: + rich.print("播放完毕") + break + else: + cv2.imshow('sudemo', frame) + + if cv2.waitKey(25) & 0xFF == ord('q'): + break + + videoCapture.release() + cv2.destroyAllWindows() diff --git a/Yolov5-Deepsort/tracker.py b/Yolov5-Deepsort/tracker.py new file mode 100644 index 0000000000000000000000000000000000000000..6f91daeed5afad2b6e228c5237d942446495ea67 --- /dev/null +++ b/Yolov5-Deepsort/tracker.py @@ -0,0 +1,129 @@ +from deep_sort.utils.parser import get_config +from deep_sort.deep_sort import DeepSort +import torch +import rich +import os +import cv2 + +palette = (2 ** 11 - 1, 2 ** 15 - 1, 2 ** 20 - 1) +cfg = get_config() +cfg.merge_from_file("deep_sort/configs/deep_sort.yaml") +deepsort = DeepSort(cfg.DEEPSORT.REID_CKPT, + max_dist=cfg.DEEPSORT.MAX_DIST, min_confidence=cfg.DEEPSORT.MIN_CONFIDENCE, + nms_max_overlap=cfg.DEEPSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg.DEEPSORT.MAX_IOU_DISTANCE, + max_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET, + use_cuda=True) + + +def plot_bboxes(image, bboxes, line_thickness=None): + # Plots one bounding box on image img + tl = line_thickness or round( + 0.002 * (image.shape[0] + image.shape[1]) / 2) + 1 # line/font thickness + for (x1, y1, x2, y2, cls_id, pos_id) in bboxes: + if cls_id in ['person']: + color = (0, 0, 255) + else: + color = (0, 255, 0) + c1, c2 = (x1, y1), (x2, y2) + cv2.rectangle(image, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA) + tf = max(tl - 1, 1) # font thickness + t_size = cv2.getTextSize(cls_id, 0, fontScale=tl / 3, thickness=tf)[0] + c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 + cv2.rectangle(image, c1, c2, color, -1, cv2.LINE_AA) # filled + cv2.putText(image, '{} ID-{}'.format(cls_id, pos_id), (c1[0], c1[1] - 2), 0, tl / 3, + [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA) + + return image + + +def update_tracker(target_detector, image, framecounter): + + new_faces = [] + _, bboxes = target_detector.detect(image) + + + + bbox_xywh = [] + confs = [] + clss = [] + + for x1, y1, x2, y2, cls_id, conf in bboxes: + + obj = [ + int((x1+x2)/2), int((y1+y2)/2), + x2-x1, y2-y1 + ] + bbox_xywh.append(obj) + confs.append(conf) + clss.append(cls_id) + + xywhs = torch.Tensor(bbox_xywh) + confss = torch.Tensor(confs) + + outputs = deepsort.update(xywhs, confss, clss, image) + #rich.print("该帧的输出",outputs) + transfer_result_to_txt(current_frame=framecounter, current_output=outputs) + + bboxes2draw = [] + face_bboxes = [] + current_ids = [] + for value in list(outputs): + x1, y1, x2, y2, cls_, track_id = value + bboxes2draw.append( + (x1, y1, x2, y2, cls_, track_id) + ) + current_ids.append(track_id) + if cls_ == 'face': + if not track_id in target_detector.faceTracker: + target_detector.faceTracker[track_id] = 0 + face = image[y1:y2, x1:x2] + new_faces.append((face, track_id)) + face_bboxes.append( + (x1, y1, x2, y2) + ) + + ids2delete = [] + for history_id in target_detector.faceTracker: + if not history_id in current_ids: + target_detector.faceTracker[history_id] -= 1 + if target_detector.faceTracker[history_id] < -5: + ids2delete.append(history_id) + + for ids in ids2delete: + target_detector.faceTracker.pop(ids) + print('-[INFO] Delete track id:', ids) + + image = plot_bboxes(image, bboxes2draw) + + return image, new_faces, face_bboxes + + + +def transfer_result_to_txt(current_output, current_frame: int): + if current_frame == 1: + with open("myresult.txt",'w') as file: + for det in current_output: + x_min, y_min, x_max, y_max, obj_class, obj_id = det + width = x_max - x_min + height = y_max - y_min + conf = 1 # 置信度,通常在ground truth中为1 + class_id = 1 if obj_class == 'person' else 2 # 假设1代表person, 2代表car + visibility = 1 # 假设目标完全可见 + + # 写入格式:, , , , , , , , + file.write(f"{current_frame}, {obj_id}, {x_min}, {y_min}, {width}, {height}, {conf}, {class_id}, {visibility}\n") + else: + with open("myresult.txt",'a') as file: + for det in current_output: + x_min, y_min, x_max, y_max, obj_class, obj_id = det + width = x_max - x_min + height = y_max - y_min + conf = 1 # 置信度,通常在ground truth中为1 + class_id = 0 if obj_class == 'person' else 2 # 假设1代表person, 2代表car + visibility = 1 # 假设目标完全可见 + + # 写入格式:, , , , , , , , + file.write(f"{current_frame}, {obj_id}, {x_min}, {y_min}, {width}, {height}, {conf}, {class_id}, {visibility}\n") + + + diff --git a/Yolov5-Deepsort/utils/BaseDetector.py b/Yolov5-Deepsort/utils/BaseDetector.py new file mode 100644 index 0000000000000000000000000000000000000000..1fd77f962e6860a8c708439d9be5059beca12f2f --- /dev/null +++ b/Yolov5-Deepsort/utils/BaseDetector.py @@ -0,0 +1,50 @@ +from tracker import update_tracker +import cv2 + + +class baseDet(object): + + def __init__(self): + + self.img_size = 640 + self.threshold = 0.3 + self.stride = 1 + + def build_config(self): + + self.faceTracker = {} + self.faceClasses = {} + self.faceLocation1 = {} + self.faceLocation2 = {} + self.frameCounter = 0 + self.currentCarID = 0 + self.recorded = [] + + self.font = cv2.FONT_HERSHEY_SIMPLEX + + def feedCap(self, im): + + retDict = { + 'frame': None, + 'faces': None, + 'list_of_ids': None, + 'face_bboxes': [] + } + self.frameCounter += 1 + + im, faces, face_bboxes = update_tracker(self, im, self.frameCounter) + + retDict['frame'] = im + retDict['faces'] = faces + retDict['face_bboxes'] = face_bboxes + + return retDict + + def init_model(self): + raise EOFError("Undefined model type.") + + def preprocess(self): + raise EOFError("Undefined model type.") + + def detect(self): + raise EOFError("Undefined model type.") diff --git a/Yolov5-Deepsort/utils/__init__.py b/Yolov5-Deepsort/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/utils/__pycache__/BaseDetector.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/BaseDetector.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc358656fde98374d185612891a20a0249968609 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/BaseDetector.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/__init__.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f40e7ed3cdb46ff47429e39cfa079be51ce5e0d8 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/__init__.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/autoanchor.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/autoanchor.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..60478ce1314b5579568a289f05f438bc87cb2121 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/autoanchor.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/datasets.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/datasets.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..901561371bc12228280871bd309671f106fa2bf7 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/datasets.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/general.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/general.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d49c5fd2b444b26d4875393c3e7914a913eb9ff3 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/general.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/google_utils.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/google_utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b7f35a5a486ffcb4826c2b646beae70f6548d0c5 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/google_utils.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/metrics.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/metrics.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2b060f4f65f78749a70028a8dd091954dfac9505 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/metrics.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/plots.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/plots.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a9e9a9c1eae1c0807501be0cd6e7ab4cc34bdcb4 Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/plots.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/__pycache__/torch_utils.cpython-37.pyc b/Yolov5-Deepsort/utils/__pycache__/torch_utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0ee7ba31b9e88317685dde0919154f4d9ec92ac Binary files /dev/null and b/Yolov5-Deepsort/utils/__pycache__/torch_utils.cpython-37.pyc differ diff --git a/Yolov5-Deepsort/utils/activations.py b/Yolov5-Deepsort/utils/activations.py new file mode 100644 index 0000000000000000000000000000000000000000..92a3b5eaa54bcb46464dff900db247b0436e5046 --- /dev/null +++ b/Yolov5-Deepsort/utils/activations.py @@ -0,0 +1,98 @@ +# Activation functions + +import torch +import torch.nn as nn +import torch.nn.functional as F + + +# SiLU https://arxiv.org/pdf/1606.08415.pdf ---------------------------------------------------------------------------- +class SiLU(nn.Module): # export-friendly version of nn.SiLU() + @staticmethod + def forward(x): + return x * torch.sigmoid(x) + + +class Hardswish(nn.Module): # export-friendly version of nn.Hardswish() + @staticmethod + def forward(x): + # return x * F.hardsigmoid(x) # for torchscript and CoreML + return x * F.hardtanh(x + 3, 0., 6.) / 6. # for torchscript, CoreML and ONNX + + +# Mish https://github.com/digantamisra98/Mish -------------------------------------------------------------------------- +class Mish(nn.Module): + @staticmethod + def forward(x): + return x * F.softplus(x).tanh() + + +class MemoryEfficientMish(nn.Module): + class F(torch.autograd.Function): + @staticmethod + def forward(ctx, x): + ctx.save_for_backward(x) + return x.mul(torch.tanh(F.softplus(x))) # x * tanh(ln(1 + exp(x))) + + @staticmethod + def backward(ctx, grad_output): + x = ctx.saved_tensors[0] + sx = torch.sigmoid(x) + fx = F.softplus(x).tanh() + return grad_output * (fx + x * sx * (1 - fx * fx)) + + def forward(self, x): + return self.F.apply(x) + + +# FReLU https://arxiv.org/abs/2007.11824 ------------------------------------------------------------------------------- +class FReLU(nn.Module): + def __init__(self, c1, k=3): # ch_in, kernel + super().__init__() + self.conv = nn.Conv2d(c1, c1, k, 1, 1, groups=c1, bias=False) + self.bn = nn.BatchNorm2d(c1) + + def forward(self, x): + return torch.max(x, self.bn(self.conv(x))) + + +# ACON https://arxiv.org/pdf/2009.04759.pdf ---------------------------------------------------------------------------- +class AconC(nn.Module): + r""" ACON activation (activate or not). + AconC: (p1*x-p2*x) * sigmoid(beta*(p1*x-p2*x)) + p2*x, beta is a learnable parameter + according to "Activate or Not: Learning Customized Activation" . + """ + + def __init__(self, c1): + super().__init__() + self.p1 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.p2 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.beta = nn.Parameter(torch.ones(1, c1, 1, 1)) + + def forward(self, x): + dpx = (self.p1 - self.p2) * x + return dpx * torch.sigmoid(self.beta * dpx) + self.p2 * x + + +class MetaAconC(nn.Module): + r""" ACON activation (activate or not). + MetaAconC: (p1*x-p2*x) * sigmoid(beta*(p1*x-p2*x)) + p2*x, beta is generated by a small network + according to "Activate or Not: Learning Customized Activation" . + """ + + def __init__(self, c1, k=1, s=1, r=16): # ch_in, kernel, stride, r + super().__init__() + c2 = max(r, c1 // r) + self.p1 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.p2 = nn.Parameter(torch.randn(1, c1, 1, 1)) + self.fc1 = nn.Conv2d(c1, c2, k, s, bias=True) + self.fc2 = nn.Conv2d(c2, c1, k, s, bias=True) + # self.bn1 = nn.BatchNorm2d(c2) + # self.bn2 = nn.BatchNorm2d(c1) + + def forward(self, x): + y = x.mean(dim=2, keepdims=True).mean(dim=3, keepdims=True) + # batch-size 1 bug/instabilities https://github.com/ultralytics/yolov5/issues/2891 + # beta = torch.sigmoid(self.bn2(self.fc2(self.bn1(self.fc1(y))))) # bug/unstable + beta = torch.sigmoid(self.fc2(self.fc1(y))) # bug patch BN layers removed + dpx = (self.p1 - self.p2) * x + return dpx * torch.sigmoid(beta * dpx) + self.p2 * x diff --git a/Yolov5-Deepsort/utils/autoanchor.py b/Yolov5-Deepsort/utils/autoanchor.py new file mode 100644 index 0000000000000000000000000000000000000000..87dc394c832e628a0b1c7b39aeb1e7c6584c63b3 --- /dev/null +++ b/Yolov5-Deepsort/utils/autoanchor.py @@ -0,0 +1,161 @@ +# Auto-anchor utils + +import numpy as np +import torch +import yaml +from tqdm import tqdm + +from utils.general import colorstr + + +def check_anchor_order(m): + # Check anchor order against stride order for YOLOv5 Detect() module m, and correct if necessary + a = m.anchor_grid.prod(-1).view(-1) # anchor area + da = a[-1] - a[0] # delta a + ds = m.stride[-1] - m.stride[0] # delta s + if da.sign() != ds.sign(): # same order + print('Reversing anchor order') + m.anchors[:] = m.anchors.flip(0) + m.anchor_grid[:] = m.anchor_grid.flip(0) + + +def check_anchors(dataset, model, thr=4.0, imgsz=640): + # Check anchor fit to data, recompute if necessary + prefix = colorstr('autoanchor: ') + print(f'\n{prefix}Analyzing anchors... ', end='') + m = model.module.model[-1] if hasattr(model, 'module') else model.model[-1] # Detect() + shapes = imgsz * dataset.shapes / dataset.shapes.max(1, keepdims=True) + scale = np.random.uniform(0.9, 1.1, size=(shapes.shape[0], 1)) # augment scale + wh = torch.tensor(np.concatenate([l[:, 3:5] * s for s, l in zip(shapes * scale, dataset.labels)])).float() # wh + + def metric(k): # compute metric + r = wh[:, None] / k[None] + x = torch.min(r, 1. / r).min(2)[0] # ratio metric + best = x.max(1)[0] # best_x + aat = (x > 1. / thr).float().sum(1).mean() # anchors above threshold + bpr = (best > 1. / thr).float().mean() # best possible recall + return bpr, aat + + anchors = m.anchor_grid.clone().cpu().view(-1, 2) # current anchors + bpr, aat = metric(anchors) + print(f'anchors/target = {aat:.2f}, Best Possible Recall (BPR) = {bpr:.4f}', end='') + if bpr < 0.98: # threshold to recompute + print('. Attempting to improve anchors, please wait...') + na = m.anchor_grid.numel() // 2 # number of anchors + try: + anchors = kmean_anchors(dataset, n=na, img_size=imgsz, thr=thr, gen=1000, verbose=False) + except Exception as e: + print(f'{prefix}ERROR: {e}') + new_bpr = metric(anchors)[0] + if new_bpr > bpr: # replace anchors + anchors = torch.tensor(anchors, device=m.anchors.device).type_as(m.anchors) + m.anchor_grid[:] = anchors.clone().view_as(m.anchor_grid) # for inference + m.anchors[:] = anchors.clone().view_as(m.anchors) / m.stride.to(m.anchors.device).view(-1, 1, 1) # loss + check_anchor_order(m) + print(f'{prefix}New anchors saved to model. Update model *.yaml to use these anchors in the future.') + else: + print(f'{prefix}Original anchors better than new anchors. Proceeding with original anchors.') + print('') # newline + + +def kmean_anchors(path='./data/coco128.yaml', n=9, img_size=640, thr=4.0, gen=1000, verbose=True): + """ Creates kmeans-evolved anchors from training dataset + + Arguments: + path: path to dataset *.yaml, or a loaded dataset + n: number of anchors + img_size: image size used for training + thr: anchor-label wh ratio threshold hyperparameter hyp['anchor_t'] used for training, default=4.0 + gen: generations to evolve anchors using genetic algorithm + verbose: print all results + + Return: + k: kmeans evolved anchors + + Usage: + from utils.autoanchor import *; _ = kmean_anchors() + """ + from scipy.cluster.vq import kmeans + + thr = 1. / thr + prefix = colorstr('autoanchor: ') + + def metric(k, wh): # compute metrics + r = wh[:, None] / k[None] + x = torch.min(r, 1. / r).min(2)[0] # ratio metric + # x = wh_iou(wh, torch.tensor(k)) # iou metric + return x, x.max(1)[0] # x, best_x + + def anchor_fitness(k): # mutation fitness + _, best = metric(torch.tensor(k, dtype=torch.float32), wh) + return (best * (best > thr).float()).mean() # fitness + + def print_results(k): + k = k[np.argsort(k.prod(1))] # sort small to large + x, best = metric(k, wh0) + bpr, aat = (best > thr).float().mean(), (x > thr).float().mean() * n # best possible recall, anch > thr + print(f'{prefix}thr={thr:.2f}: {bpr:.4f} best possible recall, {aat:.2f} anchors past thr') + print(f'{prefix}n={n}, img_size={img_size}, metric_all={x.mean():.3f}/{best.mean():.3f}-mean/best, ' + f'past_thr={x[x > thr].mean():.3f}-mean: ', end='') + for i, x in enumerate(k): + print('%i,%i' % (round(x[0]), round(x[1])), end=', ' if i < len(k) - 1 else '\n') # use in *.cfg + return k + + if isinstance(path, str): # *.yaml file + with open(path) as f: + data_dict = yaml.safe_load(f) # model dict + from utils.datasets import LoadImagesAndLabels + dataset = LoadImagesAndLabels(data_dict['train'], augment=True, rect=True) + else: + dataset = path # dataset + + # Get label wh + shapes = img_size * dataset.shapes / dataset.shapes.max(1, keepdims=True) + wh0 = np.concatenate([l[:, 3:5] * s for s, l in zip(shapes, dataset.labels)]) # wh + + # Filter + i = (wh0 < 3.0).any(1).sum() + if i: + print(f'{prefix}WARNING: Extremely small objects found. {i} of {len(wh0)} labels are < 3 pixels in size.') + wh = wh0[(wh0 >= 2.0).any(1)] # filter > 2 pixels + # wh = wh * (np.random.rand(wh.shape[0], 1) * 0.9 + 0.1) # multiply by random scale 0-1 + + # Kmeans calculation + print(f'{prefix}Running kmeans for {n} anchors on {len(wh)} points...') + s = wh.std(0) # sigmas for whitening + k, dist = kmeans(wh / s, n, iter=30) # points, mean distance + assert len(k) == n, print(f'{prefix}ERROR: scipy.cluster.vq.kmeans requested {n} points but returned only {len(k)}') + k *= s + wh = torch.tensor(wh, dtype=torch.float32) # filtered + wh0 = torch.tensor(wh0, dtype=torch.float32) # unfiltered + k = print_results(k) + + # Plot + # k, d = [None] * 20, [None] * 20 + # for i in tqdm(range(1, 21)): + # k[i-1], d[i-1] = kmeans(wh / s, i) # points, mean distance + # fig, ax = plt.subplots(1, 2, figsize=(14, 7), tight_layout=True) + # ax = ax.ravel() + # ax[0].plot(np.arange(1, 21), np.array(d) ** 2, marker='.') + # fig, ax = plt.subplots(1, 2, figsize=(14, 7)) # plot wh + # ax[0].hist(wh[wh[:, 0]<100, 0],400) + # ax[1].hist(wh[wh[:, 1]<100, 1],400) + # fig.savefig('wh.png', dpi=200) + + # Evolve + npr = np.random + f, sh, mp, s = anchor_fitness(k), k.shape, 0.9, 0.1 # fitness, generations, mutation prob, sigma + pbar = tqdm(range(gen), desc=f'{prefix}Evolving anchors with Genetic Algorithm:') # progress bar + for _ in pbar: + v = np.ones(sh) + while (v == 1).all(): # mutate until a change occurs (prevent duplicates) + v = ((npr.random(sh) < mp) * npr.random() * npr.randn(*sh) * s + 1).clip(0.3, 3.0) + kg = (k.copy() * v).clip(min=2.0) + fg = anchor_fitness(kg) + if fg > f: + f, k = fg, kg.copy() + pbar.desc = f'{prefix}Evolving anchors with Genetic Algorithm: fitness = {f:.4f}' + if verbose: + print_results(k) + + return print_results(k) diff --git a/Yolov5-Deepsort/utils/aws/__init__.py b/Yolov5-Deepsort/utils/aws/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/utils/aws/mime.sh b/Yolov5-Deepsort/utils/aws/mime.sh new file mode 100644 index 0000000000000000000000000000000000000000..c319a83cfbdf09bea634c3bd9fca737c0b1dd505 --- /dev/null +++ b/Yolov5-Deepsort/utils/aws/mime.sh @@ -0,0 +1,26 @@ +# AWS EC2 instance startup 'MIME' script https://aws.amazon.com/premiumsupport/knowledge-center/execute-user-data-ec2/ +# This script will run on every instance restart, not only on first start +# --- DO NOT COPY ABOVE COMMENTS WHEN PASTING INTO USERDATA --- + +Content-Type: multipart/mixed; boundary="//" +MIME-Version: 1.0 + +--// +Content-Type: text/cloud-config; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; filename="cloud-config.txt" + +#cloud-config +cloud_final_modules: +- [scripts-user, always] + +--// +Content-Type: text/x-shellscript; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Disposition: attachment; filename="userdata.txt" + +#!/bin/bash +# --- paste contents of userdata.sh here --- +--// diff --git a/Yolov5-Deepsort/utils/aws/resume.py b/Yolov5-Deepsort/utils/aws/resume.py new file mode 100644 index 0000000000000000000000000000000000000000..4b0d4246b594acddbecf065956fc8729bb96ec36 --- /dev/null +++ b/Yolov5-Deepsort/utils/aws/resume.py @@ -0,0 +1,37 @@ +# Resume all interrupted trainings in yolov5/ dir including DDP trainings +# Usage: $ python utils/aws/resume.py + +import os +import sys +from pathlib import Path + +import torch +import yaml + +sys.path.append('./') # to run '$ python *.py' files in subdirectories + +port = 0 # --master_port +path = Path('').resolve() +for last in path.rglob('*/**/last.pt'): + ckpt = torch.load(last) + if ckpt['optimizer'] is None: + continue + + # Load opt.yaml + with open(last.parent.parent / 'opt.yaml') as f: + opt = yaml.safe_load(f) + + # Get device count + d = opt['device'].split(',') # devices + nd = len(d) # number of devices + ddp = nd > 1 or (nd == 0 and torch.cuda.device_count() > 1) # distributed data parallel + + if ddp: # multi-GPU + port += 1 + cmd = f'python -m torch.distributed.launch --nproc_per_node {nd} --master_port {port} train.py --resume {last}' + else: # single-GPU + cmd = f'python train.py --resume {last}' + + cmd += ' > /dev/null 2>&1 &' # redirect output to dev/null and run in daemon thread + print(cmd) + os.system(cmd) diff --git a/Yolov5-Deepsort/utils/aws/userdata.sh b/Yolov5-Deepsort/utils/aws/userdata.sh new file mode 100644 index 0000000000000000000000000000000000000000..5846fedb16f971c194c80ff533bc8c237de6815c --- /dev/null +++ b/Yolov5-Deepsort/utils/aws/userdata.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# AWS EC2 instance startup script https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html +# This script will run only once on first instance start (for a re-start script see mime.sh) +# /home/ubuntu (ubuntu) or /home/ec2-user (amazon-linux) is working dir +# Use >300 GB SSD + +cd home/ubuntu +if [ ! -d yolov5 ]; then + echo "Running first-time script." # install dependencies, download COCO, pull Docker + git clone https://github.com/ultralytics/yolov5 -b master && sudo chmod -R 777 yolov5 + cd yolov5 + bash data/scripts/get_coco.sh && echo "Data done." & + sudo docker pull ultralytics/yolov5:latest && echo "Docker done." & + python -m pip install --upgrade pip && pip install -r requirements.txt && python detect.py && echo "Requirements done." & + wait && echo "All tasks done." # finish background tasks +else + echo "Running re-start script." # resume interrupted runs + i=0 + list=$(sudo docker ps -qa) # container list i.e. $'one\ntwo\nthree\nfour' + while IFS= read -r id; do + ((i++)) + echo "restarting container $i: $id" + sudo docker start $id + # sudo docker exec -it $id python train.py --resume # single-GPU + sudo docker exec -d $id python utils/aws/resume.py # multi-scenario + done <<<"$list" +fi diff --git a/Yolov5-Deepsort/utils/datasets.py b/Yolov5-Deepsort/utils/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..36416b14e1387a3e3b6b30acf6254bb727d96ced --- /dev/null +++ b/Yolov5-Deepsort/utils/datasets.py @@ -0,0 +1,1067 @@ +# Dataset utils and dataloaders + +import glob +import logging +import math +import os +import random +import shutil +import time +from itertools import repeat +from multiprocessing.pool import ThreadPool +from pathlib import Path +from threading import Thread + +import cv2 +import numpy as np +import torch +import torch.nn.functional as F +from PIL import Image, ExifTags +from torch.utils.data import Dataset +from tqdm import tqdm + +from utils.general import check_requirements, xyxy2xywh, xywh2xyxy, xywhn2xyxy, xyn2xy, segment2box, segments2boxes, \ + resample_segments, clean_str +from utils.torch_utils import torch_distributed_zero_first + +# Parameters +help_url = 'https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data' +img_formats = ['bmp', 'jpg', 'jpeg', 'png', 'tif', 'tiff', 'dng', 'webp', 'mpo'] # acceptable image suffixes +vid_formats = ['mov', 'avi', 'mp4', 'mpg', 'mpeg', 'm4v', 'wmv', 'mkv'] # acceptable video suffixes +logger = logging.getLogger(__name__) + +# Get orientation exif tag +for orientation in ExifTags.TAGS.keys(): + if ExifTags.TAGS[orientation] == 'Orientation': + break + + +def get_hash(files): + # Returns a single hash value of a list of files + return sum(os.path.getsize(f) for f in files if os.path.isfile(f)) + + +def exif_size(img): + # Returns exif-corrected PIL size + s = img.size # (width, height) + try: + rotation = dict(img._getexif().items())[orientation] + if rotation == 6: # rotation 270 + s = (s[1], s[0]) + elif rotation == 8: # rotation 90 + s = (s[1], s[0]) + except: + pass + + return s + + +def create_dataloader(path, imgsz, batch_size, stride, opt, hyp=None, augment=False, cache=False, pad=0.0, rect=False, + rank=-1, world_size=1, workers=8, image_weights=False, quad=False, prefix=''): + # Make sure only the first process in DDP process the dataset first, and the following others can use the cache + with torch_distributed_zero_first(rank): + dataset = LoadImagesAndLabels(path, imgsz, batch_size, + augment=augment, # augment images + hyp=hyp, # augmentation hyperparameters + rect=rect, # rectangular training + cache_images=cache, + single_cls=opt.single_cls, + stride=int(stride), + pad=pad, + image_weights=image_weights, + prefix=prefix) + + batch_size = min(batch_size, len(dataset)) + nw = min([os.cpu_count() // world_size, batch_size if batch_size > 1 else 0, workers]) # number of workers + sampler = torch.utils.data.distributed.DistributedSampler(dataset) if rank != -1 else None + loader = torch.utils.data.DataLoader if image_weights else InfiniteDataLoader + # Use torch.utils.data.DataLoader() if dataset.properties will update during training else InfiniteDataLoader() + dataloader = loader(dataset, + batch_size=batch_size, + num_workers=nw, + sampler=sampler, + pin_memory=True, + collate_fn=LoadImagesAndLabels.collate_fn4 if quad else LoadImagesAndLabels.collate_fn) + return dataloader, dataset + + +class InfiniteDataLoader(torch.utils.data.dataloader.DataLoader): + """ Dataloader that reuses workers + + Uses same syntax as vanilla DataLoader + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + object.__setattr__(self, 'batch_sampler', _RepeatSampler(self.batch_sampler)) + self.iterator = super().__iter__() + + def __len__(self): + return len(self.batch_sampler.sampler) + + def __iter__(self): + for i in range(len(self)): + yield next(self.iterator) + + +class _RepeatSampler(object): + """ Sampler that repeats forever + + Args: + sampler (Sampler) + """ + + def __init__(self, sampler): + self.sampler = sampler + + def __iter__(self): + while True: + yield from iter(self.sampler) + + +class LoadImages: # for inference + def __init__(self, path, img_size=640, stride=32): + p = str(Path(path).absolute()) # os-agnostic absolute path + if '*' in p: + files = sorted(glob.glob(p, recursive=True)) # glob + elif os.path.isdir(p): + files = sorted(glob.glob(os.path.join(p, '*.*'))) # dir + elif os.path.isfile(p): + files = [p] # files + else: + raise Exception(f'ERROR: {p} does not exist') + + images = [x for x in files if x.split('.')[-1].lower() in img_formats] + videos = [x for x in files if x.split('.')[-1].lower() in vid_formats] + ni, nv = len(images), len(videos) + + self.img_size = img_size + self.stride = stride + self.files = images + videos + self.nf = ni + nv # number of files + self.video_flag = [False] * ni + [True] * nv + self.mode = 'image' + if any(videos): + self.new_video(videos[0]) # new video + else: + self.cap = None + assert self.nf > 0, f'No images or videos found in {p}. ' \ + f'Supported formats are:\nimages: {img_formats}\nvideos: {vid_formats}' + + def __iter__(self): + self.count = 0 + return self + + def __next__(self): + if self.count == self.nf: + raise StopIteration + path = self.files[self.count] + + if self.video_flag[self.count]: + # Read video + self.mode = 'video' + ret_val, img0 = self.cap.read() + if not ret_val: + self.count += 1 + self.cap.release() + if self.count == self.nf: # last video + raise StopIteration + else: + path = self.files[self.count] + self.new_video(path) + ret_val, img0 = self.cap.read() + + self.frame += 1 + print(f'video {self.count + 1}/{self.nf} ({self.frame}/{self.frames}) {path}: ', end='') + + else: + # Read image + self.count += 1 + img0 = cv2.imread(path) # BGR + assert img0 is not None, 'Image Not Found ' + path + print(f'image {self.count}/{self.nf} {path}: ', end='') + + # Padded resize + img = letterbox(img0, self.img_size, stride=self.stride)[0] + + # Convert + img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 + img = np.ascontiguousarray(img) + + return path, img, img0, self.cap + + def new_video(self, path): + self.frame = 0 + self.cap = cv2.VideoCapture(path) + self.frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT)) + + def __len__(self): + return self.nf # number of files + + +class LoadWebcam: # for inference + def __init__(self, pipe='0', img_size=640, stride=32): + self.img_size = img_size + self.stride = stride + + if pipe.isnumeric(): + pipe = eval(pipe) # local camera + # pipe = 'rtsp://192.168.1.64/1' # IP camera + # pipe = 'rtsp://username:password@192.168.1.64/1' # IP camera with login + # pipe = 'http://wmccpinetop.axiscam.net/mjpg/video.mjpg' # IP golf camera + + self.pipe = pipe + self.cap = cv2.VideoCapture(pipe) # video capture object + self.cap.set(cv2.CAP_PROP_BUFFERSIZE, 3) # set buffer size + + def __iter__(self): + self.count = -1 + return self + + def __next__(self): + self.count += 1 + if cv2.waitKey(1) == ord('q'): # q to quit + self.cap.release() + cv2.destroyAllWindows() + raise StopIteration + + # Read frame + if self.pipe == 0: # local camera + ret_val, img0 = self.cap.read() + img0 = cv2.flip(img0, 1) # flip left-right + else: # IP camera + n = 0 + while True: + n += 1 + self.cap.grab() + if n % 30 == 0: # skip frames + ret_val, img0 = self.cap.retrieve() + if ret_val: + break + + # Print + assert ret_val, f'Camera Error {self.pipe}' + img_path = 'webcam.jpg' + print(f'webcam {self.count}: ', end='') + + # Padded resize + img = letterbox(img0, self.img_size, stride=self.stride)[0] + + # Convert + img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 + img = np.ascontiguousarray(img) + + return img_path, img, img0, None + + def __len__(self): + return 0 + + +class LoadStreams: # multiple IP or RTSP cameras + def __init__(self, sources='streams.txt', img_size=640, stride=32): + self.mode = 'stream' + self.img_size = img_size + self.stride = stride + + if os.path.isfile(sources): + with open(sources, 'r') as f: + sources = [x.strip() for x in f.read().strip().splitlines() if len(x.strip())] + else: + sources = [sources] + + n = len(sources) + self.imgs, self.fps, self.frames, self.threads = [None] * n, [0] * n, [0] * n, [None] * n + self.sources = [clean_str(x) for x in sources] # clean source names for later + for i, s in enumerate(sources): # index, source + # Start thread to read frames from video stream + print(f'{i + 1}/{n}: {s}... ', end='') + if 'youtube.com/' in s or 'youtu.be/' in s: # if source is YouTube video + check_requirements(('pafy', 'youtube_dl')) + import pafy + s = pafy.new(s).getbest(preftype="mp4").url # YouTube URL + s = eval(s) if s.isnumeric() else s # i.e. s = '0' local webcam + cap = cv2.VideoCapture(s) + assert cap.isOpened(), f'Failed to open {s}' + w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + self.fps[i] = max(cap.get(cv2.CAP_PROP_FPS) % 100, 0) or 30.0 # 30 FPS fallback + self.frames[i] = max(int(cap.get(cv2.CAP_PROP_FRAME_COUNT)), 0) or float('inf') # infinite stream fallback + + _, self.imgs[i] = cap.read() # guarantee first frame + self.threads[i] = Thread(target=self.update, args=([i, cap]), daemon=True) + print(f" success ({self.frames[i]} frames {w}x{h} at {self.fps[i]:.2f} FPS)") + self.threads[i].start() + print('') # newline + + # check for common shapes + s = np.stack([letterbox(x, self.img_size, stride=self.stride)[0].shape for x in self.imgs], 0) # shapes + self.rect = np.unique(s, axis=0).shape[0] == 1 # rect inference if all shapes equal + if not self.rect: + print('WARNING: Different stream shapes detected. For optimal performance supply similarly-shaped streams.') + + def update(self, i, cap): + # Read stream `i` frames in daemon thread + n, f = 0, self.frames[i] + while cap.isOpened() and n < f: + n += 1 + # _, self.imgs[index] = cap.read() + cap.grab() + if n % 4: # read every 4th frame + success, im = cap.retrieve() + self.imgs[i] = im if success else self.imgs[i] * 0 + time.sleep(1 / self.fps[i]) # wait time + + def __iter__(self): + self.count = -1 + return self + + def __next__(self): + self.count += 1 + if not all(x.is_alive() for x in self.threads) or cv2.waitKey(1) == ord('q'): # q to quit + cv2.destroyAllWindows() + raise StopIteration + + # Letterbox + img0 = self.imgs.copy() + img = [letterbox(x, self.img_size, auto=self.rect, stride=self.stride)[0] for x in img0] + + # Stack + img = np.stack(img, 0) + + # Convert + img = img[:, :, :, ::-1].transpose(0, 3, 1, 2) # BGR to RGB, to bsx3x416x416 + img = np.ascontiguousarray(img) + + return self.sources, img, img0, None + + def __len__(self): + return 0 # 1E12 frames = 32 streams at 30 FPS for 30 years + + +def img2label_paths(img_paths): + # Define label paths as a function of image paths + sa, sb = os.sep + 'images' + os.sep, os.sep + 'labels' + os.sep # /images/, /labels/ substrings + return ['txt'.join(x.replace(sa, sb, 1).rsplit(x.split('.')[-1], 1)) for x in img_paths] + + +class LoadImagesAndLabels(Dataset): # for training/testing + def __init__(self, path, img_size=640, batch_size=16, augment=False, hyp=None, rect=False, image_weights=False, + cache_images=False, single_cls=False, stride=32, pad=0.0, prefix=''): + self.img_size = img_size + self.augment = augment + self.hyp = hyp + self.image_weights = image_weights + self.rect = False if image_weights else rect + self.mosaic = self.augment and not self.rect # load 4 images at a time into a mosaic (only during training) + self.mosaic_border = [-img_size // 2, -img_size // 2] + self.stride = stride + self.path = path + + try: + f = [] # image files + for p in path if isinstance(path, list) else [path]: + p = Path(p) # os-agnostic + if p.is_dir(): # dir + f += glob.glob(str(p / '**' / '*.*'), recursive=True) + # f = list(p.rglob('**/*.*')) # pathlib + elif p.is_file(): # file + with open(p, 'r') as t: + t = t.read().strip().splitlines() + parent = str(p.parent) + os.sep + f += [x.replace('./', parent) if x.startswith('./') else x for x in t] # local to global path + # f += [p.parent / x.lstrip(os.sep) for x in t] # local to global path (pathlib) + else: + raise Exception(f'{prefix}{p} does not exist') + self.img_files = sorted([x.replace('/', os.sep) for x in f if x.split('.')[-1].lower() in img_formats]) + # self.img_files = sorted([x for x in f if x.suffix[1:].lower() in img_formats]) # pathlib + assert self.img_files, f'{prefix}No images found' + except Exception as e: + raise Exception(f'{prefix}Error loading data from {path}: {e}\nSee {help_url}') + + # Check cache + self.label_files = img2label_paths(self.img_files) # labels + cache_path = (p if p.is_file() else Path(self.label_files[0]).parent).with_suffix('.cache') # cached labels + if cache_path.is_file(): + cache, exists = torch.load(cache_path), True # load + if cache['hash'] != get_hash(self.label_files + self.img_files) or 'version' not in cache: # changed + cache, exists = self.cache_labels(cache_path, prefix), False # re-cache + else: + cache, exists = self.cache_labels(cache_path, prefix), False # cache + + # Display cache + nf, nm, ne, nc, n = cache.pop('results') # found, missing, empty, corrupted, total + if exists: + d = f"Scanning '{cache_path}' images and labels... {nf} found, {nm} missing, {ne} empty, {nc} corrupted" + tqdm(None, desc=prefix + d, total=n, initial=n) # display cache results + assert nf > 0 or not augment, f'{prefix}No labels in {cache_path}. Can not train without labels. See {help_url}' + + # Read cache + cache.pop('hash') # remove hash + cache.pop('version') # remove version + labels, shapes, self.segments = zip(*cache.values()) + self.labels = list(labels) + self.shapes = np.array(shapes, dtype=np.float64) + self.img_files = list(cache.keys()) # update + self.label_files = img2label_paths(cache.keys()) # update + if single_cls: + for x in self.labels: + x[:, 0] = 0 + + n = len(shapes) # number of images + bi = np.floor(np.arange(n) / batch_size).astype(np.int) # batch index + nb = bi[-1] + 1 # number of batches + self.batch = bi # batch index of image + self.n = n + self.indices = range(n) + + # Rectangular Training + if self.rect: + # Sort by aspect ratio + s = self.shapes # wh + ar = s[:, 1] / s[:, 0] # aspect ratio + irect = ar.argsort() + self.img_files = [self.img_files[i] for i in irect] + self.label_files = [self.label_files[i] for i in irect] + self.labels = [self.labels[i] for i in irect] + self.shapes = s[irect] # wh + ar = ar[irect] + + # Set training image shapes + shapes = [[1, 1]] * nb + for i in range(nb): + ari = ar[bi == i] + mini, maxi = ari.min(), ari.max() + if maxi < 1: + shapes[i] = [maxi, 1] + elif mini > 1: + shapes[i] = [1, 1 / mini] + + self.batch_shapes = np.ceil(np.array(shapes) * img_size / stride + pad).astype(np.int) * stride + + # Cache images into memory for faster training (WARNING: large datasets may exceed system RAM) + self.imgs = [None] * n + if cache_images: + gb = 0 # Gigabytes of cached images + self.img_hw0, self.img_hw = [None] * n, [None] * n + results = ThreadPool(8).imap(lambda x: load_image(*x), zip(repeat(self), range(n))) # 8 threads + pbar = tqdm(enumerate(results), total=n) + for i, x in pbar: + self.imgs[i], self.img_hw0[i], self.img_hw[i] = x # img, hw_original, hw_resized = load_image(self, i) + gb += self.imgs[i].nbytes + pbar.desc = f'{prefix}Caching images ({gb / 1E9:.1f}GB)' + pbar.close() + + def cache_labels(self, path=Path('./labels.cache'), prefix=''): + # Cache dataset labels, check images and read shapes + x = {} # dict + nm, nf, ne, nc = 0, 0, 0, 0 # number missing, found, empty, duplicate + pbar = tqdm(zip(self.img_files, self.label_files), desc='Scanning images', total=len(self.img_files)) + for i, (im_file, lb_file) in enumerate(pbar): + try: + # verify images + im = Image.open(im_file) + im.verify() # PIL verify + shape = exif_size(im) # image size + segments = [] # instance segments + assert (shape[0] > 9) & (shape[1] > 9), f'image size {shape} <10 pixels' + assert im.format.lower() in img_formats, f'invalid image format {im.format}' + + # verify labels + if os.path.isfile(lb_file): + nf += 1 # label found + with open(lb_file, 'r') as f: + l = [x.split() for x in f.read().strip().splitlines()] + if any([len(x) > 8 for x in l]): # is segment + classes = np.array([x[0] for x in l], dtype=np.float32) + segments = [np.array(x[1:], dtype=np.float32).reshape(-1, 2) for x in l] # (cls, xy1...) + l = np.concatenate((classes.reshape(-1, 1), segments2boxes(segments)), 1) # (cls, xywh) + l = np.array(l, dtype=np.float32) + if len(l): + assert l.shape[1] == 5, 'labels require 5 columns each' + assert (l >= 0).all(), 'negative labels' + assert (l[:, 1:] <= 1).all(), 'non-normalized or out of bounds coordinate labels' + assert np.unique(l, axis=0).shape[0] == l.shape[0], 'duplicate labels' + else: + ne += 1 # label empty + l = np.zeros((0, 5), dtype=np.float32) + else: + nm += 1 # label missing + l = np.zeros((0, 5), dtype=np.float32) + x[im_file] = [l, shape, segments] + except Exception as e: + nc += 1 + logging.info(f'{prefix}WARNING: Ignoring corrupted image and/or label {im_file}: {e}') + + pbar.desc = f"{prefix}Scanning '{path.parent / path.stem}' images and labels... " \ + f"{nf} found, {nm} missing, {ne} empty, {nc} corrupted" + pbar.close() + + if nf == 0: + logging.info(f'{prefix}WARNING: No labels found in {path}. See {help_url}') + + x['hash'] = get_hash(self.label_files + self.img_files) + x['results'] = nf, nm, ne, nc, i + 1 + x['version'] = 0.1 # cache version + try: + torch.save(x, path) # save for next time + logging.info(f'{prefix}New cache created: {path}') + except Exception as e: + logging.info(f'{prefix}WARNING: Cache directory {path.parent} is not writeable: {e}') # path not writeable + return x + + def __len__(self): + return len(self.img_files) + + # def __iter__(self): + # self.count = -1 + # print('ran dataset iter') + # #self.shuffled_vector = np.random.permutation(self.nF) if self.augment else np.arange(self.nF) + # return self + + def __getitem__(self, index): + index = self.indices[index] # linear, shuffled, or image_weights + + hyp = self.hyp + mosaic = self.mosaic and random.random() < hyp['mosaic'] + if mosaic: + # Load mosaic + img, labels = load_mosaic(self, index) + shapes = None + + # MixUp https://arxiv.org/pdf/1710.09412.pdf + if random.random() < hyp['mixup']: + img2, labels2 = load_mosaic(self, random.randint(0, self.n - 1)) + r = np.random.beta(8.0, 8.0) # mixup ratio, alpha=beta=8.0 + img = (img * r + img2 * (1 - r)).astype(np.uint8) + labels = np.concatenate((labels, labels2), 0) + + else: + # Load image + img, (h0, w0), (h, w) = load_image(self, index) + + # Letterbox + shape = self.batch_shapes[self.batch[index]] if self.rect else self.img_size # final letterboxed shape + img, ratio, pad = letterbox(img, shape, auto=False, scaleup=self.augment) + shapes = (h0, w0), ((h / h0, w / w0), pad) # for COCO mAP rescaling + + labels = self.labels[index].copy() + if labels.size: # normalized xywh to pixel xyxy format + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], ratio[0] * w, ratio[1] * h, padw=pad[0], padh=pad[1]) + + if self.augment: + # Augment imagespace + if not mosaic: + img, labels = random_perspective(img, labels, + degrees=hyp['degrees'], + translate=hyp['translate'], + scale=hyp['scale'], + shear=hyp['shear'], + perspective=hyp['perspective']) + + # Augment colorspace + augment_hsv(img, hgain=hyp['hsv_h'], sgain=hyp['hsv_s'], vgain=hyp['hsv_v']) + + # Apply cutouts + # if random.random() < 0.9: + # labels = cutout(img, labels) + + nL = len(labels) # number of labels + if nL: + labels[:, 1:5] = xyxy2xywh(labels[:, 1:5]) # convert xyxy to xywh + labels[:, [2, 4]] /= img.shape[0] # normalized height 0-1 + labels[:, [1, 3]] /= img.shape[1] # normalized width 0-1 + + if self.augment: + # flip up-down + if random.random() < hyp['flipud']: + img = np.flipud(img) + if nL: + labels[:, 2] = 1 - labels[:, 2] + + # flip left-right + if random.random() < hyp['fliplr']: + img = np.fliplr(img) + if nL: + labels[:, 1] = 1 - labels[:, 1] + + labels_out = torch.zeros((nL, 6)) + if nL: + labels_out[:, 1:] = torch.from_numpy(labels) + + # Convert + img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 + img = np.ascontiguousarray(img) + + return torch.from_numpy(img), labels_out, self.img_files[index], shapes + + @staticmethod + def collate_fn(batch): + img, label, path, shapes = zip(*batch) # transposed + for i, l in enumerate(label): + l[:, 0] = i # add target image index for build_targets() + return torch.stack(img, 0), torch.cat(label, 0), path, shapes + + @staticmethod + def collate_fn4(batch): + img, label, path, shapes = zip(*batch) # transposed + n = len(shapes) // 4 + img4, label4, path4, shapes4 = [], [], path[:n], shapes[:n] + + ho = torch.tensor([[0., 0, 0, 1, 0, 0]]) + wo = torch.tensor([[0., 0, 1, 0, 0, 0]]) + s = torch.tensor([[1, 1, .5, .5, .5, .5]]) # scale + for i in range(n): # zidane torch.zeros(16,3,720,1280) # BCHW + i *= 4 + if random.random() < 0.5: + im = F.interpolate(img[i].unsqueeze(0).float(), scale_factor=2., mode='bilinear', align_corners=False)[ + 0].type(img[i].type()) + l = label[i] + else: + im = torch.cat((torch.cat((img[i], img[i + 1]), 1), torch.cat((img[i + 2], img[i + 3]), 1)), 2) + l = torch.cat((label[i], label[i + 1] + ho, label[i + 2] + wo, label[i + 3] + ho + wo), 0) * s + img4.append(im) + label4.append(l) + + for i, l in enumerate(label4): + l[:, 0] = i # add target image index for build_targets() + + return torch.stack(img4, 0), torch.cat(label4, 0), path4, shapes4 + + +# Ancillary functions -------------------------------------------------------------------------------------------------- +def load_image(self, index): + # loads 1 image from dataset, returns img, original hw, resized hw + img = self.imgs[index] + if img is None: # not cached + path = self.img_files[index] + img = cv2.imread(path) # BGR + assert img is not None, 'Image Not Found ' + path + h0, w0 = img.shape[:2] # orig hw + r = self.img_size / max(h0, w0) # ratio + if r != 1: # if sizes are not equal + img = cv2.resize(img, (int(w0 * r), int(h0 * r)), + interpolation=cv2.INTER_AREA if r < 1 and not self.augment else cv2.INTER_LINEAR) + return img, (h0, w0), img.shape[:2] # img, hw_original, hw_resized + else: + return self.imgs[index], self.img_hw0[index], self.img_hw[index] # img, hw_original, hw_resized + + +def augment_hsv(img, hgain=0.5, sgain=0.5, vgain=0.5): + r = np.random.uniform(-1, 1, 3) * [hgain, sgain, vgain] + 1 # random gains + hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV)) + dtype = img.dtype # uint8 + + x = np.arange(0, 256, dtype=np.int16) + lut_hue = ((x * r[0]) % 180).astype(dtype) + lut_sat = np.clip(x * r[1], 0, 255).astype(dtype) + lut_val = np.clip(x * r[2], 0, 255).astype(dtype) + + img_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val))).astype(dtype) + cv2.cvtColor(img_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed + + +def hist_equalize(img, clahe=True, bgr=False): + # Equalize histogram on BGR image 'img' with img.shape(n,m,3) and range 0-255 + yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV if bgr else cv2.COLOR_RGB2YUV) + if clahe: + c = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8)) + yuv[:, :, 0] = c.apply(yuv[:, :, 0]) + else: + yuv[:, :, 0] = cv2.equalizeHist(yuv[:, :, 0]) # equalize Y channel histogram + return cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR if bgr else cv2.COLOR_YUV2RGB) # convert YUV image to RGB + + +def load_mosaic(self, index): + # loads images in a 4-mosaic + + labels4, segments4 = [], [] + s = self.img_size + yc, xc = [int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border] # mosaic center x, y + indices = [index] + random.choices(self.indices, k=3) # 3 additional image indices + for i, index in enumerate(indices): + # Load image + img, _, (h, w) = load_image(self, index) + + # place img in img4 + if i == 0: # top left + img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles + x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # xmin, ymin, xmax, ymax (large image) + x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # xmin, ymin, xmax, ymax (small image) + elif i == 1: # top right + x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc + x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h + elif i == 2: # bottom left + x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h) + x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h) + elif i == 3: # bottom right + x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h) + x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) + + img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] + padw = x1a - x1b + padh = y1a - y1b + + # Labels + labels, segments = self.labels[index].copy(), self.segments[index].copy() + if labels.size: + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padw, padh) # normalized xywh to pixel xyxy format + segments = [xyn2xy(x, w, h, padw, padh) for x in segments] + labels4.append(labels) + segments4.extend(segments) + + # Concat/clip labels + labels4 = np.concatenate(labels4, 0) + for x in (labels4[:, 1:], *segments4): + np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() + # img4, labels4 = replicate(img4, labels4) # replicate + + # Augment + img4, labels4 = random_perspective(img4, labels4, segments4, + degrees=self.hyp['degrees'], + translate=self.hyp['translate'], + scale=self.hyp['scale'], + shear=self.hyp['shear'], + perspective=self.hyp['perspective'], + border=self.mosaic_border) # border to remove + + return img4, labels4 + + +def load_mosaic9(self, index): + # loads images in a 9-mosaic + + labels9, segments9 = [], [] + s = self.img_size + indices = [index] + random.choices(self.indices, k=8) # 8 additional image indices + for i, index in enumerate(indices): + # Load image + img, _, (h, w) = load_image(self, index) + + # place img in img9 + if i == 0: # center + img9 = np.full((s * 3, s * 3, img.shape[2]), 114, dtype=np.uint8) # base image with 4 tiles + h0, w0 = h, w + c = s, s, s + w, s + h # xmin, ymin, xmax, ymax (base) coordinates + elif i == 1: # top + c = s, s - h, s + w, s + elif i == 2: # top right + c = s + wp, s - h, s + wp + w, s + elif i == 3: # right + c = s + w0, s, s + w0 + w, s + h + elif i == 4: # bottom right + c = s + w0, s + hp, s + w0 + w, s + hp + h + elif i == 5: # bottom + c = s + w0 - w, s + h0, s + w0, s + h0 + h + elif i == 6: # bottom left + c = s + w0 - wp - w, s + h0, s + w0 - wp, s + h0 + h + elif i == 7: # left + c = s - w, s + h0 - h, s, s + h0 + elif i == 8: # top left + c = s - w, s + h0 - hp - h, s, s + h0 - hp + + padx, pady = c[:2] + x1, y1, x2, y2 = [max(x, 0) for x in c] # allocate coords + + # Labels + labels, segments = self.labels[index].copy(), self.segments[index].copy() + if labels.size: + labels[:, 1:] = xywhn2xyxy(labels[:, 1:], w, h, padx, pady) # normalized xywh to pixel xyxy format + segments = [xyn2xy(x, w, h, padx, pady) for x in segments] + labels9.append(labels) + segments9.extend(segments) + + # Image + img9[y1:y2, x1:x2] = img[y1 - pady:, x1 - padx:] # img9[ymin:ymax, xmin:xmax] + hp, wp = h, w # height, width previous + + # Offset + yc, xc = [int(random.uniform(0, s)) for _ in self.mosaic_border] # mosaic center x, y + img9 = img9[yc:yc + 2 * s, xc:xc + 2 * s] + + # Concat/clip labels + labels9 = np.concatenate(labels9, 0) + labels9[:, [1, 3]] -= xc + labels9[:, [2, 4]] -= yc + c = np.array([xc, yc]) # centers + segments9 = [x - c for x in segments9] + + for x in (labels9[:, 1:], *segments9): + np.clip(x, 0, 2 * s, out=x) # clip when using random_perspective() + # img9, labels9 = replicate(img9, labels9) # replicate + + # Augment + img9, labels9 = random_perspective(img9, labels9, segments9, + degrees=self.hyp['degrees'], + translate=self.hyp['translate'], + scale=self.hyp['scale'], + shear=self.hyp['shear'], + perspective=self.hyp['perspective'], + border=self.mosaic_border) # border to remove + + return img9, labels9 + + +def replicate(img, labels): + # Replicate labels + h, w = img.shape[:2] + boxes = labels[:, 1:].astype(int) + x1, y1, x2, y2 = boxes.T + s = ((x2 - x1) + (y2 - y1)) / 2 # side length (pixels) + for i in s.argsort()[:round(s.size * 0.5)]: # smallest indices + x1b, y1b, x2b, y2b = boxes[i] + bh, bw = y2b - y1b, x2b - x1b + yc, xc = int(random.uniform(0, h - bh)), int(random.uniform(0, w - bw)) # offset x, y + x1a, y1a, x2a, y2a = [xc, yc, xc + bw, yc + bh] + img[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # img4[ymin:ymax, xmin:xmax] + labels = np.append(labels, [[labels[i, 0], x1a, y1a, x2a, y2a]], axis=0) + + return img, labels + + +def letterbox(img, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32): + # Resize and pad image while meeting stride-multiple constraints + shape = img.shape[:2] # current shape [height, width] + if isinstance(new_shape, int): + new_shape = (new_shape, new_shape) + + # Scale ratio (new / old) + r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) + if not scaleup: # only scale down, do not scale up (for better test mAP) + r = min(r, 1.0) + + # Compute padding + ratio = r, r # width, height ratios + new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r)) + dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding + if auto: # minimum rectangle + dw, dh = np.mod(dw, stride), np.mod(dh, stride) # wh padding + elif scaleFill: # stretch + dw, dh = 0.0, 0.0 + new_unpad = (new_shape[1], new_shape[0]) + ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # width, height ratios + + dw /= 2 # divide padding into 2 sides + dh /= 2 + + if shape[::-1] != new_unpad: # resize + img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR) + top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) + left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) + img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color) # add border + return img, ratio, (dw, dh) + + +def random_perspective(img, targets=(), segments=(), degrees=10, translate=.1, scale=.1, shear=10, perspective=0.0, + border=(0, 0)): + # torchvision.transforms.RandomAffine(degrees=(-10, 10), translate=(.1, .1), scale=(.9, 1.1), shear=(-10, 10)) + # targets = [cls, xyxy] + + height = img.shape[0] + border[0] * 2 # shape(h,w,c) + width = img.shape[1] + border[1] * 2 + + # Center + C = np.eye(3) + C[0, 2] = -img.shape[1] / 2 # x translation (pixels) + C[1, 2] = -img.shape[0] / 2 # y translation (pixels) + + # Perspective + P = np.eye(3) + P[2, 0] = random.uniform(-perspective, perspective) # x perspective (about y) + P[2, 1] = random.uniform(-perspective, perspective) # y perspective (about x) + + # Rotation and Scale + R = np.eye(3) + a = random.uniform(-degrees, degrees) + # a += random.choice([-180, -90, 0, 90]) # add 90deg rotations to small rotations + s = random.uniform(1 - scale, 1 + scale) + # s = 2 ** random.uniform(-scale, scale) + R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s) + + # Shear + S = np.eye(3) + S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # x shear (deg) + S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180) # y shear (deg) + + # Translation + T = np.eye(3) + T[0, 2] = random.uniform(0.5 - translate, 0.5 + translate) * width # x translation (pixels) + T[1, 2] = random.uniform(0.5 - translate, 0.5 + translate) * height # y translation (pixels) + + # Combined rotation matrix + M = T @ S @ R @ P @ C # order of operations (right to left) is IMPORTANT + if (border[0] != 0) or (border[1] != 0) or (M != np.eye(3)).any(): # image changed + if perspective: + img = cv2.warpPerspective(img, M, dsize=(width, height), borderValue=(114, 114, 114)) + else: # affine + img = cv2.warpAffine(img, M[:2], dsize=(width, height), borderValue=(114, 114, 114)) + + # Visualize + # import matplotlib.pyplot as plt + # ax = plt.subplots(1, 2, figsize=(12, 6))[1].ravel() + # ax[0].imshow(img[:, :, ::-1]) # base + # ax[1].imshow(img2[:, :, ::-1]) # warped + + # Transform label coordinates + n = len(targets) + if n: + use_segments = any(x.any() for x in segments) + new = np.zeros((n, 4)) + if use_segments: # warp segments + segments = resample_segments(segments) # upsample + for i, segment in enumerate(segments): + xy = np.ones((len(segment), 3)) + xy[:, :2] = segment + xy = xy @ M.T # transform + xy = xy[:, :2] / xy[:, 2:3] if perspective else xy[:, :2] # perspective rescale or affine + + # clip + new[i] = segment2box(xy, width, height) + + else: # warp boxes + xy = np.ones((n * 4, 3)) + xy[:, :2] = targets[:, [1, 2, 3, 4, 1, 4, 3, 2]].reshape(n * 4, 2) # x1y1, x2y2, x1y2, x2y1 + xy = xy @ M.T # transform + xy = (xy[:, :2] / xy[:, 2:3] if perspective else xy[:, :2]).reshape(n, 8) # perspective rescale or affine + + # create new boxes + x = xy[:, [0, 2, 4, 6]] + y = xy[:, [1, 3, 5, 7]] + new = np.concatenate((x.min(1), y.min(1), x.max(1), y.max(1))).reshape(4, n).T + + # clip + new[:, [0, 2]] = new[:, [0, 2]].clip(0, width) + new[:, [1, 3]] = new[:, [1, 3]].clip(0, height) + + # filter candidates + i = box_candidates(box1=targets[:, 1:5].T * s, box2=new.T, area_thr=0.01 if use_segments else 0.10) + targets = targets[i] + targets[:, 1:5] = new[i] + + return img, targets + + +def box_candidates(box1, box2, wh_thr=2, ar_thr=20, area_thr=0.1, eps=1e-16): # box1(4,n), box2(4,n) + # Compute candidate boxes: box1 before augment, box2 after augment, wh_thr (pixels), aspect_ratio_thr, area_ratio + w1, h1 = box1[2] - box1[0], box1[3] - box1[1] + w2, h2 = box2[2] - box2[0], box2[3] - box2[1] + ar = np.maximum(w2 / (h2 + eps), h2 / (w2 + eps)) # aspect ratio + return (w2 > wh_thr) & (h2 > wh_thr) & (w2 * h2 / (w1 * h1 + eps) > area_thr) & (ar < ar_thr) # candidates + + +def cutout(image, labels): + # Applies image cutout augmentation https://arxiv.org/abs/1708.04552 + h, w = image.shape[:2] + + def bbox_ioa(box1, box2): + # Returns the intersection over box2 area given box1, box2. box1 is 4, box2 is nx4. boxes are x1y1x2y2 + box2 = box2.transpose() + + # Get the coordinates of bounding boxes + b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] + b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] + + # Intersection area + inter_area = (np.minimum(b1_x2, b2_x2) - np.maximum(b1_x1, b2_x1)).clip(0) * \ + (np.minimum(b1_y2, b2_y2) - np.maximum(b1_y1, b2_y1)).clip(0) + + # box2 area + box2_area = (b2_x2 - b2_x1) * (b2_y2 - b2_y1) + 1e-16 + + # Intersection over box2 area + return inter_area / box2_area + + # create random masks + scales = [0.5] * 1 + [0.25] * 2 + [0.125] * 4 + [0.0625] * 8 + [0.03125] * 16 # image size fraction + for s in scales: + mask_h = random.randint(1, int(h * s)) + mask_w = random.randint(1, int(w * s)) + + # box + xmin = max(0, random.randint(0, w) - mask_w // 2) + ymin = max(0, random.randint(0, h) - mask_h // 2) + xmax = min(w, xmin + mask_w) + ymax = min(h, ymin + mask_h) + + # apply random color mask + image[ymin:ymax, xmin:xmax] = [random.randint(64, 191) for _ in range(3)] + + # return unobscured labels + if len(labels) and s > 0.03: + box = np.array([xmin, ymin, xmax, ymax], dtype=np.float32) + ioa = bbox_ioa(box, labels[:, 1:5]) # intersection over area + labels = labels[ioa < 0.60] # remove >60% obscured labels + + return labels + + +def create_folder(path='./new'): + # Create folder + if os.path.exists(path): + shutil.rmtree(path) # delete output folder + os.makedirs(path) # make new output folder + + +def flatten_recursive(path='../coco128'): + # Flatten a recursive directory by bringing all files to top level + new_path = Path(path + '_flat') + create_folder(new_path) + for file in tqdm(glob.glob(str(Path(path)) + '/**/*.*', recursive=True)): + shutil.copyfile(file, new_path / Path(file).name) + + +def extract_boxes(path='../coco128/'): # from utils.datasets import *; extract_boxes('../coco128') + # Convert detection dataset into classification dataset, with one directory per class + + path = Path(path) # images dir + shutil.rmtree(path / 'classifier') if (path / 'classifier').is_dir() else None # remove existing + files = list(path.rglob('*.*')) + n = len(files) # number of files + for im_file in tqdm(files, total=n): + if im_file.suffix[1:] in img_formats: + # image + im = cv2.imread(str(im_file))[..., ::-1] # BGR to RGB + h, w = im.shape[:2] + + # labels + lb_file = Path(img2label_paths([str(im_file)])[0]) + if Path(lb_file).exists(): + with open(lb_file, 'r') as f: + lb = np.array([x.split() for x in f.read().strip().splitlines()], dtype=np.float32) # labels + + for j, x in enumerate(lb): + c = int(x[0]) # class + f = (path / 'classifier') / f'{c}' / f'{path.stem}_{im_file.stem}_{j}.jpg' # new filename + if not f.parent.is_dir(): + f.parent.mkdir(parents=True) + + b = x[1:] * [w, h, w, h] # box + # b[2:] = b[2:].max() # rectangle to square + b[2:] = b[2:] * 1.2 + 3 # pad + b = xywh2xyxy(b.reshape(-1, 4)).ravel().astype(np.int) + + b[[0, 2]] = np.clip(b[[0, 2]], 0, w) # clip boxes outside of image + b[[1, 3]] = np.clip(b[[1, 3]], 0, h) + assert cv2.imwrite(str(f), im[b[1]:b[3], b[0]:b[2]]), f'box failure in {f}' + + +def autosplit(path='../coco128', weights=(0.9, 0.1, 0.0), annotated_only=False): + """ Autosplit a dataset into train/val/test splits and save path/autosplit_*.txt files + Usage: from utils.datasets import *; autosplit('../coco128') + Arguments + path: Path to images directory + weights: Train, val, test weights (list) + annotated_only: Only use images with an annotated txt file + """ + path = Path(path) # images dir + files = sum([list(path.rglob(f"*.{img_ext}")) for img_ext in img_formats], []) # image files only + n = len(files) # number of files + indices = random.choices([0, 1, 2], weights=weights, k=n) # assign each image to a split + + txt = ['autosplit_train.txt', 'autosplit_val.txt', 'autosplit_test.txt'] # 3 txt files + [(path / x).unlink() for x in txt if (path / x).exists()] # remove existing + + print(f'Autosplitting images from {path}' + ', using *.txt labeled images only' * annotated_only) + for i, img in tqdm(zip(indices, files), total=n): + if not annotated_only or Path(img2label_paths([str(img)])[0]).exists(): # check label + with open(path / txt[i], 'a') as f: + f.write(str(img) + '\n') # add image to txt file diff --git a/Yolov5-Deepsort/utils/flask_rest_api/README.md b/Yolov5-Deepsort/utils/flask_rest_api/README.md new file mode 100644 index 0000000000000000000000000000000000000000..324c2416dcd9fa83b18286c33ce309f4f5573637 --- /dev/null +++ b/Yolov5-Deepsort/utils/flask_rest_api/README.md @@ -0,0 +1,68 @@ +# Flask REST API +[REST](https://en.wikipedia.org/wiki/Representational_state_transfer) [API](https://en.wikipedia.org/wiki/API)s are commonly used to expose Machine Learning (ML) models to other services. This folder contains an example REST API created using Flask to expose the YOLOv5s model from [PyTorch Hub](https://pytorch.org/hub/ultralytics_yolov5/). + +## Requirements + +[Flask](https://palletsprojects.com/p/flask/) is required. Install with: +```shell +$ pip install Flask +``` + +## Run + +After Flask installation run: + +```shell +$ python3 restapi.py --port 5000 +``` + +Then use [curl](https://curl.se/) to perform a request: + +```shell +$ curl -X POST -F image=@zidane.jpg 'http://localhost:5000/v1/object-detection/yolov5s'` +``` + +The model inference results are returned as a JSON response: + +```json +[ + { + "class": 0, + "confidence": 0.8900438547, + "height": 0.9318675399, + "name": "person", + "width": 0.3264600933, + "xcenter": 0.7438579798, + "ycenter": 0.5207948685 + }, + { + "class": 0, + "confidence": 0.8440024257, + "height": 0.7155083418, + "name": "person", + "width": 0.6546785235, + "xcenter": 0.427829951, + "ycenter": 0.6334488392 + }, + { + "class": 27, + "confidence": 0.3771208823, + "height": 0.3902671337, + "name": "tie", + "width": 0.0696444362, + "xcenter": 0.3675483763, + "ycenter": 0.7991207838 + }, + { + "class": 27, + "confidence": 0.3527112305, + "height": 0.1540903747, + "name": "tie", + "width": 0.0336618312, + "xcenter": 0.7814827561, + "ycenter": 0.5065554976 + } +] +``` + +An example python script to perform inference using [requests](https://docs.python-requests.org/en/master/) is given in `example_request.py` diff --git a/Yolov5-Deepsort/utils/flask_rest_api/example_request.py b/Yolov5-Deepsort/utils/flask_rest_api/example_request.py new file mode 100644 index 0000000000000000000000000000000000000000..ff21f30f93ca37578ce45366a1ddbe3f3eadaa79 --- /dev/null +++ b/Yolov5-Deepsort/utils/flask_rest_api/example_request.py @@ -0,0 +1,13 @@ +"""Perform test request""" +import pprint + +import requests + +DETECTION_URL = "http://localhost:5000/v1/object-detection/yolov5s" +TEST_IMAGE = "zidane.jpg" + +image_data = open(TEST_IMAGE, "rb").read() + +response = requests.post(DETECTION_URL, files={"image": image_data}).json() + +pprint.pprint(response) diff --git a/Yolov5-Deepsort/utils/flask_rest_api/restapi.py b/Yolov5-Deepsort/utils/flask_rest_api/restapi.py new file mode 100644 index 0000000000000000000000000000000000000000..a54e2309715ce5d3d41e9e2e76a347db3cdb7ccb --- /dev/null +++ b/Yolov5-Deepsort/utils/flask_rest_api/restapi.py @@ -0,0 +1,37 @@ +""" +Run a rest API exposing the yolov5s object detection model +""" +import argparse +import io + +import torch +from PIL import Image +from flask import Flask, request + +app = Flask(__name__) + +DETECTION_URL = "/v1/object-detection/yolov5s" + + +@app.route(DETECTION_URL, methods=["POST"]) +def predict(): + if not request.method == "POST": + return + + if request.files.get("image"): + image_file = request.files["image"] + image_bytes = image_file.read() + + img = Image.open(io.BytesIO(image_bytes)) + + results = model(img, size=640) # reduce size=320 for faster inference + return results.pandas().xyxy[0].to_json(orient="records") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Flask API exposing YOLOv5 model") + parser.add_argument("--port", default=5000, type=int, help="port number") + args = parser.parse_args() + + model = torch.hub.load("ultralytics/yolov5", "yolov5s", force_reload=True) # force_reload to recache + app.run(host="0.0.0.0", port=args.port) # debug=True causes Restarting with stat diff --git a/Yolov5-Deepsort/utils/general.py b/Yolov5-Deepsort/utils/general.py new file mode 100644 index 0000000000000000000000000000000000000000..9a882715f0ad43a0271252fca3aeb06f6169d1ff --- /dev/null +++ b/Yolov5-Deepsort/utils/general.py @@ -0,0 +1,692 @@ +# YOLOv5 general utils + +import glob +import logging +import math +import os +import platform +import random +import re +import subprocess +import time +from itertools import repeat +from multiprocessing.pool import ThreadPool +from pathlib import Path + +import cv2 +import numpy as np +import pandas as pd +import pkg_resources as pkg +import torch +import torchvision +import yaml + +from utils.google_utils import gsutil_getsize +from utils.metrics import fitness +from utils.torch_utils import init_torch_seeds + +# Settings +torch.set_printoptions(linewidth=320, precision=5, profile='long') +np.set_printoptions(linewidth=320, formatter={'float_kind': '{:11.5g}'.format}) # format short g, %precision=5 +pd.options.display.max_columns = 10 +cv2.setNumThreads(0) # prevent OpenCV from multithreading (incompatible with PyTorch DataLoader) +os.environ['NUMEXPR_MAX_THREADS'] = str(min(os.cpu_count(), 8)) # NumExpr max threads + + +def set_logging(rank=-1, verbose=True): + logging.basicConfig( + format="%(message)s", + level=logging.INFO if (verbose and rank in [-1, 0]) else logging.WARN) + + +def init_seeds(seed=0): + # Initialize random number generator (RNG) seeds + random.seed(seed) + np.random.seed(seed) + init_torch_seeds(seed) + + +def get_latest_run(search_dir='.'): + # Return path to most recent 'last.pt' in /runs (i.e. to --resume from) + last_list = glob.glob(f'{search_dir}/**/last*.pt', recursive=True) + return max(last_list, key=os.path.getctime) if last_list else '' + + +def is_docker(): + # Is environment a Docker container + return Path('/workspace').exists() # or Path('/.dockerenv').exists() + + +def is_colab(): + # Is environment a Google Colab instance + try: + import google.colab + return True + except Exception as e: + return False + + +def emojis(str=''): + # Return platform-dependent emoji-safe version of string + return str.encode().decode('ascii', 'ignore') if platform.system() == 'Windows' else str + + +def file_size(file): + # Return file size in MB + return Path(file).stat().st_size / 1e6 + + +def check_online(): + # Check internet connectivity + import socket + try: + socket.create_connection(("1.1.1.1", 443), 5) # check host accesability + return True + except OSError: + return False + + +def check_git_status(): + # Recommend 'git pull' if code is out of date + print(colorstr('github: '), end='') + try: + assert Path('.git').exists(), 'skipping check (not a git repository)' + assert not is_docker(), 'skipping check (Docker image)' + assert check_online(), 'skipping check (offline)' + + cmd = 'git fetch && git config --get remote.origin.url' + url = subprocess.check_output(cmd, shell=True).decode().strip().rstrip('.git') # github repo url + branch = subprocess.check_output('git rev-parse --abbrev-ref HEAD', shell=True).decode().strip() # checked out + n = int(subprocess.check_output(f'git rev-list {branch}..origin/master --count', shell=True)) # commits behind + if n > 0: + s = f"⚠️ WARNING: code is out of date by {n} commit{'s' * (n > 1)}. " \ + f"Use 'git pull' to update or 'git clone {url}' to download latest." + else: + s = f'up to date with {url} ✅' + print(emojis(s)) # emoji-safe + except Exception as e: + print(e) + + +def check_python(minimum='3.7.0', required=True): + # Check current python version vs. required python version + current = platform.python_version() + result = pkg.parse_version(current) >= pkg.parse_version(minimum) + if required: + assert result, f'Python {minimum} required by YOLOv5, but Python {current} is currently installed' + return result + + +def check_requirements(requirements='requirements.txt', exclude=()): + # Check installed dependencies meet requirements (pass *.txt file or list of packages) + prefix = colorstr('red', 'bold', 'requirements:') + check_python() # check python version + if isinstance(requirements, (str, Path)): # requirements.txt file + file = Path(requirements) + if not file.exists(): + print(f"{prefix} {file.resolve()} not found, check failed.") + return + requirements = [f'{x.name}{x.specifier}' for x in pkg.parse_requirements(file.open()) if x.name not in exclude] + else: # list or tuple of packages + requirements = [x for x in requirements if x not in exclude] + + n = 0 # number of packages updates + for r in requirements: + try: + pkg.require(r) + except Exception as e: # DistributionNotFound or VersionConflict if requirements not met + n += 1 + print(f"{prefix} {r} not found and is required by YOLOv5, attempting auto-update...") + try: + print(subprocess.check_output(f"pip install '{r}'", shell=True).decode()) + except Exception as e: + print(f'{prefix} {e}') + + if n: # if packages updated + source = file.resolve() if 'file' in locals() else requirements + s = f"{prefix} {n} package{'s' * (n > 1)} updated per {source}\n" \ + f"{prefix} ⚠️ {colorstr('bold', 'Restart runtime or rerun command for updates to take effect')}\n" + print(emojis(s)) # emoji-safe + + +def check_img_size(img_size, s=32): + # Verify img_size is a multiple of stride s + new_size = make_divisible(img_size, int(s)) # ceil gs-multiple + if new_size != img_size: + print('WARNING: --img-size %g must be multiple of max stride %g, updating to %g' % (img_size, s, new_size)) + return new_size + + +def check_imshow(): + # Check if environment supports image displays + try: + assert not is_docker(), 'cv2.imshow() is disabled in Docker environments' + assert not is_colab(), 'cv2.imshow() is disabled in Google Colab environments' + cv2.imshow('test', np.zeros((1, 1, 3))) + cv2.waitKey(1) + cv2.destroyAllWindows() + cv2.waitKey(1) + return True + except Exception as e: + print(f'WARNING: Environment does not support cv2.imshow() or PIL Image.show() image displays\n{e}') + return False + + +def check_file(file): + # Search for file if not found + if Path(file).is_file() or file == '': + return file + else: + files = glob.glob('./**/' + file, recursive=True) # find file + assert len(files), f'File Not Found: {file}' # assert file was found + assert len(files) == 1, f"Multiple files match '{file}', specify exact path: {files}" # assert unique + return files[0] # return file + + +def check_dataset(dict): + # Download dataset if not found locally + val, s = dict.get('val'), dict.get('download') + if val and len(val): + val = [Path(x).resolve() for x in (val if isinstance(val, list) else [val])] # val path + if not all(x.exists() for x in val): + print('\nWARNING: Dataset not found, nonexistent paths: %s' % [str(x) for x in val if not x.exists()]) + if s and len(s): # download script + if s.startswith('http') and s.endswith('.zip'): # URL + f = Path(s).name # filename + print(f'Downloading {s} ...') + torch.hub.download_url_to_file(s, f) + r = os.system(f'unzip -q {f} -d ../ && rm {f}') # unzip + elif s.startswith('bash '): # bash script + print(f'Running {s} ...') + r = os.system(s) + else: # python script + r = exec(s) # return None + print('Dataset autodownload %s\n' % ('success' if r in (0, None) else 'failure')) # print result + else: + raise Exception('Dataset not found.') + + +def download(url, dir='.', unzip=True, delete=True, curl=False, threads=1): + # Multi-threaded file download and unzip function + def download_one(url, dir): + # Download 1 file + f = dir / Path(url).name # filename + if not f.exists(): + print(f'Downloading {url} to {f}...') + if curl: + os.system(f"curl -L '{url}' -o '{f}' --retry 9 -C -") # curl download, retry and resume on fail + else: + torch.hub.download_url_to_file(url, f, progress=True) # torch download + if unzip and f.suffix in ('.zip', '.gz'): + print(f'Unzipping {f}...') + if f.suffix == '.zip': + s = f'unzip -qo {f} -d {dir} && rm {f}' # unzip -quiet -overwrite + elif f.suffix == '.gz': + s = f'tar xfz {f} --directory {f.parent}' # unzip + if delete: # delete zip file after unzip + s += f' && rm {f}' + os.system(s) + + dir = Path(dir) + dir.mkdir(parents=True, exist_ok=True) # make directory + if threads > 1: + pool = ThreadPool(threads) + pool.imap(lambda x: download_one(*x), zip(url, repeat(dir))) # multi-threaded + pool.close() + pool.join() + else: + for u in tuple(url) if isinstance(url, str) else url: + download_one(u, dir) + + +def make_divisible(x, divisor): + # Returns x evenly divisible by divisor + return math.ceil(x / divisor) * divisor + + +def clean_str(s): + # Cleans a string by replacing special characters with underscore _ + return re.sub(pattern="[|@#!¡·$€%&()=?¿^*;:,¨´><+]", repl="_", string=s) + + +def one_cycle(y1=0.0, y2=1.0, steps=100): + # lambda function for sinusoidal ramp from y1 to y2 + return lambda x: ((1 - math.cos(x * math.pi / steps)) / 2) * (y2 - y1) + y1 + + +def colorstr(*input): + # Colors a string https://en.wikipedia.org/wiki/ANSI_escape_code, i.e. colorstr('blue', 'hello world') + *args, string = input if len(input) > 1 else ('blue', 'bold', input[0]) # color arguments, string + colors = {'black': '\033[30m', # basic colors + 'red': '\033[31m', + 'green': '\033[32m', + 'yellow': '\033[33m', + 'blue': '\033[34m', + 'magenta': '\033[35m', + 'cyan': '\033[36m', + 'white': '\033[37m', + 'bright_black': '\033[90m', # bright colors + 'bright_red': '\033[91m', + 'bright_green': '\033[92m', + 'bright_yellow': '\033[93m', + 'bright_blue': '\033[94m', + 'bright_magenta': '\033[95m', + 'bright_cyan': '\033[96m', + 'bright_white': '\033[97m', + 'end': '\033[0m', # misc + 'bold': '\033[1m', + 'underline': '\033[4m'} + return ''.join(colors[x] for x in args) + f'{string}' + colors['end'] + + +def labels_to_class_weights(labels, nc=80): + # Get class weights (inverse frequency) from training labels + if labels[0] is None: # no labels loaded + return torch.Tensor() + + labels = np.concatenate(labels, 0) # labels.shape = (866643, 5) for COCO + classes = labels[:, 0].astype(np.int) # labels = [class xywh] + weights = np.bincount(classes, minlength=nc) # occurrences per class + + # Prepend gridpoint count (for uCE training) + # gpi = ((320 / 32 * np.array([1, 2, 4])) ** 2 * 3).sum() # gridpoints per image + # weights = np.hstack([gpi * len(labels) - weights.sum() * 9, weights * 9]) ** 0.5 # prepend gridpoints to start + + weights[weights == 0] = 1 # replace empty bins with 1 + weights = 1 / weights # number of targets per class + weights /= weights.sum() # normalize + return torch.from_numpy(weights) + + +def labels_to_image_weights(labels, nc=80, class_weights=np.ones(80)): + # Produces image weights based on class_weights and image contents + class_counts = np.array([np.bincount(x[:, 0].astype(np.int), minlength=nc) for x in labels]) + image_weights = (class_weights.reshape(1, nc) * class_counts).sum(1) + # index = random.choices(range(n), weights=image_weights, k=1) # weight image sample + return image_weights + + +def coco80_to_coco91_class(): # converts 80-index (val2014) to 91-index (paper) + # https://tech.amikelive.com/node-718/what-object-categories-labels-are-in-coco-dataset/ + # a = np.loadtxt('data/coco.names', dtype='str', delimiter='\n') + # b = np.loadtxt('data/coco_paper.names', dtype='str', delimiter='\n') + # x1 = [list(a[i] == b).index(True) + 1 for i in range(80)] # darknet to coco + # x2 = [list(b[i] == a).index(True) if any(b[i] == a) else None for i in range(91)] # coco to darknet + x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 28, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 67, 70, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 88, 89, 90] + return x + + +def xyxy2xywh(x): + # Convert nx4 boxes from [x1, y1, x2, y2] to [x, y, w, h] where xy1=top-left, xy2=bottom-right + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[:, 0] = (x[:, 0] + x[:, 2]) / 2 # x center + y[:, 1] = (x[:, 1] + x[:, 3]) / 2 # y center + y[:, 2] = x[:, 2] - x[:, 0] # width + y[:, 3] = x[:, 3] - x[:, 1] # height + return y + + +def xywh2xyxy(x): + # Convert nx4 boxes from [x, y, w, h] to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-right + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[:, 0] = x[:, 0] - x[:, 2] / 2 # top left x + y[:, 1] = x[:, 1] - x[:, 3] / 2 # top left y + y[:, 2] = x[:, 0] + x[:, 2] / 2 # bottom right x + y[:, 3] = x[:, 1] + x[:, 3] / 2 # bottom right y + return y + + +def xywhn2xyxy(x, w=640, h=640, padw=0, padh=0): + # Convert nx4 boxes from [x, y, w, h] normalized to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-right + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[:, 0] = w * (x[:, 0] - x[:, 2] / 2) + padw # top left x + y[:, 1] = h * (x[:, 1] - x[:, 3] / 2) + padh # top left y + y[:, 2] = w * (x[:, 0] + x[:, 2] / 2) + padw # bottom right x + y[:, 3] = h * (x[:, 1] + x[:, 3] / 2) + padh # bottom right y + return y + + +def xyn2xy(x, w=640, h=640, padw=0, padh=0): + # Convert normalized segments into pixel segments, shape (n,2) + y = x.clone() if isinstance(x, torch.Tensor) else np.copy(x) + y[:, 0] = w * x[:, 0] + padw # top left x + y[:, 1] = h * x[:, 1] + padh # top left y + return y + + +def segment2box(segment, width=640, height=640): + # Convert 1 segment label to 1 box label, applying inside-image constraint, i.e. (xy1, xy2, ...) to (xyxy) + x, y = segment.T # segment xy + inside = (x >= 0) & (y >= 0) & (x <= width) & (y <= height) + x, y, = x[inside], y[inside] + return np.array([x.min(), y.min(), x.max(), y.max()]) if any(x) else np.zeros((1, 4)) # xyxy + + +def segments2boxes(segments): + # Convert segment labels to box labels, i.e. (cls, xy1, xy2, ...) to (cls, xywh) + boxes = [] + for s in segments: + x, y = s.T # segment xy + boxes.append([x.min(), y.min(), x.max(), y.max()]) # cls, xyxy + return xyxy2xywh(np.array(boxes)) # cls, xywh + + +def resample_segments(segments, n=1000): + # Up-sample an (n,2) segment + for i, s in enumerate(segments): + x = np.linspace(0, len(s) - 1, n) + xp = np.arange(len(s)) + segments[i] = np.concatenate([np.interp(x, xp, s[:, i]) for i in range(2)]).reshape(2, -1).T # segment xy + return segments + + +def scale_coords(img1_shape, coords, img0_shape, ratio_pad=None): + # Rescale coords (xyxy) from img1_shape to img0_shape + if ratio_pad is None: # calculate from img0_shape + gain = min(img1_shape[0] / img0_shape[0], img1_shape[1] / img0_shape[1]) # gain = old / new + pad = (img1_shape[1] - img0_shape[1] * gain) / 2, (img1_shape[0] - img0_shape[0] * gain) / 2 # wh padding + else: + gain = ratio_pad[0][0] + pad = ratio_pad[1] + + coords[:, [0, 2]] -= pad[0] # x padding + coords[:, [1, 3]] -= pad[1] # y padding + coords[:, :4] /= gain + clip_coords(coords, img0_shape) + return coords + + +def clip_coords(boxes, img_shape): + # Clip bounding xyxy bounding boxes to image shape (height, width) + boxes[:, 0].clamp_(0, img_shape[1]) # x1 + boxes[:, 1].clamp_(0, img_shape[0]) # y1 + boxes[:, 2].clamp_(0, img_shape[1]) # x2 + boxes[:, 3].clamp_(0, img_shape[0]) # y2 + + +def bbox_iou(box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False, eps=1e-7): + # Returns the IoU of box1 to box2. box1 is 4, box2 is nx4 + box2 = box2.T + + # Get the coordinates of bounding boxes + if x1y1x2y2: # x1, y1, x2, y2 = box1 + b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3] + b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3] + else: # transform from xywh to xyxy + b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2 + b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2 + b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2 + b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2 + + # Intersection area + inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \ + (torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0) + + # Union Area + w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps + w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps + union = w1 * h1 + w2 * h2 - inter + eps + + iou = inter / union + if GIoU or DIoU or CIoU: + cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1) # convex (smallest enclosing box) width + ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1) # convex height + if CIoU or DIoU: # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1 + c2 = cw ** 2 + ch ** 2 + eps # convex diagonal squared + rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 + + (b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4 # center distance squared + if DIoU: + return iou - rho2 / c2 # DIoU + elif CIoU: # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47 + v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2) + with torch.no_grad(): + alpha = v / (v - iou + (1 + eps)) + return iou - (rho2 / c2 + v * alpha) # CIoU + else: # GIoU https://arxiv.org/pdf/1902.09630.pdf + c_area = cw * ch + eps # convex area + return iou - (c_area - union) / c_area # GIoU + else: + return iou # IoU + + +def box_iou(box1, box2): + # https://github.com/pytorch/vision/blob/master/torchvision/ops/boxes.py + """ + Return intersection-over-union (Jaccard index) of boxes. + Both sets of boxes are expected to be in (x1, y1, x2, y2) format. + Arguments: + box1 (Tensor[N, 4]) + box2 (Tensor[M, 4]) + Returns: + iou (Tensor[N, M]): the NxM matrix containing the pairwise + IoU values for every element in boxes1 and boxes2 + """ + + def box_area(box): + # box = 4xn + return (box[2] - box[0]) * (box[3] - box[1]) + + area1 = box_area(box1.T) + area2 = box_area(box2.T) + + # inter(N,M) = (rb(N,M,2) - lt(N,M,2)).clamp(0).prod(2) + inter = (torch.min(box1[:, None, 2:], box2[:, 2:]) - torch.max(box1[:, None, :2], box2[:, :2])).clamp(0).prod(2) + return inter / (area1[:, None] + area2 - inter) # iou = inter / (area1 + area2 - inter) + + +def wh_iou(wh1, wh2): + # Returns the nxm IoU matrix. wh1 is nx2, wh2 is mx2 + wh1 = wh1[:, None] # [N,1,2] + wh2 = wh2[None] # [1,M,2] + inter = torch.min(wh1, wh2).prod(2) # [N,M] + return inter / (wh1.prod(2) + wh2.prod(2) - inter) # iou = inter / (area1 + area2 - inter) + + +def non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45, classes=None, agnostic=False, multi_label=False, + labels=(), max_det=300): + """Runs Non-Maximum Suppression (NMS) on inference results + + Returns: + list of detections, on (n,6) tensor per image [xyxy, conf, cls] + """ + + nc = prediction.shape[2] - 5 # number of classes + xc = prediction[..., 4] > conf_thres # candidates + + # Checks + assert 0 <= conf_thres <= 1, f'Invalid Confidence threshold {conf_thres}, valid values are between 0.0 and 1.0' + assert 0 <= iou_thres <= 1, f'Invalid IoU {iou_thres}, valid values are between 0.0 and 1.0' + + # Settings + min_wh, max_wh = 2, 4096 # (pixels) minimum and maximum box width and height + max_nms = 30000 # maximum number of boxes into torchvision.ops.nms() + time_limit = 10.0 # seconds to quit after + redundant = True # require redundant detections + multi_label &= nc > 1 # multiple labels per box (adds 0.5ms/img) + merge = False # use merge-NMS + + t = time.time() + output = [torch.zeros((0, 6), device=prediction.device)] * prediction.shape[0] + for xi, x in enumerate(prediction): # image index, image inference + # Apply constraints + # x[((x[..., 2:4] < min_wh) | (x[..., 2:4] > max_wh)).any(1), 4] = 0 # width-height + x = x[xc[xi]] # confidence + + # Cat apriori labels if autolabelling + if labels and len(labels[xi]): + l = labels[xi] + v = torch.zeros((len(l), nc + 5), device=x.device) + v[:, :4] = l[:, 1:5] # box + v[:, 4] = 1.0 # conf + v[range(len(l)), l[:, 0].long() + 5] = 1.0 # cls + x = torch.cat((x, v), 0) + + # If none remain process next image + if not x.shape[0]: + continue + + # Compute conf + x[:, 5:] *= x[:, 4:5] # conf = obj_conf * cls_conf + + # Box (center x, center y, width, height) to (x1, y1, x2, y2) + box = xywh2xyxy(x[:, :4]) + + # Detections matrix nx6 (xyxy, conf, cls) + if multi_label: + i, j = (x[:, 5:] > conf_thres).nonzero(as_tuple=False).T + x = torch.cat((box[i], x[i, j + 5, None], j[:, None].float()), 1) + else: # best class only + conf, j = x[:, 5:].max(1, keepdim=True) + x = torch.cat((box, conf, j.float()), 1)[conf.view(-1) > conf_thres] + + # Filter by class + if classes is not None: + x = x[(x[:, 5:6] == torch.tensor(classes, device=x.device)).any(1)] + + # Apply finite constraint + # if not torch.isfinite(x).all(): + # x = x[torch.isfinite(x).all(1)] + + # Check shape + n = x.shape[0] # number of boxes + if not n: # no boxes + continue + elif n > max_nms: # excess boxes + x = x[x[:, 4].argsort(descending=True)[:max_nms]] # sort by confidence + + # Batched NMS + c = x[:, 5:6] * (0 if agnostic else max_wh) # classes + boxes, scores = x[:, :4] + c, x[:, 4] # boxes (offset by class), scores + i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS + if i.shape[0] > max_det: # limit detections + i = i[:max_det] + if merge and (1 < n < 3E3): # Merge NMS (boxes merged using weighted mean) + # update boxes as boxes(i,4) = weights(i,n) * boxes(n,4) + iou = box_iou(boxes[i], boxes) > iou_thres # iou matrix + weights = iou * scores[None] # box weights + x[i, :4] = torch.mm(weights, x[:, :4]).float() / weights.sum(1, keepdim=True) # merged boxes + if redundant: + i = i[iou.sum(1) > 1] # require redundancy + + output[xi] = x[i] + if (time.time() - t) > time_limit: + print(f'WARNING: NMS time limit {time_limit}s exceeded') + break # time limit exceeded + + return output + + +def strip_optimizer(f='best.pt', s=''): # from utils.general import *; strip_optimizer() + # Strip optimizer from 'f' to finalize training, optionally save as 's' + x = torch.load(f, map_location=torch.device('cpu')) + if x.get('ema'): + x['model'] = x['ema'] # replace model with ema + for k in 'optimizer', 'training_results', 'wandb_id', 'ema', 'updates': # keys + x[k] = None + x['epoch'] = -1 + x['model'].half() # to FP16 + for p in x['model'].parameters(): + p.requires_grad = False + torch.save(x, s or f) + mb = os.path.getsize(s or f) / 1E6 # filesize + print(f"Optimizer stripped from {f},{(' saved as %s,' % s) if s else ''} {mb:.1f}MB") + + +def print_mutation(hyp, results, yaml_file='hyp_evolved.yaml', bucket=''): + # Print mutation results to evolve.txt (for use with train.py --evolve) + a = '%10s' * len(hyp) % tuple(hyp.keys()) # hyperparam keys + b = '%10.3g' * len(hyp) % tuple(hyp.values()) # hyperparam values + c = '%10.4g' * len(results) % results # results (P, R, mAP@0.5, mAP@0.5:0.95, val_losses x 3) + print('\n%s\n%s\nEvolved fitness: %s\n' % (a, b, c)) + + if bucket: + url = 'gs://%s/evolve.txt' % bucket + if gsutil_getsize(url) > (os.path.getsize('evolve.txt') if os.path.exists('evolve.txt') else 0): + os.system('gsutil cp %s .' % url) # download evolve.txt if larger than local + + with open('evolve.txt', 'a') as f: # append result + f.write(c + b + '\n') + x = np.unique(np.loadtxt('evolve.txt', ndmin=2), axis=0) # load unique rows + x = x[np.argsort(-fitness(x))] # sort + np.savetxt('evolve.txt', x, '%10.3g') # save sort by fitness + + # Save yaml + for i, k in enumerate(hyp.keys()): + hyp[k] = float(x[0, i + 7]) + with open(yaml_file, 'w') as f: + results = tuple(x[0, :7]) + c = '%10.4g' * len(results) % results # results (P, R, mAP@0.5, mAP@0.5:0.95, val_losses x 3) + f.write('# Hyperparameter Evolution Results\n# Generations: %g\n# Metrics: ' % len(x) + c + '\n\n') + yaml.safe_dump(hyp, f, sort_keys=False) + + if bucket: + os.system('gsutil cp evolve.txt %s gs://%s' % (yaml_file, bucket)) # upload + + +def apply_classifier(x, model, img, im0): + # Apply a second stage classifier to yolo outputs + im0 = [im0] if isinstance(im0, np.ndarray) else im0 + for i, d in enumerate(x): # per image + if d is not None and len(d): + d = d.clone() + + # Reshape and pad cutouts + b = xyxy2xywh(d[:, :4]) # boxes + b[:, 2:] = b[:, 2:].max(1)[0].unsqueeze(1) # rectangle to square + b[:, 2:] = b[:, 2:] * 1.3 + 30 # pad + d[:, :4] = xywh2xyxy(b).long() + + # Rescale boxes from img_size to im0 size + scale_coords(img.shape[2:], d[:, :4], im0[i].shape) + + # Classes + pred_cls1 = d[:, 5].long() + ims = [] + for j, a in enumerate(d): # per item + cutout = im0[i][int(a[1]):int(a[3]), int(a[0]):int(a[2])] + im = cv2.resize(cutout, (224, 224)) # BGR + # cv2.imwrite('test%i.jpg' % j, cutout) + + im = im[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 + im = np.ascontiguousarray(im, dtype=np.float32) # uint8 to float32 + im /= 255.0 # 0 - 255 to 0.0 - 1.0 + ims.append(im) + + pred_cls2 = model(torch.Tensor(ims).to(d.device)).argmax(1) # classifier prediction + x[i] = x[i][pred_cls1 == pred_cls2] # retain matching class detections + + return x + + +def save_one_box(xyxy, im, file='image.jpg', gain=1.02, pad=10, square=False, BGR=False, save=True): + # Save image crop as {file} with crop size multiple {gain} and {pad} pixels. Save and/or return crop + xyxy = torch.tensor(xyxy).view(-1, 4) + b = xyxy2xywh(xyxy) # boxes + if square: + b[:, 2:] = b[:, 2:].max(1)[0].unsqueeze(1) # attempt rectangle to square + b[:, 2:] = b[:, 2:] * gain + pad # box wh * gain + pad + xyxy = xywh2xyxy(b).long() + clip_coords(xyxy, im.shape) + crop = im[int(xyxy[0, 1]):int(xyxy[0, 3]), int(xyxy[0, 0]):int(xyxy[0, 2]), ::(1 if BGR else -1)] + if save: + cv2.imwrite(str(increment_path(file, mkdir=True).with_suffix('.jpg')), crop) + return crop + + +def increment_path(path, exist_ok=False, sep='', mkdir=False): + # Increment file or directory path, i.e. runs/exp --> runs/exp{sep}2, runs/exp{sep}3, ... etc. + path = Path(path) # os-agnostic + if path.exists() and not exist_ok: + suffix = path.suffix + path = path.with_suffix('') + dirs = glob.glob(f"{path}{sep}*") # similar paths + matches = [re.search(rf"%s{sep}(\d+)" % path.stem, d) for d in dirs] + i = [int(m.groups()[0]) for m in matches if m] # indices + n = max(i) + 1 if i else 2 # increment number + path = Path(f"{path}{sep}{n}{suffix}") # update path + dir = path if path.suffix == '' else path.parent # directory + if not dir.exists() and mkdir: + dir.mkdir(parents=True, exist_ok=True) # make directory + return path diff --git a/Yolov5-Deepsort/utils/google_app_engine/Dockerfile b/Yolov5-Deepsort/utils/google_app_engine/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..0155618f475104e9858b81470339558156c94e13 --- /dev/null +++ b/Yolov5-Deepsort/utils/google_app_engine/Dockerfile @@ -0,0 +1,25 @@ +FROM gcr.io/google-appengine/python + +# Create a virtualenv for dependencies. This isolates these packages from +# system-level packages. +# Use -p python3 or -p python3.7 to select python version. Default is version 2. +RUN virtualenv /env -p python3 + +# Setting these environment variables are the same as running +# source /env/bin/activate. +ENV VIRTUAL_ENV /env +ENV PATH /env/bin:$PATH + +RUN apt-get update && apt-get install -y python-opencv + +# Copy the application's requirements.txt and run pip to install all +# dependencies into the virtualenv. +ADD requirements.txt /app/requirements.txt +RUN pip install -r /app/requirements.txt + +# Add the application source code. +ADD . /app + +# Run a WSGI server to serve the application. gunicorn must be declared as +# a dependency in requirements.txt. +CMD gunicorn -b :$PORT main:app diff --git a/Yolov5-Deepsort/utils/google_app_engine/additional_requirements.txt b/Yolov5-Deepsort/utils/google_app_engine/additional_requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..5fcc30524a59ca2d3356b07725df7e2b64f81422 --- /dev/null +++ b/Yolov5-Deepsort/utils/google_app_engine/additional_requirements.txt @@ -0,0 +1,4 @@ +# add these requirements in your app on top of the existing ones +pip==18.1 +Flask==1.0.2 +gunicorn==19.9.0 diff --git a/Yolov5-Deepsort/utils/google_app_engine/app.yaml b/Yolov5-Deepsort/utils/google_app_engine/app.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ac29d104b144abd634482b35282725d694e84a2b --- /dev/null +++ b/Yolov5-Deepsort/utils/google_app_engine/app.yaml @@ -0,0 +1,14 @@ +runtime: custom +env: flex + +service: yolov5app + +liveness_check: + initial_delay_sec: 600 + +manual_scaling: + instances: 1 +resources: + cpu: 1 + memory_gb: 4 + disk_size_gb: 20 \ No newline at end of file diff --git a/Yolov5-Deepsort/utils/google_utils.py b/Yolov5-Deepsort/utils/google_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..63d3e5b212f3813847eeeb5cd6524155a7058f27 --- /dev/null +++ b/Yolov5-Deepsort/utils/google_utils.py @@ -0,0 +1,127 @@ +# Google utils: https://cloud.google.com/storage/docs/reference/libraries + +import os +import platform +import subprocess +import time +from pathlib import Path + +import requests +import torch + + +def gsutil_getsize(url=''): + # gs://bucket/file size https://cloud.google.com/storage/docs/gsutil/commands/du + s = subprocess.check_output(f'gsutil du {url}', shell=True).decode('utf-8') + return eval(s.split(' ')[0]) if len(s) else 0 # bytes + + +def attempt_download(file, repo='ultralytics/yolov5'): + # Attempt file download if does not exist + file = Path(str(file).strip().replace("'", '')) + + if not file.exists(): + file.parent.mkdir(parents=True, exist_ok=True) # make parent dir (if required) + try: + response = requests.get(f'https://api.github.com/repos/{repo}/releases/latest').json() # github api + assets = [x['name'] for x in response['assets']] # release assets, i.e. ['yolov5s.pt', 'yolov5m.pt', ...] + tag = response['tag_name'] # i.e. 'v1.0' + except: # fallback plan + assets = ['yolov5s.pt', 'yolov5m.pt', 'yolov5l.pt', 'yolov5x.pt', + 'yolov5s6.pt', 'yolov5m6.pt', 'yolov5l6.pt', 'yolov5x6.pt'] + try: + tag = subprocess.check_output('git tag', shell=True, stderr=subprocess.STDOUT).decode().split()[-1] + except: + tag = 'v5.0' # current release + + name = file.name + if name in assets: + msg = f'{file} missing, try downloading from https://github.com/{repo}/releases/' + redundant = False # second download option + try: # GitHub + url = f'https://github.com/{repo}/releases/download/{tag}/{name}' + print(f'Downloading {url} to {file}...') + torch.hub.download_url_to_file(url, file) + assert file.exists() and file.stat().st_size > 1E6 # check + except Exception as e: # GCP + print(f'Download error: {e}') + assert redundant, 'No secondary mirror' + url = f'https://storage.googleapis.com/{repo}/ckpt/{name}' + print(f'Downloading {url} to {file}...') + os.system(f"curl -L '{url}' -o '{file}' --retry 3 -C -") # curl download, retry and resume on fail + finally: + if not file.exists() or file.stat().st_size < 1E6: # check + file.unlink(missing_ok=True) # remove partial downloads + print(f'ERROR: Download failure: {msg}') + print('') + return + + +def gdrive_download(id='16TiPfZj7htmTyhntwcZyEEAejOUxuT6m', file='tmp.zip'): + # Downloads a file from Google Drive. from yolov5.utils.google_utils import *; gdrive_download() + t = time.time() + file = Path(file) + cookie = Path('cookie') # gdrive cookie + print(f'Downloading https://drive.google.com/uc?export=download&id={id} as {file}... ', end='') + file.unlink(missing_ok=True) # remove existing file + cookie.unlink(missing_ok=True) # remove existing cookie + + # Attempt file download + out = "NUL" if platform.system() == "Windows" else "/dev/null" + os.system(f'curl -c ./cookie -s -L "drive.google.com/uc?export=download&id={id}" > {out}') + if os.path.exists('cookie'): # large file + s = f'curl -Lb ./cookie "drive.google.com/uc?export=download&confirm={get_token()}&id={id}" -o {file}' + else: # small file + s = f'curl -s -L -o {file} "drive.google.com/uc?export=download&id={id}"' + r = os.system(s) # execute, capture return + cookie.unlink(missing_ok=True) # remove existing cookie + + # Error check + if r != 0: + file.unlink(missing_ok=True) # remove partial + print('Download error ') # raise Exception('Download error') + return r + + # Unzip if archive + if file.suffix == '.zip': + print('unzipping... ', end='') + os.system(f'unzip -q {file}') # unzip + file.unlink() # remove zip to free space + + print(f'Done ({time.time() - t:.1f}s)') + return r + + +def get_token(cookie="./cookie"): + with open(cookie) as f: + for line in f: + if "download" in line: + return line.split()[-1] + return "" + +# def upload_blob(bucket_name, source_file_name, destination_blob_name): +# # Uploads a file to a bucket +# # https://cloud.google.com/storage/docs/uploading-objects#storage-upload-object-python +# +# storage_client = storage.Client() +# bucket = storage_client.get_bucket(bucket_name) +# blob = bucket.blob(destination_blob_name) +# +# blob.upload_from_filename(source_file_name) +# +# print('File {} uploaded to {}.'.format( +# source_file_name, +# destination_blob_name)) +# +# +# def download_blob(bucket_name, source_blob_name, destination_file_name): +# # Uploads a blob from a bucket +# storage_client = storage.Client() +# bucket = storage_client.get_bucket(bucket_name) +# blob = bucket.blob(source_blob_name) +# +# blob.download_to_filename(destination_file_name) +# +# print('Blob {} downloaded to {}.'.format( +# source_blob_name, +# destination_file_name)) diff --git a/Yolov5-Deepsort/utils/loss.py b/Yolov5-Deepsort/utils/loss.py new file mode 100644 index 0000000000000000000000000000000000000000..9e78df17fdf31c23c70a5d1fce8b17fb7b78726a --- /dev/null +++ b/Yolov5-Deepsort/utils/loss.py @@ -0,0 +1,216 @@ +# Loss functions + +import torch +import torch.nn as nn + +from utils.general import bbox_iou +from utils.torch_utils import is_parallel + + +def smooth_BCE(eps=0.1): # https://github.com/ultralytics/yolov3/issues/238#issuecomment-598028441 + # return positive, negative label smoothing BCE targets + return 1.0 - 0.5 * eps, 0.5 * eps + + +class BCEBlurWithLogitsLoss(nn.Module): + # BCEwithLogitLoss() with reduced missing label effects. + def __init__(self, alpha=0.05): + super(BCEBlurWithLogitsLoss, self).__init__() + self.loss_fcn = nn.BCEWithLogitsLoss(reduction='none') # must be nn.BCEWithLogitsLoss() + self.alpha = alpha + + def forward(self, pred, true): + loss = self.loss_fcn(pred, true) + pred = torch.sigmoid(pred) # prob from logits + dx = pred - true # reduce only missing label effects + # dx = (pred - true).abs() # reduce missing label and false label effects + alpha_factor = 1 - torch.exp((dx - 1) / (self.alpha + 1e-4)) + loss *= alpha_factor + return loss.mean() + + +class FocalLoss(nn.Module): + # Wraps focal loss around existing loss_fcn(), i.e. criteria = FocalLoss(nn.BCEWithLogitsLoss(), gamma=1.5) + def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): + super(FocalLoss, self).__init__() + self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() + self.gamma = gamma + self.alpha = alpha + self.reduction = loss_fcn.reduction + self.loss_fcn.reduction = 'none' # required to apply FL to each element + + def forward(self, pred, true): + loss = self.loss_fcn(pred, true) + # p_t = torch.exp(-loss) + # loss *= self.alpha * (1.000001 - p_t) ** self.gamma # non-zero power for gradient stability + + # TF implementation https://github.com/tensorflow/addons/blob/v0.7.1/tensorflow_addons/losses/focal_loss.py + pred_prob = torch.sigmoid(pred) # prob from logits + p_t = true * pred_prob + (1 - true) * (1 - pred_prob) + alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) + modulating_factor = (1.0 - p_t) ** self.gamma + loss *= alpha_factor * modulating_factor + + if self.reduction == 'mean': + return loss.mean() + elif self.reduction == 'sum': + return loss.sum() + else: # 'none' + return loss + + +class QFocalLoss(nn.Module): + # Wraps Quality focal loss around existing loss_fcn(), i.e. criteria = FocalLoss(nn.BCEWithLogitsLoss(), gamma=1.5) + def __init__(self, loss_fcn, gamma=1.5, alpha=0.25): + super(QFocalLoss, self).__init__() + self.loss_fcn = loss_fcn # must be nn.BCEWithLogitsLoss() + self.gamma = gamma + self.alpha = alpha + self.reduction = loss_fcn.reduction + self.loss_fcn.reduction = 'none' # required to apply FL to each element + + def forward(self, pred, true): + loss = self.loss_fcn(pred, true) + + pred_prob = torch.sigmoid(pred) # prob from logits + alpha_factor = true * self.alpha + (1 - true) * (1 - self.alpha) + modulating_factor = torch.abs(true - pred_prob) ** self.gamma + loss *= alpha_factor * modulating_factor + + if self.reduction == 'mean': + return loss.mean() + elif self.reduction == 'sum': + return loss.sum() + else: # 'none' + return loss + + +class ComputeLoss: + # Compute losses + def __init__(self, model, autobalance=False): + super(ComputeLoss, self).__init__() + device = next(model.parameters()).device # get model device + h = model.hyp # hyperparameters + + # Define criteria + BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['cls_pw']], device=device)) + BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['obj_pw']], device=device)) + + # Class label smoothing https://arxiv.org/pdf/1902.04103.pdf eqn 3 + self.cp, self.cn = smooth_BCE(eps=h.get('label_smoothing', 0.0)) # positive, negative BCE targets + + # Focal loss + g = h['fl_gamma'] # focal loss gamma + if g > 0: + BCEcls, BCEobj = FocalLoss(BCEcls, g), FocalLoss(BCEobj, g) + + det = model.module.model[-1] if is_parallel(model) else model.model[-1] # Detect() module + self.balance = {3: [4.0, 1.0, 0.4]}.get(det.nl, [4.0, 1.0, 0.25, 0.06, .02]) # P3-P7 + self.ssi = list(det.stride).index(16) if autobalance else 0 # stride 16 index + self.BCEcls, self.BCEobj, self.gr, self.hyp, self.autobalance = BCEcls, BCEobj, model.gr, h, autobalance + for k in 'na', 'nc', 'nl', 'anchors': + setattr(self, k, getattr(det, k)) + + def __call__(self, p, targets): # predictions, targets, model + device = targets.device + lcls, lbox, lobj = torch.zeros(1, device=device), torch.zeros(1, device=device), torch.zeros(1, device=device) + tcls, tbox, indices, anchors = self.build_targets(p, targets) # targets + + # Losses + for i, pi in enumerate(p): # layer index, layer predictions + b, a, gj, gi = indices[i] # image, anchor, gridy, gridx + tobj = torch.zeros_like(pi[..., 0], device=device) # target obj + + n = b.shape[0] # number of targets + if n: + ps = pi[b, a, gj, gi] # prediction subset corresponding to targets + + # Regression + pxy = ps[:, :2].sigmoid() * 2. - 0.5 + pwh = (ps[:, 2:4].sigmoid() * 2) ** 2 * anchors[i] + pbox = torch.cat((pxy, pwh), 1) # predicted box + iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True) # iou(prediction, target) + lbox += (1.0 - iou).mean() # iou loss + + # Objectness + tobj[b, a, gj, gi] = (1.0 - self.gr) + self.gr * iou.detach().clamp(0).type(tobj.dtype) # iou ratio + + # Classification + if self.nc > 1: # cls loss (only if multiple classes) + t = torch.full_like(ps[:, 5:], self.cn, device=device) # targets + t[range(n), tcls[i]] = self.cp + lcls += self.BCEcls(ps[:, 5:], t) # BCE + + # Append targets to text file + # with open('targets.txt', 'a') as file: + # [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)] + + obji = self.BCEobj(pi[..., 4], tobj) + lobj += obji * self.balance[i] # obj loss + if self.autobalance: + self.balance[i] = self.balance[i] * 0.9999 + 0.0001 / obji.detach().item() + + if self.autobalance: + self.balance = [x / self.balance[self.ssi] for x in self.balance] + lbox *= self.hyp['box'] + lobj *= self.hyp['obj'] + lcls *= self.hyp['cls'] + bs = tobj.shape[0] # batch size + + loss = lbox + lobj + lcls + return loss * bs, torch.cat((lbox, lobj, lcls, loss)).detach() + + def build_targets(self, p, targets): + # Build targets for compute_loss(), input targets(image,class,x,y,w,h) + na, nt = self.na, targets.shape[0] # number of anchors, targets + tcls, tbox, indices, anch = [], [], [], [] + gain = torch.ones(7, device=targets.device) # normalized to gridspace gain + ai = torch.arange(na, device=targets.device).float().view(na, 1).repeat(1, nt) # same as .repeat_interleave(nt) + targets = torch.cat((targets.repeat(na, 1, 1), ai[:, :, None]), 2) # append anchor indices + + g = 0.5 # bias + off = torch.tensor([[0, 0], + [1, 0], [0, 1], [-1, 0], [0, -1], # j,k,l,m + # [1, 1], [1, -1], [-1, 1], [-1, -1], # jk,jm,lk,lm + ], device=targets.device).float() * g # offsets + + for i in range(self.nl): + anchors = self.anchors[i] + gain[2:6] = torch.tensor(p[i].shape)[[3, 2, 3, 2]] # xyxy gain + + # Match targets to anchors + t = targets * gain + if nt: + # Matches + r = t[:, :, 4:6] / anchors[:, None] # wh ratio + j = torch.max(r, 1. / r).max(2)[0] < self.hyp['anchor_t'] # compare + # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t'] # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2)) + t = t[j] # filter + + # Offsets + gxy = t[:, 2:4] # grid xy + gxi = gain[[2, 3]] - gxy # inverse + j, k = ((gxy % 1. < g) & (gxy > 1.)).T + l, m = ((gxi % 1. < g) & (gxi > 1.)).T + j = torch.stack((torch.ones_like(j), j, k, l, m)) + t = t.repeat((5, 1, 1))[j] + offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j] + else: + t = targets[0] + offsets = 0 + + # Define + b, c = t[:, :2].long().T # image, class + gxy = t[:, 2:4] # grid xy + gwh = t[:, 4:6] # grid wh + gij = (gxy - offsets).long() + gi, gj = gij.T # grid xy indices + + # Append + a = t[:, 6].long() # anchor indices + indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices + tbox.append(torch.cat((gxy - gij, gwh), 1)) # box + anch.append(anchors[a]) # anchors + tcls.append(c) # class + + return tcls, tbox, indices, anch diff --git a/Yolov5-Deepsort/utils/metrics.py b/Yolov5-Deepsort/utils/metrics.py new file mode 100644 index 0000000000000000000000000000000000000000..323c84b6c873c87a3530a3caec60982a7d83a3b8 --- /dev/null +++ b/Yolov5-Deepsort/utils/metrics.py @@ -0,0 +1,223 @@ +# Model validation metrics + +from pathlib import Path + +import matplotlib.pyplot as plt +import numpy as np +import torch + +from . import general + + +def fitness(x): + # Model fitness as a weighted combination of metrics + w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95] + return (x[:, :4] * w).sum(1) + + +def ap_per_class(tp, conf, pred_cls, target_cls, plot=False, save_dir='.', names=()): + """ Compute the average precision, given the recall and precision curves. + Source: https://github.com/rafaelpadilla/Object-Detection-Metrics. + # Arguments + tp: True positives (nparray, nx1 or nx10). + conf: Objectness value from 0-1 (nparray). + pred_cls: Predicted object classes (nparray). + target_cls: True object classes (nparray). + plot: Plot precision-recall curve at mAP@0.5 + save_dir: Plot save directory + # Returns + The average precision as computed in py-faster-rcnn. + """ + + # Sort by objectness + i = np.argsort(-conf) + tp, conf, pred_cls = tp[i], conf[i], pred_cls[i] + + # Find unique classes + unique_classes = np.unique(target_cls) + nc = unique_classes.shape[0] # number of classes, number of detections + + # Create Precision-Recall curve and compute AP for each class + px, py = np.linspace(0, 1, 1000), [] # for plotting + ap, p, r = np.zeros((nc, tp.shape[1])), np.zeros((nc, 1000)), np.zeros((nc, 1000)) + for ci, c in enumerate(unique_classes): + i = pred_cls == c + n_l = (target_cls == c).sum() # number of labels + n_p = i.sum() # number of predictions + + if n_p == 0 or n_l == 0: + continue + else: + # Accumulate FPs and TPs + fpc = (1 - tp[i]).cumsum(0) + tpc = tp[i].cumsum(0) + + # Recall + recall = tpc / (n_l + 1e-16) # recall curve + r[ci] = np.interp(-px, -conf[i], recall[:, 0], left=0) # negative x, xp because xp decreases + + # Precision + precision = tpc / (tpc + fpc) # precision curve + p[ci] = np.interp(-px, -conf[i], precision[:, 0], left=1) # p at pr_score + + # AP from recall-precision curve + for j in range(tp.shape[1]): + ap[ci, j], mpre, mrec = compute_ap(recall[:, j], precision[:, j]) + if plot and j == 0: + py.append(np.interp(px, mrec, mpre)) # precision at mAP@0.5 + + # Compute F1 (harmonic mean of precision and recall) + f1 = 2 * p * r / (p + r + 1e-16) + if plot: + plot_pr_curve(px, py, ap, Path(save_dir) / 'PR_curve.png', names) + plot_mc_curve(px, f1, Path(save_dir) / 'F1_curve.png', names, ylabel='F1') + plot_mc_curve(px, p, Path(save_dir) / 'P_curve.png', names, ylabel='Precision') + plot_mc_curve(px, r, Path(save_dir) / 'R_curve.png', names, ylabel='Recall') + + i = f1.mean(0).argmax() # max F1 index + return p[:, i], r[:, i], ap, f1[:, i], unique_classes.astype('int32') + + +def compute_ap(recall, precision): + """ Compute the average precision, given the recall and precision curves + # Arguments + recall: The recall curve (list) + precision: The precision curve (list) + # Returns + Average precision, precision curve, recall curve + """ + + # Append sentinel values to beginning and end + mrec = np.concatenate(([0.], recall, [recall[-1] + 0.01])) + mpre = np.concatenate(([1.], precision, [0.])) + + # Compute the precision envelope + mpre = np.flip(np.maximum.accumulate(np.flip(mpre))) + + # Integrate area under curve + method = 'interp' # methods: 'continuous', 'interp' + if method == 'interp': + x = np.linspace(0, 1, 101) # 101-point interp (COCO) + ap = np.trapz(np.interp(x, mrec, mpre), x) # integrate + else: # 'continuous' + i = np.where(mrec[1:] != mrec[:-1])[0] # points where x axis (recall) changes + ap = np.sum((mrec[i + 1] - mrec[i]) * mpre[i + 1]) # area under curve + + return ap, mpre, mrec + + +class ConfusionMatrix: + # Updated version of https://github.com/kaanakan/object_detection_confusion_matrix + def __init__(self, nc, conf=0.25, iou_thres=0.45): + self.matrix = np.zeros((nc + 1, nc + 1)) + self.nc = nc # number of classes + self.conf = conf + self.iou_thres = iou_thres + + def process_batch(self, detections, labels): + """ + Return intersection-over-union (Jaccard index) of boxes. + Both sets of boxes are expected to be in (x1, y1, x2, y2) format. + Arguments: + detections (Array[N, 6]), x1, y1, x2, y2, conf, class + labels (Array[M, 5]), class, x1, y1, x2, y2 + Returns: + None, updates confusion matrix accordingly + """ + detections = detections[detections[:, 4] > self.conf] + gt_classes = labels[:, 0].int() + detection_classes = detections[:, 5].int() + iou = general.box_iou(labels[:, 1:], detections[:, :4]) + + x = torch.where(iou > self.iou_thres) + if x[0].shape[0]: + matches = torch.cat((torch.stack(x, 1), iou[x[0], x[1]][:, None]), 1).cpu().numpy() + if x[0].shape[0] > 1: + matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 1], return_index=True)[1]] + matches = matches[matches[:, 2].argsort()[::-1]] + matches = matches[np.unique(matches[:, 0], return_index=True)[1]] + else: + matches = np.zeros((0, 3)) + + n = matches.shape[0] > 0 + m0, m1, _ = matches.transpose().astype(np.int16) + for i, gc in enumerate(gt_classes): + j = m0 == i + if n and sum(j) == 1: + self.matrix[detection_classes[m1[j]], gc] += 1 # correct + else: + self.matrix[self.nc, gc] += 1 # background FP + + if n: + for i, dc in enumerate(detection_classes): + if not any(m1 == i): + self.matrix[dc, self.nc] += 1 # background FN + + def matrix(self): + return self.matrix + + def plot(self, save_dir='', names=()): + try: + import seaborn as sn + + array = self.matrix / (self.matrix.sum(0).reshape(1, self.nc + 1) + 1E-6) # normalize + array[array < 0.005] = np.nan # don't annotate (would appear as 0.00) + + fig = plt.figure(figsize=(12, 9), tight_layout=True) + sn.set(font_scale=1.0 if self.nc < 50 else 0.8) # for label size + labels = (0 < len(names) < 99) and len(names) == self.nc # apply names to ticklabels + sn.heatmap(array, annot=self.nc < 30, annot_kws={"size": 8}, cmap='Blues', fmt='.2f', square=True, + xticklabels=names + ['background FP'] if labels else "auto", + yticklabels=names + ['background FN'] if labels else "auto").set_facecolor((1, 1, 1)) + fig.axes[0].set_xlabel('True') + fig.axes[0].set_ylabel('Predicted') + fig.savefig(Path(save_dir) / 'confusion_matrix.png', dpi=250) + except Exception as e: + pass + + def print(self): + for i in range(self.nc + 1): + print(' '.join(map(str, self.matrix[i]))) + + +# Plots ---------------------------------------------------------------------------------------------------------------- + +def plot_pr_curve(px, py, ap, save_dir='pr_curve.png', names=()): + # Precision-recall curve + fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) + py = np.stack(py, axis=1) + + if 0 < len(names) < 21: # display per-class legend if < 21 classes + for i, y in enumerate(py.T): + ax.plot(px, y, linewidth=1, label=f'{names[i]} {ap[i, 0]:.3f}') # plot(recall, precision) + else: + ax.plot(px, py, linewidth=1, color='grey') # plot(recall, precision) + + ax.plot(px, py.mean(1), linewidth=3, color='blue', label='all classes %.3f mAP@0.5' % ap[:, 0].mean()) + ax.set_xlabel('Recall') + ax.set_ylabel('Precision') + ax.set_xlim(0, 1) + ax.set_ylim(0, 1) + plt.legend(bbox_to_anchor=(1.04, 1), loc="upper left") + fig.savefig(Path(save_dir), dpi=250) + + +def plot_mc_curve(px, py, save_dir='mc_curve.png', names=(), xlabel='Confidence', ylabel='Metric'): + # Metric-confidence curve + fig, ax = plt.subplots(1, 1, figsize=(9, 6), tight_layout=True) + + if 0 < len(names) < 21: # display per-class legend if < 21 classes + for i, y in enumerate(py): + ax.plot(px, y, linewidth=1, label=f'{names[i]}') # plot(confidence, metric) + else: + ax.plot(px, py.T, linewidth=1, color='grey') # plot(confidence, metric) + + y = py.mean(0) + ax.plot(px, y, linewidth=3, color='blue', label=f'all classes {y.max():.2f} at {px[y.argmax()]:.3f}') + ax.set_xlabel(xlabel) + ax.set_ylabel(ylabel) + ax.set_xlim(0, 1) + ax.set_ylim(0, 1) + plt.legend(bbox_to_anchor=(1.04, 1), loc="upper left") + fig.savefig(Path(save_dir), dpi=250) diff --git a/Yolov5-Deepsort/utils/plots.py b/Yolov5-Deepsort/utils/plots.py new file mode 100644 index 0000000000000000000000000000000000000000..8313ef210f9047c327cea7ac63c59e6f6140f2d1 --- /dev/null +++ b/Yolov5-Deepsort/utils/plots.py @@ -0,0 +1,446 @@ +# Plotting utils + +import glob +import math +import os +import random +from copy import copy +from pathlib import Path + +import cv2 +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import pandas as pd +import seaborn as sns +import torch +import yaml +from PIL import Image, ImageDraw, ImageFont + +from utils.general import xywh2xyxy, xyxy2xywh +from utils.metrics import fitness + +# Settings +matplotlib.rc('font', **{'size': 11}) +matplotlib.use('Agg') # for writing to files only + + +class Colors: + # Ultralytics color palette https://ultralytics.com/ + def __init__(self): + # hex = matplotlib.colors.TABLEAU_COLORS.values() + hex = ('FF3838', 'FF9D97', 'FF701F', 'FFB21D', 'CFD231', '48F90A', '92CC17', '3DDB86', '1A9334', '00D4BB', + '2C99A8', '00C2FF', '344593', '6473FF', '0018EC', '8438FF', '520085', 'CB38FF', 'FF95C8', 'FF37C7') + self.palette = [self.hex2rgb('#' + c) for c in hex] + self.n = len(self.palette) + + def __call__(self, i, bgr=False): + c = self.palette[int(i) % self.n] + return (c[2], c[1], c[0]) if bgr else c + + @staticmethod + def hex2rgb(h): # rgb order (PIL) + return tuple(int(h[1 + i:1 + i + 2], 16) for i in (0, 2, 4)) + + +colors = Colors() # create instance for 'from utils.plots import colors' + + +def hist2d(x, y, n=100): + # 2d histogram used in labels.png and evolve.png + xedges, yedges = np.linspace(x.min(), x.max(), n), np.linspace(y.min(), y.max(), n) + hist, xedges, yedges = np.histogram2d(x, y, (xedges, yedges)) + xidx = np.clip(np.digitize(x, xedges) - 1, 0, hist.shape[0] - 1) + yidx = np.clip(np.digitize(y, yedges) - 1, 0, hist.shape[1] - 1) + return np.log(hist[xidx, yidx]) + + +def butter_lowpass_filtfilt(data, cutoff=1500, fs=50000, order=5): + from scipy.signal import butter, filtfilt + + # https://stackoverflow.com/questions/28536191/how-to-filter-smooth-with-scipy-numpy + def butter_lowpass(cutoff, fs, order): + nyq = 0.5 * fs + normal_cutoff = cutoff / nyq + return butter(order, normal_cutoff, btype='low', analog=False) + + b, a = butter_lowpass(cutoff, fs, order=order) + return filtfilt(b, a, data) # forward-backward filter + + +def plot_one_box(x, im, color=(128, 128, 128), label=None, line_thickness=3): + # Plots one bounding box on image 'im' using OpenCV + assert im.data.contiguous, 'Image not contiguous. Apply np.ascontiguousarray(im) to plot_on_box() input image.' + tl = line_thickness or round(0.002 * (im.shape[0] + im.shape[1]) / 2) + 1 # line/font thickness + c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3])) + cv2.rectangle(im, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA) + if label: + tf = max(tl - 1, 1) # font thickness + t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0] + c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 + cv2.rectangle(im, c1, c2, color, -1, cv2.LINE_AA) # filled + cv2.putText(im, label, (c1[0], c1[1] - 2), 0, tl / 3, [225, 255, 255], thickness=tf, lineType=cv2.LINE_AA) + + +def plot_one_box_PIL(box, im, color=(128, 128, 128), label=None, line_thickness=None): + # Plots one bounding box on image 'im' using PIL + im = Image.fromarray(im) + draw = ImageDraw.Draw(im) + line_thickness = line_thickness or max(int(min(im.size) / 200), 2) + draw.rectangle(box, width=line_thickness, outline=color) # plot + if label: + font = ImageFont.truetype("Arial.ttf", size=max(round(max(im.size) / 40), 12)) + txt_width, txt_height = font.getsize(label) + draw.rectangle([box[0], box[1] - txt_height + 4, box[0] + txt_width, box[1]], fill=color) + draw.text((box[0], box[1] - txt_height + 1), label, fill=(255, 255, 255), font=font) + return np.asarray(im) + + +def plot_wh_methods(): # from utils.plots import *; plot_wh_methods() + # Compares the two methods for width-height anchor multiplication + # https://github.com/ultralytics/yolov3/issues/168 + x = np.arange(-4.0, 4.0, .1) + ya = np.exp(x) + yb = torch.sigmoid(torch.from_numpy(x)).numpy() * 2 + + fig = plt.figure(figsize=(6, 3), tight_layout=True) + plt.plot(x, ya, '.-', label='YOLOv3') + plt.plot(x, yb ** 2, '.-', label='YOLOv5 ^2') + plt.plot(x, yb ** 1.6, '.-', label='YOLOv5 ^1.6') + plt.xlim(left=-4, right=4) + plt.ylim(bottom=0, top=6) + plt.xlabel('input') + plt.ylabel('output') + plt.grid() + plt.legend() + fig.savefig('comparison.png', dpi=200) + + +def output_to_target(output): + # Convert model output to target format [batch_id, class_id, x, y, w, h, conf] + targets = [] + for i, o in enumerate(output): + for *box, conf, cls in o.cpu().numpy(): + targets.append([i, cls, *list(*xyxy2xywh(np.array(box)[None])), conf]) + return np.array(targets) + + +def plot_images(images, targets, paths=None, fname='images.jpg', names=None, max_size=640, max_subplots=16): + # Plot image grid with labels + + if isinstance(images, torch.Tensor): + images = images.cpu().float().numpy() + if isinstance(targets, torch.Tensor): + targets = targets.cpu().numpy() + + # un-normalise + if np.max(images[0]) <= 1: + images *= 255 + + tl = 3 # line thickness + tf = max(tl - 1, 1) # font thickness + bs, _, h, w = images.shape # batch size, _, height, width + bs = min(bs, max_subplots) # limit plot images + ns = np.ceil(bs ** 0.5) # number of subplots (square) + + # Check if we should resize + scale_factor = max_size / max(h, w) + if scale_factor < 1: + h = math.ceil(scale_factor * h) + w = math.ceil(scale_factor * w) + + mosaic = np.full((int(ns * h), int(ns * w), 3), 255, dtype=np.uint8) # init + for i, img in enumerate(images): + if i == max_subplots: # if last batch has fewer images than we expect + break + + block_x = int(w * (i // ns)) + block_y = int(h * (i % ns)) + + img = img.transpose(1, 2, 0) + if scale_factor < 1: + img = cv2.resize(img, (w, h)) + + mosaic[block_y:block_y + h, block_x:block_x + w, :] = img + if len(targets) > 0: + image_targets = targets[targets[:, 0] == i] + boxes = xywh2xyxy(image_targets[:, 2:6]).T + classes = image_targets[:, 1].astype('int') + labels = image_targets.shape[1] == 6 # labels if no conf column + conf = None if labels else image_targets[:, 6] # check for confidence presence (label vs pred) + + if boxes.shape[1]: + if boxes.max() <= 1.01: # if normalized with tolerance 0.01 + boxes[[0, 2]] *= w # scale to pixels + boxes[[1, 3]] *= h + elif scale_factor < 1: # absolute coords need scale if image scales + boxes *= scale_factor + boxes[[0, 2]] += block_x + boxes[[1, 3]] += block_y + for j, box in enumerate(boxes.T): + cls = int(classes[j]) + color = colors(cls) + cls = names[cls] if names else cls + if labels or conf[j] > 0.25: # 0.25 conf thresh + label = '%s' % cls if labels else '%s %.1f' % (cls, conf[j]) + plot_one_box(box, mosaic, label=label, color=color, line_thickness=tl) + + # Draw image filename labels + if paths: + label = Path(paths[i]).name[:40] # trim to 40 char + t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0] + cv2.putText(mosaic, label, (block_x + 5, block_y + t_size[1] + 5), 0, tl / 3, [220, 220, 220], thickness=tf, + lineType=cv2.LINE_AA) + + # Image border + cv2.rectangle(mosaic, (block_x, block_y), (block_x + w, block_y + h), (255, 255, 255), thickness=3) + + if fname: + r = min(1280. / max(h, w) / ns, 1.0) # ratio to limit image size + mosaic = cv2.resize(mosaic, (int(ns * w * r), int(ns * h * r)), interpolation=cv2.INTER_AREA) + # cv2.imwrite(fname, cv2.cvtColor(mosaic, cv2.COLOR_BGR2RGB)) # cv2 save + Image.fromarray(mosaic).save(fname) # PIL save + return mosaic + + +def plot_lr_scheduler(optimizer, scheduler, epochs=300, save_dir=''): + # Plot LR simulating training for full epochs + optimizer, scheduler = copy(optimizer), copy(scheduler) # do not modify originals + y = [] + for _ in range(epochs): + scheduler.step() + y.append(optimizer.param_groups[0]['lr']) + plt.plot(y, '.-', label='LR') + plt.xlabel('epoch') + plt.ylabel('LR') + plt.grid() + plt.xlim(0, epochs) + plt.ylim(0) + plt.savefig(Path(save_dir) / 'LR.png', dpi=200) + plt.close() + + +def plot_test_txt(): # from utils.plots import *; plot_test() + # Plot test.txt histograms + x = np.loadtxt('test.txt', dtype=np.float32) + box = xyxy2xywh(x[:, :4]) + cx, cy = box[:, 0], box[:, 1] + + fig, ax = plt.subplots(1, 1, figsize=(6, 6), tight_layout=True) + ax.hist2d(cx, cy, bins=600, cmax=10, cmin=0) + ax.set_aspect('equal') + plt.savefig('hist2d.png', dpi=300) + + fig, ax = plt.subplots(1, 2, figsize=(12, 6), tight_layout=True) + ax[0].hist(cx, bins=600) + ax[1].hist(cy, bins=600) + plt.savefig('hist1d.png', dpi=200) + + +def plot_targets_txt(): # from utils.plots import *; plot_targets_txt() + # Plot targets.txt histograms + x = np.loadtxt('targets.txt', dtype=np.float32).T + s = ['x targets', 'y targets', 'width targets', 'height targets'] + fig, ax = plt.subplots(2, 2, figsize=(8, 8), tight_layout=True) + ax = ax.ravel() + for i in range(4): + ax[i].hist(x[i], bins=100, label='%.3g +/- %.3g' % (x[i].mean(), x[i].std())) + ax[i].legend() + ax[i].set_title(s[i]) + plt.savefig('targets.jpg', dpi=200) + + +def plot_study_txt(path='', x=None): # from utils.plots import *; plot_study_txt() + # Plot study.txt generated by test.py + fig, ax = plt.subplots(2, 4, figsize=(10, 6), tight_layout=True) + # ax = ax.ravel() + + fig2, ax2 = plt.subplots(1, 1, figsize=(8, 4), tight_layout=True) + # for f in [Path(path) / f'study_coco_{x}.txt' for x in ['yolov5s6', 'yolov5m6', 'yolov5l6', 'yolov5x6']]: + for f in sorted(Path(path).glob('study*.txt')): + y = np.loadtxt(f, dtype=np.float32, usecols=[0, 1, 2, 3, 7, 8, 9], ndmin=2).T + x = np.arange(y.shape[1]) if x is None else np.array(x) + s = ['P', 'R', 'mAP@.5', 'mAP@.5:.95', 't_inference (ms/img)', 't_NMS (ms/img)', 't_total (ms/img)'] + # for i in range(7): + # ax[i].plot(x, y[i], '.-', linewidth=2, markersize=8) + # ax[i].set_title(s[i]) + + j = y[3].argmax() + 1 + ax2.plot(y[6, 1:j], y[3, 1:j] * 1E2, '.-', linewidth=2, markersize=8, + label=f.stem.replace('study_coco_', '').replace('yolo', 'YOLO')) + + ax2.plot(1E3 / np.array([209, 140, 97, 58, 35, 18]), [34.6, 40.5, 43.0, 47.5, 49.7, 51.5], + 'k.-', linewidth=2, markersize=8, alpha=.25, label='EfficientDet') + + ax2.grid(alpha=0.2) + ax2.set_yticks(np.arange(20, 60, 5)) + ax2.set_xlim(0, 57) + ax2.set_ylim(30, 55) + ax2.set_xlabel('GPU Speed (ms/img)') + ax2.set_ylabel('COCO AP val') + ax2.legend(loc='lower right') + plt.savefig(str(Path(path).name) + '.png', dpi=300) + + +def plot_labels(labels, names=(), save_dir=Path(''), loggers=None): + # plot dataset labels + print('Plotting labels... ') + c, b = labels[:, 0], labels[:, 1:].transpose() # classes, boxes + nc = int(c.max() + 1) # number of classes + x = pd.DataFrame(b.transpose(), columns=['x', 'y', 'width', 'height']) + + # seaborn correlogram + sns.pairplot(x, corner=True, diag_kind='auto', kind='hist', diag_kws=dict(bins=50), plot_kws=dict(pmax=0.9)) + plt.savefig(save_dir / 'labels_correlogram.jpg', dpi=200) + plt.close() + + # matplotlib labels + matplotlib.use('svg') # faster + ax = plt.subplots(2, 2, figsize=(8, 8), tight_layout=True)[1].ravel() + y = ax[0].hist(c, bins=np.linspace(0, nc, nc + 1) - 0.5, rwidth=0.8) + # [y[2].patches[i].set_color([x / 255 for x in colors(i)]) for i in range(nc)] # update colors bug #3195 + ax[0].set_ylabel('instances') + if 0 < len(names) < 30: + ax[0].set_xticks(range(len(names))) + ax[0].set_xticklabels(names, rotation=90, fontsize=10) + else: + ax[0].set_xlabel('classes') + sns.histplot(x, x='x', y='y', ax=ax[2], bins=50, pmax=0.9) + sns.histplot(x, x='width', y='height', ax=ax[3], bins=50, pmax=0.9) + + # rectangles + labels[:, 1:3] = 0.5 # center + labels[:, 1:] = xywh2xyxy(labels[:, 1:]) * 2000 + img = Image.fromarray(np.ones((2000, 2000, 3), dtype=np.uint8) * 255) + for cls, *box in labels[:1000]: + ImageDraw.Draw(img).rectangle(box, width=1, outline=colors(cls)) # plot + ax[1].imshow(img) + ax[1].axis('off') + + for a in [0, 1, 2, 3]: + for s in ['top', 'right', 'left', 'bottom']: + ax[a].spines[s].set_visible(False) + + plt.savefig(save_dir / 'labels.jpg', dpi=200) + matplotlib.use('Agg') + plt.close() + + # loggers + for k, v in loggers.items() or {}: + if k == 'wandb' and v: + v.log({"Labels": [v.Image(str(x), caption=x.name) for x in save_dir.glob('*labels*.jpg')]}, commit=False) + + +def plot_evolution(yaml_file='data/hyp.finetune.yaml'): # from utils.plots import *; plot_evolution() + # Plot hyperparameter evolution results in evolve.txt + with open(yaml_file) as f: + hyp = yaml.safe_load(f) + x = np.loadtxt('evolve.txt', ndmin=2) + f = fitness(x) + # weights = (f - f.min()) ** 2 # for weighted results + plt.figure(figsize=(10, 12), tight_layout=True) + matplotlib.rc('font', **{'size': 8}) + for i, (k, v) in enumerate(hyp.items()): + y = x[:, i + 7] + # mu = (y * weights).sum() / weights.sum() # best weighted result + mu = y[f.argmax()] # best single result + plt.subplot(6, 5, i + 1) + plt.scatter(y, f, c=hist2d(y, f, 20), cmap='viridis', alpha=.8, edgecolors='none') + plt.plot(mu, f.max(), 'k+', markersize=15) + plt.title('%s = %.3g' % (k, mu), fontdict={'size': 9}) # limit to 40 characters + if i % 5 != 0: + plt.yticks([]) + print('%15s: %.3g' % (k, mu)) + plt.savefig('evolve.png', dpi=200) + print('\nPlot saved as evolve.png') + + +def profile_idetection(start=0, stop=0, labels=(), save_dir=''): + # Plot iDetection '*.txt' per-image logs. from utils.plots import *; profile_idetection() + ax = plt.subplots(2, 4, figsize=(12, 6), tight_layout=True)[1].ravel() + s = ['Images', 'Free Storage (GB)', 'RAM Usage (GB)', 'Battery', 'dt_raw (ms)', 'dt_smooth (ms)', 'real-world FPS'] + files = list(Path(save_dir).glob('frames*.txt')) + for fi, f in enumerate(files): + try: + results = np.loadtxt(f, ndmin=2).T[:, 90:-30] # clip first and last rows + n = results.shape[1] # number of rows + x = np.arange(start, min(stop, n) if stop else n) + results = results[:, x] + t = (results[0] - results[0].min()) # set t0=0s + results[0] = x + for i, a in enumerate(ax): + if i < len(results): + label = labels[fi] if len(labels) else f.stem.replace('frames_', '') + a.plot(t, results[i], marker='.', label=label, linewidth=1, markersize=5) + a.set_title(s[i]) + a.set_xlabel('time (s)') + # if fi == len(files) - 1: + # a.set_ylim(bottom=0) + for side in ['top', 'right']: + a.spines[side].set_visible(False) + else: + a.remove() + except Exception as e: + print('Warning: Plotting error for %s; %s' % (f, e)) + + ax[1].legend() + plt.savefig(Path(save_dir) / 'idetection_profile.png', dpi=200) + + +def plot_results_overlay(start=0, stop=0): # from utils.plots import *; plot_results_overlay() + # Plot training 'results*.txt', overlaying train and val losses + s = ['train', 'train', 'train', 'Precision', 'mAP@0.5', 'val', 'val', 'val', 'Recall', 'mAP@0.5:0.95'] # legends + t = ['Box', 'Objectness', 'Classification', 'P-R', 'mAP-F1'] # titles + for f in sorted(glob.glob('results*.txt') + glob.glob('../../Downloads/results*.txt')): + results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).T + n = results.shape[1] # number of rows + x = range(start, min(stop, n) if stop else n) + fig, ax = plt.subplots(1, 5, figsize=(14, 3.5), tight_layout=True) + ax = ax.ravel() + for i in range(5): + for j in [i, i + 5]: + y = results[j, x] + ax[i].plot(x, y, marker='.', label=s[j]) + # y_smooth = butter_lowpass_filtfilt(y) + # ax[i].plot(x, np.gradient(y_smooth), marker='.', label=s[j]) + + ax[i].set_title(t[i]) + ax[i].legend() + ax[i].set_ylabel(f) if i == 0 else None # add filename + fig.savefig(f.replace('.txt', '.png'), dpi=200) + + +def plot_results(start=0, stop=0, bucket='', id=(), labels=(), save_dir=''): + # Plot training 'results*.txt'. from utils.plots import *; plot_results(save_dir='runs/train/exp') + fig, ax = plt.subplots(2, 5, figsize=(12, 6), tight_layout=True) + ax = ax.ravel() + s = ['Box', 'Objectness', 'Classification', 'Precision', 'Recall', + 'val Box', 'val Objectness', 'val Classification', 'mAP@0.5', 'mAP@0.5:0.95'] + if bucket: + # files = ['https://storage.googleapis.com/%s/results%g.txt' % (bucket, x) for x in id] + files = ['results%g.txt' % x for x in id] + c = ('gsutil cp ' + '%s ' * len(files) + '.') % tuple('gs://%s/results%g.txt' % (bucket, x) for x in id) + os.system(c) + else: + files = list(Path(save_dir).glob('results*.txt')) + assert len(files), 'No results.txt files found in %s, nothing to plot.' % os.path.abspath(save_dir) + for fi, f in enumerate(files): + try: + results = np.loadtxt(f, usecols=[2, 3, 4, 8, 9, 12, 13, 14, 10, 11], ndmin=2).T + n = results.shape[1] # number of rows + x = range(start, min(stop, n) if stop else n) + for i in range(10): + y = results[i, x] + if i in [0, 1, 2, 5, 6, 7]: + y[y == 0] = np.nan # don't show zero loss values + # y /= y[0] # normalize + label = labels[fi] if len(labels) else f.stem + ax[i].plot(x, y, marker='.', label=label, linewidth=2, markersize=8) + ax[i].set_title(s[i]) + # if i in [5, 6, 7]: # share train and val loss y axes + # ax[i].get_shared_y_axes().join(ax[i], ax[i - 5]) + except Exception as e: + print('Warning: Plotting error for %s; %s' % (f, e)) + + ax[1].legend() + fig.savefig(Path(save_dir) / 'results.png', dpi=200) diff --git a/Yolov5-Deepsort/utils/torch_utils.py b/Yolov5-Deepsort/utils/torch_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..5074fa95ae4be7118a8de66b729192887058285f --- /dev/null +++ b/Yolov5-Deepsort/utils/torch_utils.py @@ -0,0 +1,304 @@ +# YOLOv5 PyTorch utils + +import datetime +import logging +import math +import os +import platform +import subprocess +import time +from contextlib import contextmanager +from copy import deepcopy +from pathlib import Path + +import torch +import torch.backends.cudnn as cudnn +import torch.nn as nn +import torch.nn.functional as F +import torchvision + +try: + import thop # for FLOPS computation +except ImportError: + thop = None +logger = logging.getLogger(__name__) + + +@contextmanager +def torch_distributed_zero_first(local_rank: int): + """ + Decorator to make all processes in distributed training wait for each local_master to do something. + """ + if local_rank not in [-1, 0]: + torch.distributed.barrier() + yield + if local_rank == 0: + torch.distributed.barrier() + + +def init_torch_seeds(seed=0): + # Speed-reproducibility tradeoff https://pytorch.org/docs/stable/notes/randomness.html + torch.manual_seed(seed) + if seed == 0: # slower, more reproducible + cudnn.benchmark, cudnn.deterministic = False, True + else: # faster, less reproducible + cudnn.benchmark, cudnn.deterministic = True, False + + +def date_modified(path=__file__): + # return human-readable file modification date, i.e. '2021-3-26' + t = datetime.datetime.fromtimestamp(Path(path).stat().st_mtime) + return f'{t.year}-{t.month}-{t.day}' + + +def git_describe(path=Path(__file__).parent): # path must be a directory + # return human-readable git description, i.e. v5.0-5-g3e25f1e https://git-scm.com/docs/git-describe + s = f'git -C {path} describe --tags --long --always' + try: + return subprocess.check_output(s, shell=True, stderr=subprocess.STDOUT).decode()[:-1] + except subprocess.CalledProcessError as e: + return '' # not a git repository + + +def select_device(device='', batch_size=None): + # device = 'cpu' or '0' or '0,1,2,3' + s = f'YOLOv5 🚀 {git_describe() or date_modified()} torch {torch.__version__} ' # string + cpu = device.lower() == 'cpu' + if cpu: + os.environ['CUDA_VISIBLE_DEVICES'] = '-1' # force torch.cuda.is_available() = False + elif device: # non-cpu device requested + os.environ['CUDA_VISIBLE_DEVICES'] = device # set environment variable + assert torch.cuda.is_available(), f'CUDA unavailable, invalid device {device} requested' # check availability + + cuda = not cpu and torch.cuda.is_available() + if cuda: + devices = device.split(',') if device else range(torch.cuda.device_count()) # i.e. 0,1,6,7 + n = len(devices) # device count + if n > 1 and batch_size: # check batch_size is divisible by device_count + assert batch_size % n == 0, f'batch-size {batch_size} not multiple of GPU count {n}' + space = ' ' * len(s) + for i, d in enumerate(devices): + p = torch.cuda.get_device_properties(i) + s += f"{'' if i == 0 else space}CUDA:{d} ({p.name}, {p.total_memory / 1024 ** 2}MB)\n" # bytes to MB + else: + s += 'CPU\n' + + logger.info(s.encode().decode('ascii', 'ignore') if platform.system() == 'Windows' else s) # emoji-safe + return torch.device('cuda:0' if cuda else 'cpu') + + +def time_synchronized(): + # pytorch-accurate time + if torch.cuda.is_available(): + torch.cuda.synchronize() + return time.time() + + +def profile(x, ops, n=100, device=None): + # profile a pytorch module or list of modules. Example usage: + # x = torch.randn(16, 3, 640, 640) # input + # m1 = lambda x: x * torch.sigmoid(x) + # m2 = nn.SiLU() + # profile(x, [m1, m2], n=100) # profile speed over 100 iterations + + device = device or torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') + x = x.to(device) + x.requires_grad = True + print(torch.__version__, device.type, torch.cuda.get_device_properties(0) if device.type == 'cuda' else '') + print(f"\n{'Params':>12s}{'GFLOPS':>12s}{'forward (ms)':>16s}{'backward (ms)':>16s}{'input':>24s}{'output':>24s}") + for m in ops if isinstance(ops, list) else [ops]: + m = m.to(device) if hasattr(m, 'to') else m # device + m = m.half() if hasattr(m, 'half') and isinstance(x, torch.Tensor) and x.dtype is torch.float16 else m # type + dtf, dtb, t = 0., 0., [0., 0., 0.] # dt forward, backward + try: + flops = thop.profile(m, inputs=(x,), verbose=False)[0] / 1E9 * 2 # GFLOPS + except: + flops = 0 + + for _ in range(n): + t[0] = time_synchronized() + y = m(x) + t[1] = time_synchronized() + try: + _ = y.sum().backward() + t[2] = time_synchronized() + except: # no backward method + t[2] = float('nan') + dtf += (t[1] - t[0]) * 1000 / n # ms per op forward + dtb += (t[2] - t[1]) * 1000 / n # ms per op backward + + s_in = tuple(x.shape) if isinstance(x, torch.Tensor) else 'list' + s_out = tuple(y.shape) if isinstance(y, torch.Tensor) else 'list' + p = sum(list(x.numel() for x in m.parameters())) if isinstance(m, nn.Module) else 0 # parameters + print(f'{p:12}{flops:12.4g}{dtf:16.4g}{dtb:16.4g}{str(s_in):>24s}{str(s_out):>24s}') + + +def is_parallel(model): + return type(model) in (nn.parallel.DataParallel, nn.parallel.DistributedDataParallel) + + +def intersect_dicts(da, db, exclude=()): + # Dictionary intersection of matching keys and shapes, omitting 'exclude' keys, using da values + return {k: v for k, v in da.items() if k in db and not any(x in k for x in exclude) and v.shape == db[k].shape} + + +def initialize_weights(model): + for m in model.modules(): + t = type(m) + if t is nn.Conv2d: + pass # nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') + elif t is nn.BatchNorm2d: + m.eps = 1e-3 + m.momentum = 0.03 + elif t in [nn.Hardswish, nn.LeakyReLU, nn.ReLU, nn.ReLU6]: + m.inplace = True + + +def find_modules(model, mclass=nn.Conv2d): + # Finds layer indices matching module class 'mclass' + return [i for i, m in enumerate(model.module_list) if isinstance(m, mclass)] + + +def sparsity(model): + # Return global model sparsity + a, b = 0., 0. + for p in model.parameters(): + a += p.numel() + b += (p == 0).sum() + return b / a + + +def prune(model, amount=0.3): + # Prune model to requested global sparsity + import torch.nn.utils.prune as prune + print('Pruning model... ', end='') + for name, m in model.named_modules(): + if isinstance(m, nn.Conv2d): + prune.l1_unstructured(m, name='weight', amount=amount) # prune + prune.remove(m, 'weight') # make permanent + print(' %.3g global sparsity' % sparsity(model)) + + +def fuse_conv_and_bn(conv, bn): + # Fuse convolution and batchnorm layers https://tehnokv.com/posts/fusing-batchnorm-and-conv/ + fusedconv = nn.Conv2d(conv.in_channels, + conv.out_channels, + kernel_size=conv.kernel_size, + stride=conv.stride, + padding=conv.padding, + groups=conv.groups, + bias=True).requires_grad_(False).to(conv.weight.device) + + # prepare filters + w_conv = conv.weight.clone().view(conv.out_channels, -1) + w_bn = torch.diag(bn.weight.div(torch.sqrt(bn.eps + bn.running_var))) + fusedconv.weight.copy_(torch.mm(w_bn, w_conv).view(fusedconv.weight.shape)) + + # prepare spatial bias + b_conv = torch.zeros(conv.weight.size(0), device=conv.weight.device) if conv.bias is None else conv.bias + b_bn = bn.bias - bn.weight.mul(bn.running_mean).div(torch.sqrt(bn.running_var + bn.eps)) + fusedconv.bias.copy_(torch.mm(w_bn, b_conv.reshape(-1, 1)).reshape(-1) + b_bn) + + return fusedconv + + +def model_info(model, verbose=False, img_size=640): + # Model information. img_size may be int or list, i.e. img_size=640 or img_size=[640, 320] + n_p = sum(x.numel() for x in model.parameters()) # number parameters + n_g = sum(x.numel() for x in model.parameters() if x.requires_grad) # number gradients + if verbose: + print('%5s %40s %9s %12s %20s %10s %10s' % ('layer', 'name', 'gradient', 'parameters', 'shape', 'mu', 'sigma')) + for i, (name, p) in enumerate(model.named_parameters()): + name = name.replace('module_list.', '') + print('%5g %40s %9s %12g %20s %10.3g %10.3g' % + (i, name, p.requires_grad, p.numel(), list(p.shape), p.mean(), p.std())) + + try: # FLOPS + from thop import profile + stride = max(int(model.stride.max()), 32) if hasattr(model, 'stride') else 32 + img = torch.zeros((1, model.yaml.get('ch', 3), stride, stride), device=next(model.parameters()).device) # input + flops = profile(deepcopy(model), inputs=(img,), verbose=False)[0] / 1E9 * 2 # stride GFLOPS + img_size = img_size if isinstance(img_size, list) else [img_size, img_size] # expand if int/float + fs = ', %.1f GFLOPS' % (flops * img_size[0] / stride * img_size[1] / stride) # 640x640 GFLOPS + except (ImportError, Exception): + fs = '' + + logger.info(f"Model Summary: {len(list(model.modules()))} layers, {n_p} parameters, {n_g} gradients{fs}") + + +def load_classifier(name='resnet101', n=2): + # Loads a pretrained model reshaped to n-class output + model = torchvision.models.__dict__[name](pretrained=True) + + # ResNet model properties + # input_size = [3, 224, 224] + # input_space = 'RGB' + # input_range = [0, 1] + # mean = [0.485, 0.456, 0.406] + # std = [0.229, 0.224, 0.225] + + # Reshape output to n classes + filters = model.fc.weight.shape[1] + model.fc.bias = nn.Parameter(torch.zeros(n), requires_grad=True) + model.fc.weight = nn.Parameter(torch.zeros(n, filters), requires_grad=True) + model.fc.out_features = n + return model + + +def scale_img(img, ratio=1.0, same_shape=False, gs=32): # img(16,3,256,416) + # scales img(bs,3,y,x) by ratio constrained to gs-multiple + if ratio == 1.0: + return img + else: + h, w = img.shape[2:] + s = (int(h * ratio), int(w * ratio)) # new size + img = F.interpolate(img, size=s, mode='bilinear', align_corners=False) # resize + if not same_shape: # pad/crop img + h, w = [math.ceil(x * ratio / gs) * gs for x in (h, w)] + return F.pad(img, [0, w - s[1], 0, h - s[0]], value=0.447) # value = imagenet mean + + +def copy_attr(a, b, include=(), exclude=()): + # Copy attributes from b to a, options to only include [...] and to exclude [...] + for k, v in b.__dict__.items(): + if (len(include) and k not in include) or k.startswith('_') or k in exclude: + continue + else: + setattr(a, k, v) + + +class ModelEMA: + """ Model Exponential Moving Average from https://github.com/rwightman/pytorch-image-models + Keep a moving average of everything in the model state_dict (parameters and buffers). + This is intended to allow functionality like + https://www.tensorflow.org/api_docs/python/tf/train/ExponentialMovingAverage + A smoothed version of the weights is necessary for some training schemes to perform well. + This class is sensitive where it is initialized in the sequence of model init, + GPU assignment and distributed training wrappers. + """ + + def __init__(self, model, decay=0.9999, updates=0): + # Create EMA + self.ema = deepcopy(model.module if is_parallel(model) else model).eval() # FP32 EMA + # if next(model.parameters()).device.type != 'cpu': + # self.ema.half() # FP16 EMA + self.updates = updates # number of EMA updates + self.decay = lambda x: decay * (1 - math.exp(-x / 2000)) # decay exponential ramp (to help early epochs) + for p in self.ema.parameters(): + p.requires_grad_(False) + + def update(self, model): + # Update EMA parameters + with torch.no_grad(): + self.updates += 1 + d = self.decay(self.updates) + + msd = model.module.state_dict() if is_parallel(model) else model.state_dict() # model state_dict + for k, v in self.ema.state_dict().items(): + if v.dtype.is_floating_point: + v *= d + v += (1. - d) * msd[k].detach() + + def update_attr(self, model, include=(), exclude=('process_group', 'reducer')): + # Update EMA attributes + copy_attr(self.ema, model, include, exclude) diff --git a/Yolov5-Deepsort/utils/wandb_logging/__init__.py b/Yolov5-Deepsort/utils/wandb_logging/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/Yolov5-Deepsort/utils/wandb_logging/log_dataset.py b/Yolov5-Deepsort/utils/wandb_logging/log_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..f45a23011f15920e0cee33783504299337604a8d --- /dev/null +++ b/Yolov5-Deepsort/utils/wandb_logging/log_dataset.py @@ -0,0 +1,24 @@ +import argparse + +import yaml + +from wandb_utils import WandbLogger + +WANDB_ARTIFACT_PREFIX = 'wandb-artifact://' + + +def create_dataset_artifact(opt): + with open(opt.data) as f: + data = yaml.safe_load(f) # data dict + logger = WandbLogger(opt, '', None, data, job_type='Dataset Creation') + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--data', type=str, default='data/coco128.yaml', help='data.yaml path') + parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset') + parser.add_argument('--project', type=str, default='YOLOv5', help='name of W&B Project') + opt = parser.parse_args() + opt.resume = False # Explicitly disallow resume check for dataset upload job + + create_dataset_artifact(opt) diff --git a/Yolov5-Deepsort/utils/wandb_logging/wandb_utils.py b/Yolov5-Deepsort/utils/wandb_logging/wandb_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..57ce9035a77736b744d9f74186cec592aba25200 --- /dev/null +++ b/Yolov5-Deepsort/utils/wandb_logging/wandb_utils.py @@ -0,0 +1,318 @@ +"""Utilities and tools for tracking runs with Weights & Biases.""" +import json +import sys +from pathlib import Path + +import torch +import yaml +from tqdm import tqdm + +sys.path.append(str(Path(__file__).parent.parent.parent)) # add utils/ to path +from utils.datasets import LoadImagesAndLabels +from utils.datasets import img2label_paths +from utils.general import colorstr, xywh2xyxy, check_dataset, check_file + +try: + import wandb + from wandb import init, finish +except ImportError: + wandb = None + +WANDB_ARTIFACT_PREFIX = 'wandb-artifact://' + + +def remove_prefix(from_string, prefix=WANDB_ARTIFACT_PREFIX): + return from_string[len(prefix):] + + +def check_wandb_config_file(data_config_file): + wandb_config = '_wandb.'.join(data_config_file.rsplit('.', 1)) # updated data.yaml path + if Path(wandb_config).is_file(): + return wandb_config + return data_config_file + + +def get_run_info(run_path): + run_path = Path(remove_prefix(run_path, WANDB_ARTIFACT_PREFIX)) + run_id = run_path.stem + project = run_path.parent.stem + entity = run_path.parent.parent.stem + model_artifact_name = 'run_' + run_id + '_model' + return entity, project, run_id, model_artifact_name + + +def check_wandb_resume(opt): + process_wandb_config_ddp_mode(opt) if opt.global_rank not in [-1, 0] else None + if isinstance(opt.resume, str): + if opt.resume.startswith(WANDB_ARTIFACT_PREFIX): + if opt.global_rank not in [-1, 0]: # For resuming DDP runs + entity, project, run_id, model_artifact_name = get_run_info(opt.resume) + api = wandb.Api() + artifact = api.artifact(entity + '/' + project + '/' + model_artifact_name + ':latest') + modeldir = artifact.download() + opt.weights = str(Path(modeldir) / "last.pt") + return True + return None + + +def process_wandb_config_ddp_mode(opt): + with open(check_file(opt.data)) as f: + data_dict = yaml.safe_load(f) # data dict + train_dir, val_dir = None, None + if isinstance(data_dict['train'], str) and data_dict['train'].startswith(WANDB_ARTIFACT_PREFIX): + api = wandb.Api() + train_artifact = api.artifact(remove_prefix(data_dict['train']) + ':' + opt.artifact_alias) + train_dir = train_artifact.download() + train_path = Path(train_dir) / 'data/images/' + data_dict['train'] = str(train_path) + + if isinstance(data_dict['val'], str) and data_dict['val'].startswith(WANDB_ARTIFACT_PREFIX): + api = wandb.Api() + val_artifact = api.artifact(remove_prefix(data_dict['val']) + ':' + opt.artifact_alias) + val_dir = val_artifact.download() + val_path = Path(val_dir) / 'data/images/' + data_dict['val'] = str(val_path) + if train_dir or val_dir: + ddp_data_path = str(Path(val_dir) / 'wandb_local_data.yaml') + with open(ddp_data_path, 'w') as f: + yaml.safe_dump(data_dict, f) + opt.data = ddp_data_path + + +class WandbLogger(): + """Log training runs, datasets, models, and predictions to Weights & Biases. + + This logger sends information to W&B at wandb.ai. By default, this information + includes hyperparameters, system configuration and metrics, model metrics, + and basic data metrics and analyses. + + By providing additional command line arguments to train.py, datasets, + models and predictions can also be logged. + + For more on how this logger is used, see the Weights & Biases documentation: + https://docs.wandb.com/guides/integrations/yolov5 + """ + def __init__(self, opt, name, run_id, data_dict, job_type='Training'): + # Pre-training routine -- + self.job_type = job_type + self.wandb, self.wandb_run, self.data_dict = wandb, None if not wandb else wandb.run, data_dict + # It's more elegant to stick to 1 wandb.init call, but useful config data is overwritten in the WandbLogger's wandb.init call + if isinstance(opt.resume, str): # checks resume from artifact + if opt.resume.startswith(WANDB_ARTIFACT_PREFIX): + entity, project, run_id, model_artifact_name = get_run_info(opt.resume) + model_artifact_name = WANDB_ARTIFACT_PREFIX + model_artifact_name + assert wandb, 'install wandb to resume wandb runs' + # Resume wandb-artifact:// runs here| workaround for not overwriting wandb.config + self.wandb_run = wandb.init(id=run_id, project=project, entity=entity, resume='allow') + opt.resume = model_artifact_name + elif self.wandb: + self.wandb_run = wandb.init(config=opt, + resume="allow", + project='YOLOv5' if opt.project == 'runs/train' else Path(opt.project).stem, + entity=opt.entity, + name=name, + job_type=job_type, + id=run_id) if not wandb.run else wandb.run + if self.wandb_run: + if self.job_type == 'Training': + if not opt.resume: + wandb_data_dict = self.check_and_upload_dataset(opt) if opt.upload_dataset else data_dict + # Info useful for resuming from artifacts + self.wandb_run.config.opt = vars(opt) + self.wandb_run.config.data_dict = wandb_data_dict + self.data_dict = self.setup_training(opt, data_dict) + if self.job_type == 'Dataset Creation': + self.data_dict = self.check_and_upload_dataset(opt) + else: + prefix = colorstr('wandb: ') + print(f"{prefix}Install Weights & Biases for YOLOv5 logging with 'pip install wandb' (recommended)") + + def check_and_upload_dataset(self, opt): + assert wandb, 'Install wandb to upload dataset' + check_dataset(self.data_dict) + config_path = self.log_dataset_artifact(check_file(opt.data), + opt.single_cls, + 'YOLOv5' if opt.project == 'runs/train' else Path(opt.project).stem) + print("Created dataset config file ", config_path) + with open(config_path) as f: + wandb_data_dict = yaml.safe_load(f) + return wandb_data_dict + + def setup_training(self, opt, data_dict): + self.log_dict, self.current_epoch, self.log_imgs = {}, 0, 16 # Logging Constants + self.bbox_interval = opt.bbox_interval + if isinstance(opt.resume, str): + modeldir, _ = self.download_model_artifact(opt) + if modeldir: + self.weights = Path(modeldir) / "last.pt" + config = self.wandb_run.config + opt.weights, opt.save_period, opt.batch_size, opt.bbox_interval, opt.epochs, opt.hyp = str( + self.weights), config.save_period, config.total_batch_size, config.bbox_interval, config.epochs, \ + config.opt['hyp'] + data_dict = dict(self.wandb_run.config.data_dict) # eliminates the need for config file to resume + if 'val_artifact' not in self.__dict__: # If --upload_dataset is set, use the existing artifact, don't download + self.train_artifact_path, self.train_artifact = self.download_dataset_artifact(data_dict.get('train'), + opt.artifact_alias) + self.val_artifact_path, self.val_artifact = self.download_dataset_artifact(data_dict.get('val'), + opt.artifact_alias) + self.result_artifact, self.result_table, self.val_table, self.weights = None, None, None, None + if self.train_artifact_path is not None: + train_path = Path(self.train_artifact_path) / 'data/images/' + data_dict['train'] = str(train_path) + if self.val_artifact_path is not None: + val_path = Path(self.val_artifact_path) / 'data/images/' + data_dict['val'] = str(val_path) + self.val_table = self.val_artifact.get("val") + self.map_val_table_path() + if self.val_artifact is not None: + self.result_artifact = wandb.Artifact("run_" + wandb.run.id + "_progress", "evaluation") + self.result_table = wandb.Table(["epoch", "id", "prediction", "avg_confidence"]) + if opt.bbox_interval == -1: + self.bbox_interval = opt.bbox_interval = (opt.epochs // 10) if opt.epochs > 10 else 1 + return data_dict + + def download_dataset_artifact(self, path, alias): + if isinstance(path, str) and path.startswith(WANDB_ARTIFACT_PREFIX): + artifact_path = Path(remove_prefix(path, WANDB_ARTIFACT_PREFIX) + ":" + alias) + dataset_artifact = wandb.use_artifact(artifact_path.as_posix()) + assert dataset_artifact is not None, "'Error: W&B dataset artifact doesn\'t exist'" + datadir = dataset_artifact.download() + return datadir, dataset_artifact + return None, None + + def download_model_artifact(self, opt): + if opt.resume.startswith(WANDB_ARTIFACT_PREFIX): + model_artifact = wandb.use_artifact(remove_prefix(opt.resume, WANDB_ARTIFACT_PREFIX) + ":latest") + assert model_artifact is not None, 'Error: W&B model artifact doesn\'t exist' + modeldir = model_artifact.download() + epochs_trained = model_artifact.metadata.get('epochs_trained') + total_epochs = model_artifact.metadata.get('total_epochs') + is_finished = total_epochs is None + assert not is_finished, 'training is finished, can only resume incomplete runs.' + return modeldir, model_artifact + return None, None + + def log_model(self, path, opt, epoch, fitness_score, best_model=False): + model_artifact = wandb.Artifact('run_' + wandb.run.id + '_model', type='model', metadata={ + 'original_url': str(path), + 'epochs_trained': epoch + 1, + 'save period': opt.save_period, + 'project': opt.project, + 'total_epochs': opt.epochs, + 'fitness_score': fitness_score + }) + model_artifact.add_file(str(path / 'last.pt'), name='last.pt') + wandb.log_artifact(model_artifact, + aliases=['latest', 'last', 'epoch ' + str(self.current_epoch), 'best' if best_model else '']) + print("Saving model artifact on epoch ", epoch + 1) + + def log_dataset_artifact(self, data_file, single_cls, project, overwrite_config=False): + with open(data_file) as f: + data = yaml.safe_load(f) # data dict + nc, names = (1, ['item']) if single_cls else (int(data['nc']), data['names']) + names = {k: v for k, v in enumerate(names)} # to index dictionary + self.train_artifact = self.create_dataset_table(LoadImagesAndLabels( + data['train'], rect=True, batch_size=1), names, name='train') if data.get('train') else None + self.val_artifact = self.create_dataset_table(LoadImagesAndLabels( + data['val'], rect=True, batch_size=1), names, name='val') if data.get('val') else None + if data.get('train'): + data['train'] = WANDB_ARTIFACT_PREFIX + str(Path(project) / 'train') + if data.get('val'): + data['val'] = WANDB_ARTIFACT_PREFIX + str(Path(project) / 'val') + path = data_file if overwrite_config else '_wandb.'.join(data_file.rsplit('.', 1)) # updated data.yaml path + data.pop('download', None) + with open(path, 'w') as f: + yaml.safe_dump(data, f) + + if self.job_type == 'Training': # builds correct artifact pipeline graph + self.wandb_run.use_artifact(self.val_artifact) + self.wandb_run.use_artifact(self.train_artifact) + self.val_artifact.wait() + self.val_table = self.val_artifact.get('val') + self.map_val_table_path() + else: + self.wandb_run.log_artifact(self.train_artifact) + self.wandb_run.log_artifact(self.val_artifact) + return path + + def map_val_table_path(self): + self.val_table_map = {} + print("Mapping dataset") + for i, data in enumerate(tqdm(self.val_table.data)): + self.val_table_map[data[3]] = data[0] + + def create_dataset_table(self, dataset, class_to_id, name='dataset'): + # TODO: Explore multiprocessing to slpit this loop parallely| This is essential for speeding up the the logging + artifact = wandb.Artifact(name=name, type="dataset") + img_files = tqdm([dataset.path]) if isinstance(dataset.path, str) and Path(dataset.path).is_dir() else None + img_files = tqdm(dataset.img_files) if not img_files else img_files + for img_file in img_files: + if Path(img_file).is_dir(): + artifact.add_dir(img_file, name='data/images') + labels_path = 'labels'.join(dataset.path.rsplit('images', 1)) + artifact.add_dir(labels_path, name='data/labels') + else: + artifact.add_file(img_file, name='data/images/' + Path(img_file).name) + label_file = Path(img2label_paths([img_file])[0]) + artifact.add_file(str(label_file), + name='data/labels/' + label_file.name) if label_file.exists() else None + table = wandb.Table(columns=["id", "train_image", "Classes", "name"]) + class_set = wandb.Classes([{'id': id, 'name': name} for id, name in class_to_id.items()]) + for si, (img, labels, paths, shapes) in enumerate(tqdm(dataset)): + box_data, img_classes = [], {} + for cls, *xywh in labels[:, 1:].tolist(): + cls = int(cls) + box_data.append({"position": {"middle": [xywh[0], xywh[1]], "width": xywh[2], "height": xywh[3]}, + "class_id": cls, + "box_caption": "%s" % (class_to_id[cls])}) + img_classes[cls] = class_to_id[cls] + boxes = {"ground_truth": {"box_data": box_data, "class_labels": class_to_id}} # inference-space + table.add_data(si, wandb.Image(paths, classes=class_set, boxes=boxes), json.dumps(img_classes), + Path(paths).name) + artifact.add(table, name) + return artifact + + def log_training_progress(self, predn, path, names): + if self.val_table and self.result_table: + class_set = wandb.Classes([{'id': id, 'name': name} for id, name in names.items()]) + box_data = [] + total_conf = 0 + for *xyxy, conf, cls in predn.tolist(): + if conf >= 0.25: + box_data.append( + {"position": {"minX": xyxy[0], "minY": xyxy[1], "maxX": xyxy[2], "maxY": xyxy[3]}, + "class_id": int(cls), + "box_caption": "%s %.3f" % (names[cls], conf), + "scores": {"class_score": conf}, + "domain": "pixel"}) + total_conf = total_conf + conf + boxes = {"predictions": {"box_data": box_data, "class_labels": names}} # inference-space + id = self.val_table_map[Path(path).name] + self.result_table.add_data(self.current_epoch, + id, + wandb.Image(self.val_table.data[id][1], boxes=boxes, classes=class_set), + total_conf / max(1, len(box_data)) + ) + + def log(self, log_dict): + if self.wandb_run: + for key, value in log_dict.items(): + self.log_dict[key] = value + + def end_epoch(self, best_result=False): + if self.wandb_run: + wandb.log(self.log_dict) + self.log_dict = {} + if self.result_artifact: + train_results = wandb.JoinedTable(self.val_table, self.result_table, "id") + self.result_artifact.add(train_results, 'result') + wandb.log_artifact(self.result_artifact, aliases=['latest', 'last', 'epoch ' + str(self.current_epoch), + ('best' if best_result else '')]) + self.result_table = wandb.Table(["epoch", "id", "prediction", "avg_confidence"]) + self.result_artifact = wandb.Artifact("run_" + wandb.run.id + "_progress", "evaluation") + + def finish_run(self): + if self.wandb_run: + if self.log_dict: + wandb.log(self.log_dict) + wandb.run.finish() diff --git a/Yolov5-Deepsort/weights/yolov5s.pt b/Yolov5-Deepsort/weights/yolov5s.pt new file mode 100644 index 0000000000000000000000000000000000000000..a58e3fcde809e747c541b532cda255034e18e7e3 --- /dev/null +++ b/Yolov5-Deepsort/weights/yolov5s.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1610cfd81f8cab94254b35f6b7da2981fa40f93ad1bd3dd1803c52e7f44753e +size 14795158 diff --git a/Yolov5-Deepsort/zhoushao.mp4 b/Yolov5-Deepsort/zhoushao.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..cd5e0135133b90765a9eaab74a37286318f8c351 Binary files /dev/null and b/Yolov5-Deepsort/zhoushao.mp4 differ