diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 4fdfe74d..00000000 --- a/LICENSE.txt +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER 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. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser 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 -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/jsprit-analysis/src/main/java/analysis/SolutionPrinter.java b/jsprit-analysis/src/main/java/analysis/SolutionPrinter.java deleted file mode 100644 index 5a9d782f..00000000 --- a/jsprit-analysis/src/main/java/analysis/SolutionPrinter.java +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package analysis; - -import basics.VehicleRoutingProblemSolution; -import basics.route.DefaultVehicleRouteCostCalculator; -import basics.route.VehicleRoute; - -/** - * Printer to print the details of a vehicle-routing-problem solution. - * - * @author stefan schroeder - * - */ -public class SolutionPrinter { - - /** - * Enum to indicate verbose-level. - * - *

Print.CONCISE and Print.VERBOSE are available. - * - * @author stefan schroeder - * - */ - public enum Print { - - CONCISE,VERBOSE - } - - /** - * Prints costs and #vehicles to stdout (System.out.println). - * - * @param solution - */ - public static void print(VehicleRoutingProblemSolution solution){ - System.out.println("[costs="+solution.getCost() + "]"); - System.out.println("[#vehicles="+solution.getRoutes().size() + "]"); - - } - - /** - * Prints the details of the solution according to a print-level, i.e. Print.CONCISE or PRINT.VERBOSE. - * - *

CONCISE prints total-costs and #vehicles. - *

VERBOSE prints the route-details additionally. If the DefaultVehicleRouteCostCalculator (which is the standard-calculator) - * is used in VehicleRoute, then route-costs are differentiated further between transport, activity, vehicle, driver and other-costs. - * - * @param solution - * @param level - * - * @deprecated is not going to work anymore - */ - @Deprecated - public static void print(VehicleRoutingProblemSolution solution, Print level){ - if(level.equals(Print.CONCISE)){ - print(solution); - } - else{ - print(solution); - System.out.println("routes"); - int routeCount = 1; - for(VehicleRoute route : solution.getRoutes()){ - System.out.println("[route="+routeCount+"][departureTime="+route.getStart().getEndTime()+"[total=" + route.getCost() + "]"); - if(route.getVehicleRouteCostCalculator() instanceof DefaultVehicleRouteCostCalculator){ - DefaultVehicleRouteCostCalculator defaultCalc = (DefaultVehicleRouteCostCalculator) route.getVehicleRouteCostCalculator(); - System.out.println("[transport=" + defaultCalc.getTpCosts() + "][activity=" + defaultCalc.getActCosts() + - "][vehicle=" + defaultCalc.getVehicleCosts() + "][driver=" + defaultCalc.getDriverCosts() + "][other=" + defaultCalc.getOther() + "]"); - } - routeCount++; - } - } - - - } - -} diff --git a/jsprit-analysis/src/main/java/analysis/AlgorithmSearchProgressChartListener.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/AlgorithmSearchProgressChartListener.java similarity index 86% rename from jsprit-analysis/src/main/java/analysis/AlgorithmSearchProgressChartListener.java rename to jsprit-analysis/src/main/java/jsprit/analysis/toolbox/AlgorithmSearchProgressChartListener.java index c31b6e51..0a2a1d6e 100644 --- a/jsprit-analysis/src/main/java/analysis/AlgorithmSearchProgressChartListener.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/AlgorithmSearchProgressChartListener.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package analysis; +package jsprit.analysis.toolbox; import java.io.File; import java.io.IOException; @@ -22,24 +22,24 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.listener.AlgorithmEndsListener; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.algorithm.listener.IterationEndsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.apache.log4j.Logger; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.NumberTickUnit; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.data.Range; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.AlgorithmEndsListener; -import basics.algo.AlgorithmStartsListener; -import basics.algo.IterationEndsListener; /** @@ -77,6 +77,9 @@ public class AlgorithmSearchProgressChartListener implements IterationEndsListen public AlgorithmSearchProgressChartListener(String pngFileName) { super(); this.filename = pngFileName; + if(!this.filename.endsWith("png")){ + this.filename += ".png"; + } } @@ -118,8 +121,10 @@ public class AlgorithmSearchProgressChartListener implements IterationEndsListen XYPlot plot = chart.getXYPlot(); NumberAxis yAxis = (NumberAxis) plot.getRangeAxis(); - Range rangeY = new Range(minValue-0.05*minValue,maxValue + 0.05*maxValue); - yAxis.setRange(rangeY); + Range rangeBounds = coll.getRangeBounds(true); + double upper = Math.min(rangeBounds.getUpperBound(), rangeBounds.getLowerBound()*5); + if(upper == 0.0){ upper = 10000; } + yAxis.setRangeWithMargins(rangeBounds.getLowerBound(),upper); try { ChartUtilities.saveChartAsJPEG(new File(filename), chart, 1000, 600); @@ -143,9 +148,9 @@ public class AlgorithmSearchProgressChartListener implements IterationEndsListen double best = Double.MAX_VALUE; double sum = 0.0; for(VehicleRoutingProblemSolution sol : solutions){ - if(sol.getCost() > worst) worst = sol.getCost(); + if(sol.getCost() > worst) worst = Math.min(sol.getCost(),Double.MAX_VALUE); if(sol.getCost() < best) best = sol.getCost(); - sum += sol.getCost(); + sum += Math.min(sol.getCost(),Double.MAX_VALUE); } bestResultList.add(best); worstResultList.add(worst); diff --git a/jsprit-analysis/src/main/java/analysis/ConcurrentBenchmarker.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/ConcurrentBenchmarker.java similarity index 83% rename from jsprit-analysis/src/main/java/analysis/ConcurrentBenchmarker.java rename to jsprit-analysis/src/main/java/jsprit/analysis/toolbox/ConcurrentBenchmarker.java index 8457f5ae..25a71439 100644 --- a/jsprit-analysis/src/main/java/analysis/ConcurrentBenchmarker.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/ConcurrentBenchmarker.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package analysis; +package jsprit.analysis.toolbox; import java.util.ArrayList; import java.util.Collection; @@ -25,19 +25,21 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; +import jsprit.analysis.util.BenchmarkWriter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.VehicleRoutingAlgorithmFactory; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.Priority; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.util.BenchmarkInstance; +import jsprit.core.util.BenchmarkResult; +import jsprit.core.util.Solutions; + import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; import org.apache.log4j.Level; import org.apache.log4j.Logger; -import util.BenchmarkInstance; -import util.BenchmarkResult; -import util.BenchmarkWriter; -import util.Solutions; -import algorithms.VehicleRoutingAlgorithms; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.VehicleRoutingAlgorithmListeners.Priority; public class ConcurrentBenchmarker { @@ -47,7 +49,7 @@ public class ConcurrentBenchmarker { - private String algorithmConfig; + private String algorithmConfig = null; private List benchmarkInstances = new ArrayList(); @@ -65,6 +67,8 @@ public class ConcurrentBenchmarker { } }; + + private VehicleRoutingAlgorithmFactory algorithmFactory; public void setCost(Cost cost){ this.cost = cost; } @@ -74,6 +78,10 @@ public class ConcurrentBenchmarker { Logger.getRootLogger().setLevel(Level.ERROR); } + public ConcurrentBenchmarker(VehicleRoutingAlgorithmFactory algorithmFactory){ + this.algorithmFactory = algorithmFactory; + } + public void addBenchmarkWriter(BenchmarkWriter writer){ writers.add(writer); } @@ -94,6 +102,12 @@ public class ConcurrentBenchmarker { benchmarkInstances.add(new BenchmarkInstance(name,problem,bestKnownResult,bestKnownVehicles)); } + /** + * Sets nuOfRuns with same algorithm on same instance. + *

Default is 1 + * + * @param runs + */ public void setNuOfRuns(int runs){ this.runs = runs; } @@ -142,11 +156,11 @@ public class ConcurrentBenchmarker { double[] times = new double[runs]; for(int run=0;run solutions = vra.searchSolutions(); - VehicleRoutingProblemSolution best = Solutions.getBest(solutions); + VehicleRoutingProblemSolution best = Solutions.bestOf(solutions); vehicles[run] = best.getRoutes().size(); results[run] = cost.getCost(best); times[run] = stopwatch.getCompTimeInSeconds(); @@ -155,6 +169,16 @@ public class ConcurrentBenchmarker { return new BenchmarkResult(p, runs, results, times, vehicles); } + private VehicleRoutingAlgorithm createAlgorithm(BenchmarkInstance p) { + if(algorithmConfig != null){ + return VehicleRoutingAlgorithms.readAndCreateAlgorithm(p.vrp, algorithmConfig); + } + else{ + return algorithmFactory.createAlgorithm(p.vrp); + } + + } + private void print(Collection results) { double sumTime=0.0; double sumResult=0.0; diff --git a/jsprit-analysis/src/main/java/analysis/Plotter.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/Plotter.java similarity index 59% rename from jsprit-analysis/src/main/java/analysis/Plotter.java rename to jsprit-analysis/src/main/java/jsprit/analysis/toolbox/Plotter.java index 82a23cc8..4e494bd1 100644 --- a/jsprit-analysis/src/main/java/analysis/Plotter.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/Plotter.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package analysis; +package jsprit.analysis.toolbox; import java.awt.BasicStroke; import java.awt.Color; @@ -23,35 +23,39 @@ import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; + +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Locations; import org.apache.log4j.Logger; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; +import org.jfree.chart.LegendItemCollection; +import org.jfree.chart.LegendItemSource; import org.jfree.chart.annotations.XYShapeAnnotation; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.labels.XYItemLabelGenerator; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; +import org.jfree.chart.title.LegendTitle; import org.jfree.data.xy.XYDataItem; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; +import org.jfree.ui.RectangleEdge; -import util.Coordinate; -import util.Locations; -import basics.Delivery; -import basics.Job; -import basics.Pickup; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleRoute; public class Plotter { @@ -77,9 +81,11 @@ public class Plotter { private VehicleRoutingProblem vrp; - private VehicleRoutingProblemSolution solution; - private boolean plotSolutionAsWell = false; + + private boolean plotShipments = true; + + private Collection routes; public void setShowFirstActivity(boolean show){ showFirstActivity = show; @@ -97,53 +103,102 @@ public class Plotter { public Plotter(VehicleRoutingProblem vrp, VehicleRoutingProblemSolution solution) { super(); this.vrp = vrp; - this.solution = solution; + this.routes = solution.getRoutes(); plotSolutionAsWell = true; } + public Plotter(VehicleRoutingProblem vrp, Collection routes) { + super(); + this.vrp = vrp; + this.routes = routes; + plotSolutionAsWell = true; + } + public void plot(String pngFileName, String plotTitle){ + String filename = pngFileName; + if(!pngFileName.endsWith(".png")) filename += ".png"; if(plotSolutionAsWell){ - plotSolutionAsPNG(vrp, solution, pngFileName, plotTitle); + plotSolutionAsPNG(vrp, routes, filename, plotTitle); } else{ - plotVrpAsPNG(vrp, pngFileName, plotTitle); + plotVrpAsPNG(vrp, filename, plotTitle); } } private void plotVrpAsPNG(VehicleRoutingProblem vrp, String pngFile, String title){ log.info("plot routes to " + pngFile); XYSeriesCollection problem; + final XYSeriesCollection shipments; Map labels = new HashMap(); try { problem = makeVrpSeries(vrp, labels); + shipments = makeShipmentSeries(vrp.getJobs().values(), null); } catch (NoLocationFoundException e) { log.warn("cannot plot vrp, since coord is missing"); return; } - XYPlot plot = createPlot(problem, labels); + final XYPlot plot = createProblemPlot(problem, shipments, labels); + LegendItemSource lis = new LegendItemSource() { + + @Override + public LegendItemCollection getLegendItems() { + LegendItemCollection lic = new LegendItemCollection(); + lic.addAll(plot.getRenderer(0).getLegendItems()); + if(!shipments.getSeries().isEmpty()){ + lic.add(plot.getRenderer(1).getLegendItem(1, 0)); + } + return lic; + } + }; + JFreeChart chart = new JFreeChart(title, plot); + chart.removeLegend(); + LegendTitle legend = new LegendTitle(lis); + legend.setPosition(RectangleEdge.BOTTOM); + chart.addLegend(legend); save(chart,pngFile); } - private void plotSolutionAsPNG(VehicleRoutingProblem vrp, VehicleRoutingProblemSolution solution, String pngFile, String title){ + private void plotSolutionAsPNG(VehicleRoutingProblem vrp, Collection routes, String pngFile, String title){ log.info("plot solution to " + pngFile); XYSeriesCollection problem; XYSeriesCollection solutionColl; + final XYSeriesCollection shipments; Map labels = new HashMap(); try { problem = makeVrpSeries(vrp, labels); - solutionColl = makeSolutionSeries(vrp, solution); + shipments = makeShipmentSeries(vrp.getJobs().values(), null); + solutionColl = makeSolutionSeries(vrp, routes); } catch (NoLocationFoundException e) { log.warn("cannot plot vrp, since coord is missing"); return; } - XYPlot plot = createPlot(problem, solutionColl, labels); + final XYPlot plot = createProblemSolutionPlot(problem, shipments, solutionColl, labels); JFreeChart chart = new JFreeChart(title, plot); + LegendItemSource lis = new LegendItemSource() { + + @Override + public LegendItemCollection getLegendItems() { + LegendItemCollection lic = new LegendItemCollection(); + lic.addAll(plot.getRenderer(0).getLegendItems()); + lic.addAll(plot.getRenderer(2).getLegendItems()); + if(!shipments.getSeries().isEmpty()){ + lic.add(plot.getRenderer(1).getLegendItem(1, 0)); + } + return lic; + } + }; + + chart.removeLegend(); + LegendTitle legend = new LegendTitle(lis); + legend.setPosition(RectangleEdge.BOTTOM); + chart.addLegend(legend); + save(chart,pngFile); } - private static XYPlot createPlot(final XYSeriesCollection problem, final Map labels) { + private static XYPlot createProblemPlot(final XYSeriesCollection problem, XYSeriesCollection shipments, final Map labels) { XYPlot plot = new XYPlot(); plot.setBackgroundPaint(Color.LIGHT_GRAY); plot.setRangeGridlinePaint(Color.WHITE); @@ -172,10 +227,25 @@ public class Plotter { plot.setDomainAxis(0, xAxis); plot.setRangeAxis(0, yAxis); + XYItemRenderer shipmentsRenderer = new XYLineAndShapeRenderer(true, false); // Shapes only + for(int i=0;i labels) { + private XYPlot createProblemSolutionPlot(final XYSeriesCollection problem, XYSeriesCollection shipments, XYSeriesCollection solutionColl, final Map labels) { XYPlot plot = new XYPlot(); plot.setBackgroundPaint(Color.LIGHT_GRAY); plot.setRangeGridlinePaint(Color.WHITE); @@ -193,7 +263,6 @@ public class Plotter { problemRenderer.setBaseItemLabelsVisible(true); problemRenderer.setBaseItemLabelPaint(Color.BLACK); - NumberAxis xAxis = new NumberAxis(); xAxis.setRangeWithMargins(problem.getDomainBounds(true)); @@ -204,7 +273,21 @@ public class Plotter { plot.setRenderer(0, problemRenderer); plot.setDomainAxis(0, xAxis); plot.setRangeAxis(0, yAxis); +// plot.mapDatasetToDomainAxis(0, 0); + + XYItemRenderer shipmentsRenderer = new XYLineAndShapeRenderer(true, false); // Shapes only + for(int i=0;i routes) throws NoLocationFoundException{ Locations locations = retrieveLocations(vrp); - XYSeriesCollection coll = new XYSeriesCollection(); - int counter = 1; - for(VehicleRoute route : solution.getRoutes()){ - if(route.isEmpty()) continue; - XYSeries series = new XYSeries(counter, false, true); - - Coordinate startCoord = locations.getCoord(route.getStart().getLocationId()); - series.add(startCoord.getX(), startCoord.getY()); - - for(TourActivity act : route.getTourActivities().getActivities()){ - Coordinate coord = locations.getCoord(act.getLocationId()); - series.add(coord.getX(), coord.getY()); - } - - Coordinate endCoord = locations.getCoord(route.getEnd().getLocationId()); - series.add(endCoord.getX(), endCoord.getY()); - - coll.addSeries(series); - counter++; - } - return coll; - } - - private XYSeriesCollection makeSolutionSeries(Collection routes, Locations locations){ XYSeriesCollection coll = new XYSeriesCollection(); int counter = 1; for(VehicleRoute route : routes){ @@ -281,7 +340,34 @@ public class Plotter { return coll; } - private XYSeriesCollection makeVrpSeries(Collection vehicles, Collection services, Map labels) throws NoLocationFoundException{ + private XYSeriesCollection makeShipmentSeries(Collection jobs, Map labels) throws NoLocationFoundException{ + XYSeriesCollection coll = new XYSeriesCollection(); + if(!plotShipments) return coll; + int sCounter = 1; + String ship = "shipment"; + boolean first = true; + for(Job job : jobs){ + if(!(job instanceof Shipment)){ + continue; + } + Shipment shipment = (Shipment)job; + XYSeries shipmentSeries; + if(first){ + first = false; + shipmentSeries = new XYSeries(ship, false, true); + } + else{ + shipmentSeries = new XYSeries(sCounter, false, true); + sCounter++; + } + shipmentSeries.add(shipment.getPickupCoord().getX(), shipment.getPickupCoord().getY()); + shipmentSeries.add(shipment.getDeliveryCoord().getX(), shipment.getDeliveryCoord().getY()); + coll.addSeries(shipmentSeries); + } + return coll; + } + + private XYSeriesCollection makeVrpSeries(Collection vehicles, Collection jobs, Map labels) throws NoLocationFoundException{ XYSeriesCollection coll = new XYSeriesCollection(); XYSeries vehicleSeries = new XYSeries("depot", false, true); for(Vehicle v : vehicles){ @@ -294,13 +380,24 @@ public class Plotter { XYSeries serviceSeries = new XYSeries("service", false, true); XYSeries pickupSeries = new XYSeries("pickup", false, true); XYSeries deliverySeries = new XYSeries("delivery", false, true); - for(Job job : services){ - if(job instanceof Pickup){ + for(Job job : jobs){ + if(job instanceof Shipment){ + Shipment s = (Shipment)job; + XYDataItem dataItem = new XYDataItem(s.getPickupCoord().getX(), s.getPickupCoord().getY()); + pickupSeries.add(dataItem); + addLabel(labels, s, dataItem); + + XYDataItem dataItem2 = new XYDataItem(s.getDeliveryCoord().getX(), s.getDeliveryCoord().getY()); + deliverySeries.add(dataItem2); + addLabel(labels, s, dataItem2); + } + else if(job instanceof Pickup){ Pickup service = (Pickup)job; Coordinate coord = service.getCoord(); XYDataItem dataItem = new XYDataItem(coord.getX(), coord.getY()); pickupSeries.add(dataItem); addLabel(labels, service, dataItem); + } else if(job instanceof Delivery){ Delivery service = (Delivery)job; @@ -327,25 +424,15 @@ public class Plotter { return coll; } - private void addLabel(Map labels, Service service, XYDataItem dataItem) { + private void addLabel(Map labels, Job job, XYDataItem dataItem) { if(this.label.equals(Label.SIZE)){ - labels.put(dataItem, String.valueOf(service.getCapacityDemand())); + labels.put(dataItem, String.valueOf(job.getCapacityDemand())); } else if(this.label.equals(Label.ID)){ - labels.put(dataItem, String.valueOf(service.getId())); + labels.put(dataItem, String.valueOf(job.getId())); } } - private XYSeriesCollection makeVrpSeries(Collection routes, Map labels) throws NoLocationFoundException{ - Set vehicles = new HashSet(); - Set jobs = new HashSet(); - for(VehicleRoute route : routes){ - vehicles.add(route.getVehicle()); - jobs.addAll(route.getTourActivities().getJobs()); - } - return makeVrpSeries(vehicles, jobs, labels); - } - private XYSeriesCollection makeVrpSeries(VehicleRoutingProblem vrp, Map labels) throws NoLocationFoundException{ return makeVrpSeries(vrp.getVehicles(), vrp.getJobs().values(), labels); } @@ -367,6 +454,22 @@ public class Plotter { if(coord == null) throw new NoLocationFoundException(); locs.put(locationId, coord); } + else if(j instanceof Shipment){ + { + String locationId = ((Shipment) j).getPickupLocation(); + if(locationId == null) throw new NoLocationFoundException(); + Coordinate coord = ((Shipment) j).getPickupCoord(); + if(coord == null) throw new NoLocationFoundException(); + locs.put(locationId, coord); + } + { + String locationId = ((Shipment) j).getDeliveryLocation(); + if(locationId == null) throw new NoLocationFoundException(); + Coordinate coord = ((Shipment) j).getDeliveryCoord(); + if(coord == null) throw new NoLocationFoundException(); + locs.put(locationId, coord); + } + } else{ throw new IllegalStateException("job is not a service. this is not supported yet."); } @@ -380,4 +483,8 @@ public class Plotter { }; } + public void plotShipments(boolean plotShipments) { + this.plotShipments = plotShipments; + } + } diff --git a/jsprit-analysis/src/main/java/analysis/SolutionPlotter.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/SolutionPlotter.java similarity index 92% rename from jsprit-analysis/src/main/java/analysis/SolutionPlotter.java rename to jsprit-analysis/src/main/java/jsprit/analysis/toolbox/SolutionPlotter.java index a66e84c2..141c8c22 100644 --- a/jsprit-analysis/src/main/java/analysis/SolutionPlotter.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/SolutionPlotter.java @@ -14,11 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package analysis; +package jsprit.analysis.toolbox; -import java.awt.BasicStroke; import java.awt.Color; -import java.awt.geom.Ellipse2D; import java.io.File; import java.io.IOException; import java.util.Collection; @@ -27,31 +25,29 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Locations; + import org.apache.log4j.Logger; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; -import org.jfree.chart.annotations.XYShapeAnnotation; import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.labels.XYItemLabelGenerator; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.xy.XYDataItem; -import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; -import util.Coordinate; -import util.Locations; -import basics.Delivery; -import basics.Job; -import basics.Pickup; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleRoute; /** @@ -82,7 +78,9 @@ public class SolutionPlotter { * @see VehicleRoutingProblem, VehicleRoutingProblemSolution */ public static void plotVrpAsPNG(VehicleRoutingProblem vrp, String pngFile, String title){ - log.info("plot routes to " + pngFile); + String filename = pngFile; + if(!pngFile.endsWith(".png")) filename += ".png"; + log.info("plot routes to " + filename); XYSeriesCollection problem; Map labels = new HashMap(); try { @@ -93,7 +91,7 @@ public class SolutionPlotter { } XYPlot plot = createPlot(problem, labels); JFreeChart chart = new JFreeChart(title, plot); - save(chart,pngFile); + save(chart,filename); } /** @@ -106,7 +104,9 @@ public class SolutionPlotter { * @see VehicleRoute */ public static void plotRoutesAsPNG(Collection routes, Locations locations, String pngFile, String title) { - log.info("plot routes to " + pngFile); + String filename = pngFile; + if(!pngFile.endsWith(".png")) filename += ".png"; + log.info("plot routes to " + filename); XYSeriesCollection problem; Map labels = new HashMap(); try { @@ -118,7 +118,7 @@ public class SolutionPlotter { XYSeriesCollection solutionColl = makeSolutionSeries(routes,locations); XYPlot plot = createPlot(problem, solutionColl, labels); JFreeChart chart = new JFreeChart(title, plot); - save(chart,pngFile); + save(chart,filename); } /** @@ -133,7 +133,9 @@ public class SolutionPlotter { * @see VehicleRoutingProblem, VehicleRoutingProblemSolution */ public static void plotSolutionAsPNG(VehicleRoutingProblem vrp, VehicleRoutingProblemSolution solution, String pngFile, String title){ - log.info("plot solution to " + pngFile); + String filename = pngFile; + if(!pngFile.endsWith(".png")) filename += ".png"; + log.info("plot solution to " + filename); XYSeriesCollection problem; XYSeriesCollection solutionColl; Map labels = new HashMap(); @@ -146,7 +148,7 @@ public class SolutionPlotter { } XYPlot plot = createPlot(problem, solutionColl, labels); JFreeChart chart = new JFreeChart(title, plot); - save(chart,pngFile); + save(chart,filename); } diff --git a/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/SolutionPrinter.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/SolutionPrinter.java new file mode 100644 index 00000000..01b5f750 --- /dev/null +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/SolutionPrinter.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.analysis.toolbox; + +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + +/** + * Printer to print the details of a vehicle-routing-problem solution. + * + * @author stefan schroeder + * + */ +public class SolutionPrinter { + + /** + * Enum to indicate verbose-level. + * + *

Print.CONCISE and Print.VERBOSE are available. + * + * @author stefan schroeder + * + */ + public enum Print { + + CONCISE,VERBOSE + } + + /** + * Prints costs and #vehicles to stdout (System.out.println). + * + * @param solution + */ + public static void print(VehicleRoutingProblemSolution solution){ + System.out.println("[costs="+solution.getCost() + "]"); + System.out.println("[#vehicles="+solution.getRoutes().size() + "]"); + + } + +// /** +// * Prints the details of the solution according to a print-level, i.e. Print.CONCISE or PRINT.VERBOSE. +// * +// *

CONCISE prints total-costs and #vehicles. +// *

VERBOSE prints the route-details additionally. If the DefaultVehicleRouteCostCalculator (which is the standard-calculator) +// * is used in VehicleRoute, then route-costs are differentiated further between transport, activity, vehicle, driver and other-costs. +// * +// * @param solution +// * @param level +// * +// * @deprecated is not going to work anymore +// */ +// @Deprecated +// public static void print(VehicleRoutingProblemSolution solution, Print level){ +// if(level.equals(Print.CONCISE)){ +// print(solution); +// } +// else{ +// print(solution); +// System.out.println("routes"); +// int routeCount = 1; +// for(VehicleRoute route : solution.getRoutes()){ +// System.out.println("[route="+routeCount+"][departureTime="+route.getStart().getEndTime()+"[total=" + route.getCost() + "]"); +// if(route.getVehicleRouteCostCalculator() instanceof DefaultVehicleRouteCostCalculator){ +// DefaultVehicleRouteCostCalculator defaultCalc = (DefaultVehicleRouteCostCalculator) route.getVehicleRouteCostCalculator(); +// System.out.println("[transport=" + defaultCalc.getTpCosts() + "][activity=" + defaultCalc.getActCosts() + +// "][vehicle=" + defaultCalc.getVehicleCosts() + "][driver=" + defaultCalc.getDriverCosts() + "][other=" + defaultCalc.getOther() + "]"); +// } +// routeCount++; +// } +// } +// +// +// } + +} diff --git a/jsprit-analysis/src/main/java/analysis/StopWatch.java b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/StopWatch.java similarity index 86% rename from jsprit-analysis/src/main/java/analysis/StopWatch.java rename to jsprit-analysis/src/main/java/jsprit/analysis/toolbox/StopWatch.java index 86f6314c..837d6581 100644 --- a/jsprit-analysis/src/main/java/analysis/StopWatch.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/toolbox/StopWatch.java @@ -14,17 +14,18 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package analysis; +package jsprit.analysis.toolbox; import java.util.Collection; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.listener.AlgorithmEndsListener; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.apache.log4j.Logger; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.AlgorithmEndsListener; -import basics.algo.AlgorithmStartsListener; public class StopWatch implements AlgorithmStartsListener, AlgorithmEndsListener{ diff --git a/jsprit-analysis/src/main/java/util/BenchmarkWriter.java b/jsprit-analysis/src/main/java/jsprit/analysis/util/BenchmarkWriter.java similarity index 93% rename from jsprit-analysis/src/main/java/util/BenchmarkWriter.java rename to jsprit-analysis/src/main/java/jsprit/analysis/util/BenchmarkWriter.java index a6e55c40..a4b2be2b 100644 --- a/jsprit-analysis/src/main/java/util/BenchmarkWriter.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/util/BenchmarkWriter.java @@ -14,10 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.analysis.util; import java.util.Collection; +import jsprit.core.util.BenchmarkResult; + public interface BenchmarkWriter { public void write(Collection results); } diff --git a/jsprit-analysis/src/main/java/util/HtmlBenchmarkTableWriter.java b/jsprit-analysis/src/main/java/jsprit/analysis/util/HtmlBenchmarkTableWriter.java similarity index 99% rename from jsprit-analysis/src/main/java/util/HtmlBenchmarkTableWriter.java rename to jsprit-analysis/src/main/java/jsprit/analysis/util/HtmlBenchmarkTableWriter.java index df8fce20..52dae708 100644 --- a/jsprit-analysis/src/main/java/util/HtmlBenchmarkTableWriter.java +++ b/jsprit-analysis/src/main/java/jsprit/analysis/util/HtmlBenchmarkTableWriter.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.analysis.util; import java.io.BufferedWriter; import java.io.File; @@ -22,6 +22,8 @@ import java.io.FileWriter; import java.io.IOException; import java.util.Collection; +import jsprit.core.util.BenchmarkResult; + import org.jfree.chart.renderer.xy.DeviationRenderer; public class HtmlBenchmarkTableWriter implements BenchmarkWriter{ diff --git a/jsprit-core/src/main/java/algorithms/BackwardInTimeListeners.java b/jsprit-core/src/main/java/algorithms/BackwardInTimeListeners.java deleted file mode 100644 index eae92f38..00000000 --- a/jsprit-core/src/main/java/algorithms/BackwardInTimeListeners.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Collection; - -import basics.route.End; -import basics.route.Start; -import basics.route.TourActivity; -import basics.route.VehicleRoute; - -class BackwardInTimeListeners { - - interface BackwardInTimeListener{ - - public void start(VehicleRoute route, End end, double latestArrivalTime); - - public void prevActivity(TourActivity act, double latestDepartureTime, double latestOperationStartTime); - - public void end(Start start, double latestDepartureTime); - - } - - private Collection listeners = new ArrayList(); - - public void addListener(BackwardInTimeListener l){ - listeners.add(l); - } - - public void start(VehicleRoute route, End end, double latestArrivalTime){ - for(BackwardInTimeListener l : listeners){ l.start(route, end, latestArrivalTime); } - } - - /** - * Informs listener about nextActivity. - * - *

LatestDepartureTime is the theoretical latest departureTime to meet the latestOperationStartTimeWindow at the nextActivity (forward in time), i.e. - * assume act_i and act_j are two successive activities and the latestDepTime of act_j is 10pm. With a travelTime from act_i to act_j of 1h the latestDepartureTime at act_i is 9pm. - * However, the latestOperationStartTime of act_i is 8pm, then (with a serviceTime of 0) the latestOperationStartTime at act_i amounts to 8pm. - * - * @param act - * @param latestDepartureTime - * @param latestArrivalTime - */ - public void prevActivity(TourActivity act, double latestDepartureTime, double latestArrivalTime){ - for(BackwardInTimeListener l : listeners){ l.prevActivity(act,latestDepartureTime,latestArrivalTime); } - } - - public void end(Start start, double latestDepartureTime){ - for(BackwardInTimeListener l : listeners){ l.end(start, latestDepartureTime); } - } - - public boolean isEmpty() { - return listeners.isEmpty(); - } - -} diff --git a/jsprit-core/src/main/java/algorithms/BestInsertionConcurrent.java b/jsprit-core/src/main/java/algorithms/BestInsertionConcurrent.java deleted file mode 100644 index 6f343d63..00000000 --- a/jsprit-core/src/main/java/algorithms/BestInsertionConcurrent.java +++ /dev/null @@ -1,198 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - - -// -// -///** -// * -// * @author stefan schroeder -// * -// */ -// -//final class BestInsertionConcurrent implements InsertionStrategy{ -// -// public static BestInsertionConcurrent newInstance(RouteAlgorithm routeAlgorithm, ExecutorService executor, int nuOfThreads){ -// return new BestInsertionConcurrent(routeAlgorithm, executor, nuOfThreads); -// } -// -// static class Batch { -// List routes = new ArrayList(); -// -// } -// -// private static Logger logger = Logger.getLogger(BestInsertionConcurrent.class); -// -// private Random random = RandomNumberGeneration.getRandom(); -// -// private RouteAlgorithm routeAlgorithm; -// -//// private ExecutorService executor; -// -// private int nuOfBatches; -// -// private ExecutorCompletionService completionService; -// -// public void setRandom(Random random) { -// this.random = random; -// } -// -// private BestInsertionConcurrent(RouteAlgorithm routeAlgorithm, ExecutorService executor, int nuOfThreads) { -// super(); -// this.routeAlgorithm = routeAlgorithm; -//// this.executor = executor; -// logger.info("initialise " + this); -// this.nuOfBatches = nuOfThreads; -// completionService = new ExecutorCompletionService(executor); -// } -// -// @Override -// public String toString() { -// return "[name=concurrentBestInsertion]"; -// } -// -// @Override -// public void insertJobs(Collection vehicleRoutes, Collection unassignedJobs) { -// List unassignedJobList = new ArrayList(unassignedJobs); -// Collections.shuffle(unassignedJobList, random); -//// informInsertionStarts(vehicleRoutes,unassignedJobs.size()); -// int inserted = 0; -// for(final Job unassignedJob : unassignedJobList){ -// VehicleRoute insertIn = null; -// Insertion bestInsertion = null; -// double bestInsertionCost = Double.MAX_VALUE; -// -// List batches = distributeRoutes(vehicleRoutes,nuOfBatches); -// -// for(final Batch batch : batches){ -// completionService.submit(new Callable() { -// -// @Override -// public Insertion call() throws Exception { -// return getBestInsertion(batch,unassignedJob); -// } -// -// }); -// -// } -// -// try{ -// for(int i=0;i futureIData = completionService.take(); -// Insertion insertion = futureIData.get(); -// if(insertion == null) continue; -// if(insertion.getInsertionData().getInsertionCost() < bestInsertionCost){ -// bestInsertion = insertion; -// bestInsertionCost = insertion.getInsertionData().getInsertionCost(); -// } -// } -// } -// catch(InterruptedException e){ -// Thread.currentThread().interrupt(); -// } -// catch (ExecutionException e) { -// e.printStackTrace(); -// logger.error(e.getCause().toString()); -// System.exit(1); -// } -// -// if(bestInsertion != null){ -//// informBeforeJobInsertion(unassignedJob, bestInsertion.getInsertionData(), bestInsertion.getRoute()); -// insertIn = bestInsertion.getRoute(); -//// logger.debug("insert job="+unassignedJob+" at index=" + bestInsertion.getInsertionData().getInsertionIndex() + " delta cost=" + bestInsertion.getInsertionData().getInsertionCost()); -// routeAlgorithm.insertJob(unassignedJob, bestInsertion.getInsertionData(), bestInsertion.getRoute()); -// } -// else { -//// VehicleRoute newRoute = VehicleRoute.emptyRoute(); -//// InsertionData bestI = routeAlgorithm.calculateBestInsertion(newRoute, unassignedJob, Double.MAX_VALUE); -//// if(bestI instanceof InsertionData.NoInsertionFound) -// throw new IllegalStateException("given the vehicles, could not create a valid solution.\n\tthe reason might be" + -// " inappropriate vehicle capacity.\n\tthe job that does not fit in any vehicle anymore is \n\t" + unassignedJob); -//// insertIn = newRoute; -//// informBeforeJobInsertion(unassignedJob,bestI,newRoute); -//// routeAlgorithm.insertJob(unassignedJob,bestI,newRoute); -//// vehicleRoutes.add(newRoute); -// } -// inserted++; -//// informJobInserted((unassignedJobList.size()-inserted), unassignedJob, insertIn); -// } -//// informInsertionEndsListeners(vehicleRoutes); -// } -// -// private Insertion getBestInsertion(Batch batch, Job unassignedJob) { -// Insertion bestInsertion = null; -// double bestInsertionCost = Double.MAX_VALUE; -// for(VehicleRoute vehicleRoute : batch.routes){ -// InsertionData iData = routeAlgorithm.calculateBestInsertion(vehicleRoute, unassignedJob, bestInsertionCost); -// if(iData instanceof NoInsertionFound) continue; -// if(iData.getInsertionCost() < bestInsertionCost){ -// bestInsertion = new Insertion(vehicleRoute,iData); -// bestInsertionCost = iData.getInsertionCost(); -// } -// } -// return bestInsertion; -// } -// -// private List distributeRoutes(Collection vehicleRoutes, int nuOfBatches) { -// List batches = new ArrayList(); -// for(int i=0;i getListeners() { -// // TODO Auto-generated method stub -// return null; -// } -// -// @Override -// public void addListener(InsertionListener insertionListener) { -// // TODO Auto-generated method stub -// -// } -// -//} diff --git a/jsprit-core/src/main/java/algorithms/CreateInitialSolution.java b/jsprit-core/src/main/java/algorithms/CreateInitialSolution.java deleted file mode 100644 index b2e9655b..00000000 --- a/jsprit-core/src/main/java/algorithms/CreateInitialSolution.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -/* *********************************************************************** * - * project: org.matsim.* - * IniSolution.java - * * - * *********************************************************************** * - * * - * copyright : (C) 2011 by the members listed in the COPYING, * - * LICENSE and WARRANTY file. * - * email : info at matsim dot org * - * * - * *********************************************************************** * - * * - * 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 2 of the License, or * - * (at your option) any later version. * - * See also COPYING, LICENSE and WARRANTY file * - * * - * *********************************************************************** */ - -package algorithms; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import basics.Job; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.SolutionCostCalculator; -import basics.route.DriverImpl; -import basics.route.TourActivities; -import basics.route.Vehicle; -import basics.route.VehicleRoute; - - - -final class CreateInitialSolution implements InitialSolutionFactory { - - private static final Logger logger = Logger.getLogger(CreateInitialSolution.class); - - private final InsertionStrategy insertion; - - private SolutionCostCalculator solutionCostCalculator; - - private boolean generateAsMuchAsRoutesAsVehiclesExist = false; - - public void setGenerateAsMuchAsRoutesAsVehiclesExist(boolean generateAsMuchAsRoutesAsVehiclesExist) { - this.generateAsMuchAsRoutesAsVehiclesExist = generateAsMuchAsRoutesAsVehiclesExist; - } - - public CreateInitialSolution(InsertionStrategy insertionStrategy, SolutionCostCalculator solutionCostCalculator) { - super(); - this.insertion = insertionStrategy; - this.solutionCostCalculator = solutionCostCalculator; - } - - @Override - public VehicleRoutingProblemSolution createInitialSolution(final VehicleRoutingProblem vrp) { - logger.info("create initial solution."); - List vehicleRoutes = new ArrayList(); - if(generateAsMuchAsRoutesAsVehiclesExist){ - for(Vehicle vehicle : vrp.getVehicles()){ - vehicleRoutes.add(VehicleRoute.newInstance(TourActivities.emptyTour(), DriverImpl.noDriver(), vehicle)); - } - } - insertion.insertJobs(vehicleRoutes, getUnassignedJobs(vrp)); -// double totalCost = getTotalCost(vehicleRoutes); - logger.info("creation done"); - VehicleRoutingProblemSolution vehicleRoutingProblemSolution = new VehicleRoutingProblemSolution(vehicleRoutes, 0.0); - solutionCostCalculator.calculateCosts(vehicleRoutingProblemSolution); - return vehicleRoutingProblemSolution; - } - - private List getUnassignedJobs(VehicleRoutingProblem vrp) { - List jobs = new ArrayList(vrp.getJobs().values()); - return jobs; - } - -} diff --git a/jsprit-core/src/main/java/algorithms/FindCheaperVehicle.java b/jsprit-core/src/main/java/algorithms/FindCheaperVehicle.java deleted file mode 100644 index e78d7847..00000000 --- a/jsprit-core/src/main/java/algorithms/FindCheaperVehicle.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import basics.Job; -import basics.algo.InsertionStartsListener; -import basics.route.VehicleRoute; - -class FindCheaperVehicle implements InsertionStartsListener{ - - FindCheaperVehicleAlgo findCheaperVehicle; - - public FindCheaperVehicle(FindCheaperVehicleAlgo findCheaperVehicle) { - super(); - this.findCheaperVehicle = findCheaperVehicle; - } - - @Override - public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs) { - List newRoutes = new ArrayList(); - for(VehicleRoute route : vehicleRoutes){ - if(route.isEmpty()) continue; - VehicleRoute cheaperRoute = findCheaperVehicle.runAndGetVehicleRoute(route); - newRoutes.add(cheaperRoute); - } - vehicleRoutes.clear(); - vehicleRoutes.addAll(newRoutes); - } - - @Override - public String toString() { - return "[name=findCheaperVehicle]"; - } - -} diff --git a/jsprit-core/src/main/java/algorithms/FindCheaperVehicleAlgo.java b/jsprit-core/src/main/java/algorithms/FindCheaperVehicleAlgo.java deleted file mode 100644 index 7354398c..00000000 --- a/jsprit-core/src/main/java/algorithms/FindCheaperVehicleAlgo.java +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -import basics.route.TourActivities; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleImpl.NoVehicle; -import basics.route.VehicleRoute; - - - -final class FindCheaperVehicleAlgo { - - private static Logger log = Logger.getLogger(FindCheaperVehicleAlgo.class); - - private VehicleFleetManager fleetManager; - - private VehicleRouteUpdater tourStateCalculator; - - private AuxilliaryCostCalculator auxilliaryCostCalculator; - - private double weightFixCosts = 1.0; - - private StateManager states; - - public void setWeightFixCosts(double weightFixCosts) { - this.weightFixCosts = weightFixCosts; - } - - public void setStates(StateManager states) { - this.states = states; - } - - public FindCheaperVehicleAlgo(VehicleFleetManager fleetManager, VehicleRouteUpdater tourStateCalculator, AuxilliaryCostCalculator auxilliaryCostCalculator) { - super(); - this.fleetManager = fleetManager; - this.tourStateCalculator = tourStateCalculator; - this.auxilliaryCostCalculator = auxilliaryCostCalculator; - } - - - public VehicleRoute runAndGetVehicleRoute(VehicleRoute vehicleRoute) { - if(vehicleRoute.getVehicle() instanceof NoVehicle){ - return vehicleRoute; - } - if(vehicleRoute.getTourActivities() == null || vehicleRoute.getVehicle() == null){ - return vehicleRoute; - } -// Collection availableVehicleTypes = fleetManager.getAvailableVehicleTypes(new TypeKey(vehicleRoute.getVehicle().getType(),vehicleRoute.getVehicle().getLocationId())); - double bestSaving = 0.0; - Vehicle bestVehicle = null; - List path = new ArrayList(); - path.add(vehicleRoute.getStart()); - path.addAll(vehicleRoute.getTourActivities().getActivities()); - path.add(vehicleRoute.getEnd()); - - for(Vehicle vehicle : fleetManager.getAvailableVehicles(vehicleRoute.getVehicle().getType().getTypeId(), vehicleRoute.getVehicle().getLocationId())){ -// Vehicle vehicle = fleetManager.getEmptyVehicle(vehicleType); - if(vehicle.getType().getTypeId().equals(vehicleRoute.getVehicle().getType().getTypeId())){ - continue; - } - if(states.getRouteState(vehicleRoute,StateTypes.LOAD).toDouble() <= vehicle.getCapacity()){ - double fixCostSaving = vehicleRoute.getVehicle().getType().getVehicleCostParams().fix - vehicle.getType().getVehicleCostParams().fix; - double departureTime = vehicleRoute.getStart().getEndTime(); - double newCost = auxilliaryCostCalculator.costOfPath(path, departureTime, vehicleRoute.getDriver(), vehicle); - double varCostSaving = states.getRouteState(vehicleRoute, StateTypes.COSTS).toDouble() - newCost; - double totalCostSaving = varCostSaving + weightFixCosts*fixCostSaving; - if(totalCostSaving > bestSaving){ - bestSaving = totalCostSaving; - bestVehicle = vehicle; - } - } - } - if(bestVehicle != null){ - try{ - fleetManager.unlock(vehicleRoute.getVehicle()); - fleetManager.lock(bestVehicle); - } - catch(IllegalStateException e){ - throw new IllegalStateException(e); - } - TourActivities newTour = TourActivities.copyOf(vehicleRoute.getTourActivities()); - tourStateCalculator.iterate(vehicleRoute); - return VehicleRoute.newInstance(newTour,vehicleRoute.getDriver(),bestVehicle); - } - return vehicleRoute; - } - -} diff --git a/jsprit-core/src/main/java/algorithms/ForwardInTimeListeners.java b/jsprit-core/src/main/java/algorithms/ForwardInTimeListeners.java deleted file mode 100644 index 97bde621..00000000 --- a/jsprit-core/src/main/java/algorithms/ForwardInTimeListeners.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Collection; - -import basics.route.End; -import basics.route.Start; -import basics.route.TourActivity; -import basics.route.VehicleRoute; - -class ForwardInTimeListeners { - - interface ForwardInTimeListener{ - - public void start(VehicleRoute route, Start start, double departureTime); - - public void nextActivity(TourActivity act, double arrTime,double endTime); - - public void end(End end, double arrivalTime); - - } - - private Collection listeners = new ArrayList(); - - public void addListener(ForwardInTimeListener l){ - listeners.add(l); - } - - public void start(VehicleRoute route, Start start, double departureTime){ - for(ForwardInTimeListener l : listeners){ l.start(route, start, departureTime); } - } - - public void nextActivity(TourActivity act, double arrTime, double endTime){ - for(ForwardInTimeListener l : listeners){ l.nextActivity(act,arrTime,endTime); } - } - - public void end(End end, double arrivalTime){ - for(ForwardInTimeListener l : listeners){ l.end(end, arrivalTime); } - } - - public boolean isEmpty() { - return listeners.isEmpty(); - } - -} diff --git a/jsprit-core/src/main/java/algorithms/Gendreau.java b/jsprit-core/src/main/java/algorithms/Gendreau.java deleted file mode 100644 index 951314ff..00000000 --- a/jsprit-core/src/main/java/algorithms/Gendreau.java +++ /dev/null @@ -1,218 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Random; -import java.util.Set; - -import org.apache.log4j.Logger; - -import util.RandomNumberGeneration; -import algorithms.RuinStrategy.RuinListener; -import basics.Job; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.InsertionListener; -import basics.algo.SearchStrategyModule; -import basics.algo.SearchStrategyModuleListener; -import basics.route.TourActivity; -import basics.route.TourActivity.JobActivity; -import basics.route.VehicleRoute; - -final class Gendreau implements SearchStrategyModule{ - - private final static Logger log = Logger.getLogger(Gendreau.class); - - private final static String NAME = "gendreauPostOpt"; - - private final RuinStrategy ruin; - - private final VehicleRoutingProblem vrp; - - private final InsertionStrategy insertionStrategy; - - private VehicleFleetManager fleetManager; - - private Random random = RandomNumberGeneration.getRandom(); - - private int nOfIterations = 10; - - private double shareOfJobsToRuin = 0.15; - - public void setShareOfJobsToRuin(double shareOfJobsToRuin) { - this.shareOfJobsToRuin = shareOfJobsToRuin; - } - - public Gendreau(VehicleRoutingProblem vrp, RuinStrategy ruin, InsertionStrategy insertionStrategy) { - super(); - InsertionListeners insertionListeners = new InsertionListeners(); - insertionListeners.addAllListeners(insertionStrategy.getListeners()); - new Inserter(insertionListeners); - this.ruin = ruin; - this.vrp = vrp; - this.insertionStrategy = insertionStrategy; - } - - @Override - public String toString() { - return "[name=gendreau][iterations="+nOfIterations+"][share2ruin="+shareOfJobsToRuin+"]"; - } - - public void setRandom(Random random) { - this.random = random; - } - - - public void setNuOfIterations(int nOfIterations) { - this.nOfIterations = nOfIterations; - } - - public void setFleetManager(VehicleFleetManager vehicleFleetManager) { - this.fleetManager = vehicleFleetManager; - - } - - @Override - public VehicleRoutingProblemSolution runAndGetSolution(VehicleRoutingProblemSolution vrpSolution) { -// log.info("run gendreau postopt"); - VehicleRoutingProblemSolution bestSolution = vrpSolution; - int itersWithoutImprovement = 0; - - for(int i=0;i copiedRoutes = copyRoutes(bestSolution.getRoutes()); - iniFleet(copiedRoutes); - - VehicleRoute route2split = pickRouteThatHasAtLeastTwoJobs(copiedRoutes); - if(route2split == null) continue; - List jobsInRoute = getJobs(route2split); - Set unassignedJobs = new HashSet(); - unassignedJobs.addAll(jobsInRoute); - copiedRoutes.remove(route2split); - - Collections.shuffle(jobsInRoute,random); - Job targetJob = jobsInRoute.get(0); - int nOfJobs2BeRemovedAdditionally = (int) (shareOfJobsToRuin*(double)vrp.getJobs().size()); - Collection unassignedJobsList = ruin.ruin(copiedRoutes, targetJob, nOfJobs2BeRemovedAdditionally); - unassignedJobs.addAll(unassignedJobsList); - - VehicleRoute emptyRoute1 = VehicleRoute.emptyRoute(); - copiedRoutes.add(emptyRoute1); - insertionStrategy.insertJobs(Arrays.asList(emptyRoute1), Arrays.asList(targetJob)); -// routeAlgorithm.insertJob(targetJob, routeAlgorithm.calculateBestInsertion(emptyRoute1, targetJob, Double.MAX_VALUE), emptyRoute1); - unassignedJobs.remove(targetJob); - - VehicleRoute emptyRoute2 = VehicleRoute.emptyRoute(); - copiedRoutes.add(emptyRoute2); - Job job2 = jobsInRoute.get(1); - insertionStrategy.insertJobs(Arrays.asList(emptyRoute2), Arrays.asList(job2)); -// routeAlgorithm.insertJob(job2, routeAlgorithm.calculateBestInsertion(emptyRoute2, job2, Double.MAX_VALUE), emptyRoute2); - unassignedJobs.remove(job2); - - insertionStrategy.insertJobs(copiedRoutes, unassignedJobs); - double cost = getCost(copiedRoutes); - - if(cost < bestSolution.getCost()){ -// log.info("BING - new: " + cost + " old: " + bestSolution.getCost()); - bestSolution = new VehicleRoutingProblemSolution(copiedRoutes, cost); - itersWithoutImprovement=0; - } - else{ - itersWithoutImprovement++; - if(itersWithoutImprovement > 200){ -// log.info("BREAK i="+i); - break; - } - } - } - return bestSolution; - } - - private List copyRoutes(Collection routes) { - List routeList = new ArrayList(); - for(VehicleRoute r : routes){ - routeList.add(VehicleRoute.copyOf(r)); - } - return routeList; - } - - private void iniFleet(Collection routes) { - fleetManager.unlockAll(); - for(VehicleRoute route : routes){ - if(!route.isEmpty()){ - fleetManager.lock(route.getVehicle()); - } - } - } - - private double getCost(Collection routes) { - double c = 0.0; - for(VehicleRoute r : routes){ - c+=r.getCost(); - } - return c; - } - - private List getJobs(VehicleRoute route2split) { - Set jobs = new HashSet(); - for(TourActivity act : route2split.getTourActivities().getActivities()){ - if(act instanceof JobActivity){ - jobs.add(((JobActivity) act).getJob()); - } - } - return new ArrayList(jobs); - } - - private VehicleRoute pickRouteThatHasAtLeastTwoJobs(Collection routeList) { - List routes = new ArrayList(); - for(VehicleRoute r : routeList){ - if(getJobs(r).size() > 1){ - routes.add(r); - } - } - if(routes.isEmpty()) return null; - Collections.shuffle(routes,random); - return routes.get(0); - } - - @Override - public String getName() { - return NAME; - } - - @Override - public void addModuleListener(SearchStrategyModuleListener moduleListener) { - if(moduleListener instanceof InsertionListener){ - InsertionListener iListener = (InsertionListener) moduleListener; - if(!insertionStrategy.getListeners().contains(iListener)){ - insertionStrategy.addListener(iListener); - } - } - if(moduleListener instanceof RuinListener){ - RuinListener rListener = (RuinListener) moduleListener; - if(!ruin.getListeners().contains(rListener)){ - ruin.addListener(rListener); - } - } - - } -} diff --git a/jsprit-core/src/main/java/algorithms/HardConstraints.java b/jsprit-core/src/main/java/algorithms/HardConstraints.java deleted file mode 100644 index 30dbbe8b..00000000 --- a/jsprit-core/src/main/java/algorithms/HardConstraints.java +++ /dev/null @@ -1,307 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Collection; - -import org.apache.log4j.Logger; - -import basics.Delivery; -import basics.Pickup; -import basics.Service; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.DeliveryActivity; -import basics.route.PickupActivity; -import basics.route.ServiceActivity; -import basics.route.Start; -import basics.route.TourActivity; - -/** - * collection of hard constrainters bot at activity and at route level. - * - *

HardPickupAndDeliveryLoadConstraint requires LOAD_AT_DEPOT and LOAD (i.e. load at end) at route-level - * - *

HardTimeWindowConstraint requires LATEST_OPERATION_START_TIME - * - *

HardPickupAndDeliveryConstraint requires LOAD_AT_DEPOT and LOAD at route-level and FUTURE_PICKS and PAST_DELIVIERS on activity-level - * - *

HardPickupAndDeliveryBackhaulConstraint requires LOAD_AT_DEPOT and LOAD at route-level and FUTURE_PICKS and PAST_DELIVIERS on activity-level - * - * @author stefan - * - */ -class HardConstraints { - - interface HardRouteLevelConstraint { - - public boolean fulfilled(InsertionContext insertionContext); - - } - - interface HardActivityLevelConstraint { - - public boolean fulfilled(InsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime); - - } - - static class HardRouteLevelConstraintManager implements HardRouteLevelConstraint { - - private Collection hardConstraints = new ArrayList(); - - public void addConstraint(HardRouteLevelConstraint constraint){ - hardConstraints.add(constraint); - } - - @Override - public boolean fulfilled(InsertionContext insertionContext) { - for(HardRouteLevelConstraint constraint : hardConstraints){ - if(!constraint.fulfilled(insertionContext)){ - return false; - } - } - return true; - } - - } - - static class ConstraintManager implements HardActivityLevelConstraint, HardRouteLevelConstraint{ - - private HardActivityLevelConstraintManager actLevelConstraintManager = new HardActivityLevelConstraintManager(); - - private HardRouteLevelConstraintManager routeLevelConstraintManager = new HardRouteLevelConstraintManager(); - - public void addConstraint(HardActivityLevelConstraint actLevelConstraint){ - actLevelConstraintManager.addConstraint(actLevelConstraint); - } - - public void addConstraint(HardRouteLevelConstraint routeLevelConstraint){ - routeLevelConstraintManager.addConstraint(routeLevelConstraint); - } - - @Override - public boolean fulfilled(InsertionContext insertionContext) { - return routeLevelConstraintManager.fulfilled(insertionContext); - } - - @Override - public boolean fulfilled(InsertionContext iFacts, TourActivity prevAct,TourActivity newAct, TourActivity nextAct, double prevActDepTime) { - return actLevelConstraintManager.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); - } - - } - - static class HardActivityLevelConstraintManager implements HardActivityLevelConstraint { - - private Collection hardConstraints = new ArrayList(); - - public void addConstraint(HardActivityLevelConstraint constraint){ - hardConstraints.add(constraint); - } - - @Override - public boolean fulfilled(InsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { - for(HardActivityLevelConstraint constraint : hardConstraints){ - if(!constraint.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime)){ - return false; - } - } - return true; - } - - } - - static class HardLoadConstraint implements HardRouteLevelConstraint{ - - private StateManager states; - - public HardLoadConstraint(StateManager states) { - super(); - this.states = states; - } - - @Override - public boolean fulfilled(InsertionContext insertionContext) { - int currentLoad = (int) states.getRouteState(insertionContext.getRoute(), StateTypes.LOAD).toDouble(); - Service service = (Service) insertionContext.getJob(); - if(currentLoad + service.getCapacityDemand() > insertionContext.getNewVehicle().getCapacity()){ - return false; - } - return true; - } - } - - /** - * lsjdfjsdlfjsa - * - * @author stefan - * - */ - static class HardPickupAndDeliveryLoadConstraint implements HardRouteLevelConstraint { - - private StateManager stateManager; - - public HardPickupAndDeliveryLoadConstraint(StateManager stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public boolean fulfilled(InsertionContext insertionContext) { - if(insertionContext.getJob() instanceof Delivery){ - int loadAtDepot = (int) stateManager.getRouteState(insertionContext.getRoute(), StateTypes.LOAD_AT_DEPOT).toDouble(); - if(loadAtDepot + insertionContext.getJob().getCapacityDemand() > insertionContext.getNewVehicle().getCapacity()){ - return false; - } - } - else if(insertionContext.getJob() instanceof Pickup || insertionContext.getJob() instanceof Service){ - int loadAtEnd = (int) stateManager.getRouteState(insertionContext.getRoute(), StateTypes.LOAD).toDouble(); - if(loadAtEnd + insertionContext.getJob().getCapacityDemand() > insertionContext.getNewVehicle().getCapacity()){ - return false; - } - } - return true; - } - - } - - /** - * ljsljslfjs - * @author stefan - * - */ - public static class HardTimeWindowActivityLevelConstraint implements HardActivityLevelConstraint { - - private static Logger log = Logger.getLogger(HardTimeWindowActivityLevelConstraint.class); - - private StateManager states; - - private VehicleRoutingTransportCosts routingCosts; - - public HardTimeWindowActivityLevelConstraint(StateManager states, VehicleRoutingTransportCosts routingCosts) { - super(); - this.states = states; - this.routingCosts = routingCosts; - } - - @Override - public boolean fulfilled(InsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { -// log.info("check insertion of " + newAct + " between " + prevAct + " and " + nextAct + ". prevActDepTime=" + prevActDepTime); - double arrTimeAtNewAct = prevActDepTime + routingCosts.getTransportTime(prevAct.getLocationId(), newAct.getLocationId(), prevActDepTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); - double latestArrTimeAtNewAct = states.getActivityState(newAct, StateTypes.LATEST_OPERATION_START_TIME).toDouble(); - if(arrTimeAtNewAct > latestArrTimeAtNewAct){ - return false; - } -// log.info(newAct + " arrTime=" + arrTimeAtNewAct); - double endTimeAtNewAct = CalcUtils.getActivityEndTime(arrTimeAtNewAct, newAct); - double arrTimeAtNextAct = endTimeAtNewAct + routingCosts.getTransportTime(newAct.getLocationId(), nextAct.getLocationId(), endTimeAtNewAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); - double latestArrTimeAtNextAct = states.getActivityState(nextAct, StateTypes.LATEST_OPERATION_START_TIME).toDouble(); - if(arrTimeAtNextAct > latestArrTimeAtNextAct){ - return false; - } -// log.info(nextAct + " arrTime=" + arrTimeAtNextAct); - return true; - } - } - - static class HardPickupAndDeliveryActivityLevelConstraint implements HardActivityLevelConstraint { - - private StateManager stateManager; - - public HardPickupAndDeliveryActivityLevelConstraint(StateManager stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public boolean fulfilled(InsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { - int loadAtPrevAct; - int futurePicks; - int pastDeliveries; - if(prevAct instanceof Start){ - loadAtPrevAct = (int)stateManager.getRouteState(iFacts.getRoute(), StateTypes.LOAD_AT_DEPOT).toDouble(); - futurePicks = (int)stateManager.getRouteState(iFacts.getRoute(), StateTypes.LOAD).toDouble(); - pastDeliveries = 0; - } - else{ - loadAtPrevAct = (int) stateManager.getActivityState(prevAct, StateTypes.LOAD).toDouble(); - futurePicks = (int) stateManager.getActivityState(prevAct, StateTypes.FUTURE_PICKS).toDouble(); - pastDeliveries = (int) stateManager.getActivityState(prevAct, StateTypes.PAST_DELIVERIES).toDouble(); - } - if(newAct instanceof PickupActivity || newAct instanceof ServiceActivity){ - if(loadAtPrevAct + newAct.getCapacityDemand() + futurePicks > iFacts.getNewVehicle().getCapacity()){ - return false; - } - } - if(newAct instanceof DeliveryActivity){ - if(loadAtPrevAct + Math.abs(newAct.getCapacityDemand()) + pastDeliveries > iFacts.getNewVehicle().getCapacity()){ - return false; - } - - } - return true; - } - - } - - static class HardPickupAndDeliveryBackhaulActivityLevelConstraint implements HardActivityLevelConstraint { - - private StateManager stateManager; - - public HardPickupAndDeliveryBackhaulActivityLevelConstraint(StateManager stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public boolean fulfilled(InsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { - if(newAct instanceof PickupActivity && nextAct instanceof DeliveryActivity){ return false; } - if(newAct instanceof ServiceActivity && nextAct instanceof DeliveryActivity){ return false; } - if(newAct instanceof DeliveryActivity && prevAct instanceof PickupActivity){ return false; } - if(newAct instanceof DeliveryActivity && prevAct instanceof ServiceActivity){ return false; } - int loadAtPrevAct; - int futurePicks; - int pastDeliveries; - if(prevAct instanceof Start){ - loadAtPrevAct = (int)stateManager.getRouteState(iFacts.getRoute(), StateTypes.LOAD_AT_DEPOT).toDouble(); - futurePicks = (int)stateManager.getRouteState(iFacts.getRoute(), StateTypes.LOAD).toDouble(); - pastDeliveries = 0; - } - else{ - loadAtPrevAct = (int) stateManager.getActivityState(prevAct, StateTypes.LOAD).toDouble(); - futurePicks = (int) stateManager.getActivityState(prevAct, StateTypes.FUTURE_PICKS).toDouble(); - pastDeliveries = (int) stateManager.getActivityState(prevAct, StateTypes.PAST_DELIVERIES).toDouble(); - } - if(newAct instanceof PickupActivity || newAct instanceof ServiceActivity){ - if(loadAtPrevAct + newAct.getCapacityDemand() + futurePicks > iFacts.getNewVehicle().getCapacity()){ - return false; - } - } - if(newAct instanceof DeliveryActivity){ - if(loadAtPrevAct + Math.abs(newAct.getCapacityDemand()) + pastDeliveries > iFacts.getNewVehicle().getCapacity()){ - return false; - } - - } - return true; - } - - } - - - -} diff --git a/jsprit-core/src/main/java/algorithms/Inserter.java b/jsprit-core/src/main/java/algorithms/Inserter.java deleted file mode 100644 index a7dd5721..00000000 --- a/jsprit-core/src/main/java/algorithms/Inserter.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import algorithms.InsertionData.NoInsertionFound; -import basics.Job; -import basics.Service; -import basics.route.DefaultTourActivityFactory; -import basics.route.TourActivityFactory; -import basics.route.VehicleRoute; - -class Inserter { - - private InsertionListeners insertionListeners; - - private TourActivityFactory activityFactory; - - public Inserter(InsertionListeners insertionListeners) { - this.insertionListeners = insertionListeners; - activityFactory = new DefaultTourActivityFactory(); - } - - public void insertJob(Job job, InsertionData insertionData, VehicleRoute vehicleRoute){ - insertionListeners.informBeforeJobInsertion(job, insertionData, vehicleRoute); - - if(insertionData == null || (insertionData instanceof NoInsertionFound)) throw new IllegalStateException("insertionData null. cannot insert job."); - if(job == null) throw new IllegalStateException("cannot insert null-job"); - if(!(vehicleRoute.getVehicle().getId().toString().equals(insertionData.getSelectedVehicle().getId().toString()))){ - insertionListeners.informVehicleSwitched(vehicleRoute, vehicleRoute.getVehicle(), insertionData.getSelectedVehicle()); - vehicleRoute.setVehicle(insertionData.getSelectedVehicle(), insertionData.getVehicleDepartureTime()); - } -// if(vehicleRoute.getDepartureTime() != vehicleRoute.g) - if(job instanceof Service) { - vehicleRoute.getTourActivities().addActivity(insertionData.getDeliveryInsertionIndex(), activityFactory.createActivity((Service)job)); - vehicleRoute.setDepartureTime(insertionData.getVehicleDepartureTime()); - } - else throw new IllegalStateException("neither service nor shipment. this is not supported."); - - insertionListeners.informJobInserted(job, vehicleRoute, insertionData.getInsertionCost(), insertionData.getAdditionalTime()); -// updateTour(vehicleRoute); - } -} diff --git a/jsprit-core/src/main/java/algorithms/IterateRouteBackwardInTime.java b/jsprit-core/src/main/java/algorithms/IterateRouteBackwardInTime.java deleted file mode 100644 index 4204c943..00000000 --- a/jsprit-core/src/main/java/algorithms/IterateRouteBackwardInTime.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.Iterator; - -import org.apache.log4j.Logger; - -import algorithms.BackwardInTimeListeners.BackwardInTimeListener; -import basics.costs.BackwardTransportTime; -import basics.route.TourActivity; -import basics.route.VehicleRoute; - - -/** - * - * @author stefan schroeder - * - */ - -class IterateRouteBackwardInTime implements VehicleRouteUpdater{ - - private static Logger log = Logger.getLogger(IterateRouteBackwardInTime.class); - - private BackwardTransportTime transportTime; - - private BackwardInTimeListeners listeners; - - public IterateRouteBackwardInTime(BackwardTransportTime transportTime) { - super(); - this.transportTime = transportTime; - listeners = new BackwardInTimeListeners(); - } - - /* - * - */ - public void iterate(VehicleRoute vehicleRoute) { - if(listeners.isEmpty()) return; - if(vehicleRoute.isEmpty()) return; - listeners.start(vehicleRoute, vehicleRoute.getEnd(), vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime()); - - Iterator reverseActIter = vehicleRoute.getTourActivities().reverseActivityIterator(); - TourActivity prevAct; - prevAct = vehicleRoute.getEnd(); - double latestArrivalTimeAtPrevAct = prevAct.getTheoreticalLatestOperationStartTime(); - - while(reverseActIter.hasNext()){ - TourActivity currAct = reverseActIter.next(); - double latestDepTimeAtCurrAct = latestArrivalTimeAtPrevAct - transportTime.getBackwardTransportTime(currAct.getLocationId(), prevAct.getLocationId(), latestArrivalTimeAtPrevAct, vehicleRoute.getDriver(),vehicleRoute.getVehicle()); - double potentialLatestArrivalTimeAtCurrAct = latestDepTimeAtCurrAct - currAct.getOperationTime(); - double latestArrivalTime = Math.min(currAct.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct); - - listeners.prevActivity(currAct, latestDepTimeAtCurrAct, latestArrivalTime); - - prevAct = currAct; - latestArrivalTimeAtPrevAct = latestArrivalTime; - } - - TourActivity currAct = vehicleRoute.getStart(); - double latestDepTimeAtCurrAct = latestArrivalTimeAtPrevAct - transportTime.getBackwardTransportTime(currAct.getLocationId(), prevAct.getLocationId(), latestArrivalTimeAtPrevAct, vehicleRoute.getDriver(),vehicleRoute.getVehicle()); - - listeners.end(vehicleRoute.getStart(), latestDepTimeAtCurrAct); - } - - public void addListener(BackwardInTimeListener l){ listeners.addListener(l); } - -} diff --git a/jsprit-core/src/main/java/algorithms/IterateRouteForwardInTime.java b/jsprit-core/src/main/java/algorithms/IterateRouteForwardInTime.java deleted file mode 100644 index dd507fb6..00000000 --- a/jsprit-core/src/main/java/algorithms/IterateRouteForwardInTime.java +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import org.apache.log4j.Logger; - -import algorithms.ForwardInTimeListeners.ForwardInTimeListener; -import basics.costs.ForwardTransportTime; -import basics.route.Driver; -import basics.route.End; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleRoute; - - -/** - * - * @author sschroeder - * - */ - -class IterateRouteForwardInTime implements VehicleRouteUpdater{ - - private static Logger log = Logger.getLogger(IterateRouteForwardInTime.class); - - private ForwardTransportTime transportTime; - - private ForwardInTimeListeners listeners; - - public IterateRouteForwardInTime(ForwardTransportTime transportTime) { - super(); - this.transportTime = transportTime; - listeners = new ForwardInTimeListeners(); - } - - /** - * - * - */ - public void iterate(VehicleRoute vehicleRoute) { - if(listeners.isEmpty()) return; - if(vehicleRoute.isEmpty()) return; - listeners.start(vehicleRoute, vehicleRoute.getStart(), vehicleRoute.getStart().getEndTime()); - - Vehicle vehicle = vehicleRoute.getVehicle(); - Driver driver = vehicleRoute.getDriver(); - TourActivity prevAct = vehicleRoute.getStart(); - double startAtPrevAct = prevAct.getEndTime(); - - for(TourActivity currentAct : vehicleRoute.getTourActivities().getActivities()){ - double transportTime = this.transportTime.getTransportTime(prevAct.getLocationId(), currentAct.getLocationId(), startAtPrevAct, driver, vehicle); - double arrivalTimeAtCurrAct = startAtPrevAct + transportTime; - double operationStartTime = Math.max(currentAct.getTheoreticalEarliestOperationStartTime(), arrivalTimeAtCurrAct); - double operationEndTime = operationStartTime + currentAct.getOperationTime(); - - listeners.nextActivity(currentAct,arrivalTimeAtCurrAct,operationEndTime); - - prevAct = currentAct; - startAtPrevAct = operationEndTime; - } - - End currentAct = vehicleRoute.getEnd(); - double transportTime = this.transportTime.getTransportTime(prevAct.getLocationId(), currentAct.getLocationId(), startAtPrevAct, driver, vehicle); - double arrivalTimeAtCurrAct = startAtPrevAct + transportTime; - - listeners.end(vehicleRoute.getEnd(), arrivalTimeAtCurrAct); - } - - public void addListener(ForwardInTimeListener l){ - listeners.addListener(l); - } - -} diff --git a/jsprit-core/src/main/java/algorithms/JobDistanceBeeline.java b/jsprit-core/src/main/java/algorithms/JobDistanceBeeline.java deleted file mode 100644 index 21c467b0..00000000 --- a/jsprit-core/src/main/java/algorithms/JobDistanceBeeline.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import util.CrowFlyCosts; -import util.Locations; -import basics.Job; -import basics.Service; - - - -class JobDistanceBeeline implements JobDistance { - - private Locations locations; - - public JobDistanceBeeline(Locations locations) { - super(); - this.locations = locations; - } - - @Override - public double calculateDistance(Job i, Job j) { - double avgCost = 0.0; - if (i instanceof Service && j instanceof Service) { - if (i.equals(j)) { - avgCost = 0.0; - } else { - Service s_i = (Service) i; - Service s_j = (Service) j; - avgCost = calcDist(s_i.getLocationId(), s_j.getLocationId()); - } - } else { - throw new UnsupportedOperationException( - "currently, this class just works with shipments and services."); - } - return avgCost; - } - - private double calcDist(String from, String to) { - return new CrowFlyCosts(locations).getTransportCost(from, to, 0.0,null, null); - } - -} diff --git a/jsprit-core/src/main/java/algorithms/RuinListeners.java b/jsprit-core/src/main/java/algorithms/RuinListeners.java deleted file mode 100644 index 1b0e18b4..00000000 --- a/jsprit-core/src/main/java/algorithms/RuinListeners.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; - -import algorithms.RuinStrategy.RuinListener; -import basics.Job; -import basics.route.VehicleRoute; - -class RuinListeners { - - private Collection ruinListeners = new ArrayList(); - - void ruinStarts(Collection routes){ - for(RuinListener l : ruinListeners) l.ruinStarts(routes); - } - - void ruinEnds(Collection routes, Collection unassignedJobs){ - for(RuinListener l : ruinListeners) l.ruinEnds(routes, unassignedJobs); - } - - void removed(Job job, VehicleRoute fromRoute){ - for(RuinListener l : ruinListeners) l.removed(job, fromRoute); - } - - void addListener(RuinListener ruinListener){ - ruinListeners.add(ruinListener); - } - - void removeListener(RuinListener ruinListener){ - ruinListeners.remove(ruinListener); - } - - Collection getListeners(){ - return Collections.unmodifiableCollection(ruinListeners); - } -} diff --git a/jsprit-core/src/main/java/algorithms/ScoredJob.java b/jsprit-core/src/main/java/algorithms/ScoredJob.java deleted file mode 100644 index d7519673..00000000 --- a/jsprit-core/src/main/java/algorithms/ScoredJob.java +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import basics.Job; -import basics.route.VehicleRoute; - - - -class ScoredJob { - - private final Job job; - - private final double score; - - private final InsertionData insertionData; - - private final VehicleRoute route; - - public ScoredJob(final Job job, final double score, final InsertionData insertionData, final VehicleRoute route) { - super(); - this.job = job; - this.score = score; - this.insertionData = insertionData; - this.route = route; - } - - public InsertionData getInsertionData() { - return insertionData; - } - - public VehicleRoute getRoute() { - return route; - } - - public Job getJob() { - return job; - } - - public double getScore() { - return score; - } - - -} diff --git a/jsprit-core/src/main/java/algorithms/StateManager.java b/jsprit-core/src/main/java/algorithms/StateManager.java deleted file mode 100644 index 35d2f4f8..00000000 --- a/jsprit-core/src/main/java/algorithms/StateManager.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import basics.route.TourActivity; -import basics.route.VehicleRoute; - -interface StateManager { - - interface State { - double toDouble(); - } - - class StateImpl implements State{ - double state; - - public StateImpl(double state) { - super(); - this.state = state; - } - - @Override - public double toDouble() { - return state; - } - - } - - interface States { - - State getState(String key); - - } - - State getActivityState(TourActivity act, String stateType); - - State getRouteState(VehicleRoute route, String stateType); - -} diff --git a/jsprit-core/src/main/java/algorithms/StateManagerImpl.java b/jsprit-core/src/main/java/algorithms/StateManagerImpl.java deleted file mode 100644 index cf31497d..00000000 --- a/jsprit-core/src/main/java/algorithms/StateManagerImpl.java +++ /dev/null @@ -1,151 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import basics.Job; -import basics.algo.InsertionStartsListener; -import basics.algo.JobInsertedListener; -import basics.route.TourActivity; -import basics.route.VehicleRoute; - -class StateManagerImpl implements StateManager, InsertionStartsListener, JobInsertedListener { - - static class StatesImpl implements States{ - - private Map states = new HashMap(); - - public void putState(String key, State state) { - states.put(key, state); - } - - @Override - public State getState(String key) { - return states.get(key); - } - - } - - private Map vehicleRouteStates = new HashMap(); - - private Map activityStates = new HashMap(); - - private RouteActivityVisitor routeActivityVisitor = new RouteActivityVisitor(); - - private ReverseRouteActivityVisitor revRouteActivityVisitor = new ReverseRouteActivityVisitor(); - - private Collection routeVisitors = new ArrayList(); - - public void clear(){ - vehicleRouteStates.clear(); - activityStates.clear(); - } - - @Override - public State getActivityState(TourActivity act, String stateType) { - if(!activityStates.containsKey(act)){ - return getDefaultActState(stateType,act); - } - StatesImpl actStates = (StatesImpl) activityStates.get(act); - State state = actStates.getState(stateType); - if(state == null){ - return getDefaultActState(stateType,act); - } - return state; - } - - public void putActivityState(TourActivity act, String stateType, State state){ - if(!activityStates.containsKey(act)){ - activityStates.put(act, new StatesImpl()); - } - StatesImpl actStates = (StatesImpl) activityStates.get(act); - actStates.putState(stateType, state); - } - - - private State getDefaultActState(String stateType, TourActivity act){ - if(stateType.equals(StateTypes.LOAD)) return new StateImpl(0); - if(stateType.equals(StateTypes.COSTS)) return new StateImpl(0); - if(stateType.equals(StateTypes.DURATION)) return new StateImpl(0); - if(stateType.equals(StateTypes.EARLIEST_OPERATION_START_TIME)) return new StateImpl(act.getTheoreticalEarliestOperationStartTime()); - if(stateType.equals(StateTypes.LATEST_OPERATION_START_TIME)) return new StateImpl(act.getTheoreticalLatestOperationStartTime()); - if(stateType.equals(StateTypes.FUTURE_PICKS)) return new StateImpl(0); - if(stateType.equals(StateTypes.PAST_DELIVERIES)) return new StateImpl(0); - return null; - } - - private State getDefaultRouteState(String stateType, VehicleRoute route){ - if(stateType.equals(StateTypes.LOAD)) return new StateImpl(0); - if(stateType.equals(StateTypes.LOAD_AT_DEPOT)) return new StateImpl(0); - if(stateType.equals(StateTypes.COSTS)) return new StateImpl(0); - if(stateType.equals(StateTypes.DURATION)) return new StateImpl(0); - return null; - } - - @Override - public State getRouteState(VehicleRoute route, String stateType) { - if(!vehicleRouteStates.containsKey(route)){ - return getDefaultRouteState(stateType,route); - } - StatesImpl routeStates = (StatesImpl) vehicleRouteStates.get(route); - State state = routeStates.getState(stateType); - if(state == null){ - return getDefaultRouteState(stateType, route); - } - return state; - } - - public void putRouteState(VehicleRoute route, String stateType, State state){ - if(!vehicleRouteStates.containsKey(route)){ - vehicleRouteStates.put(route, new StatesImpl()); - } - StatesImpl routeStates = (StatesImpl) vehicleRouteStates.get(route); - routeStates.putState(stateType, state); - } - - @Override - public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { - for(RouteVisitor v : routeVisitors){ v.visit(inRoute); } - routeActivityVisitor.visit(inRoute); - revRouteActivityVisitor.visit(inRoute); - } - - @Override - public void informInsertionStarts(Collection vehicleRoutes,Collection unassignedJobs) { - for(VehicleRoute route : vehicleRoutes){ - for(RouteVisitor v : routeVisitors){ v.visit(route); } - routeActivityVisitor.visit(route); - revRouteActivityVisitor.visit(route); - } - } - - public void addActivityVisitor(ActivityVisitor activityVistor){ - routeActivityVisitor.addActivityVisitor(activityVistor); - } - - public void addActivityVisitor(ReverseActivityVisitor activityVistor){ - revRouteActivityVisitor.addActivityVisitor(activityVistor); - } - - public void addRouteVisitor(RouteVisitor routeVisitor){ - routeVisitors.add(routeVisitor); - } -} diff --git a/jsprit-core/src/main/java/algorithms/StateTypes.java b/jsprit-core/src/main/java/algorithms/StateTypes.java deleted file mode 100644 index 1625e7ce..00000000 --- a/jsprit-core/src/main/java/algorithms/StateTypes.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - - -class StateTypes { - -// final static StateId LOAD = new StateIdImpl("load"); - - final static String LOAD = "load"; - - final static String LOAD_AT_DEPOT = "loadAtDepot"; - - final static String DURATION = "duration"; - - final static String LATEST_OPERATION_START_TIME = "latestOST"; - - final static String EARLIEST_OPERATION_START_TIME = "earliestOST"; - - static final String COSTS = "costs"; - - final static String FUTURE_PICKS = "futurePicks"; - - final static String PAST_DELIVERIES = "pastDeliveries"; - -} diff --git a/jsprit-core/src/main/java/algorithms/StateUpdates.java b/jsprit-core/src/main/java/algorithms/StateUpdates.java deleted file mode 100644 index d85f0cee..00000000 --- a/jsprit-core/src/main/java/algorithms/StateUpdates.java +++ /dev/null @@ -1,633 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.ArrayList; -import java.util.Collection; - -import org.apache.log4j.Logger; - -import algorithms.RuinStrategy.RuinListener; -import algorithms.StateManager.StateImpl; -import basics.Delivery; -import basics.Job; -import basics.Pickup; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.InsertionEndsListener; -import basics.algo.InsertionStartsListener; -import basics.algo.IterationStartsListener; -import basics.algo.JobInsertedListener; -import basics.costs.ForwardTransportCost; -import basics.costs.ForwardTransportTime; -import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.DeliveryActivity; -import basics.route.PickupActivity; -import basics.route.ServiceActivity; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleRoute; -import basics.route.VehicleType; - -class StateUpdates { - - static class UpdateCostsAtRouteLevel implements JobInsertedListener, InsertionStartsListener, InsertionEndsListener{ - - private StateManagerImpl states; - - private VehicleRoutingTransportCosts tpCosts; - - private VehicleRoutingActivityCosts actCosts; - - public UpdateCostsAtRouteLevel(StateManagerImpl states, VehicleRoutingTransportCosts tpCosts, VehicleRoutingActivityCosts actCosts) { - super(); - this.states = states; - this.tpCosts = tpCosts; - this.actCosts = actCosts; - } - - @Override - public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { -// inRoute.getVehicleRouteCostCalculator().addTransportCost(additionalCosts); - double oldCosts = states.getRouteState(inRoute, StateTypes.COSTS).toDouble(); - oldCosts += additionalCosts; - states.putRouteState(inRoute, StateTypes.COSTS, new StateImpl(oldCosts)); - } - - @Override - public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs) { - RouteActivityVisitor forwardInTime = new RouteActivityVisitor(); - forwardInTime.addActivityVisitor(new UpdateCostsAtAllLevels(actCosts, tpCosts, states)); - for(VehicleRoute route : vehicleRoutes){ - forwardInTime.visit(route); - } - - } - - @Override - public void informInsertionEnds(Collection vehicleRoutes) { - -// IterateRouteForwardInTime forwardInTime = new IterateRouteForwardInTime(tpCosts); -// forwardInTime.addListener(new UpdateCostsAtAllLevels(actCosts, tpCosts, states)); -// for(VehicleRoute route : vehicleRoutes){ -// if(route.isEmpty()) continue; -// route.getVehicleRouteCostCalculator().reset(); -// route.getVehicleRouteCostCalculator().addOtherCost(states.getRouteState(route, StateTypes.COSTS).toDouble()); -// route.getVehicleRouteCostCalculator().price(route.getVehicle()); -// forwardInTime.iterate(route); -// } - - } - - } - - static class UpdateActivityTimes implements ActivityVisitor{ - - private Logger log = Logger.getLogger(UpdateActivityTimes.class); - - private ActivityTimeTracker timeTracker; - - private VehicleRoute route; - - public UpdateActivityTimes(ForwardTransportTime transportTime) { - super(); - timeTracker = new ActivityTimeTracker(transportTime); - } - - @Override - public void begin(VehicleRoute route) { - timeTracker.begin(route); - this.route = route; - route.getStart().setEndTime(timeTracker.getActEndTime()); - } - - @Override - public void visit(TourActivity activity) { - timeTracker.visit(activity); - activity.setArrTime(timeTracker.getActArrTime()); - activity.setEndTime(timeTracker.getActEndTime()); - } - - @Override - public void finish() { - timeTracker.finish(); - route.getEnd().setArrTime(timeTracker.getActArrTime()); - } - - } - - static class UpdateCostsAtAllLevels implements ActivityVisitor{ - - private static Logger log = Logger.getLogger(UpdateCostsAtAllLevels.class); - - private VehicleRoutingActivityCosts activityCost; - - private ForwardTransportCost transportCost; - - private StateManagerImpl states; - - private double totalOperationCost = 0.0; - - private VehicleRoute vehicleRoute = null; - - private TourActivity prevAct = null; - - private double startTimeAtPrevAct = 0.0; - - private ActivityTimeTracker timeTracker; - - public UpdateCostsAtAllLevels(VehicleRoutingActivityCosts activityCost, VehicleRoutingTransportCosts transportCost, StateManagerImpl states) { - super(); - this.activityCost = activityCost; - this.transportCost = transportCost; - this.states = states; - timeTracker = new ActivityTimeTracker(transportCost); - } - - @Override - public void begin(VehicleRoute route) { - vehicleRoute = route; - vehicleRoute.getVehicleRouteCostCalculator().reset(); - timeTracker.begin(route); - prevAct = route.getStart(); - startTimeAtPrevAct = timeTracker.getActEndTime(); - } - - @Override - public void visit(TourActivity act) { - timeTracker.visit(act); - - double transportCost = this.transportCost.getTransportCost(prevAct.getLocationId(), act.getLocationId(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle()); - double actCost = activityCost.getActivityCost(act, timeTracker.getActArrTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle()); - - vehicleRoute.getVehicleRouteCostCalculator().addTransportCost(transportCost); - vehicleRoute.getVehicleRouteCostCalculator().addActivityCost(actCost); - - totalOperationCost += transportCost; - totalOperationCost += actCost; - - states.putActivityState(act, StateTypes.COSTS, new StateImpl(totalOperationCost)); - - prevAct = act; - startTimeAtPrevAct = timeTracker.getActEndTime(); - } - - @Override - public void finish() { - timeTracker.finish(); - double transportCost = this.transportCost.getTransportCost(prevAct.getLocationId(), vehicleRoute.getEnd().getLocationId(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle()); - double actCost = activityCost.getActivityCost(vehicleRoute.getEnd(), timeTracker.getActEndTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle()); - - vehicleRoute.getVehicleRouteCostCalculator().addTransportCost(transportCost); - vehicleRoute.getVehicleRouteCostCalculator().addActivityCost(actCost); - - totalOperationCost += transportCost; - totalOperationCost += actCost; -// totalOperationCost += getFixCosts(); - - states.putRouteState(vehicleRoute, StateTypes.COSTS, new StateImpl(totalOperationCost)); - -// this is rather strange and likely to change - vehicleRoute.getVehicleRouteCostCalculator().price(vehicleRoute.getDriver()); - vehicleRoute.getVehicleRouteCostCalculator().price(vehicleRoute.getVehicle()); - vehicleRoute.getVehicleRouteCostCalculator().finish(); - - startTimeAtPrevAct = 0.0; - prevAct = null; - vehicleRoute = null; - totalOperationCost = 0.0; - } - - private double getFixCosts() { - Vehicle vehicle = vehicleRoute.getVehicle(); - if(vehicle == null) return 0.0; - VehicleType type = vehicle.getType(); - if(type == null) return 0.0; - return type.getVehicleCostParams().fix; - } - - } - - static class UpdateEarliestStartTimeWindowAtActLocations implements ActivityVisitor{ - - private StateManagerImpl states; - - private ActivityTimeTracker timeTracker; - - public UpdateEarliestStartTimeWindowAtActLocations(StateManagerImpl states, VehicleRoutingTransportCosts transportCosts) { - super(); - this.states = states; - timeTracker = new ActivityTimeTracker(transportCosts); - } - - @Override - public void begin(VehicleRoute route) { - timeTracker.begin(route); - } - - @Override - public void visit(TourActivity activity) { - timeTracker.visit(activity); - states.putActivityState(activity, StateTypes.EARLIEST_OPERATION_START_TIME, new StateImpl(Math.max(timeTracker.getActArrTime(), activity.getTheoreticalEarliestOperationStartTime()))); - - } - - @Override - public void finish() {} - - } - - static class UpdateLatestOperationStartTimeAtActLocations implements ReverseActivityVisitor{ - - private static Logger log = Logger.getLogger(UpdateLatestOperationStartTimeAtActLocations.class); - - private StateManagerImpl states; - - private VehicleRoute route; - - private VehicleRoutingTransportCosts transportCosts; - - private double latestArrTimeAtPrevAct; - - private TourActivity prevAct; - - public UpdateLatestOperationStartTimeAtActLocations(StateManagerImpl states, VehicleRoutingTransportCosts tpCosts) { - super(); - this.states = states; - this.transportCosts = tpCosts; - } - - @Override - public void begin(VehicleRoute route) { - this.route = route; - latestArrTimeAtPrevAct = route.getEnd().getTheoreticalLatestOperationStartTime(); - prevAct = route.getEnd(); - } - - @Override - public void visit(TourActivity activity) { - double potentialLatestArrivalTimeAtCurrAct = latestArrTimeAtPrevAct - transportCosts.getBackwardTransportTime(activity.getLocationId(), prevAct.getLocationId(), latestArrTimeAtPrevAct, route.getDriver(),route.getVehicle()) - activity.getOperationTime(); - double latestArrivalTime = Math.min(activity.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct); - - states.putActivityState(activity, StateTypes.LATEST_OPERATION_START_TIME, new StateImpl(latestArrivalTime)); - - latestArrTimeAtPrevAct = latestArrivalTime; - prevAct = activity; - } - - @Override - public void finish() {} - } - - static class UpdateLoadAtAllLevels implements ActivityVisitor{ - - private double load = 0.0; - - private StateManagerImpl states; - - private VehicleRoute vehicleRoute; - - public UpdateLoadAtAllLevels(StateManagerImpl states) { - super(); - this.states = states; - } - - @Override - public void begin(VehicleRoute route) { - vehicleRoute = route; - } - - @Override - public void visit(TourActivity activity) { - load += (double)activity.getCapacityDemand(); - states.putActivityState(activity, StateTypes.LOAD, new StateImpl(load)); - } - - @Override - public void finish() { - states.putRouteState(vehicleRoute, StateTypes.LOAD, new StateImpl(load)); - load=0; - vehicleRoute = null; - } - - } - - static class UpdateLoadAtRouteLevel implements JobInsertedListener, InsertionStartsListener{ - - private StateManagerImpl states; - - public UpdateLoadAtRouteLevel(StateManagerImpl states) { - super(); - this.states = states; - } - - @Override - public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { - if(!(job2insert instanceof Service)){ - return; - } - double oldLoad = states.getRouteState(inRoute, StateTypes.LOAD).toDouble(); - states.putRouteState(inRoute, StateTypes.LOAD, new StateImpl(oldLoad + job2insert.getCapacityDemand())); - } - - @Override - public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs) { - for(VehicleRoute route : vehicleRoutes){ - int load = 0; - for(Job j : route.getTourActivities().getJobs()){ - load += j.getCapacityDemand(); - } - states.putRouteState(route, StateTypes.LOAD, new StateImpl(load)); - } - - } - - } - - static class UpdateStates implements JobInsertedListener, RuinListener{ - - private RouteActivityVisitor routeActivityVisitor; - - private ReverseRouteActivityVisitor revRouteActivityVisitor; - - public UpdateStates(StateManagerImpl states, VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts activityCosts) { - routeActivityVisitor = new RouteActivityVisitor(); - routeActivityVisitor.addActivityVisitor(new UpdateActivityTimes(routingCosts)); - routeActivityVisitor.addActivityVisitor(new UpdateCostsAtAllLevels(activityCosts, routingCosts, states)); - routeActivityVisitor.addActivityVisitor(new UpdateLoadAtAllLevels(states)); - - revRouteActivityVisitor = new ReverseRouteActivityVisitor(); - revRouteActivityVisitor.addActivityVisitor(new UpdateLatestOperationStartTimeAtActLocations(states, routingCosts)); - - } - - public void update(VehicleRoute route){ - routeActivityVisitor.visit(route); - revRouteActivityVisitor.visit(route); - } - - @Override - public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { - routeActivityVisitor.visit(inRoute); - revRouteActivityVisitor.visit(inRoute); - } - - @Override - public void ruinStarts(Collection routes) {} - - @Override - public void ruinEnds(Collection routes,Collection unassignedJobs) { - for(VehicleRoute route : routes) { - routeActivityVisitor.visit(route); - revRouteActivityVisitor.visit(route); - } - } - - @Override - public void removed(Job job, VehicleRoute fromRoute) {} - - } - - static class UpdateFuturePickupsAtActivityLevel implements ReverseActivityVisitor { - private StateManagerImpl stateManager; - private int futurePicks = 0; - private VehicleRoute route; - - public UpdateFuturePickupsAtActivityLevel(StateManagerImpl stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public void begin(VehicleRoute route) { - this.route = route; - } - - @Override - public void visit(TourActivity act) { - stateManager.putActivityState(act, StateTypes.FUTURE_PICKS, new StateImpl(futurePicks)); - if(act instanceof PickupActivity || act instanceof ServiceActivity){ - futurePicks += act.getCapacityDemand(); - } - assert futurePicks <= route.getVehicle().getCapacity() : "sum of pickups must not be > vehicleCap"; - assert futurePicks >= 0 : "sum of pickups must not < 0"; - } - - @Override - public void finish() { - futurePicks = 0; - route = null; - } - } - - static class UpdateOccuredDeliveriesAtActivityLevel implements ActivityVisitor { - private StateManagerImpl stateManager; - private int deliveries = 0; - private VehicleRoute route; - - public UpdateOccuredDeliveriesAtActivityLevel(StateManagerImpl stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public void begin(VehicleRoute route) { - this.route = route; - } - - @Override - public void visit(TourActivity act) { - if(act instanceof DeliveryActivity){ - deliveries += Math.abs(act.getCapacityDemand()); - } - stateManager.putActivityState(act, StateTypes.PAST_DELIVERIES, new StateImpl(deliveries)); - assert deliveries >= 0 : "deliveries < 0"; - assert deliveries <= route.getVehicle().getCapacity() : "deliveries > vehicleCap"; - } - - @Override - public void finish() { - deliveries = 0; - route = null; - } - } - - /** - * Updates load at activity level. Note that this assumed that StateTypes.LOAD_AT_DEPOT is already updated, i.e. it starts by setting loadAtDepot to StateTypes.LOAD_AT_DEPOT. - * If StateTypes.LOAD_AT_DEPOT is not set, it starts with 0 load at depot. - * - * @author stefan - * - */ - static class UpdateLoadAtActivityLevel implements ActivityVisitor { - private StateManagerImpl stateManager; - private int currentLoad = 0; - private VehicleRoute route; - - public UpdateLoadAtActivityLevel(StateManagerImpl stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public void begin(VehicleRoute route) { - currentLoad = (int) stateManager.getRouteState(route, StateTypes.LOAD_AT_DEPOT).toDouble(); - this.route = route; - } - - @Override - public void visit(TourActivity act) { - currentLoad += act.getCapacityDemand(); - stateManager.putActivityState(act, StateTypes.LOAD, new StateImpl(currentLoad)); - assert currentLoad <= route.getVehicle().getCapacity() : "currentLoad at activity must not be > vehicleCapacity"; - assert currentLoad >= 0 : "currentLoad at act must not be < 0"; - } - - @Override - public void finish() { - currentLoad = 0; - } - } - - static class ResetStateManager implements IterationStartsListener { - - private StateManagerImpl stateManager; - - public ResetStateManager(StateManagerImpl stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public void informIterationStarts(int i, VehicleRoutingProblem problem, Collection solutions) { - stateManager.clear(); - } - } - - static interface InsertionStarts { - - void insertionStarts(VehicleRoute route); - - } - - static class UpdateLoadsAtStartAndEndOfRouteWhenInsertionStarts implements InsertionStarts { - - private StateManagerImpl stateManager; - - public UpdateLoadsAtStartAndEndOfRouteWhenInsertionStarts(StateManagerImpl stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public void insertionStarts(VehicleRoute route) { - int loadAtDepot = 0; - int loadAtEnd = 0; - for(Job j : route.getTourActivities().getJobs()){ - if(j instanceof Delivery){ - loadAtDepot += j.getCapacityDemand(); - } - else if(j instanceof Pickup || j instanceof Service){ - loadAtEnd += j.getCapacityDemand(); - } - } - stateManager.putRouteState(route, StateTypes.LOAD_AT_DEPOT, new StateImpl(loadAtDepot)); - stateManager.putRouteState(route, StateTypes.LOAD, new StateImpl(loadAtEnd)); - } - - } - - static class UpdateLoadsAtStartAndEndOfRouteWhenJobHasBeenInserted implements JobInsertedListener { - - private StateManagerImpl stateManager; - - public UpdateLoadsAtStartAndEndOfRouteWhenJobHasBeenInserted(StateManagerImpl stateManager) { - super(); - this.stateManager = stateManager; - } - - @Override - public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { - if(job2insert instanceof Delivery){ - int loadAtDepot = (int) stateManager.getRouteState(inRoute, StateTypes.LOAD_AT_DEPOT).toDouble(); -// log.info("loadAtDepot="+loadAtDepot); - stateManager.putRouteState(inRoute, StateTypes.LOAD_AT_DEPOT, new StateImpl(loadAtDepot + job2insert.getCapacityDemand())); - } - else if(job2insert instanceof Pickup || job2insert instanceof Service){ - int loadAtEnd = (int) stateManager.getRouteState(inRoute, StateTypes.LOAD).toDouble(); -// log.info("loadAtEnd="+loadAtEnd); - stateManager.putRouteState(inRoute, StateTypes.LOAD, new StateImpl(loadAtEnd + job2insert.getCapacityDemand())); - } - } - - } - - static class UpdateRouteStatesOnceTheRouteHasBeenChanged implements InsertionStartsListener, JobInsertedListener { - - private RouteActivityVisitor forwardInTimeIterator; - - private ReverseRouteActivityVisitor backwardInTimeIterator; - - private Collection insertionStartsListeners; - - private Collection jobInsertionListeners; - - public UpdateRouteStatesOnceTheRouteHasBeenChanged(VehicleRoutingTransportCosts routingCosts) { - forwardInTimeIterator = new RouteActivityVisitor(); - backwardInTimeIterator = new ReverseRouteActivityVisitor(); - insertionStartsListeners = new ArrayList(); - jobInsertionListeners = new ArrayList(); - } - - void addVisitor(ActivityVisitor vis){ - forwardInTimeIterator.addActivityVisitor(vis); - } - - void addVisitor(ReverseActivityVisitor revVis){ - backwardInTimeIterator.addActivityVisitor(revVis); - } - - void addInsertionStartsListener(InsertionStarts insertionStartListener){ - insertionStartsListeners.add(insertionStartListener); - } - - void addJobInsertedListener(JobInsertedListener jobInsertedListener){ - jobInsertionListeners.add(jobInsertedListener); - } - - @Override - public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { - for(JobInsertedListener l : jobInsertionListeners){ l.informJobInserted(job2insert, inRoute, additionalCosts, additionalTime); } - forwardInTimeIterator.visit(inRoute); - backwardInTimeIterator.visit(inRoute); - } - - @Override - public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs) { - for(VehicleRoute route : vehicleRoutes){ - for(InsertionStarts insertionsStartsHandler : insertionStartsListeners){ - insertionsStartsHandler.insertionStarts(route); - } - forwardInTimeIterator.visit(route); - backwardInTimeIterator.visit(route); - } - } - - } -} diff --git a/jsprit-core/src/main/java/algorithms/VehicleFleetManager.java b/jsprit-core/src/main/java/algorithms/VehicleFleetManager.java deleted file mode 100644 index d0467077..00000000 --- a/jsprit-core/src/main/java/algorithms/VehicleFleetManager.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.Collection; - -import basics.route.Vehicle; - -interface VehicleFleetManager { - - static class TypeKey { - - public final String type; - public final String locationId; - - public TypeKey(String typeId, String locationId) { - super(); - this.type = typeId; - this.locationId = locationId; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result - + ((locationId == null) ? 0 : locationId.hashCode()); - result = prime * result + ((type == null) ? 0 : type.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - TypeKey other = (TypeKey) obj; - if (locationId == null) { - if (other.locationId != null) - return false; - } else if (!locationId.equals(other.locationId)) - return false; - if (type == null) { - if (other.type != null) - return false; - } else if (!type.equals(other.type)) - return false; - return true; - } - - - - } - - abstract void lock(Vehicle vehicle); - - abstract void unlock(Vehicle vehicle); - - abstract boolean isLocked(Vehicle vehicle); - - abstract void unlockAll(); - - abstract Collection getAvailableVehicles(); - - Collection getAvailableVehicles(String withoutThisType, String locationId); - -} diff --git a/jsprit-core/src/main/java/basics/costs/DefaultVehicleRoutingActivityCosts.java b/jsprit-core/src/main/java/basics/costs/DefaultVehicleRoutingActivityCosts.java deleted file mode 100644 index d5218662..00000000 --- a/jsprit-core/src/main/java/basics/costs/DefaultVehicleRoutingActivityCosts.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.costs; - -import basics.route.Driver; -import basics.route.TourActivity; -import basics.route.Vehicle; - - -/** - * Function that basically does not allow soft time-windows. Actually, it is allowed but it is penalized with Double.MaxValue(). - * - * @author schroeder - * - */ -public class DefaultVehicleRoutingActivityCosts implements VehicleRoutingActivityCosts{ - - @Override - public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) { - if(arrivalTime > tourAct.getTheoreticalLatestOperationStartTime()){ - return Double.MAX_VALUE; - } - return 0; - } - - @Override - public String toString() { - return "[name=hardTimeWindowActCosts]"; - } - -} diff --git a/jsprit-core/src/main/java/basics/route/DefaultVehicleRouteCostCalculator.java b/jsprit-core/src/main/java/basics/route/DefaultVehicleRouteCostCalculator.java deleted file mode 100644 index c388630c..00000000 --- a/jsprit-core/src/main/java/basics/route/DefaultVehicleRouteCostCalculator.java +++ /dev/null @@ -1,128 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.route; - - - -public class DefaultVehicleRouteCostCalculator implements VehicleRouteCostCalculator { - - private double tpCosts = 0.0; - private double actCosts = 0.0; - private double vehicleCosts = 0.0; - private double driverCosts = 0.0; - private double other = 0.0; - - public DefaultVehicleRouteCostCalculator(){} - - private DefaultVehicleRouteCostCalculator(DefaultVehicleRouteCostCalculator costCalc){ - this.tpCosts=costCalc.getTpCosts(); - this.actCosts = costCalc.getActCosts(); - this.driverCosts = costCalc.getDriverCosts(); - this.other = costCalc.getOther(); - this.vehicleCosts = costCalc.getVehicleCosts(); - } - - public void addTransportCost(double tpCost) { - this.tpCosts+=tpCost; - } - - public void addActivityCost(double actCost){ - this.actCosts+=actCost; - } - - public void price(Vehicle vehicle){ - if(vehicle != null){ - VehicleType type = vehicle.getType(); - if(type != null){ - this.vehicleCosts = type.getVehicleCostParams().fix; - } - } - } - - public void price(Driver driver){ - - } - - @Override - public void finish() { - // TODO Auto-generated method stub - - } - - @Override - public void reset() { - tpCosts = 0.0; - actCosts = 0.0; - vehicleCosts = 0.0; - driverCosts = 0.0; - other = 0.0; - } - - @Override - public void addOtherCost(double cost) { - this.other = cost; - - } - - @Override - public double getCosts() { - return tpCosts + actCosts + vehicleCosts + driverCosts + other; - } - - /** - * @return the tpCosts - */ - public double getTpCosts() { - return tpCosts; - } - - /** - * @return the actCosts - */ - public double getActCosts() { - return actCosts; - } - - /** - * @return the vehicleCosts - */ - public double getVehicleCosts() { - return vehicleCosts; - } - - /** - * @return the driverCosts - */ - public double getDriverCosts() { - return driverCosts; - } - - /** - * @return the other - */ - public double getOther() { - return other; - } - - @Override - public VehicleRouteCostCalculator duplicate() { - return new DefaultVehicleRouteCostCalculator(this); - } - - - -} diff --git a/jsprit-core/src/main/java/basics/route/PickupActivity.java b/jsprit-core/src/main/java/basics/route/PickupActivity.java deleted file mode 100644 index 74d5d101..00000000 --- a/jsprit-core/src/main/java/basics/route/PickupActivity.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.route; - -import basics.Pickup; -import basics.route.TourActivity.JobActivity; - -public class PickupActivity implements JobActivity{ - - private Pickup pickup; - - private double arrTime; - - private double depTime; - - public PickupActivity(Pickup pickup) { - super(); - this.pickup = pickup; - } - - private PickupActivity(PickupActivity pickupActivity){ - this.pickup=pickupActivity.getJob(); - this.arrTime=pickupActivity.getArrTime(); - this.depTime=pickupActivity.getEndTime(); - } - - @Override - public String getName() { - return pickup.getType(); - } - - @Override - public String getLocationId() { - return pickup.getLocationId(); - } - - @Override - public double getTheoreticalEarliestOperationStartTime() { - return pickup.getTimeWindow().getStart(); - } - - @Override - public double getTheoreticalLatestOperationStartTime() { - return pickup.getTimeWindow().getEnd(); - } - - @Override - public double getOperationTime() { - return pickup.getServiceDuration(); - } - - @Override - public double getArrTime() { - return arrTime; - } - - @Override - public double getEndTime() { - return depTime; - } - - @Override - public void setArrTime(double arrTime) { - this.arrTime=arrTime; - } - - @Override - public void setEndTime(double endTime) { - this.depTime=endTime; - } - - @Override - public TourActivity duplicate() { - return new PickupActivity(this); - } - - @Override - public Pickup getJob() { - return pickup; - } - - @Override - public int getCapacityDemand() { - return pickup.getCapacityDemand(); - } - - -} diff --git a/jsprit-core/src/main/java/basics/route/VehicleRoute.java b/jsprit-core/src/main/java/basics/route/VehicleRoute.java deleted file mode 100644 index 3f6f41bc..00000000 --- a/jsprit-core/src/main/java/basics/route/VehicleRoute.java +++ /dev/null @@ -1,204 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.route; - -import basics.route.VehicleImpl.NoVehicle; - -public class VehicleRoute { - - public static VehicleRoute copyOf(VehicleRoute route) { - return new VehicleRoute(route); - } - - public static VehicleRoute newInstance(TourActivities tour, Driver driver, Vehicle vehicle) { - return new VehicleRoute(tour,driver,vehicle); - } - - public static VehicleRoute emptyRoute() { - return new VehicleRoute(TourActivities.emptyTour(), DriverImpl.noDriver(), VehicleImpl.noVehicle()); - } - - public static class Builder { - - public static Builder newInstance(Start start, End end){ - return new Builder(start,end); - } - - private Start start; - - private End end; - - private Vehicle vehicle = VehicleImpl.noVehicle(); - - private Driver driver = DriverImpl.noDriver(); - - private TourActivities tour; - - private Builder(Start start, End end) { - super(); - this.start = start; - this.end = end; - this.tour = TourActivities.emptyTour(); - } - - public Builder setVehicle(Vehicle vehicle){ - this.vehicle = vehicle; - return this; - } - - public Builder setDriver(Driver driver){ - this.driver = driver; - return this; - } - - public Builder addActivity(TourActivity act){ - if(act instanceof Start || act instanceof End){ - throw new IllegalStateException("tourActivity should be of type Delivery or Pickup, but is of type " + act.getName()); - } - tour.addActivity(act); - return this; - } - - public VehicleRoute build(){ - return new VehicleRoute(this); - } - } - - private TourActivities tourActivities; - - private Vehicle vehicle; - - private Driver driver; - - private Start start; - - private End end; - - @Deprecated - private VehicleRouteCostCalculator costCalculator = new DefaultVehicleRouteCostCalculator(); - - @Deprecated - public VehicleRouteCostCalculator getVehicleRouteCostCalculator(){ - return costCalculator; - } - - private VehicleRoute(VehicleRoute route){ - this.start = Start.copyOf(route.getStart()); - this.end = End.copyOf(route.getEnd()); - this.tourActivities = TourActivities.copyOf(route.getTourActivities()); - this.vehicle = route.getVehicle(); - this.driver = route.getDriver(); - this.costCalculator = route.getVehicleRouteCostCalculator().duplicate(); - } - - private VehicleRoute(TourActivities tour, Driver driver, Vehicle vehicle) { - super(); - verify(tour, driver, vehicle); - this.tourActivities = tour; - this.vehicle = vehicle; - this.driver = driver; - setStartAndEnd(vehicle, vehicle.getEarliestDeparture()); - } - - private VehicleRoute(Builder builder){ - this.tourActivities = builder.tour; - this.vehicle = builder.vehicle; - this.driver = builder.driver; - this.start = builder.start; - this.end = builder.end; - } - - private void verify(TourActivities tour, Driver driver, Vehicle vehicle) { - if(tour == null || driver == null || vehicle == null) throw new IllegalStateException("null is not allowed for tour, driver or vehicle. use emptyRoute. use Tour.emptyTour, DriverImpl.noDriver() and VehicleImpl.noVehicle() instead." + - "\n\tor make it easier and use VehicleRoute.emptyRoute()"); - if(!tour.isEmpty() && vehicle instanceof NoVehicle){ - throw new IllegalStateException("if tour is not empty. there must be a vehicle for this tour, but there is no vehicle."); - } - } - - public TourActivities getTourActivities() { - return tourActivities; - } - - - public Vehicle getVehicle() { - return vehicle; - } - - public Driver getDriver() { - return driver; - } - - public void setVehicle(Vehicle vehicle, double vehicleDepTime){ - this.vehicle = vehicle; - setStartAndEnd(vehicle, vehicleDepTime); - } - - public void setDepartureTime(double vehicleDepTime){ - if(start == null) throw new IllegalStateException("cannot set departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead."); - start.setEndTime(vehicleDepTime); - } - - public double getDepartureTime(){ - if(start == null) throw new IllegalStateException("cannot get departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead."); - return start.getEndTime(); - } - - private void setStartAndEnd(Vehicle vehicle, double vehicleDepTime) { - if(!(vehicle instanceof NoVehicle)){ - if(start == null && end == null){ - start = Start.newInstance(vehicle.getLocationId(), vehicle.getEarliestDeparture(), vehicle.getLatestArrival()); - end = End.newInstance(vehicle.getLocationId(), vehicle.getEarliestDeparture(), vehicle.getLatestArrival()); - } - start.setEndTime(vehicleDepTime); - start.setTheoreticalEarliestOperationStartTime(vehicle.getEarliestDeparture()); - start.setTheoreticalLatestOperationStartTime(vehicle.getLatestArrival()); - start.setLocationId(vehicle.getLocationId()); - end.setLocationId(vehicle.getLocationId()); - end.setTheoreticalEarliestOperationStartTime(vehicle.getEarliestDeparture()); - end.setTheoreticalLatestOperationStartTime(vehicle.getLatestArrival()); - } - - } - - - public boolean isEmpty() { - return tourActivities.isEmpty(); - } - - public Start getStart() { - return start; - } - - public End getEnd() { - return end; - } - - @Deprecated - public void setVehicleRouteCostCalculator(VehicleRouteCostCalculator costAccumulator){ - this.costCalculator = costAccumulator; - } - - @Deprecated - public double getCost() { - if(tourActivities.isEmpty()){ - return 0.0; - } - return costCalculator.getCosts(); - } - -} diff --git a/jsprit-core/src/main/java/basics/route/VehicleRouteCostCalculator.java b/jsprit-core/src/main/java/basics/route/VehicleRouteCostCalculator.java deleted file mode 100644 index 0f3c4941..00000000 --- a/jsprit-core/src/main/java/basics/route/VehicleRouteCostCalculator.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.route; - -@Deprecated -public interface VehicleRouteCostCalculator { - - public void addTransportCost(double cost); - - public void addActivityCost(double cost); - - public void addOtherCost(double cost); - - public void price(Vehicle vehicle); - - public void price(Driver driver); - - public double getCosts(); - - public void finish(); - - public void reset(); - - public VehicleRouteCostCalculator duplicate(); - -} diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/FindCheaperVehicle.java b/jsprit-core/src/main/java/jsprit/core/algorithm/FindCheaperVehicle.java new file mode 100644 index 00000000..155fa90e --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/FindCheaperVehicle.java @@ -0,0 +1,54 @@ +///******************************************************************************* +// * Copyright (C) 2013 Stefan Schroeder +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 3.0 of the License, or (at your option) any later version. +// * +// * This library 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 +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library. If not, see . +// ******************************************************************************/ +//package jsprit.core.algorithm; +// +//import java.util.ArrayList; +//import java.util.Collection; +//import java.util.List; +// +//import jsprit.core.algorithm.recreate.listener.InsertionStartsListener; +//import jsprit.core.problem.job.Job; +//import jsprit.core.problem.solution.route.VehicleRoute; +// +// +//class FindCheaperVehicle implements InsertionStartsListener{ +// +// FindCheaperVehicleAlgo findCheaperVehicle; +// +// public FindCheaperVehicle(FindCheaperVehicleAlgo findCheaperVehicle) { +// super(); +// this.findCheaperVehicle = findCheaperVehicle; +// } +// +// @Override +// public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs) { +// List newRoutes = new ArrayList(); +// for(VehicleRoute route : vehicleRoutes){ +// if(route.isEmpty()) continue; +// VehicleRoute cheaperRoute = findCheaperVehicle.runAndGetVehicleRoute(route); +// newRoutes.add(cheaperRoute); +// } +// vehicleRoutes.clear(); +// vehicleRoutes.addAll(newRoutes); +// } +// +// @Override +// public String toString() { +// return "[name=findCheaperVehicle]"; +// } +// +//} diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/FindCheaperVehicleAlgo.java b/jsprit-core/src/main/java/jsprit/core/algorithm/FindCheaperVehicleAlgo.java new file mode 100644 index 00000000..c40165bf --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/FindCheaperVehicleAlgo.java @@ -0,0 +1,114 @@ +///******************************************************************************* +// * Copyright (C) 2013 Stefan Schroeder +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 3.0 of the License, or (at your option) any later version. +// * +// * This library 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 +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library. If not, see . +// ******************************************************************************/ +//package jsprit.core.algorithm; +// +//import java.util.ArrayList; +//import java.util.List; +// +//import jsprit.core.algorithm.recreate.AuxilliaryCostCalculator; +//import jsprit.core.algorithm.state.StateFactory; +//import jsprit.core.algorithm.state.StateGetter; +//import jsprit.core.problem.solution.route.VehicleRoute; +//import jsprit.core.problem.solution.route.activity.TourActivities; +//import jsprit.core.problem.solution.route.activity.TourActivity; +//import jsprit.core.problem.vehicle.Vehicle; +//import jsprit.core.problem.vehicle.VehicleFleetManager; +//import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; +// +//import org.apache.log4j.Logger; +// +// +// +// +//final class FindCheaperVehicleAlgo { +// +// private static Logger log = Logger.getLogger(FindCheaperVehicleAlgo.class); +// +// private VehicleFleetManager fleetManager; +// +// private VehicleRouteUpdater tourStateCalculator; +// +// private AuxilliaryCostCalculator auxilliaryCostCalculator; +// +// private double weightFixCosts = 1.0; +// +// private StateGetter states; +// +// public void setWeightFixCosts(double weightFixCosts) { +// this.weightFixCosts = weightFixCosts; +// } +// +// public void setStates(StateGetter states) { +// this.states = states; +// } +// +// public FindCheaperVehicleAlgo(VehicleFleetManager fleetManager, VehicleRouteUpdater tourStateCalculator, AuxilliaryCostCalculator auxilliaryCostCalculator) { +// super(); +// this.fleetManager = fleetManager; +// this.tourStateCalculator = tourStateCalculator; +// this.auxilliaryCostCalculator = auxilliaryCostCalculator; +// } +// +// +// public VehicleRoute runAndGetVehicleRoute(VehicleRoute vehicleRoute) { +// if(vehicleRoute.getVehicle() instanceof NoVehicle){ +// return vehicleRoute; +// } +// if(vehicleRoute.getTourActivities() == null || vehicleRoute.getVehicle() == null){ +// return vehicleRoute; +// } +//// Collection availableVehicleTypes = fleetManager.getAvailableVehicleTypes(new TypeKey(vehicleRoute.getVehicle().getType(),vehicleRoute.getVehicle().getLocationId())); +// double bestSaving = 0.0; +// Vehicle bestVehicle = null; +// List path = new ArrayList(); +// path.add(vehicleRoute.getStart()); +// path.addAll(vehicleRoute.getTourActivities().getActivities()); +// path.add(vehicleRoute.getEnd()); +// +// for(Vehicle vehicle : fleetManager.getAvailableVehicles(vehicleRoute.getVehicle().getType().getTypeId(), vehicleRoute.getVehicle().getLocationId())){ +//// Vehicle vehicle = fleetManager.getEmptyVehicle(vehicleType); +// if(vehicle.getType().getTypeId().equals(vehicleRoute.getVehicle().getType().getTypeId())){ +// continue; +// } +// if(states.getRouteState(vehicleRoute,StateFactory.LOAD).toDouble() <= vehicle.getCapacity()){ +// double fixCostSaving = vehicleRoute.getVehicle().getType().getVehicleCostParams().fix - vehicle.getType().getVehicleCostParams().fix; +// double departureTime = vehicleRoute.getStart().getEndTime(); +// double newCost = auxilliaryCostCalculator.costOfPath(path, departureTime, vehicleRoute.getDriver(), vehicle); +// double varCostSaving = states.getRouteState(vehicleRoute, StateFactory.COSTS).toDouble() - newCost; +// double totalCostSaving = varCostSaving + weightFixCosts*fixCostSaving; +// if(totalCostSaving > bestSaving){ +// bestSaving = totalCostSaving; +// bestVehicle = vehicle; +// } +// } +// } +// if(bestVehicle != null){ +// try{ +// fleetManager.unlock(vehicleRoute.getVehicle()); +// fleetManager.lock(bestVehicle); +// } +// catch(IllegalStateException e){ +// throw new IllegalStateException(e); +// } +// TourActivities newTour = TourActivities.copyOf(vehicleRoute.getTourActivities()); +// tourStateCalculator.iterate(vehicleRoute); +// return VehicleRoute.newInstance(newTour,vehicleRoute.getDriver(),bestVehicle); +// } +// return vehicleRoute; +// } +// +//} diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/InsertionInitialSolutionFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/InsertionInitialSolutionFactory.java new file mode 100644 index 00000000..fe9d7cfb --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/InsertionInitialSolutionFactory.java @@ -0,0 +1,82 @@ +/******************************************************************************* + * Copyright (c) 2011 Stefan Schroeder. + * eMail: stefan.schroeder@kit.edu + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v2.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * + * Contributors: + * Stefan Schroeder - initial API and implementation + ******************************************************************************/ +/* *********************************************************************** * + * project: org.matsim.* + * IniSolution.java + * * + * *********************************************************************** * + * * + * copyright : (C) 2011 by the members listed in the COPYING, * + * LICENSE and WARRANTY file. * + * email : info at matsim dot org * + * * + * *********************************************************************** * + * * + * 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 2 of the License, or * + * (at your option) any later version. * + * See also COPYING, LICENSE and WARRANTY file * + * * + * *********************************************************************** */ + +package jsprit.core.algorithm; + +import java.util.ArrayList; +import java.util.List; + +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.InitialSolutionFactory; +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; + +import org.apache.log4j.Logger; + + + + +public final class InsertionInitialSolutionFactory implements InitialSolutionFactory { + + private static final Logger logger = Logger.getLogger(InsertionInitialSolutionFactory.class); + + private final InsertionStrategy insertion; + + private SolutionCostCalculator solutionCostsCalculator; + + public InsertionInitialSolutionFactory(InsertionStrategy insertionStrategy, SolutionCostCalculator solutionCostCalculator) { + super(); + this.insertion = insertionStrategy; + this.solutionCostsCalculator = solutionCostCalculator; + } + + @Override + public VehicleRoutingProblemSolution createSolution(final VehicleRoutingProblem vrp) { + logger.info("create initial solution."); + List vehicleRoutes = new ArrayList(); + insertion.insertJobs(vehicleRoutes, getUnassignedJobs(vrp)); + VehicleRoutingProblemSolution solution = new VehicleRoutingProblemSolution(vehicleRoutes, Double.MAX_VALUE); + double costs = solutionCostsCalculator.getCosts(solution); + solution.setCost(costs); + logger.info("creation done"); + return solution; + } + + private List getUnassignedJobs(VehicleRoutingProblem vrp) { + List jobs = new ArrayList(vrp.getJobs().values()); + return jobs; + } + +} diff --git a/jsprit-core/src/main/java/algorithms/NeighborhoodThresholdInitialiser.java b/jsprit-core/src/main/java/jsprit/core/algorithm/NeighborhoodThresholdInitialiser.java similarity index 87% rename from jsprit-core/src/main/java/algorithms/NeighborhoodThresholdInitialiser.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/NeighborhoodThresholdInitialiser.java index 60a293d4..cf9ac210 100644 --- a/jsprit-core/src/main/java/algorithms/NeighborhoodThresholdInitialiser.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/NeighborhoodThresholdInitialiser.java @@ -14,28 +14,28 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm; import java.util.Collection; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.util.CrowFlyCosts; +import jsprit.core.util.EuclideanDistanceCalculator; +import jsprit.core.util.Locations; +import jsprit.core.util.NeighborhoodImpl; +import jsprit.core.util.Solutions; + import org.apache.commons.math.stat.descriptive.moment.Mean; import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; import org.apache.log4j.Logger; -import util.CrowFlyCosts; -import util.EuclideanDistanceCalculator; -import util.Locations; -import util.NeighborhoodImpl; -import util.Solutions; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.AlgorithmStartsListener; -import basics.algo.VehicleRoutingAlgorithmFactory; -import basics.route.TourActivity; -import basics.route.VehicleRoute; -public class NeighborhoodThresholdInitialiser implements AlgorithmStartsListener{ +class NeighborhoodThresholdInitialiser implements AlgorithmStartsListener{ private static Logger log = Logger.getLogger(NeighborhoodThresholdInitialiser.class); diff --git a/jsprit-core/src/main/java/algorithms/RemoveEmptyVehicles.java b/jsprit-core/src/main/java/jsprit/core/algorithm/RemoveEmptyVehicles.java similarity index 80% rename from jsprit-core/src/main/java/algorithms/RemoveEmptyVehicles.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/RemoveEmptyVehicles.java index 6e069b90..7f393dad 100644 --- a/jsprit-core/src/main/java/algorithms/RemoveEmptyVehicles.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/RemoveEmptyVehicles.java @@ -14,24 +14,22 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import org.apache.log4j.Logger; +import jsprit.core.algorithm.recreate.listener.InsertionEndsListener; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.VehicleFleetManager; -import basics.algo.InsertionEndsListener; -import basics.route.VehicleRoute; -class RemoveEmptyVehicles implements InsertionEndsListener{ +public class RemoveEmptyVehicles implements InsertionEndsListener{ - private static Logger log = Logger.getLogger(RemoveEmptyVehicles.class); - private VehicleFleetManager fleetManager; - RemoveEmptyVehicles(VehicleFleetManager fleetManager) { + public RemoveEmptyVehicles(VehicleFleetManager fleetManager) { super(); this.fleetManager = fleetManager; } diff --git a/jsprit-core/src/main/java/algorithms/ResetAndIniFleetManager.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ResetAndIniFleetManager.java similarity index 74% rename from jsprit-core/src/main/java/algorithms/ResetAndIniFleetManager.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ResetAndIniFleetManager.java index d03f255d..cffed4e1 100644 --- a/jsprit-core/src/main/java/algorithms/ResetAndIniFleetManager.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ResetAndIniFleetManager.java @@ -14,24 +14,22 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm; import java.util.ArrayList; import java.util.Collection; -import org.apache.log4j.Logger; +import jsprit.core.algorithm.recreate.listener.InsertionStartsListener; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.VehicleFleetManager; -import basics.Job; -import basics.algo.InsertionStartsListener; -import basics.route.VehicleRoute; -class ResetAndIniFleetManager implements InsertionStartsListener{ +public class ResetAndIniFleetManager implements InsertionStartsListener{ - private static Logger log = Logger.getLogger(ResetAndIniFleetManager.class); - private VehicleFleetManager vehicleFleetManager; - ResetAndIniFleetManager(VehicleFleetManager vehicleFleetManager) { + public ResetAndIniFleetManager(VehicleFleetManager vehicleFleetManager) { super(); this.vehicleFleetManager = vehicleFleetManager; } @@ -41,12 +39,7 @@ class ResetAndIniFleetManager implements InsertionStartsListener{ vehicleFleetManager.unlockAll(); Collection routes = new ArrayList(vehicleRoutes); for(VehicleRoute route : routes){ -// if(route.isEmpty()){ -// vehicleRoutes.remove(route); -// } -// else{ - vehicleFleetManager.lock(route.getVehicle()); -// } + vehicleFleetManager.lock(route.getVehicle()); } } diff --git a/jsprit-core/src/main/java/basics/algo/SearchStrategy.java b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategy.java similarity index 91% rename from jsprit-core/src/main/java/basics/algo/SearchStrategy.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategy.java index 3fd56556..465d58a5 100644 --- a/jsprit-core/src/main/java/basics/algo/SearchStrategy.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategy.java @@ -14,18 +14,21 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import jsprit.core.algorithm.acceptor.SolutionAcceptor; +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.algorithm.selector.SolutionSelector; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.apache.log4j.Logger; -import algorithms.acceptors.SolutionAcceptor; -import algorithms.selectors.SolutionSelector; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; @@ -125,7 +128,8 @@ public class SearchStrategy { VehicleRoutingProblemSolution newSolution = module.runAndGetSolution(lastSolution); lastSolution = newSolution; } - solutionCostCalculator.calculateCosts(lastSolution); + double costs = solutionCostCalculator.getCosts(lastSolution); + lastSolution.setCost(costs); boolean solutionAccepted = solutionAcceptor.acceptSolution(solutions, lastSolution); DiscoveredSolution discoveredSolution = new DiscoveredSolution(lastSolution, solutionAccepted, getName()); return discoveredSolution; diff --git a/jsprit-core/src/main/java/basics/algo/SearchStrategyManager.java b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyManager.java similarity index 93% rename from jsprit-core/src/main/java/basics/algo/SearchStrategyManager.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyManager.java index 853ced35..8b98bb32 100644 --- a/jsprit-core/src/main/java/basics/algo/SearchStrategyManager.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyManager.java @@ -14,14 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; -import util.RandomNumberGeneration; +import jsprit.core.algorithm.listener.SearchStrategyListener; +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.util.RandomNumberGeneration; + public class SearchStrategyManager { diff --git a/jsprit-core/src/main/java/basics/algo/SearchStrategyModule.java b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyModule.java similarity index 87% rename from jsprit-core/src/main/java/basics/algo/SearchStrategyModule.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyModule.java index fde99f71..6551b11b 100644 --- a/jsprit-core/src/main/java/basics/algo/SearchStrategyModule.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/SearchStrategyModule.java @@ -14,9 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; public interface SearchStrategyModule { diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/VariablePlusFixedSolutionCostCalculatorFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/VariablePlusFixedSolutionCostCalculatorFactory.java new file mode 100644 index 00000000..6d8104e3 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/VariablePlusFixedSolutionCostCalculatorFactory.java @@ -0,0 +1,33 @@ +package jsprit.core.algorithm; + +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; + +public class VariablePlusFixedSolutionCostCalculatorFactory { + + private RouteAndActivityStateGetter stateManager; + + public VariablePlusFixedSolutionCostCalculatorFactory(RouteAndActivityStateGetter stateManager) { + super(); + this.stateManager = stateManager; + } + + public SolutionCostCalculator createCalculator(){ + return new SolutionCostCalculator() { + + @Override + public double getCosts(VehicleRoutingProblemSolution solution) { + double c = 0.0; + for(VehicleRoute r : solution.getRoutes()){ + c += stateManager.getRouteState(r, StateFactory.COSTS).toDouble(); + c += r.getVehicle().getType().getVehicleCostParams().fix; + } + return c; + } + }; + } + +} diff --git a/jsprit-core/src/main/java/basics/VehicleRoutingAlgorithm.java b/jsprit-core/src/main/java/jsprit/core/algorithm/VehicleRoutingAlgorithm.java similarity index 73% rename from jsprit-core/src/main/java/basics/VehicleRoutingAlgorithm.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/VehicleRoutingAlgorithm.java index 150a68f4..313cb388 100644 --- a/jsprit-core/src/main/java/basics/VehicleRoutingAlgorithm.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/VehicleRoutingAlgorithm.java @@ -14,26 +14,29 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.algorithm; import java.util.ArrayList; import java.util.Collection; +import jsprit.core.algorithm.SearchStrategy.DiscoveredSolution; +import jsprit.core.algorithm.acceptor.SolutionAcceptor; +import jsprit.core.algorithm.listener.AlgorithmEndsListener; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.algorithm.listener.IterationEndsListener; +import jsprit.core.algorithm.listener.IterationStartsListener; +import jsprit.core.algorithm.listener.SearchStrategyListener; +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.algorithm.listener.StrategySelectedListener; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListener; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners; +import jsprit.core.algorithm.termination.IterationWithoutImprovementTermination; +import jsprit.core.algorithm.termination.PrematureAlgorithmTermination; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.apache.log4j.Logger; -import util.Counter; -import algorithms.acceptors.SolutionAcceptor; -import basics.algo.AlgorithmEndsListener; -import basics.algo.AlgorithmStartsListener; -import basics.algo.IterationEndsListener; -import basics.algo.IterationStartsListener; -import basics.algo.IterationWithoutImprovementBreaker; -import basics.algo.PrematureAlgorithmBreaker; -import basics.algo.SearchStrategy; -import basics.algo.SearchStrategy.DiscoveredSolution; -import basics.algo.SearchStrategyManager; -import basics.algo.VehicleRoutingAlgorithmListener; -import basics.algo.VehicleRoutingAlgorithmListeners; /** * Algorithm that solves a {@link VehicleRoutingProblem}. @@ -43,7 +46,36 @@ import basics.algo.VehicleRoutingAlgorithmListeners; */ public class VehicleRoutingAlgorithm { - + private static class Counter { + private final String name; + private long counter = 0; + private long nextCounter = 1; + private static final Logger log = Logger.getLogger(Counter.class); + + public Counter(final String name) { + this.name = name; + } + + public void incCounter() { + long i = counter++; + long n = nextCounter; + if (i >= n) { + if (nextCounter==n) { + nextCounter=n*2; + log.info(this.name + n); + } + } + } + + public void print() { + log.info(this.name + counter); + } + + public void reset() { + counter=0; + nextCounter=1; + } + } public static final int NOBREAK = Integer.MAX_VALUE; @@ -61,7 +93,7 @@ public class VehicleRoutingAlgorithm { private Collection initialSolutions; - private PrematureAlgorithmBreaker prematureAlgorithmBreaker = new PrematureAlgorithmBreaker() { + private PrematureAlgorithmTermination prematureAlgorithmTermination = new PrematureAlgorithmTermination() { @Override public boolean isPrematureBreak(DiscoveredSolution discoveredSolution) { @@ -100,15 +132,16 @@ public class VehicleRoutingAlgorithm { * Improvement is what {@link SolutionAcceptor} understands about improvement. Or to put it in other words, the algo breaks prematurely after * the assigned number of iterations without solution-acceptance. * - * + * @deprecated use setPrematureAlgorithmTermination(new IterationWithoutImprovementTermination(int nuIterationsWithoutImprovement)); * @param nuIterationsWithoutImprovement */ + @Deprecated public void setPrematureBreak(int nuIterationsWithoutImprovement){ - prematureAlgorithmBreaker = new IterationWithoutImprovementBreaker(nuIterationsWithoutImprovement); + prematureAlgorithmTermination = new IterationWithoutImprovementTermination(nuIterationsWithoutImprovement); } - public void setPrematureAlgorithmBreaker(PrematureAlgorithmBreaker prematureAlgorithmBreaker){ - this.prematureAlgorithmBreaker = prematureAlgorithmBreaker; + public void setPrematureAlgorithmTermination(PrematureAlgorithmTermination prematureAlgorithmTermination){ + this.prematureAlgorithmTermination = prematureAlgorithmTermination; } /** @@ -146,7 +179,7 @@ public class VehicleRoutingAlgorithm { SearchStrategy strategy = searchStrategyManager.getRandomStrategy(); DiscoveredSolution discoveredSolution = strategy.run(problem, solutions); selectedStrategy(strategy.getName(),problem, solutions); - if(prematureAlgorithmBreaker.isPrematureBreak(discoveredSolution)){ + if(prematureAlgorithmTermination.isPrematureBreak(discoveredSolution)){ logger.info("premature break at iteration "+ (i+1)); nuOfIterationsThisAlgoIsRunning = (i+1); break; @@ -193,6 +226,12 @@ public class VehicleRoutingAlgorithm { public VehicleRoutingAlgorithmListeners getAlgorithmListeners() { return algoListeners; } + + public void addListener(VehicleRoutingAlgorithmListener l){ + algoListeners.addListener(l); + if(l instanceof SearchStrategyListener) searchStrategyManager.addSearchStrategyListener((SearchStrategyListener) l); + if(l instanceof SearchStrategyModuleListener) searchStrategyManager.addSearchStrategyModuleListener((SearchStrategyModuleListener) l); + } private void iterationEnds(int i, VehicleRoutingProblem problem, Collection solutions) { algoListeners.iterationEnds(i,problem, solutions); diff --git a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/VehicleRoutingAlgorithmFactory.java similarity index 91% rename from jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmFactory.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/VehicleRoutingAlgorithmFactory.java index e0b9be1c..40749bdb 100644 --- a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/VehicleRoutingAlgorithmFactory.java @@ -14,10 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem; public interface VehicleRoutingAlgorithmFactory { diff --git a/jsprit-core/src/main/java/algorithms/acceptors/AcceptNewRemoveFirst.java b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/AcceptNewRemoveFirst.java similarity index 94% rename from jsprit-core/src/main/java/algorithms/acceptors/AcceptNewRemoveFirst.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/AcceptNewRemoveFirst.java index abaa1e00..8da92a94 100644 --- a/jsprit-core/src/main/java/algorithms/acceptors/AcceptNewRemoveFirst.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/AcceptNewRemoveFirst.java @@ -14,11 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.acceptors; +package jsprit.core.algorithm.acceptor; import java.util.Collection; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + public class AcceptNewRemoveFirst implements SolutionAcceptor{ diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/ExperimentalSchrimpfAcceptance.java b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/ExperimentalSchrimpfAcceptance.java new file mode 100644 index 00000000..ab81bbd3 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/ExperimentalSchrimpfAcceptance.java @@ -0,0 +1,158 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm.acceptor; + +import java.net.URL; +import java.util.Collection; + +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.AlgorithmConfig; +import jsprit.core.algorithm.io.AlgorithmConfigXmlReader; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.algorithm.listener.IterationEndsListener; +import jsprit.core.algorithm.listener.IterationStartsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.util.Resource; +import jsprit.core.util.Solutions; + +import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; +import org.apache.log4j.Logger; + + + + +public class ExperimentalSchrimpfAcceptance implements SolutionAcceptor, IterationStartsListener, AlgorithmStartsListener{ + + private static Logger logger = Logger.getLogger(ExperimentalSchrimpfAcceptance.class); + + private final double alpha; + + private int nOfTotalIterations = 1000; + + private int currentIteration = 0; + + private double initialThreshold = 0.0; + + private final int nOfRandomWalks; + + private final int solutionMemory; + + + public ExperimentalSchrimpfAcceptance(int solutionMemory, double alpha, int nOfWarmupIterations) { + super(); + this.alpha = alpha; + this.nOfRandomWalks = nOfWarmupIterations; + this.solutionMemory = solutionMemory; + logger.info("initialise " + this); + } + + + + @Override + public boolean acceptSolution(Collection solutions, VehicleRoutingProblemSolution newSolution) { + boolean solutionAccepted = false; + if (solutions.size() < solutionMemory) { + solutions.add(newSolution); + solutionAccepted = true; + } else { + VehicleRoutingProblemSolution worst = null; + double threshold = getThreshold(currentIteration); + for(VehicleRoutingProblemSolution solutionInMemory : solutions){ + if(worst == null) worst = solutionInMemory; + else if(solutionInMemory.getCost() > worst.getCost()) worst = solutionInMemory; + } + if(newSolution.getRoutes().size() < worst.getRoutes().size()){ + solutions.remove(worst); + solutions.add(newSolution); + solutionAccepted = true; + } + else if(newSolution.getRoutes().size() == worst.getRoutes().size() && newSolution.getCost() < worst.getCost() + threshold){ + solutions.remove(worst); + solutions.add(newSolution); + solutionAccepted = true; + } + } + return solutionAccepted; + } + + @Override + public String toString() { + return "[name=schrimpfAcceptanceFunction][alpha="+alpha+"][warmup=" + nOfRandomWalks + "]"; + } + + private double getThreshold(int iteration) { + double scheduleVariable = (double) iteration / (double) nOfTotalIterations; +// logger.debug("iter="+iteration+" totalIter="+nOfTotalIterations+" scheduling="+scheduleVariable); + double currentThreshold = initialThreshold * Math.exp(-Math.log(2) * scheduleVariable / alpha); + return currentThreshold; + } + + + @Override + public void informAlgorithmStarts(VehicleRoutingProblem problem, VehicleRoutingAlgorithm algorithm, Collection solutions) { + reset(); + logger.info("---------------------------------------------------------------------"); + logger.info("prepare schrimpfAcceptanceFunction, i.e. determine initial threshold"); + logger.info("start random-walk (see randomWalk.xml)"); + double now = System.currentTimeMillis(); + this.nOfTotalIterations = algorithm.getNuOfIterations(); + + /* + * randomWalk to determine standardDev + */ + final double[] results = new double[nOfRandomWalks]; + + URL resource = Resource.getAsURL("randomWalk.xml"); + AlgorithmConfig algorithmConfig = new AlgorithmConfig(); + new AlgorithmConfigXmlReader(algorithmConfig).read(resource); + VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.createAlgorithm(problem, algorithmConfig); + vra.setNuOfIterations(nOfRandomWalks); + vra.getAlgorithmListeners().addListener(new IterationEndsListener() { + + @Override + public void informIterationEnds(int iteration, VehicleRoutingProblem problem, Collection solutions) { + double result = Solutions.getBest(solutions).getCost(); +// logger.info("result="+result); + results[iteration-1] = result; + } + + }); + vra.searchSolutions(); + + StandardDeviation dev = new StandardDeviation(); + double standardDeviation = dev.evaluate(results); + initialThreshold = standardDeviation / 2; + + logger.info("warmup done"); + logger.info("total time: " + ((System.currentTimeMillis()-now)/1000.0) + "s"); + logger.info("initial threshold: " + initialThreshold); + logger.info("---------------------------------------------------------------------"); + + } + + private void reset() { + currentIteration = 0; + } + + @Override + public void informIterationStarts(int i, VehicleRoutingProblem problem, Collection solutions) { + currentIteration = i; + } + +} diff --git a/jsprit-core/src/main/java/algorithms/acceptors/AcceptNewIfBetterThanWorst.java b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/GreedyAcceptance.java similarity index 83% rename from jsprit-core/src/main/java/algorithms/acceptors/AcceptNewIfBetterThanWorst.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/GreedyAcceptance.java index 6ed85659..1f896697 100644 --- a/jsprit-core/src/main/java/algorithms/acceptors/AcceptNewIfBetterThanWorst.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/GreedyAcceptance.java @@ -14,18 +14,19 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.acceptors; +package jsprit.core.algorithm.acceptor; import java.util.Collection; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; -public class AcceptNewIfBetterThanWorst implements SolutionAcceptor{ + +public class GreedyAcceptance implements SolutionAcceptor{ private final int solutionMemory; - public AcceptNewIfBetterThanWorst(int solutionMemory){ + public GreedyAcceptance(int solutionMemory){ this.solutionMemory = solutionMemory; } @@ -47,6 +48,12 @@ public class AcceptNewIfBetterThanWorst implements SolutionAcceptor{ if (worstSolution == null) worstSolution = s; else if (s.getCost() > worstSolution.getCost()) worstSolution = s; } +// if(newSolution.getRoutes().size() < worstSolution.getRoutes().size()){ +// solutions.remove(worstSolution); +// solutions.add(newSolution); +// solutionAccepted = true; +// } +// else if(newSolution.getCost() < worstSolution.getCost()){ solutions.remove(worstSolution); solutions.add(newSolution); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/GreedyAcceptance_minVehFirst.java b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/GreedyAcceptance_minVehFirst.java new file mode 100644 index 00000000..ae5b0976 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/GreedyAcceptance_minVehFirst.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm.acceptor; + +import java.util.Collection; + +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + + + +public class GreedyAcceptance_minVehFirst implements SolutionAcceptor{ + + private final int solutionMemory; + + public GreedyAcceptance_minVehFirst(int solutionMemory){ + this.solutionMemory = solutionMemory; + } + + /** + * Accepts every solution if solution memory allows. If memory occupied, than accepts new solution only if better than the worst in memory. + * Consequently, the worst solution is removed from solutions, and the new solution added. + * + *

Note that this modifies Collection solutions. + */ + @Override + public boolean acceptSolution(Collection solutions, VehicleRoutingProblemSolution newSolution) { + boolean solutionAccepted = false; + if (solutions.size() < solutionMemory) { + solutions.add(newSolution); + solutionAccepted = true; + } else { + VehicleRoutingProblemSolution worstSolution = null; + for (VehicleRoutingProblemSolution s : solutions) { + if (worstSolution == null) worstSolution = s; + else if (s.getRoutes().size() > worstSolution.getRoutes().size()) worstSolution = s; + } + if(newSolution.getRoutes().size() < worstSolution.getRoutes().size()){ + solutions.remove(worstSolution); + solutions.add(newSolution); + solutionAccepted = true; + } + else if(newSolution.getRoutes().size() == worstSolution.getRoutes().size() && newSolution.getCost() < worstSolution.getCost()){ + solutions.remove(worstSolution); + solutions.add(newSolution); + solutionAccepted = true; + } + } + return solutionAccepted; + } + + @Override + public String toString() { + return "[name=greedyAcceptance_minVehFirst]"; + } + + + + +} diff --git a/jsprit-core/src/main/java/algorithms/acceptors/SchrimpfAcceptance.java b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/SchrimpfAcceptance.java similarity index 88% rename from jsprit-core/src/main/java/algorithms/acceptors/SchrimpfAcceptance.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/SchrimpfAcceptance.java index 544b8872..9b181c8a 100644 --- a/jsprit-core/src/main/java/algorithms/acceptors/SchrimpfAcceptance.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/SchrimpfAcceptance.java @@ -14,25 +14,26 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.acceptors; +package jsprit.core.algorithm.acceptor; import java.net.URL; import java.util.Collection; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.AlgorithmConfig; +import jsprit.core.algorithm.io.AlgorithmConfigXmlReader; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.algorithm.listener.IterationEndsListener; +import jsprit.core.algorithm.listener.IterationStartsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.util.Resource; +import jsprit.core.util.Solutions; + import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; import org.apache.log4j.Logger; -import util.Resource; -import util.Solutions; -import algorithms.VehicleRoutingAlgorithms; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.AlgorithmStartsListener; -import basics.algo.IterationEndsListener; -import basics.algo.IterationStartsListener; -import basics.io.AlgorithmConfig; -import basics.io.AlgorithmConfigXmlReader; diff --git a/jsprit-core/src/main/java/algorithms/acceptors/SolutionAcceptor.java b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/SolutionAcceptor.java similarity index 93% rename from jsprit-core/src/main/java/algorithms/acceptors/SolutionAcceptor.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/SolutionAcceptor.java index f0debbeb..23cd70d1 100644 --- a/jsprit-core/src/main/java/algorithms/acceptors/SolutionAcceptor.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/acceptor/SolutionAcceptor.java @@ -14,11 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.acceptors; +package jsprit.core.algorithm.acceptor; import java.util.Collection; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + /** * Acceptor that decides whether the newSolution is accepted or not. diff --git a/jsprit-core/src/main/java/algorithms/GreedySchrimpfFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/box/GreedySchrimpfFactory.java similarity index 86% rename from jsprit-core/src/main/java/algorithms/GreedySchrimpfFactory.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/box/GreedySchrimpfFactory.java index c8faf88f..a757b9a5 100644 --- a/jsprit-core/src/main/java/algorithms/GreedySchrimpfFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/box/GreedySchrimpfFactory.java @@ -14,15 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.box; import java.net.URL; -import util.Resource; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.io.AlgorithmConfig; -import basics.io.AlgorithmConfigXmlReader; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.AlgorithmConfig; +import jsprit.core.algorithm.io.AlgorithmConfigXmlReader; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.util.Resource; + /** diff --git a/jsprit-core/src/main/java/algorithms/SchrimpfFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/box/SchrimpfFactory.java similarity index 86% rename from jsprit-core/src/main/java/algorithms/SchrimpfFactory.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/box/SchrimpfFactory.java index 0d54ee20..efb1655a 100644 --- a/jsprit-core/src/main/java/algorithms/SchrimpfFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/box/SchrimpfFactory.java @@ -14,15 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.box; import java.net.URL; -import util.Resource; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.io.AlgorithmConfig; -import basics.io.AlgorithmConfigXmlReader; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.AlgorithmConfig; +import jsprit.core.algorithm.io.AlgorithmConfigXmlReader; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.util.Resource; + /** diff --git a/jsprit-core/src/main/java/basics/io/AlgorithmConfig.java b/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfig.java similarity index 97% rename from jsprit-core/src/main/java/basics/io/AlgorithmConfig.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfig.java index 6aaefc90..1fa3f1c1 100644 --- a/jsprit-core/src/main/java/basics/io/AlgorithmConfig.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfig.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.algorithm.io; import org.apache.commons.configuration.XMLConfiguration; diff --git a/jsprit-core/src/main/java/basics/io/AlgorithmConfigXmlReader.java b/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfigXmlReader.java similarity index 97% rename from jsprit-core/src/main/java/basics/io/AlgorithmConfigXmlReader.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfigXmlReader.java index 13d2709e..c3ae89be 100644 --- a/jsprit-core/src/main/java/basics/io/AlgorithmConfigXmlReader.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/io/AlgorithmConfigXmlReader.java @@ -14,19 +14,20 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.algorithm.io; import java.io.IOException; import java.io.InputStream; import java.net.URL; +import jsprit.core.util.Resource; + import org.apache.commons.configuration.ConfigurationException; import org.apache.log4j.Logger; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import util.Resource; public class AlgorithmConfigXmlReader { diff --git a/jsprit-core/src/main/java/algorithms/InsertionFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/io/InsertionFactory.java similarity index 65% rename from jsprit-core/src/main/java/algorithms/InsertionFactory.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/io/InsertionFactory.java index 9dae4a80..6f23a2a9 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/io/InsertionFactory.java @@ -14,28 +14,32 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.io; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; +import jsprit.core.algorithm.recreate.BestInsertionBuilder; +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.vehicle.VehicleFleetManager; + import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.log4j.Logger; -import algorithms.HardConstraints.ConstraintManager; -import basics.VehicleRoutingProblem; -import basics.algo.InsertionListener; -import basics.algo.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; class InsertionFactory { private static Logger log = Logger.getLogger(InsertionFactory.class); public static InsertionStrategy createInsertion(VehicleRoutingProblem vrp, HierarchicalConfiguration config, - VehicleFleetManager vehicleFleetManager, StateManagerImpl routeStates, List algorithmListeners, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager){ - boolean concurrentInsertion = false; - if(executorService != null) concurrentInsertion = true; + VehicleFleetManager vehicleFleetManager, StateManager routeStates, List algorithmListeners, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager){ + if(config.containsKey("[@name]")){ String insertionName = config.getString("[@name]"); if(!insertionName.equals("bestInsertion") && !insertionName.equals("regretInsertion")){ @@ -45,16 +49,17 @@ class InsertionFactory { List insertionListeners = new ArrayList(); List algoListeners = new ArrayList(); - CalculatorBuilder calcBuilder = new CalculatorBuilder(insertionListeners, algorithmListeners); - calcBuilder.setStates(routeStates); - calcBuilder.setVehicleRoutingProblem(vrp); - calcBuilder.setVehicleFleetManager(vehicleFleetManager); - calcBuilder.setConstraintManager(constraintManager); + BestInsertionBuilder iBuilder = new BestInsertionBuilder(vrp, vehicleFleetManager, routeStates, constraintManager); + + if(executorService != null){ + iBuilder.setConcurrentMode(executorService, nuOfThreads); + } if(config.containsKey("level")){ String level = config.getString("level"); if(level.equals("local")){ - calcBuilder.setLocalLevel(); + iBuilder.setLocalLevel(); +// calcBuilder.setLocalLevel(); } else if(level.equals("route")){ int forwardLooking = 0; @@ -65,11 +70,12 @@ class InsertionFactory { else log.warn("parameter route[@forwardLooking] is missing. by default it is 0 which equals to local level"); if(mem != null) memory = Integer.parseInt(mem); else log.warn("parameter route[@memory] is missing. by default it is 1"); - calcBuilder.setRouteLevel(forwardLooking, memory); + iBuilder.setRouteLevel(forwardLooking, memory); +// calcBuilder.setRouteLevel(forwardLooking, memory); } else throw new IllegalStateException("level " + level + " is not known. currently it only knows \"local\" or \"route\""); } - else calcBuilder.setLocalLevel(); + else iBuilder.setLocalLevel(); if(config.containsKey("considerFixedCosts") || config.containsKey("considerFixedCost")){ String val = config.getString("considerFixedCosts"); @@ -80,36 +86,21 @@ class InsertionFactory { if(weight == null) weight = config.getString("considerFixedCost[@weight]"); if(weight != null) fixedCostWeight = Double.parseDouble(weight); else log.warn("parameter considerFixedCosts[@weight] is missing. by default, it is 0.5."); - calcBuilder.considerFixedCosts(fixedCostWeight); + iBuilder.considerFixedCosts(fixedCostWeight); } } String timeSliceString = config.getString("experimental[@timeSlice]"); String neighbors = config.getString("experimental[@neighboringSlices]"); if(timeSliceString != null && neighbors != null){ - calcBuilder.experimentalTimeScheduler(Double.parseDouble(timeSliceString),Integer.parseInt(neighbors)); + iBuilder.experimentalTimeScheduler(Double.parseDouble(timeSliceString),Integer.parseInt(neighbors)); } - JobInsertionCalculator jic = calcBuilder.build(); - - if(insertionName.equals("bestInsertion")){ - insertionStrategy = new BestInsertion(jic); + insertionStrategy = iBuilder.build(); } -// else if(insertionName.equals("regretInsertion")){ -// insertionStrategy = RegretInsertion.newInstance(routeAlgorithm); -// } - -// insertionStrategy.addListener(new RemoveEmptyVehicles(vehicleFleetManager)); -// insertionStrategy.addListener(new ResetAndIniFleetManager(vehicleFleetManager)); -// insertionStrategy.addListener(new VehicleSwitched(vehicleFleetManager)); - -// insertionStrategy.addListener(new UpdateLoadAtRouteLevel(routeStates)); - -// insertionStrategy.addListener(new UpdateStates(routeStates, vrp.getTransportCosts(), vrp.getActivityCosts())); + else throw new IllegalStateException("currently only 'bestInsertion' is supported"); for(InsertionListener l : insertionListeners) insertionStrategy.addListener(l); -// insertionStrategy.addListener(new FindCheaperVehicle( -// new FindCheaperVehicleAlgoNew(vehicleFleetManager, tourStateCalculator, auxCalculator))); - + algorithmListeners.addAll(algoListeners); return insertionStrategy; diff --git a/jsprit-core/src/main/java/algorithms/VehicleRoutingAlgorithms.java b/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java similarity index 67% rename from jsprit-core/src/main/java/algorithms/VehicleRoutingAlgorithms.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java index 4cd33742..faa84ee3 100644 --- a/jsprit-core/src/main/java/algorithms/VehicleRoutingAlgorithms.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/io/VehicleRoutingAlgorithms.java @@ -14,9 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.io; +import java.lang.Thread.UncaughtExceptionHandler; import java.net.URL; import java.util.ArrayList; import java.util.Collection; @@ -26,47 +27,68 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import jsprit.core.algorithm.InsertionInitialSolutionFactory; +import jsprit.core.algorithm.RemoveEmptyVehicles; +import jsprit.core.algorithm.ResetAndIniFleetManager; +import jsprit.core.algorithm.SearchStrategy; +import jsprit.core.algorithm.SearchStrategy.DiscoveredSolution; +import jsprit.core.algorithm.SearchStrategyManager; +import jsprit.core.algorithm.SearchStrategyModule; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.acceptor.AcceptNewRemoveFirst; +import jsprit.core.algorithm.acceptor.ExperimentalSchrimpfAcceptance; +import jsprit.core.algorithm.acceptor.GreedyAcceptance; +import jsprit.core.algorithm.acceptor.GreedyAcceptance_minVehFirst; +import jsprit.core.algorithm.acceptor.SchrimpfAcceptance; +import jsprit.core.algorithm.acceptor.SolutionAcceptor; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.AbstractKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.AcceptorKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.InsertionStrategyKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.RuinStrategyKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.SelectorKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.StrategyModuleKey; +import jsprit.core.algorithm.listener.AlgorithmEndsListener; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.Priority; +import jsprit.core.algorithm.module.RuinAndRecreateModule; +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.algorithm.recreate.VehicleSwitched; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.algorithm.ruin.RadialRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RandomRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RuinStrategy; +import jsprit.core.algorithm.ruin.distance.AvgServiceAndShipmentDistance; +import jsprit.core.algorithm.ruin.distance.JobDistance; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.algorithm.selector.SelectRandomly; +import jsprit.core.algorithm.selector.SolutionSelector; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.algorithm.state.UpdateActivityTimes; +import jsprit.core.algorithm.state.UpdateVariableCosts; +import jsprit.core.algorithm.termination.IterationWithoutImprovementTermination; +import jsprit.core.algorithm.termination.PrematureAlgorithmTermination; +import jsprit.core.algorithm.termination.TimeTermination; +import jsprit.core.algorithm.termination.VariationCoefficientTermination; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.FiniteFleetManagerFactory; +import jsprit.core.problem.vehicle.InfiniteFleetManagerFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleFleetManager; +import jsprit.core.util.SolutionVerifier; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.XMLConfiguration; import org.apache.log4j.Logger; -import algorithms.HardConstraints.ConstraintManager; -import algorithms.VehicleRoutingAlgorithms.TypedMap.AbstractKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.AcceptorKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.InsertionStrategyKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.RuinStrategyKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.SelectorKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.StrategyModuleKey; -import algorithms.acceptors.AcceptNewIfBetterThanWorst; -import algorithms.acceptors.AcceptNewRemoveFirst; -import algorithms.acceptors.SchrimpfAcceptance; -import algorithms.acceptors.SolutionAcceptor; -import algorithms.selectors.SelectBest; -import algorithms.selectors.SelectRandomly; -import algorithms.selectors.SolutionSelector; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.Constraint; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.algo.AlgorithmStartsListener; -import basics.algo.InsertionListener; -import basics.algo.IterationWithoutImprovementBreaker; -import basics.algo.PrematureAlgorithmBreaker; -import basics.algo.SearchStrategy; -import basics.algo.SearchStrategy.DiscoveredSolution; -import basics.algo.SearchStrategyManager; -import basics.algo.SearchStrategyModule; -import basics.algo.SolutionCostCalculator; -import basics.algo.TimeBreaker; -import basics.algo.VariationCoefficientBreaker; -import basics.algo.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; -import basics.algo.VehicleRoutingAlgorithmListeners.Priority; -import basics.io.AlgorithmConfig; -import basics.io.AlgorithmConfigXmlReader; -import basics.route.Vehicle; -import basics.route.VehicleRoute; @@ -370,12 +392,12 @@ public class VehicleRoutingAlgorithms { * @return {@link VehicleRoutingAlgorithm} */ public static VehicleRoutingAlgorithm createAlgorithm(final VehicleRoutingProblem vrp, final AlgorithmConfig algorithmConfig){ - return createAlgo(vrp,algorithmConfig.getXMLConfiguration(),null,0); + return createAlgo(vrp,algorithmConfig.getXMLConfiguration(),0); } @Deprecated public static VehicleRoutingAlgorithm readAndCreateAlgorithm(final VehicleRoutingProblem vrp, final XMLConfiguration config){ - return createAlgo(vrp,config,null,0); + return createAlgo(vrp,config,0); } /** @@ -389,7 +411,7 @@ public class VehicleRoutingAlgorithms { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configURL); - return createAlgo(vrp,algorithmConfig.getXMLConfiguration(),null,0); + return createAlgo(vrp,algorithmConfig.getXMLConfiguration(),0); } /** @@ -403,26 +425,18 @@ public class VehicleRoutingAlgorithms { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp,algorithmConfig.getXMLConfiguration(),null, 0); + return createAlgo(vrp,algorithmConfig.getXMLConfiguration(),0); } - /** - * Read and creates {@link VehicleRoutingAlgorithm} from config-file. - * - * @param vrp - * @param configFileName - * @param nuOfThreads TODO - * @param {@link ExecutorService} - * @return {@link VehicleRoutingAlgorithm} - */ - private static VehicleRoutingAlgorithm readAndCreateConcurrentAlgorithm(final VehicleRoutingProblem vrp, final String configFileName, final ExecutorService executorService, int nuOfThreads){ + public static VehicleRoutingAlgorithm readAndCreateAlgorithm(VehicleRoutingProblem vrp, int nThreads, String configFileName) { AlgorithmConfig algorithmConfig = new AlgorithmConfig(); AlgorithmConfigXmlReader xmlReader = new AlgorithmConfigXmlReader(algorithmConfig); xmlReader.read(configFileName); - return createAlgo(vrp,algorithmConfig.getXMLConfiguration(), executorService, nuOfThreads); + return createAlgo(vrp,algorithmConfig.getXMLConfiguration(),nThreads); } - private static VehicleRoutingAlgorithm createAlgo(final VehicleRoutingProblem vrp, XMLConfiguration config, ExecutorService executorService, int nuOfThreads){ + private static VehicleRoutingAlgorithm createAlgo(final VehicleRoutingProblem vrp, XMLConfiguration config, int nuOfThreads){ + // map to store constructed modules TypedMap definedClasses = new TypedMap(); @@ -433,27 +447,54 @@ public class VehicleRoutingAlgorithms { // insertion listeners List insertionListeners = new ArrayList(); + //threading + final ExecutorService executorService; + if(nuOfThreads > 0){ + log.info("setup executor-service with " + nuOfThreads + " threads"); + executorService = Executors.newFixedThreadPool(nuOfThreads); + algorithmListeners.add(new PrioritizedVRAListener(Priority.LOW, new AlgorithmEndsListener() { + + @Override + public void informAlgorithmEnds(VehicleRoutingProblem problem,Collection solutions) { + log.info("shutdown executor-service"); + executorService.shutdown(); + } + })); + Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { + + @Override + public void uncaughtException(Thread arg0, Throwable arg1) { + System.err.println(arg1.toString()); + System.exit(0); + } + }); + Runtime.getRuntime().addShutdownHook(new Thread(){ + public void run(){ + if(!executorService.isShutdown()){ + System.err.println("shutdowHook shuts down executorService"); + executorService.shutdown(); + } + } + }); + } + else executorService = null; + + //create fleetmanager final VehicleFleetManager vehicleFleetManager = createFleetManager(vrp); //create state-manager - final StateManagerImpl stateManager = new StateManagerImpl(); + final StateManager stateManager = new StateManager(vrp); + stateManager.updateLoadStates(); + stateManager.updateTimeWindowStates(); /* * define constraints */ //constraint manager - ConstraintManager constraintManager = new ConstraintManager(); - constraintManager.addConstraint(new HardConstraints.HardTimeWindowActivityLevelConstraint(stateManager, vrp.getTransportCosts())); - - if(vrp.getProblemConstraints().contains(Constraint.DELIVERIES_FIRST)){ - constraintManager.addConstraint(new HardConstraints.HardPickupAndDeliveryBackhaulActivityLevelConstraint(stateManager)); - } - else{ - constraintManager.addConstraint(new HardConstraints.HardPickupAndDeliveryActivityLevelConstraint(stateManager)); - } - - constraintManager.addConstraint(new HardConstraints.HardPickupAndDeliveryLoadConstraint(stateManager)); + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addTimeWindowConstraint(); + constraintManager.addLoadConstraint(); //construct initial solution creator AlgorithmStartsListener createInitialSolution = createInitialSolution(config,vrp,vehicleFleetManager,stateManager,algorithmListeners,definedClasses,executorService,nuOfThreads,constraintManager); @@ -490,32 +531,26 @@ public class VehicleRoutingAlgorithms { /* * define stateUpdates */ +// UpdateLoads loadUpdater = new UpdateLoads(stateManager); +// stateManager.addListener(loadUpdater); +// stateManager.addActivityVisitor(loadUpdater); + stateManager.addStateUpdater(new UpdateActivityTimes(vrp.getTransportCosts())); + stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); - //reset stateManager - algorithmListeners.add(new PrioritizedVRAListener(Priority.LOW, new StateUpdates.ResetStateManager(stateManager))); - //update states -// metaAlgorithm.getSearchStrategyManager().addSearchStrategyModuleListener(new UpdateStates(stateManager, vrp.getTransportCosts(), vrp.getActivityCosts())); - StateUpdates.UpdateRouteStatesOnceTheRouteHasBeenChanged routeChangedListener = new StateUpdates.UpdateRouteStatesOnceTheRouteHasBeenChanged(vrp.getTransportCosts()); +// stateManager.addActivityVisitor(new UpdateOccuredDeliveries(stateManager)); +// stateManager.addActivityVisitor(new TimeWindowUpdater(stateManager, vrp.getTransportCosts())); +// stateManager.addActivityVisitor(new UpdateFuturePickups(stateManager)); - routeChangedListener.addInsertionStartsListener(new StateUpdates.UpdateLoadsAtStartAndEndOfRouteWhenInsertionStarts(stateManager)); - routeChangedListener.addJobInsertedListener(new StateUpdates.UpdateLoadsAtStartAndEndOfRouteWhenJobHasBeenInserted(stateManager)); + metaAlgorithm.getSearchStrategyManager().addSearchStrategyModuleListener(stateManager); + metaAlgorithm.getAlgorithmListeners().addListener(stateManager); - routeChangedListener.addVisitor(new StateUpdates.UpdateActivityTimes(vrp.getTransportCosts())); - routeChangedListener.addVisitor(new StateUpdates.UpdateLoadAtActivityLevel(stateManager)); - routeChangedListener.addVisitor(new StateUpdates.UpdateCostsAtAllLevels(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); - - routeChangedListener.addVisitor(new StateUpdates.UpdateOccuredDeliveriesAtActivityLevel(stateManager)); - routeChangedListener.addVisitor(new StateUpdates.UpdateLatestOperationStartTimeAtActLocations(stateManager, vrp.getTransportCosts())); - routeChangedListener.addVisitor(new StateUpdates.UpdateFuturePickupsAtActivityLevel(stateManager)); - - metaAlgorithm.getSearchStrategyManager().addSearchStrategyModuleListener(routeChangedListener); metaAlgorithm.getSearchStrategyManager().addSearchStrategyModuleListener(new RemoveEmptyVehicles(vehicleFleetManager)); metaAlgorithm.getSearchStrategyManager().addSearchStrategyModuleListener(new ResetAndIniFleetManager(vehicleFleetManager)); metaAlgorithm.getSearchStrategyManager().addSearchStrategyModuleListener(new VehicleSwitched(vehicleFleetManager)); //define prematureBreak - PrematureAlgorithmBreaker prematureAlgoBreaker = getPrematureBreaker(config,algorithmListeners); - metaAlgorithm.setPrematureAlgorithmBreaker(prematureAlgoBreaker); + PrematureAlgorithmTermination prematureAlgoBreaker = getPrematureBreaker(config,algorithmListeners); + metaAlgorithm.setPrematureAlgorithmTermination(prematureAlgoBreaker); //misc algorithmListeners.add(new PrioritizedVRAListener(Priority.LOW, new SolutionVerifier())); @@ -526,16 +561,16 @@ public class VehicleRoutingAlgorithms { return metaAlgorithm; } - private static SolutionCostCalculator getCostCalculator(final StateManagerImpl stateManager) { + private static SolutionCostCalculator getCostCalculator(final StateManager stateManager) { SolutionCostCalculator calc = new SolutionCostCalculator() { @Override - public void calculateCosts(VehicleRoutingProblemSolution solution) { + public double getCosts(VehicleRoutingProblemSolution solution) { double costs = 0.0; for(VehicleRoute route : solution.getRoutes()){ - costs += stateManager.getRouteState(route, StateTypes.COSTS).toDouble() + getFixedCosts(route.getVehicle()); + costs += stateManager.getRouteState(route, StateFactory.COSTS).toDouble() + getFixedCosts(route.getVehicle()); } - solution.setCost(costs); + return costs; } private double getFixedCosts(Vehicle vehicle) { @@ -549,21 +584,21 @@ public class VehicleRoutingAlgorithms { private static VehicleFleetManager createFleetManager(final VehicleRoutingProblem vrp) { if(vrp.getFleetSize().equals(FleetSize.INFINITE)){ - return new InfiniteVehicles(vrp.getVehicles()); + return new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); } else if(vrp.getFleetSize().equals(FleetSize.FINITE)){ - return new VehicleFleetManagerImpl(vrp.getVehicles()); + return new FiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); } throw new IllegalStateException("fleet size can only be infinite or finite. " + "makes sure your config file contains one of these options"); } - private static PrematureAlgorithmBreaker getPrematureBreaker(XMLConfiguration config, Set algorithmListeners) { + private static PrematureAlgorithmTermination getPrematureBreaker(XMLConfiguration config, Set algorithmListeners) { String basedOn = config.getString("prematureBreak[@basedOn]"); if(basedOn == null){ log.info("set default prematureBreak, i.e. no premature break at all."); - return new PrematureAlgorithmBreaker() { + return new PrematureAlgorithmTermination() { @Override public boolean isPrematureBreak(DiscoveredSolution discoveredSolution) { @@ -576,14 +611,14 @@ public class VehicleRoutingAlgorithms { String iter = config.getString("prematureBreak.iterations"); if(iter == null) throw new IllegalStateException("prematureBreak.iterations is missing"); int iterations = Integer.valueOf(iter); - return new IterationWithoutImprovementBreaker(iterations); + return new IterationWithoutImprovementTermination(iterations); } if(basedOn.equals("time")){ log.info("set prematureBreak based on time"); String timeString = config.getString("prematureBreak.time"); if(timeString == null) throw new IllegalStateException("prematureBreak.time is missing"); double time = Double.valueOf(timeString); - TimeBreaker timeBreaker = new TimeBreaker(time); + TimeTermination timeBreaker = new TimeTermination(time); algorithmListeners.add(new PrioritizedVRAListener(Priority.LOW, timeBreaker)); return timeBreaker; } @@ -595,7 +630,7 @@ public class VehicleRoutingAlgorithms { if(iterationsString == null) throw new IllegalStateException("prematureBreak.iterations is missing"); double threshold = Double.valueOf(thresholdString); int iterations = Integer.valueOf(iterationsString); - VariationCoefficientBreaker variationCoefficientBreaker = new VariationCoefficientBreaker(iterations, threshold); + VariationCoefficientTermination variationCoefficientBreaker = new VariationCoefficientTermination(iterations, threshold); algorithmListeners.add(new PrioritizedVRAListener(Priority.LOW, variationCoefficientBreaker)); return variationCoefficientBreaker; } @@ -626,7 +661,7 @@ public class VehicleRoutingAlgorithms { metaAlgorithm.getAlgorithmListeners().addAll(algorithmListeners); } - private static AlgorithmStartsListener createInitialSolution(XMLConfiguration config, final VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager, final StateManagerImpl routeStates, Set algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager) { + private static AlgorithmStartsListener createInitialSolution(XMLConfiguration config, final VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager, final StateManager routeStates, Set algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager) { List modConfigs = config.configurationsAt("construction.insertion"); if(modConfigs == null) return null; if(modConfigs.isEmpty()) return null; @@ -651,9 +686,11 @@ public class VehicleRoutingAlgorithms { @Override public void informAlgorithmStarts(VehicleRoutingProblem problem, VehicleRoutingAlgorithm algorithm, Collection solutions) { - CreateInitialSolution createInitialSolution = new CreateInitialSolution(finalInsertionStrategy, getCostCalculator(routeStates)); - createInitialSolution.setGenerateAsMuchAsRoutesAsVehiclesExist(false); - VehicleRoutingProblemSolution vrpSol = createInitialSolution.createInitialSolution(vrp); + InsertionInitialSolutionFactory insertionInitialSolutionFactory = new InsertionInitialSolutionFactory(finalInsertionStrategy, getCostCalculator(routeStates)); +// CreateInitialSolution createInitialSolution = new CreateInitialSolution(finalInsertionStrategy, getCostCalculator(routeStates)); +// +// createInitialSolution.setGenerateAsMuchAsRoutesAsVehiclesExist(false); + VehicleRoutingProblemSolution vrpSol = insertionInitialSolutionFactory.createSolution(vrp); solutions.add(vrpSol); } }; @@ -698,7 +735,7 @@ public class VehicleRoutingAlgorithms { SolutionAcceptor definedAcceptor = typedMap.get(acceptorKey); if(definedAcceptor != null) return definedAcceptor; if(acceptorName.equals("acceptNewRemoveWorst")){ - AcceptNewIfBetterThanWorst acceptor = new AcceptNewIfBetterThanWorst(solutionMemory); + GreedyAcceptance acceptor = new GreedyAcceptance(solutionMemory); typedMap.put(acceptorKey, acceptor); return acceptor; } @@ -707,6 +744,16 @@ public class VehicleRoutingAlgorithms { typedMap.put(acceptorKey, acceptor); return acceptor; } + if(acceptorName.equals("greedyAcceptance")){ + GreedyAcceptance acceptor = new GreedyAcceptance(solutionMemory); + typedMap.put(acceptorKey, acceptor); + return acceptor; + } + if(acceptorName.equals("greedyAcceptance_minVehFirst")){ + GreedyAcceptance_minVehFirst acceptor = new GreedyAcceptance_minVehFirst(solutionMemory); + typedMap.put(acceptorKey, acceptor); + return acceptor; + } if(acceptorName.equals("schrimpfAcceptance")){ int iterOfSchrimpf = strategyConfig.getInt("acceptor.warmup"); double alpha = strategyConfig.getDouble("acceptor.alpha"); @@ -715,13 +762,21 @@ public class VehicleRoutingAlgorithms { typedMap.put(acceptorKey, schrimpf); return schrimpf; } + if(acceptorName.equals("experimentalSchrimpfAcceptance")){ + int iterOfSchrimpf = strategyConfig.getInt("acceptor.warmup"); + double alpha = strategyConfig.getDouble("acceptor.alpha"); + ExperimentalSchrimpfAcceptance schrimpf = new ExperimentalSchrimpfAcceptance(solutionMemory, alpha, iterOfSchrimpf); + algorithmListeners.add(new PrioritizedVRAListener(Priority.LOW, schrimpf)); + typedMap.put(acceptorKey, schrimpf); + return schrimpf; + } else{ throw new IllegalStateException("solution acceptor " + acceptorName + " is not known"); } } private static SearchStrategyModule buildModule(HierarchicalConfiguration moduleConfig, final VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager, - final StateManagerImpl routeStates, Set algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager) { + final StateManager routeStates, Set algorithmListeners, TypedMap definedClasses, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager) { String moduleName = moduleConfig.getString("[@name]"); if(moduleName == null) throw new IllegalStateException("module(-name) is missing."); String moduleId = moduleConfig.getString("[@id]"); @@ -746,15 +801,15 @@ public class VehicleRoutingAlgorithms { } else if(ruin_name.equals("radialRuin")){ String ruin_distance = moduleConfig.getString("ruin.distance"); - JobDistance jobDistance; - if(ruin_distance == null) jobDistance = new JobDistanceAvgCosts(vrp.getTransportCosts()); - else { - if(ruin_distance.equals("euclidean")){ - jobDistance = new EuclideanServiceDistance(); - } - else throw new IllegalStateException("does not know ruin.distance " + ruin_distance + ". either ommit ruin.distance then the " - + "default is used or use 'euclidean'"); - } + JobDistance jobDistance = new AvgServiceAndShipmentDistance(vrp.getTransportCosts()); +// if(ruin_distance == null) jobDistance +// else { +// if(ruin_distance.equals("euclidean")){ +// jobDistance = new EuclideanServiceDistance(); +// } +// else throw new IllegalStateException("does not know ruin.distance " + ruin_distance + ". either ommit ruin.distance then the " +// + "default is used or use 'euclidean'"); +// } ruin = getRadialRuin(vrp, routeStates, definedClasses, ruinKey, shareToRuin, jobDistance); } else throw new IllegalStateException("ruin[@name] " + ruin_name + " is not known. Use either randomRuin or radialRuin."); @@ -779,40 +834,40 @@ public class VehicleRoutingAlgorithms { return rrModule; } if(moduleName.equals("gendreau")){ - int iterations = moduleConfig.getInt("iterations"); - double share = moduleConfig.getDouble("share"); - String ruinName = moduleConfig.getString("ruin[@name]"); - if(ruinName == null) throw new IllegalStateException("gendreau.ruin[@name] is missing. set it to \"radialRuin\" or \"randomRuin\""); - String ruinId = moduleConfig.getString("ruin[@id]"); - if(ruinId == null) ruinId = "noId"; - ModKey ruinKey = makeKey(ruinName,ruinId); - RuinStrategyKey stratKey = new RuinStrategyKey(ruinKey); - RuinStrategy ruin = definedClasses.get(stratKey); - if(ruin == null){ - ruin = new RuinRadial(vrp, 0.3, new JobDistanceAvgCosts(vrp.getTransportCosts())); - definedClasses.put(stratKey, ruin); - } - - String insertionName = moduleConfig.getString("insertion[@name]"); - if(insertionName == null) throw new IllegalStateException("gendreau.insertion[@name] is missing. set it to \"regretInsertion\" or \"bestInsertion\""); - String insertionId = moduleConfig.getString("insertion[@id]"); - if(insertionId == null) insertionId = "noId"; - ModKey insertionKey = makeKey(insertionName,insertionId); - InsertionStrategyKey insertionStrategyKey = new InsertionStrategyKey(insertionKey); - InsertionStrategy insertion = definedClasses.get(insertionStrategyKey); - if(insertion == null){ - List insertionConfigs = moduleConfig.configurationsAt("insertion"); - if(insertionConfigs.size() != 1) throw new IllegalStateException("this should be 1"); - List prioListeners = new ArrayList(); - insertion = createInsertionStrategy(insertionConfigs.get(0), vrp, vehicleFleetManager, routeStates, prioListeners, executorService, nuOfThreads, constraintManager); - algorithmListeners.addAll(prioListeners); - } - Gendreau gendreau = new Gendreau(vrp, ruin, insertion); - gendreau.setShareOfJobsToRuin(share); - gendreau.setNuOfIterations(iterations); - gendreau.setFleetManager(vehicleFleetManager); - definedClasses.put(strategyModuleKey, gendreau); - return gendreau; + throw new UnsupportedOperationException("gendreau is not supported yet"); +// int iterations = moduleConfig.getInt("iterations"); +// double share = moduleConfig.getDouble("share"); +// String ruinName = moduleConfig.getString("ruin[@name]"); +// if(ruinName == null) throw new IllegalStateException("gendreau.ruin[@name] is missing. set it to \"radialRuin\" or \"randomRuin\""); +// String ruinId = moduleConfig.getString("ruin[@id]"); +// if(ruinId == null) ruinId = "noId"; +// ModKey ruinKey = makeKey(ruinName,ruinId); +// RuinStrategyKey stratKey = new RuinStrategyKey(ruinKey); +// RuinStrategy ruin = definedClasses.get(stratKey); +// if(ruin == null){ +// ruin = new RadialRuinStrategyFactory(0.3, new AvgJobDistance(vrp.getTransportCosts())).createStrategy(vrp); +// definedClasses.put(stratKey, ruin); +// } +// +// String insertionName = moduleConfig.getString("insertion[@name]"); +// if(insertionName == null) throw new IllegalStateException("gendreau.insertion[@name] is missing. set it to \"regretInsertion\" or \"bestInsertion\""); +// String insertionId = moduleConfig.getString("insertion[@id]"); +// if(insertionId == null) insertionId = "noId"; +// ModKey insertionKey = makeKey(insertionName,insertionId); +// InsertionStrategyKey insertionStrategyKey = new InsertionStrategyKey(insertionKey); +// InsertionStrategy insertion = definedClasses.get(insertionStrategyKey); +// if(insertion == null){ +// List insertionConfigs = moduleConfig.configurationsAt("insertion"); +// if(insertionConfigs.size() != 1) throw new IllegalStateException("this should be 1"); +// List prioListeners = new ArrayList(); +// insertion = createInsertionStrategy(insertionConfigs.get(0), vrp, vehicleFleetManager, routeStates, prioListeners, executorService, nuOfThreads, constraintManager); +// algorithmListeners.addAll(prioListeners); +// } +// Gendreau gendreau = new Gendreau(vrp, ruin, insertion, vehicleFleetManager); +// gendreau.setShareOfJobsToRuin(share); +// gendreau.setNuOfIterations(iterations); +// definedClasses.put(strategyModuleKey, gendreau); +// return gendreau; } throw new NullPointerException("no module found with moduleName=" + moduleName + "\n\tcheck config whether the correct names are used" + @@ -823,30 +878,32 @@ public class VehicleRoutingAlgorithms { "\n\tgendreauPostOpt"); } - private static RuinStrategy getRadialRuin(final VehicleRoutingProblem vrp, final StateManagerImpl routeStates, TypedMap definedClasses, ModKey modKey, double shareToRuin, JobDistance jobDistance) { + private static RuinStrategy getRadialRuin(final VehicleRoutingProblem vrp, final StateManager routeStates, TypedMap definedClasses, ModKey modKey, double shareToRuin, JobDistance jobDistance) { RuinStrategyKey stratKey = new RuinStrategyKey(modKey); RuinStrategy ruin = definedClasses.get(stratKey); if(ruin == null){ - ruin = new RuinRadial(vrp, shareToRuin, jobDistance); + ruin = new RadialRuinStrategyFactory(shareToRuin, jobDistance).createStrategy(vrp); definedClasses.put(stratKey, ruin); } return ruin; } - private static RuinStrategy getRandomRuin(final VehicleRoutingProblem vrp, final StateManagerImpl routeStates, TypedMap definedClasses, ModKey modKey, double shareToRuin) { + private static RuinStrategy getRandomRuin(final VehicleRoutingProblem vrp, final StateManager routeStates, TypedMap definedClasses, ModKey modKey, double shareToRuin) { RuinStrategyKey stratKey = new RuinStrategyKey(modKey); RuinStrategy ruin = definedClasses.get(stratKey); if(ruin == null){ - ruin = new RuinRandom(vrp, shareToRuin); + ruin = new RandomRuinStrategyFactory(shareToRuin).createStrategy(vrp); definedClasses.put(stratKey, ruin); } return ruin; } - private static InsertionStrategy createInsertionStrategy(HierarchicalConfiguration moduleConfig, VehicleRoutingProblem vrp,VehicleFleetManager vehicleFleetManager, StateManagerImpl routeStates, List algorithmListeners, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager) { + private static InsertionStrategy createInsertionStrategy(HierarchicalConfiguration moduleConfig, VehicleRoutingProblem vrp,VehicleFleetManager vehicleFleetManager, StateManager routeStates, List algorithmListeners, ExecutorService executorService, int nuOfThreads, ConstraintManager constraintManager) { InsertionStrategy insertion = InsertionFactory.createInsertion(vrp, moduleConfig, vehicleFleetManager, routeStates, algorithmListeners, executorService, nuOfThreads, constraintManager); return insertion; } + + } diff --git a/jsprit-core/src/main/java/basics/algo/AlgorithmEndsListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/AlgorithmEndsListener.java similarity index 87% rename from jsprit-core/src/main/java/basics/algo/AlgorithmEndsListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/AlgorithmEndsListener.java index 87142e9b..fc0a617b 100644 --- a/jsprit-core/src/main/java/basics/algo/AlgorithmEndsListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/AlgorithmEndsListener.java @@ -14,12 +14,13 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; import java.util.Collection; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + diff --git a/jsprit-core/src/main/java/basics/algo/AlgorithmStartsListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/AlgorithmStartsListener.java similarity index 84% rename from jsprit-core/src/main/java/basics/algo/AlgorithmStartsListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/AlgorithmStartsListener.java index e244b9e3..9b917808 100644 --- a/jsprit-core/src/main/java/basics/algo/AlgorithmStartsListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/AlgorithmStartsListener.java @@ -14,13 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; import java.util.Collection; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + diff --git a/jsprit-core/src/main/java/basics/algo/IterationEndsListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/IterationEndsListener.java similarity index 87% rename from jsprit-core/src/main/java/basics/algo/IterationEndsListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/IterationEndsListener.java index 7aaf6b9f..6c70c24f 100644 --- a/jsprit-core/src/main/java/basics/algo/IterationEndsListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/IterationEndsListener.java @@ -14,12 +14,13 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; import java.util.Collection; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + diff --git a/jsprit-core/src/main/java/basics/algo/IterationStartsListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/IterationStartsListener.java similarity index 87% rename from jsprit-core/src/main/java/basics/algo/IterationStartsListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/IterationStartsListener.java index db7610fc..a8d492c1 100644 --- a/jsprit-core/src/main/java/basics/algo/IterationStartsListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/IterationStartsListener.java @@ -14,12 +14,13 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; import java.util.Collection; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + diff --git a/jsprit-core/src/main/java/basics/algo/SearchStrategyListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/SearchStrategyListener.java similarity index 96% rename from jsprit-core/src/main/java/basics/algo/SearchStrategyListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/SearchStrategyListener.java index 0d47246b..d4983bb9 100644 --- a/jsprit-core/src/main/java/basics/algo/SearchStrategyListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/SearchStrategyListener.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; public interface SearchStrategyListener extends VehicleRoutingAlgorithmListener{ diff --git a/jsprit-core/src/main/java/basics/algo/SearchStrategyModuleListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/SearchStrategyModuleListener.java similarity index 96% rename from jsprit-core/src/main/java/basics/algo/SearchStrategyModuleListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/SearchStrategyModuleListener.java index 925585f3..58f7e737 100644 --- a/jsprit-core/src/main/java/basics/algo/SearchStrategyModuleListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/SearchStrategyModuleListener.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; public interface SearchStrategyModuleListener extends VehicleRoutingAlgorithmListener{ diff --git a/jsprit-core/src/main/java/basics/algo/StrategySelectedListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/StrategySelectedListener.java similarity index 87% rename from jsprit-core/src/main/java/basics/algo/StrategySelectedListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/StrategySelectedListener.java index 2046e6fc..79898d11 100644 --- a/jsprit-core/src/main/java/basics/algo/StrategySelectedListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/StrategySelectedListener.java @@ -14,12 +14,13 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; import java.util.Collection; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + diff --git a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/VehicleRoutingAlgorithmListener.java similarity index 95% rename from jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/VehicleRoutingAlgorithmListener.java index 957527a6..c2eaef7f 100644 --- a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/VehicleRoutingAlgorithmListener.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; public interface VehicleRoutingAlgorithmListener { diff --git a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListeners.java b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/VehicleRoutingAlgorithmListeners.java similarity index 96% rename from jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListeners.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/listener/VehicleRoutingAlgorithmListeners.java index 2ec3fdd8..9301c847 100644 --- a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListeners.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/listener/VehicleRoutingAlgorithmListeners.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.listener; import java.util.ArrayList; import java.util.Collection; @@ -23,9 +23,10 @@ import java.util.Comparator; import java.util.List; import java.util.TreeSet; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/module/Gendreau.java b/jsprit-core/src/main/java/jsprit/core/algorithm/module/Gendreau.java new file mode 100644 index 00000000..2a933c19 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/module/Gendreau.java @@ -0,0 +1,224 @@ +///******************************************************************************* +// * Copyright (C) 2013 Stefan Schroeder +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 3.0 of the License, or (at your option) any later version. +// * +// * This library 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 +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library. If not, see . +// ******************************************************************************/ +//package jsprit.core.algorithm.module; +// +//import java.util.ArrayList; +//import java.util.Arrays; +//import java.util.Collection; +//import java.util.Collections; +//import java.util.HashSet; +//import java.util.List; +//import java.util.Random; +//import java.util.Set; +// +//import jsprit.core.algorithm.SearchStrategyModule; +//import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +//import jsprit.core.algorithm.recreate.InsertionStrategy; +//import jsprit.core.algorithm.recreate.listener.InsertionListener; +//import jsprit.core.algorithm.recreate.listener.InsertionListeners; +//import jsprit.core.algorithm.ruin.RuinStrategy; +//import jsprit.core.algorithm.ruin.listener.RuinListener; +//import jsprit.core.problem.Job; +//import jsprit.core.problem.VehicleRoutingProblem; +//import jsprit.core.problem.VehicleRoutingProblemSolution; +//import jsprit.core.problem.route.TourActivity; +//import jsprit.core.problem.route.TourActivity.JobActivity; +//import jsprit.core.problem.route.VehicleFleetManager; +//import jsprit.core.problem.route.VehicleRoute; +//import jsprit.core.util.RandomNumberGeneration; +// +//import org.apache.log4j.Logger; +// +// +//final class Gendreau implements SearchStrategyModule{ +// +// private final static Logger log = Logger.getLogger(Gendreau.class); +// +// private final static String NAME = "gendreauPostOpt"; +// +// private final RuinStrategy ruin; +// +// private final VehicleRoutingProblem vrp; +// +// private final InsertionStrategy insertionStrategy; +// +// private VehicleFleetManager fleetManager; +// +// private Random random = RandomNumberGeneration.getRandom(); +// +// private int nOfIterations = 10; +// +// private double shareOfJobsToRuin = 0.15; +// +// public void setShareOfJobsToRuin(double shareOfJobsToRuin) { +// this.shareOfJobsToRuin = shareOfJobsToRuin; +// } +// +// public Gendreau(VehicleRoutingProblem vrp, RuinStrategy ruin, InsertionStrategy insertionStrategy, VehicleFleetManager vehicleFleetManager) { +// super(); +// InsertionListeners insertionListeners = new InsertionListeners(); +// insertionListeners.addAllListeners(insertionStrategy.getListeners()); +// new Inserter(insertionListeners); +// this.ruin = ruin; +// this.vrp = vrp; +// this.insertionStrategy = insertionStrategy; +// this.fleetManager = vehicleFleetManager; +// } +// +// @Override +// public String toString() { +// return "[name=gendreau][iterations="+nOfIterations+"][share2ruin="+shareOfJobsToRuin+"]"; +// } +// +// public void setRandom(Random random) { +// this.random = random; +// } +// +// +// public void setNuOfIterations(int nOfIterations) { +// this.nOfIterations = nOfIterations; +// } +// +//// public void setFleetManager(VehicleFleetManager vehicleFleetManager) { +//// this.fleetManager = vehicleFleetManager; +//// +//// } +// +// @Override +// public VehicleRoutingProblemSolution runAndGetSolution(VehicleRoutingProblemSolution vrpSolution) { +//// log.info("run gendreau postopt"); +// VehicleRoutingProblemSolution bestSolution = vrpSolution; +// int itersWithoutImprovement = 0; +// +// for(int i=0;i copiedRoutes = copyRoutes(bestSolution.getRoutes()); +// iniFleet(copiedRoutes); +// +// VehicleRoute route2split = pickRouteThatHasAtLeastTwoJobs(copiedRoutes); +// if(route2split == null) continue; +// List jobsInRoute = getJobs(route2split); +// Set unassignedJobs = new HashSet(); +// unassignedJobs.addAll(jobsInRoute); +// copiedRoutes.remove(route2split); +// +// Collections.shuffle(jobsInRoute,random); +// Job targetJob = jobsInRoute.get(0); +// int nOfJobs2BeRemovedAdditionally = (int) (shareOfJobsToRuin*(double)vrp.getJobs().size()); +// Collection unassignedJobsList = ruin.ruin(copiedRoutes, targetJob, nOfJobs2BeRemovedAdditionally); +// unassignedJobs.addAll(unassignedJobsList); +// +// VehicleRoute emptyRoute1 = VehicleRoute.emptyRoute(); +// copiedRoutes.add(emptyRoute1); +// insertionStrategy.insertJobs(Arrays.asList(emptyRoute1), Arrays.asList(targetJob)); +// +// unassignedJobs.remove(targetJob); +// +// VehicleRoute emptyRoute2 = VehicleRoute.emptyRoute(); +// copiedRoutes.add(emptyRoute2); +// Job job2 = jobsInRoute.get(1); +// insertionStrategy.insertJobs(Arrays.asList(emptyRoute2), Arrays.asList(job2)); +// +// unassignedJobs.remove(job2); +// +// insertionStrategy.insertJobs(copiedRoutes, unassignedJobs); +// double cost = getCost(copiedRoutes); +// +// if(cost < bestSolution.getCost()){ +//// log.info("BING - new: " + cost + " old: " + bestSolution.getCost()); +// bestSolution = new VehicleRoutingProblemSolution(copiedRoutes, cost); +// itersWithoutImprovement=0; +// } +// else{ +// itersWithoutImprovement++; +// if(itersWithoutImprovement > 200){ +//// log.info("BREAK i="+i); +// break; +// } +// } +// } +// return bestSolution; +// } +// +// private List copyRoutes(Collection routes) { +// List routeList = new ArrayList(); +// for(VehicleRoute r : routes){ +// routeList.add(VehicleRoute.copyOf(r)); +// } +// return routeList; +// } +// +// private void iniFleet(Collection routes) { +// fleetManager.unlockAll(); +// for(VehicleRoute route : routes){ +// if(!route.isEmpty()){ +// fleetManager.lock(route.getVehicle()); +// } +// } +// } +// +// private double getCost(Collection routes) { +// double c = 0.0; +// for(VehicleRoute r : routes){ +// c+=r.getCost(); +// } +// return c; +// } +// +// private List getJobs(VehicleRoute route2split) { +// Set jobs = new HashSet(); +// for(TourActivity act : route2split.getTourActivities().getActivities()){ +// if(act instanceof JobActivity){ +// jobs.add(((JobActivity) act).getJob()); +// } +// } +// return new ArrayList(jobs); +// } +// +// private VehicleRoute pickRouteThatHasAtLeastTwoJobs(Collection routeList) { +// List routes = new ArrayList(); +// for(VehicleRoute r : routeList){ +// if(getJobs(r).size() > 1){ +// routes.add(r); +// } +// } +// if(routes.isEmpty()) return null; +// Collections.shuffle(routes,random); +// return routes.get(0); +// } +// +// @Override +// public String getName() { +// return NAME; +// } +// +// @Override +// public void addModuleListener(SearchStrategyModuleListener moduleListener) { +// if(moduleListener instanceof InsertionListener){ +// InsertionListener iListener = (InsertionListener) moduleListener; +// if(!insertionStrategy.getListeners().contains(iListener)){ +// insertionStrategy.addListener(iListener); +// } +// } +// if(moduleListener instanceof RuinListener){ +// RuinListener rListener = (RuinListener) moduleListener; +// if(!ruin.getListeners().contains(rListener)){ +// ruin.addListener(rListener); +// } +// } +// +// } +//} diff --git a/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java b/jsprit-core/src/main/java/jsprit/core/algorithm/module/RuinAndRecreateModule.java similarity index 78% rename from jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/module/RuinAndRecreateModule.java index 73c6f3a5..29f79a1e 100644 --- a/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/module/RuinAndRecreateModule.java @@ -14,18 +14,21 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.module; import java.util.Collection; -import algorithms.RuinStrategy.RuinListener; -import basics.Job; -import basics.VehicleRoutingProblemSolution; -import basics.algo.InsertionListener; -import basics.algo.SearchStrategyModule; -import basics.algo.SearchStrategyModuleListener; +import jsprit.core.algorithm.SearchStrategyModule; +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.algorithm.ruin.RuinStrategy; +import jsprit.core.algorithm.ruin.listener.RuinListener; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; -class RuinAndRecreateModule implements SearchStrategyModule{ + +public class RuinAndRecreateModule implements SearchStrategyModule{ private InsertionStrategy insertion; @@ -44,9 +47,8 @@ class RuinAndRecreateModule implements SearchStrategyModule{ public VehicleRoutingProblemSolution runAndGetSolution(VehicleRoutingProblemSolution vrpSolution) { Collection ruinedJobs = ruin.ruin(vrpSolution.getRoutes()); insertion.insertJobs(vrpSolution.getRoutes(), ruinedJobs); -// double totalCost = RouteUtils.getTotalCost(vrpSolution.getRoutes()); -// vrpSolution.setCost(totalCost); return vrpSolution; + } @Override diff --git a/jsprit-core/src/main/java/algorithms/ActivityInsertionCostsCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ActivityInsertionCostsCalculator.java similarity index 78% rename from jsprit-core/src/main/java/algorithms/ActivityInsertionCostsCalculator.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ActivityInsertionCostsCalculator.java index 4a72322b..681c9366 100644 --- a/jsprit-core/src/main/java/algorithms/ActivityInsertionCostsCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ActivityInsertionCostsCalculator.java @@ -18,13 +18,14 @@ * Contributors: * Stefan Schroeder - initial API and implementation ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; -import basics.route.TourActivity; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.TourActivity; -interface ActivityInsertionCostsCalculator { +public interface ActivityInsertionCostsCalculator { - class ActivityInsertionCosts { + public class ActivityInsertionCosts { private double additionalCosts; private double additionalTime; @@ -50,6 +51,6 @@ interface ActivityInsertionCostsCalculator { } - ActivityInsertionCosts calculate(InsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct); + public ActivityInsertionCosts getCosts(JobInsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct); } diff --git a/jsprit-core/src/main/java/algorithms/AuxilliaryCostCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/AuxilliaryCostCalculator.java similarity index 92% rename from jsprit-core/src/main/java/algorithms/AuxilliaryCostCalculator.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/AuxilliaryCostCalculator.java index bbb1f091..2ff04582 100644 --- a/jsprit-core/src/main/java/algorithms/AuxilliaryCostCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/AuxilliaryCostCalculator.java @@ -14,16 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.Iterator; import java.util.List; -import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.TourActivity; -import basics.route.Vehicle; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; + final class AuxilliaryCostCalculator { diff --git a/jsprit-core/src/main/java/algorithms/BestInsertion.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertion.java similarity index 72% rename from jsprit-core/src/main/java/algorithms/BestInsertion.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertion.java index ca3f8241..10cea48e 100644 --- a/jsprit-core/src/main/java/algorithms/BestInsertion.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertion.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.ArrayList; import java.util.Collection; @@ -22,15 +22,17 @@ import java.util.Collections; import java.util.List; import java.util.Random; +import jsprit.core.algorithm.recreate.InsertionData.NoInsertionFound; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.algorithm.recreate.listener.InsertionListeners; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.util.RandomNumberGeneration; + import org.apache.log4j.Logger; -import util.RandomNumberGeneration; -import algorithms.InsertionData.NoInsertionFound; -import basics.Job; -import basics.algo.InsertionListener; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleRoute; @@ -42,6 +44,28 @@ import basics.route.VehicleRoute; final class BestInsertion implements InsertionStrategy{ + class Insertion { + + private final VehicleRoute route; + + private final InsertionData insertionData; + + public Insertion(VehicleRoute vehicleRoute, InsertionData insertionData) { + super(); + this.route = vehicleRoute; + this.insertionData = insertionData; + } + + public VehicleRoute getRoute() { + return route; + } + + public InsertionData getInsertionData() { + return insertionData; + } + + } + private static Logger logger = Logger.getLogger(BestInsertion.class); private Random random = RandomNumberGeneration.getRandom(); @@ -56,7 +80,7 @@ final class BestInsertion implements InsertionStrategy{ private Inserter inserter; - private JobInsertionCalculator bestInsertionCostCalculator; + private JobInsertionCostsCalculator bestInsertionCostCalculator; private boolean minVehiclesFirst = false; @@ -64,7 +88,7 @@ final class BestInsertion implements InsertionStrategy{ this.random = random; } - public BestInsertion(JobInsertionCalculator jobInsertionCalculator) { + public BestInsertion(JobInsertionCostsCalculator jobInsertionCalculator) { super(); this.insertionsListeners = new InsertionListeners(); inserter = new Inserter(insertionsListeners); @@ -86,7 +110,7 @@ final class BestInsertion implements InsertionStrategy{ Insertion bestInsertion = null; double bestInsertionCost = Double.MAX_VALUE; for(VehicleRoute vehicleRoute : vehicleRoutes){ - InsertionData iData = bestInsertionCostCalculator.calculate(vehicleRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); + InsertionData iData = bestInsertionCostCalculator.getInsertionData(vehicleRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); if(iData instanceof NoInsertionFound) { continue; } @@ -97,7 +121,7 @@ final class BestInsertion implements InsertionStrategy{ } if(!minVehiclesFirst){ VehicleRoute newRoute = VehicleRoute.emptyRoute(); - InsertionData newIData = bestInsertionCostCalculator.calculate(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); + InsertionData newIData = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); if(newIData.getInsertionCost() < bestInsertionCost){ bestInsertion = new Insertion(newRoute,newIData); bestInsertionCost = newIData.getInsertionCost(); @@ -106,7 +130,7 @@ final class BestInsertion implements InsertionStrategy{ } if(bestInsertion == null){ VehicleRoute newRoute = VehicleRoute.emptyRoute(); - InsertionData bestI = bestInsertionCostCalculator.calculate(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, Double.MAX_VALUE); + InsertionData bestI = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, Double.MAX_VALUE); if(bestI instanceof InsertionData.NoInsertionFound){ throw new IllegalStateException(getErrorMsg(unassignedJob)); } @@ -115,9 +139,8 @@ final class BestInsertion implements InsertionStrategy{ vehicleRoutes.add(newRoute); } } - +// logger.info("insert " + unassignedJob + " pickup@" + bestInsertion.getInsertionData().getPickupInsertionIndex() + " delivery@" + bestInsertion.getInsertionData().getDeliveryInsertionIndex()); inserter.insertJob(unassignedJob, bestInsertion.getInsertionData(), bestInsertion.getRoute()); - } insertionsListeners.informInsertionEndsListeners(vehicleRoutes); } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionBuilder.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionBuilder.java new file mode 100644 index 00000000..5d115c69 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionBuilder.java @@ -0,0 +1,137 @@ +package jsprit.core.algorithm.recreate; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; + +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.vehicle.VehicleFleetManager; + + +public class BestInsertionBuilder { + + private VehicleRoutingProblem vrp; + + private StateManager stateManager; + + private boolean local = true; + + private ConstraintManager constraintManager; + + private VehicleFleetManager fleetManager; + + private double weightOfFixedCosts; + + private boolean considerFixedCosts = false; + + private ActivityInsertionCostsCalculator actInsertionCostsCalculator = null; + + private int forwaredLooking; + + private int memory; + + private ExecutorService executor; + + private int nuOfThreads; + + private double timeSlice; + + private int nNeighbors; + + private boolean timeScheduling=false; + + public BestInsertionBuilder(VehicleRoutingProblem vrp, VehicleFleetManager vehicleFleetManager, StateManager stateManager, ConstraintManager constraintManager) { + super(); + this.vrp = vrp; + this.stateManager = stateManager; + this.constraintManager = constraintManager; + this.fleetManager = vehicleFleetManager; + } + + public BestInsertionBuilder setRouteLevel(int forwardLooking, int memory){ + + local = false; + this.forwaredLooking = forwardLooking; + this.memory = memory; + return this; + }; + + public BestInsertionBuilder setLocalLevel(){ + local = true; + return this; + }; + + public BestInsertionBuilder considerFixedCosts(double weightOfFixedCosts){ + this.weightOfFixedCosts = weightOfFixedCosts; + this.considerFixedCosts = true; + return this; + } + + public BestInsertionBuilder setActivityInsertionCostCalculator(ActivityInsertionCostsCalculator activityInsertionCostsCalculator){ + this.actInsertionCostsCalculator = activityInsertionCostsCalculator; + return this; + }; + + public BestInsertionBuilder setConcurrentMode(ExecutorService executor, int nuOfThreads){ + this.executor = executor; + this.nuOfThreads = nuOfThreads; + return this; + } + + + public InsertionStrategy build() { + List iListeners = new ArrayList(); + List algorithmListeners = new ArrayList(); + CalculatorBuilder calcBuilder = new CalculatorBuilder(iListeners, algorithmListeners); + if(local){ + calcBuilder.setLocalLevel(); + } + else { + calcBuilder.setRouteLevel(forwaredLooking, memory); + } + calcBuilder.setConstraintManager(constraintManager); + calcBuilder.setStates(stateManager); + calcBuilder.setVehicleRoutingProblem(vrp); + calcBuilder.setVehicleFleetManager(fleetManager); + calcBuilder.setActivityInsertionCostsCalculator(actInsertionCostsCalculator); + if(considerFixedCosts) { + calcBuilder.considerFixedCosts(weightOfFixedCosts); + } + if(timeScheduling){ + calcBuilder.experimentalTimeScheduler(timeSlice, nNeighbors); + } + JobInsertionCostsCalculator jobInsertions = calcBuilder.build(); + InsertionStrategy bestInsertion; + if(executor == null){ + bestInsertion = new BestInsertion(jobInsertions); + + } + else{ + + bestInsertion = new BestInsertionConcurrent(jobInsertions,executor,nuOfThreads); + + } + for(InsertionListener l : iListeners) bestInsertion.addListener(l); + return bestInsertion; + } + + /** + * @deprecated this is experimental and can disappear. + * @param parseDouble + * @param parseInt + */ + @Deprecated + public void experimentalTimeScheduler(double timeSlice, int nNeighbors) { + this.timeSlice=timeSlice; + this.nNeighbors=nNeighbors; + timeScheduling=true; + } + + + + +} diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java new file mode 100644 index 00000000..1cbf0113 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/BestInsertionConcurrent.java @@ -0,0 +1,266 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm.recreate; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorCompletionService; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + +import jsprit.core.algorithm.recreate.InsertionData.NoInsertionFound; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.algorithm.recreate.listener.InsertionListeners; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.util.RandomNumberGeneration; + +import org.apache.log4j.Logger; + + + + +/** + * + * @author stefan schroeder + * + */ + +final class BestInsertionConcurrent implements InsertionStrategy{ + + static class Batch { + List routes = new ArrayList(); + + } + + class Insertion { + + private final VehicleRoute route; + + private final InsertionData insertionData; + + public Insertion(VehicleRoute vehicleRoute, InsertionData insertionData) { + super(); + this.route = vehicleRoute; + this.insertionData = insertionData; + } + + public VehicleRoute getRoute() { + return route; + } + + public InsertionData getInsertionData() { + return insertionData; + } + + } + + private static Logger logger = Logger.getLogger(BestInsertionConcurrent.class); + + private Random random = RandomNumberGeneration.getRandom(); + + private final static double NO_NEW_DEPARTURE_TIME_YET = -12345.12345; + + private final static Vehicle NO_NEW_VEHICLE_YET = null; + + private final static Driver NO_NEW_DRIVER_YET = null; + + private InsertionListeners insertionsListeners; + + private Inserter inserter; + + private JobInsertionCostsCalculator bestInsertionCostCalculator; + + private boolean minVehiclesFirst = false; + + private int nuOfBatches; + + private ExecutorService executor; + + private ExecutorCompletionService completionService; + + public void setRandom(Random random) { + this.random = random; + } + + public BestInsertionConcurrent(JobInsertionCostsCalculator jobInsertionCalculator, ExecutorService executorService, int nuOfBatches) { + super(); + this.insertionsListeners = new InsertionListeners(); + this.executor = executorService; + this.nuOfBatches = nuOfBatches; + inserter = new Inserter(insertionsListeners); + bestInsertionCostCalculator = jobInsertionCalculator; + completionService = new ExecutorCompletionService(executor); + logger.info("initialise " + this); + } + + @Override + public String toString() { + return "[name=bestInsertion]"; + } + + @Override + public void insertJobs(Collection vehicleRoutes, Collection unassignedJobs) { + insertionsListeners.informInsertionStarts(vehicleRoutes,unassignedJobs); + List unassignedJobList = new ArrayList(unassignedJobs); + Collections.shuffle(unassignedJobList, random); + + List batches = distributeRoutes(vehicleRoutes,nuOfBatches); + + for(final Job unassignedJob : unassignedJobList){ + + Insertion bestInsertion = null; + double bestInsertionCost = Double.MAX_VALUE; + + for(final Batch batch : batches){ + completionService.submit(new Callable() { + + @Override + public Insertion call() throws Exception { + return getBestInsertion(batch,unassignedJob); + } + + }); + + } + + try{ + for(int i=0;i futureIData = completionService.take(); + Insertion insertion = futureIData.get(); + if(insertion == null) continue; + if(insertion.getInsertionData().getInsertionCost() < bestInsertionCost){ + bestInsertion = insertion; + bestInsertionCost = insertion.getInsertionData().getInsertionCost(); + } + } + } + catch(InterruptedException e){ + Thread.currentThread().interrupt(); + } + catch (ExecutionException e) { + e.printStackTrace(); + logger.error(e.getCause().toString()); + System.exit(1); + } + + if(!minVehiclesFirst){ + VehicleRoute newRoute = VehicleRoute.emptyRoute(); + InsertionData newIData = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); + if(newIData.getInsertionCost() < bestInsertionCost){ + bestInsertion = new Insertion(newRoute,newIData); + bestInsertionCost = newIData.getInsertionCost(); + vehicleRoutes.add(newRoute); + batches.get(random.nextInt(batches.size())).routes.add(newRoute); + } + } + + if(bestInsertion == null){ + VehicleRoute newRoute = VehicleRoute.emptyRoute(); + InsertionData bestI = bestInsertionCostCalculator.getInsertionData(newRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, Double.MAX_VALUE); + if(bestI instanceof InsertionData.NoInsertionFound){ + throw new IllegalStateException(getErrorMsg(unassignedJob)); + } + else{ + bestInsertion = new Insertion(newRoute,bestI); + vehicleRoutes.add(newRoute); + } + } +// logger.info("insert " + unassignedJob + " pickup@" + bestInsertion.getInsertionData().getPickupInsertionIndex() + " delivery@" + bestInsertion.getInsertionData().getDeliveryInsertionIndex()); + inserter.insertJob(unassignedJob, bestInsertion.getInsertionData(), bestInsertion.getRoute()); + } + insertionsListeners.informInsertionEndsListeners(vehicleRoutes); + } + + private String getErrorMsg(Job unassignedJob) { + return "given the vehicles, could not insert job\n" + + "\t" + unassignedJob + + "\n\tthis might have the following reasons:\n" + + "\t- no vehicle has the capacity to transport the job [check whether there is at least one vehicle that is capable to transport the job]\n" + + "\t- the time-window cannot be met, even in a commuter tour the time-window is missed [check whether it is possible to reach the time-window on the shortest path or make hard time-windows soft]\n" + + "\t- if you deal with finite vehicles, and the available vehicles are already fully employed, no vehicle can be found anymore to transport the job [add penalty-vehicles]"; + } + + @Override + public void removeListener(InsertionListener insertionListener) { + insertionsListeners.removeListener(insertionListener); + } + + @Override + public Collection getListeners() { + return Collections.unmodifiableCollection(insertionsListeners.getListeners()); + } + + @Override + public void addListener(InsertionListener insertionListener) { + insertionsListeners.addListener(insertionListener); + + } + + private Insertion getBestInsertion(Batch batch, Job unassignedJob) { + Insertion bestInsertion = null; + double bestInsertionCost = Double.MAX_VALUE; + for(VehicleRoute vehicleRoute : batch.routes){ + InsertionData iData = bestInsertionCostCalculator.getInsertionData(vehicleRoute, unassignedJob, NO_NEW_VEHICLE_YET, NO_NEW_DEPARTURE_TIME_YET, NO_NEW_DRIVER_YET, bestInsertionCost); + if(iData instanceof NoInsertionFound) { + continue; + } + if(iData.getInsertionCost() < bestInsertionCost){ + bestInsertion = new Insertion(vehicleRoute,iData); + bestInsertionCost = iData.getInsertionCost(); + } + } + return bestInsertion; + } + + private List distributeRoutes(Collection vehicleRoutes, int nuOfBatches) { + List batches = new ArrayList(); + for(int i=0;i. ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.ArrayList; import java.util.List; import java.util.Random; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; + import org.apache.log4j.Logger; -import basics.Job; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleRoute; -/** - * This is experimental. It ignores vehicles' earliestStartTime. - * - * @author schroeder - * - */ -class CalculatesServiceInsertionWithTimeScheduling implements JobInsertionCalculator{ + +class CalculatesServiceInsertionWithTimeScheduling implements JobInsertionCostsCalculator{ + private static Logger log = Logger.getLogger(CalculatesServiceInsertionWithTimeScheduling.class); - private JobInsertionCalculator jic; + private JobInsertionCostsCalculator jic; private Random random = new Random(); @@ -45,7 +42,7 @@ class CalculatesServiceInsertionWithTimeScheduling implements JobInsertionCalcul private double timeSlice = 900.0; - public CalculatesServiceInsertionWithTimeScheduling(JobInsertionCalculator jic, double timeSlice, int neighbors) { + public CalculatesServiceInsertionWithTimeScheduling(JobInsertionCostsCalculator jic, double timeSlice, int neighbors) { super(); this.jic = jic; this.timeSlice = timeSlice; @@ -59,7 +56,7 @@ class CalculatesServiceInsertionWithTimeScheduling implements JobInsertionCalcul } @Override - public InsertionData calculate(VehicleRoute currentRoute, Job jobToInsert, Vehicle newVehicle, double newVehicleDepartureTime, Driver newDriver, double bestKnownScore) { + public InsertionData getInsertionData(VehicleRoute currentRoute, Job jobToInsert, Vehicle newVehicle, double newVehicleDepartureTime, Driver newDriver, double bestKnownScore) { List vehicleDepartureTimes = new ArrayList(); double currentStart; if(currentRoute.getStart() == null){ @@ -84,7 +81,7 @@ class CalculatesServiceInsertionWithTimeScheduling implements JobInsertionCalcul InsertionData bestIData = null; for(Double departureTime : vehicleDepartureTimes){ - InsertionData iData = jic.calculate(currentRoute, jobToInsert, newVehicle, departureTime, newDriver, bestKnownScore); + InsertionData iData = jic.getInsertionData(currentRoute, jobToInsert, newVehicle, departureTime, newDriver, bestKnownScore); if(bestIData == null) bestIData = iData; else if(iData.getInsertionCost() < bestIData.getInsertionCost()){ iData.setVehicleDepartureTime(departureTime); diff --git a/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/CalculatorBuilder.java similarity index 60% rename from jsprit-core/src/main/java/algorithms/CalculatorBuilder.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/CalculatorBuilder.java index 53d8d73f..f078a338 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/CalculatorBuilder.java @@ -14,15 +14,23 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.ArrayList; import java.util.List; -import algorithms.HardConstraints.ConstraintManager; -import basics.VehicleRoutingProblem; -import basics.algo.InsertionListener; -import basics.algo.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.vehicle.VehicleFleetManager; + @@ -30,16 +38,16 @@ class CalculatorBuilder { private static class CalculatorPlusListeners { - private JobInsertionCalculator calculator; + private JobInsertionCostsCalculator calculator; - public JobInsertionCalculator getCalculator() { + public JobInsertionCostsCalculator getCalculator() { return calculator; } private List algorithmListener = new ArrayList(); private List insertionListener = new ArrayList(); - public CalculatorPlusListeners(JobInsertionCalculator calculator) { + public CalculatorPlusListeners(JobInsertionCostsCalculator calculator) { super(); this.calculator = calculator; } @@ -59,7 +67,7 @@ class CalculatorBuilder { private VehicleRoutingProblem vrp; - private StateManager states; + private RouteAndActivityStateGetter states; private boolean local = true; @@ -80,6 +88,8 @@ class CalculatorBuilder { private int neighbors; private ConstraintManager constraintManager; + + private ActivityInsertionCostsCalculator activityInsertionCostCalculator = null; /** * Constructs the builder. @@ -102,7 +112,7 @@ class CalculatorBuilder { * * @return */ - public CalculatorBuilder setStates(StateManager states){ + public CalculatorBuilder setStates(RouteAndActivityStateGetter states){ this.states = states; return this; } @@ -137,6 +147,10 @@ class CalculatorBuilder { public void setLocalLevel(){ local = true; } + + public void setActivityInsertionCostsCalculator(ActivityInsertionCostsCalculator activityInsertionCostsCalculator){ + this.activityInsertionCostCalculator = activityInsertionCostsCalculator; + } /** * Sets a flag to build a calculator that evaluates job insertion on route-level. @@ -173,16 +187,17 @@ class CalculatorBuilder { * @return jobInsertionCalculator. * @throws IllegalStateException if vrp == null or activityStates == null or fleetManager == null. */ - public JobInsertionCalculator build(){ + public JobInsertionCostsCalculator build(){ if(vrp == null) throw new IllegalStateException("vehicle-routing-problem is null, but it must be set (this.setVehicleRoutingProblem(vrp))"); if(states == null) throw new IllegalStateException("states is null, but is must be set (this.setStates(states))"); if(fleetManager == null) throw new IllegalStateException("fleetManager is null, but it must be set (this.setVehicleFleetManager(fleetManager))"); - JobInsertionCalculator baseCalculator = null; + JobInsertionCostsCalculator baseCalculator = null; CalculatorPlusListeners standardLocal = null; if(local){ standardLocal = createStandardLocal(vrp, states); } else{ + checkServicesOnly(); standardLocal = createStandardRoute(vrp, states,forwardLooking,memory); } baseCalculator = standardLocal.getCalculator(); @@ -200,6 +215,17 @@ class CalculatorBuilder { return createFinalInsertion(fleetManager, baseCalculator, states); } + private void checkServicesOnly() { + for(Job j : vrp.getJobs().values()){ + if(j instanceof Shipment){ + throw new UnsupportedOperationException("currently the 'insert-on-route-level' option is only available for services (i.e. service, pickup, delivery), \n" + + "if you want to deal with shipments switch to option 'local-level' by either setting bestInsertionBuilder.setLocalLevel() or \n" + + "by omitting the xml-tag 'route' when defining your insertionStrategy in algo-config.xml file"); + } + } + + } + private void addInsertionListeners(List list) { for(InsertionListener iL : list){ insertionListeners.add(iL); @@ -212,40 +238,62 @@ class CalculatorBuilder { } } - private CalculatorPlusListeners createStandardLocal(VehicleRoutingProblem vrp, StateManager statesManager){ + private CalculatorPlusListeners createStandardLocal(VehicleRoutingProblem vrp, RouteAndActivityStateGetter statesManager){ if(constraintManager == null) throw new IllegalStateException("constraint-manager is null"); - ActivityInsertionCostsCalculator defaultCalc = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager); - JobInsertionCalculator standardServiceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), defaultCalc, constraintManager); + + ActivityInsertionCostsCalculator actInsertionCalc; + if(activityInsertionCostCalculator == null){ + actInsertionCalc = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts()); + } + else{ + actInsertionCalc = activityInsertionCostCalculator; + } + + ShipmentInsertionCalculator shipmentInsertion = new ShipmentInsertionCalculator(vrp.getTransportCosts(), actInsertionCalc, constraintManager, constraintManager); + ServiceInsertionCalculator serviceInsertion = new ServiceInsertionCalculator(vrp.getTransportCosts(), actInsertionCalc, constraintManager, constraintManager); - ((CalculatesServiceInsertion) standardServiceInsertion).setNeighborhood(vrp.getNeighborhood()); - CalculatorPlusListeners calcPlusListeners = new CalculatorPlusListeners(standardServiceInsertion); + JobCalculatorSwitcher switcher = new JobCalculatorSwitcher(); + switcher.put(Shipment.class, shipmentInsertion); + switcher.put(Service.class, serviceInsertion); + switcher.put(Pickup.class, serviceInsertion); + switcher.put(Delivery.class, serviceInsertion); + +// JobInsertionCostsCalculator standardServiceInsertion = new ServiceInsertionCalculator(vrp.getTransportCosts(), actInsertionCalc, constraintManager, constraintManager); +// ((ServiceInsertionCalculator) standardServiceInsertion).setNeighborhood(vrp.getNeighborhood()); + CalculatorPlusListeners calcPlusListeners = new CalculatorPlusListeners(switcher); return calcPlusListeners; } - private CalculatorPlusListeners createCalculatorConsideringFixedCosts(VehicleRoutingProblem vrp, JobInsertionCalculator baseCalculator, StateManager activityStates2, double weightOfFixedCosts){ - final CalculatesServiceInsertionConsideringFixCost withFixCost = new CalculatesServiceInsertionConsideringFixCost(baseCalculator, activityStates2); + private CalculatorPlusListeners createCalculatorConsideringFixedCosts(VehicleRoutingProblem vrp, JobInsertionCostsCalculator baseCalculator, RouteAndActivityStateGetter activityStates2, double weightOfFixedCosts){ + final JobInsertionConsideringFixCostsCalculator withFixCost = new JobInsertionConsideringFixCostsCalculator(baseCalculator, activityStates2); withFixCost.setWeightOfFixCost(weightOfFixedCosts); CalculatorPlusListeners calcPlusListeners = new CalculatorPlusListeners(withFixCost); calcPlusListeners.getInsertionListener().add(new ConfigureFixCostCalculator(vrp, withFixCost)); return calcPlusListeners; } - private CalculatorPlusListeners createStandardRoute(VehicleRoutingProblem vrp, StateManager activityStates2, int forwardLooking, int solutionMemory){ + private CalculatorPlusListeners createStandardRoute(VehicleRoutingProblem vrp, RouteAndActivityStateGetter activityStates2, int forwardLooking, int solutionMemory){ int after = forwardLooking; - ActivityInsertionCostsCalculator routeLevelCostEstimator = new RouteLevelActivityInsertionCostsEstimator(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager, activityStates2); - JobInsertionCalculator jobInsertionCalculator = new CalculatesServiceInsertionOnRouteLevel(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager, routeLevelCostEstimator); - ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setNuOfActsForwardLooking(after); - ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setMemorySize(solutionMemory); - ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setNeighborhood(vrp.getNeighborhood()); - ((CalculatesServiceInsertionOnRouteLevel) jobInsertionCalculator).setStates(activityStates2); + ActivityInsertionCostsCalculator routeLevelCostEstimator; + if(activityInsertionCostCalculator == null){ + routeLevelCostEstimator = new RouteLevelActivityInsertionCostsEstimator(vrp.getTransportCosts(), vrp.getActivityCosts(), activityStates2); + } + else{ + routeLevelCostEstimator = activityInsertionCostCalculator; + } + JobInsertionCostsCalculator jobInsertionCalculator = new ServiceInsertionOnRouteLevelCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), routeLevelCostEstimator, constraintManager, constraintManager); + ((ServiceInsertionOnRouteLevelCalculator)jobInsertionCalculator).setNuOfActsForwardLooking(after); + ((ServiceInsertionOnRouteLevelCalculator)jobInsertionCalculator).setMemorySize(solutionMemory); + ((ServiceInsertionOnRouteLevelCalculator)jobInsertionCalculator).setNeighborhood(vrp.getNeighborhood()); + ((ServiceInsertionOnRouteLevelCalculator) jobInsertionCalculator).setStates(activityStates2); CalculatorPlusListeners calcPlusListener = new CalculatorPlusListeners(jobInsertionCalculator); return calcPlusListener; } - private JobInsertionCalculator createFinalInsertion(VehicleFleetManager fleetManager, JobInsertionCalculator baseCalc, StateManager activityStates2){ - return new CalculatesVehTypeDepServiceInsertion(fleetManager, baseCalc); + private JobInsertionCostsCalculator createFinalInsertion(VehicleFleetManager fleetManager, JobInsertionCostsCalculator baseCalc, RouteAndActivityStateGetter activityStates2){ + return new VehicleTypeDependentJobInsertionCalculator(fleetManager, baseCalc); } public void setConstraintManager(ConstraintManager constraintManager) { diff --git a/jsprit-core/src/main/java/algorithms/ConfigureFixCostCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ConfigureFixCostCalculator.java similarity index 80% rename from jsprit-core/src/main/java/algorithms/ConfigureFixCostCalculator.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ConfigureFixCostCalculator.java index 80b06a15..c0d3316a 100644 --- a/jsprit-core/src/main/java/algorithms/ConfigureFixCostCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ConfigureFixCostCalculator.java @@ -14,18 +14,19 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.Collection; +import jsprit.core.algorithm.recreate.listener.InsertionStartsListener; +import jsprit.core.algorithm.recreate.listener.JobInsertedListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; + import org.apache.log4j.Logger; -import basics.Job; -import basics.VehicleRoutingProblem; -import basics.algo.InsertionStartsListener; -import basics.algo.JobInsertedListener; -import basics.route.VehicleRoute; @@ -37,11 +38,11 @@ final class ConfigureFixCostCalculator implements InsertionStartsListener, JobIn VehicleRoutingProblem vrp; - CalculatesServiceInsertionConsideringFixCost calcConsideringFix; + JobInsertionConsideringFixCostsCalculator calcConsideringFix; private int nuOfJobsToRecreate; - public ConfigureFixCostCalculator(VehicleRoutingProblem vrp, CalculatesServiceInsertionConsideringFixCost calcConsideringFix) { + public ConfigureFixCostCalculator(VehicleRoutingProblem vrp, JobInsertionConsideringFixCostsCalculator calcConsideringFix) { super(); this.vrp = vrp; this.calcConsideringFix = calcConsideringFix; diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/Inserter.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/Inserter.java new file mode 100644 index 00000000..6e73e670 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/Inserter.java @@ -0,0 +1,122 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm.recreate; + +import jsprit.core.algorithm.recreate.InsertionData.NoInsertionFound; +import jsprit.core.algorithm.recreate.listener.InsertionListeners; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.DefaultShipmentActivityFactory; +import jsprit.core.problem.solution.route.activity.DefaultTourActivityFactory; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourActivityFactory; +import jsprit.core.problem.solution.route.activity.TourShipmentActivityFactory; + +class Inserter { + + interface JobInsertionHandler { + void handleJobInsertion(Job job, InsertionData iData, VehicleRoute route); + + void setNextHandler(JobInsertionHandler handler); + } + + class JobExceptionHandler implements JobInsertionHandler{ + + @Override + public void handleJobInsertion(Job job, InsertionData iData,VehicleRoute route) { + throw new IllegalStateException("job insertion is not supported. Do not know job type."); + } + + @Override + public void setNextHandler(JobInsertionHandler handler) { + // TODO Auto-generated method stub + + } + + } + + class ServiceInsertionHandler implements JobInsertionHandler{ + + private TourActivityFactory activityFactory = new DefaultTourActivityFactory(); + + private JobInsertionHandler delegator = new JobExceptionHandler(); + + @Override + public void handleJobInsertion(Job job, InsertionData iData, VehicleRoute route) { + if(job instanceof Service){ + route.getTourActivities().addActivity(iData.getDeliveryInsertionIndex(), this.activityFactory.createActivity((Service)job)); + route.setDepartureTime(iData.getVehicleDepartureTime()); + } + else delegator.handleJobInsertion(job, iData, route); + } + + public void setNextHandler(JobInsertionHandler jobInsertionHandler){ + this.delegator = jobInsertionHandler; + } + + } + + class ShipmentInsertionHandler implements JobInsertionHandler { + + private TourShipmentActivityFactory activityFactory = new DefaultShipmentActivityFactory(); + + private JobInsertionHandler delegator = new JobExceptionHandler(); + + @Override + public void handleJobInsertion(Job job, InsertionData iData, VehicleRoute route) { + if(job instanceof Shipment){ + TourActivity pickupShipment = this.activityFactory.createPickup((Shipment)job); + TourActivity deliverShipment = this.activityFactory.createDelivery((Shipment)job); + route.getTourActivities().addActivity(iData.getDeliveryInsertionIndex(), deliverShipment); + route.getTourActivities().addActivity(iData.getPickupInsertionIndex(), pickupShipment); + route.setDepartureTime(iData.getVehicleDepartureTime()); + } + else delegator.handleJobInsertion(job, iData, route); + } + + public void setNextHandler(JobInsertionHandler jobInsertionHandler){ + this.delegator = jobInsertionHandler; + } + + } + + private InsertionListeners insertionListeners; + + private JobInsertionHandler jobInsertionHandler; + + public Inserter(InsertionListeners insertionListeners) { + this.insertionListeners = insertionListeners; + new DefaultTourActivityFactory(); + jobInsertionHandler = new ServiceInsertionHandler(); + jobInsertionHandler.setNextHandler(new ShipmentInsertionHandler()); + } + + public void insertJob(Job job, InsertionData insertionData, VehicleRoute vehicleRoute){ + insertionListeners.informBeforeJobInsertion(job, insertionData, vehicleRoute); + + if(insertionData == null || (insertionData instanceof NoInsertionFound)) throw new IllegalStateException("insertionData null. cannot insert job."); + if(job == null) throw new IllegalStateException("cannot insert null-job"); + if(!(vehicleRoute.getVehicle().getId().toString().equals(insertionData.getSelectedVehicle().getId().toString()))){ + insertionListeners.informVehicleSwitched(vehicleRoute, vehicleRoute.getVehicle(), insertionData.getSelectedVehicle()); + vehicleRoute.setVehicle(insertionData.getSelectedVehicle(), insertionData.getVehicleDepartureTime()); + } + jobInsertionHandler.handleJobInsertion(job, insertionData, vehicleRoute); + insertionListeners.informJobInserted(job, vehicleRoute, insertionData.getInsertionCost(), insertionData.getAdditionalTime()); + } +} diff --git a/jsprit-core/src/main/java/algorithms/InsertionData.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionData.java similarity index 68% rename from jsprit-core/src/main/java/algorithms/InsertionData.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionData.java index c06be526..147eb80c 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionData.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionData.java @@ -14,14 +14,19 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; -import basics.route.Driver; -import basics.route.Vehicle; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; - - -class InsertionData { +/** + * Data object that collects insertion information. It collects insertionCosts, insertionIndeces, vehicle and driver to be employed + * and departureTime of vehicle at vehicle's start location (e.g. depot). + * + * @author stefan + * + */ +public class InsertionData { static class NoInsertionFound extends InsertionData{ @@ -33,7 +38,15 @@ class InsertionData { private static InsertionData noInsertion = new NoInsertionFound(); - public static InsertionData noInsertionFound(){ + /** + * Returns an instance of InsertionData that represents an EmptyInsertionData (which might indicate + * that no insertion has been found). It is internally instantiated as follows:
+ * new InsertionData(Double.MAX_VALUE, NO_INDEX, NO_INDEX, null, null);
+ * where NO_INDEX=-1. + * + * @return + */ + public static InsertionData createEmptyInsertionData(){ return noInsertion; } @@ -80,22 +93,47 @@ class InsertionData { return "[iCost="+insertionCost+"][iIndex="+deliveryInsertionIndex+"][depTime="+departureTime+"][vehicle="+selectedVehicle+"][driver="+selectedDriver+"]"; } + /** + * Returns insertionIndex of deliveryActivity. If no insertionPosition is found, it returns NO_INDEX (=-1). + * + * @return + */ public int getDeliveryInsertionIndex(){ return deliveryInsertionIndex; } + /** + * Returns insertionIndex of pickkupActivity. If no insertionPosition is found, it returns NO_INDEX (=-1). + * + * @return + */ public int getPickupInsertionIndex(){ return pickupInsertionIndex; } + /** + * Returns insertion costs (which might be the additional costs of inserting the corresponding job). + * + * @return + */ public double getInsertionCost() { return insertionCost; } + /** + * Returns the vehicle to be employed. + * + * @return + */ public Vehicle getSelectedVehicle() { return selectedVehicle; } + /** + * Returns the vehicle to be employed. + * + * @return + */ public Driver getSelectedDriver(){ return selectedDriver; } diff --git a/jsprit-core/src/main/java/algorithms/InsertionStrategy.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionStrategy.java similarity index 71% rename from jsprit-core/src/main/java/algorithms/InsertionStrategy.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionStrategy.java index 239e1c61..b7f77521 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionStrategy.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionStrategy.java @@ -14,13 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.Collection; -import basics.Job; -import basics.algo.InsertionListener; -import basics.route.VehicleRoute; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; + @@ -31,33 +32,7 @@ import basics.route.VehicleRoute; * */ -interface InsertionStrategy { - - class Insertion { - - private final VehicleRoute route; - - private final InsertionData insertionData; - - public Insertion(VehicleRoute vehicleRoute, InsertionData insertionData) { - super(); - this.route = vehicleRoute; - this.insertionData = insertionData; - } - - public VehicleRoute getRoute() { - return route; - } - - public InsertionData getInsertionData() { - return insertionData; - } - - } - - - - +public interface InsertionStrategy { /** * Assigns the unassigned jobs to service-providers diff --git a/jsprit-core/src/main/java/algorithms/InsertionStrategyFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionStrategyFactory.java similarity index 87% rename from jsprit-core/src/main/java/algorithms/InsertionStrategyFactory.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionStrategyFactory.java index a08f8b79..8c36e9a0 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionStrategyFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/InsertionStrategyFactory.java @@ -14,11 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; -import basics.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem; -interface InsertionStrategyFactory { +public interface InsertionStrategyFactory { public InsertionStrategy createStrategy(VehicleRoutingProblem vrp); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobCalculatorSwitcher.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobCalculatorSwitcher.java new file mode 100644 index 00000000..a4858749 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobCalculatorSwitcher.java @@ -0,0 +1,26 @@ +package jsprit.core.algorithm.recreate; + +import java.util.HashMap; +import java.util.Map; + +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; + + +class JobCalculatorSwitcher implements JobInsertionCostsCalculator{ + + private Map,JobInsertionCostsCalculator> calcMap = new HashMap, JobInsertionCostsCalculator>(); + + void put(Class jobClass, JobInsertionCostsCalculator jic){ + calcMap.put(jobClass, jic); + } + + public InsertionData getInsertionData(VehicleRoute currentRoute, Job jobToInsert, Vehicle newVehicle, double newVehicleDepartureTime, Driver newDriver, double bestKnownScore){ + JobInsertionCostsCalculator jic = calcMap.get(jobToInsert.getClass()); + if(jic==null) throw new IllegalStateException("cannot find calculator for " + jobToInsert.getClass()); + return jic.getInsertionData(currentRoute, jobToInsert, newVehicle, newVehicleDepartureTime, newDriver, bestKnownScore); + } + +} diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionConsideringFixCost.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobInsertionConsideringFixCostsCalculator.java similarity index 67% rename from jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionConsideringFixCost.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobInsertionConsideringFixCostsCalculator.java index 68fe3a66..5537649e 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionConsideringFixCost.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobInsertionConsideringFixCostsCalculator.java @@ -14,48 +14,51 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; + +import jsprit.core.algorithm.recreate.InsertionData.NoInsertionFound; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; import org.apache.log4j.Logger; -import algorithms.InsertionData.NoInsertionFound; -import basics.Job; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleImpl.NoVehicle; -import basics.route.VehicleRoute; -final class CalculatesServiceInsertionConsideringFixCost implements JobInsertionCalculator{ +final class JobInsertionConsideringFixCostsCalculator implements JobInsertionCostsCalculator{ - private static final Logger logger = Logger.getLogger(CalculatesServiceInsertionConsideringFixCost.class); + private static final Logger logger = Logger.getLogger(JobInsertionConsideringFixCostsCalculator.class); - private final JobInsertionCalculator standardServiceInsertion; + private final JobInsertionCostsCalculator standardServiceInsertion; private double weight_deltaFixCost = 0.5; private double solution_completeness_ratio = 0.5; - private StateManager states; + private RouteAndActivityStateGetter stateGetter; - public CalculatesServiceInsertionConsideringFixCost(final JobInsertionCalculator standardInsertionCalculator, StateManager activityStates2) { + public JobInsertionConsideringFixCostsCalculator(final JobInsertionCostsCalculator standardInsertionCalculator, RouteAndActivityStateGetter stateGetter) { super(); this.standardServiceInsertion = standardInsertionCalculator; - this.states = activityStates2; + this.stateGetter = stateGetter; logger.info("inialise " + this); } @Override - public InsertionData calculate(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle newVehicle, double newVehicleDepartureTime, final Driver newDriver, final double bestKnownPrice) { + public InsertionData getInsertionData(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle newVehicle, double newVehicleDepartureTime, final Driver newDriver, final double bestKnownPrice) { double relFixCost = getDeltaRelativeFixCost(currentRoute, newVehicle, jobToInsert); double absFixCost = getDeltaAbsoluteFixCost(currentRoute, newVehicle, jobToInsert); double deltaFixCost = (1-solution_completeness_ratio)*relFixCost + solution_completeness_ratio*absFixCost; double fixcost_contribution = weight_deltaFixCost*solution_completeness_ratio*deltaFixCost; if(fixcost_contribution > bestKnownPrice){ - return InsertionData.noInsertionFound(); + return InsertionData.createEmptyInsertionData(); } - InsertionData iData = standardServiceInsertion.calculate(currentRoute, jobToInsert, newVehicle, newVehicleDepartureTime, newDriver, bestKnownPrice); + InsertionData iData = standardServiceInsertion.getInsertionData(currentRoute, jobToInsert, newVehicle, newVehicleDepartureTime, newDriver, bestKnownPrice); if(iData instanceof NoInsertionFound){ return iData; } @@ -80,7 +83,7 @@ final class CalculatesServiceInsertionConsideringFixCost implements JobInsertion } private double getDeltaAbsoluteFixCost(VehicleRoute route, Vehicle newVehicle, Job job) { - double load = getCurrentLoad(route) + job.getCapacityDemand(); + double load = getCurrentMaxLoadInRoute(route) + job.getCapacityDemand(); double currentFix = 0.0; if(route.getVehicle() != null){ if(!(route.getVehicle() instanceof NoVehicle)){ @@ -94,7 +97,7 @@ final class CalculatesServiceInsertionConsideringFixCost implements JobInsertion } private double getDeltaRelativeFixCost(VehicleRoute route, Vehicle newVehicle, Job job) { - int currentLoad = getCurrentLoad(route); + int currentLoad = getCurrentMaxLoadInRoute(route); double load = currentLoad + job.getCapacityDemand(); double currentRelFix = 0.0; if(route.getVehicle() != null){ @@ -109,8 +112,8 @@ final class CalculatesServiceInsertionConsideringFixCost implements JobInsertion return relativeFixCost; } - private int getCurrentLoad(VehicleRoute route) { - return (int) states.getRouteState(route, StateTypes.LOAD).toDouble(); + private int getCurrentMaxLoadInRoute(VehicleRoute route) { + return (int) stateGetter.getRouteState(route, StateFactory.MAXLOAD).toDouble(); } } diff --git a/jsprit-core/src/test/java/basics/io/ReaderTest.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobInsertionCostsCalculator.java similarity index 66% rename from jsprit-core/src/test/java/basics/io/ReaderTest.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobInsertionCostsCalculator.java index b659816b..3d5599ac 100644 --- a/jsprit-core/src/test/java/basics/io/ReaderTest.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/JobInsertionCostsCalculator.java @@ -14,22 +14,16 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.algorithm.recreate; -import java.util.ArrayList; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; -import org.junit.Test; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; - -public class ReaderTest { + public interface JobInsertionCostsCalculator { - - @Test - public void testRead_ifReaderIsCalled_itReadsSuccessfully(){ - new VrpXMLReader(VehicleRoutingProblem.Builder.newInstance(), new ArrayList()).read("src/test/resources/lui-shen-solution.xml"); - - } + public InsertionData getInsertionData(VehicleRoute currentRoute, Job newJob, Vehicle newVehicle, double newVehicleDepartureTime, Driver newDriver, double bestKnownCosts); } diff --git a/jsprit-core/src/main/java/algorithms/LocalActivityInsertionCostsCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java similarity index 69% rename from jsprit-core/src/main/java/algorithms/LocalActivityInsertionCostsCalculator.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java index d96455d1..92dacfb9 100644 --- a/jsprit-core/src/main/java/algorithms/LocalActivityInsertionCostsCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/LocalActivityInsertionCostsCalculator.java @@ -18,39 +18,46 @@ * Contributors: * Stefan Schroeder - initial API and implementation ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; -import algorithms.HardConstraints.HardActivityLevelConstraint; -import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.TourActivity; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.util.CalculationUtils; +/** + * Calculates activity insertion costs locally, i.e. by comparing the additional costs of insertion the new activity k between + * activity i (prevAct) and j (nextAct). + * Additional costs are then basically calculated as delta c = c_ik + c_kj - c_ij. + * + *

Note once time has an effect on costs this class requires activity endTimes. + * + * @author stefan + * + */ class LocalActivityInsertionCostsCalculator implements ActivityInsertionCostsCalculator{ - private HardActivityLevelConstraint hardConstraint; - private VehicleRoutingTransportCosts routingCosts; + private VehicleRoutingActivityCosts activityCosts; - public LocalActivityInsertionCostsCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint) { + + public LocalActivityInsertionCostsCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts) { super(); this.routingCosts = routingCosts; this.activityCosts = actCosts; - this.hardConstraint = hardActivityLevelConstraint; } @Override - public ActivityInsertionCosts calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { - if(!hardConstraint.fulfilled(iFacts, prevAct, newAct, nextAct, depTimeAtPrevAct)){ - return null; - } + public ActivityInsertionCosts getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { double tp_costs_prevAct_newAct = routingCosts.getTransportCost(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct; - double newAct_endTime = CalcUtils.getActivityEndTime(newAct_arrTime, newAct); + double newAct_endTime = CalculationUtils.getActivityEndTime(newAct_arrTime, newAct); double act_costs_newAct = activityCosts.getActivityCost(newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); @@ -66,8 +73,12 @@ class LocalActivityInsertionCostsCalculator implements ActivityInsertionCostsCal double oldCosts; double oldTime; if(iFacts.getRoute().isEmpty()){ - oldCosts = 0.0; - oldTime = 0.0; + double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocationId(), nextAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); + double arrTime_nextAct = routingCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); + + double actCost_nextAct = activityCosts.getActivityCost(nextAct, arrTime_nextAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); + oldCosts = tp_costs_prevAct_nextAct + actCost_nextAct; + oldTime = (nextAct.getArrTime() - depTimeAtPrevAct); } else{ double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocationId(), nextAct.getLocationId(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); diff --git a/jsprit-core/src/main/java/algorithms/ParRegretInsertion.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ParRegretInsertion.java similarity index 99% rename from jsprit-core/src/main/java/algorithms/ParRegretInsertion.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ParRegretInsertion.java index 2bcaf045..9d7fcafd 100644 --- a/jsprit-core/src/main/java/algorithms/ParRegretInsertion.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ParRegretInsertion.java @@ -1,3 +1,4 @@ +package jsprit.core.algorithm.recreate; /******************************************************************************* * Copyright (C) 2013 Stefan Schroeder * diff --git a/jsprit-core/src/main/java/algorithms/RegretInsertion.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java similarity index 99% rename from jsprit-core/src/main/java/algorithms/RegretInsertion.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java index 300e6a6b..cbac3d07 100644 --- a/jsprit-core/src/main/java/algorithms/RegretInsertion.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RegretInsertion.java @@ -1,3 +1,4 @@ +package jsprit.core.algorithm.recreate; /******************************************************************************* * Copyright (C) 2013 Stefan Schroeder * diff --git a/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java similarity index 75% rename from jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java index 2daa5e63..b846979e 100644 --- a/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/RouteLevelActivityInsertionCostsEstimator.java @@ -18,45 +18,41 @@ * Contributors: * Stefan Schroeder - initial API and implementation ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.ArrayList; import java.util.List; -import algorithms.HardConstraints.HardActivityLevelConstraint; -import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.End; -import basics.route.Start; -import basics.route.TourActivity; -import basics.route.VehicleRoute; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.End; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; + class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCostsCalculator{ - private HardActivityLevelConstraint hardConstraint; - private VehicleRoutingActivityCosts activityCosts; private AuxilliaryCostCalculator auxilliaryPathCostCalculator; - private StateManager stateManager; + private RouteAndActivityStateGetter stateManager; private int nuOfActivities2LookForward = 0; - public RouteLevelActivityInsertionCostsEstimator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint, StateManager stateManager) { + public RouteLevelActivityInsertionCostsEstimator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, RouteAndActivityStateGetter stateManager) { super(); this.activityCosts = actCosts; - this.hardConstraint = hardActivityLevelConstraint; this.stateManager = stateManager; auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(routingCosts, activityCosts); } @Override - public ActivityInsertionCosts calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { - if(!hardConstraint.fulfilled(iFacts, prevAct, newAct, nextAct, depTimeAtPrevAct)){ - return null; - } - + public ActivityInsertionCosts getCosts(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { List path = new ArrayList(); path.add(prevAct); path.add(newAct); path.add(nextAct); int actIndex; @@ -77,9 +73,9 @@ class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCost private double actCostsOld(VehicleRoute vehicleRoute, TourActivity act) { if(act instanceof End){ - return stateManager.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(); + return stateManager.getRouteState(vehicleRoute,StateFactory.COSTS).toDouble(); } - return stateManager.getActivityState(act,StateTypes.COSTS).toDouble(); + return stateManager.getActivityState(act,StateFactory.COSTS).toDouble(); } private List getForwardLookingPath(VehicleRoute route, int actIndex) { diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java similarity index 52% rename from jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java index e3042b28..1a1ead9c 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionCalculator.java @@ -14,33 +14,40 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; + +import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator.ActivityInsertionCosts; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint.ConstraintsStatus; +import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.DefaultTourActivityFactory; +import jsprit.core.problem.solution.route.activity.End; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourActivityFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; +import jsprit.core.util.CalculationUtils; +import jsprit.core.util.Neighborhood; import org.apache.log4j.Logger; -import util.Neighborhood; -import algorithms.ActivityInsertionCostsCalculator.ActivityInsertionCosts; -import algorithms.HardConstraints.HardRouteLevelConstraint; -import basics.Job; -import basics.Service; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.DefaultTourActivityFactory; -import basics.route.Driver; -import basics.route.End; -import basics.route.Start; -import basics.route.TourActivity; -import basics.route.TourActivityFactory; -import basics.route.Vehicle; -import basics.route.VehicleImpl.NoVehicle; -import basics.route.VehicleRoute; -final class CalculatesServiceInsertion implements JobInsertionCalculator{ +final class ServiceInsertionCalculator implements JobInsertionCostsCalculator{ - private static final Logger logger = Logger.getLogger(CalculatesServiceInsertion.class); + private static final Logger logger = Logger.getLogger(ServiceInsertionCalculator.class); - private HardRouteLevelConstraint hardRouteLevelConstraint; + private HardRouteStateLevelConstraint hardRouteLevelConstraint; + + private HardActivityStateLevelConstraint hardActivityLevelConstraint; private Neighborhood neighborhood = new Neighborhood() { @@ -61,10 +68,12 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ logger.info("initialise neighborhood " + neighborhood); } - public CalculatesServiceInsertion(VehicleRoutingTransportCosts routingCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, HardRouteLevelConstraint hardRouteLevelConstraint) { + + public ServiceInsertionCalculator(VehicleRoutingTransportCosts routingCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, HardRouteStateLevelConstraint hardRouteLevelConstraint, HardActivityStateLevelConstraint hardActivityLevelConstraint) { super(); this.activityInsertionCostsCalculator = activityInsertionCostsCalculator; this.hardRouteLevelConstraint = hardRouteLevelConstraint; + this.hardActivityLevelConstraint = hardActivityLevelConstraint; this.transportCosts = routingCosts; activityFactory = new DefaultTourActivityFactory(); logger.info("initialise " + this); @@ -81,13 +90,13 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ * */ @Override - public InsertionData calculate(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle newVehicle, double newVehicleDepartureTime, final Driver newDriver, final double bestKnownCosts) { + public InsertionData getInsertionData(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle newVehicle, double newVehicleDepartureTime, final Driver newDriver, final double bestKnownCosts) { if(jobToInsert == null) throw new IllegalStateException("jobToInsert is missing."); if(newVehicle == null || newVehicle instanceof NoVehicle) throw new IllegalStateException("newVehicle is missing."); - InsertionContext insertionContext = new InsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, newVehicleDepartureTime); + JobInsertionContext insertionContext = new JobInsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, newVehicleDepartureTime); if(!hardRouteLevelConstraint.fulfilled(insertionContext)){ - return InsertionData.noInsertionFound(); + return InsertionData.createEmptyInsertionData(); } double bestCost = bestKnownCosts; @@ -99,17 +108,40 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ Start start = Start.newInstance(newVehicle.getLocationId(), newVehicle.getEarliestDeparture(), newVehicle.getLatestArrival()); start.setEndTime(newVehicleDepartureTime); - End end = End.newInstance(newVehicle.getLocationId(), 0.0, newVehicle.getLatestArrival()); TourActivity prevAct = start; double prevActStartTime = newVehicleDepartureTime; int actIndex = 0; - + boolean loopBroken = false; for(TourActivity nextAct : currentRoute.getTourActivities().getActivities()){ if(neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), nextAct.getLocationId())){ - ActivityInsertionCosts mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); - if(mc != null){ + ConstraintsStatus status = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime); + if(status.equals(ConstraintsStatus.FULFILLED)){ + ActivityInsertionCosts mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); + if(mc.getAdditionalCosts() < bestCost){ + bestCost = mc.getAdditionalCosts(); + bestMarginals = mc; + insertionIndex = actIndex; + } + } + else if(status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK)){ + loopBroken = true; + break; + } + } + double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevActStartTime, newDriver, newVehicle); + double nextActEndTime = CalculationUtils.getActivityEndTime(nextActArrTime, nextAct); + prevActStartTime = nextActEndTime; + prevAct = nextAct; + actIndex++; + } + End nextAct = end; + if(!loopBroken){ + if(neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), nextAct.getLocationId())){ + ConstraintsStatus status = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime); + if(status.equals(ConstraintsStatus.FULFILLED)){ + ActivityInsertionCosts mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); if(mc.getAdditionalCosts() < bestCost){ bestCost = mc.getAdditionalCosts(); bestMarginals = mc; @@ -117,28 +149,10 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ } } } - double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevActStartTime, newDriver, newVehicle); - double nextActEndTime = CalcUtils.getActivityEndTime(nextActArrTime, nextAct); - - prevActStartTime = nextActEndTime; - - prevAct = nextAct; - actIndex++; } - End nextAct = end; - if(neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), nextAct.getLocationId())){ - ActivityInsertionCosts mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); - if(mc != null) { - if(mc.getAdditionalCosts() < bestCost){ - bestCost = mc.getAdditionalCosts(); - bestMarginals = mc; - insertionIndex = actIndex; - } - } - } if(insertionIndex == InsertionData.NO_INDEX) { - return InsertionData.noInsertionFound(); + return InsertionData.createEmptyInsertionData(); } InsertionData insertionData = new InsertionData(bestCost, InsertionData.NO_INDEX, insertionIndex, newVehicle, newDriver); insertionData.setVehicleDepartureTime(newVehicleDepartureTime); @@ -146,8 +160,7 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ return insertionData; } - public ActivityInsertionCosts calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double departureTimeAtPrevAct) { - return activityInsertionCostsCalculator.calculate(iFacts, prevAct, nextAct, newAct, departureTimeAtPrevAct); - + public ActivityInsertionCosts calculate(JobInsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double departureTimeAtPrevAct) { + return activityInsertionCostsCalculator.getCosts(iFacts, prevAct, nextAct, newAct, departureTimeAtPrevAct); } } diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java similarity index 67% rename from jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java index 5d5c2e98..f5dc6b79 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ServiceInsertionOnRouteLevelCalculator.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import java.util.ArrayList; import java.util.Comparator; @@ -23,31 +23,37 @@ import java.util.List; import java.util.Map; import java.util.PriorityQueue; +import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator.ActivityInsertionCosts; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint.ConstraintsStatus; +import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.DefaultTourActivityFactory; +import jsprit.core.problem.solution.route.activity.End; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivities; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourActivityFactory; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; +import jsprit.core.util.Neighborhood; + import org.apache.log4j.Logger; -import util.Neighborhood; -import algorithms.ActivityInsertionCostsCalculator.ActivityInsertionCosts; -import algorithms.HardConstraints.HardRouteLevelConstraint; -import basics.Job; -import basics.Service; -import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.DefaultTourActivityFactory; -import basics.route.Driver; -import basics.route.End; -import basics.route.Start; -import basics.route.TourActivities; -import basics.route.TourActivity; -import basics.route.TourActivityFactory; -import basics.route.Vehicle; -import basics.route.VehicleImpl.NoVehicle; -import basics.route.VehicleRoute; -final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalculator{ +final class ServiceInsertionOnRouteLevelCalculator implements JobInsertionCostsCalculator{ - private static final Logger logger = Logger.getLogger(CalculatesServiceInsertionOnRouteLevel.class); + private static final Logger logger = Logger.getLogger(ServiceInsertionOnRouteLevelCalculator.class); private final VehicleRoutingTransportCosts transportCosts; @@ -57,9 +63,11 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul private TourActivityFactory tourActivityFactory = new DefaultTourActivityFactory(); - private StateManager stateManager; + private RouteAndActivityStateGetter stateManager; - private HardRouteLevelConstraint hardRouteLevelConstraint; + private HardRouteStateLevelConstraint hardRouteLevelConstraint; + + private HardActivityStateLevelConstraint hardActivityLevelConstraint; private ActivityInsertionCostsCalculator activityInsertionCostsCalculator; @@ -94,18 +102,19 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul logger.info("set [solutionMemory="+memorySize+"]"); } - public CalculatesServiceInsertionOnRouteLevel(VehicleRoutingTransportCosts vehicleRoutingCosts, VehicleRoutingActivityCosts costFunc, HardRouteLevelConstraint hardRouteLevelConstraint, ActivityInsertionCostsCalculator activityInsertionCostsCalculator) { + public ServiceInsertionOnRouteLevelCalculator(VehicleRoutingTransportCosts vehicleRoutingCosts, VehicleRoutingActivityCosts costFunc, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, HardRouteStateLevelConstraint hardRouteLevelConstraint, HardActivityStateLevelConstraint hardActivityLevelConstraint) { super(); this.transportCosts = vehicleRoutingCosts; this.activityCosts = costFunc; - this.hardRouteLevelConstraint = hardRouteLevelConstraint; this.activityInsertionCostsCalculator = activityInsertionCostsCalculator; + this.hardRouteLevelConstraint = hardRouteLevelConstraint; + this.hardActivityLevelConstraint = hardActivityLevelConstraint; auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(transportCosts, activityCosts); logger.info("initialise " + this); } - public void setStates(StateManager stateManager){ + public void setStates(RouteAndActivityStateGetter stateManager){ this.stateManager = stateManager; } @@ -128,13 +137,13 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul * */ @Override - public InsertionData calculate(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle newVehicle, double newVehicleDepartureTime, final Driver newDriver, final double best_known_insertion_costs) { + public InsertionData getInsertionData(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle newVehicle, double newVehicleDepartureTime, final Driver newDriver, final double best_known_insertion_costs) { if(jobToInsert == null) throw new IllegalStateException("job is null. cannot calculate the insertion of a null-job."); if(newVehicle == null || newVehicle instanceof NoVehicle) throw new IllegalStateException("no vehicle given. set para vehicle!"); - InsertionContext insertionContext = new InsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, newVehicleDepartureTime); + JobInsertionContext insertionContext = new JobInsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, newVehicleDepartureTime); if(!hardRouteLevelConstraint.fulfilled(insertionContext)){ - return InsertionData.noInsertionFound(); + return InsertionData.createEmptyInsertionData(); } /** @@ -150,6 +159,7 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul TourActivities tour = currentRoute.getTourActivities(); double best_insertion_costs = best_known_insertion_costs; Service service = (Service)jobToInsert; + /** * some inis @@ -164,6 +174,7 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul double sumOf_prevCosts_newVehicle = 0.0; double prevActDepTime_newVehicle = start.getEndTime(); + boolean loopBroken = false; /** * inserting serviceAct2Insert in route r={0,1,...,i-1,i,j,j+1,...,n(r),n(r)+1} * i=prevAct @@ -172,12 +183,13 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul */ for(TourActivity nextAct : tour.getActivities()){ if(neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), nextAct.getLocationId())){ - /** - * builds a path on this route forwardPath={i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking} - */ - InsertionContext iContext = new InsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, prevActDepTime_newVehicle); - ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.calculate(iContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); - if(actInsertionCosts != null){ + ConstraintsStatus status = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, serviceAct2Insert, nextAct, prevActDepTime_newVehicle); + if(status.equals(ConstraintsStatus.FULFILLED)){ + /** + * builds a path on this route forwardPath={i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking} + */ + ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.getCosts(insertionContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); + /** * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) */ @@ -190,6 +202,10 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation, InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); } } + else if(status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK)){ + loopBroken = true; + break; + } } /** @@ -219,22 +235,25 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul actIndex++; } - End nextAct = end; - if(neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), nextAct.getLocationId())){ + if(!loopBroken){ + End nextAct = end; + if(neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), nextAct.getLocationId())){ + ConstraintsStatus status = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, serviceAct2Insert, nextAct, prevActDepTime_newVehicle); + if(status.equals(ConstraintsStatus.FULFILLED)){ + ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.getCosts(insertionContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); + if(actInsertionCosts != null){ + /** + * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) + */ + double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts.getAdditionalCosts(); - InsertionContext iContext = new InsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, prevActDepTime_newVehicle); - ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.calculate(iContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); - if(actInsertionCosts != null){ - /** - * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) - */ - double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts.getAdditionalCosts(); - - /** - * memorize it in insertion-queue - */ - if(insertion_cost_approximation < best_known_insertion_costs){ - bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation, InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); + /** + * memorize it in insertion-queue + */ + if(insertion_cost_approximation < best_known_insertion_costs){ + bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation, InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); + } + } } } } @@ -254,6 +273,7 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul } } else{ + for(int i=0;i insertion_costs */ - double insertion_costs = auxilliaryPathCostCalculator.costOfPath(wholeTour, start.getEndTime(), newDriver, newVehicle) - stateManager.getRouteState(currentRoute,StateTypes.COSTS).toDouble(); + double insertion_costs = auxilliaryPathCostCalculator.costOfPath(wholeTour, start.getEndTime(), newDriver, newVehicle) - stateManager.getRouteState(currentRoute,StateFactory.COSTS).toDouble(); /** * if better than best known, make it the best known @@ -282,10 +302,8 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul } } } - if(best_insertion_index == InsertionData.NO_INDEX) return InsertionData.noInsertionFound(); - InsertionData insertionData = new InsertionData(best_insertion_costs, InsertionData.NO_INDEX, best_insertion_index, newVehicle, newDriver); - insertionData.setVehicleDepartureTime(newVehicleDepartureTime); - return insertionData; + if(best_insertion_index == InsertionData.NO_INDEX) return InsertionData.createEmptyInsertionData(); + return new InsertionData(best_insertion_costs, InsertionData.NO_INDEX, best_insertion_index, newVehicle, newDriver); } /** @@ -318,9 +336,9 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul private double sumOf_prevCosts_oldVehicle(VehicleRoute vehicleRoute, TourActivity act) { if(act instanceof End){ - return stateManager.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(); + return stateManager.getRouteState(vehicleRoute,StateFactory.COSTS).toDouble(); } - return stateManager.getActivityState(act,StateTypes.COSTS).toDouble(); + return stateManager.getActivityState(act,StateFactory.COSTS).toDouble(); } /** diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java new file mode 100644 index 00000000..67cba2ca --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculator.java @@ -0,0 +1,213 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm.recreate; + +import java.util.List; + +import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator.ActivityInsertionCosts; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint.ConstraintsStatus; +import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.DefaultShipmentActivityFactory; +import jsprit.core.problem.solution.route.activity.End; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourShipmentActivityFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; +import jsprit.core.util.CalculationUtils; +import jsprit.core.util.Neighborhood; + +import org.apache.log4j.Logger; + + + + +final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator{ + + private static final Logger logger = Logger.getLogger(ShipmentInsertionCalculator.class); + + private HardRouteStateLevelConstraint hardRouteLevelConstraint; + + private HardActivityStateLevelConstraint hardActivityLevelConstraint; + + private Neighborhood neighborhood = new Neighborhood() { + + @Override + public boolean areNeighbors(String location1, String location2) { + return true; + } + }; + + private ActivityInsertionCostsCalculator activityInsertionCostsCalculator; + + private VehicleRoutingTransportCosts transportCosts; + + private TourShipmentActivityFactory activityFactory; + + public void setNeighborhood(Neighborhood neighborhood) { + this.neighborhood = neighborhood; + logger.info("initialise neighborhood " + neighborhood); + } + + public ShipmentInsertionCalculator(VehicleRoutingTransportCosts routingCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, HardRouteStateLevelConstraint hardRouteLevelConstraint, HardActivityStateLevelConstraint hardActivityLevelConstraint) { + super(); + this.activityInsertionCostsCalculator = activityInsertionCostsCalculator; + this.hardRouteLevelConstraint = hardRouteLevelConstraint; + this.hardActivityLevelConstraint = hardActivityLevelConstraint; + this.transportCosts = routingCosts; + activityFactory = new DefaultShipmentActivityFactory(); + logger.info("initialise " + this); + } + + @Override + public String toString() { + return "[name=calculatesServiceInsertion]"; + } + + /** + * Calculates the marginal cost of inserting job i locally. This is based on the + * assumption that cost changes can entirely covered by only looking at the predecessor i-1 and its successor i+1. + * + */ + @Override + public InsertionData getInsertionData(final VehicleRoute currentRoute, final Job jobToInsert, final Vehicle newVehicle, double newVehicleDepartureTime, final Driver newDriver, final double bestKnownCosts) { + if(jobToInsert == null) throw new IllegalStateException("jobToInsert is missing."); + if(newVehicle == null || newVehicle instanceof NoVehicle) throw new IllegalStateException("newVehicle is missing."); + if(!(jobToInsert instanceof Shipment)) throw new IllegalStateException("jobToInsert should be of type Shipment!"); + + JobInsertionContext insertionContext = new JobInsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, newVehicleDepartureTime); + if(!hardRouteLevelConstraint.fulfilled(insertionContext)){ + return InsertionData.createEmptyInsertionData(); + } + + double bestCost = bestKnownCosts; + Shipment shipment = (Shipment)jobToInsert; + TourActivity pickupShipment = activityFactory.createPickup(shipment); + TourActivity deliverShipment = activityFactory.createDelivery(shipment); + + int pickupInsertionIndex = InsertionData.NO_INDEX; + int deliveryInsertionIndex = InsertionData.NO_INDEX; + + Start start = Start.newInstance(newVehicle.getLocationId(), newVehicle.getEarliestDeparture(), newVehicle.getLatestArrival()); + start.setEndTime(newVehicleDepartureTime); + + End end = End.newInstance(newVehicle.getLocationId(), 0.0, newVehicle.getLatestArrival()); + + TourActivity prevAct = start; + double prevActEndTime = newVehicleDepartureTime; + boolean pickupShipmentLoopBroken = false; + //pickupShipmentLoop + List activities = currentRoute.getTourActivities().getActivities(); + for(int i=0;i relevantVehicles = new ArrayList(); if(!(selectedVehicle instanceof NoVehicle)) { @@ -65,7 +67,7 @@ final class CalculatesVehTypeDepServiceInsertion implements JobInsertionCalculat for(Vehicle v : relevantVehicles){ double depTime = v.getEarliestDeparture(); - InsertionData iData = insertionCalculator.calculate(currentRoute, jobToInsert, v, depTime, selectedDriver, bestKnownCost_); + InsertionData iData = insertionCalculator.getInsertionData(currentRoute, jobToInsert, v, depTime, selectedDriver, bestKnownCost_); if(iData instanceof NoInsertionFound) { if(bestIData instanceof NoInsertionFound) bestIData = iData; continue; diff --git a/jsprit-core/src/main/java/algorithms/BeforeJobInsertionListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/BeforeJobInsertionListener.java similarity index 84% rename from jsprit-core/src/main/java/algorithms/BeforeJobInsertionListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/BeforeJobInsertionListener.java index 0ff16539..befbc0cf 100644 --- a/jsprit-core/src/main/java/algorithms/BeforeJobInsertionListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/BeforeJobInsertionListener.java @@ -14,11 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate.listener; -import basics.Job; -import basics.algo.InsertionListener; -import basics.route.VehicleRoute; +import jsprit.core.algorithm.recreate.InsertionData; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; interface BeforeJobInsertionListener extends InsertionListener{ diff --git a/jsprit-core/src/main/java/basics/algo/InsertionEndsListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionEndsListener.java similarity index 90% rename from jsprit-core/src/main/java/basics/algo/InsertionEndsListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionEndsListener.java index 58f64bc2..7420f1b2 100644 --- a/jsprit-core/src/main/java/basics/algo/InsertionEndsListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionEndsListener.java @@ -14,11 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.recreate.listener; import java.util.Collection; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.VehicleRoute; + public interface InsertionEndsListener extends InsertionListener { diff --git a/jsprit-core/src/main/java/basics/algo/InsertionListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionListener.java similarity index 89% rename from jsprit-core/src/main/java/basics/algo/InsertionListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionListener.java index 6c75a5e7..eb32b31c 100644 --- a/jsprit-core/src/main/java/basics/algo/InsertionListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionListener.java @@ -14,7 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.recreate.listener; + +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; diff --git a/jsprit-core/src/main/java/algorithms/InsertionListeners.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionListeners.java similarity index 90% rename from jsprit-core/src/main/java/algorithms/InsertionListeners.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionListeners.java index 6997fccb..67443c46 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionListeners.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionListeners.java @@ -14,20 +14,18 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate.listener; import java.util.ArrayList; import java.util.Collection; -import basics.Job; -import basics.algo.InsertionEndsListener; -import basics.algo.InsertionListener; -import basics.algo.InsertionStartsListener; -import basics.algo.JobInsertedListener; -import basics.route.Vehicle; -import basics.route.VehicleRoute; +import jsprit.core.algorithm.recreate.InsertionData; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; -class InsertionListeners { + +public class InsertionListeners { private Collection listeners = new ArrayList(); diff --git a/jsprit-core/src/main/java/basics/algo/InsertionStartsListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionStartsListener.java similarity index 88% rename from jsprit-core/src/main/java/basics/algo/InsertionStartsListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionStartsListener.java index 7ae743f9..6751c422 100644 --- a/jsprit-core/src/main/java/basics/algo/InsertionStartsListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/InsertionStartsListener.java @@ -14,15 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.recreate.listener; import java.util.Collection; -import basics.Job; -import basics.route.VehicleRoute; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; + public interface InsertionStartsListener extends InsertionListener { public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs); + } diff --git a/jsprit-core/src/main/java/basics/algo/JobInsertedListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/JobInsertedListener.java similarity index 88% rename from jsprit-core/src/main/java/basics/algo/JobInsertedListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/JobInsertedListener.java index c6c86924..dd2663d9 100644 --- a/jsprit-core/src/main/java/basics/algo/JobInsertedListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/JobInsertedListener.java @@ -14,10 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.recreate.listener; -import basics.Job; -import basics.route.VehicleRoute; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; diff --git a/jsprit-core/src/main/java/algorithms/VehicleSwitchedListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/VehicleSwitchedListener.java similarity index 81% rename from jsprit-core/src/main/java/algorithms/VehicleSwitchedListener.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/VehicleSwitchedListener.java index edbd32ac..d57fa11e 100644 --- a/jsprit-core/src/main/java/algorithms/VehicleSwitchedListener.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/recreate/listener/VehicleSwitchedListener.java @@ -14,13 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate.listener; -import basics.algo.InsertionListener; -import basics.route.Vehicle; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; -interface VehicleSwitchedListener extends InsertionListener{ +public interface VehicleSwitchedListener extends InsertionListener{ public void vehicleSwitched(VehicleRoute vehicleRoute, Vehicle oldVehicle, Vehicle newVehicle); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RadialRuinStrategyFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RadialRuinStrategyFactory.java new file mode 100644 index 00000000..418fc956 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RadialRuinStrategyFactory.java @@ -0,0 +1,23 @@ +package jsprit.core.algorithm.ruin; + +import jsprit.core.algorithm.ruin.distance.JobDistance; +import jsprit.core.problem.VehicleRoutingProblem; + +public class RadialRuinStrategyFactory implements RuinStrategyFactory{ + + private double fraction; + + private JobDistance jobDistance; + + public RadialRuinStrategyFactory(double fraction, JobDistance jobDistance) { + super(); + this.fraction = fraction; + this.jobDistance = jobDistance; + } + + @Override + public RuinStrategy createStrategy(VehicleRoutingProblem vrp) { + return new RuinRadial(vrp,fraction,jobDistance); + } + +} diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RandomRuinStrategyFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RandomRuinStrategyFactory.java new file mode 100644 index 00000000..b475cc03 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RandomRuinStrategyFactory.java @@ -0,0 +1,19 @@ +package jsprit.core.algorithm.ruin; + +import jsprit.core.problem.VehicleRoutingProblem; + +public class RandomRuinStrategyFactory implements RuinStrategyFactory{ + + private double fraction; + + public RandomRuinStrategyFactory(double fraction) { + super(); + this.fraction = fraction; + } + + @Override + public RuinStrategy createStrategy(VehicleRoutingProblem vrp) { + return new RuinRandom(vrp, fraction); + } + +} diff --git a/jsprit-core/src/main/java/algorithms/RuinRadial.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRadial.java similarity index 86% rename from jsprit-core/src/main/java/algorithms/RuinRadial.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRadial.java index 6f198537..601a4b40 100644 --- a/jsprit-core/src/main/java/algorithms/RuinRadial.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRadial.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin; import java.util.ArrayList; import java.util.Collection; @@ -27,18 +27,22 @@ import java.util.Map; import java.util.Random; import java.util.TreeSet; +import jsprit.core.algorithm.ruin.distance.JobDistance; +import jsprit.core.algorithm.ruin.listener.RuinListener; +import jsprit.core.algorithm.ruin.listener.RuinListeners; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.util.RandomNumberGeneration; +import jsprit.core.util.StopWatch; + import org.apache.log4j.Logger; -import util.RandomNumberGeneration; -import util.StopWatch; -import basics.Job; -import basics.VehicleRoutingProblem; -import basics.route.VehicleRoute; /** * - * RuinStrategy that ruins the neighborhood of a randomly selected service. The size and the structure of the neighborhood is defined by + * RuinStrategy that ruins the neighborhood of a randomly selected job. The size and the structure of the neighborhood is defined by * the share of jobs to be removed and the distance between jobs (where distance not necessarily mean Euclidean distance but an arbitrary * measure). * @@ -141,7 +145,7 @@ final class RuinRadial implements RuinStrategy { distanceNodeTree.put(i.getId(), treeSet); for (Job j : vrp.getJobs().values()) { if(i==j) continue; - double distance = jobDistance.calculateDistance(i, j); + double distance = jobDistance.getDistance(i, j); ReferencedJob refNode = new ReferencedJob(j, distance); treeSet.add(refNode); nuOfDistancesStored++; @@ -206,7 +210,7 @@ final class RuinRadial implements RuinStrategy { distanceNodeTree.put(i.getId(), treeSet); for (Job j : vrp.getJobs().values()) { if(i==j) continue; - double distance = jobDistance.calculateDistance(i, j); + double distance = jobDistance.getDistance(i, j); ReferencedJob refNode = new ReferencedJob(j, distance); if(treeSet.size() < capacity){ treeSet.add(refNode); @@ -287,6 +291,39 @@ final class RuinRadial implements RuinStrategy { jobNeighborhoodsImpl.initialise(); jobNeighborhoods = jobNeighborhoodsImpl; logger.info("intialise " + this); +//<<<<<<< HEAD +// } +// +// private void calculateDistancesFromJob2Job() { +// logger.info("preprocess distances between locations ..."); +// StopWatch stopWatch = new StopWatch(); +// stopWatch.start(); +// int nuOfDistancesStored = 0; +// for (Job i : vrp.getJobs().values()) { +// TreeSet treeSet = new TreeSet( +// new Comparator() { +// @Override +// public int compare(ReferencedJob o1, ReferencedJob o2) { +// if (o1.getDistance() <= o2.getDistance()) { +// return 1; +// } else { +// return -1; +// } +// } +// }); +// distanceNodeTree.put(i.getId(), treeSet); +// for (Job j : vrp.getJobs().values()) { +// double distance = jobDistance.getDistance(i, j); +// ReferencedJob refNode = new ReferencedJob(j, distance); +// treeSet.add(refNode); +// nuOfDistancesStored++; +// } +// } +// stopWatch.stop(); +// logger.info("preprocessing comp-time: " + stopWatch + "; nuOfDistances stored: " + nuOfDistancesStored + "; estimated memory: " + +// (distanceNodeTree.keySet().size()*64+nuOfDistancesStored*92) + " bytes"); +//======= +//>>>>>>> refs/heads/master } @Override diff --git a/jsprit-core/src/main/java/algorithms/RuinRandom.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRandom.java similarity index 93% rename from jsprit-core/src/main/java/algorithms/RuinRandom.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRandom.java index da3ab873..f4762dee 100644 --- a/jsprit-core/src/main/java/algorithms/RuinRandom.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinRandom.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin; import java.util.ArrayList; import java.util.Collection; @@ -22,12 +22,15 @@ import java.util.LinkedList; import java.util.List; import java.util.Random; +import jsprit.core.algorithm.ruin.listener.RuinListener; +import jsprit.core.algorithm.ruin.listener.RuinListeners; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.util.RandomNumberGeneration; + import org.apache.log4j.Logger; -import util.RandomNumberGeneration; -import basics.Job; -import basics.VehicleRoutingProblem; -import basics.route.VehicleRoute; /** diff --git a/jsprit-core/src/main/java/algorithms/RuinStrategy.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinStrategy.java similarity index 67% rename from jsprit-core/src/main/java/algorithms/RuinStrategy.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinStrategy.java index b06e932d..2e485268 100644 --- a/jsprit-core/src/main/java/algorithms/RuinStrategy.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinStrategy.java @@ -14,12 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin; import java.util.Collection; -import basics.Job; -import basics.route.VehicleRoute; +import jsprit.core.algorithm.ruin.listener.RuinListener; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; + @@ -30,41 +32,8 @@ import basics.route.VehicleRoute; * */ -interface RuinStrategy { +public interface RuinStrategy { - /** - * Listener that listens to the ruin-process. It informs whoever is interested about start, end and about a removal of a job. - * - * @author schroeder - * - */ - public static interface RuinListener { - - /** - * informs about ruin-start. - * - * @param routes - */ - public void ruinStarts(Collection routes); - - /** - * informs about ruin-end. - * - * @param routes - * @param unassignedJobs - */ - public void ruinEnds(Collection routes, Collection unassignedJobs); - - /** - * informs if a {@link Job} has been removed from a {@link VehicleRoute}. - * - * @param job - * @param fromRoute - */ - public void removed(Job job, VehicleRoute fromRoute); - - } - /** * Ruins a current solution, i.e. a collection of vehicle-routes and * returns a collection of removed and thus unassigned jobs. diff --git a/jsprit-core/src/main/java/algorithms/RuinStrategyFactory.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinStrategyFactory.java similarity index 88% rename from jsprit-core/src/main/java/algorithms/RuinStrategyFactory.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinStrategyFactory.java index 202abb54..21c1f1cf 100644 --- a/jsprit-core/src/main/java/algorithms/RuinStrategyFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/RuinStrategyFactory.java @@ -14,11 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin; -import basics.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem; -interface RuinStrategyFactory { +public interface RuinStrategyFactory { public RuinStrategy createStrategy(VehicleRoutingProblem vrp); diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/AvgServiceAndShipmentDistance.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/AvgServiceAndShipmentDistance.java new file mode 100644 index 00000000..bb380d7a --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/AvgServiceAndShipmentDistance.java @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm.ruin.distance; + +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.util.Coordinate; +import jsprit.core.util.EuclideanDistanceCalculator; + +import org.apache.log4j.Logger; + + + +/** + * Calculator that calculates average distance between two jobs based on the input-transport costs. + * + *

If the distance between two jobs cannot be calculated with input-transport costs, it tries the euclidean distance between these jobs. + * + * @author stefan schroeder + * + */ +public class AvgServiceAndShipmentDistance implements JobDistance { + + private static Logger log = Logger.getLogger(AvgServiceAndShipmentDistance.class); + + private VehicleRoutingTransportCosts costs; + + public AvgServiceAndShipmentDistance(VehicleRoutingTransportCosts costs) { + super(); + this.costs = costs; + + } + + /** + * Calculates and returns the average distance between two jobs based on the input-transport costs. + * + *

If the distance between two jobs cannot be calculated with input-transport costs, it tries the euclidean distance between these jobs. + */ + @Override + public double getDistance(Job i, Job j) { + if (i.equals(j)) return 0.0; + + if (i instanceof Service && j instanceof Service) { + return calcDist((Service)i, (Service)j); + } + else if(i instanceof Service && j instanceof Shipment){ + return calcDist((Service)i,(Shipment)j); + } + else if(i instanceof Shipment && j instanceof Service){ + return calcDist((Service)j,(Shipment)i); + } + else if(i instanceof Shipment && j instanceof Shipment){ + return calcDist((Shipment)i,(Shipment)j); + } + else{ + throw new IllegalStateException("this supports only shipments or services"); + } + } + + private double calcDist(Service i, Service j) { + return calcDist(i.getLocationId(),i.getCoord(),j.getLocationId(),j.getCoord()); + } + + private double calcDist(Service i, Shipment j) { + double c_ij1 = calcDist(i.getLocationId(),i.getCoord(),j.getPickupLocation(),j.getPickupCoord()); + double c_ij2 = calcDist(i.getLocationId(),i.getCoord(),j.getDeliveryLocation(),j.getDeliveryCoord()); + return (c_ij1 + c_ij2)/2.0; + } + + private double calcDist(Shipment i, Shipment j) { + double c_i1j1 = calcDist(i.getPickupLocation(),i.getPickupCoord(),j.getPickupLocation(),j.getPickupCoord()); + double c_i1j2 = calcDist(i.getPickupLocation(),i.getPickupCoord(),j.getDeliveryLocation(),j.getDeliveryCoord()); + double c_i2j1 = calcDist(i.getDeliveryLocation(),i.getDeliveryCoord(),j.getPickupLocation(),j.getPickupCoord()); + double c_i2j2 = calcDist(i.getDeliveryLocation(),i.getDeliveryCoord(),j.getDeliveryLocation(),j.getDeliveryCoord()); + return (c_i1j1 + c_i1j2 + c_i2j1 + c_i2j2)/4.0; + } + + private double calcDist(String location_i, Coordinate coord_i, String location_j, Coordinate coord_j){ + try{ + double c_ij = costs.getTransportCost(location_i, location_j, 0.0, null, null); + return c_ij; + } + catch(IllegalStateException e){ + // now try the euclidean distance between these two services + } + double c_ij = EuclideanDistanceCalculator.calculateDistance(coord_i, coord_j); + return c_ij; + } +} diff --git a/jsprit-core/src/main/java/algorithms/JobDistanceAvgCosts.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/AvgServiceDistance.java similarity index 81% rename from jsprit-core/src/main/java/algorithms/JobDistanceAvgCosts.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/AvgServiceDistance.java index f0ef7726..4c41f656 100644 --- a/jsprit-core/src/main/java/algorithms/JobDistanceAvgCosts.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/AvgServiceDistance.java @@ -14,13 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin.distance; + +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; import org.apache.log4j.Logger; -import basics.Job; -import basics.Service; -import basics.costs.VehicleRoutingTransportCosts; /** @@ -31,13 +32,13 @@ import basics.costs.VehicleRoutingTransportCosts; * @author stefan schroeder * */ -class JobDistanceAvgCosts implements JobDistance { +public class AvgServiceDistance implements JobDistance { - private static Logger log = Logger.getLogger(JobDistanceAvgCosts.class); + private static Logger log = Logger.getLogger(AvgServiceDistance.class); private VehicleRoutingTransportCosts costs; - public JobDistanceAvgCosts(VehicleRoutingTransportCosts costs) { + public AvgServiceDistance(VehicleRoutingTransportCosts costs) { super(); this.costs = costs; @@ -49,7 +50,7 @@ class JobDistanceAvgCosts implements JobDistance { *

If the distance between two jobs cannot be calculated with input-transport costs, it tries the euclidean distance between these jobs. */ @Override - public double calculateDistance(Job i, Job j) { + public double getDistance(Job i, Job j) { double avgCost = 0.0; if (i instanceof Service && j instanceof Service) { if (i.equals(j)) { @@ -61,7 +62,7 @@ class JobDistanceAvgCosts implements JobDistance { } } else { throw new UnsupportedOperationException( - "currently, this class just works with shipments and services."); + "currently, this class just works services."); } return avgCost; } @@ -76,7 +77,7 @@ class JobDistanceAvgCosts implements JobDistance { // now try the euclidean distance between these two services } EuclideanServiceDistance euclidean = new EuclideanServiceDistance(); - distance = euclidean.calculateDistance(s_i, s_j); + distance = euclidean.getDistance(s_i, s_j); return distance; } diff --git a/jsprit-core/src/main/java/algorithms/EuclideanServiceDistance.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/EuclideanServiceDistance.java similarity index 84% rename from jsprit-core/src/main/java/algorithms/EuclideanServiceDistance.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/EuclideanServiceDistance.java index 5dc11af3..2369e8d6 100644 --- a/jsprit-core/src/main/java/algorithms/EuclideanServiceDistance.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/EuclideanServiceDistance.java @@ -14,20 +14,20 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin.distance; -import util.EuclideanDistanceCalculator; -import basics.Job; -import basics.Service; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.util.EuclideanDistanceCalculator; -class EuclideanServiceDistance implements JobDistance { +public class EuclideanServiceDistance implements JobDistance { public EuclideanServiceDistance() { super(); } @Override - public double calculateDistance(Job i, Job j) { + public double getDistance(Job i, Job j) { double avgCost = 0.0; if (i instanceof Service && j instanceof Service) { if (i.equals(j)) { diff --git a/jsprit-core/src/main/java/algorithms/JobDistance.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/JobDistance.java similarity index 85% rename from jsprit-core/src/main/java/algorithms/JobDistance.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/JobDistance.java index c8da4a72..45b4428b 100644 --- a/jsprit-core/src/main/java/algorithms/JobDistance.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/distance/JobDistance.java @@ -14,14 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin.distance; -import basics.Job; +import jsprit.core.problem.job.Job; -interface JobDistance { +public interface JobDistance { - public double calculateDistance(Job i, Job j); + public double getDistance(Job i, Job j); } diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/listener/RuinListener.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/listener/RuinListener.java new file mode 100644 index 00000000..7fb0779e --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/listener/RuinListener.java @@ -0,0 +1,41 @@ +package jsprit.core.algorithm.ruin.listener; + +import java.util.Collection; + +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; + + +/** + * Listener that listens to the ruin-process. It informs whoever is interested about start, end and about a removal of a job. + * + * @author schroeder + * + */ +public interface RuinListener extends SearchStrategyModuleListener{ + + /** + * informs about ruin-start. + * + * @param routes + */ + public void ruinStarts(Collection routes); + + /** + * informs about ruin-end. + * + * @param routes + * @param unassignedJobs + */ + public void ruinEnds(Collection routes, Collection unassignedJobs); + + /** + * informs if a {@link Job} has been removed from a {@link VehicleRoute}. + * + * @param job + * @param fromRoute + */ + public void removed(Job job, VehicleRoute fromRoute); + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/listener/RuinListeners.java b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/listener/RuinListeners.java new file mode 100644 index 00000000..b5b49392 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/ruin/listener/RuinListeners.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributors: + * Stefan Schroeder - initial API and implementation + ******************************************************************************/ +package jsprit.core.algorithm.ruin.listener; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; + +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; + + +public class RuinListeners { + + private Collection ruinListeners = new ArrayList(); + + public void ruinStarts(Collection routes){ + for(RuinListener l : ruinListeners) l.ruinStarts(routes); + } + + public void ruinEnds(Collection routes, Collection unassignedJobs){ + for(RuinListener l : ruinListeners) l.ruinEnds(routes, unassignedJobs); + } + + public void removed(Job job, VehicleRoute fromRoute){ + for(RuinListener l : ruinListeners) l.removed(job, fromRoute); + } + + public void addListener(RuinListener ruinListener){ + ruinListeners.add(ruinListener); + } + + public void removeListener(RuinListener ruinListener){ + ruinListeners.remove(ruinListener); + } + + public Collection getListeners(){ + return Collections.unmodifiableCollection(ruinListeners); + } +} diff --git a/jsprit-core/src/main/java/algorithms/selectors/SelectBest.java b/jsprit-core/src/main/java/jsprit/core/algorithm/selector/SelectBest.java similarity index 94% rename from jsprit-core/src/main/java/algorithms/selectors/SelectBest.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/selector/SelectBest.java index 93fc29aa..e2db896e 100644 --- a/jsprit-core/src/main/java/algorithms/selectors/SelectBest.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/selector/SelectBest.java @@ -14,11 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.selectors; +package jsprit.core.algorithm.selector; import java.util.Collection; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + diff --git a/jsprit-core/src/main/java/algorithms/selectors/SelectRandomly.java b/jsprit-core/src/main/java/jsprit/core/algorithm/selector/SelectRandomly.java similarity index 91% rename from jsprit-core/src/main/java/algorithms/selectors/SelectRandomly.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/selector/SelectRandomly.java index 97676297..09731749 100644 --- a/jsprit-core/src/main/java/algorithms/selectors/SelectRandomly.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/selector/SelectRandomly.java @@ -14,15 +14,16 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.selectors; +package jsprit.core.algorithm.selector; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Random; -import util.RandomNumberGeneration; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.util.RandomNumberGeneration; + diff --git a/jsprit-core/src/main/java/algorithms/selectors/SolutionSelector.java b/jsprit-core/src/main/java/jsprit/core/algorithm/selector/SolutionSelector.java similarity index 90% rename from jsprit-core/src/main/java/algorithms/selectors/SolutionSelector.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/selector/SolutionSelector.java index 48d26709..410a7a7a 100644 --- a/jsprit-core/src/main/java/algorithms/selectors/SolutionSelector.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/selector/SolutionSelector.java @@ -14,11 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.selectors; +package jsprit.core.algorithm.selector; import java.util.Collection; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + public interface SolutionSelector { diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateManager.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateManager.java new file mode 100644 index 00000000..16ebe471 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateManager.java @@ -0,0 +1,291 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm.state; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import jsprit.core.algorithm.listener.IterationStartsListener; +import jsprit.core.algorithm.recreate.listener.InsertionEndsListener; +import jsprit.core.algorithm.recreate.listener.InsertionListener; +import jsprit.core.algorithm.recreate.listener.InsertionListeners; +import jsprit.core.algorithm.recreate.listener.InsertionStartsListener; +import jsprit.core.algorithm.recreate.listener.JobInsertedListener; +import jsprit.core.algorithm.ruin.listener.RuinListener; +import jsprit.core.algorithm.ruin.listener.RuinListeners; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.ReverseRouteActivityVisitor; +import jsprit.core.problem.solution.route.RouteActivityVisitor; +import jsprit.core.problem.solution.route.RouteVisitor; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.ReverseActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.solution.route.state.StateFactory.State; +import jsprit.core.problem.solution.route.state.StateFactory.StateId; +import jsprit.core.problem.solution.route.state.StateFactory.States; + + +public class StateManager implements RouteAndActivityStateGetter, IterationStartsListener, RuinListener, InsertionStartsListener, JobInsertedListener, InsertionEndsListener { + + private Map vehicleRouteStates = new HashMap(); + + private Map activityStates = new HashMap(); + + private RouteActivityVisitor routeActivityVisitor = new RouteActivityVisitor(); + + private ReverseRouteActivityVisitor revRouteActivityVisitor = new ReverseRouteActivityVisitor(); + + private Collection routeVisitors = new ArrayList(); + + private RuinListeners ruinListeners = new RuinListeners(); + + private InsertionListeners insertionListeners = new InsertionListeners(); + + private Collection updaters = new ArrayList(); + + private Map defaultRouteStates = new HashMap(); + + private Map defaultActivityStates = new HashMap(); + + private VehicleRoutingProblem vrp; + + public StateManager(VehicleRoutingProblem vrp) { + super(); + this.vrp = vrp; + } + + public void addDefaultRouteState(StateId stateId, State defaultState){ + if(StateFactory.isReservedId(stateId)) StateFactory.throwReservedIdException(stateId.toString()); + defaultRouteStates.put(stateId, defaultState); + } + + public void addDefaultActivityState(StateId stateId, State defaultState){ + if(StateFactory.isReservedId(stateId)) StateFactory.throwReservedIdException(stateId.toString()); + defaultActivityStates.put(stateId, defaultState); + } + + public void clear(){ + vehicleRouteStates.clear(); + activityStates.clear(); + } + + @Override + public State getActivityState(TourActivity act, StateId stateId) { + if(!activityStates.containsKey(act)){ + return getDefaultActState(stateId,act); + } + States actStates = activityStates.get(act); + State state = actStates.getState(stateId); + if(state == null){ + return getDefaultActState(stateId,act); + } + return state; + } + + void putInternalActivityState(TourActivity act, StateId stateId, State state){ + if(!activityStates.containsKey(act)){ + activityStates.put(act, StateFactory.createStates()); + } + States actStates = activityStates.get(act); + actStates.putState(stateId, state); + } + + public void putActivityState(TourActivity act, StateId stateId, State state){ + if(StateFactory.isReservedId(stateId)) StateFactory.throwReservedIdException(stateId.toString()); + putInternalActivityState(act, stateId, state); + } + + void putInternalRouteState(VehicleRoute route, StateId stateId, State state){ + if(!vehicleRouteStates.containsKey(route)){ + vehicleRouteStates.put(route, StateFactory.createStates()); + } + States routeStates = (States) vehicleRouteStates.get(route); + routeStates.putState(stateId, state); + } + + public void putRouteState(VehicleRoute route, StateId stateId, State state){ + if(StateFactory.isReservedId(stateId)) StateFactory.throwReservedIdException(stateId.toString()); + putInternalRouteState(route, stateId, state); + } + + @Override + public State getRouteState(VehicleRoute route, StateId stateId) { + if(!vehicleRouteStates.containsKey(route)){ + return getDefaultRouteState(stateId,route); + } + States routeStates = vehicleRouteStates.get(route); + State state = routeStates.getState(stateId); + if(state == null){ + return getDefaultRouteState(stateId, route); + } + return state; + } + + /** + * Adds state updater. + * + *

Note that a state update occurs if route and/or activity states change, i.e. if jobs are removed + * or inserted into a route. Thus here, it is assumed that a state updater is either of type InsertionListener, + * RuinListener, ActivityVisitor, ReverseActivityVisitor, RouteVisitor, ReverseRouteVisitor. + * + *

The following rule pertain for activity/route visitors:These visitors visits all activities/route in a route subsequently in two cases. First, if insertionStart (after ruinStrategies have removed activities from routes) + * and, second, if a job has been inserted and thus if a route has changed. + * + * @param updater + */ + public void addStateUpdater(StateUpdater updater){ + if(updater instanceof ActivityVisitor) addActivityVisitor((ActivityVisitor) updater); + if(updater instanceof ReverseActivityVisitor) addActivityVisitor((ReverseActivityVisitor)updater); + if(updater instanceof RouteVisitor) addRouteVisitor((RouteVisitor) updater); + if(updater instanceof InsertionListener) addListener((InsertionListener) updater); + if(updater instanceof RuinListener) addListener((RuinListener) updater); + updaters.add(updater); + } + + Collection getStateUpdaters(){ + return Collections.unmodifiableCollection(updaters); + } + + /** + * Adds an activityVisitor. + *

This visitor visits all activities in a route subsequently in two cases. First, if insertionStart (after ruinStrategies have removed activities from routes) + * and, second, if a job has been inserted and thus if a route has changed. + * + * @param activityVistor + */ + void addActivityVisitor(ActivityVisitor activityVistor){ + routeActivityVisitor.addActivityVisitor(activityVistor); + } + + /** + * Adds an reverseActivityVisitor. + *

This reverseVisitor visits all activities in a route subsequently (starting from the end of the route) in two cases. First, if insertionStart (after ruinStrategies have removed activities from routes) + * and, second, if a job has been inserted and thus if a route has changed. + * + * @param reverseActivityVistor + */ + void addActivityVisitor(ReverseActivityVisitor activityVistor){ + revRouteActivityVisitor.addActivityVisitor(activityVistor); + } + + void addRouteVisitor(RouteVisitor routeVisitor){ + routeVisitors.add(routeVisitor); + } + + void addListener(RuinListener ruinListener){ + ruinListeners.addListener(ruinListener); + } + + void removeListener(RuinListener ruinListener){ + ruinListeners.removeListener(ruinListener); + } + + void addListener(InsertionListener insertionListener){ + insertionListeners.addListener(insertionListener); + } + + void removeListener(InsertionListener insertionListener){ + insertionListeners.removeListener(insertionListener); + } + + private State getDefaultActState(StateId stateId, TourActivity act){ + if(stateId.equals(StateFactory.LOAD)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.COSTS)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.DURATION)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.EARLIEST_OPERATION_START_TIME)) return StateFactory.createState(act.getTheoreticalEarliestOperationStartTime()); + if(stateId.equals(StateFactory.LATEST_OPERATION_START_TIME)) return StateFactory.createState(act.getTheoreticalLatestOperationStartTime()); + if(stateId.equals(StateFactory.FUTURE_MAXLOAD)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.PAST_MAXLOAD)) return StateFactory.createState(0); + if(defaultActivityStates.containsKey(stateId)) return defaultActivityStates.get(stateId); + return null; + } + + private State getDefaultRouteState(StateId stateId, VehicleRoute route){ + if(stateId.equals(StateFactory.MAXLOAD)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.LOAD)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.LOAD_AT_END)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.LOAD_AT_BEGINNING)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.COSTS)) return StateFactory.createState(0); + if(stateId.equals(StateFactory.DURATION)) return StateFactory.createState(0); + if(defaultRouteStates.containsKey(stateId)) return defaultRouteStates.get(stateId); + return null; + } + + @Override + public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { + insertionListeners.informJobInserted(job2insert, inRoute, additionalCosts, additionalTime); + for(RouteVisitor v : routeVisitors){ v.visit(inRoute); } + routeActivityVisitor.visit(inRoute); + revRouteActivityVisitor.visit(inRoute); + } + + @Override + public void informInsertionStarts(Collection vehicleRoutes,Collection unassignedJobs) { + insertionListeners.informInsertionStarts(vehicleRoutes, unassignedJobs); + for(VehicleRoute route : vehicleRoutes){ + for(RouteVisitor v : routeVisitors){ v.visit(route); } + routeActivityVisitor.visit(route); + revRouteActivityVisitor.visit(route); + } + } + + @Override + public void informIterationStarts(int i, VehicleRoutingProblem problem, Collection solutions) { + clear(); + } + + @Override + public void ruinStarts(Collection routes) { + ruinListeners.ruinStarts(routes); + } + + @Override + public void ruinEnds(Collection routes, Collection unassignedJobs) { + ruinListeners.ruinEnds(routes, unassignedJobs); + } + + @Override + public void removed(Job job, VehicleRoute fromRoute) { + ruinListeners.removed(job, fromRoute); + } + + @Override + public void informInsertionEnds(Collection vehicleRoutes) { + insertionListeners.informInsertionEndsListeners(vehicleRoutes); + } + + public void updateLoadStates() { + UpdateLoads updateLoads = new UpdateLoads(this); + addActivityVisitor(updateLoads); + addListener(updateLoads); + addActivityVisitor(new UpdatePrevMaxLoad(this)); + addActivityVisitor(new UpdateMaxLoad(this)); + addActivityVisitor(new UpdateMaxLoad_(this)); + } + + public void updateTimeWindowStates() { + addActivityVisitor(new UpdateTimeWindow(this, vrp.getTransportCosts())); + } +} diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateUpdater.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateUpdater.java new file mode 100644 index 00000000..3d170794 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/StateUpdater.java @@ -0,0 +1,5 @@ +package jsprit.core.algorithm.state; + +public interface StateUpdater { + +} diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateActivityTimes.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateActivityTimes.java new file mode 100644 index 00000000..2698cc4a --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateActivityTimes.java @@ -0,0 +1,61 @@ +package jsprit.core.algorithm.state; + +import jsprit.core.problem.cost.ForwardTransportTime; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.util.ActivityTimeTracker; + + +/** + * Updates arrival and end times of activities. + * + *

Note that this modifies arrTime and endTime of each activity in a route. + * + * @author stefan + * + */ +public class UpdateActivityTimes implements ActivityVisitor, StateUpdater{ + + private ActivityTimeTracker timeTracker; + + private VehicleRoute route; + + /** + * Updates arrival and end times of activities. + * + *

Note that this modifies arrTime and endTime of each activity in a route. + * + *

ArrTimes and EndTimes can be retrieved by
+ * activity.getArrTime() and + * activity.getEndTime() + * + * @author stefan + * + */ + public UpdateActivityTimes(ForwardTransportTime transportTime) { + super(); + timeTracker = new ActivityTimeTracker(transportTime); + } + + @Override + public void begin(VehicleRoute route) { + timeTracker.begin(route); + this.route = route; + route.getStart().setEndTime(timeTracker.getActEndTime()); + } + + @Override + public void visit(TourActivity activity) { + timeTracker.visit(activity); + activity.setArrTime(timeTracker.getActArrTime()); + activity.setEndTime(timeTracker.getActEndTime()); + } + + @Override + public void finish() { + timeTracker.finish(); + route.getEnd().setArrTime(timeTracker.getActArrTime()); + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateEarliestStartTime.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateEarliestStartTime.java new file mode 100644 index 00000000..a62281d1 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateEarliestStartTime.java @@ -0,0 +1,37 @@ +package jsprit.core.algorithm.state; + +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.util.ActivityTimeTracker; + +class UpdateEarliestStartTime implements ActivityVisitor,StateUpdater{ + + private StateManager states; + + private ActivityTimeTracker timeTracker; + + public UpdateEarliestStartTime(StateManager states, VehicleRoutingTransportCosts transportCosts) { + super(); + this.states = states; + timeTracker = new ActivityTimeTracker(transportCosts); + } + + @Override + public void begin(VehicleRoute route) { + timeTracker.begin(route); + } + + @Override + public void visit(TourActivity activity) { + timeTracker.visit(activity); + states.putInternalActivityState(activity, StateFactory.EARLIEST_OPERATION_START_TIME, StateFactory.createState(Math.max(timeTracker.getActArrTime(), activity.getTheoreticalEarliestOperationStartTime()))); + + } + + @Override + public void finish() {} + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateLoads.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateLoads.java new file mode 100644 index 00000000..6e9a6df5 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateLoads.java @@ -0,0 +1,108 @@ +package jsprit.core.algorithm.state; + +import java.util.Collection; + +import jsprit.core.algorithm.recreate.listener.InsertionStartsListener; +import jsprit.core.algorithm.recreate.listener.JobInsertedListener; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory; + + +/** + * Updates load at activity level. + * + *

Note that this assumes that StateTypes.LOAD_AT_DEPOT is already updated, i.e. it starts by setting loadAtDepot to StateTypes.LOAD_AT_DEPOT. + * If StateTypes.LOAD_AT_DEPOT is not set, it starts with 0 load at depot. + * + *

Thus it DEPENDS on StateTypes.LOAD_AT_DEPOT + * + * @author stefan + * + */ +class UpdateLoads implements ActivityVisitor, StateUpdater, InsertionStartsListener, JobInsertedListener { + private StateManager stateManager; + private int currentLoad = 0; + private VehicleRoute route; + /** + * Updates load at activity level. + * + *

Note that this assumes that StateTypes.LOAD_AT_DEPOT is already updated, i.e. it starts by setting loadAtDepot to StateTypes.LOAD_AT_DEPOT. + * If StateTypes.LOAD_AT_DEPOT is not set, it starts with 0 load at depot. + * + *

Thus it DEPENDS on StateTypes.LOAD_AT_DEPOT + * + *

The loads can be retrieved by
+ * stateManager.getActivityState(activity,StateTypes.LOAD); + * + * @author stefan + * + */ + public UpdateLoads(StateManager stateManager) { + super(); + this.stateManager = stateManager; + } + + @Override + public void begin(VehicleRoute route) { + currentLoad = (int) stateManager.getRouteState(route, StateFactory.LOAD_AT_BEGINNING).toDouble(); + this.route = route; + } + + @Override + public void visit(TourActivity act) { + currentLoad += act.getCapacityDemand(); + stateManager.putInternalActivityState(act, StateFactory.LOAD, StateFactory.createState(currentLoad)); + assert currentLoad <= route.getVehicle().getCapacity() : "currentLoad at activity must not be > vehicleCapacity"; + assert currentLoad >= 0 : "currentLoad at act must not be < 0"; + } + + @Override + public void finish() { +// stateManager.putRouteState(route, StateFactory., state) + currentLoad = 0; + } + + void insertionStarts(VehicleRoute route) { + int loadAtDepot = 0; + int loadAtEnd = 0; + for(Job j : route.getTourActivities().getJobs()){ + if(j instanceof Delivery){ + loadAtDepot += j.getCapacityDemand(); + } + else if(j instanceof Pickup || j instanceof Service){ + loadAtEnd += j.getCapacityDemand(); + } + } + stateManager.putInternalRouteState(route, StateFactory.LOAD_AT_BEGINNING, StateFactory.createState(loadAtDepot)); + stateManager.putInternalRouteState(route, StateFactory.LOAD_AT_END, StateFactory.createState(loadAtEnd)); + } + + @Override + public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs) { + for(VehicleRoute route : vehicleRoutes){ insertionStarts(route); } + } + + @Override + public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { +// log.debug("insert("+job2insert+").into("+inRoute+")"); +// log(inRoute); + if(job2insert instanceof Delivery){ + int loadAtDepot = (int) stateManager.getRouteState(inRoute, StateFactory.LOAD_AT_BEGINNING).toDouble(); +// log.info("loadAtDepot="+loadAtDepot); + stateManager.putInternalRouteState(inRoute, StateFactory.LOAD_AT_BEGINNING, StateFactory.createState(loadAtDepot + job2insert.getCapacityDemand())); + } + else if(job2insert instanceof Pickup || job2insert instanceof Service){ + int loadAtEnd = (int) stateManager.getRouteState(inRoute, StateFactory.LOAD_AT_END).toDouble(); +// log.info("loadAtEnd="+loadAtEnd); + stateManager.putInternalRouteState(inRoute, StateFactory.LOAD_AT_END, StateFactory.createState(loadAtEnd + job2insert.getCapacityDemand())); + } + } + + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxLoad.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxLoad.java new file mode 100644 index 00000000..8ea51264 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxLoad.java @@ -0,0 +1,34 @@ +package jsprit.core.algorithm.state; + +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ReverseActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory; + + +class UpdateMaxLoad implements ReverseActivityVisitor, StateUpdater { + private StateManager stateManager; + private VehicleRoute route; + private double maxLoad; + public UpdateMaxLoad(StateManager stateManager) { + super(); + this.stateManager = stateManager; + } + + @Override + public void begin(VehicleRoute route) { + this.route = route; + maxLoad = stateManager.getRouteState(route, StateFactory.LOAD_AT_END).toDouble(); + } + + @Override + public void visit(TourActivity act) { + maxLoad = Math.max(maxLoad, stateManager.getActivityState(act, StateFactory.LOAD).toDouble()); + stateManager.putInternalActivityState(act, StateFactory.FUTURE_MAXLOAD, StateFactory.createState(maxLoad)); + assert maxLoad <= route.getVehicle().getCapacity() : "maxLoad can never be bigger than vehicleCap"; + assert maxLoad >= 0 : "maxLoad can never be smaller than 0"; + } + + @Override + public void finish() {} +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxLoad_.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxLoad_.java new file mode 100644 index 00000000..181ffa77 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateMaxLoad_.java @@ -0,0 +1,68 @@ +package jsprit.core.algorithm.state; + +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory; + +/** + * Updates load at activity level. + * + *

Note that this assumes that StateTypes.LOAD_AT_DEPOT is already updated, i.e. it starts by setting loadAtDepot to StateTypes.LOAD_AT_DEPOT. + * If StateTypes.LOAD_AT_DEPOT is not set, it starts with 0 load at depot. + * + *

Thus it DEPENDS on StateTypes.LOAD_AT_DEPOT + * + * @author stefan + * + */ +class UpdateMaxLoad_ implements ActivityVisitor, StateUpdater { + private StateManager stateManager; + private int currentLoad = 0; + private VehicleRoute route; + private int maxLoad = 0; + + /** + * Updates load at activity level. + * + *

Note that this assumes that StateTypes.LOAD_AT_DEPOT is already updated, i.e. it starts by setting loadAtDepot to StateTypes.LOAD_AT_DEPOT. + * If StateTypes.LOAD_AT_DEPOT is not set, it starts with 0 load at depot. + * + *

Thus it DEPENDS on StateTypes.LOAD_AT_DEPOT + * + * + * + *

The loads can be retrieved by
+ * stateManager.getActivityState(activity,StateTypes.LOAD); + * + * + * @author stefan + * + */ + public UpdateMaxLoad_(StateManager stateManager) { + super(); + this.stateManager = stateManager; + } + + @Override + public void begin(VehicleRoute route) { + currentLoad = (int) stateManager.getRouteState(route, StateFactory.LOAD_AT_BEGINNING).toDouble(); + maxLoad = currentLoad; + this.route = route; + } + + @Override + public void visit(TourActivity act) { + currentLoad += act.getCapacityDemand(); + maxLoad = Math.max(maxLoad, currentLoad); + assert currentLoad <= route.getVehicle().getCapacity() : "currentLoad at activity must not be > vehicleCapacity"; + assert currentLoad >= 0 : "currentLoad at act must not be < 0"; + } + + @Override + public void finish() { + stateManager.putInternalRouteState(route, StateFactory.MAXLOAD, StateFactory.createState(maxLoad)); + currentLoad = 0; + maxLoad = 0; + } +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdatePrevMaxLoad.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdatePrevMaxLoad.java new file mode 100644 index 00000000..ff87c2cd --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdatePrevMaxLoad.java @@ -0,0 +1,37 @@ +package jsprit.core.algorithm.state; + +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory; + + +class UpdatePrevMaxLoad implements ActivityVisitor, StateUpdater { + private StateManager stateManager; + private VehicleRoute route; + private double currLoad; + private double prevMaxLoad; + + public UpdatePrevMaxLoad(StateManager stateManager) { + super(); + this.stateManager = stateManager; + } + + @Override + public void begin(VehicleRoute route) { + this.route = route; + currLoad = stateManager.getRouteState(route, StateFactory.LOAD_AT_BEGINNING).toDouble(); + prevMaxLoad = currLoad; + } + + @Override + public void visit(TourActivity act) { + prevMaxLoad = Math.max(prevMaxLoad, stateManager.getActivityState(act, StateFactory.LOAD).toDouble()); + stateManager.putInternalActivityState(act, StateFactory.PAST_MAXLOAD, StateFactory.createState(prevMaxLoad)); + assert prevMaxLoad >= 0 : "maxLoad can never be smaller than 0"; + assert prevMaxLoad <= route.getVehicle().getCapacity() : "maxLoad can never be bigger than vehicleCap"; + } + + @Override + public void finish() {} +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateTimeWindow.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateTimeWindow.java new file mode 100644 index 00000000..c74cc69a --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateTimeWindow.java @@ -0,0 +1,48 @@ +package jsprit.core.algorithm.state; + +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ReverseActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory; + + +class UpdateTimeWindow implements ReverseActivityVisitor, StateUpdater{ + + private StateManager states; + + private VehicleRoute route; + + private VehicleRoutingTransportCosts transportCosts; + + private double latestArrTimeAtPrevAct; + + private TourActivity prevAct; + + public UpdateTimeWindow(StateManager states, VehicleRoutingTransportCosts tpCosts) { + super(); + this.states = states; + this.transportCosts = tpCosts; + } + + @Override + public void begin(VehicleRoute route) { + this.route = route; + latestArrTimeAtPrevAct = route.getEnd().getTheoreticalLatestOperationStartTime(); + prevAct = route.getEnd(); + } + + @Override + public void visit(TourActivity activity) { + double potentialLatestArrivalTimeAtCurrAct = latestArrTimeAtPrevAct - transportCosts.getBackwardTransportTime(activity.getLocationId(), prevAct.getLocationId(), latestArrTimeAtPrevAct, route.getDriver(),route.getVehicle()) - activity.getOperationTime(); + double latestArrivalTime = Math.min(activity.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct); + + states.putInternalActivityState(activity, StateFactory.LATEST_OPERATION_START_TIME, StateFactory.createState(latestArrivalTime)); + + latestArrTimeAtPrevAct = latestArrivalTime; + prevAct = activity; + } + + @Override + public void finish() {} +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateVariableCosts.java b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateVariableCosts.java new file mode 100644 index 00000000..391f090c --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/state/UpdateVariableCosts.java @@ -0,0 +1,119 @@ +package jsprit.core.algorithm.state; + +import jsprit.core.problem.cost.ForwardTransportCost; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.util.ActivityTimeTracker; + +import org.apache.log4j.Logger; + + +/** + * Updates total costs (i.e. transport and activity costs) at route and activity level. + * + *

Thus it modifies stateManager.getRouteState(route, StateTypes.COSTS) and
+ * stateManager.getActivityState(activity, StateTypes.COSTS) + * + * + * @param activityCost + * @param transportCost + * @param states + */ +public class UpdateVariableCosts implements ActivityVisitor,StateUpdater{ + + private static Logger log = Logger.getLogger(UpdateVariableCosts.class); + + private VehicleRoutingActivityCosts activityCost; + + private ForwardTransportCost transportCost; + + private StateManager states; + + private double totalOperationCost = 0.0; + + private VehicleRoute vehicleRoute = null; + + private TourActivity prevAct = null; + + private double startTimeAtPrevAct = 0.0; + + private ActivityTimeTracker timeTracker; + + /** + * Updates total costs (i.e. transport and activity costs) at route and activity level. + * + *

Thus it modifies stateManager.getRouteState(route, StateTypes.COSTS) and
+ * stateManager.getActivityState(activity, StateTypes.COSTS) + * + * + * @param activityCost + * @param transportCost + * @param states + */ + public UpdateVariableCosts(VehicleRoutingActivityCosts activityCost, VehicleRoutingTransportCosts transportCost, StateManager states) { + super(); + this.activityCost = activityCost; + this.transportCost = transportCost; + this.states = states; + timeTracker = new ActivityTimeTracker(transportCost); + } + + @Override + public void begin(VehicleRoute route) { + vehicleRoute = route; +// vehicleRoute.getVehicleRouteCostCalculator().reset(); + timeTracker.begin(route); + prevAct = route.getStart(); + startTimeAtPrevAct = timeTracker.getActEndTime(); + } + + @Override + public void visit(TourActivity act) { + timeTracker.visit(act); + + double transportCost = this.transportCost.getTransportCost(prevAct.getLocationId(), act.getLocationId(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle()); + double actCost = activityCost.getActivityCost(act, timeTracker.getActArrTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle()); + +// vehicleRoute.getVehicleRouteCostCalculator().addTransportCost(transportCost); +// vehicleRoute.getVehicleRouteCostCalculator().addActivityCost(actCost); +// + totalOperationCost += transportCost; + totalOperationCost += actCost; + + states.putInternalActivityState(act, StateFactory.COSTS, StateFactory.createState(totalOperationCost)); + + prevAct = act; + startTimeAtPrevAct = timeTracker.getActEndTime(); + } + + @Override + public void finish() { + timeTracker.finish(); + double transportCost = this.transportCost.getTransportCost(prevAct.getLocationId(), vehicleRoute.getEnd().getLocationId(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle()); + double actCost = activityCost.getActivityCost(vehicleRoute.getEnd(), timeTracker.getActEndTime(), vehicleRoute.getDriver(), vehicleRoute.getVehicle()); + +// vehicleRoute.getVehicleRouteCostCalculator().addTransportCost(transportCost); +// vehicleRoute.getVehicleRouteCostCalculator().addActivityCost(actCost); +// + totalOperationCost += transportCost; + totalOperationCost += actCost; +// totalOperationCost += getFixCosts(vehicleRoute.getVehicle()); + + states.putInternalRouteState(vehicleRoute, StateFactory.COSTS, StateFactory.createState(totalOperationCost)); + +// //this is rather strange and likely to change +// vehicleRoute.getVehicleRouteCostCalculator().price(vehicleRoute.getDriver()); +// vehicleRoute.getVehicleRouteCostCalculator().price(vehicleRoute.getVehicle()); +// vehicleRoute.getVehicleRouteCostCalculator().finish(); + + startTimeAtPrevAct = 0.0; + prevAct = null; + vehicleRoute = null; + totalOperationCost = 0.0; + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/basics/algo/IterationWithoutImprovementBreaker.java b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/IterationWithoutImprovementTermination.java similarity index 83% rename from jsprit-core/src/main/java/basics/algo/IterationWithoutImprovementBreaker.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/termination/IterationWithoutImprovementTermination.java index 60478f93..dd14af26 100644 --- a/jsprit-core/src/main/java/basics/algo/IterationWithoutImprovementBreaker.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/IterationWithoutImprovementTermination.java @@ -14,21 +14,22 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.termination; + +import jsprit.core.algorithm.SearchStrategy.DiscoveredSolution; import org.apache.log4j.Logger; -import basics.algo.SearchStrategy.DiscoveredSolution; -public class IterationWithoutImprovementBreaker implements PrematureAlgorithmBreaker{ +public class IterationWithoutImprovementTermination implements PrematureAlgorithmTermination{ - private static Logger log = Logger.getLogger(IterationWithoutImprovementBreaker.class); + private static Logger log = Logger.getLogger(IterationWithoutImprovementTermination.class); private int nuOfIterationWithoutImprovement; private int iterationsWithoutImprovement = 0; - public IterationWithoutImprovementBreaker(int nuOfIterationsWithoutImprovement){ + public IterationWithoutImprovementTermination(int nuOfIterationsWithoutImprovement){ this.nuOfIterationWithoutImprovement=nuOfIterationsWithoutImprovement; log.info("initialise " + this); } diff --git a/jsprit-core/src/main/java/basics/algo/PrematureAlgorithmBreaker.java b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/PrematureAlgorithmTermination.java similarity index 86% rename from jsprit-core/src/main/java/basics/algo/PrematureAlgorithmBreaker.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/termination/PrematureAlgorithmTermination.java index 0fe78f55..78d31e5d 100644 --- a/jsprit-core/src/main/java/basics/algo/PrematureAlgorithmBreaker.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/PrematureAlgorithmTermination.java @@ -14,11 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.termination; -import basics.algo.SearchStrategy.DiscoveredSolution; +import jsprit.core.algorithm.SearchStrategy.DiscoveredSolution; -public interface PrematureAlgorithmBreaker { +public interface PrematureAlgorithmTermination { public boolean isPrematureBreak(DiscoveredSolution discoveredSolution); diff --git a/jsprit-core/src/main/java/basics/algo/TimeBreaker.java b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/TimeTermination.java similarity index 58% rename from jsprit-core/src/main/java/basics/algo/TimeBreaker.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/termination/TimeTermination.java index 267a6151..641e3337 100644 --- a/jsprit-core/src/main/java/basics/algo/TimeBreaker.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/TimeTermination.java @@ -14,28 +14,48 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.termination; import java.util.Collection; +import jsprit.core.algorithm.SearchStrategy.DiscoveredSolution; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.apache.log4j.Logger; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.SearchStrategy.DiscoveredSolution; -public class TimeBreaker implements PrematureAlgorithmBreaker, AlgorithmStartsListener{ +/** + * Breaks algorithm prematurely based on specified time. + * + *

Note, TimeBreaker must be registered as AlgorithmListener
+ * agorithm.getAlgorithmListeners().addListener(this); + * + * @author stefan + * + */ +public class TimeTermination implements PrematureAlgorithmTermination, AlgorithmStartsListener{ - private static Logger logger = Logger.getLogger(TimeBreaker.class); + private static Logger logger = Logger.getLogger(TimeTermination.class); private double timeThreshold; private double startTime; - public TimeBreaker(double time) { + /** + * Constructs TimeBreaker that breaks algorithm prematurely based on specified time. + * + *

Note, TimeBreaker must be registered as AlgorithmListener
+ * agorithm.getAlgorithmListeners().addListener(this); + * + * @author stefan + * + */ + public TimeTermination(double time_in_seconds) { super(); - this.timeThreshold = time; + this.timeThreshold = time_in_seconds; logger.info("initialise " + this); } diff --git a/jsprit-core/src/main/java/basics/algo/VariationCoefficientBreaker.java b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/VariationCoefficientTermination.java similarity index 73% rename from jsprit-core/src/main/java/basics/algo/VariationCoefficientBreaker.java rename to jsprit-core/src/main/java/jsprit/core/algorithm/termination/VariationCoefficientTermination.java index e3f271fc..f5fe144f 100644 --- a/jsprit-core/src/main/java/basics/algo/VariationCoefficientBreaker.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/termination/VariationCoefficientTermination.java @@ -14,23 +14,37 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm.termination; import java.util.Collection; +import jsprit.core.algorithm.SearchStrategy.DiscoveredSolution; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.algorithm.listener.IterationEndsListener; +import jsprit.core.algorithm.listener.IterationStartsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.util.Solutions; + import org.apache.commons.math.stat.StatUtils; import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; import org.apache.log4j.Logger; -import util.Solutions; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.SearchStrategy.DiscoveredSolution; -public class VariationCoefficientBreaker implements PrematureAlgorithmBreaker, IterationStartsListener, AlgorithmStartsListener, IterationEndsListener{ +/** + * Breaks algorithm prematurely based on variationCoefficient. + * + *

Note that this must be registered in algorithm
+ * algorithm.getAlgorithmListeners().addListener(this); + * + * + * @author stefan + * + */ +public class VariationCoefficientTermination implements PrematureAlgorithmTermination, IterationStartsListener, AlgorithmStartsListener, IterationEndsListener{ - private static Logger logger = Logger.getLogger(VariationCoefficientBreaker.class); + private static Logger logger = Logger.getLogger(VariationCoefficientTermination.class); private int nuOfIterations; @@ -42,7 +56,17 @@ public class VariationCoefficientBreaker implements PrematureAlgorithmBreaker, I private VehicleRoutingProblemSolution lastAccepted = null; - public VariationCoefficientBreaker(int nuOfIterations, double variationCoefficientThreshold) { + /** + * Breaks algorithm prematurely based on variationCoefficient. + * + *

Note that this must be registered in algorithm
+ * algorithm.getAlgorithmListeners().addListener(this); + * + * + * @author stefan + * + */ + public VariationCoefficientTermination(int nuOfIterations, double variationCoefficientThreshold) { super(); this.nuOfIterations = nuOfIterations; this.variationCoefficientThreshold = variationCoefficientThreshold; diff --git a/jsprit-core/src/main/java/basics/VehicleRoutingProblem.java b/jsprit-core/src/main/java/jsprit/core/problem/VehicleRoutingProblem.java similarity index 82% rename from jsprit-core/src/main/java/basics/VehicleRoutingProblem.java rename to jsprit-core/src/main/java/jsprit/core/problem/VehicleRoutingProblem.java index 78035117..5aa28690 100644 --- a/jsprit-core/src/main/java/basics/VehicleRoutingProblem.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/VehicleRoutingProblem.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem; import java.util.ArrayList; import java.util.Collection; @@ -22,18 +22,25 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.CrowFlyCosts; +import jsprit.core.util.Locations; +import jsprit.core.util.Neighborhood; + import org.apache.log4j.Logger; -import util.Coordinate; -import util.CrowFlyCosts; -import util.Locations; -import util.Neighborhood; -import basics.costs.DefaultVehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Vehicle; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; /** * Contains and describes the vehicle routing problem. @@ -55,7 +62,7 @@ public class VehicleRoutingProblem { /** * Overall problem constraints. * - *

DELIIVERIES_FIRST corresponds to the vehicle routing problem with back hauls, i.e. before a vehicle is not entirely unloaded, no pickup can be made. + *

DELIVERIES_FIRST corresponds to the vehicle routing problem with back hauls, i.e. before a vehicle is not entirely unloaded, no pickup can be made. * * @author stefan * @@ -81,7 +88,19 @@ public class VehicleRoutingProblem { private VehicleRoutingTransportCosts transportCosts; - private VehicleRoutingActivityCosts activityCosts = new DefaultVehicleRoutingActivityCosts(); + private VehicleRoutingActivityCosts activityCosts = new VehicleRoutingActivityCosts() { + + @Override + public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle) { + return 0; + } + + @Override + public String toString() { + return "[name=defaultActivityCosts]"; + } + + }; private Map jobs; @@ -201,9 +220,11 @@ public class VehicleRoutingProblem { * *

FleetComposition is either FleetComposition.HETEROGENEOUS or FleetComposition.HOMOGENEOUS * + * @deprecated has no effect * @param fleetComposition * @return */ + @Deprecated public Builder setFleetComposition(FleetComposition fleetComposition){ this.fleetComposition = fleetComposition; return this; @@ -214,9 +235,11 @@ public class VehicleRoutingProblem { * *

If jobList already contains service, a warning message is printed, and the existing job will be overwritten. * + * @deprecated use addJob(...) instead * @param service * @return */ + @Deprecated public Builder addService(Service service){ coordinates.put(service.getLocationId(), service.getCoord()); if(jobs.containsKey(service.getId())){ logger.warn("service " + service + " already in job list. overrides existing job."); } @@ -228,19 +251,33 @@ public class VehicleRoutingProblem { /** * Adds a job which is either a service or a shipment. * + *

Note that job.getId() must be unique, i.e. no job (either it is a shipment or a service) is allowed to have an already allocated id. + * * @param job * @return - * @throws IllegalStateException if job is neither a shipment or a service. + * @throws IllegalStateException if job is neither a shipment or a service, or jobId has already been added. */ public Builder addJob(Job job) { - if(job instanceof Service) { + if(jobs.containsKey(job.getId())) throw new IllegalStateException("jobList already contains a job with id " + job.getId() + ". make sure you use unique ids for your jobs (i.e. service and shipments)"); + if(job instanceof Service) { addService((Service) job); + return this; } - else throw new IllegalStateException("job can only be a shipment or a service, but is instance of " + job.getClass()); - return this; + else if(job instanceof Shipment){ + addShipment((Shipment)job); + return this; + } + throw new IllegalStateException("job must be either a service or a shipment"); } + private void addShipment(Shipment job) { + if(jobs.containsKey(job.getId())){ logger.warn("job " + job + " already in job list. overrides existing job."); } + coordinates.put(job.getPickupLocation(), job.getPickupCoord()); + coordinates.put(job.getDeliveryLocation(), job.getDeliveryCoord()); + jobs.put(job.getId(),job); + } + /** * Adds a vehicle. * @@ -260,9 +297,11 @@ public class VehicleRoutingProblem { /** * Adds a vehicleType. * + * @deprecated use add vehicle instead * @param type * @return builder */ + @Deprecated public Builder addVehicleType(VehicleType type){ vehicleTypes.add(type); return this; @@ -301,7 +340,7 @@ public class VehicleRoutingProblem { * @return {@link VehicleRoutingProblem} */ public VehicleRoutingProblem build() { - log.info("build problem ..."); + logger.info("build problem ..."); if(transportCosts == null){ logger.warn("set routing costs crowFlyDistance."); transportCosts = new CrowFlyCosts(getLocations()); @@ -357,6 +396,10 @@ public class VehicleRoutingProblem { public Collection getAddedServices(){ return Collections.unmodifiableCollection(services); } + + public Collection getAddedJobs(){ + return Collections.unmodifiableCollection(jobs.values()); + } } /** @@ -375,11 +418,10 @@ public class VehicleRoutingProblem { * @author sschroeder * */ + @Deprecated public static enum FleetComposition { HETEROGENEOUS, HOMOGENEOUS; } - - public static Logger log = Logger.getLogger(VehicleRoutingProblem.class); private static Logger logger = Logger.getLogger(VehicleRoutingProblem.class); @@ -424,7 +466,7 @@ public class VehicleRoutingProblem { this.activityCosts = builder.activityCosts; this.neighborhood = builder.neighborhood; this.problemConstraints = builder.problemConstraints; - log.info("initialise " + this); + logger.info("initialise " + this); } @Override diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ConstraintManager.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ConstraintManager.java new file mode 100644 index 00000000..68677b2a --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ConstraintManager.java @@ -0,0 +1,69 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Constraint; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; + +public class ConstraintManager implements HardActivityStateLevelConstraint, HardRouteStateLevelConstraint{ + + public static enum Priority { + CRITICAL, HIGH, LOW + } + + private HardActivityLevelConstraintManager actLevelConstraintManager = new HardActivityLevelConstraintManager(); + + private HardRouteLevelConstraintManager routeLevelConstraintManager = new HardRouteLevelConstraintManager(); + + private VehicleRoutingProblem vrp; + + private RouteAndActivityStateGetter stateManager; + + private boolean loadConstraintsSet = false; + + private boolean timeWindowConstraintsSet = false; + + public ConstraintManager(VehicleRoutingProblem vrp, RouteAndActivityStateGetter stateManager) { + this.vrp = vrp; + this.stateManager = stateManager; + } + + public void addTimeWindowConstraint(){ + if(!timeWindowConstraintsSet){ + addConstraint(new TimeWindowConstraint(stateManager, vrp.getTransportCosts()),Priority.HIGH); + timeWindowConstraintsSet = true; + } + } + + public void addLoadConstraint(){ + if(!loadConstraintsSet){ + if(vrp.getProblemConstraints().contains(Constraint.DELIVERIES_FIRST)){ + addConstraint(new ServiceDeliveriesFirstConstraint(),Priority.HIGH); + } + addConstraint(new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager),Priority.CRITICAL); + addConstraint(new ServiceLoadRouteLevelConstraint(stateManager)); + addConstraint(new ServiceLoadActivityLevelConstraint(stateManager),Priority.LOW); + loadConstraintsSet=true; + } + } + + public void addConstraint(HardActivityStateLevelConstraint actLevelConstraint, Priority priority){ + actLevelConstraintManager.addConstraint(actLevelConstraint,priority); + } + + public void addConstraint(HardRouteStateLevelConstraint routeLevelConstraint){ + routeLevelConstraintManager.addConstraint(routeLevelConstraint); + } + + @Override + public boolean fulfilled(JobInsertionContext insertionContext) { + return routeLevelConstraintManager.fulfilled(insertionContext); + } + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct,TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + return actLevelConstraintManager.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardActivityLevelConstraintManager.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardActivityLevelConstraintManager.java new file mode 100644 index 00000000..1cad4e3f --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardActivityLevelConstraintManager.java @@ -0,0 +1,70 @@ +package jsprit.core.problem.constraint; + +import java.util.ArrayList; +import java.util.Collection; + +import jsprit.core.problem.constraint.ConstraintManager.Priority; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.TourActivity; + + +class HardActivityLevelConstraintManager implements HardActivityStateLevelConstraint { + + private Collection criticalConstraints = new ArrayList(); + + private Collection highPrioConstraints = new ArrayList(); + + private Collection lowPrioConstraints = new ArrayList(); + + public void addConstraint(HardActivityStateLevelConstraint constraint, Priority priority){ + if(priority.equals(Priority.CRITICAL)){ + criticalConstraints.add(constraint); + } + else if(priority.equals(Priority.HIGH)){ + highPrioConstraints.add(constraint); + } + else{ + lowPrioConstraints.add(constraint); + } + } + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + ConstraintsStatus notFulfilled = null; + for(HardActivityStateLevelConstraint c : criticalConstraints){ + ConstraintsStatus status = c.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); + if(status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK)){ + return status; + } + else{ + if(status.equals(ConstraintsStatus.NOT_FULFILLED)){ + notFulfilled = status; + } + } + } + if(notFulfilled != null) return notFulfilled; + + for(HardActivityStateLevelConstraint c : highPrioConstraints){ + ConstraintsStatus status = c.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); + if(status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK)){ + return status; + } + else{ + if(status.equals(ConstraintsStatus.NOT_FULFILLED)){ + notFulfilled = status; + } + } + } + if(notFulfilled != null) return notFulfilled; + + for(HardActivityStateLevelConstraint constraint : lowPrioConstraints){ + ConstraintsStatus status = constraint.fulfilled(iFacts, prevAct, newAct, nextAct, prevActDepTime); + if(status.equals(ConstraintsStatus.NOT_FULFILLED_BREAK) || status.equals(ConstraintsStatus.NOT_FULFILLED)){ + return status; + } + } + + return ConstraintsStatus.FULFILLED; + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardActivityStateLevelConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardActivityStateLevelConstraint.java new file mode 100644 index 00000000..5e77ba3a --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardActivityStateLevelConstraint.java @@ -0,0 +1,16 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.TourActivity; + +public interface HardActivityStateLevelConstraint { + + static enum ConstraintsStatus { + + NOT_FULFILLED_BREAK, NOT_FULFILLED, FULFILLED; + + } + + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime); + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardRouteLevelConstraintManager.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardRouteLevelConstraintManager.java new file mode 100644 index 00000000..8aa485a6 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardRouteLevelConstraintManager.java @@ -0,0 +1,27 @@ +package jsprit.core.problem.constraint; + +import java.util.ArrayList; +import java.util.Collection; + +import jsprit.core.problem.misc.JobInsertionContext; + + +class HardRouteLevelConstraintManager implements HardRouteStateLevelConstraint { + + private Collection hardConstraints = new ArrayList(); + + public void addConstraint(HardRouteStateLevelConstraint constraint){ + hardConstraints.add(constraint); + } + + @Override + public boolean fulfilled(JobInsertionContext insertionContext) { + for(HardRouteStateLevelConstraint constraint : hardConstraints){ + if(!constraint.fulfilled(insertionContext)){ + return false; + } + } + return true; + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardRouteStateLevelConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardRouteStateLevelConstraint.java new file mode 100644 index 00000000..b0fa1398 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/HardRouteStateLevelConstraint.java @@ -0,0 +1,10 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.misc.JobInsertionContext; + + +public interface HardRouteStateLevelConstraint { + + public boolean fulfilled(JobInsertionContext insertionContext); + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/PickupAndDeliverShipmentLoadActivityLevelConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/PickupAndDeliverShipmentLoadActivityLevelConstraint.java new file mode 100644 index 00000000..9e495a56 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/PickupAndDeliverShipmentLoadActivityLevelConstraint.java @@ -0,0 +1,69 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.DeliverShipment; +import jsprit.core.problem.solution.route.activity.PickupShipment; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; + +import org.apache.log4j.Logger; + + +/** + * Constraint that ensures capacity constraint at each activity. + * + *

This is critical to consistently calculate pd-problems with capacity constraints. Critical means + * that is MUST be visited. It also assumes that pd-activities are visited in the order they occur in a tour. + * + * @author schroeder + * + */ +public class PickupAndDeliverShipmentLoadActivityLevelConstraint implements HardActivityStateLevelConstraint { + + private static Logger logger = Logger.getLogger(PickupAndDeliverShipmentLoadActivityLevelConstraint.class); + + private RouteAndActivityStateGetter stateManager; + + /** + * Constructs the constraint ensuring capacity constraint at each activity. + * + *

This is critical to consistently calculate pd-problems with capacity constraints. Critical means + * that is MUST be visited. It also assumes that pd-activities are visited in the order they occur in a tour. + * + * + * @param stateManager + */ + public PickupAndDeliverShipmentLoadActivityLevelConstraint(RouteAndActivityStateGetter stateManager) { + super(); + this.stateManager = stateManager; + } + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + if(!(newAct instanceof PickupShipment) && !(newAct instanceof DeliverShipment)){ + return ConstraintsStatus.FULFILLED; + } + int loadAtPrevAct; + if(prevAct instanceof Start){ + loadAtPrevAct = (int)stateManager.getRouteState(iFacts.getRoute(), StateFactory.LOAD_AT_BEGINNING).toDouble(); + } + else{ + loadAtPrevAct = (int) stateManager.getActivityState(prevAct, StateFactory.LOAD).toDouble(); + } + if(newAct instanceof PickupShipment){ + if(loadAtPrevAct + newAct.getCapacityDemand() > iFacts.getNewVehicle().getCapacity()){ + return ConstraintsStatus.NOT_FULFILLED; + } + } + if(newAct instanceof DeliverShipment){ + if(loadAtPrevAct + Math.abs(newAct.getCapacityDemand()) > iFacts.getNewVehicle().getCapacity()){ + return ConstraintsStatus.NOT_FULFILLED_BREAK; + } + } + return ConstraintsStatus.FULFILLED; + } + + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceDeliveriesFirstConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceDeliveriesFirstConstraint.java new file mode 100644 index 00000000..2cc0a952 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceDeliveriesFirstConstraint.java @@ -0,0 +1,28 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.DeliverService; +import jsprit.core.problem.solution.route.activity.DeliverShipment; +import jsprit.core.problem.solution.route.activity.PickupService; +import jsprit.core.problem.solution.route.activity.PickupShipment; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.TourActivity; + +public class ServiceDeliveriesFirstConstraint implements HardActivityStateLevelConstraint { + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + if(newAct instanceof PickupService && nextAct instanceof DeliverService){ return ConstraintsStatus.NOT_FULFILLED; } + if(newAct instanceof ServiceActivity && nextAct instanceof DeliverService){ return ConstraintsStatus.NOT_FULFILLED; } + if(newAct instanceof DeliverService && prevAct instanceof PickupService){ return ConstraintsStatus.NOT_FULFILLED_BREAK; } + if(newAct instanceof DeliverService && prevAct instanceof ServiceActivity){ return ConstraintsStatus.NOT_FULFILLED_BREAK; } + + if(newAct instanceof DeliverService && prevAct instanceof PickupShipment){ return ConstraintsStatus.NOT_FULFILLED_BREAK; } + if(newAct instanceof DeliverService && prevAct instanceof DeliverShipment){ return ConstraintsStatus.NOT_FULFILLED_BREAK; } + if(newAct instanceof PickupShipment && nextAct instanceof DeliverService){ return ConstraintsStatus.NOT_FULFILLED;} + if(newAct instanceof DeliverShipment && nextAct instanceof DeliverService){ return ConstraintsStatus.NOT_FULFILLED;} + + return ConstraintsStatus.FULFILLED; + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadActivityLevelConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadActivityLevelConstraint.java new file mode 100644 index 00000000..41e5a6ce --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadActivityLevelConstraint.java @@ -0,0 +1,64 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.DeliverService; +import jsprit.core.problem.solution.route.activity.PickupService; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; + +import org.apache.log4j.Logger; + + +/** + * Ensures load constraint for inserting ServiceActivity. + * + *

When using this, you need to use
+ * + * + * @author schroeder + * + */ +class ServiceLoadActivityLevelConstraint implements HardActivityStateLevelConstraint { + + private static Logger log = Logger.getLogger(ServiceLoadActivityLevelConstraint.class); + + private RouteAndActivityStateGetter stateManager; + + public ServiceLoadActivityLevelConstraint(RouteAndActivityStateGetter stateManager) { + super(); + this.stateManager = stateManager; + } + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + int futureMaxLoad; + int prevMaxLoad; + if(prevAct instanceof Start){ + futureMaxLoad = (int)stateManager.getRouteState(iFacts.getRoute(), StateFactory.MAXLOAD).toDouble(); + prevMaxLoad = (int)stateManager.getRouteState(iFacts.getRoute(), StateFactory.LOAD_AT_BEGINNING).toDouble(); + } + else{ + futureMaxLoad = (int) stateManager.getActivityState(prevAct, StateFactory.FUTURE_MAXLOAD).toDouble(); + prevMaxLoad = (int) stateManager.getActivityState(prevAct, StateFactory.PAST_MAXLOAD).toDouble(); + + } + if(newAct instanceof PickupService || newAct instanceof ServiceActivity){ + if(newAct.getCapacityDemand() + futureMaxLoad > iFacts.getNewVehicle().getCapacity()){ +// log.debug("insertionOf("+newAct+").BETWEEN("+prevAct+").AND("+nextAct+")=NOT_POSSIBLE"); + return ConstraintsStatus.NOT_FULFILLED; + } + } + if(newAct instanceof DeliverService){ + if(Math.abs(newAct.getCapacityDemand()) + prevMaxLoad > iFacts.getNewVehicle().getCapacity()){ +// log.debug("insertionOf("+newAct+").BETWEEN("+prevAct+").AND("+nextAct+")=NOT_POSSIBLE[break=neverBePossibleAnymore]"); + return ConstraintsStatus.NOT_FULFILLED_BREAK; + } + + } +// log.debug("insertionOf("+newAct+").BETWEEN("+prevAct+").AND("+nextAct+")=POSSIBLE"); + return ConstraintsStatus.FULFILLED; + } +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraint.java new file mode 100644 index 00000000..2a06c2f5 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ServiceLoadRouteLevelConstraint.java @@ -0,0 +1,42 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; + +/** + * lsjdfjsdlfjsa + * + * @author stefan + * + */ +class ServiceLoadRouteLevelConstraint implements HardRouteStateLevelConstraint { + + private RouteAndActivityStateGetter stateManager; + + public ServiceLoadRouteLevelConstraint(RouteAndActivityStateGetter stateManager) { + super(); + this.stateManager = stateManager; + } + + @Override + public boolean fulfilled(JobInsertionContext insertionContext) { + if(insertionContext.getJob() instanceof Delivery){ + int loadAtDepot = (int) stateManager.getRouteState(insertionContext.getRoute(), StateFactory.LOAD_AT_BEGINNING).toDouble(); + if(loadAtDepot + insertionContext.getJob().getCapacityDemand() > insertionContext.getNewVehicle().getCapacity()){ + return false; + } + } + else if(insertionContext.getJob() instanceof Pickup || insertionContext.getJob() instanceof Service){ + int loadAtEnd = (int) stateManager.getRouteState(insertionContext.getRoute(), StateFactory.LOAD_AT_END).toDouble(); + if(loadAtEnd + insertionContext.getJob().getCapacityDemand() > insertionContext.getNewVehicle().getCapacity()){ + return false; + } + } + return true; + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/ShipmentPickupsFirstConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ShipmentPickupsFirstConstraint.java new file mode 100644 index 00000000..c2f334d6 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/ShipmentPickupsFirstConstraint.java @@ -0,0 +1,17 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.DeliverShipment; +import jsprit.core.problem.solution.route.activity.PickupShipment; +import jsprit.core.problem.solution.route.activity.TourActivity; + +public class ShipmentPickupsFirstConstraint implements HardActivityStateLevelConstraint { + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + if(newAct instanceof DeliverShipment && nextAct instanceof PickupShipment){ return ConstraintsStatus.NOT_FULFILLED; } + if(newAct instanceof PickupShipment && prevAct instanceof DeliverShipment){ return ConstraintsStatus.NOT_FULFILLED_BREAK; } + return ConstraintsStatus.FULFILLED; + } + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/jsprit/core/problem/constraint/TimeWindowConstraint.java b/jsprit-core/src/main/java/jsprit/core/problem/constraint/TimeWindowConstraint.java new file mode 100644 index 00000000..b5a2266a --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/constraint/TimeWindowConstraint.java @@ -0,0 +1,56 @@ +package jsprit.core.problem.constraint; + +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.RouteAndActivityStateGetter; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.util.CalculationUtils; + +import org.apache.log4j.Logger; + + +/** + * ljsljslfjs + * @author stefan + * + */ + class TimeWindowConstraint implements HardActivityStateLevelConstraint { + + private static Logger log = Logger.getLogger(TimeWindowConstraint.class); + + private RouteAndActivityStateGetter states; + + private VehicleRoutingTransportCosts routingCosts; + + public TimeWindowConstraint(RouteAndActivityStateGetter states, VehicleRoutingTransportCosts routingCosts) { + super(); + this.states = states; + this.routingCosts = routingCosts; + } + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + if(newAct.getTheoreticalLatestOperationStartTime() < prevAct.getTheoreticalEarliestOperationStartTime()){ + return ConstraintsStatus.NOT_FULFILLED_BREAK; + } + if(newAct.getTheoreticalEarliestOperationStartTime() > nextAct.getTheoreticalLatestOperationStartTime()){ + return ConstraintsStatus.NOT_FULFILLED; + } + // log.info("check insertion of " + newAct + " between " + prevAct + " and " + nextAct + ". prevActDepTime=" + prevActDepTime); + double arrTimeAtNewAct = prevActDepTime + routingCosts.getTransportTime(prevAct.getLocationId(), newAct.getLocationId(), prevActDepTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); + double latestArrTimeAtNewAct = states.getActivityState(newAct, StateFactory.LATEST_OPERATION_START_TIME).toDouble(); + + if(arrTimeAtNewAct > latestArrTimeAtNewAct){ + return ConstraintsStatus.NOT_FULFILLED; + } +// log.info(newAct + " arrTime=" + arrTimeAtNewAct); + double endTimeAtNewAct = CalculationUtils.getActivityEndTime(arrTimeAtNewAct, newAct); + double arrTimeAtNextAct = endTimeAtNewAct + routingCosts.getTransportTime(newAct.getLocationId(), nextAct.getLocationId(), endTimeAtNewAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); + double latestArrTimeAtNextAct = states.getActivityState(nextAct, StateFactory.LATEST_OPERATION_START_TIME).toDouble(); + if(arrTimeAtNextAct > latestArrTimeAtNextAct){ + return ConstraintsStatus.NOT_FULFILLED; + } + return ConstraintsStatus.FULFILLED; + } + } \ No newline at end of file diff --git a/jsprit-core/src/main/java/basics/costs/BackwardTransportCost.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/BackwardTransportCost.java similarity index 89% rename from jsprit-core/src/main/java/basics/costs/BackwardTransportCost.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/BackwardTransportCost.java index 6cc76840..c9fbe8aa 100644 --- a/jsprit-core/src/main/java/basics/costs/BackwardTransportCost.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/BackwardTransportCost.java @@ -14,10 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; -import basics.route.Driver; -import basics.route.Vehicle; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; public interface BackwardTransportCost { diff --git a/jsprit-core/src/main/java/basics/costs/BackwardTransportTime.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/BackwardTransportTime.java similarity index 89% rename from jsprit-core/src/main/java/basics/costs/BackwardTransportTime.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/BackwardTransportTime.java index 59160318..d5b81ffc 100644 --- a/jsprit-core/src/main/java/basics/costs/BackwardTransportTime.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/BackwardTransportTime.java @@ -14,10 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; -import basics.route.Driver; -import basics.route.Vehicle; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; public interface BackwardTransportTime { diff --git a/jsprit-core/src/main/java/basics/costs/ForwardTransportCost.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/ForwardTransportCost.java similarity index 89% rename from jsprit-core/src/main/java/basics/costs/ForwardTransportCost.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/ForwardTransportCost.java index cea96390..9bc1b9e3 100644 --- a/jsprit-core/src/main/java/basics/costs/ForwardTransportCost.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/ForwardTransportCost.java @@ -14,10 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; -import basics.route.Driver; -import basics.route.Vehicle; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; public interface ForwardTransportCost { diff --git a/jsprit-core/src/main/java/basics/costs/ForwardTransportTime.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/ForwardTransportTime.java similarity index 89% rename from jsprit-core/src/main/java/basics/costs/ForwardTransportTime.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/ForwardTransportTime.java index ab277e15..01c02cb1 100644 --- a/jsprit-core/src/main/java/basics/costs/ForwardTransportTime.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/ForwardTransportTime.java @@ -14,10 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; -import basics.route.Driver; -import basics.route.Vehicle; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; public interface ForwardTransportTime { diff --git a/jsprit-core/src/main/java/basics/costs/TransportCost.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/TransportCost.java similarity index 96% rename from jsprit-core/src/main/java/basics/costs/TransportCost.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/TransportCost.java index 011a7599..fedf31c6 100644 --- a/jsprit-core/src/main/java/basics/costs/TransportCost.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/TransportCost.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; public interface TransportCost extends ForwardTransportCost, BackwardTransportCost{ diff --git a/jsprit-core/src/main/java/basics/costs/TransportTime.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/TransportTime.java similarity index 96% rename from jsprit-core/src/main/java/basics/costs/TransportTime.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/TransportTime.java index 741df692..fdc70e29 100644 --- a/jsprit-core/src/main/java/basics/costs/TransportTime.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/TransportTime.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; public interface TransportTime extends ForwardTransportTime, BackwardTransportTime{ diff --git a/jsprit-core/src/main/java/basics/costs/VehicleRoutingActivityCosts.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/VehicleRoutingActivityCosts.java similarity index 92% rename from jsprit-core/src/main/java/basics/costs/VehicleRoutingActivityCosts.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/VehicleRoutingActivityCosts.java index deaefca2..cd043f37 100644 --- a/jsprit-core/src/main/java/basics/costs/VehicleRoutingActivityCosts.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/VehicleRoutingActivityCosts.java @@ -14,11 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; -import basics.route.Driver; -import basics.route.TourActivity; -import basics.route.Vehicle; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; /** * Interface for overall routing and operation costs. @@ -62,6 +62,5 @@ public interface VehicleRoutingActivityCosts { */ public double getActivityCost(TourActivity tourAct, double arrivalTime, Driver driver, Vehicle vehicle); -// public Parameter getParameter(TourActivity tourAct, Vehicle vehicle, Driver driver); } diff --git a/jsprit-core/src/main/java/basics/costs/VehicleRoutingTransportCosts.java b/jsprit-core/src/main/java/jsprit/core/problem/cost/VehicleRoutingTransportCosts.java similarity index 97% rename from jsprit-core/src/main/java/basics/costs/VehicleRoutingTransportCosts.java rename to jsprit-core/src/main/java/jsprit/core/problem/cost/VehicleRoutingTransportCosts.java index e4e5f5b0..60a2c2b3 100644 --- a/jsprit-core/src/main/java/basics/costs/VehicleRoutingTransportCosts.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/cost/VehicleRoutingTransportCosts.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.costs; +package jsprit.core.problem.cost; /** diff --git a/jsprit-core/src/main/java/basics/route/Driver.java b/jsprit-core/src/main/java/jsprit/core/problem/driver/Driver.java similarity index 96% rename from jsprit-core/src/main/java/basics/route/Driver.java rename to jsprit-core/src/main/java/jsprit/core/problem/driver/Driver.java index 216327ca..c64f4d39 100644 --- a/jsprit-core/src/main/java/basics/route/Driver.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/driver/Driver.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.driver; public interface Driver { diff --git a/jsprit-core/src/main/java/basics/route/DriverImpl.java b/jsprit-core/src/main/java/jsprit/core/problem/driver/DriverImpl.java similarity index 98% rename from jsprit-core/src/main/java/basics/route/DriverImpl.java rename to jsprit-core/src/main/java/jsprit/core/problem/driver/DriverImpl.java index 30743d02..a4787ac5 100644 --- a/jsprit-core/src/main/java/basics/route/DriverImpl.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/driver/DriverImpl.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.driver; public class DriverImpl implements Driver { diff --git a/jsprit-core/src/main/java/basics/io/Schema.java b/jsprit-core/src/main/java/jsprit/core/problem/io/Schema.java similarity index 98% rename from jsprit-core/src/main/java/basics/io/Schema.java rename to jsprit-core/src/main/java/jsprit/core/problem/io/Schema.java index 6457e1de..9bbdbb7b 100644 --- a/jsprit-core/src/main/java/basics/io/Schema.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/Schema.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.problem.io; final class Schema { diff --git a/jsprit-core/src/main/java/basics/io/VrpXMLReader.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java similarity index 63% rename from jsprit-core/src/main/java/basics/io/VrpXMLReader.java rename to jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java index 523c265d..b6e15ab6 100644 --- a/jsprit-core/src/main/java/basics/io/VrpXMLReader.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLReader.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.problem.io; import java.io.IOException; import java.io.InputStream; @@ -24,6 +24,28 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetComposition; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.End; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.solution.route.activity.TourActivityFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Resource; + import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.commons.configuration.XMLConfiguration; @@ -32,28 +54,6 @@ import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -import util.Coordinate; -import util.Resource; -import basics.Delivery; -import basics.Pickup; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetComposition; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.route.DefaultTourActivityFactory; -import basics.route.Driver; -import basics.route.DriverImpl; -import basics.route.End; -import basics.route.Start; -import basics.route.TimeWindow; -import basics.route.TourActivity; -import basics.route.TourActivityFactory; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleImpl.Builder; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; public class VrpXMLReader{ @@ -64,7 +64,7 @@ public class VrpXMLReader{ static class DefaultServiceBuilderFactory implements ServiceBuilderFactory{ @Override - public basics.Service.Builder createBuilder(String serviceType, String id, int size) { + public jsprit.core.problem.job.Service.Builder createBuilder(String serviceType, String id, int size) { if(serviceType.equals("pickup")){ return Pickup.Builder.newInstance(id, size); } @@ -77,6 +77,44 @@ public class VrpXMLReader{ } } + interface JobConfigReader { + + void readConfig(XMLConfiguration vrpProblem); + } + + static class ServiceConfigReader implements JobConfigReader{ + + VehicleRoutingProblem.Builder vrpBuilder; + + public ServiceConfigReader(jsprit.core.problem.VehicleRoutingProblem.Builder vrpBuilder) { + super(); + this.vrpBuilder = vrpBuilder; + } + + @Override + public void readConfig(XMLConfiguration config) { + + } + + } + + + static class ShipmentConfigReader implements JobConfigReader{ + + VehicleRoutingProblem.Builder vrpBuilder; + + public ShipmentConfigReader(jsprit.core.problem.VehicleRoutingProblem.Builder vrpBuilder) { + super(); + this.vrpBuilder = vrpBuilder; + } + + @Override + public void readConfig(XMLConfiguration config) { + + } + + } + private static Logger logger = Logger.getLogger(VrpXMLReader.class); @@ -86,16 +124,21 @@ public class VrpXMLReader{ private Map serviceMap; + private Map shipmentMap; + private boolean schemaValidation = true; private Collection solutions; private ServiceBuilderFactory serviceBuilderFactory = new DefaultServiceBuilderFactory(); - private TourActivityFactory tourActivityFactory = new DefaultTourActivityFactory(); + private Collection jobConfigReaders = new ArrayList(); + + public void addJobConfigReader(JobConfigReader reader){ + jobConfigReaders.add(reader); + } public void setTourActivityFactory(TourActivityFactory tourActivityFactory){ - this.tourActivityFactory = tourActivityFactory; } public void setServiceBuilderFactory(ServiceBuilderFactory serviceBuilderFactory){ @@ -113,6 +156,7 @@ public class VrpXMLReader{ this.vrpBuilder = vrpBuilder; this.vehicleMap = new HashMap(); this.serviceMap = new HashMap(); + this.shipmentMap = new HashMap(); this.solutions = solutions; } @@ -120,6 +164,7 @@ public class VrpXMLReader{ this.vrpBuilder = vrpBuilder; this.vehicleMap = new HashMap(); this.serviceMap = new HashMap(); + this.shipmentMap = new HashMap(); this.solutions = null; } @@ -160,7 +205,10 @@ public class VrpXMLReader{ } readProblemType(xmlConfig); readVehiclesAndTheirTypes(xmlConfig); + + readShipments(xmlConfig); readServices(xmlConfig); + readSolutions(xmlConfig); } @@ -188,24 +236,38 @@ public class VrpXMLReader{ startAct.setEndTime(Double.parseDouble(start)); End endAct = End.newInstance(vehicle.getLocationId(), vehicle.getEarliestDeparture(), vehicle.getLatestArrival()); endAct.setArrTime(Double.parseDouble(end)); - VehicleRoute.Builder routeBuilder = VehicleRoute.Builder.newInstance(startAct, endAct); - routeBuilder.setDriver(driver); - routeBuilder.setVehicle(vehicle); + + VehicleRoute.Builder routeBuilder = VehicleRoute.Builder.newInstance(vehicle, driver); List actConfigs = routeConfig.configurationsAt("act"); for(HierarchicalConfiguration actConfig : actConfigs){ String type = actConfig.getString("[@type]"); if(type == null) throw new IllegalStateException("act[@type] is missing."); + + String arrTimeS = actConfig.getString("arrTime"); + if(arrTimeS == null) throw new IllegalStateException("act.arrTime is missing."); + String endTimeS = actConfig.getString("endTime"); + if(endTimeS == null) throw new IllegalStateException("act.endTime is missing."); + double arrTime = Double.parseDouble(arrTimeS); + double endTime = Double.parseDouble(endTimeS); String serviceId = actConfig.getString("serviceId"); - if(serviceId == null) throw new IllegalStateException("act.serviceId is missing."); - Service service = getService(serviceId); - String arrTime = actConfig.getString("arrTime"); - if(arrTime == null) throw new IllegalStateException("act.arrTime is missing."); - String endTime = actConfig.getString("endTime"); - if(endTime == null) throw new IllegalStateException("act.endTime is missing."); - TourActivity tourActivity = tourActivityFactory.createActivity(service); - tourActivity.setArrTime(Double.parseDouble(arrTime)); - tourActivity.setEndTime(Double.parseDouble(endTime)); - routeBuilder.addActivity(tourActivity); + if(serviceId != null) { + Service service = getService(serviceId); + routeBuilder.addService(service, arrTime, endTime); + } + else{ + String shipmentId = actConfig.getString("shipmentId"); + if(shipmentId == null) throw new IllegalStateException("either serviceId or shipmentId is missing"); + Shipment shipment = getShipment(shipmentId); + if(shipment == null) throw new IllegalStateException("shipment with id " + shipmentId + " does not exist."); + if(type.equals("pickupShipment")){ + routeBuilder.addPickup(shipment, arrTime, endTime); + } + else if(type.equals("deliverShipment")){ + routeBuilder.addDelivery(shipment, arrTime, endTime); + } + else throw new IllegalStateException("type " + type + " is not supported. Use 'pickupShipment' or 'deliverShipment' here"); + } + } routes.add(routeBuilder.build()); } @@ -214,6 +276,9 @@ public class VrpXMLReader{ } } + private Shipment getShipment(String shipmentId) { + return shipmentMap.get(shipmentId); + } private Service getService(String serviceId) { return serviceMap.get(serviceId); } @@ -236,6 +301,79 @@ public class VrpXMLReader{ else vrpBuilder.setFleetComposition(FleetComposition.HOMOGENEOUS); } + + private void readShipments(XMLConfiguration config){ + List shipmentConfigs = config.configurationsAt("shipments.shipment"); + for(HierarchicalConfiguration shipmentConfig : shipmentConfigs){ + String id = shipmentConfig.getString("[@id]"); + if(id == null) throw new IllegalStateException("shipment[@id] is missing."); + int cap = getCap(shipmentConfig); + Shipment.Builder builder = Shipment.Builder.newInstance(id, cap); + + String pickupLocationId = shipmentConfig.getString("pickup.locationId"); + builder.setPickupLocation(pickupLocationId); + + Coordinate pickupCoord = getCoord(shipmentConfig,"pickup."); + builder.setPickupCoord(pickupCoord); + + if(pickupCoord != null){ + if(pickupLocationId != null){ + vrpBuilder.addLocation(pickupLocationId,pickupCoord); + } + else{ + vrpBuilder.addLocation(pickupCoord.toString(),pickupCoord); + builder.setPickupLocation(pickupCoord.toString()); + } + } + +// String pickupTWStart = shipmentConfig.getString("pickup.timeWindows.timeWindow(0).start"); +// String pickupTWEnd = shipmentConfig.getString("pickup.timeWindows.timeWindow(0).end"); +// TimeWindow pickupTW = TimeWindow.newInstance(Double.parseDouble(pickupTWStart), Double.parseDouble(pickupTWEnd)); +// builder.setPickupTimeWindow(pickupTW); + + String deliveryLocationId = shipmentConfig.getString("delivery.locationId"); + builder.setDeliveryLocation(deliveryLocationId); + + Coordinate deliveryCoord = getCoord(shipmentConfig,"delivery."); + builder.setDeliveryCoord(deliveryCoord); + + if(deliveryCoord != null){ + if(deliveryLocationId != null){ + vrpBuilder.addLocation(deliveryLocationId,deliveryCoord); + } + else{ + vrpBuilder.addLocation(deliveryCoord.toString(),deliveryCoord); + builder.setPickupLocation(deliveryCoord.toString()); + } + } + + String delTWStart = shipmentConfig.getString("delivery.timeWindows.timeWindow(0).start"); + String delTWEnd = shipmentConfig.getString("delivery.timeWindows.timeWindow(0).end"); + TimeWindow delTW = TimeWindow.newInstance(Double.parseDouble(delTWStart), Double.parseDouble(delTWEnd)); + builder.setDeliveryTimeWindow(delTW); + + Shipment shipment = builder.build(); + vrpBuilder.addJob(shipment); + shipmentMap .put(shipment.getId(),shipment); + } + } + + private static Coordinate getCoord(HierarchicalConfiguration serviceConfig, String prefix) { + Coordinate pickupCoord = null; + if(serviceConfig.getString(prefix + "coord[@x]") != null && serviceConfig.getString(prefix + "coord[@y]") != null){ + double x = Double.parseDouble(serviceConfig.getString(prefix + "coord[@x]")); + double y = Double.parseDouble(serviceConfig.getString(prefix + "coord[@y]")); + pickupCoord = Coordinate.newInstance(x,y); + } + return pickupCoord; + } + + private static int getCap(HierarchicalConfiguration serviceConfig) { + String capacityDemand = serviceConfig.getString("capacity-demand"); + int cap = 0; + if(capacityDemand != null) cap = Integer.parseInt(capacityDemand); + return cap; + } private void readServices(XMLConfiguration vrpProblem) { List serviceConfigs = vrpProblem.configurationsAt("services.service"); @@ -244,18 +382,11 @@ public class VrpXMLReader{ if(id == null) throw new IllegalStateException("service[@id] is missing."); String type = serviceConfig.getString("[@type]"); if(type == null) type = "service"; - String capacityDemand = serviceConfig.getString("capacity-demand"); - int cap = 0; - if(capacityDemand != null) cap = Integer.parseInt(capacityDemand); + int cap = getCap(serviceConfig); Service.Builder builder = serviceBuilderFactory.createBuilder(type, id, cap); String serviceLocationId = serviceConfig.getString("locationId"); builder.setLocationId(serviceLocationId); - Coordinate serviceCoord = null; - if(serviceConfig.getString("coord[@x]") != null && serviceConfig.getString("coord[@y]") != null){ - double x = Double.parseDouble(serviceConfig.getString("coord[@x]")); - double y = Double.parseDouble(serviceConfig.getString("coord[@y]")); - serviceCoord = Coordinate.newInstance(x,y); - } + Coordinate serviceCoord = getCoord(serviceConfig,""); builder.setCoord(serviceCoord); if(serviceCoord != null){ if(serviceLocationId != null){ @@ -301,7 +432,7 @@ public class VrpXMLReader{ if(distC != null) typeBuilder.setCostPerDistance(distC); VehicleTypeImpl type = typeBuilder.build(); types.put(type.getTypeId(), type); - vrpBuilder.addVehicleType(type); +// vrpBuilder.addVehicleType(type); } //read vehicles diff --git a/jsprit-core/src/main/java/basics/io/VrpXMLWriter.java b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java similarity index 67% rename from jsprit-core/src/main/java/basics/io/VrpXMLWriter.java rename to jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java index 7c44ef3a..6167b29f 100644 --- a/jsprit-core/src/main/java/basics/io/VrpXMLWriter.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/io/VrpXMLWriter.java @@ -14,13 +14,24 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.problem.io; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.Collection; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleType; + import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; import org.apache.log4j.Logger; @@ -29,15 +40,6 @@ import org.apache.xml.serialize.XMLSerializer; import org.w3c.dom.Document; import org.w3c.dom.Element; -import basics.Job; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.route.TourActivity; -import basics.route.TourActivity.JobActivity; -import basics.route.Vehicle; -import basics.route.VehicleRoute; -import basics.route.VehicleType; public class VrpXMLWriter { @@ -69,6 +71,7 @@ public class VrpXMLWriter { private static Logger logger = Logger.getLogger(VrpXMLWriter.class); public void write(String filename){ + if(!filename.endsWith(".xml")) filename+=".xml"; log.info("write vrp to " + filename); XMLConf xmlConfig = new XMLConf(); xmlConfig.setFileName(filename); @@ -79,7 +82,8 @@ public class VrpXMLWriter { writeProblemType(xmlConfig); writeVehiclesAndTheirTypes(xmlConfig); - writerServices(xmlConfig); + writeServices(xmlConfig); + writeShipments(xmlConfig); writeSolutions(xmlConfig); OutputFormat format = new OutputFormat(); @@ -121,7 +125,7 @@ public class VrpXMLWriter { xmlConfig.setProperty(solutionPath + "(" + counter + ").cost", solution.getCost()); int routeCounter = 0; for(VehicleRoute route : solution.getRoutes()){ - xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").cost", route.getCost()); +// xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").cost", route.getCost()); xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").driverId", route.getDriver().getId()); xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").vehicleId", route.getVehicle().getId()); xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").start", route.getStart().getEndTime()); @@ -129,7 +133,16 @@ public class VrpXMLWriter { for(TourActivity act : route.getTourActivities().getActivities()){ xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").act("+actCounter+")[@type]", act.getName()); if(act instanceof JobActivity){ - xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").act("+actCounter+").serviceId", ((JobActivity) act).getJob().getId()); + Job job = ((JobActivity) act).getJob(); + if(job instanceof Service){ + xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").act("+actCounter+").serviceId", job.getId()); + } + else if(job instanceof Shipment){ + xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").act("+actCounter+").shipmentId", job.getId()); + } + else{ + throw new IllegalStateException("cannot write solution correctly since job-type is not know. make sure you use either service or shipment, or another writer"); + } } xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").act("+actCounter+").arrTime", act.getArrTime()); xmlConfig.setProperty(solutionPath + "(" + counter + ").routes.route(" + routeCounter + ").act("+actCounter+").endTime", act.getEndTime()); @@ -142,10 +155,11 @@ public class VrpXMLWriter { } } - private void writerServices(XMLConf xmlConfig) { + private void writeServices(XMLConf xmlConfig) { String shipmentPathString = "services.service"; int counter = 0; for(Job j : vrp.getJobs().values()){ + if(!(j instanceof Service)) continue; Service service = (Service) j; xmlConfig.setProperty(shipmentPathString + "("+counter+")[@id]", service.getId()); xmlConfig.setProperty(shipmentPathString + "("+counter+")[@type]", service.getType()); @@ -161,8 +175,41 @@ public class VrpXMLWriter { counter++; } - - + } + + private void writeShipments(XMLConf xmlConfig) { + String shipmentPathString = "shipments.shipment"; + int counter = 0; + for(Job j : vrp.getJobs().values()){ + if(!(j instanceof Shipment)) continue; + Shipment shipment = (Shipment) j; + xmlConfig.setProperty(shipmentPathString + "("+counter+")[@id]", shipment.getId()); +// xmlConfig.setProperty(shipmentPathString + "("+counter+")[@type]", service.getType()); + if(shipment.getPickupLocation() != null) xmlConfig.setProperty(shipmentPathString + "("+counter+").pickup.locationId", shipment.getPickupLocation()); + if(shipment.getPickupCoord() != null) { + xmlConfig.setProperty(shipmentPathString + "("+counter+").pickup.coord[@x]", shipment.getPickupCoord().getX()); + xmlConfig.setProperty(shipmentPathString + "("+counter+").pickup.coord[@y]", shipment.getPickupCoord().getY()); + } + + xmlConfig.setProperty(shipmentPathString + "("+counter+").pickup.duration", shipment.getPickupServiceTime()); + xmlConfig.setProperty(shipmentPathString + "("+counter+").pickup.timeWindows.timeWindow(0).start", shipment.getPickupTimeWindow().getStart()); + xmlConfig.setProperty(shipmentPathString + "("+counter+").pickup.timeWindows.timeWindow(0).end", shipment.getPickupTimeWindow().getEnd()); + + + if(shipment.getDeliveryLocation() != null) xmlConfig.setProperty(shipmentPathString + "("+counter+").delivery.locationId", shipment.getDeliveryLocation()); + if(shipment.getDeliveryCoord() != null) { + xmlConfig.setProperty(shipmentPathString + "("+counter+").delivery.coord[@x]", shipment.getDeliveryCoord().getX()); + xmlConfig.setProperty(shipmentPathString + "("+counter+").delivery.coord[@y]", shipment.getDeliveryCoord().getY()); + } + + xmlConfig.setProperty(shipmentPathString + "("+counter+").delivery.duration", shipment.getDeliveryServiceTime()); + xmlConfig.setProperty(shipmentPathString + "("+counter+").delivery.timeWindows.timeWindow(0).start", shipment.getDeliveryTimeWindow().getStart()); + xmlConfig.setProperty(shipmentPathString + "("+counter+").delivery.timeWindows.timeWindow(0).end", shipment.getDeliveryTimeWindow().getEnd()); + + + xmlConfig.setProperty(shipmentPathString + "("+counter+").capacity-demand", shipment.getCapacityDemand()); + counter++; + } } private void writeProblemType(XMLConfiguration xmlConfig){ diff --git a/jsprit-core/src/main/java/basics/Delivery.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Delivery.java similarity index 97% rename from jsprit-core/src/main/java/basics/Delivery.java rename to jsprit-core/src/main/java/jsprit/core/problem/job/Delivery.java index 7799dcac..cad46ce9 100644 --- a/jsprit-core/src/main/java/basics/Delivery.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Delivery.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem.job; public final class Delivery extends Service{ diff --git a/jsprit-core/src/main/java/basics/Job.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Job.java similarity index 96% rename from jsprit-core/src/main/java/basics/Job.java rename to jsprit-core/src/main/java/jsprit/core/problem/job/Job.java index 87249a36..50aec2bb 100644 --- a/jsprit-core/src/main/java/basics/Job.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Job.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem.job; public interface Job { diff --git a/jsprit-core/src/main/java/basics/Pickup.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Pickup.java similarity index 97% rename from jsprit-core/src/main/java/basics/Pickup.java rename to jsprit-core/src/main/java/jsprit/core/problem/job/Pickup.java index 34c167a4..96faa6b4 100644 --- a/jsprit-core/src/main/java/basics/Pickup.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Pickup.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem.job; public final class Pickup extends Service { diff --git a/jsprit-core/src/main/java/basics/Service.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java similarity index 92% rename from jsprit-core/src/main/java/basics/Service.java rename to jsprit-core/src/main/java/jsprit/core/problem/job/Service.java index 985e0b21..69e2e6c0 100644 --- a/jsprit-core/src/main/java/basics/Service.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Service.java @@ -14,10 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem.job; -import util.Coordinate; -import basics.route.TimeWindow; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.util.Coordinate; public class Service implements Job { @@ -139,7 +139,7 @@ public class Service implements Job { @Override public String toString() { - return "[id=" + id + "][locationId=" + locationId + "][coord="+coord+"][size=" + demand + "][serviceTime=" + serviceTime + "][timeWindow=" + timeWindow + "]"; + return "[id=" + id + "][type="+type+"][locationId=" + locationId + "][coord="+coord+"][size=" + demand + "][serviceTime=" + serviceTime + "][timeWindow=" + timeWindow + "]"; } /* (non-Javadoc) diff --git a/jsprit-core/src/main/java/jsprit/core/problem/job/Shipment.java b/jsprit-core/src/main/java/jsprit/core/problem/job/Shipment.java new file mode 100644 index 00000000..6168aa98 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/job/Shipment.java @@ -0,0 +1,194 @@ +package jsprit.core.problem.job; + +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.util.Coordinate; + +public class Shipment implements Job{ + + public static class Builder { + + private int demand; + + private String id; + + private String pickupLocation; + + private Coordinate pickupCoord; + + private double pickupServiceTime = 0.0; + + private String deliveryLocation; + + private Coordinate deliveryCoord; + + private double deliveryServiceTime = 0.0; + + private TimeWindow deliveryTimeWindow = TimeWindow.newInstance(0.0, Double.MAX_VALUE); + + private TimeWindow pickupTimeWindow = TimeWindow.newInstance(0.0, Double.MAX_VALUE);; + + public static Builder newInstance(String id, int size){ + return new Builder(id,size); + } + + Builder(String id, int size) { + if(size < 0) throw new IllegalArgumentException("size must be greater than or equal to zero"); + this.id = id; + this.demand = size; + } + + public Builder setPickupLocation(String pickupLocation){ + this.pickupLocation = pickupLocation; + return this; + } + + public Builder setPickupCoord(Coordinate pickupCoord){ + this.pickupCoord = pickupCoord; + return this; + } + + public Builder setPickupServiceTime(double serviceTime){ + this.pickupServiceTime = serviceTime; + return this; + } + + public Builder setPickupTimeWindow(TimeWindow timeWindow){ + this.pickupTimeWindow = timeWindow; + return this; + } + + public Builder setDeliveryLocation(String deliveryLocation){ + this.deliveryLocation = deliveryLocation; + return this; + } + + public Builder setDeliveryCoord(Coordinate deliveryCoord){ + this.deliveryCoord = deliveryCoord; + return this; + } + + public Builder setDeliveryServiceTime(double deliveryServiceTime){ + this.deliveryServiceTime = deliveryServiceTime; + return this; + } + + public Builder setDeliveryTimeWindow(TimeWindow timeWindow){ + this.deliveryTimeWindow = timeWindow; + return this; + } + + public Shipment build(){ + if(pickupLocation == null) { + if(pickupCoord == null) throw new IllegalStateException("either locationId or a coordinate must be given. But is not."); + pickupLocation = pickupCoord.toString(); + } + if(deliveryLocation == null) { + if(deliveryCoord == null) throw new IllegalStateException("either locationId or a coordinate must be given. But is not."); + deliveryLocation = deliveryCoord.toString(); + } + return new Shipment(this); + } + } + + private int demand; + + private String id; + + private String pickupLocation; + + private Coordinate pickupCoord; + + private double pickupServiceTime; + + private String deliveryLocation; + + private Coordinate deliveryCoord; + + private double deliveryServiceTime; + + private TimeWindow deliveryTimeWindow; + + private TimeWindow pickupTimeWindow; + + Shipment(Builder builder){ + this.id = builder.id; + this.demand = builder.demand; + this.pickupLocation = builder.pickupLocation; + this.pickupCoord = builder.pickupCoord; + this.pickupServiceTime = builder.pickupServiceTime; + this.pickupTimeWindow = builder.pickupTimeWindow; + this.deliveryLocation = builder.deliveryLocation; + this.deliveryCoord = builder.deliveryCoord; + this.deliveryServiceTime = builder.deliveryServiceTime; + this.deliveryTimeWindow = builder.deliveryTimeWindow; + } + + @Override + public String getId() { + return id; + } + + @Override + public int getCapacityDemand() { + return demand; + } + + public String getPickupLocation() { + return pickupLocation; + } + + public Coordinate getPickupCoord() { + return pickupCoord; + } + + public double getPickupServiceTime() { + return pickupServiceTime; + } + + public String getDeliveryLocation() { + return deliveryLocation; + } + + public Coordinate getDeliveryCoord() { + return deliveryCoord; + } + + public double getDeliveryServiceTime() { + return deliveryServiceTime; + } + + public TimeWindow getDeliveryTimeWindow() { + return deliveryTimeWindow; + } + + public TimeWindow getPickupTimeWindow() { + return pickupTimeWindow; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((id == null) ? 0 : id.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Shipment other = (Shipment) obj; + if (id == null) { + if (other.id != null) + return false; + } else if (!id.equals(other.id)) + return false; + return true; + } + + +} diff --git a/jsprit-core/src/main/java/algorithms/InsertionContext.java b/jsprit-core/src/main/java/jsprit/core/problem/misc/JobInsertionContext.java similarity index 83% rename from jsprit-core/src/main/java/algorithms/InsertionContext.java rename to jsprit-core/src/main/java/jsprit/core/problem/misc/JobInsertionContext.java index 150ea6cf..08734530 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionContext.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/misc/JobInsertionContext.java @@ -14,14 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.misc; -import basics.Job; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleRoute; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; -class InsertionContext { +public class JobInsertionContext { private VehicleRoute route; private Job job; @@ -64,7 +64,7 @@ class InsertionContext { return newDepTime; } - public InsertionContext(VehicleRoute route, Job job, Vehicle newVehicle, + public JobInsertionContext(VehicleRoute route, Job job, Vehicle newVehicle, Driver newDriver, double newDepTime) { super(); this.route = route; diff --git a/jsprit-core/src/main/java/algorithms/InitialSolutionFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/InitialSolutionFactory.java similarity index 79% rename from jsprit-core/src/main/java/algorithms/InitialSolutionFactory.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/InitialSolutionFactory.java index 1bc2e612..96fa7f82 100644 --- a/jsprit-core/src/main/java/algorithms/InitialSolutionFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/InitialSolutionFactory.java @@ -14,15 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.VehicleRoutingProblem; -interface InitialSolutionFactory { +public interface InitialSolutionFactory { - public VehicleRoutingProblemSolution createInitialSolution(VehicleRoutingProblem vrp); + public VehicleRoutingProblemSolution createSolution(VehicleRoutingProblem vrp); } diff --git a/jsprit-core/src/main/java/basics/algo/SolutionCostCalculator.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/SolutionCostCalculator.java similarity index 79% rename from jsprit-core/src/main/java/basics/algo/SolutionCostCalculator.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/SolutionCostCalculator.java index f7958a0e..92c226cf 100644 --- a/jsprit-core/src/main/java/basics/algo/SolutionCostCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/SolutionCostCalculator.java @@ -14,17 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.problem.solution; -import basics.VehicleRoutingProblemSolution; public interface SolutionCostCalculator { /** - * This assumes that the solution is modified by setting its costs
- * solution.setCost(costs); + * Returns costs of solution. + * * @param solution + * @return TODO */ - public void calculateCosts(VehicleRoutingProblemSolution solution); + public double getCosts(VehicleRoutingProblemSolution solution); } diff --git a/jsprit-core/src/main/java/basics/VehicleRoutingProblemSolution.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/VehicleRoutingProblemSolution.java similarity index 95% rename from jsprit-core/src/main/java/basics/VehicleRoutingProblemSolution.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/VehicleRoutingProblemSolution.java index 4bf61585..c5c9ed86 100644 --- a/jsprit-core/src/main/java/basics/VehicleRoutingProblemSolution.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/VehicleRoutingProblemSolution.java @@ -14,12 +14,13 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem.solution; import java.util.ArrayList; import java.util.Collection; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.VehicleRoute; + /** * Contains the solution of a vehicle routing problem and its corresponding costs. diff --git a/jsprit-core/src/main/java/algorithms/ReverseRouteActivityVisitor.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/ReverseRouteActivityVisitor.java similarity index 84% rename from jsprit-core/src/main/java/algorithms/ReverseRouteActivityVisitor.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/ReverseRouteActivityVisitor.java index 08ead908..dc678c1e 100644 --- a/jsprit-core/src/main/java/algorithms/ReverseRouteActivityVisitor.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/ReverseRouteActivityVisitor.java @@ -14,16 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; -import basics.route.TourActivity; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ReverseActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; -class ReverseRouteActivityVisitor implements RouteVisitor{ + +public class ReverseRouteActivityVisitor implements RouteVisitor{ private Collection visitors = new ArrayList(); @@ -61,6 +62,8 @@ class ReverseRouteActivityVisitor implements RouteVisitor{ } public void addActivityVisitor(ReverseActivityVisitor activityVisitor){ - visitors.add(activityVisitor); + if(!visitors.contains(activityVisitor)){ + visitors.add(activityVisitor); + } } } diff --git a/jsprit-core/src/main/java/algorithms/RouteActivityVisitor.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/RouteActivityVisitor.java similarity index 84% rename from jsprit-core/src/main/java/algorithms/RouteActivityVisitor.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/RouteActivityVisitor.java index 625bbc32..5c9db156 100644 --- a/jsprit-core/src/main/java/algorithms/RouteActivityVisitor.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/RouteActivityVisitor.java @@ -14,15 +14,16 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route; import java.util.ArrayList; import java.util.Collection; -import basics.route.TourActivity; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; -class RouteActivityVisitor implements RouteVisitor{ + +public class RouteActivityVisitor implements RouteVisitor{ private Collection visitors = new ArrayList(); @@ -58,6 +59,8 @@ class RouteActivityVisitor implements RouteVisitor{ } public void addActivityVisitor(ActivityVisitor activityVisitor){ - visitors.add(activityVisitor); + if(!visitors.contains(activityVisitor)){ + visitors.add(activityVisitor); + } } } diff --git a/jsprit-core/src/main/java/algorithms/RouteVisitor.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/RouteVisitor.java similarity index 92% rename from jsprit-core/src/main/java/algorithms/RouteVisitor.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/RouteVisitor.java index e82f6216..8fdc412c 100644 --- a/jsprit-core/src/main/java/algorithms/RouteVisitor.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/RouteVisitor.java @@ -14,11 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route; -import basics.route.VehicleRoute; -interface RouteVisitor { +public interface RouteVisitor { public void visit(VehicleRoute route); diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/VehicleRoute.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/VehicleRoute.java new file mode 100644 index 00000000..22695b9d --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/VehicleRoute.java @@ -0,0 +1,300 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.problem.solution.route; + +import java.util.HashSet; +import java.util.Set; + +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.route.activity.DefaultShipmentActivityFactory; +import jsprit.core.problem.solution.route.activity.DefaultTourActivityFactory; +import jsprit.core.problem.solution.route.activity.End; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivities; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourActivityFactory; +import jsprit.core.problem.solution.route.activity.TourShipmentActivityFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; + +public class VehicleRoute { + + public static VehicleRoute copyOf(VehicleRoute route) { + return new VehicleRoute(route); + } + + public static VehicleRoute newInstance(TourActivities tour, Driver driver, Vehicle vehicle) { + return new VehicleRoute(tour,driver,vehicle); + } + + public static VehicleRoute emptyRoute() { + return new VehicleRoute(TourActivities.emptyTour(), DriverImpl.noDriver(), VehicleImpl.noVehicle()); + } + + public static class Builder { + + public static Builder newInstance(Vehicle vehicle, Driver driver){ + return new Builder(vehicle,driver); + } + + private Vehicle vehicle; + + private Driver driver; + + private Start start; + + private TourActivities tourActivities = new TourActivities(); + + private TourActivityFactory serviceActivityFactory = new DefaultTourActivityFactory(); + + private TourShipmentActivityFactory shipmentActivityFactory = new DefaultShipmentActivityFactory(); + + private Set openShipments = new HashSet(); + + public void setServiceActivityFactory(TourActivityFactory serviceActivityFactory) { + this.serviceActivityFactory = serviceActivityFactory; + } + + public void setShipmentActivityFactory(TourShipmentActivityFactory shipmentActivityFactory) { + this.shipmentActivityFactory = shipmentActivityFactory; + } + + /** + * Constructs the route-builder. + * @param vehicle + * @param driver + */ + private Builder(Vehicle vehicle, Driver driver) { + super(); + this.vehicle = vehicle; + this.driver = driver; + start = Start.newInstance(vehicle.getLocationId(), vehicle.getEarliestDeparture(), vehicle.getLatestArrival()); + start.setEndTime(vehicle.getEarliestDeparture()); + End.newInstance(vehicle.getLocationId(), vehicle.getEarliestDeparture(), vehicle.getLatestArrival()); + } + + /** + * Sets the departure-time of the route. + * + * @param departureTime + * @return + */ + public Builder setDepartureTime(double departureTime){ + start.setEndTime(departureTime); + return this; + } + + public Builder addService(Service service){ + addService(service,0.0,0.0); + return this; + } + + public Builder addService(Service service, double arrTime, double endTime){ + TourActivity act = serviceActivityFactory.createActivity(service); + act.setArrTime(arrTime); + act.setEndTime(endTime); + tourActivities.addActivity(act); + return this; + } + + /** + * Adds a the pickup of the specified shipment. + * + * @param shipment + * @throws IllegalStateException if method has already been called with the specified shipment. + * @return + */ + public Builder addPickup(Shipment shipment){ + addPickup(shipment,0.0,0.0); + return this; + } + + /** + * Adds a the pickup of the specified shipment at specified arrival and end-time. + * + * @param shipment + * @throws IllegalStateException if method has already been called with the specified shipment. + * @return + */ + public Builder addPickup(Shipment shipment, double arrTime, double endTime){ + if(openShipments.contains(shipment)) throw new IllegalStateException("shipment has already been added. cannot add it twice."); + TourActivity act = shipmentActivityFactory.createPickup(shipment); + act.setArrTime(arrTime); + act.setEndTime(endTime); + tourActivities.addActivity(act); + openShipments.add(shipment); + return this; + } + + /** + * Adds a the delivery of the specified shipment. + * + * @param shipment + * @throws IllegalStateException if specified shipment has not been picked up yet (i.e. method addPickup(shipment) has not been called yet). + * @return + */ + public Builder addDelivery(Shipment shipment){ + addDelivery(shipment,0.0,0.0); + return this; + } + + /** + * Adds a the delivery of the specified shipment at a specified arrival and endTime. + * + * @param shipment + * @throws IllegalStateException if specified shipment has not been picked up yet (i.e. method addPickup(shipment) has not been called yet). + * @return + */ + public Builder addDelivery(Shipment shipment, double arrTime, double endTime){ + if(openShipments.contains(shipment)){ + TourActivity act = shipmentActivityFactory.createDelivery(shipment); + act.setArrTime(arrTime); + act.setEndTime(endTime); + tourActivities.addActivity(act); + openShipments.remove(shipment); + } + else{ throw new IllegalStateException("cannot deliver shipment. shipment " + shipment + " needs to be picked up first."); } + return this; + } + + /** + * Builds the route. + * + * @return {@link VehicleRoute} + * @throws IllegalStateException if there are still shipments that have been picked up though but not delivery. + */ + public VehicleRoute build(){ + if(!openShipments.isEmpty()){ + throw new IllegalStateException("there are still shipments that have not been delivered yet."); + } + VehicleRoute route = VehicleRoute.newInstance(tourActivities, driver, vehicle); + return route; + } + + } + + private TourActivities tourActivities; + + private Vehicle vehicle; + + private Driver driver; + + private Start start; + + private End end; + + private VehicleRoute(VehicleRoute route){ + this.start = Start.copyOf(route.getStart()); + this.end = End.copyOf(route.getEnd()); + this.tourActivities = TourActivities.copyOf(route.getTourActivities()); + this.vehicle = route.getVehicle(); + this.driver = route.getDriver(); + } + + private VehicleRoute(TourActivities tour, Driver driver, Vehicle vehicle) { + super(); + verify(tour, driver, vehicle); + this.tourActivities = tour; + this.vehicle = vehicle; + this.driver = driver; + setStartAndEnd(vehicle, vehicle.getEarliestDeparture()); + } + +// private VehicleRoute(Builder builder){ +// this.tourActivities = builder.tour; +// this.vehicle = builder.vehicle; +// this.driver = builder.driver; +// this.start = builder.start; +// this.end = builder.end; +// } + + private void verify(TourActivities tour, Driver driver, Vehicle vehicle) { + if(tour == null || driver == null || vehicle == null) throw new IllegalStateException("null is not allowed for tour, driver or vehicle. use emptyRoute. use Tour.emptyTour, DriverImpl.noDriver() and VehicleImpl.noVehicle() instead." + + "\n\tor make it easier and use VehicleRoute.emptyRoute()"); + if(!tour.isEmpty() && vehicle instanceof NoVehicle){ + throw new IllegalStateException("if tour is not empty. there must be a vehicle for this tour, but there is no vehicle."); + } + } + + public TourActivities getTourActivities() { + return tourActivities; + } + + + public Vehicle getVehicle() { + return vehicle; + } + + public Driver getDriver() { + return driver; + } + + public void setVehicle(Vehicle vehicle, double vehicleDepTime){ + this.vehicle = vehicle; + setStartAndEnd(vehicle, vehicleDepTime); + } + + public void setDepartureTime(double vehicleDepTime){ + if(start == null) throw new IllegalStateException("cannot set departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead."); + start.setEndTime(vehicleDepTime); + } + + public double getDepartureTime(){ + if(start == null) throw new IllegalStateException("cannot get departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead."); + return start.getEndTime(); + } + + private void setStartAndEnd(Vehicle vehicle, double vehicleDepTime) { + if(!(vehicle instanceof NoVehicle)){ + if(start == null && end == null){ + start = Start.newInstance(vehicle.getLocationId(), vehicle.getEarliestDeparture(), vehicle.getLatestArrival()); + end = End.newInstance(vehicle.getLocationId(), vehicle.getEarliestDeparture(), vehicle.getLatestArrival()); + } + start.setEndTime(vehicleDepTime); + start.setTheoreticalEarliestOperationStartTime(vehicle.getEarliestDeparture()); + start.setTheoreticalLatestOperationStartTime(vehicle.getLatestArrival()); + start.setLocationId(vehicle.getLocationId()); + end.setLocationId(vehicle.getLocationId()); + end.setTheoreticalEarliestOperationStartTime(vehicle.getEarliestDeparture()); + end.setTheoreticalLatestOperationStartTime(vehicle.getLatestArrival()); + } + + } + + + public boolean isEmpty() { + return tourActivities.isEmpty(); + } + + public Start getStart() { + return start; + } + + public End getEnd() { + return end; + } + + @Override + public String toString() { + return "[start="+start+"][end=" + end + "][departureTime=" + start.getEndTime() + "][vehicle=" + vehicle + "][driver=" + driver + "][nuOfActs="+tourActivities.getActivities().size()+"]"; + } + +} diff --git a/jsprit-core/src/main/java/algorithms/ActivityVisitor.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ActivityVisitor.java similarity index 87% rename from jsprit-core/src/main/java/algorithms/ActivityVisitor.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ActivityVisitor.java index 0ac3d53f..d85d3465 100644 --- a/jsprit-core/src/main/java/algorithms/ActivityVisitor.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ActivityVisitor.java @@ -14,12 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route.activity; -import basics.route.TourActivity; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.VehicleRoute; -interface ActivityVisitor { + +public interface ActivityVisitor { public void begin(VehicleRoute route); diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DefaultShipmentActivityFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DefaultShipmentActivityFactory.java new file mode 100644 index 00000000..040f322e --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DefaultShipmentActivityFactory.java @@ -0,0 +1,17 @@ +package jsprit.core.problem.solution.route.activity; + +import jsprit.core.problem.job.Shipment; + +public class DefaultShipmentActivityFactory implements TourShipmentActivityFactory{ + + @Override + public TourActivity createPickup(Shipment shipment) { + return new PickupShipment(shipment); + } + + @Override + public TourActivity createDelivery(Shipment shipment) { + return new DeliverShipment(shipment); + } + +} diff --git a/jsprit-core/src/main/java/basics/route/DefaultTourActivityFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DefaultTourActivityFactory.java similarity index 79% rename from jsprit-core/src/main/java/basics/route/DefaultTourActivityFactory.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DefaultTourActivityFactory.java index 603dcf4b..188d7e97 100644 --- a/jsprit-core/src/main/java/basics/route/DefaultTourActivityFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DefaultTourActivityFactory.java @@ -14,11 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; -import basics.Delivery; -import basics.Pickup; -import basics.Service; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; public class DefaultTourActivityFactory implements TourActivityFactory{ @@ -26,13 +26,13 @@ public class DefaultTourActivityFactory implements TourActivityFactory{ public TourActivity createActivity(Service service) { TourActivity act; if(service instanceof Pickup){ - act = new PickupActivity((Pickup) service); + act = new PickupService((Pickup) service); } else if(service instanceof Delivery){ - act = new DeliveryActivity((Delivery) service); + act = new DeliverService((Delivery) service); } else{ - act = ServiceActivity.newInstance(service); + act = new PickupService(service); } return act; } diff --git a/jsprit-core/src/main/java/basics/route/DeliveryActivity.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliverService.java similarity index 51% rename from jsprit-core/src/main/java/basics/route/DeliveryActivity.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliverService.java index adbb4e2a..67fad82f 100644 --- a/jsprit-core/src/main/java/basics/route/DeliveryActivity.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliverService.java @@ -1,38 +1,21 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; -import basics.Delivery; -import basics.route.TourActivity.JobActivity; - -public class DeliveryActivity implements JobActivity{ +import jsprit.core.problem.job.Delivery; +public final class DeliverService implements DeliveryActivity{ + private Delivery delivery; private double arrTime; private double endTime; - public DeliveryActivity(Delivery delivery) { + public DeliverService(Delivery delivery) { super(); this.delivery = delivery; } - private DeliveryActivity(DeliveryActivity deliveryActivity){ + private DeliverService(DeliverService deliveryActivity){ this.delivery=deliveryActivity.getJob(); this.arrTime=deliveryActivity.getArrTime(); this.endTime=deliveryActivity.getEndTime(); @@ -90,7 +73,7 @@ public class DeliveryActivity implements JobActivity{ @Override public TourActivity duplicate() { - return new DeliveryActivity(this); + return new DeliverService(this); } @Override @@ -98,4 +81,8 @@ public class DeliveryActivity implements JobActivity{ return delivery; } + @Override + public String toString() { + return "[act="+getName()+"][capDemand="+getCapacityDemand()+"][loc="+getLocationId()+"]"; + } } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliverShipment.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliverShipment.java new file mode 100644 index 00000000..41e44095 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliverShipment.java @@ -0,0 +1,87 @@ +package jsprit.core.problem.solution.route.activity; + +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Shipment; + +public final class DeliverShipment implements DeliveryActivity{ + + private Shipment shipment; + private double endTime; + private double arrTime; + + public DeliverShipment(Shipment shipment) { + super(); + this.shipment = shipment; + } + + public DeliverShipment(DeliverShipment deliveryShipmentActivity) { + this.shipment = (Shipment) deliveryShipmentActivity.getJob(); + this.arrTime = deliveryShipmentActivity.getArrTime(); + this.endTime = deliveryShipmentActivity.getEndTime(); + } + + @Override + public Job getJob() { + return shipment; + } + + @Override + public int getCapacityDemand() { + return shipment.getCapacityDemand()*-1; + } + + @Override + public String getName() { + return "deliverShipment"; + } + + @Override + public String getLocationId() { + return shipment.getDeliveryLocation(); + } + + @Override + public double getTheoreticalEarliestOperationStartTime() { + return shipment.getDeliveryTimeWindow().getStart(); + } + + @Override + public double getTheoreticalLatestOperationStartTime() { + return shipment.getDeliveryTimeWindow().getEnd(); + } + + @Override + public double getOperationTime() { + return shipment.getDeliveryServiceTime(); + } + + @Override + public double getArrTime() { + return arrTime; + } + + @Override + public double getEndTime() { + return endTime; + } + + @Override + public void setArrTime(double arrTime) { + this.arrTime=arrTime; + } + + @Override + public void setEndTime(double endTime) { + this.endTime=endTime; + } + + @Override + public TourActivity duplicate() { + return new DeliverShipment(this); + } + + @Override + public String toString() { + return "[act="+getName()+"][loc="+getLocationId()+"]"; + } +} diff --git a/jsprit-core/src/main/java/algorithms/VehicleRouteUpdater.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliveryActivity.java similarity index 77% rename from jsprit-core/src/main/java/algorithms/VehicleRouteUpdater.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliveryActivity.java index 869db6cf..f845c7a1 100644 --- a/jsprit-core/src/main/java/algorithms/VehicleRouteUpdater.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/DeliveryActivity.java @@ -14,20 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route.activity; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; +public interface DeliveryActivity extends JobActivity{ -/** - * Updater that updates a vehicleRoute, e.g. the total costs or the time-windows. - * - * @author stefan schroeder - * - */ - -interface VehicleRouteUpdater { - - public void iterate(VehicleRoute vehicleRoute); } diff --git a/jsprit-core/src/main/java/basics/route/End.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/End.java similarity index 97% rename from jsprit-core/src/main/java/basics/route/End.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/End.java index 1b399556..beacc9ad 100644 --- a/jsprit-core/src/main/java/basics/route/End.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/End.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; -import util.Coordinate; +import jsprit.core.util.Coordinate; public final class End implements TourActivity { diff --git a/jsprit-core/src/test/java/allsuites/AllTests.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupActivity.java similarity index 76% rename from jsprit-core/src/test/java/allsuites/AllTests.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupActivity.java index e330551f..64ed2595 100644 --- a/jsprit-core/src/test/java/allsuites/AllTests.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupActivity.java @@ -14,22 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package allsuites; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -import algorithms.AlgorithmsSuite; -import basics.BasicsSuite; - - - -@RunWith(Suite.class) -@Suite.SuiteClasses({ - AlgorithmsSuite.class, - BasicsSuite.class -}) -public class AllTests {} - +package jsprit.core.problem.solution.route.activity; +import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; +public interface PickupActivity extends JobActivity{ + + +} diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupService.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupService.java new file mode 100644 index 00000000..856e9087 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupService.java @@ -0,0 +1,94 @@ +package jsprit.core.problem.solution.route.activity; + +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Service; + +public final class PickupService implements PickupActivity{ + + private Service pickup; + + private double arrTime; + + private double depTime; + + public PickupService(Pickup pickup) { + super(); + this.pickup = pickup; + } + + public PickupService(Service service){ + this.pickup = service; + } + + private PickupService(PickupService pickupActivity){ + this.pickup=pickupActivity.getJob(); + this.arrTime=pickupActivity.getArrTime(); + this.depTime=pickupActivity.getEndTime(); + } + + @Override + public String getName() { + return pickup.getType(); + } + + @Override + public String getLocationId() { + return pickup.getLocationId(); + } + + @Override + public double getTheoreticalEarliestOperationStartTime() { + return pickup.getTimeWindow().getStart(); + } + + @Override + public double getTheoreticalLatestOperationStartTime() { + return pickup.getTimeWindow().getEnd(); + } + + @Override + public double getOperationTime() { + return pickup.getServiceDuration(); + } + + @Override + public double getArrTime() { + return arrTime; + } + + @Override + public double getEndTime() { + return depTime; + } + + @Override + public void setArrTime(double arrTime) { + this.arrTime=arrTime; + } + + @Override + public void setEndTime(double endTime) { + this.depTime=endTime; + } + + @Override + public TourActivity duplicate() { + return new PickupService(this); + } + + @Override + public Service getJob() { + return pickup; + } + + @Override + public int getCapacityDemand() { + return pickup.getCapacityDemand(); + } + + @Override + public String toString() { + return "[act="+getName()+"][capDemand="+getCapacityDemand()+"][loc="+getLocationId()+"]"; + } + +} diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupShipment.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupShipment.java new file mode 100644 index 00000000..eb0451d1 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/PickupShipment.java @@ -0,0 +1,88 @@ +package jsprit.core.problem.solution.route.activity; + +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Shipment; + +public final class PickupShipment implements PickupActivity{ + + private Shipment shipment; + private double endTime; + private double arrTime; + + public PickupShipment(Shipment shipment) { + super(); + this.shipment = shipment; + } + + public PickupShipment(PickupShipment pickupShipmentActivity) { + this.shipment = (Shipment) pickupShipmentActivity.getJob(); + this.arrTime = pickupShipmentActivity.getArrTime(); + this.endTime = pickupShipmentActivity.getEndTime(); + } + + @Override + public Job getJob() { + return shipment; + } + + @Override + public int getCapacityDemand() { + return shipment.getCapacityDemand(); + } + + @Override + public String getName() { + return "pickupShipment"; + } + + @Override + public String getLocationId() { + return shipment.getPickupLocation(); + } + + @Override + public double getTheoreticalEarliestOperationStartTime() { + return shipment.getPickupTimeWindow().getStart(); + } + + @Override + public double getTheoreticalLatestOperationStartTime() { + return shipment.getPickupTimeWindow().getEnd(); + } + + @Override + public double getOperationTime() { + return shipment.getPickupServiceTime(); + } + + @Override + public double getArrTime() { + return arrTime; + } + + @Override + public double getEndTime() { + return endTime; + } + + @Override + public void setArrTime(double arrTime) { + this.arrTime=arrTime; + } + + @Override + public void setEndTime(double endTime) { + this.endTime=endTime; + } + + @Override + public TourActivity duplicate() { + return new PickupShipment(this); + } + + @Override + public String toString() { + return "[act="+getName()+"][loc="+getLocationId()+"]"; + } + +} diff --git a/jsprit-core/src/main/java/algorithms/ReverseActivityVisitor.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ReverseActivityVisitor.java similarity index 86% rename from jsprit-core/src/main/java/algorithms/ReverseActivityVisitor.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ReverseActivityVisitor.java index 03902866..ec1c3fc5 100644 --- a/jsprit-core/src/main/java/algorithms/ReverseActivityVisitor.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ReverseActivityVisitor.java @@ -14,12 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route.activity; -import basics.route.TourActivity; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.VehicleRoute; -interface ReverseActivityVisitor { + +public interface ReverseActivityVisitor { public void begin(VehicleRoute route); diff --git a/jsprit-core/src/main/java/basics/route/ServiceActivity.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ServiceActivity.java similarity index 94% rename from jsprit-core/src/main/java/basics/route/ServiceActivity.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ServiceActivity.java index bcf5deec..97ddd134 100644 --- a/jsprit-core/src/main/java/basics/route/ServiceActivity.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/ServiceActivity.java @@ -14,12 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; -import basics.Service; -import basics.route.TourActivity.JobActivity; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; -public class ServiceActivity implements JobActivity{ +public class ServiceActivity implements JobActivity{ public static int counter = 0; diff --git a/jsprit-core/src/main/java/basics/route/Start.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/Start.java similarity index 97% rename from jsprit-core/src/main/java/basics/route/Start.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/Start.java index 94f09008..13067feb 100644 --- a/jsprit-core/src/main/java/basics/route/Start.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/Start.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; -import util.Coordinate; +import jsprit.core.util.Coordinate; public final class Start implements TourActivity { diff --git a/jsprit-core/src/main/java/basics/route/TimeWindow.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TimeWindow.java similarity index 97% rename from jsprit-core/src/main/java/basics/route/TimeWindow.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TimeWindow.java index a00a5e5c..a78a3a60 100644 --- a/jsprit-core/src/main/java/basics/route/TimeWindow.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TimeWindow.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; /** * diff --git a/jsprit-core/src/main/java/basics/route/TourActivities.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivities.java similarity index 77% rename from jsprit-core/src/main/java/basics/route/TourActivities.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivities.java index 1625b683..33161cc2 100644 --- a/jsprit-core/src/main/java/basics/route/TourActivities.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivities.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; import java.util.ArrayList; import java.util.Collection; @@ -24,8 +24,9 @@ import java.util.Iterator; import java.util.List; import java.util.Set; -import basics.Job; -import basics.route.TourActivity.JobActivity; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; + /** @@ -113,6 +114,12 @@ public class TourActivities { return Collections.unmodifiableSet(jobs); } + /** + * Returns true if job is in jobList, otherwise false. + * + * @param job + * @return + */ public boolean servesJob(Job job) { return jobs.contains(job); } @@ -146,12 +153,24 @@ public class TourActivities { } } } - if(jobRemoved != activityRemoved) throw new IllegalStateException("job removed, but belonging activity not."); + assert jobRemoved == activityRemoved : "job removed, but belonging activity not."; return activityRemoved; } + /** + * Inserts the specified activity add the specified insertionIndex. Shifts the element currently at that position (if any) and + * any subsequent elements to the right (adds one to their indices). + *

If specified activity instanceof JobActivity, it adds job to jobList. + *

If insertionIndex > tourActivitiies.size(), it just adds the specified act at the end. + * + * @param insertionIndex + * @param act + * @throws IndexOutOfBoundsException if insertionIndex < 0; + */ public void addActivity(int insertionIndex, TourActivity act) { - assert insertionIndex >= 0 : "insertionIndex == 0, this cannot be"; + + assert insertionIndex >= 0 : "insertionIndex < 0, this cannot be"; + /* * if 1 --> between start and act(0) --> act(0) * if 2 && 2 <= acts.size --> between act(0) and act(1) --> act(1) @@ -164,6 +183,18 @@ public class TourActivities { addJob(act); } + /** +<<<<<<< HEAD + * adds activity. + * + * @throw {@link IllegalStateException} if same activity is added twice. +======= + * Adds specified activity at the end of activity-list. + *

If act instanceof JobActivity, it adds underlying job also. + * @throws IllegalStateException if activity-list already contains act. +>>>>>>> refs/remotes/choose_remote_name/relaxAPI + * @param act + */ public void addActivity(TourActivity act){ if(tourActivities.contains(act)) throw new IllegalStateException("act " + act + " already in tour. cannot add act twice."); tourActivities.add(act); @@ -177,6 +208,11 @@ public class TourActivities { } } + /** + * Returns number of jobs. + * + * @return + */ public int jobSize() { return jobs.size(); } diff --git a/jsprit-core/src/main/java/basics/route/TourActivity.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivity.java similarity index 89% rename from jsprit-core/src/main/java/basics/route/TourActivity.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivity.java index d9409fe2..56b28972 100644 --- a/jsprit-core/src/main/java/basics/route/TourActivity.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivity.java @@ -14,16 +14,16 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; -import basics.Job; +import jsprit.core.problem.job.Job; public interface TourActivity { - public interface JobActivity extends TourActivity { + public interface JobActivity extends TourActivity { - public T getJob(); + public Job getJob(); } diff --git a/jsprit-core/src/main/java/basics/route/TourActivityFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivityFactory.java similarity index 91% rename from jsprit-core/src/main/java/basics/route/TourActivityFactory.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivityFactory.java index f8dd44c1..11e90a2e 100644 --- a/jsprit-core/src/main/java/basics/route/TourActivityFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourActivityFactory.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; -import basics.Service; +import jsprit.core.problem.job.Service; public interface TourActivityFactory { diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourShipmentActivityFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourShipmentActivityFactory.java new file mode 100644 index 00000000..2c1ff9c9 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/activity/TourShipmentActivityFactory.java @@ -0,0 +1,11 @@ +package jsprit.core.problem.solution.route.activity; + +import jsprit.core.problem.job.Shipment; + +public interface TourShipmentActivityFactory { + + public TourActivity createPickup(Shipment shipment); + + public TourActivity createDelivery(Shipment shipment); + +} diff --git a/jsprit-core/src/main/java/algorithms/JobInsertionCalculator.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/state/RouteAndActivityStateGetter.java similarity index 64% rename from jsprit-core/src/main/java/algorithms/JobInsertionCalculator.java rename to jsprit-core/src/main/java/jsprit/core/problem/solution/route/state/RouteAndActivityStateGetter.java index a8f3376f..7de0f4f5 100644 --- a/jsprit-core/src/main/java/algorithms/JobInsertionCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/state/RouteAndActivityStateGetter.java @@ -14,16 +14,18 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route.state; -import basics.Job; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleRoute; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.state.StateFactory.State; +import jsprit.core.problem.solution.route.state.StateFactory.StateId; +public interface RouteAndActivityStateGetter { + + public State getActivityState(TourActivity act, StateId stateId); + + public State getRouteState(VehicleRoute route, StateId stateId); - interface JobInsertionCalculator { - - public InsertionData calculate(VehicleRoute currentRoute, Job jobToInsert, Vehicle newVehicle, double newVehicleDepartureTime, Driver newDriver, double bestKnownScore); } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/solution/route/state/StateFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/state/StateFactory.java new file mode 100644 index 00000000..bdd337e1 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/solution/route/state/StateFactory.java @@ -0,0 +1,176 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributors: + * Stefan Schroeder - initial API and implementation + ******************************************************************************/ +package jsprit.core.problem.solution.route.state; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class StateFactory { + + + public interface StateId { + + } + + public interface State { + double toDouble(); + } + + + + public interface States { + + State getState(StateId key); + + void putState(StateId id, State state); + + } + + static class StateImpl implements State{ + double state; + + public StateImpl(double state) { + super(); + this.state = state; + } + + @Override + public double toDouble() { + return state; + } + + } + + static class StatesImpl implements States{ + + private Map states = new HashMap(); + + public void putState(StateId key, State state) { + states.put(key, state); + } + + @Override + public State getState(StateId key) { + return states.get(key); + } + + } + + public final static StateId MAXLOAD = new StateIdImpl("maxload"); + + public final static StateId LOAD = new StateIdImpl("load"); + + public final static StateId COSTS = new StateIdImpl("costs"); + + public final static StateId LOAD_AT_BEGINNING = new StateIdImpl("loadAtBeginning"); + + public final static StateId LOAD_AT_END = new StateIdImpl("loadAtEnd"); + + public final static StateId DURATION = new StateIdImpl("duration"); + + public final static StateId LATEST_OPERATION_START_TIME = new StateIdImpl("latestOST"); + + public final static StateId EARLIEST_OPERATION_START_TIME = new StateIdImpl("earliestOST"); + + public final static StateId FUTURE_MAXLOAD = new StateIdImpl("futureMaxload"); + + public final static StateId PAST_MAXLOAD = new StateIdImpl("pastMaxload"); + + final static List reservedIds = Arrays.asList("maxload","load","costs","loadAtBeginning","loadAtEnd","duration","latestOST","earliestOST" + ,"futureMaxload","pastMaxload"); + + + public static States createStates(){ + return new StatesImpl(); + } + + public static StateId createId(String name){ + if(reservedIds.contains(name)){ throwReservedIdException(name); } + return new StateIdImpl(name); + } + + public static State createState(double value){ + return new StateImpl(value); + } + + public static boolean isReservedId(String stateId){ + if(reservedIds.contains(stateId)) return true; + return false; + } + + public static boolean isReservedId(StateId stateId){ + if(reservedIds.contains(stateId.toString())) return true; + return false; + } + + public static void throwReservedIdException(String name) { + throw new IllegalStateException("state-id with name '" + name + "' cannot be created. it is already reserved internally."); + } + + + static class StateIdImpl implements StateId { + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + StateIdImpl other = (StateIdImpl) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + private String name; + + public StateIdImpl(String name) { + super(); + this.name = name; + } + + public String toString(){ + return name; + } + } +} diff --git a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/FiniteFleetManagerFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/FiniteFleetManagerFactory.java new file mode 100644 index 00000000..29358743 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/FiniteFleetManagerFactory.java @@ -0,0 +1,20 @@ +package jsprit.core.problem.vehicle; + +import java.util.Collection; + + +public class FiniteFleetManagerFactory implements VehicleFleetManagerFactory{ + + private Collection vehicles; + + public FiniteFleetManagerFactory(Collection vehicles) { + super(); + this.vehicles = vehicles; + } + + @Override + public VehicleFleetManager createFleetManager() { + return new VehicleFleetManagerImpl(vehicles); + } + +} diff --git a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/InfiniteFleetManagerFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/InfiniteFleetManagerFactory.java new file mode 100644 index 00000000..458571e0 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/InfiniteFleetManagerFactory.java @@ -0,0 +1,20 @@ +package jsprit.core.problem.vehicle; + +import java.util.Collection; + + +public class InfiniteFleetManagerFactory implements VehicleFleetManagerFactory{ + + private Collection vehicles; + + public InfiniteFleetManagerFactory(Collection vehicles) { + super(); + this.vehicles = vehicles; + } + + @Override + public VehicleFleetManager createFleetManager() { + return new InfiniteVehicles(vehicles); + } + +} diff --git a/jsprit-core/src/main/java/algorithms/InfiniteVehicles.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/InfiniteVehicles.java similarity index 74% rename from jsprit-core/src/main/java/algorithms/InfiniteVehicles.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/InfiniteVehicles.java index aff00583..6cba846f 100644 --- a/jsprit-core/src/main/java/algorithms/InfiniteVehicles.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/InfiniteVehicles.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.vehicle; import java.util.ArrayList; import java.util.Collection; @@ -24,26 +24,14 @@ import java.util.Map; import org.apache.log4j.Logger; -import basics.route.Vehicle; class InfiniteVehicles implements VehicleFleetManager{ - -// static class TypeKeyComparator implements Comparator{ -// -// @Override -// public int compare(TypeKey k1, TypeKey k2) { -// double k1_fix = k1.type.getVehicleCostParams().fix; -// double k2_fix = k2.type.getVehicleCostParams().fix; -// return (int)(k1_fix - k2_fix); -// } -// -// } private static Logger logger = Logger.getLogger(InfiniteVehicles.class); - private Map types = new HashMap(); + private Map types = new HashMap(); - private List sortedTypes = new ArrayList(); + private List sortedTypes = new ArrayList(); public InfiniteVehicles(Collection vehicles){ extractTypes(vehicles); @@ -57,12 +45,11 @@ class InfiniteVehicles implements VehicleFleetManager{ private void extractTypes(Collection vehicles) { for(Vehicle v : vehicles){ - TypeKey typeKey = new TypeKey(v.getType().getTypeId(),v.getLocationId()); + VehicleTypeKey typeKey = new VehicleTypeKey(v.getType().getTypeId(),v.getLocationId()); types.put(typeKey,v); sortedTypes.add(typeKey); } -// Collections.sort(sortedTypes, new TypeKeyComparator()); } @@ -95,8 +82,8 @@ class InfiniteVehicles implements VehicleFleetManager{ @Override public Collection getAvailableVehicles(String withoutThisType, String locationId) { Collection vehicles = new ArrayList(); - TypeKey thisKey = new TypeKey(withoutThisType,locationId); - for(TypeKey key : types.keySet()){ + VehicleTypeKey thisKey = new VehicleTypeKey(withoutThisType,locationId); + for(VehicleTypeKey key : types.keySet()){ if(!key.equals(thisKey)){ vehicles.add(types.get(key)); } diff --git a/jsprit-core/src/main/java/basics/route/PenaltyVehicleType.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/PenaltyVehicleType.java similarity index 92% rename from jsprit-core/src/main/java/basics/route/PenaltyVehicleType.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/PenaltyVehicleType.java index 06aeac67..b26e01ba 100644 --- a/jsprit-core/src/main/java/basics/route/PenaltyVehicleType.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/PenaltyVehicleType.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.vehicle; -import basics.route.VehicleTypeImpl.VehicleCostParams; +import jsprit.core.problem.vehicle.VehicleTypeImpl.VehicleCostParams; public class PenaltyVehicleType implements VehicleType{ diff --git a/jsprit-core/src/main/java/basics/route/Vehicle.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/Vehicle.java similarity index 94% rename from jsprit-core/src/main/java/basics/route/Vehicle.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/Vehicle.java index e306da24..0d178938 100644 --- a/jsprit-core/src/main/java/basics/route/Vehicle.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/Vehicle.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.vehicle; -import util.Coordinate; +import jsprit.core.util.Coordinate; diff --git a/jsprit-core/src/main/java/algorithms/CalcUtils.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManager.java similarity index 66% rename from jsprit-core/src/main/java/algorithms/CalcUtils.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManager.java index c4515849..6d545e42 100644 --- a/jsprit-core/src/main/java/algorithms/CalcUtils.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManager.java @@ -14,21 +14,23 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.vehicle; -import basics.route.TourActivity; +import java.util.Collection; -class CalcUtils { + +public interface VehicleFleetManager { + public abstract void lock(Vehicle vehicle); + + public abstract void unlock(Vehicle vehicle); + + public abstract boolean isLocked(Vehicle vehicle); + + public abstract void unlockAll(); + + public abstract Collection getAvailableVehicles(); + + public Collection getAvailableVehicles(String withoutThisType, String locationId); - /** - * Calculates actEndTime assuming that activity can at earliest start at act.getTheoreticalEarliestOperationStartTime(). - * - * @param actArrTime - * @param act - * @return - */ - static double getActivityEndTime(double actArrTime, TourActivity act){ - return Math.max(actArrTime, act.getTheoreticalEarliestOperationStartTime()) + act.getOperationTime(); - } } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerFactory.java new file mode 100644 index 00000000..9a45154d --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerFactory.java @@ -0,0 +1,7 @@ +package jsprit.core.problem.vehicle; + +public interface VehicleFleetManagerFactory { + + public VehicleFleetManager createFleetManager(); + +} diff --git a/jsprit-core/src/main/java/algorithms/VehicleFleetManagerImpl.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerImpl.java similarity index 88% rename from jsprit-core/src/main/java/algorithms/VehicleFleetManagerImpl.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerImpl.java index 2f5c07c9..a7931eae 100644 --- a/jsprit-core/src/main/java/algorithms/VehicleFleetManagerImpl.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerImpl.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.vehicle; import java.util.ArrayList; import java.util.Collection; @@ -25,11 +25,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; + import org.apache.log4j.Logger; -import basics.route.PenaltyVehicleType; -import basics.route.Vehicle; -import basics.route.VehicleImpl.NoVehicle; + @@ -54,11 +54,11 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { static class TypeContainer { - private TypeKey type; + private VehicleTypeKey type; private ArrayList vehicleList; - public TypeContainer(TypeKey type) { + public TypeContainer(VehicleTypeKey type) { super(); this.type = type; vehicleList = new ArrayList(); @@ -92,9 +92,9 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { private Set lockedVehicles; - private Map typeMapOfAvailableVehicles; + private Map typeMapOfAvailableVehicles; - private Map penaltyVehicles = new HashMap(); + private Map penaltyVehicles = new HashMap(); // private Map typeMapOfAvailablePenaltyVehicles; @@ -122,8 +122,8 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { } private void makeMap() { - typeMapOfAvailableVehicles = new HashMap(); - penaltyVehicles = new HashMap(); + typeMapOfAvailableVehicles = new HashMap(); + penaltyVehicles = new HashMap(); for(Vehicle v : vehicles){ addVehicle(v); } @@ -135,11 +135,11 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { } String typeId = v.getType().getTypeId(); if(v.getType() instanceof PenaltyVehicleType){ - TypeKey typeKey = new TypeKey(typeId,v.getLocationId()); + VehicleTypeKey typeKey = new VehicleTypeKey(typeId,v.getLocationId()); penaltyVehicles.put(typeKey, v); } else{ - TypeKey typeKey = new TypeKey(v.getType().getTypeId(),v.getLocationId()); + VehicleTypeKey typeKey = new VehicleTypeKey(v.getType().getTypeId(),v.getLocationId()); if(!typeMapOfAvailableVehicles.containsKey(typeKey)){ typeMapOfAvailableVehicles.put(typeKey, new TypeContainer(typeKey)); } @@ -150,7 +150,7 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { private void removeVehicle(Vehicle v){ //it might be better to introduce a class PenaltyVehicle if(!(v.getType() instanceof PenaltyVehicleType)){ - TypeKey key = new TypeKey(v.getType().getTypeId(),v.getLocationId()); + VehicleTypeKey key = new VehicleTypeKey(v.getType().getTypeId(),v.getLocationId()); if(typeMapOfAvailableVehicles.containsKey(key)){ typeMapOfAvailableVehicles.get(key).remove(v); } @@ -167,7 +167,7 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { @Override public Collection getAvailableVehicles() { List vehicles = new ArrayList(); - for(TypeKey key : typeMapOfAvailableVehicles.keySet()){ + for(VehicleTypeKey key : typeMapOfAvailableVehicles.keySet()){ if(!typeMapOfAvailableVehicles.get(key).isEmpty()){ vehicles.add(typeMapOfAvailableVehicles.get(key).getVehicle()); } @@ -193,8 +193,8 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { @Override public Collection getAvailableVehicles(String withoutThisType, String withThisLocationId) { List vehicles = new ArrayList(); - TypeKey thisKey = new TypeKey(withoutThisType,withThisLocationId); - for(TypeKey key : typeMapOfAvailableVehicles.keySet()){ + VehicleTypeKey thisKey = new VehicleTypeKey(withoutThisType,withThisLocationId); + for(VehicleTypeKey key : typeMapOfAvailableVehicles.keySet()){ if(key.equals(thisKey)) continue; if(!typeMapOfAvailableVehicles.get(key).isEmpty()){ vehicles.add(typeMapOfAvailableVehicles.get(key).getVehicle()); diff --git a/jsprit-core/src/main/java/basics/route/VehicleImpl.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleImpl.java similarity index 98% rename from jsprit-core/src/main/java/basics/route/VehicleImpl.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleImpl.java index 74bd2f32..b7d53c1a 100644 --- a/jsprit-core/src/main/java/basics/route/VehicleImpl.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleImpl.java @@ -14,11 +14,12 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.vehicle; + +import jsprit.core.util.Coordinate; import org.apache.log4j.Logger; -import util.Coordinate; /** * diff --git a/jsprit-core/src/main/java/basics/route/VehicleType.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleType.java similarity index 90% rename from jsprit-core/src/main/java/basics/route/VehicleType.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleType.java index 030b8620..1f6da049 100644 --- a/jsprit-core/src/main/java/basics/route/VehicleType.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleType.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.vehicle; -import basics.route.VehicleTypeImpl.VehicleCostParams; +import jsprit.core.problem.vehicle.VehicleTypeImpl.VehicleCostParams; public interface VehicleType { diff --git a/jsprit-core/src/main/java/basics/route/VehicleTypeImpl.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleTypeImpl.java similarity index 97% rename from jsprit-core/src/main/java/basics/route/VehicleTypeImpl.java rename to jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleTypeImpl.java index 93ea9505..828f3058 100644 --- a/jsprit-core/src/main/java/basics/route/VehicleTypeImpl.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleTypeImpl.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.vehicle; public class VehicleTypeImpl implements VehicleType { @@ -113,6 +113,10 @@ public class VehicleTypeImpl implements VehicleType { private double maxVelocity; + /** + * @deprecated use builder instead + */ + @Deprecated public static VehicleTypeImpl newInstance(String typeId, int capacity, VehicleTypeImpl.VehicleCostParams para){ return new VehicleTypeImpl(typeId, capacity, para); } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleTypeKey.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleTypeKey.java new file mode 100644 index 00000000..a39907df --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleTypeKey.java @@ -0,0 +1,48 @@ +package jsprit.core.problem.vehicle; + +class VehicleTypeKey { + + public final String type; + public final String locationId; + + VehicleTypeKey(String typeId, String locationId) { + super(); + this.type = typeId; + this.locationId = locationId; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((locationId == null) ? 0 : locationId.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + VehicleTypeKey other = (VehicleTypeKey) obj; + if (locationId == null) { + if (other.locationId != null) + return false; + } else if (!locationId.equals(other.locationId)) + return false; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + return true; + } + + + +} \ No newline at end of file diff --git a/jsprit-core/src/main/java/algorithms/ActivityTimeTracker.java b/jsprit-core/src/main/java/jsprit/core/util/ActivityTimeTracker.java similarity index 89% rename from jsprit-core/src/main/java/algorithms/ActivityTimeTracker.java rename to jsprit-core/src/main/java/jsprit/core/util/ActivityTimeTracker.java index 8c6e4aab..6c349300 100644 --- a/jsprit-core/src/main/java/algorithms/ActivityTimeTracker.java +++ b/jsprit-core/src/main/java/jsprit/core/util/ActivityTimeTracker.java @@ -14,13 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.util; -import basics.costs.ForwardTransportTime; -import basics.route.TourActivity; -import basics.route.VehicleRoute; +import jsprit.core.problem.cost.ForwardTransportTime; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ActivityVisitor; +import jsprit.core.problem.solution.route.activity.TourActivity; -class ActivityTimeTracker implements ActivityVisitor{ +public class ActivityTimeTracker implements ActivityVisitor{ private ForwardTransportTime transportTime; diff --git a/jsprit-core/src/main/java/util/ArrayUtils.java b/jsprit-core/src/main/java/jsprit/core/util/ArrayUtils.java similarity index 97% rename from jsprit-core/src/main/java/util/ArrayUtils.java rename to jsprit-core/src/main/java/jsprit/core/util/ArrayUtils.java index 6d5145ef..31e03ef5 100644 --- a/jsprit-core/src/main/java/util/ArrayUtils.java +++ b/jsprit-core/src/main/java/jsprit/core/util/ArrayUtils.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import java.util.List; diff --git a/jsprit-core/src/main/java/util/BenchmarkInstance.java b/jsprit-core/src/main/java/jsprit/core/util/BenchmarkInstance.java similarity index 94% rename from jsprit-core/src/main/java/util/BenchmarkInstance.java rename to jsprit-core/src/main/java/jsprit/core/util/BenchmarkInstance.java index 7cd6ae94..02279bda 100644 --- a/jsprit-core/src/main/java/util/BenchmarkInstance.java +++ b/jsprit-core/src/main/java/jsprit/core/util/BenchmarkInstance.java @@ -14,9 +14,9 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; -import basics.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem; public class BenchmarkInstance { public final String name; diff --git a/jsprit-core/src/main/java/util/BenchmarkResult.java b/jsprit-core/src/main/java/jsprit/core/util/BenchmarkResult.java similarity index 98% rename from jsprit-core/src/main/java/util/BenchmarkResult.java rename to jsprit-core/src/main/java/jsprit/core/util/BenchmarkResult.java index ea5f8258..6192db4e 100644 --- a/jsprit-core/src/main/java/util/BenchmarkResult.java +++ b/jsprit-core/src/main/java/jsprit/core/util/BenchmarkResult.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; diff --git a/jsprit-core/src/main/java/jsprit/core/util/CalculationUtils.java b/jsprit-core/src/main/java/jsprit/core/util/CalculationUtils.java new file mode 100644 index 00000000..f8acf221 --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/util/CalculationUtils.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributors: + * Stefan Schroeder - initial API and implementation + ******************************************************************************/ +package jsprit.core.util; + +import jsprit.core.problem.solution.route.activity.TourActivity; + +public class CalculationUtils { + + + /** + * Calculates actEndTime assuming that activity can at earliest start at act.getTheoreticalEarliestOperationStartTime(). + * + * @param actArrTime + * @param act + * @return + */ + public static double getActivityEndTime(double actArrTime, TourActivity act){ + return Math.max(actArrTime, act.getTheoreticalEarliestOperationStartTime()) + act.getOperationTime(); + } +} diff --git a/jsprit-core/src/main/java/util/Coordinate.java b/jsprit-core/src/main/java/jsprit/core/util/Coordinate.java similarity index 98% rename from jsprit-core/src/main/java/util/Coordinate.java rename to jsprit-core/src/main/java/jsprit/core/util/Coordinate.java index d6b874b2..03d87ec9 100644 --- a/jsprit-core/src/main/java/util/Coordinate.java +++ b/jsprit-core/src/main/java/jsprit/core/util/Coordinate.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; public class Coordinate { diff --git a/jsprit-core/src/main/java/util/CrowFlyCosts.java b/jsprit-core/src/main/java/jsprit/core/util/CrowFlyCosts.java similarity index 94% rename from jsprit-core/src/main/java/util/CrowFlyCosts.java rename to jsprit-core/src/main/java/jsprit/core/util/CrowFlyCosts.java index 3c06a1a8..6bc21c72 100644 --- a/jsprit-core/src/main/java/util/CrowFlyCosts.java +++ b/jsprit-core/src/main/java/jsprit/core/util/CrowFlyCosts.java @@ -17,13 +17,14 @@ /** * */ -package util; +package jsprit.core.util; + +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; import org.apache.log4j.Logger; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.Vehicle; /** diff --git a/jsprit-core/src/main/java/util/EuclideanDistanceCalculator.java b/jsprit-core/src/main/java/jsprit/core/util/EuclideanDistanceCalculator.java similarity index 97% rename from jsprit-core/src/main/java/util/EuclideanDistanceCalculator.java rename to jsprit-core/src/main/java/jsprit/core/util/EuclideanDistanceCalculator.java index d7d36167..a5419d99 100644 --- a/jsprit-core/src/main/java/util/EuclideanDistanceCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/util/EuclideanDistanceCalculator.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; diff --git a/jsprit-core/src/main/java/util/Locations.java b/jsprit-core/src/main/java/jsprit/core/util/Locations.java similarity index 97% rename from jsprit-core/src/main/java/util/Locations.java rename to jsprit-core/src/main/java/jsprit/core/util/Locations.java index 25e21717..739fb824 100644 --- a/jsprit-core/src/main/java/util/Locations.java +++ b/jsprit-core/src/main/java/jsprit/core/util/Locations.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; diff --git a/jsprit-core/src/main/java/util/ManhattanCosts.java b/jsprit-core/src/main/java/jsprit/core/util/ManhattanCosts.java similarity index 92% rename from jsprit-core/src/main/java/util/ManhattanCosts.java rename to jsprit-core/src/main/java/jsprit/core/util/ManhattanCosts.java index 2abc9ca7..df40a2b8 100644 --- a/jsprit-core/src/main/java/util/ManhattanCosts.java +++ b/jsprit-core/src/main/java/jsprit/core/util/ManhattanCosts.java @@ -14,13 +14,13 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.Vehicle; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; /** * diff --git a/jsprit-core/src/main/java/util/ManhattanDistanceCalculator.java b/jsprit-core/src/main/java/jsprit/core/util/ManhattanDistanceCalculator.java similarity index 97% rename from jsprit-core/src/main/java/util/ManhattanDistanceCalculator.java rename to jsprit-core/src/main/java/jsprit/core/util/ManhattanDistanceCalculator.java index dbb46162..7059bdba 100644 --- a/jsprit-core/src/main/java/util/ManhattanDistanceCalculator.java +++ b/jsprit-core/src/main/java/jsprit/core/util/ManhattanDistanceCalculator.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; diff --git a/jsprit-core/src/main/java/util/Neighborhood.java b/jsprit-core/src/main/java/jsprit/core/util/Neighborhood.java similarity index 97% rename from jsprit-core/src/main/java/util/Neighborhood.java rename to jsprit-core/src/main/java/jsprit/core/util/Neighborhood.java index 5470edd9..bba5975b 100644 --- a/jsprit-core/src/main/java/util/Neighborhood.java +++ b/jsprit-core/src/main/java/jsprit/core/util/Neighborhood.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; public interface Neighborhood { diff --git a/jsprit-core/src/main/java/util/NeighborhoodImpl.java b/jsprit-core/src/main/java/jsprit/core/util/NeighborhoodImpl.java similarity index 96% rename from jsprit-core/src/main/java/util/NeighborhoodImpl.java rename to jsprit-core/src/main/java/jsprit/core/util/NeighborhoodImpl.java index 55cafb3b..393289dc 100644 --- a/jsprit-core/src/main/java/util/NeighborhoodImpl.java +++ b/jsprit-core/src/main/java/jsprit/core/util/NeighborhoodImpl.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import java.util.Collection; import java.util.HashMap; @@ -22,10 +22,11 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.vehicle.Vehicle; + import org.apache.log4j.Logger; -import basics.Service; -import basics.route.Vehicle; diff --git a/jsprit-core/src/main/java/util/RandomNumberGeneration.java b/jsprit-core/src/main/java/jsprit/core/util/RandomNumberGeneration.java similarity index 97% rename from jsprit-core/src/main/java/util/RandomNumberGeneration.java rename to jsprit-core/src/main/java/jsprit/core/util/RandomNumberGeneration.java index ff9ca1dc..abff7c96 100644 --- a/jsprit-core/src/main/java/util/RandomNumberGeneration.java +++ b/jsprit-core/src/main/java/jsprit/core/util/RandomNumberGeneration.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import java.util.Random; diff --git a/jsprit-core/src/main/java/util/Resource.java b/jsprit-core/src/main/java/jsprit/core/util/Resource.java similarity index 98% rename from jsprit-core/src/main/java/util/Resource.java rename to jsprit-core/src/main/java/jsprit/core/util/Resource.java index 456bc557..63e1d4d0 100644 --- a/jsprit-core/src/main/java/util/Resource.java +++ b/jsprit-core/src/main/java/jsprit/core/util/Resource.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import java.io.File; import java.io.FileInputStream; diff --git a/jsprit-core/src/main/java/algorithms/SolutionVerifier.java b/jsprit-core/src/main/java/jsprit/core/util/SolutionVerifier.java similarity index 81% rename from jsprit-core/src/main/java/algorithms/SolutionVerifier.java rename to jsprit-core/src/main/java/jsprit/core/util/SolutionVerifier.java index 93812abe..e62e2c81 100644 --- a/jsprit-core/src/main/java/algorithms/SolutionVerifier.java +++ b/jsprit-core/src/main/java/jsprit/core/util/SolutionVerifier.java @@ -14,19 +14,20 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.util; import java.util.Collection; import java.util.HashSet; import java.util.Set; -import basics.Job; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.AlgorithmEndsListener; -import basics.route.VehicleRoute; +import jsprit.core.algorithm.listener.AlgorithmEndsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; -class SolutionVerifier implements AlgorithmEndsListener{ + +public class SolutionVerifier implements AlgorithmEndsListener{ @Override public void informAlgorithmEnds(VehicleRoutingProblem problem, Collection solutions) { diff --git a/jsprit-core/src/main/java/util/Solutions.java b/jsprit-core/src/main/java/jsprit/core/util/Solutions.java similarity index 71% rename from jsprit-core/src/main/java/util/Solutions.java rename to jsprit-core/src/main/java/jsprit/core/util/Solutions.java index 12d69e0b..5243af98 100644 --- a/jsprit-core/src/main/java/util/Solutions.java +++ b/jsprit-core/src/main/java/jsprit/core/util/Solutions.java @@ -14,14 +14,22 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import java.util.Collection; -import basics.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + public class Solutions { + /** + * + * @deprecated use bestOf instead. + * @param solutions + * @return + */ + @Deprecated public static VehicleRoutingProblemSolution getBest(Collection solutions){ VehicleRoutingProblemSolution best = null; for(VehicleRoutingProblemSolution s : solutions){ @@ -30,5 +38,15 @@ public class Solutions { } return best; } + + + public static VehicleRoutingProblemSolution bestOf(Collection solutions){ + VehicleRoutingProblemSolution best = null; + for(VehicleRoutingProblemSolution s : solutions){ + if(best == null) best = s; + else if(s.getCost() < best.getCost()) best = s; + } + return best; + } } diff --git a/jsprit-core/src/main/java/util/StopWatch.java b/jsprit-core/src/main/java/jsprit/core/util/StopWatch.java similarity index 98% rename from jsprit-core/src/main/java/util/StopWatch.java rename to jsprit-core/src/main/java/jsprit/core/util/StopWatch.java index 123c6f7d..e0d1e32f 100644 --- a/jsprit-core/src/main/java/util/StopWatch.java +++ b/jsprit-core/src/main/java/jsprit/core/util/StopWatch.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import org.apache.log4j.Logger; diff --git a/jsprit-core/src/main/java/util/VehicleRoutingTransportCostsMatrix.java b/jsprit-core/src/main/java/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java similarity index 96% rename from jsprit-core/src/main/java/util/VehicleRoutingTransportCostsMatrix.java rename to jsprit-core/src/main/java/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java index d820641b..ae12bbb6 100644 --- a/jsprit-core/src/main/java/util/VehicleRoutingTransportCostsMatrix.java +++ b/jsprit-core/src/main/java/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java @@ -14,18 +14,19 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import java.util.HashMap; import java.util.Map; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleTypeImpl.VehicleCostParams; + import org.apache.log4j.Logger; -import basics.VehicleRoutingProblem; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleTypeImpl.VehicleCostParams; /** * CostMatrix that allows pre-compiled time and distance-matrices to be considered as {@link VehicleRoutingRoutingCosts} diff --git a/jsprit-core/src/main/java/util/VrpVerifier.java b/jsprit-core/src/main/java/jsprit/core/util/VrpVerifier.java similarity index 89% rename from jsprit-core/src/main/java/util/VrpVerifier.java rename to jsprit-core/src/main/java/jsprit/core/util/VrpVerifier.java index 6767670d..45cbbb70 100644 --- a/jsprit-core/src/main/java/util/VrpVerifier.java +++ b/jsprit-core/src/main/java/jsprit/core/util/VrpVerifier.java @@ -14,20 +14,21 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.core.util; import java.util.Collection; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.listener.AlgorithmStartsListener; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; + import org.apache.log4j.Logger; -import basics.Job; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.AlgorithmStartsListener; -import basics.route.DriverImpl; -import basics.route.Vehicle; public class VrpVerifier implements AlgorithmStartsListener{ diff --git a/jsprit-core/src/main/java/util/Counter.java b/jsprit-core/src/main/java/util/Counter.java deleted file mode 100644 index b24f6aee..00000000 --- a/jsprit-core/src/main/java/util/Counter.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package util; - -import java.util.concurrent.atomic.AtomicLong; - -import org.apache.log4j.Logger; - - -/** - * Counter which is a copy of Counter.java at package org.matsim.core.utils.misc (www.matsim.org); - * - * @author Schroeder - * - */ - - -public final class Counter { - private final String prefix; - private AtomicLong counter = new AtomicLong(0); - private AtomicLong nextCounter = new AtomicLong(1); - private static final Logger log = Logger.getLogger(Counter.class); - - /** - * @param prefix Some text that is output just before the counter-value. - */ - public Counter(final String prefix) { - this.prefix = prefix; - } - - public void incCounter() { - long i = this.counter.incrementAndGet(); - long n = this.nextCounter.get(); - if (i >= n) { - if (this.nextCounter.compareAndSet(n, n*2)) { - log.info(this.prefix + n); - } - } - } - - public void printCounter() { - log.info(this.prefix + this.counter.get()); - } - - public long getCounter() { - return this.counter.get(); - } - - public void reset() { - this.counter.set(0); - this.nextCounter.set(1); - } -} - - diff --git a/jsprit-core/src/main/java/util/RouteUtils.java b/jsprit-core/src/main/java/util/RouteUtils.java deleted file mode 100644 index 3fc91bb3..00000000 --- a/jsprit-core/src/main/java/util/RouteUtils.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package util; - -import java.util.Collection; - -import basics.route.TourActivity; -import basics.route.VehicleRoute; - - - - -public class RouteUtils { - -// public static double getTransportCosts(Collection routes) { -// double cost = 0.0; -// for (VehicleRoute r : routes) { -// if(r.getTour().isEmpty()){ -// continue; -// } -// cost += r.getTour().tourData.transportCosts; -// } -// return cost; -// } -// -// public static double getTransportTime(Collection routes) { -// double time = 0.0; -// for (VehicleRoute r : routes) { -// if(r.getTour().isEmpty()){ -// continue; -// } -// time += r.getTour().tourData.transportTime; -// } -// return time; -// } - - public static double getTotalCost(Collection routes){ - double total = 0.0; - for (VehicleRoute r : routes) { - if(r.isEmpty()) { - total += 0.0; - } - else total += r.getCost(); - } - return total; - } - - - public static double getTotalServiceTime(Collection routes){ - double total = 0.0; - for (VehicleRoute r : routes) { - if(r.getTourActivities().isEmpty()){ - continue; - } - for(TourActivity act : r.getTourActivities().getActivities()){ - total += act.getOperationTime(); - } - } - return total; - } - - - public static double getTotalFixCost(Collection routes){ - double total = 0.0; - for (VehicleRoute r : routes) { - if(r.getTourActivities().isEmpty()){ - continue; - } - total += r.getVehicle().getType().getVehicleCostParams().fix; - } - return total; - } - - public static int getNuOfActiveRoutes(Collection routes){ - int count = 0; - for (VehicleRoute r : routes) { - if(r.isEmpty()){ - continue; - } - count++; - } - return count; - } -} diff --git a/jsprit-core/src/main/resources/algorithm_schema.xsd b/jsprit-core/src/main/resources/algorithm_schema.xsd index 66b1582b..050f12db 100644 --- a/jsprit-core/src/main/resources/algorithm_schema.xsd +++ b/jsprit-core/src/main/resources/algorithm_schema.xsd @@ -99,7 +99,10 @@ + + + diff --git a/jsprit-core/src/main/resources/vrp_xml_schema.xsd b/jsprit-core/src/main/resources/vrp_xml_schema.xsd index 77ae4c9c..04edd787 100644 --- a/jsprit-core/src/main/resources/vrp_xml_schema.xsd +++ b/jsprit-core/src/main/resources/vrp_xml_schema.xsd @@ -1,24 +1,5 @@ - + @@ -99,16 +80,10 @@ - - - - - - @@ -138,6 +113,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -151,17 +173,17 @@ - + - - - - - + + + + + @@ -188,6 +210,22 @@ + + + + + + + + + + + + + + + + diff --git a/jsprit-core/src/test/java/algorithms/AlgorithmsSuite.java b/jsprit-core/src/test/java/algorithms/AlgorithmsSuite.java deleted file mode 100644 index f3cfe643..00000000 --- a/jsprit-core/src/test/java/algorithms/AlgorithmsSuite.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -import algorithms.acceptors.AcceptNewRemoveWorstTest; -import algorithms.selectors.SelectBestTest; -import algorithms.selectors.SelectRandomlyTest; - - - -@RunWith(Suite.class) -@Suite.SuiteClasses({ - CalcVehicleTypeDependentServiceInsertionTest.class, -// FindCheaperVehicleTest.class, - GendreauPostOptTest.class, - TestAlgorithmReader.class, -// TestAux.class, - TestCalculatesServiceInsertion.class, - TestCalculatesServiceInsertionOnRouteLevel.class, - TestSchrimpf.class, - - TestJobDistanceAvgCosts.class, - TestTourStateUpdaterWithService.class, - - SelectBestTest.class, - SelectRandomlyTest.class, - AcceptNewRemoveWorstTest.class, -// TestUpdateTourStatesForwardInTime.class - -}) -public class AlgorithmsSuite {} diff --git a/jsprit-core/src/test/java/algorithms/BuildCVRPAlgoFromScratchTest.java b/jsprit-core/src/test/java/algorithms/BuildCVRPAlgoFromScratchTest.java deleted file mode 100644 index a625bab6..00000000 --- a/jsprit-core/src/test/java/algorithms/BuildCVRPAlgoFromScratchTest.java +++ /dev/null @@ -1,131 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import static org.junit.Assert.assertEquals; - -import java.util.Collection; - -import org.junit.Before; -import org.junit.Test; - -import util.Solutions; -import algorithms.HardConstraints.HardActivityLevelConstraint; -import algorithms.StateUpdates.UpdateCostsAtRouteLevel; -import algorithms.StateUpdates.UpdateLoadAtRouteLevel; -import algorithms.acceptors.AcceptNewIfBetterThanWorst; -import algorithms.selectors.SelectBest; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.IterationStartsListener; -import basics.algo.SearchStrategy; -import basics.algo.SearchStrategyManager; -import basics.algo.SolutionCostCalculator; -import basics.io.VrpXMLReader; -import basics.route.TourActivity; -import basics.route.VehicleRoute; - -public class BuildCVRPAlgoFromScratchTest { - - VehicleRoutingProblem vrp; - - VehicleRoutingAlgorithm vra; - - @Before - public void setup(){ - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(builder).read("src/test/resources/vrpnc1-jsprit.xml"); - vrp = builder.build(); - - final StateManagerImpl stateManager = new StateManagerImpl(); - HardActivityLevelConstraint hardActLevelConstraint = new HardActivityLevelConstraint() { - - @Override - public boolean fulfilled(InsertionContext iFacts, TourActivity prevAct, TourActivity newAct, TourActivity nextAct, double prevActDepTime) { - return true; - } - }; - ActivityInsertionCostsCalculator marginalCalculus = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), hardActLevelConstraint); - CalculatesServiceInsertion serviceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), marginalCalculus, new HardConstraints.HardLoadConstraint(stateManager)); - - VehicleFleetManager fleetManager = new InfiniteVehicles(vrp.getVehicles()); - JobInsertionCalculator finalServiceInsertion = new CalculatesVehTypeDepServiceInsertion(fleetManager, serviceInsertion); - - BestInsertion bestInsertion = new BestInsertion(finalServiceInsertion); - - RuinRadial radial = new RuinRadial(vrp, 0.15, new JobDistanceAvgCosts(vrp.getTransportCosts())); - RuinRandom random = new RuinRandom(vrp, 0.25); - - SolutionCostCalculator solutionCostCalculator = new SolutionCostCalculator() { - - @Override - public void calculateCosts(VehicleRoutingProblemSolution solution) { - double costs = 0.0; - for(VehicleRoute route : solution.getRoutes()){ - costs += stateManager.getRouteState(route, StateTypes.COSTS).toDouble(); - } - solution.setCost(costs); - } - }; - - SearchStrategy randomStrategy = new SearchStrategy(new SelectBest(), new AcceptNewIfBetterThanWorst(1), solutionCostCalculator); - RuinAndRecreateModule randomModule = new RuinAndRecreateModule("randomRuin_bestInsertion", bestInsertion, random); - randomStrategy.addModule(randomModule); - - SearchStrategy radialStrategy = new SearchStrategy(new SelectBest(), new AcceptNewIfBetterThanWorst(1), solutionCostCalculator); - RuinAndRecreateModule radialModule = new RuinAndRecreateModule("radialRuin_bestInsertion", bestInsertion, radial); - radialStrategy.addModule(radialModule); - - SearchStrategyManager strategyManager = new SearchStrategyManager(); - strategyManager.addStrategy(radialStrategy, 0.5); - strategyManager.addStrategy(randomStrategy, 0.5); - - vra = new VehicleRoutingAlgorithm(vrp, strategyManager); - - //listeners - IterationStartsListener clearStateManager = new IterationStartsListener() { - - @Override - public void informIterationStarts(int i, VehicleRoutingProblem problem, Collection solutions) { - stateManager.clear(); - } - }; - vra.getAlgorithmListeners().addListener(clearStateManager); - vra.getSearchStrategyManager().addSearchStrategyModuleListener(new RemoveEmptyVehicles(fleetManager)); - - vra.getSearchStrategyManager().addSearchStrategyModuleListener(new UpdateCostsAtRouteLevel(stateManager, vrp.getTransportCosts(), vrp.getActivityCosts())); - vra.getSearchStrategyManager().addSearchStrategyModuleListener(new UpdateLoadAtRouteLevel(stateManager)); - - VehicleRoutingProblemSolution iniSolution = new CreateInitialSolution(bestInsertion, solutionCostCalculator).createInitialSolution(vrp); -// System.out.println("ini: costs="+iniSolution.getCost()+";#routes="+iniSolution.getRoutes().size()); - vra.addInitialSolution(iniSolution); - - vra.setNuOfIterations(2000); -// vra.setPrematureBreak(200); - - } - - @Test - public void testVRA(){ - Collection solutions = vra.searchSolutions(); - System.out.println("costs="+Solutions.getBest(solutions).getCost()+";#routes="+Solutions.getBest(solutions).getRoutes().size()); - assertEquals(530.0, Solutions.getBest(solutions).getCost(),15.0); - assertEquals(5, Solutions.getBest(solutions).getRoutes().size()); - } - -} diff --git a/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java b/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java deleted file mode 100644 index 74935c5c..00000000 --- a/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import java.util.Collection; - -import org.apache.log4j.Logger; -import org.junit.Before; -import org.junit.Test; - -import algorithms.HardConstraints.HardActivityLevelConstraintManager; -import algorithms.StateManager.StateImpl; -import algorithms.StateUpdates.UpdateActivityTimes; -import algorithms.StateUpdates.UpdateCostsAtAllLevels; -import algorithms.StateUpdates.UpdateEarliestStartTimeWindowAtActLocations; -import algorithms.StateUpdates.UpdateLatestOperationStartTimeAtActLocations; -import algorithms.acceptors.AcceptNewIfBetterThanWorst; -import algorithms.selectors.SelectBest; -import basics.Delivery; -import basics.Job; -import basics.Pickup; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.InsertionStartsListener; -import basics.algo.JobInsertedListener; -import basics.algo.SearchStrategy; -import basics.algo.SearchStrategyManager; -import basics.algo.SolutionCostCalculator; -import basics.io.VrpXMLReader; -import basics.route.VehicleRoute; - -public class BuildPDVRPAlgoFromScratchTest { - - VehicleRoutingProblem vrp; - - VehicleRoutingAlgorithm vra; - - static Logger log = Logger.getLogger(BuildPDVRPAlgoFromScratchTest.class); - - @Before - public void setup(){ - - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - new VrpXMLReader(builder).read("src/test/resources/pd_solomon_r101.xml"); - vrp = builder.build(); - - final StateManagerImpl stateManager = new StateManagerImpl(); - - HardActivityLevelConstraintManager actLevelConstraintAccumulator = new HardActivityLevelConstraintManager(); - actLevelConstraintAccumulator.addConstraint(new HardConstraints.HardPickupAndDeliveryActivityLevelConstraint(stateManager)); - actLevelConstraintAccumulator.addConstraint(new HardConstraints.HardTimeWindowActivityLevelConstraint(stateManager, vrp.getTransportCosts())); - - ActivityInsertionCostsCalculator marginalCalculus = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), actLevelConstraintAccumulator); - - CalculatesServiceInsertion serviceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), marginalCalculus, new HardConstraints.HardPickupAndDeliveryLoadConstraint(stateManager)); -// CalculatesServiceInsertion serviceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), marginalCalculus, new HardConstraints.HardLoadConstraint(stateManager)); - - VehicleFleetManager fleetManager = new InfiniteVehicles(vrp.getVehicles()); - JobInsertionCalculator finalServiceInsertion = new CalculatesVehTypeDepServiceInsertion(fleetManager, serviceInsertion); - - BestInsertion bestInsertion = new BestInsertion(finalServiceInsertion); - - RuinRadial radial = new RuinRadial(vrp, 0.15, new JobDistanceAvgCosts(vrp.getTransportCosts())); - RuinRandom random = new RuinRandom(vrp, 0.25); - - SolutionCostCalculator solutionCostCalculator = new SolutionCostCalculator() { - - @Override - public void calculateCosts(VehicleRoutingProblemSolution solution) { - double costs = 0.0; - for(VehicleRoute route : solution.getRoutes()){ - costs += stateManager.getRouteState(route, StateTypes.COSTS).toDouble(); - } - solution.setCost(costs); - } - }; - - SearchStrategy randomStrategy = new SearchStrategy(new SelectBest(), new AcceptNewIfBetterThanWorst(1), solutionCostCalculator); - RuinAndRecreateModule randomModule = new RuinAndRecreateModule("randomRuin_bestInsertion", bestInsertion, random); - randomStrategy.addModule(randomModule); - - SearchStrategy radialStrategy = new SearchStrategy(new SelectBest(), new AcceptNewIfBetterThanWorst(1), solutionCostCalculator); - RuinAndRecreateModule radialModule = new RuinAndRecreateModule("radialRuin_bestInsertion", bestInsertion, radial); - radialStrategy.addModule(radialModule); - - SearchStrategyManager strategyManager = new SearchStrategyManager(); - strategyManager.addStrategy(radialStrategy, 0.5); - strategyManager.addStrategy(randomStrategy, 0.5); - - vra = new VehicleRoutingAlgorithm(vrp, strategyManager); - - - vra.getAlgorithmListeners().addListener(new StateUpdates.ResetStateManager(stateManager)); - - final RouteActivityVisitor iterateForward = new RouteActivityVisitor(); - - iterateForward.addActivityVisitor(new UpdateActivityTimes(vrp.getTransportCosts())); - iterateForward.addActivityVisitor(new UpdateEarliestStartTimeWindowAtActLocations(stateManager, vrp.getTransportCosts())); - iterateForward.addActivityVisitor(new UpdateCostsAtAllLevels(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); - - iterateForward.addActivityVisitor(new StateUpdates.UpdateOccuredDeliveriesAtActivityLevel(stateManager)); - iterateForward.addActivityVisitor(new StateUpdates.UpdateLoadAtActivityLevel(stateManager)); - - final ReverseRouteActivityVisitor iterateBackward = new ReverseRouteActivityVisitor(); - iterateBackward.addActivityVisitor(new UpdateLatestOperationStartTimeAtActLocations(stateManager, vrp.getTransportCosts())); - iterateBackward.addActivityVisitor(new StateUpdates.UpdateFuturePickupsAtActivityLevel(stateManager)); - - - InsertionStartsListener loadVehicleInDepot = new InsertionStartsListener() { - - @Override - public void informInsertionStarts(Collection vehicleRoutes, Collection unassignedJobs) { - for(VehicleRoute route : vehicleRoutes){ - int loadAtDepot = 0; - int loadAtEnd = 0; - for(Job j : route.getTourActivities().getJobs()){ - if(j instanceof Delivery){ - loadAtDepot += j.getCapacityDemand(); - } - if(j instanceof Pickup){ - loadAtEnd += j.getCapacityDemand(); - } - } - stateManager.putRouteState(route, StateTypes.LOAD_AT_DEPOT, new StateImpl(loadAtDepot)); - stateManager.putRouteState(route, StateTypes.LOAD, new StateImpl(loadAtEnd)); - iterateForward.visit(route); - iterateBackward.visit(route); - } - } - - }; - - vra.getSearchStrategyManager().addSearchStrategyModuleListener(new RemoveEmptyVehicles(fleetManager)); - - JobInsertedListener updateLoadAfterJobHasBeenInserted = new JobInsertedListener() { - - @Override - public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) { -// log.info("insert job " + job2insert.getClass().toString() + " job " + job2insert + "" + job2insert.getCapacityDemand() + " in route " + inRoute.getTourActivities()); - - if(job2insert instanceof Delivery){ - int loadAtDepot = (int) stateManager.getRouteState(inRoute, StateTypes.LOAD_AT_DEPOT).toDouble(); -// log.info("loadAtDepot="+loadAtDepot); - stateManager.putRouteState(inRoute, StateTypes.LOAD_AT_DEPOT, new StateImpl(loadAtDepot + job2insert.getCapacityDemand())); - } - if(job2insert instanceof Pickup){ - int loadAtEnd = (int) stateManager.getRouteState(inRoute, StateTypes.LOAD).toDouble(); -// log.info("loadAtEnd="+loadAtEnd); - stateManager.putRouteState(inRoute, StateTypes.LOAD, new StateImpl(loadAtEnd + job2insert.getCapacityDemand())); - } - iterateForward.visit(inRoute); - iterateBackward.visit(inRoute); - } - }; - - bestInsertion.addListener(loadVehicleInDepot); - bestInsertion.addListener(updateLoadAfterJobHasBeenInserted); - - VehicleRoutingProblemSolution iniSolution = new CreateInitialSolution(bestInsertion, solutionCostCalculator).createInitialSolution(vrp); -// System.out.println("ini: costs="+iniSolution.getCost()+";#routes="+iniSolution.getRoutes().size()); - vra.addInitialSolution(iniSolution); - - vra.setNuOfIterations(10000); - vra.setPrematureBreak(1000); - - } - - @Test - public void test(){ - Collection solutions = vra.searchSolutions(); -// System.out.println(Solutions.getBest(solutions).getCost()); -// new VrpXMLWriter(vrp, solutions).write("output/pd_solomon_r101.xml"); - - } - -} diff --git a/jsprit-core/src/test/java/algorithms/GendreauPostOptTest.java b/jsprit-core/src/test/java/algorithms/GendreauPostOptTest.java deleted file mode 100644 index 7fb0e227..00000000 --- a/jsprit-core/src/test/java/algorithms/GendreauPostOptTest.java +++ /dev/null @@ -1,282 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; - -import util.Coordinate; -import util.ManhattanDistanceCalculator; -import util.RouteUtils; -import algorithms.StateUpdates.UpdateStates; -import basics.Job; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.DriverImpl; -import basics.route.ServiceActivity; -import basics.route.TimeWindow; -import basics.route.TourActivities; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; - -public class GendreauPostOptTest { - - TourActivities tour; - - Vehicle heavyVehicle; - - Vehicle lightVehicle1; - - Vehicle lightVehicle2; - - VehicleRoutingTransportCosts cost; - - VehicleRoutingActivityCosts activityCosts; - - VehicleRoutingProblem vrp; - - Service job1; - - Service job2; - - Service job3; - - private StateManagerImpl states; - - private List vehicles; - - private VehicleFleetManagerImpl fleetManager; - - private JobInsertionCalculator insertionCalc; - - @Before - public void setUp(){ - - cost = new VehicleRoutingTransportCosts() { - - @Override - public double getBackwardTransportTime(String fromId, String toId, - double arrivalTime, Driver driver, Vehicle vehicle) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public double getBackwardTransportCost(String fromId, String toId, - double arrivalTime, Driver driver, Vehicle vehicle) { - // TODO Auto-generated method stub - return 0; - } - - @Override - public double getTransportCost(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) { - - String[] fromTokens = fromId.split(","); - String[] toTokens = toId.split(","); - double fromX = Double.parseDouble(fromTokens[0]); - double fromY = Double.parseDouble(fromTokens[1]); - - double toX = Double.parseDouble(toTokens[0]); - double toY = Double.parseDouble(toTokens[1]); - - double costPerDistanceUnit; - if(vehicle != null){ - costPerDistanceUnit = vehicle.getType().getVehicleCostParams().perDistanceUnit; - } - else{ - costPerDistanceUnit = 1; - } - - return costPerDistanceUnit*ManhattanDistanceCalculator.calculateDistance(new Coordinate(fromX, fromY), new Coordinate(toX, toY)); - } - - @Override - public double getTransportTime(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) { - return 0; - } - }; - - VehicleTypeImpl lightType = VehicleTypeImpl.Builder.newInstance("light", 10).setFixedCost(10).setCostPerDistance(1.0).build(); - VehicleTypeImpl heavyType = VehicleTypeImpl.Builder.newInstance("heavy", 10).setFixedCost(30).setCostPerDistance(2.0).build(); - - lightVehicle1 = VehicleImpl.Builder.newInstance("light").setLocationId("0,0").setType(lightType).build(); - lightVehicle2 = VehicleImpl.Builder.newInstance("light2").setLocationId("0,0").setType(lightType).build(); - heavyVehicle = VehicleImpl.Builder.newInstance("heavy").setLocationId("0,0").setType(heavyType).build(); - - - job1 = getService("10,0"); - job2 = getService("10,10"); - job3 = getService("0,10"); - - Collection jobs = new ArrayList(); - jobs.add(job1); - jobs.add(job2); - jobs.add(job3); - - vehicles = Arrays.asList(lightVehicle1,lightVehicle2, heavyVehicle); - -// Collection vehicles = Arrays.asList(lightVehicle1,lightVehicle2, heavyVehicle); - fleetManager = new VehicleFleetManagerImpl(vehicles); - states = new StateManagerImpl(); - - activityCosts = new ExampleActivityCostFunction(); - - CalculatesServiceInsertion standardServiceInsertion = new CalculatesServiceInsertion(cost, new LocalActivityInsertionCostsCalculator(cost, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, cost)), new HardConstraints.HardLoadConstraint(states)); - - CalculatesServiceInsertionConsideringFixCost withFixCost = new CalculatesServiceInsertionConsideringFixCost(standardServiceInsertion, states); - withFixCost.setWeightOfFixCost(1.2); - - insertionCalc = new CalculatesVehTypeDepServiceInsertion(fleetManager, withFixCost); - -// updater = new TourStateUpdater(states, cost, activityCosts); - - } - - @Test - public void whenPostOpt_splitsTour_oneActiveTourBecomeTwoSeperateActiveTours(){ - Collection jobs = new ArrayList(); - jobs.add(job1); - jobs.add(job2); - - vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addAllVehicles(vehicles).setRoutingCost(cost).build(); - - TourActivities tour = new TourActivities(); - tour.addActivity(ServiceActivity.newInstance(job1)); - tour.addActivity(ServiceActivity.newInstance(job2)); - - VehicleRoute route = VehicleRoute.newInstance(tour,DriverImpl.noDriver(),heavyVehicle); - - fleetManager.lock(heavyVehicle); - - UpdateStates stateUpdater = new UpdateStates(states, vrp.getTransportCosts(), vrp.getActivityCosts()); - stateUpdater.update(route); - - Collection routes = new ArrayList(); - routes.add(route); -// routes.add(new VehicleRoute(getEmptyTour(),getDriver(),getNoVehicle())); -// routes.add(new VehicleRoute(getEmptyTour(),getDriver(),getNoVehicle())); - - VehicleRoutingProblemSolution sol = new VehicleRoutingProblemSolution(routes, states.getRouteState(route, StateTypes.COSTS).toDouble() + getFixedCosts(routes)); - - assertEquals(110.0, sol.getCost(), 0.5); - - - RuinRadial radialRuin = new RuinRadial(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts())); - radialRuin.addListener(stateUpdater); - - InsertionStrategy insertionStrategy = new BestInsertion(insertionCalc); - insertionStrategy.addListener(stateUpdater); - insertionStrategy.addListener(new VehicleSwitched(fleetManager)); - Gendreau postOpt = new Gendreau(vrp, radialRuin, insertionStrategy); - postOpt.setFleetManager(fleetManager); - - VehicleRoutingProblemSolution newSolution = postOpt.runAndGetSolution(sol); - newSolution.setCost(getCosts(newSolution,states)); - - assertEquals(2,RouteUtils.getNuOfActiveRoutes(newSolution.getRoutes())); - assertEquals(2,newSolution.getRoutes().size()); - assertEquals(80.0,newSolution.getCost(),0.5); - } - - private double getFixedCosts(Collection routes) { - double c = 0.0; - for(VehicleRoute r : routes){ c += r.getVehicle().getType().getVehicleCostParams().fix; } - return c; - } - - private double getCosts(VehicleRoutingProblemSolution newSolution, StateManagerImpl states) { - double c = 0.0; - for(VehicleRoute r : newSolution.getRoutes()){ - c += states.getRouteState(r, StateTypes.COSTS).toDouble() + r.getVehicle().getType().getVehicleCostParams().fix; - } - return c; - } - - @Test - public void whenPostOpt_optsRoutesWithMoreThanTwoJobs_oneRouteBecomesTwoRoutes(){ - Collection jobs = new ArrayList(); - jobs.add(job1); - jobs.add(job2); - jobs.add(job3); - - vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addAllVehicles(vehicles).setRoutingCost(cost).build(); - - TourActivities tour = new TourActivities(); - tour.addActivity(ServiceActivity.newInstance(job1)); - tour.addActivity(ServiceActivity.newInstance(job2)); - tour.addActivity(ServiceActivity.newInstance(job3)); - - VehicleRoute route = VehicleRoute.newInstance(tour,DriverImpl.noDriver(),heavyVehicle); - - UpdateStates stateUpdater = new UpdateStates(states, vrp.getTransportCosts(), vrp.getActivityCosts()); - stateUpdater.update(route); - - fleetManager.lock(heavyVehicle); - - Collection routes = new ArrayList(); - routes.add(route); - - VehicleRoutingProblemSolution sol = new VehicleRoutingProblemSolution(routes, route.getCost()); - sol.setCost(getCosts(sol,states)); - - assertEquals(110.0, sol.getCost(), 0.5); - - RuinRadial radialRuin = new RuinRadial(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts())); - InsertionStrategy insertionStrategy = new BestInsertion(insertionCalc); - insertionStrategy.addListener(stateUpdater); - insertionStrategy.addListener(new VehicleSwitched(fleetManager)); - Gendreau postOpt = new Gendreau(vrp, radialRuin, insertionStrategy); - postOpt.setShareOfJobsToRuin(1.0); - postOpt.setNuOfIterations(1); - postOpt.setFleetManager(fleetManager); -// postOpt.setWithFix(withFixCost); - VehicleRoutingProblemSolution newSolution = postOpt.runAndGetSolution(sol); - newSolution.setCost(getCosts(newSolution,states)); - - assertEquals(2,RouteUtils.getNuOfActiveRoutes(newSolution.getRoutes())); - assertEquals(2,newSolution.getRoutes().size()); - assertEquals(80.0,newSolution.getCost(),0.5); - } - - private Service getService(String to, double serviceTime) { - Service s = Service.Builder.newInstance(to, 0).setLocationId(to).setServiceTime(serviceTime).setTimeWindow(TimeWindow.newInstance(0.0, 20.0)).build(); - - return s; - } - - private Service getService(String to) { - Service s = getService(to, 0.0); - return s; - } - - - - -} diff --git a/jsprit-core/src/test/java/algorithms/TestIterateRouteForwardInTime.java b/jsprit-core/src/test/java/algorithms/TestIterateRouteForwardInTime.java deleted file mode 100644 index 9512765d..00000000 --- a/jsprit-core/src/test/java/algorithms/TestIterateRouteForwardInTime.java +++ /dev/null @@ -1,214 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package algorithms; - -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.Collection; - -import org.junit.Before; -import org.junit.Test; - -import util.Coordinate; -import util.ManhattanDistanceCalculator; -import algorithms.StateUpdates.UpdateActivityTimes; -import algorithms.StateUpdates.UpdateCostsAtAllLevels; -import algorithms.StateUpdates.UpdateEarliestStartTimeWindowAtActLocations; -import algorithms.StateUpdates.UpdateLoadAtAllLevels; -import basics.Job; -import basics.Service; -import basics.costs.DefaultVehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.DriverImpl; -import basics.route.ServiceActivity; -import basics.route.TimeWindow; -import basics.route.TourActivities; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; - -public class TestIterateRouteForwardInTime { - - TourActivities tour; - - Driver driver; - - Vehicle vehicle; - - TourActivities anotherTour; - - private VehicleRoute vehicleRoute; - - private VehicleRoutingTransportCosts cost; - - ServiceActivity firstAct; - - ServiceActivity secondAct; - - StateManagerImpl stateManager; - - @Before - public void setUp(){ - cost = new VehicleRoutingTransportCosts() { - - @Override - public double getBackwardTransportTime(String fromId, String toId, - double arrivalTime, Driver driver, Vehicle vehicle) { - return getTransportCost(fromId, toId, arrivalTime, driver, vehicle); - } - - @Override - public double getBackwardTransportCost(String fromId, String toId, - double arrivalTime, Driver driver, Vehicle vehicle) { - return getTransportCost(fromId, toId, arrivalTime, driver, vehicle); - } - - @Override - public double getTransportCost(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) { - String[] fromTokens = fromId.split(","); - String[] toTokens = toId.split(","); - double fromX = Double.parseDouble(fromTokens[0]); - double fromY = Double.parseDouble(fromTokens[1]); - - double toX = Double.parseDouble(toTokens[0]); - double toY = Double.parseDouble(toTokens[1]); - - return ManhattanDistanceCalculator.calculateDistance(new Coordinate(fromX, fromY), new Coordinate(toX, toY)); - } - - @Override - public double getTransportTime(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) { - return getTransportCost(fromId, toId, departureTime, driver, vehicle); - } - }; - - Service firstService = Service.Builder.newInstance("1", 5).setLocationId("10,0").setTimeWindow(TimeWindow.newInstance(0, 20)).build(); - Service secondService = Service.Builder.newInstance("2", 5).setLocationId("0,10").setTimeWindow(TimeWindow.newInstance(0, 50)).build(); - - Collection services = new ArrayList(); - services.add(firstService); - services.add(secondService); - - VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("test", 0).build(); - vehicle = VehicleImpl.Builder.newInstance("testvehicle").setType(type).setLocationId("0,0") - .setEarliestStart(0.0).setLatestArrival(50.0).build(); - - tour = new TourActivities(); - firstAct = ServiceActivity.newInstance(firstService); - tour.addActivity(firstAct); - secondAct = ServiceActivity.newInstance(secondService); - tour.addActivity(secondAct); - - vehicleRoute = VehicleRoute.newInstance(tour,DriverImpl.noDriver(),vehicle); - - stateManager = new StateManagerImpl(); - } - - @Test - public void whenIteratingWithoutUpdate_itShouldUpdateNothing() { - IterateRouteForwardInTime forwardInTime = new IterateRouteForwardInTime(cost); - forwardInTime.iterate(vehicleRoute); - - assertEquals(0.0,firstAct.getArrTime(),0.1); - assertEquals(0.0,firstAct.getEndTime(),0.1); - - assertEquals(0.0,secondAct.getArrTime(),0.1); - assertEquals(0.0,secondAct.getEndTime(),0.1); - } - - @Test - public void whenIteratingWithActivityTimeUpdater_itShouldUpdateActivityTimes() { - RouteActivityVisitor forwardInTime = new RouteActivityVisitor(); - forwardInTime.addActivityVisitor(new UpdateActivityTimes(cost)); - forwardInTime.visit(vehicleRoute); - - assertEquals(10.0,firstAct.getArrTime(),0.1); - assertEquals(10.0,firstAct.getEndTime(),0.1); - - assertEquals(30.0,secondAct.getArrTime(),0.1); - assertEquals(30.0,secondAct.getEndTime(),0.1); - } - - @Test - public void whenIteratingWithLoadUpdateAtActLocations_itShouldUpdateLoad() { - RouteActivityVisitor forwardInTime = new RouteActivityVisitor(); - forwardInTime.addActivityVisitor(new UpdateLoadAtAllLevels(stateManager)); - forwardInTime.visit(vehicleRoute); - - assertEquals(5.0, stateManager.getActivityState(firstAct,StateTypes.LOAD).toDouble(), 0.01); - assertEquals(10.0, stateManager.getActivityState(secondAct,StateTypes.LOAD).toDouble(), 0.01); - } - - - @Test - public void testStatesOfAct0(){ - RouteActivityVisitor forwardInTime = new RouteActivityVisitor(); - forwardInTime.visit(vehicleRoute); - - assertEquals(0.0, vehicleRoute.getStart().getEndTime(),0.05); - assertEquals(vehicleRoute.getVehicle().getLocationId(), vehicleRoute.getStart().getLocationId()); - assertEquals(vehicleRoute.getVehicle().getEarliestDeparture(), vehicleRoute.getStart().getTheoreticalEarliestOperationStartTime(),0.05); - assertEquals(vehicleRoute.getVehicle().getLatestArrival(), vehicleRoute.getStart().getTheoreticalLatestOperationStartTime(),0.05); - - } - - @Test - public void testStatesOfAct1(){ - RouteActivityVisitor forwardInTime = new RouteActivityVisitor(); - forwardInTime.addActivityVisitor(new UpdateLoadAtAllLevels(stateManager)); - forwardInTime.addActivityVisitor(new UpdateEarliestStartTimeWindowAtActLocations(stateManager, cost)); - forwardInTime.addActivityVisitor(new UpdateCostsAtAllLevels(new DefaultVehicleRoutingActivityCosts(), cost, stateManager)); - forwardInTime.visit(vehicleRoute); - - assertEquals(10.0, stateManager.getActivityState(firstAct, StateTypes.COSTS).toDouble(),0.05); - assertEquals(5.0, stateManager.getActivityState(firstAct, StateTypes.LOAD).toDouble(),0.05); - assertEquals(10.0, stateManager.getActivityState(firstAct, StateTypes.EARLIEST_OPERATION_START_TIME).toDouble(),0.05); -// assertEquals(20.0, states.getState(tour.getActivities().get(0)).getLatestOperationStart(),0.05); - } - - @Test - public void testStatesOfAct2(){ - RouteActivityVisitor forwardInTime = new RouteActivityVisitor(); - - forwardInTime.addActivityVisitor(new UpdateLoadAtAllLevels(stateManager)); - forwardInTime.addActivityVisitor(new UpdateEarliestStartTimeWindowAtActLocations(stateManager, cost)); - forwardInTime.addActivityVisitor(new UpdateCostsAtAllLevels(new DefaultVehicleRoutingActivityCosts(), cost, stateManager)); - forwardInTime.visit(vehicleRoute); - - assertEquals(30.0, stateManager.getActivityState(secondAct, StateTypes.COSTS).toDouble(),0.05); - assertEquals(10.0, stateManager.getActivityState(secondAct, StateTypes.LOAD).toDouble(),0.05); - assertEquals(30.0, stateManager.getActivityState(secondAct, StateTypes.EARLIEST_OPERATION_START_TIME).toDouble(),0.05); -// assertEquals(40.0, states.getState(tour.getActivities().get(1)).getLatestOperationStart(),0.05); - } - - @Test - public void testStatesOfAct3(){ - RouteActivityVisitor forwardInTime = new RouteActivityVisitor(); - - forwardInTime.addActivityVisitor(new UpdateActivityTimes(cost)); - forwardInTime.addActivityVisitor(new UpdateCostsAtAllLevels(new DefaultVehicleRoutingActivityCosts(), cost, stateManager)); - forwardInTime.visit(vehicleRoute); - - assertEquals(40.0, stateManager.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(), 0.05); - assertEquals(40.0, vehicleRoute.getEnd().getArrTime(),0.05); - assertEquals(50.0, vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime(),0.05); - } - -} diff --git a/jsprit-core/src/test/java/basics/BasicsSuite.java b/jsprit-core/src/test/java/basics/BasicsSuite.java deleted file mode 100644 index 5f0d8aef..00000000 --- a/jsprit-core/src/test/java/basics/BasicsSuite.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics; - -import org.junit.runner.RunWith; -import org.junit.runners.Suite; - -import algorithms.TestVehicleFleetManager; -import basics.algo.SearchStrategyManagerTest; -import basics.algo.SearchStrategyTest; -import basics.io.VrpReaderV2Test; -import basics.io.VrpWriterV2Test; -import basics.io.VrpWriterV3Test; -import basics.route.ServiceActTest; -import basics.route.TestTour; -import basics.route.TestVehicleRoute; - - - - -@RunWith(Suite.class) -@Suite.SuiteClasses({ - SearchStrategyManagerTest.class, - SearchStrategyTest.class, - TestTour.class, - TestVehicleFleetManager.class, - TestVehicleRoute.class, - ServiceActTest.class, - ServiceTest.class, - VehicleRoutingProblemBuilderTest.class, - VrpReaderV2Test.class, - VrpWriterV2Test.class, - VrpWriterV3Test.class - -}) -public class BasicsSuite {} diff --git a/jsprit-core/src/test/java/basics/io/VrpWriterV3Test.java b/jsprit-core/src/test/java/basics/io/VrpWriterV3Test.java deleted file mode 100644 index 9790f92c..00000000 --- a/jsprit-core/src/test/java/basics/io/VrpWriterV3Test.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.io; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; - -import org.junit.Before; -import org.junit.Test; - -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetComposition; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.route.End; -import basics.route.ServiceActivity; -import basics.route.Start; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; - -public class VrpWriterV3Test { - - private String infileName; - - @Before - public void doBefore(){ - infileName = "src/test/resources/infiniteWriterV2Test.xml"; - } - - @Test - public void whenWritingSolutions_itWritesThemCorrectly(){ - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - builder.setFleetComposition(FleetComposition.HETEROGENEOUS); - builder.setFleetSize(FleetSize.FINITE); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType", 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2", 200).build(); - Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setLocationId("loc").setType(type1).build(); - Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setLocationId("loc").setType(type2).build(); - builder.addVehicleType(type1); - builder.addVehicleType(type2); - builder.addVehicle(v1); - builder.addVehicle(v2); - - Service s1 = Service.Builder.newInstance("1", 1).setLocationId("loc").setServiceTime(2.0).build(); - Service s2 = Service.Builder.newInstance("2", 1).setLocationId("loc2").setServiceTime(4.0).build(); - builder.addService(s1).addService(s2); - - VehicleRoutingProblem vrp = builder.build(); - - Collection routes = new ArrayList(); - Start start = Start.newInstance("start", 0.0, Double.MAX_VALUE); - start.setEndTime(10.0); - End end = End.newInstance("end", 0.0, Double.MAX_VALUE); - end.setArrTime(100); - VehicleRoute.Builder routebuilder = VehicleRoute.Builder.newInstance(start, end); - - ServiceActivity act1 = ServiceActivity.newInstance(s1); - ServiceActivity act2 = ServiceActivity.newInstance(s2); - act1.setArrTime(20.0); - act1.setEndTime(30.0); - - act2.setArrTime(40.0); - act2.setEndTime(80.0); - - routebuilder.addActivity(act1).addActivity(act2).setVehicle(v1); - VehicleRoute route = routebuilder.build(); - routes.add(route); - - VehicleRoutingProblemSolution solution = new VehicleRoutingProblemSolution(routes, 100); - - new VrpXMLWriter(vrp, Arrays.asList(solution)).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - Collection solutions = new ArrayList(); - new VrpXMLReader(vrpToReadBuilder, solutions).read(infileName); - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); - - } - -} diff --git a/jsprit-core/src/test/java/basics/route/TestTour.java b/jsprit-core/src/test/java/basics/route/TestTour.java deleted file mode 100644 index 74d1080a..00000000 --- a/jsprit-core/src/test/java/basics/route/TestTour.java +++ /dev/null @@ -1,78 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package basics.route; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Before; -import org.junit.Test; - -import basics.Service; - - -public class TestTour { - - private Service service; - private ServiceActivity act; - private TourActivities tour; - - @Before - public void doBefore(){ - service = Service.Builder.newInstance("yo", 10).setLocationId("loc").build(); - act = ServiceActivity.newInstance(service); - tour = new TourActivities(); - } - - @Test - public void whenAddingServiceAct_serviceActIsAdded(){ - assertFalse(tour.servesJob(service)); - tour.addActivity(act); - assertTrue(tour.servesJob(service)); - } - - @Test(expected=IllegalStateException.class) - public void whenAddingServiceActTwice_serviceActIsAdded(){ - assertFalse(tour.servesJob(service)); - tour.addActivity(act); - tour.addActivity(act); - } - - @Test - public void whenAddingServiceAndRemoveIt_tourShouldNotServeService(){ - assertFalse(tour.servesJob(service)); - tour.addActivity(act); - assertTrue(tour.servesJob(service)); - tour.removeJob(service); - assertFalse(tour.servesJob(service)); - } - - @Test - public void noNameYet(){ - assertEquals(0, tour.getActivities().size()); - tour.addActivity(act); - assertEquals(1, tour.getActivities().size()); - Service anotherServiceInstance = Service.Builder.newInstance("yo", 10).setLocationId("loc").build(); - assertTrue(service.equals(anotherServiceInstance)); - boolean removed = tour.removeJob(anotherServiceInstance); - assertTrue(removed); -// assertEquals(0, tour.getActivities().size()); - } - - -} diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/BuildCVRPAlgoFromScratch_IT.java b/jsprit-core/src/test/java/jsprit/core/algorithm/BuildCVRPAlgoFromScratch_IT.java new file mode 100644 index 00000000..54a20f73 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/BuildCVRPAlgoFromScratch_IT.java @@ -0,0 +1,127 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm; + +import static org.junit.Assert.assertEquals; + +import java.util.Collection; + +import jsprit.core.algorithm.acceptor.GreedyAcceptance; +import jsprit.core.algorithm.listener.IterationStartsListener; +import jsprit.core.algorithm.module.RuinAndRecreateModule; +import jsprit.core.algorithm.recreate.BestInsertionBuilder; +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.algorithm.ruin.RadialRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RandomRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RuinStrategy; +import jsprit.core.algorithm.ruin.distance.AvgServiceDistance; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.algorithm.state.UpdateVariableCosts; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.InfiniteFleetManagerFactory; +import jsprit.core.problem.vehicle.VehicleFleetManager; +import jsprit.core.util.Solutions; + +import org.junit.Before; +import org.junit.Test; + + +public class BuildCVRPAlgoFromScratch_IT { + + VehicleRoutingProblem vrp; + + VehicleRoutingAlgorithm vra; + + @Before + public void setup(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder).read("src/test/resources/vrpnc1-jsprit.xml"); + vrp = builder.build(); + + final StateManager stateManager = new StateManager(vrp); + stateManager.updateLoadStates(); + stateManager.updateTimeWindowStates(); + stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); + + + ConstraintManager cManager = new ConstraintManager(vrp, stateManager); + cManager.addLoadConstraint(); + cManager.addTimeWindowConstraint(); + + VehicleFleetManager fleetManager = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); + + InsertionStrategy bestInsertion = new BestInsertionBuilder(vrp, fleetManager, stateManager, cManager).build(); + + RuinStrategy radial = new RadialRuinStrategyFactory(0.15, new AvgServiceDistance(vrp.getTransportCosts())).createStrategy(vrp); + RuinStrategy random = new RandomRuinStrategyFactory(0.25).createStrategy(vrp); + + SolutionCostCalculator solutionCostCalculator = new SolutionCostCalculator() { + + @Override + public double getCosts(VehicleRoutingProblemSolution solution) { + double costs = 0.0; + for(VehicleRoute route : solution.getRoutes()){ + costs += stateManager.getRouteState(route, StateFactory.COSTS).toDouble(); + } + return costs; + } + }; + + SearchStrategy randomStrategy = new SearchStrategy(new SelectBest(), new GreedyAcceptance(1), solutionCostCalculator); + RuinAndRecreateModule randomModule = new RuinAndRecreateModule("randomRuin_bestInsertion", bestInsertion, random); + randomStrategy.addModule(randomModule); + + SearchStrategy radialStrategy = new SearchStrategy(new SelectBest(), new GreedyAcceptance(1), solutionCostCalculator); + RuinAndRecreateModule radialModule = new RuinAndRecreateModule("radialRuin_bestInsertion", bestInsertion, radial); + radialStrategy.addModule(radialModule); + + SearchStrategyManager strategyManager = new SearchStrategyManager(); + strategyManager.addStrategy(radialStrategy, 0.5); + strategyManager.addStrategy(randomStrategy, 0.5); + + vra = new VehicleRoutingAlgorithm(vrp, strategyManager); + vra.addListener(stateManager); + vra.addListener(new RemoveEmptyVehicles(fleetManager)); + +// vra.getAlgorithmListeners().addListener(stateManager); +// vra.getSearchStrategyManager().addSearchStrategyModuleListener(stateManager); +// vra.getSearchStrategyManager().addSearchStrategyModuleListener(new RemoveEmptyVehicles(fleetManager)); + + VehicleRoutingProblemSolution iniSolution = new InsertionInitialSolutionFactory(bestInsertion, solutionCostCalculator).createSolution(vrp); + + vra.addInitialSolution(iniSolution); + + vra.setNuOfIterations(2000); + + } + + @Test + public void testVRA(){ + Collection solutions = vra.searchSolutions(); + System.out.println("costs="+Solutions.bestOf(solutions).getCost()+";#routes="+Solutions.bestOf(solutions).getRoutes().size()); + assertEquals(530.0, Solutions.bestOf(solutions).getCost(),15.0); + assertEquals(5, Solutions.bestOf(solutions).getRoutes().size()); + } + +} diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/BuildPDVRPAlgoFromScratch_IT.java b/jsprit-core/src/test/java/jsprit/core/algorithm/BuildPDVRPAlgoFromScratch_IT.java new file mode 100644 index 00000000..fcf13379 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/BuildPDVRPAlgoFromScratch_IT.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm; + +import java.util.Collection; + +import jsprit.core.algorithm.acceptor.GreedyAcceptance; +import jsprit.core.algorithm.module.RuinAndRecreateModule; +import jsprit.core.algorithm.recreate.BestInsertionBuilder; +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.algorithm.ruin.RadialRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RandomRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RuinStrategy; +import jsprit.core.algorithm.ruin.distance.AvgServiceDistance; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.InfiniteFleetManagerFactory; +import jsprit.core.problem.vehicle.VehicleFleetManager; +import jsprit.core.util.Solutions; + +import org.apache.log4j.Logger; +import org.junit.Before; +import org.junit.Test; + + +public class BuildPDVRPAlgoFromScratch_IT { + + VehicleRoutingProblem vrp; + + VehicleRoutingAlgorithm vra; + + static Logger log = Logger.getLogger(BuildPDVRPAlgoFromScratch_IT.class); + + @Before + public void setup(){ + + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder).read("src/test/resources/pd_solomon_r101.xml"); + vrp = builder.build(); + + final StateManager stateManager = new StateManager(vrp); + + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addTimeWindowConstraint(); + constraintManager.addLoadConstraint(); + + VehicleFleetManager fleetManager = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); + + BestInsertionBuilder iBuilder = new BestInsertionBuilder(vrp, fleetManager, stateManager, constraintManager); +// iBuilder.setConstraintManager(constraintManger); + InsertionStrategy bestInsertion = iBuilder.build(); + + RuinStrategy radial = new RadialRuinStrategyFactory( 0.15, new AvgServiceDistance(vrp.getTransportCosts())).createStrategy(vrp); + RuinStrategy random = new RandomRuinStrategyFactory(0.25).createStrategy(vrp); + + SolutionCostCalculator solutionCostCalculator = new SolutionCostCalculator() { + + @Override + public double getCosts(VehicleRoutingProblemSolution solution) { + double costs = 0.0; + for(VehicleRoute route : solution.getRoutes()){ + costs += stateManager.getRouteState(route, StateFactory.COSTS).toDouble(); + } + return costs; + } + }; + + SearchStrategy randomStrategy = new SearchStrategy(new SelectBest(), new GreedyAcceptance(1), solutionCostCalculator); + RuinAndRecreateModule randomModule = new RuinAndRecreateModule("randomRuin_bestInsertion", bestInsertion, random); + randomStrategy.addModule(randomModule); + + SearchStrategy radialStrategy = new SearchStrategy(new SelectBest(), new GreedyAcceptance(1), solutionCostCalculator); + RuinAndRecreateModule radialModule = new RuinAndRecreateModule("radialRuin_bestInsertion", bestInsertion, radial); + radialStrategy.addModule(radialModule); + + SearchStrategyManager strategyManager = new SearchStrategyManager(); + strategyManager.addStrategy(radialStrategy, 0.5); + strategyManager.addStrategy(randomStrategy, 0.5); + + vra = new VehicleRoutingAlgorithm(vrp, strategyManager); + vra.addListener(stateManager); + vra.addListener(new RemoveEmptyVehicles(fleetManager)); + + VehicleRoutingProblemSolution iniSolution = new InsertionInitialSolutionFactory(bestInsertion, solutionCostCalculator).createSolution(vrp); + + vra.addInitialSolution(iniSolution); + vra.setNuOfIterations(1000); + vra.setPrematureBreak(100); + + } + + @Test + public void test(){ + Collection solutions = vra.searchSolutions(); + System.out.println(Solutions.bestOf(solutions).getCost()); + } + +} diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/BuildPDVRPWithShipmentsAlgoFromScratch_IT.java b/jsprit-core/src/test/java/jsprit/core/algorithm/BuildPDVRPWithShipmentsAlgoFromScratch_IT.java new file mode 100644 index 00000000..32c8e9ae --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/BuildPDVRPWithShipmentsAlgoFromScratch_IT.java @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.algorithm; + +import java.util.Collection; + +import jsprit.core.algorithm.acceptor.GreedyAcceptance; +import jsprit.core.algorithm.module.RuinAndRecreateModule; +import jsprit.core.algorithm.recreate.BestInsertionBuilder; +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.algorithm.ruin.RadialRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RandomRuinStrategyFactory; +import jsprit.core.algorithm.ruin.RuinStrategy; +import jsprit.core.algorithm.ruin.distance.AvgServiceAndShipmentDistance; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.algorithm.state.UpdateVariableCosts; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.InfiniteFleetManagerFactory; +import jsprit.core.problem.vehicle.VehicleFleetManager; +import jsprit.core.util.Solutions; + +import org.apache.log4j.Logger; +import org.junit.Before; +import org.junit.Test; + + +public class BuildPDVRPWithShipmentsAlgoFromScratch_IT { + + VehicleRoutingProblem vrp; + + VehicleRoutingAlgorithm vra; + + static Logger log = Logger.getLogger(BuildPDVRPWithShipmentsAlgoFromScratch_IT.class); + + @Before + public void setup(){ + + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder).read("src/test/resources/pdp.xml"); + + vrp = builder.build(); + + final StateManager stateManager = new StateManager(vrp); + stateManager.updateLoadStates(); + stateManager.updateTimeWindowStates(); + stateManager.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), stateManager)); + + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addTimeWindowConstraint(); + constraintManager.addLoadConstraint(); + + VehicleFleetManager fleetManager = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); + + BestInsertionBuilder bestIBuilder = new BestInsertionBuilder(vrp, fleetManager, stateManager,constraintManager); + InsertionStrategy bestInsertion = bestIBuilder.build(); + + + RuinStrategy radial = new RadialRuinStrategyFactory( 0.3, new AvgServiceAndShipmentDistance(vrp.getTransportCosts())).createStrategy(vrp); + RuinStrategy random = new RandomRuinStrategyFactory(0.5).createStrategy(vrp); + + + SolutionCostCalculator solutionCostCalculator = new SolutionCostCalculator() { + + @Override + public double getCosts(VehicleRoutingProblemSolution solution) { + double costs = 0.0; + for(VehicleRoute route : solution.getRoutes()){ + costs += stateManager.getRouteState(route, StateFactory.COSTS).toDouble(); + } + return costs; + } + }; + + SearchStrategy randomStrategy = new SearchStrategy(new SelectBest(), new GreedyAcceptance(1), solutionCostCalculator); + RuinAndRecreateModule randomModule = new RuinAndRecreateModule("randomRuin_bestInsertion", bestInsertion, random); + randomStrategy.addModule(randomModule); + + SearchStrategy radialStrategy = new SearchStrategy(new SelectBest(), new GreedyAcceptance(1), solutionCostCalculator); + RuinAndRecreateModule radialModule = new RuinAndRecreateModule("radialRuin_bestInsertion", bestInsertion, radial); + radialStrategy.addModule(radialModule); + + SearchStrategyManager strategyManager = new SearchStrategyManager(); + strategyManager.addStrategy(radialStrategy, 0.5); + strategyManager.addStrategy(randomStrategy, 0.5); + + vra = new VehicleRoutingAlgorithm(vrp, strategyManager); + vra.addListener(stateManager); + vra.addListener(new RemoveEmptyVehicles(fleetManager)); + + VehicleRoutingProblemSolution iniSolution = new InsertionInitialSolutionFactory(bestInsertion, solutionCostCalculator).createSolution(vrp); + vra.addInitialSolution(iniSolution); + + vra.setNuOfIterations(3); +// vra.setPrematureBreak(500); + + } + + @Test + public void test(){ + Collection solutions = vra.searchSolutions(); + VehicleRoutingProblemSolution best = Solutions.bestOf(solutions); + } + +} diff --git a/jsprit-core/src/test/java/algorithms/ExampleActivityCostFunction.java b/jsprit-core/src/test/java/jsprit/core/algorithm/ExampleActivityCostFunction.java similarity index 85% rename from jsprit-core/src/test/java/algorithms/ExampleActivityCostFunction.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/ExampleActivityCostFunction.java index b69fb16a..ddd29449 100644 --- a/jsprit-core/src/test/java/algorithms/ExampleActivityCostFunction.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/ExampleActivityCostFunction.java @@ -14,13 +14,13 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm; -import basics.costs.VehicleRoutingActivityCosts; -import basics.route.Driver; -import basics.route.TourActivity; -import basics.route.TourActivity.JobActivity; -import basics.route.Vehicle; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourActivity.JobActivity; +import jsprit.core.problem.vehicle.Vehicle; public class ExampleActivityCostFunction implements VehicleRoutingActivityCosts{ diff --git a/jsprit-core/src/test/java/algorithms/FindCheaperVehicleTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/FindCheaperVehicleTest.java similarity index 99% rename from jsprit-core/src/test/java/algorithms/FindCheaperVehicleTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/FindCheaperVehicleTest.java index 9a7da1a9..2146984c 100644 --- a/jsprit-core/src/test/java/algorithms/FindCheaperVehicleTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/FindCheaperVehicleTest.java @@ -1,3 +1,4 @@ +package jsprit.core.algorithm; /******************************************************************************* * Copyright (C) 2013 Stefan Schroeder * diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/GendreauPostOptTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/GendreauPostOptTest.java new file mode 100644 index 00000000..c96ccf38 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/GendreauPostOptTest.java @@ -0,0 +1,305 @@ +///******************************************************************************* +// * Copyright (C) 2013 Stefan Schroeder +// * +// * This library is free software; you can redistribute it and/or +// * modify it under the terms of the GNU Lesser General Public +// * License as published by the Free Software Foundation; either +// * version 3.0 of the License, or (at your option) any later version. +// * +// * This library 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 +// * Lesser General Public License for more details. +// * +// * You should have received a copy of the GNU Lesser General Public +// * License along with this library. If not, see . +// ******************************************************************************/ +//package jsprit.core.algorithm; +// +//import static org.junit.Assert.assertEquals; +// +//import java.util.ArrayList; +//import java.util.Arrays; +//import java.util.Collection; +//import java.util.List; +// +//import jsprit.core.algorithm.module.Gendreau; +//import jsprit.core.algorithm.recreate.BestInsertion; +//import jsprit.core.algorithm.recreate.InsertionStrategy; +//import jsprit.core.algorithm.recreate.JobInsertionConsideringFixCostsCalculator; +//import jsprit.core.algorithm.recreate.JobInsertionCostsCalculator; +//import jsprit.core.algorithm.recreate.LocalActivityInsertionCostsCalculator; +//import jsprit.core.algorithm.recreate.ServiceInsertionCalculator; +//import jsprit.core.algorithm.recreate.VehicleSwitched; +//import jsprit.core.algorithm.recreate.VehicleTypeDependentJobInsertionCalculator; +//import jsprit.core.algorithm.ruin.RuinRadial; +//import jsprit.core.algorithm.ruin.distance.JobDistanceAvgCosts; +//import jsprit.core.algorithm.state.StateFactory; +//import jsprit.core.algorithm.state.StateManager; +//import jsprit.core.problem.VehicleRoutingProblem; +//import jsprit.core.problem.constraint.TimeWindowConstraint; +//import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +//import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +//import jsprit.core.problem.driver.Driver; +//import jsprit.core.problem.driver.DriverImpl; +//import jsprit.core.problem.job.Job; +//import jsprit.core.problem.job.Service; +//import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +//import jsprit.core.problem.solution.route.VehicleRoute; +//import jsprit.core.problem.solution.route.activity.ServiceActivity; +//import jsprit.core.problem.solution.route.activity.TimeWindow; +//import jsprit.core.problem.solution.route.activity.TourActivities; +//import jsprit.core.problem.vehicle.FiniteFleetManagerFactory; +//import jsprit.core.problem.vehicle.Vehicle; +//import jsprit.core.problem.vehicle.VehicleFleetManager; +//import jsprit.core.problem.vehicle.VehicleImpl; +//import jsprit.core.problem.vehicle.VehicleTypeImpl; +//import jsprit.core.util.Coordinate; +//import jsprit.core.util.ManhattanDistanceCalculator; +//import jsprit.core.util.RouteUtils; +// +//import org.junit.Before; +//import org.junit.Test; +// +// +//public class GendreauPostOptTest { +// +// TourActivities tour; +// +// Vehicle heavyVehicle; +// +// Vehicle lightVehicle1; +// +// Vehicle lightVehicle2; +// +// VehicleRoutingTransportCosts cost; +// +// VehicleRoutingActivityCosts activityCosts; +// +// VehicleRoutingProblem vrp; +// +// Service job1; +// +// Service job2; +// +// Service job3; +// +// private StateManager states; +// +// private List vehicles; +// +// private VehicleFleetManager fleetManager; +// +// private JobInsertionCostsCalculator insertionCalc; +// +// @Before +// public void setUp(){ +// +// cost = new VehicleRoutingTransportCosts() { +// +// @Override +// public double getBackwardTransportTime(String fromId, String toId, +// double arrivalTime, Driver driver, Vehicle vehicle) { +// // TODO Auto-generated method stub +// return 0; +// } +// +// @Override +// public double getBackwardTransportCost(String fromId, String toId, +// double arrivalTime, Driver driver, Vehicle vehicle) { +// // TODO Auto-generated method stub +// return 0; +// } +// +// @Override +// public double getTransportCost(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) { +// +// String[] fromTokens = fromId.split(","); +// String[] toTokens = toId.split(","); +// double fromX = Double.parseDouble(fromTokens[0]); +// double fromY = Double.parseDouble(fromTokens[1]); +// +// double toX = Double.parseDouble(toTokens[0]); +// double toY = Double.parseDouble(toTokens[1]); +// +// double costPerDistanceUnit; +// if(vehicle != null){ +// costPerDistanceUnit = vehicle.getType().getVehicleCostParams().perDistanceUnit; +// } +// else{ +// costPerDistanceUnit = 1; +// } +// +// return costPerDistanceUnit*ManhattanDistanceCalculator.calculateDistance(new Coordinate(fromX, fromY), new Coordinate(toX, toY)); +// } +// +// @Override +// public double getTransportTime(String fromId, String toId, double departureTime, Driver driver, Vehicle vehicle) { +// return 0; +// } +// }; +// +// VehicleTypeImpl lightType = VehicleTypeImpl.Builder.newInstance("light", 10).setFixedCost(10).setCostPerDistance(1.0).build(); +// VehicleTypeImpl heavyType = VehicleTypeImpl.Builder.newInstance("heavy", 10).setFixedCost(30).setCostPerDistance(2.0).build(); +// +// lightVehicle1 = VehicleImpl.Builder.newInstance("light").setLocationId("0,0").setType(lightType).build(); +// lightVehicle2 = VehicleImpl.Builder.newInstance("light2").setLocationId("0,0").setType(lightType).build(); +// heavyVehicle = VehicleImpl.Builder.newInstance("heavy").setLocationId("0,0").setType(heavyType).build(); +// +// +// job1 = getService("10,0"); +// job2 = getService("10,10"); +// job3 = getService("0,10"); +// +// Collection jobs = new ArrayList(); +// jobs.add(job1); +// jobs.add(job2); +// jobs.add(job3); +// +// vehicles = Arrays.asList(lightVehicle1,lightVehicle2, heavyVehicle); +// +//// Collection vehicles = Arrays.asList(lightVehicle1,lightVehicle2, heavyVehicle); +// fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager(); +// states = new StateManager(); +// +// activityCosts = new ExampleActivityCostFunction(); +// +// +// ServiceInsertionCalculator standardServiceInsertion = new ServiceInsertionCalculator(cost, new LocalActivityInsertionCostsCalculator(cost, activityCosts), new LoadConstraint(states), new TimeWindowConstraint(states, cost)); +// +// +// +// +// JobInsertionConsideringFixCostsCalculator withFixCost = new JobInsertionConsideringFixCostsCalculator(standardServiceInsertion, states); +// withFixCost.setWeightOfFixCost(1.2); +// +// insertionCalc = new VehicleTypeDependentJobInsertionCalculator(fleetManager, withFixCost); +// +//// updater = new TourStateUpdater(states, cost, activityCosts); +// +// } +// +// @Test +// public void whenPostOpt_splitsTour_oneActiveTourBecomeTwoSeperateActiveTours(){ +// Collection jobs = new ArrayList(); +// jobs.add(job1); +// jobs.add(job2); +// +// vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addAllVehicles(vehicles).setRoutingCost(cost).build(); +// +// TourActivities tour = new TourActivities(); +// tour.addActivity(ServiceActivity.newInstance(job1)); +// tour.addActivity(ServiceActivity.newInstance(job2)); +// +// VehicleRoute route = VehicleRoute.newInstance(tour,DriverImpl.noDriver(),heavyVehicle); +// +// fleetManager.lock(heavyVehicle); +// +// UpdateStates stateUpdater = new UpdateStates(states, vrp.getTransportCosts(), vrp.getActivityCosts()); +// stateUpdater.update(route); +// +// Collection routes = new ArrayList(); +// routes.add(route); +//// routes.add(new VehicleRoute(getEmptyTour(),getDriver(),getNoVehicle())); +//// routes.add(new VehicleRoute(getEmptyTour(),getDriver(),getNoVehicle())); +// +// +// VehicleRoutingProblemSolution sol = new VehicleRoutingProblemSolution(routes, states.getRouteState(route, StateFactory.COSTS).toDouble() + getFixedCosts(routes)); +// +// +// assertEquals(110.0, sol.getCost(), 0.5); +// +// +// RuinRadial radialRuin = new RuinRadial(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts())); +//// radialRuin.addListener(stateUpdater); +// +// InsertionStrategy insertionStrategy = new BestInsertion(insertionCalc); +// insertionStrategy.addListener(stateUpdater); +// insertionStrategy.addListener(new VehicleSwitched(fleetManager)); +// Gendreau postOpt = new Gendreau(vrp, radialRuin, insertionStrategy, fleetManager); +// +// VehicleRoutingProblemSolution newSolution = postOpt.runAndGetSolution(sol); +// newSolution.setCost(getCosts(newSolution,states)); +// +// assertEquals(2,RouteUtils.getNuOfActiveRoutes(newSolution.getRoutes())); +// assertEquals(2,newSolution.getRoutes().size()); +// assertEquals(80.0,newSolution.getCost(),0.5); +// } +// +// private double getFixedCosts(Collection routes) { +// double c = 0.0; +// for(VehicleRoute r : routes){ c += r.getVehicle().getType().getVehicleCostParams().fix; } +// return c; +// } +// +// private double getCosts(VehicleRoutingProblemSolution newSolution, StateManager states) { +// double c = 0.0; +// for(VehicleRoute r : newSolution.getRoutes()){ +// +// c += states.getRouteState(r, StateFactory.COSTS).toDouble() + r.getVehicle().getType().getVehicleCostParams().fix; +// +// } +// return c; +// } +// +// @Test +// public void whenPostOpt_optsRoutesWithMoreThanTwoJobs_oneRouteBecomesTwoRoutes(){ +// Collection jobs = new ArrayList(); +// jobs.add(job1); +// jobs.add(job2); +// jobs.add(job3); +// +// vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addAllVehicles(vehicles).setRoutingCost(cost).build(); +// +// TourActivities tour = new TourActivities(); +// tour.addActivity(ServiceActivity.newInstance(job1)); +// tour.addActivity(ServiceActivity.newInstance(job2)); +// tour.addActivity(ServiceActivity.newInstance(job3)); +// +// VehicleRoute route = VehicleRoute.newInstance(tour,DriverImpl.noDriver(),heavyVehicle); +// +// UpdateStates stateUpdater = new UpdateStates(states, vrp.getTransportCosts(), vrp.getActivityCosts()); +// stateUpdater.update(route); +// +// fleetManager.lock(heavyVehicle); +// +// Collection routes = new ArrayList(); +// routes.add(route); +// +// VehicleRoutingProblemSolution sol = new VehicleRoutingProblemSolution(routes, route.getCost()); +// sol.setCost(getCosts(sol,states)); +// +// assertEquals(110.0, sol.getCost(), 0.5); +// +// RuinRadial radialRuin = new RuinRadial(vrp, 0.2, new JobDistanceAvgCosts(vrp.getTransportCosts())); +// InsertionStrategy insertionStrategy = new BestInsertion(insertionCalc); +// insertionStrategy.addListener(stateUpdater); +// insertionStrategy.addListener(new VehicleSwitched(fleetManager)); +// Gendreau postOpt = new Gendreau(vrp, radialRuin, insertionStrategy, fleetManager); +// postOpt.setShareOfJobsToRuin(1.0); +// postOpt.setNuOfIterations(1); +// +//// postOpt.setWithFix(withFixCost); +// VehicleRoutingProblemSolution newSolution = postOpt.runAndGetSolution(sol); +// newSolution.setCost(getCosts(newSolution,states)); +// +// assertEquals(2,RouteUtils.getNuOfActiveRoutes(newSolution.getRoutes())); +// assertEquals(2,newSolution.getRoutes().size()); +// assertEquals(80.0,newSolution.getCost(),0.5); +// } +// +// private Service getService(String to, double serviceTime) { +// Service s = Service.Builder.newInstance(to, 0).setLocationId(to).setServiceTime(serviceTime).setTimeWindow(TimeWindow.newInstance(0.0, 20.0)).build(); +// +// return s; +// } +// +// private Service getService(String to) { +// Service s = getService(to, 0.0); +// return s; +// } +// +// +// +// +//} diff --git a/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/RefuseCollection_IT.java similarity index 87% rename from jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/RefuseCollection_IT.java index 0a79471e..82d87901 100644 --- a/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/RefuseCollection_IT.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm; import static org.junit.Assert.assertEquals; @@ -26,24 +26,25 @@ import java.io.IOException; import java.util.Collection; import java.util.Map; +import jsprit.core.algorithm.box.GreedySchrimpfFactory; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Solutions; +import jsprit.core.util.VehicleRoutingTransportCostsMatrix; +import jsprit.core.util.VehicleRoutingTransportCostsMatrix.Builder; + import org.junit.Test; -import util.Solutions; -import util.VehicleRoutingTransportCostsMatrix; -import util.VehicleRoutingTransportCostsMatrix.Builder; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleTypeImpl; -public class RefuseCollectionTest { +public class RefuseCollection_IT { static class RelationKey { @@ -186,8 +187,8 @@ public class RefuseCollectionTest { vra.setPrematureBreak(100); Collection solutions = vra.searchSolutions(); - assertEquals(397.0,Solutions.getBest(solutions).getCost(),0.01); - assertEquals(2,Solutions.getBest(solutions).getRoutes().size()); + assertEquals(397.0,Solutions.bestOf(solutions).getCost(),0.01); + assertEquals(2,Solutions.bestOf(solutions).getRoutes().size()); } diff --git a/jsprit-core/src/test/java/basics/algo/SearchStrategyManagerTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/SearchStrategyManagerTest.java similarity index 97% rename from jsprit-core/src/test/java/basics/algo/SearchStrategyManagerTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/SearchStrategyManagerTest.java index f3549c1a..daa426f4 100644 --- a/jsprit-core/src/test/java/basics/algo/SearchStrategyManagerTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/SearchStrategyManagerTest.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -25,6 +25,9 @@ import static org.mockito.Mockito.when; import java.util.Random; +import jsprit.core.algorithm.SearchStrategy; +import jsprit.core.algorithm.SearchStrategyManager; + import org.junit.Test; diff --git a/jsprit-core/src/test/java/basics/algo/SearchStrategyTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/SearchStrategyTest.java similarity index 93% rename from jsprit-core/src/test/java/basics/algo/SearchStrategyTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/SearchStrategyTest.java index 40d0536c..24e59e69 100644 --- a/jsprit-core/src/test/java/basics/algo/SearchStrategyTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/SearchStrategyTest.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.algo; +package jsprit.core.algorithm; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; @@ -24,12 +24,17 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Random; +import jsprit.core.algorithm.SearchStrategy; +import jsprit.core.algorithm.SearchStrategyModule; +import jsprit.core.algorithm.acceptor.SolutionAcceptor; +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.algorithm.selector.SolutionSelector; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.SolutionCostCalculator; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.junit.Test; -import algorithms.acceptors.SolutionAcceptor; -import algorithms.selectors.SolutionSelector; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; diff --git a/jsprit-core/src/test/java/algorithms/acceptors/AcceptNewRemoveWorstTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/acceptor/AcceptNewRemoveWorstTest.java similarity index 87% rename from jsprit-core/src/test/java/algorithms/acceptors/AcceptNewRemoveWorstTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/acceptor/AcceptNewRemoveWorstTest.java index 9c201f47..2e822285 100644 --- a/jsprit-core/src/test/java/algorithms/acceptors/AcceptNewRemoveWorstTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/acceptor/AcceptNewRemoveWorstTest.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.acceptors; +package jsprit.core.algorithm.acceptor; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; @@ -25,10 +25,12 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; +import jsprit.core.algorithm.acceptor.GreedyAcceptance; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.junit.Test; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; @@ -49,7 +51,7 @@ public class AcceptNewRemoveWorstTest { VehicleRoutingProblemSolution sol3 = mock(VehicleRoutingProblemSolution.class); - new AcceptNewIfBetterThanWorst(2).acceptSolution(solList, sol3); + new GreedyAcceptance(2).acceptSolution(solList, sol3); assertEquals(2,solList.size()); assertThat(sol3,is(solList.get(1))); diff --git a/jsprit-core/src/test/java/algorithms/TestSchrimpf.java b/jsprit-core/src/test/java/jsprit/core/algorithm/box/TestSchrimpf.java similarity index 85% rename from jsprit-core/src/test/java/algorithms/TestSchrimpf.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/box/TestSchrimpf.java index dce96476..7dd16624 100644 --- a/jsprit-core/src/test/java/algorithms/TestSchrimpf.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/box/TestSchrimpf.java @@ -14,12 +14,14 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.box; + +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.problem.VehicleRoutingProblem; import org.junit.Test; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; public class TestSchrimpf { diff --git a/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java b/jsprit-core/src/test/java/jsprit/core/algorithm/io/TestAlgorithmReader.java similarity index 76% rename from jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/io/TestAlgorithmReader.java index b2d83162..d8c2fd3c 100644 --- a/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/io/TestAlgorithmReader.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.io; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -22,29 +22,33 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collection; +import jsprit.core.algorithm.SearchStrategy; +import jsprit.core.algorithm.SearchStrategyModule; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.acceptor.GreedyAcceptance; +import jsprit.core.algorithm.acceptor.SolutionAcceptor; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.ModKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.AcceptorKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.RuinStrategyKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.SelectorKey; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap.StrategyModuleKey; +import jsprit.core.algorithm.listener.SearchStrategyModuleListener; +import jsprit.core.algorithm.ruin.RuinStrategy; +import jsprit.core.algorithm.ruin.listener.RuinListener; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.algorithm.selector.SolutionSelector; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; + import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; import org.junit.Before; import org.junit.Test; -import algorithms.VehicleRoutingAlgorithms.ModKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.AcceptorKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.RuinStrategyKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.SelectorKey; -import algorithms.VehicleRoutingAlgorithms.TypedMap.StrategyModuleKey; -import algorithms.acceptors.AcceptNewIfBetterThanWorst; -import algorithms.acceptors.SolutionAcceptor; -import algorithms.selectors.SelectBest; -import algorithms.selectors.SolutionSelector; -import basics.Job; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.algo.SearchStrategy; -import basics.algo.SearchStrategyModule; -import basics.algo.SearchStrategyModuleListener; -import basics.io.VrpXMLReader; -import basics.route.VehicleRoute; public class TestAlgorithmReader { @@ -59,13 +63,13 @@ public class TestAlgorithmReader { config = new XMLConfiguration("src/test/resources/testConfig.xml"); VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); solutions = new ArrayList(); - new VrpXMLReader(vrpBuilder,solutions).read("src/test/resources/finiteVrpForReaderV2Test.xml"); + new VrpXMLReader(vrpBuilder,solutions).read("src/test/resources/finiteVrp.xml"); vrp = vrpBuilder.build(); } @Test public void testTypedMap(){ - algorithms.VehicleRoutingAlgorithms.TypedMap typedMap = new algorithms.VehicleRoutingAlgorithms.TypedMap(); + jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap typedMap = new jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap(); String acceptorName = "acceptor"; String acceptorId = "acceptorId"; @@ -73,7 +77,7 @@ public class TestAlgorithmReader { ModKey key = new ModKey(acceptorName,acceptorId); AcceptorKey accKey = new AcceptorKey(key); - SolutionAcceptor acceptor = new AcceptNewIfBetterThanWorst(1); + SolutionAcceptor acceptor = new GreedyAcceptance(1); typedMap.put(accKey, acceptor); @@ -83,7 +87,7 @@ public class TestAlgorithmReader { @Test public void testTypedMap2(){ - algorithms.VehicleRoutingAlgorithms.TypedMap typedMap = new algorithms.VehicleRoutingAlgorithms.TypedMap(); + jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap typedMap = new jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap(); String acceptorName = "acceptor"; String acceptorId = "acceptorId"; @@ -93,7 +97,7 @@ public class TestAlgorithmReader { ModKey key = new ModKey(acceptorName,acceptorId); AcceptorKey accKey = new AcceptorKey(key); - SolutionAcceptor acceptor = new AcceptNewIfBetterThanWorst(1); + SolutionAcceptor acceptor = new GreedyAcceptance(1); SelectorKey selKey = new SelectorKey(new ModKey(selectorName,selectorId)); SolutionSelector selector = new SelectBest(); @@ -107,7 +111,7 @@ public class TestAlgorithmReader { @Test public void testTypedMap3(){ - algorithms.VehicleRoutingAlgorithms.TypedMap typedMap = new algorithms.VehicleRoutingAlgorithms.TypedMap(); + jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap typedMap = new jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap(); String acceptorName = "acceptor"; String acceptorId = "acceptorId"; @@ -120,13 +124,13 @@ public class TestAlgorithmReader { ModKey key = new ModKey(acceptorName,acceptorId); AcceptorKey accKey = new AcceptorKey(key); - SolutionAcceptor acceptor = new AcceptNewIfBetterThanWorst(1); + SolutionAcceptor acceptor = new GreedyAcceptance(1); SelectorKey selKey = new SelectorKey(new ModKey(selectorName,selectorId)); SolutionSelector selector = new SelectBest(); AcceptorKey accKey2 = new AcceptorKey(new ModKey(acceptorName2,acceptorId2)); - SolutionAcceptor acceptor2 = new AcceptNewIfBetterThanWorst(1); + SolutionAcceptor acceptor2 = new GreedyAcceptance(1); typedMap.put(accKey, acceptor); typedMap.put(selKey, selector); @@ -139,7 +143,7 @@ public class TestAlgorithmReader { @Test public void testTypedMap4(){ - algorithms.VehicleRoutingAlgorithms.TypedMap typedMap = new algorithms.VehicleRoutingAlgorithms.TypedMap(); + jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap typedMap = new jsprit.core.algorithm.io.VehicleRoutingAlgorithms.TypedMap(); String acceptorName = "acceptor"; String acceptorId = "acceptorId"; diff --git a/jsprit-core/src/test/java/algorithms/CalcVehicleTypeDependentServiceInsertionTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/CalcVehicleTypeDependentServiceInsertionTest.java similarity index 61% rename from jsprit-core/src/test/java/algorithms/CalcVehicleTypeDependentServiceInsertionTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/recreate/CalcVehicleTypeDependentServiceInsertionTest.java index 46ae53a6..b7d775ab 100644 --- a/jsprit-core/src/test/java/algorithms/CalcVehicleTypeDependentServiceInsertionTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/CalcVehicleTypeDependentServiceInsertionTest.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -23,15 +23,17 @@ import static org.mockito.Mockito.when; import java.util.Arrays; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleFleetManager; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; + import org.junit.Before; import org.junit.Test; -import basics.Service; -import basics.route.TimeWindow; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; @@ -71,28 +73,28 @@ public class CalcVehicleTypeDependentServiceInsertionTest { @Test public void whenHaving2Vehicle_calcInsertionOfCheapest(){ - JobInsertionCalculator calc = mock(JobInsertionCalculator.class); + JobInsertionCostsCalculator calc = mock(JobInsertionCostsCalculator.class); InsertionData iDataVeh1 = new InsertionData(10.0,InsertionData.NO_INDEX, 1, veh1, null); InsertionData iDataVeh2 = new InsertionData(20.0,InsertionData.NO_INDEX, 1, veh2, null); - when(calc.calculate(vehicleRoute, service, veh1, veh1.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh1); - when(calc.calculate(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh2); - when(calc.calculate(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, 10.0)).thenReturn(iDataVeh2); - CalculatesVehTypeDepServiceInsertion insertion = new CalculatesVehTypeDepServiceInsertion(fleetManager,calc); - InsertionData iData = insertion.calculate(vehicleRoute, service, null, 0.0, null, Double.MAX_VALUE); + when(calc.getInsertionData(vehicleRoute, service, veh1, veh1.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh1); + when(calc.getInsertionData(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh2); + when(calc.getInsertionData(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, 10.0)).thenReturn(iDataVeh2); + VehicleTypeDependentJobInsertionCalculator insertion = new VehicleTypeDependentJobInsertionCalculator(fleetManager,calc); + InsertionData iData = insertion.getInsertionData(vehicleRoute, service, null, 0.0, null, Double.MAX_VALUE); assertThat(iData.getSelectedVehicle(), is(veh1)); } @Test public void whenHaving2Vehicle_calcInsertionOfCheapest2(){ - JobInsertionCalculator calc = mock(JobInsertionCalculator.class); + JobInsertionCostsCalculator calc = mock(JobInsertionCostsCalculator.class); InsertionData iDataVeh1 = new InsertionData(20.0,InsertionData.NO_INDEX, 1, veh1, null); InsertionData iDataVeh2 = new InsertionData(10.0,InsertionData.NO_INDEX, 1, veh2, null); - when(calc.calculate(vehicleRoute, service, veh1, veh1.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh1); - when(calc.calculate(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh2); - when(calc.calculate(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, 20.0)).thenReturn(iDataVeh2); - CalculatesVehTypeDepServiceInsertion insertion = new CalculatesVehTypeDepServiceInsertion(fleetManager,calc); - InsertionData iData = insertion.calculate(vehicleRoute, service, null, 0.0, null, Double.MAX_VALUE); + when(calc.getInsertionData(vehicleRoute, service, veh1, veh1.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh1); + when(calc.getInsertionData(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, Double.MAX_VALUE)).thenReturn(iDataVeh2); + when(calc.getInsertionData(vehicleRoute, service, veh2, veh2.getEarliestDeparture(), null, 20.0)).thenReturn(iDataVeh2); + VehicleTypeDependentJobInsertionCalculator insertion = new VehicleTypeDependentJobInsertionCalculator(fleetManager,calc); + InsertionData iData = insertion.getInsertionData(vehicleRoute, service, null, 0.0, null, Double.MAX_VALUE); assertThat(iData.getSelectedVehicle(), is(veh2)); } diff --git a/jsprit-core/src/test/java/algorithms/CalcWithTimeSchedulingTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/CalcWithTimeSchedulingTest.java similarity index 81% rename from jsprit-core/src/test/java/algorithms/CalcWithTimeSchedulingTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/recreate/CalcWithTimeSchedulingTest.java index e29f7d8c..84c0294a 100644 --- a/jsprit-core/src/test/java/algorithms/CalcWithTimeSchedulingTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/CalcWithTimeSchedulingTest.java @@ -14,26 +14,28 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import static org.junit.Assert.assertEquals; import java.util.Collection; -import util.Coordinate; -import util.CrowFlyCosts; -import util.Solutions; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.CrowFlyCosts; +import jsprit.core.util.Solutions; + public class CalcWithTimeSchedulingTest { diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ServiceInsertionAndLoadConstraintsTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ServiceInsertionAndLoadConstraintsTest.java new file mode 100644 index 00000000..20093453 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ServiceInsertionAndLoadConstraintsTest.java @@ -0,0 +1,152 @@ +package jsprit.core.algorithm.recreate; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; + +import java.util.Arrays; + +import jsprit.core.algorithm.recreate.ActivityInsertionCostsCalculator; +import jsprit.core.algorithm.recreate.Inserter; +import jsprit.core.algorithm.recreate.InsertionData; +import jsprit.core.algorithm.recreate.JobCalculatorSwitcher; +import jsprit.core.algorithm.recreate.LocalActivityInsertionCostsCalculator; +import jsprit.core.algorithm.recreate.ServiceInsertionCalculator; +import jsprit.core.algorithm.recreate.ShipmentInsertionCalculator; +import jsprit.core.algorithm.recreate.listener.InsertionListeners; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; +import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Locations; +import jsprit.core.util.ManhattanCosts; + +import org.junit.Before; +import org.junit.Test; + + +public class ServiceInsertionAndLoadConstraintsTest { + + VehicleRoutingTransportCosts routingCosts; + + VehicleRoutingActivityCosts activityCosts = new VehicleRoutingActivityCosts(){ + + @Override + public double getActivityCost(TourActivity tourAct, double arrivalTime,Driver driver, Vehicle vehicle) { + return 0; + } + + }; + + HardActivityStateLevelConstraint hardActivityLevelConstraint = new HardActivityStateLevelConstraint() { + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct,TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + return ConstraintsStatus.FULFILLED; + } + }; + + HardRouteStateLevelConstraint hardRouteLevelConstraint = new HardRouteStateLevelConstraint(){ + + @Override + public boolean fulfilled(JobInsertionContext insertionContext) { + return true; + } + + }; + + ActivityInsertionCostsCalculator activityInsertionCostsCalculator; + + ShipmentInsertionCalculator insertionCalculator; + + Vehicle vehicle; + + @Before + public void doBefore(){ + Locations locations = new Locations(){ + + @Override + public Coordinate getCoord(String id) { + //assume: locationId="x,y" + String[] splitted = id.split(","); + return Coordinate.newInstance(Double.parseDouble(splitted[0]), + Double.parseDouble(splitted[1])); + } + + }; + routingCosts = new ManhattanCosts(locations); + VehicleType type = VehicleTypeImpl.Builder.newInstance("t", 2).setCostPerDistance(1).build(); + vehicle = VehicleImpl.Builder.newInstance("v").setLocationId("0,0").setType(type).build(); + activityInsertionCostsCalculator = new LocalActivityInsertionCostsCalculator(routingCosts, activityCosts); + createInsertionCalculator(hardRouteLevelConstraint); + } + + private void createInsertionCalculator(HardRouteStateLevelConstraint hardRouteLevelConstraint) { + insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, hardRouteLevelConstraint, hardActivityLevelConstraint); + } + + @Test + public void whenInsertingServiceWhileNoCapIsAvailable_itMustReturnTheCorrectInsertionIndex(){ + Delivery delivery = (Delivery) Delivery.Builder.newInstance("del", 41).setLocationId("10,10").build(); + Pickup pickup = (Pickup) Pickup.Builder.newInstance("pick", 15).setLocationId("0,10").build(); + + VehicleType type = VehicleTypeImpl.Builder.newInstance("t", 50).setCostPerDistance(1).build(); + Vehicle vehicle = VehicleImpl.Builder.newInstance("v").setLocationId("0,0").setType(type).build(); + + VehicleRoute route = VehicleRoute.emptyRoute(); + route.setVehicle(vehicle, 0.0); + + Inserter inserter = new Inserter(new InsertionListeners()); + + inserter.insertJob(delivery, new InsertionData(0,0,0,vehicle,null), route); +// inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null), route); +// inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null), route); + + + +// RouteActivityVisitor routeActVisitor = new RouteActivityVisitor(); +// routeActVisitor.addActivityVisitor(new UpdateLoads(stateManager)); +// routeActVisitor.visit(route); + + VehicleRoutingProblem vrp = mock(VehicleRoutingProblem.class); + + StateManager stateManager = new StateManager(vrp); + stateManager.updateLoadStates(); + + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addLoadConstraint(); +// constraintManager.addConstraint(new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager),Priority.CRITICAL); +// constraintManager.addConstraint(new ShipmentPickupsFirstConstraint(),Priority.CRITICAL); + + stateManager.informInsertionStarts(Arrays.asList(route), null); + + JobCalculatorSwitcher switcher = new JobCalculatorSwitcher(); + ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityInsertionCostsCalculator, hardRouteLevelConstraint, constraintManager); + ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, hardRouteLevelConstraint, constraintManager); + switcher.put(Pickup.class, serviceInsertionCalc); + switcher.put(Delivery.class, serviceInsertionCalc); + switcher.put(Shipment.class, insertionCalculator); + +// Pickup service = (Pickup)Pickup.Builder.newInstance("pick", 1).setLocationId("5,5").build(); + InsertionData iData = switcher.getInsertionData(route, pickup, vehicle, 0, DriverImpl.noDriver(), Double.MAX_VALUE); +// routeActVisitor.visit(route); + + assertEquals(1, iData.getDeliveryInsertionIndex()); + } + +} diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java new file mode 100644 index 00000000..8a4b5e94 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/ShipmentInsertionCalculatorTest.java @@ -0,0 +1,259 @@ +package jsprit.core.algorithm.recreate; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + +import java.util.Arrays; + +import jsprit.core.algorithm.recreate.listener.InsertionListeners; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.constraint.ConstraintManager.Priority; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint; +import jsprit.core.problem.constraint.HardRouteStateLevelConstraint; +import jsprit.core.problem.constraint.PickupAndDeliverShipmentLoadActivityLevelConstraint; +import jsprit.core.problem.constraint.ShipmentPickupsFirstConstraint; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.RouteActivityVisitor; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Locations; +import jsprit.core.util.ManhattanCosts; + +import org.junit.Before; +import org.junit.Test; + + +public class ShipmentInsertionCalculatorTest { + + VehicleRoutingTransportCosts routingCosts; + + VehicleRoutingActivityCosts activityCosts = new VehicleRoutingActivityCosts(){ + + @Override + public double getActivityCost(TourActivity tourAct, double arrivalTime,Driver driver, Vehicle vehicle) { + return 0; + } + + }; + + HardActivityStateLevelConstraint hardActivityLevelConstraint = new HardActivityStateLevelConstraint() { + + @Override + public ConstraintsStatus fulfilled(JobInsertionContext iFacts, TourActivity prevAct,TourActivity newAct, TourActivity nextAct, double prevActDepTime) { + return ConstraintsStatus.FULFILLED; + } + }; + + HardRouteStateLevelConstraint hardRouteLevelConstraint = new HardRouteStateLevelConstraint(){ + + @Override + public boolean fulfilled(JobInsertionContext insertionContext) { + return true; + } + + }; + + ActivityInsertionCostsCalculator activityInsertionCostsCalculator; + + ShipmentInsertionCalculator insertionCalculator; + + Vehicle vehicle; + + @Before + public void doBefore(){ + Locations locations = new Locations(){ + + @Override + public Coordinate getCoord(String id) { + //assume: locationId="x,y" + String[] splitted = id.split(","); + return Coordinate.newInstance(Double.parseDouble(splitted[0]), + Double.parseDouble(splitted[1])); + } + + }; + routingCosts = new ManhattanCosts(locations); + VehicleType type = VehicleTypeImpl.Builder.newInstance("t", 2).setCostPerDistance(1).build(); + vehicle = VehicleImpl.Builder.newInstance("v").setLocationId("0,0").setType(type).build(); + activityInsertionCostsCalculator = new LocalActivityInsertionCostsCalculator(routingCosts, activityCosts); + createInsertionCalculator(hardRouteLevelConstraint); + } + + private void createInsertionCalculator(HardRouteStateLevelConstraint hardRouteLevelConstraint) { + insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, hardRouteLevelConstraint, hardActivityLevelConstraint); + } + + @Test + public void whenCalculatingInsertionCostsOfShipment_itShouldReturnCorrectCostValue(){ + Shipment shipment = Shipment.Builder.newInstance("s", 1).setPickupLocation("0,10").setDeliveryLocation("10,0").build(); + VehicleRoute route = VehicleRoute.emptyRoute(); + + InsertionData iData = insertionCalculator.getInsertionData(route, shipment, vehicle, 0.0, null, Double.MAX_VALUE); + assertEquals(40.0,iData.getInsertionCost(),0.05); + } + + @Test + public void whenCalculatingInsertionIntoExistingRoute_itShouldReturnCorrectCosts(){ + Shipment shipment = Shipment.Builder.newInstance("s", 1).setPickupLocation("0,10").setDeliveryLocation("10,0").build(); + Shipment shipment2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("10,10").setDeliveryLocation("0,0").build(); + VehicleRoute route = VehicleRoute.emptyRoute(); + new Inserter(new InsertionListeners()).insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route); + + InsertionData iData = insertionCalculator.getInsertionData(route, shipment2, vehicle, 0.0, null, Double.MAX_VALUE); + assertEquals(0.0,iData.getInsertionCost(),0.05); + assertEquals(1,iData.getPickupInsertionIndex()); + assertEquals(2,iData.getDeliveryInsertionIndex()); + } + + @Test + public void whenInsertingShipmentInRouteWithNotEnoughCapacity_itShouldReturnNoInsertion(){ + Shipment shipment = Shipment.Builder.newInstance("s", 1).setPickupLocation("0,10").setDeliveryLocation("10,0").build(); + Shipment shipment2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("10,10").setDeliveryLocation("0,0").build(); + VehicleRoute route = VehicleRoute.emptyRoute(); + new Inserter(new InsertionListeners()).insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route); + createInsertionCalculator(new HardRouteStateLevelConstraint() { + + @Override + public boolean fulfilled(JobInsertionContext insertionContext) { + return false; + } + + }); + InsertionData iData = insertionCalculator.getInsertionData(route, shipment2, vehicle, 0.0, null, Double.MAX_VALUE); + assertEquals(InsertionData.createEmptyInsertionData(),iData); + + } + + + @Test + public void whenInsertingThirdShipment_itShouldCalcCorrectVal(){ + Shipment shipment = Shipment.Builder.newInstance("s", 1).setPickupLocation("0,10").setDeliveryLocation("10,0").build(); + Shipment shipment2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("10,10").setDeliveryLocation("0,0").build(); + Shipment shipment3 = Shipment.Builder.newInstance("s3", 1).setPickupLocation("0,0").setDeliveryLocation("9,10").build(); + + VehicleRoute route = VehicleRoute.emptyRoute(); + Inserter inserter = new Inserter(new InsertionListeners()); + inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route); + inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null),route); + + InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, null, Double.MAX_VALUE); + assertEquals(0.0,iData.getInsertionCost(),0.05); + assertEquals(0,iData.getPickupInsertionIndex()); + assertEquals(1,iData.getDeliveryInsertionIndex()); + } + + @Test + public void whenInsertingThirdShipment_itShouldCalcCorrectVal2(){ + Shipment shipment = Shipment.Builder.newInstance("s", 1).setPickupLocation("0,10").setDeliveryLocation("10,0").build(); + Shipment shipment2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("10,10").setDeliveryLocation("0,0").build(); + Shipment shipment3 = Shipment.Builder.newInstance("s3", 1).setPickupLocation("0,0").setDeliveryLocation("9,9").build(); + + VehicleRoute route = VehicleRoute.emptyRoute(); + Inserter inserter = new Inserter(new InsertionListeners()); + inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route); + inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null),route); + + InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, null, Double.MAX_VALUE); + assertEquals(2.0,iData.getInsertionCost(),0.05); + assertEquals(0,iData.getPickupInsertionIndex()); + assertEquals(1,iData.getDeliveryInsertionIndex()); + } + + @Test + public void whenInstertingShipmentWithLoadConstraintWhereCapIsNotSufficient_capConstraintsAreFulfilled(){ + Shipment shipment = Shipment.Builder.newInstance("s", 1).setPickupLocation("0,10").setDeliveryLocation("10,0").build(); + Shipment shipment2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("10,10").setDeliveryLocation("0,0").build(); + Shipment shipment3 = Shipment.Builder.newInstance("s3", 1).setPickupLocation("0,0").setDeliveryLocation("9,9").build(); + + + + VehicleRoute route = VehicleRoute.emptyRoute(); + route.setVehicle(vehicle, 0.0); + + Inserter inserter = new Inserter(new InsertionListeners()); + + inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route); + inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null), route); + + VehicleRoutingProblem vrp = mock(VehicleRoutingProblem.class); + + StateManager stateManager = new StateManager(vrp); + stateManager.updateLoadStates(); + stateManager.informInsertionStarts(Arrays.asList(route), null); + + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addConstraint(new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager),Priority.CRITICAL); + constraintManager.addConstraint(new ShipmentPickupsFirstConstraint(),Priority.CRITICAL); + + ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, + hardRouteLevelConstraint, constraintManager); + + + InsertionData iData = insertionCalculator.getInsertionData(route, shipment3, vehicle, 0.0, DriverImpl.noDriver(), Double.MAX_VALUE); + assertTrue(iData instanceof InsertionData.NoInsertionFound); + + } + + @Test + public void whenInsertingServiceWhileNoCapIsAvailable_itMustReturnNoInsertionData(){ + Shipment shipment = Shipment.Builder.newInstance("s", 1).setPickupLocation("0,10").setDeliveryLocation("0,0").build(); + Shipment shipment2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("10,10").setDeliveryLocation("0,0").build(); + Shipment shipment3 = Shipment.Builder.newInstance("s3", 1).setPickupLocation("10,10").setDeliveryLocation("0,").build(); + + VehicleRoute route = VehicleRoute.emptyRoute(); + route.setVehicle(vehicle, 0.0); + + Inserter inserter = new Inserter(new InsertionListeners()); + + inserter.insertJob(shipment, new InsertionData(0,0,0,vehicle,null), route); + inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null), route); +// inserter.insertJob(shipment2, new InsertionData(0,1,2,vehicle,null), route); + + VehicleRoutingProblem vrp = mock(VehicleRoutingProblem.class); + + StateManager stateManager = new StateManager(vrp); + stateManager.updateLoadStates(); + stateManager.informInsertionStarts(Arrays.asList(route), null); + +// RouteActivityVisitor routeActVisitor = new RouteActivityVisitor(); +// routeActVisitor.addActivityVisitor(new UpdateLoads(stateManager)); +// routeActVisitor.visit(route); + + + + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addLoadConstraint(); +// constraintManager.addConstraint(new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager),Priority.CRITICAL); +// constraintManager.addConstraint(new ShipmentPickupsFirstConstraint(),Priority.CRITICAL); + + stateManager.informInsertionStarts(Arrays.asList(route), null); + + JobCalculatorSwitcher switcher = new JobCalculatorSwitcher(); + ServiceInsertionCalculator serviceInsertionCalc = new ServiceInsertionCalculator(routingCosts, activityInsertionCostsCalculator, hardRouteLevelConstraint, constraintManager); + ShipmentInsertionCalculator insertionCalculator = new ShipmentInsertionCalculator(routingCosts, activityInsertionCostsCalculator, hardRouteLevelConstraint, constraintManager); + switcher.put(Pickup.class, serviceInsertionCalc); + switcher.put(Shipment.class, insertionCalculator); + + Pickup service = (Pickup)Pickup.Builder.newInstance("pick", 1).setLocationId("5,5").build(); + InsertionData iData = switcher.getInsertionData(route, service, vehicle, 0, DriverImpl.noDriver(), Double.MAX_VALUE); +// routeActVisitor.visit(route); + + assertEquals(3, iData.getDeliveryInsertionIndex()); + } + + +} diff --git a/jsprit-core/src/test/java/algorithms/TestAuxilliaryCostCalculatorWithServices.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestAuxilliaryCostCalculatorWithServices.java similarity index 99% rename from jsprit-core/src/test/java/algorithms/TestAuxilliaryCostCalculatorWithServices.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestAuxilliaryCostCalculatorWithServices.java index 38a57531..4f332cd4 100644 --- a/jsprit-core/src/test/java/algorithms/TestAuxilliaryCostCalculatorWithServices.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestAuxilliaryCostCalculatorWithServices.java @@ -1,3 +1,4 @@ +package jsprit.core.algorithm.recreate; /******************************************************************************* * Copyright (C) 2013 Stefan Schroeder * diff --git a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertion.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertion.java similarity index 77% rename from jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertion.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertion.java index 03cc8b05..5ee1abf7 100644 --- a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertion.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertion.java @@ -14,38 +14,43 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import jsprit.core.algorithm.ExampleActivityCostFunction; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.driver.DriverImpl.NoDriver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.solution.route.activity.TourActivities; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; + import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; -import algorithms.StateUpdates.UpdateStates; -import basics.Job; -import basics.Service; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.DriverImpl; -import basics.route.DriverImpl.NoDriver; -import basics.route.ServiceActivity; -import basics.route.TimeWindow; -import basics.route.TourActivities; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleRoute; public class TestCalculatesServiceInsertion { - CalculatesServiceInsertion serviceInsertion; + ServiceInsertionCalculator serviceInsertion; VehicleRoutingTransportCosts costs; @@ -59,11 +64,11 @@ public class TestCalculatesServiceInsertion { private Service third; - private StateManagerImpl states; + private StateManager states; private NoDriver driver; - private UpdateStates stateUpdater; +// private UpdateStates stateUpdater; @Before public void setup(){ @@ -149,13 +154,23 @@ public class TestCalculatesServiceInsertion { jobs.add(second); jobs.add(third); - states = new StateManagerImpl(); + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addVehicle(vehicle).setRoutingCost(costs).build(); + + states = new StateManager(vrp); + states.updateLoadStates(); + states.updateTimeWindowStates(); + + ConstraintManager cManager = new ConstraintManager(vrp,states); + cManager.addLoadConstraint(); + cManager.addTimeWindowConstraint(); ExampleActivityCostFunction activityCosts = new ExampleActivityCostFunction(); - serviceInsertion = new CalculatesServiceInsertion(costs, new LocalActivityInsertionCostsCalculator(costs, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, costs)), new HardConstraints.HardLoadConstraint(states)); + + serviceInsertion = new ServiceInsertionCalculator(costs, new LocalActivityInsertionCostsCalculator(costs, activityCosts), cManager, cManager); + - stateUpdater = new UpdateStates(states, costs, activityCosts); +// stateUpdater = new UpdateStates(states, costs, activityCosts); } @@ -170,9 +185,10 @@ public class TestCalculatesServiceInsertion { TourActivities tour = new TourActivities(); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - stateUpdater.update(route); + states.informInsertionStarts(Arrays.asList(route), null); +// stateUpdater.update(route); - InsertionData iData = serviceInsertion.calculate(route, first, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, first, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(20.0, iData.getInsertionCost(), 0.2); assertEquals(0, iData.getDeliveryInsertionIndex()); } @@ -183,9 +199,9 @@ public class TestCalculatesServiceInsertion { tour.addActivity(ServiceActivity.newInstance(first)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - stateUpdater.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, second, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, second, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(20.0, iData.getInsertionCost(), 0.2); assertEquals(0, iData.getDeliveryInsertionIndex()); } @@ -197,10 +213,9 @@ public class TestCalculatesServiceInsertion { tour.addActivity(ServiceActivity.newInstance(second)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); + states.informInsertionStarts(Arrays.asList(route), null); - stateUpdater.update(route); - - InsertionData iData = serviceInsertion.calculate(route, third, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, third, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(0.0, iData.getInsertionCost(), 0.2); assertEquals(1, iData.getDeliveryInsertionIndex()); } @@ -212,10 +227,9 @@ public class TestCalculatesServiceInsertion { tour.addActivity(ServiceActivity.newInstance(second)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); + states.informInsertionStarts(Arrays.asList(route), null); - stateUpdater.update(route); - - InsertionData iData = serviceInsertion.calculate(route, third, newVehicle, newVehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, third, newVehicle, newVehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(20.0, iData.getInsertionCost(), 0.2); assertEquals(1, iData.getDeliveryInsertionIndex()); } @@ -227,9 +241,9 @@ public class TestCalculatesServiceInsertion { tour.addActivity(ServiceActivity.newInstance(third)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - stateUpdater.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, second, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, second, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(0.0, iData.getInsertionCost(), 0.2); assertEquals(2, iData.getDeliveryInsertionIndex()); } @@ -243,9 +257,9 @@ public class TestCalculatesServiceInsertion { VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); // route.addActivity(states.getActivity(first,true)); // route.addActivity(states.getActivity(third,true)); - stateUpdater.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, second, newVehicle, newVehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, second, newVehicle, newVehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(20.0, iData.getInsertionCost(), 0.2); assertEquals(2, iData.getDeliveryInsertionIndex()); } diff --git a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertionOnRouteLevel.java similarity index 69% rename from jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertionOnRouteLevel.java index bd27da7a..46e7f430 100644 --- a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertionOnRouteLevel.java @@ -14,41 +14,47 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import jsprit.core.algorithm.ExampleActivityCostFunction; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.algorithm.state.UpdateVariableCosts; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.driver.DriverImpl.NoDriver; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.solution.route.activity.TourActivities; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.util.Coordinate; +import jsprit.core.util.ManhattanDistanceCalculator; + import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; -import util.Coordinate; -import util.ManhattanDistanceCalculator; -import algorithms.StateUpdates.UpdateStates; -import basics.Job; -import basics.Service; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.DriverImpl; -import basics.route.DriverImpl.NoDriver; -import basics.route.ServiceActivity; -import basics.route.TimeWindow; -import basics.route.TourActivities; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleRoute; public class TestCalculatesServiceInsertionOnRouteLevel { - CalculatesServiceInsertionOnRouteLevel serviceInsertion; + ServiceInsertionOnRouteLevelCalculator serviceInsertion; VehicleRoutingTransportCosts costs; @@ -62,12 +68,10 @@ public class TestCalculatesServiceInsertionOnRouteLevel { private Service third; - private StateManagerImpl states; + private StateManager states; private NoDriver driver; - private UpdateStates updateStates; - @Before public void setup(){ Logger.getRootLogger().setLevel(Level.DEBUG); @@ -140,15 +144,24 @@ public class TestCalculatesServiceInsertionOnRouteLevel { jobs.add(second); jobs.add(third); - states = new StateManagerImpl(); + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(jobs).addVehicle(vehicle).addVehicle(newVehicle).setRoutingCost(costs).build(); + + states = new StateManager(vrp); + states.updateLoadStates(); + states.updateTimeWindowStates(); + states.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), states)); + + ConstraintManager cManager = new ConstraintManager(vrp,states); + cManager.addLoadConstraint(); + cManager.addTimeWindowConstraint(); + ExampleActivityCostFunction activityCosts = new ExampleActivityCostFunction(); - ActivityInsertionCostsCalculator actInsertionCostCalculator = new RouteLevelActivityInsertionCostsEstimator(costs, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, costs), states); - serviceInsertion = new CalculatesServiceInsertionOnRouteLevel(costs,activityCosts, new HardConstraints.HardLoadConstraint(states), actInsertionCostCalculator); + ActivityInsertionCostsCalculator actInsertionCostCalculator = new RouteLevelActivityInsertionCostsEstimator(costs, activityCosts, states); + serviceInsertion = new ServiceInsertionOnRouteLevelCalculator(costs,activityCosts, actInsertionCostCalculator, cManager, cManager); serviceInsertion.setNuOfActsForwardLooking(4); serviceInsertion.setStates(states); - updateStates = new UpdateStates(states, costs, activityCosts); } @@ -163,9 +176,9 @@ public class TestCalculatesServiceInsertionOnRouteLevel { TourActivities tour = new TourActivities(); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - updateStates.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, first, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, first, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(20.0, iData.getInsertionCost(), 0.2); assertEquals(0, iData.getDeliveryInsertionIndex()); } @@ -177,9 +190,9 @@ public class TestCalculatesServiceInsertionOnRouteLevel { tour.addActivity(ServiceActivity.newInstance(second)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - updateStates.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, third, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, third, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(0.0, iData.getInsertionCost(), 0.2); assertEquals(1, iData.getDeliveryInsertionIndex()); } @@ -191,9 +204,9 @@ public class TestCalculatesServiceInsertionOnRouteLevel { tour.addActivity(ServiceActivity.newInstance(second)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - updateStates.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, third, newVehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, third, newVehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(40.0, iData.getInsertionCost(), 0.2); assertEquals(1, iData.getDeliveryInsertionIndex()); } @@ -205,9 +218,9 @@ public class TestCalculatesServiceInsertionOnRouteLevel { tour.addActivity(ServiceActivity.newInstance(third)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - updateStates.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, second, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, second, vehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(0.0, iData.getInsertionCost(), 0.2); assertEquals(2, iData.getDeliveryInsertionIndex()); } @@ -219,9 +232,9 @@ public class TestCalculatesServiceInsertionOnRouteLevel { tour.addActivity(ServiceActivity.newInstance(third)); VehicleRoute route = VehicleRoute.newInstance(tour,driver,vehicle); - updateStates.update(route); + states.informInsertionStarts(Arrays.asList(route), null); - InsertionData iData = serviceInsertion.calculate(route, second, newVehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); + InsertionData iData = serviceInsertion.getInsertionData(route, second, newVehicle, vehicle.getEarliestDeparture(), null, Double.MAX_VALUE); assertEquals(40.0, iData.getInsertionCost(), 0.2); assertEquals(2, iData.getDeliveryInsertionIndex()); } diff --git a/jsprit-core/src/test/java/algorithms/TestDepartureTimeOpt.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestDepartureTimeOpt.java similarity index 92% rename from jsprit-core/src/test/java/algorithms/TestDepartureTimeOpt.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestDepartureTimeOpt.java index 3db1f258..b4d25061 100644 --- a/jsprit-core/src/test/java/algorithms/TestDepartureTimeOpt.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestDepartureTimeOpt.java @@ -14,30 +14,32 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.recreate; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import java.util.Collection; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Builder; +import jsprit.core.problem.cost.VehicleRoutingActivityCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + import org.junit.Test; -import util.Coordinate; -import util.Solutions; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.Builder; -import basics.VehicleRoutingProblemSolution; -import basics.costs.VehicleRoutingActivityCosts; -import basics.route.Driver; -import basics.route.TimeWindow; -import basics.route.TourActivity; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; public class TestDepartureTimeOpt { diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestMixedServiceAndShipmentsProblemOnRouteLevel.java b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestMixedServiceAndShipmentsProblemOnRouteLevel.java new file mode 100644 index 00000000..cf68c88e --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/recreate/TestMixedServiceAndShipmentsProblemOnRouteLevel.java @@ -0,0 +1,165 @@ +package jsprit.core.algorithm.recreate; + +import static org.junit.Assert.*; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.recreate.BestInsertionBuilder; +import jsprit.core.algorithm.recreate.InsertionStrategy; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.ConstraintManager; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.vehicle.InfiniteFleetManagerFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleFleetManager; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.util.Coordinate; + +import org.junit.Before; +import org.junit.Test; + + +public class TestMixedServiceAndShipmentsProblemOnRouteLevel { + + + + + + + @Test(expected=UnsupportedOperationException.class) + public void whenHavingShipmentsAndServicesInOneProblem_andInsertionShouldBeMadeOnRouteLevel_throwException(){ + /* get a vehicle type-builder and build a type with the typeId "vehicleType" and a capacity of 2 + */ + VehicleTypeImpl.Builder vehicleTypeBuilder = VehicleTypeImpl.Builder.newInstance("vehicleType", 2); + VehicleType vehicleType = vehicleTypeBuilder.build(); + + /* + * get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType" + */ + Builder vehicleBuilder = VehicleImpl.Builder.newInstance("vehicle"); + vehicleBuilder.setLocationCoord(Coordinate.newInstance(10, 10)); + vehicleBuilder.setType(vehicleType); + Vehicle vehicle = vehicleBuilder.build(); + + /* + * build shipments at the required locations, each with a capacity-demand of 1. + * 4 shipments + * 1: (5,7)->(6,9) + * 2: (5,13)->(6,11) + * 3: (15,7)->(14,9) + * 4: (15,13)->(14,11) + */ + + Shipment shipment1 = Shipment.Builder.newInstance("1", 1).setPickupCoord(Coordinate.newInstance(5, 7)).setDeliveryCoord(Coordinate.newInstance(6, 9)).build(); + Shipment shipment2 = Shipment.Builder.newInstance("2", 1).setPickupCoord(Coordinate.newInstance(5, 13)).setDeliveryCoord(Coordinate.newInstance(6, 11)).build(); + + Shipment shipment3 = Shipment.Builder.newInstance("3", 1).setPickupCoord(Coordinate.newInstance(15, 7)).setDeliveryCoord(Coordinate.newInstance(14, 9)).build(); + Shipment shipment4 = Shipment.Builder.newInstance("4", 1).setPickupCoord(Coordinate.newInstance(15, 13)).setDeliveryCoord(Coordinate.newInstance(14, 11)).build(); + + /* + * build deliveries, (implicitly picked up in the depot) + * 1: (4,8) + * 2: (4,12) + * 3: (16,8) + * 4: (16,12) + */ + Delivery delivery1 = (Delivery) Delivery.Builder.newInstance("5", 1).setCoord(Coordinate.newInstance(4, 8)).build(); + Delivery delivery2 = (Delivery) Delivery.Builder.newInstance("6", 1).setCoord(Coordinate.newInstance(4, 12)).build(); + Delivery delivery3 = (Delivery) Delivery.Builder.newInstance("7", 1).setCoord(Coordinate.newInstance(16, 8)).build(); + Delivery delivery4 = (Delivery) Delivery.Builder.newInstance("8", 1).setCoord(Coordinate.newInstance(16, 12)).build(); + + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + vrpBuilder.addVehicle(vehicle); + vrpBuilder.addJob(shipment1).addJob(shipment2).addJob(shipment3).addJob(shipment4) + .addJob(delivery1).addJob(delivery2).addJob(delivery3).addJob(delivery4).build(); + + VehicleRoutingProblem vrp = vrpBuilder.build(); + + VehicleRoutingAlgorithm vra; + + final StateManager stateManager = new StateManager(vrp); + + + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addLoadConstraint(); + constraintManager.addTimeWindowConstraint(); + + VehicleFleetManager fleetManager = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); + + BestInsertionBuilder bestIBuilder = new BestInsertionBuilder(vrp, fleetManager, stateManager,constraintManager); + bestIBuilder.setRouteLevel(2, 2); + InsertionStrategy bestInsertion = bestIBuilder.build(); + + } + + @Test + public void whenHavingOnlyServicesInOneProblem_andInsertionShouldBeMadeOnRouteLevel_itShouldAssertTrue(){ + /* get a vehicle type-builder and build a type with the typeId "vehicleType" and a capacity of 2 + */ + VehicleTypeImpl.Builder vehicleTypeBuilder = VehicleTypeImpl.Builder.newInstance("vehicleType", 2); + VehicleType vehicleType = vehicleTypeBuilder.build(); + + /* + * get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType" + */ + Builder vehicleBuilder = VehicleImpl.Builder.newInstance("vehicle"); + vehicleBuilder.setLocationCoord(Coordinate.newInstance(10, 10)); + vehicleBuilder.setType(vehicleType); + Vehicle vehicle = vehicleBuilder.build(); + + /* + * build shipments at the required locations, each with a capacity-demand of 1. + * 4 shipments + * 1: (5,7)->(6,9) + * 2: (5,13)->(6,11) + * 3: (15,7)->(14,9) + * 4: (15,13)->(14,11) + */ +// +// Shipment shipment1 = Shipment.Builder.newInstance("1", 1).setPickupCoord(Coordinate.newInstance(5, 7)).setDeliveryCoord(Coordinate.newInstance(6, 9)).build(); +// Shipment shipment2 = Shipment.Builder.newInstance("2", 1).setPickupCoord(Coordinate.newInstance(5, 13)).setDeliveryCoord(Coordinate.newInstance(6, 11)).build(); +// +// Shipment shipment3 = Shipment.Builder.newInstance("3", 1).setPickupCoord(Coordinate.newInstance(15, 7)).setDeliveryCoord(Coordinate.newInstance(14, 9)).build(); +// Shipment shipment4 = Shipment.Builder.newInstance("4", 1).setPickupCoord(Coordinate.newInstance(15, 13)).setDeliveryCoord(Coordinate.newInstance(14, 11)).build(); +// + /* + * build deliveries, (implicitly picked up in the depot) + * 1: (4,8) + * 2: (4,12) + * 3: (16,8) + * 4: (16,12) + */ + Delivery delivery1 = (Delivery) Delivery.Builder.newInstance("5", 1).setCoord(Coordinate.newInstance(4, 8)).build(); + Delivery delivery2 = (Delivery) Delivery.Builder.newInstance("6", 1).setCoord(Coordinate.newInstance(4, 12)).build(); + Delivery delivery3 = (Delivery) Delivery.Builder.newInstance("7", 1).setCoord(Coordinate.newInstance(16, 8)).build(); + Delivery delivery4 = (Delivery) Delivery.Builder.newInstance("8", 1).setCoord(Coordinate.newInstance(16, 12)).build(); + + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + vrpBuilder.addVehicle(vehicle) +// vrpBuilder.addJob(shipment1).addJob(shipment2).addJob(shipment3).addJob(shipment4) + .addJob(delivery1).addJob(delivery2).addJob(delivery3).addJob(delivery4).build(); + + VehicleRoutingProblem vrp = vrpBuilder.build(); + + VehicleRoutingAlgorithm vra; + + final StateManager stateManager = new StateManager(vrp); + + ConstraintManager constraintManager = new ConstraintManager(vrp,stateManager); + constraintManager.addLoadConstraint(); + constraintManager.addTimeWindowConstraint(); + + VehicleFleetManager fleetManager = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); + + BestInsertionBuilder bestIBuilder = new BestInsertionBuilder(vrp, fleetManager, stateManager,constraintManager); + bestIBuilder.setRouteLevel(2, 2); + InsertionStrategy bestInsertion = bestIBuilder.build(); + + assertTrue(true); + + } + +} diff --git a/jsprit-core/src/test/java/algorithms/JobNeighborhoodsImplTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/JobNeighborhoodsImplTest.java similarity index 88% rename from jsprit-core/src/test/java/algorithms/JobNeighborhoodsImplTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/ruin/JobNeighborhoodsImplTest.java index 9ba678b6..722b9de1 100644 --- a/jsprit-core/src/test/java/algorithms/JobNeighborhoodsImplTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/JobNeighborhoodsImplTest.java @@ -1,20 +1,23 @@ -package algorithms; +package jsprit.core.algorithm.ruin; -import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import jsprit.core.algorithm.ruin.RuinRadial.JobNeighborhoodsImpl; +import jsprit.core.algorithm.ruin.distance.EuclideanServiceDistance; +import jsprit.core.algorithm.ruin.distance.JobDistance; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.util.Coordinate; + import org.junit.Before; import org.junit.Test; -import util.Coordinate; -import algorithms.RuinRadial.JobNeighborhoodsImpl; -import basics.Job; -import basics.Service; -import basics.VehicleRoutingProblem; public class JobNeighborhoodsImplTest { diff --git a/jsprit-core/src/test/java/algorithms/JobNeighborhoodsWithCapRestrictionImplTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/JobNeighborhoodsWithCapRestrictionImplTest.java similarity index 88% rename from jsprit-core/src/test/java/algorithms/JobNeighborhoodsWithCapRestrictionImplTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/ruin/JobNeighborhoodsWithCapRestrictionImplTest.java index 8f4bbc28..07a0121d 100644 --- a/jsprit-core/src/test/java/algorithms/JobNeighborhoodsWithCapRestrictionImplTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/JobNeighborhoodsWithCapRestrictionImplTest.java @@ -1,4 +1,4 @@ -package algorithms; +package jsprit.core.algorithm.ruin; import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; @@ -7,15 +7,18 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import jsprit.core.algorithm.ruin.RuinRadial.JobNeighborhoodsImpl; +import jsprit.core.algorithm.ruin.RuinRadial.JobNeighborhoodsImplWithCapRestriction; +import jsprit.core.algorithm.ruin.distance.EuclideanServiceDistance; +import jsprit.core.algorithm.ruin.distance.JobDistance; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.util.Coordinate; + import org.junit.Before; import org.junit.Test; -import util.Coordinate; -import algorithms.RuinRadial.JobNeighborhoodsImpl; -import algorithms.RuinRadial.JobNeighborhoodsImplWithCapRestriction; -import basics.Job; -import basics.Service; -import basics.VehicleRoutingProblem; public class JobNeighborhoodsWithCapRestrictionImplTest { diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/distance/AverageJobDistanceTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/distance/AverageJobDistanceTest.java new file mode 100644 index 00000000..6a427519 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/distance/AverageJobDistanceTest.java @@ -0,0 +1,66 @@ +package jsprit.core.algorithm.ruin.distance; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import jsprit.core.algorithm.ruin.distance.AvgServiceAndShipmentDistance; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.util.Coordinate; +import jsprit.core.util.CrowFlyCosts; +import jsprit.core.util.Locations; + +import org.junit.Before; +import org.junit.Test; + + +public class AverageJobDistanceTest { + + + private CrowFlyCosts routingCosts; + + @Before + public void doBefore(){ + Locations locations = new Locations(){ + + @Override + public Coordinate getCoord(String id) { + //assume: locationId="x,y" + String[] splitted = id.split(","); + return Coordinate.newInstance(Double.parseDouble(splitted[0]), + Double.parseDouble(splitted[1])); + } + + }; + routingCosts = new CrowFlyCosts(locations); + + } + + @Test + public void distanceOfTwoEqualShipmentsShouldBeSmallerThanAnyOtherDistance(){ + Shipment s1 = Shipment.Builder.newInstance("s1", 1).setPickupLocation("0,0").setDeliveryLocation("10,10").build(); + Shipment s2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("0,0").setDeliveryLocation("10,10").build(); + + double dist = new AvgServiceAndShipmentDistance(routingCosts).getDistance(s1, s2); + + for(int i=0;i<10;i++){ + for(int j=0;j<10;j++){ + Shipment other1 = Shipment.Builder.newInstance("s1", 1).setPickupLocation("0,0").setDeliveryLocation(i+","+j).build(); + Shipment other2 = Shipment.Builder.newInstance("s2", 1).setPickupLocation("0,0").setDeliveryLocation("10,10").build(); + double dist2 = new AvgServiceAndShipmentDistance(routingCosts).getDistance(other1, other2); + System.out.println("("+i+","+j+"), dist=" + dist + ", dist2=" + dist2); + assertTrue(dist<=dist2+dist2*0.001); + } + } + } + + + + @Test + public void whenServicesHaveSameLocation_distanceShouldBeZero(){ + Service s1 = Service.Builder.newInstance("s1", 1).setLocationId("10,0").build(); + Service s2 = Service.Builder.newInstance("s2", 1).setLocationId("10,0").build(); + + double dist = new AvgServiceAndShipmentDistance(routingCosts).getDistance(s1, s2); + assertEquals(0.0,dist,0.01); + } +} diff --git a/jsprit-core/src/test/java/algorithms/TestJobDistanceAvgCosts.java b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/distance/TestJobDistanceAvgCosts.java similarity index 80% rename from jsprit-core/src/test/java/algorithms/TestJobDistanceAvgCosts.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/ruin/distance/TestJobDistanceAvgCosts.java index 9f8a5216..14f4237f 100644 --- a/jsprit-core/src/test/java/algorithms/TestJobDistanceAvgCosts.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/ruin/distance/TestJobDistanceAvgCosts.java @@ -14,14 +14,16 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.ruin.distance; + +import jsprit.core.algorithm.ruin.distance.AvgServiceDistance; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.vehicle.Vehicle; import org.junit.Test; -import basics.Service; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.Vehicle; public class TestJobDistanceAvgCosts { @@ -55,8 +57,8 @@ public class TestJobDistanceAvgCosts { return 0; } }; - JobDistanceAvgCosts c = new JobDistanceAvgCosts(costs); - c.calculateDistance(Service.Builder.newInstance("1", 1).setLocationId("foo").build(), Service.Builder.newInstance("2", 2).setLocationId("foo").build()); + AvgServiceDistance c = new AvgServiceDistance(costs); + c.getDistance(Service.Builder.newInstance("1", 1).setLocationId("foo").build(), Service.Builder.newInstance("2", 2).setLocationId("foo").build()); } @Test(expected=NullPointerException.class) @@ -91,8 +93,8 @@ public class TestJobDistanceAvgCosts { return 0; } }; - JobDistanceAvgCosts c = new JobDistanceAvgCosts(costs); - c.calculateDistance(Service.Builder.newInstance("1", 1).setLocationId("loc").build(), Service.Builder.newInstance("2", 2).setLocationId("loc").build()); + AvgServiceDistance c = new AvgServiceDistance(costs); + c.getDistance(Service.Builder.newInstance("1", 1).setLocationId("loc").build(), Service.Builder.newInstance("2", 2).setLocationId("loc").build()); } } diff --git a/jsprit-core/src/test/java/algorithms/selectors/SelectBestTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/selector/SelectBestTest.java similarity index 92% rename from jsprit-core/src/test/java/algorithms/selectors/SelectBestTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/selector/SelectBestTest.java index 4500c56d..005e046f 100644 --- a/jsprit-core/src/test/java/algorithms/selectors/SelectBestTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/selector/SelectBestTest.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.selectors; +package jsprit.core.algorithm.selector; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNull; @@ -25,9 +25,11 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Collections; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.junit.Test; -import basics.VehicleRoutingProblemSolution; diff --git a/jsprit-core/src/test/java/algorithms/selectors/SelectRandomlyTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/selector/SelectRandomlyTest.java similarity index 94% rename from jsprit-core/src/test/java/algorithms/selectors/SelectRandomlyTest.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/selector/SelectRandomlyTest.java index 1b25aa11..d65c67ef 100644 --- a/jsprit-core/src/test/java/algorithms/selectors/SelectRandomlyTest.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/selector/SelectRandomlyTest.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms.selectors; +package jsprit.core.algorithm.selector; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNull; @@ -26,9 +26,11 @@ import java.util.Arrays; import java.util.Collections; import java.util.Random; +import jsprit.core.algorithm.selector.SelectRandomly; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + import org.junit.Test; -import basics.VehicleRoutingProblemSolution; public class SelectRandomlyTest { diff --git a/jsprit-core/src/test/java/jsprit/core/algorithm/state/HardPickupAndDeliveryShipmentActivityConstraintTest.java b/jsprit-core/src/test/java/jsprit/core/algorithm/state/HardPickupAndDeliveryShipmentActivityConstraintTest.java new file mode 100644 index 00000000..4ab35777 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/state/HardPickupAndDeliveryShipmentActivityConstraintTest.java @@ -0,0 +1,88 @@ +package jsprit.core.algorithm.state; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import jsprit.core.algorithm.state.StateManager; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.constraint.PickupAndDeliverShipmentLoadActivityLevelConstraint; +import jsprit.core.problem.constraint.HardActivityStateLevelConstraint.ConstraintsStatus; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.misc.JobInsertionContext; +import jsprit.core.problem.solution.route.activity.DeliverShipment; +import jsprit.core.problem.solution.route.activity.PickupService; +import jsprit.core.problem.solution.route.activity.PickupShipment; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.Vehicle; + +import org.junit.Before; +import org.junit.Test; + + +public class HardPickupAndDeliveryShipmentActivityConstraintTest { + + Vehicle vehicle; + + StateManager stateManager; + + Shipment shipment; + + PickupAndDeliverShipmentLoadActivityLevelConstraint constraint; + + JobInsertionContext iFacts; + + @Before + public void doBefore(){ + vehicle = mock(Vehicle.class); + when(vehicle.getCapacity()).thenReturn(2); + stateManager = new StateManager(mock(VehicleRoutingProblem.class)); + shipment = mock(Shipment.class); + when(shipment.getCapacityDemand()).thenReturn(1); + iFacts = new JobInsertionContext(null, null, vehicle, null, 0.0); + constraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager); + } + + @Test + public void whenPickupActivityIsInsertedAndLoadIsSufficient_returnFullFilled(){ + PickupService pickupService = new PickupService(mock(Service.class)); + PickupService anotherService = new PickupService(mock(Service.class)); + PickupShipment pickupShipment = new PickupShipment(shipment); + + assertEquals(ConstraintsStatus.FULFILLED,constraint.fulfilled(iFacts, pickupService, pickupShipment, anotherService, 0.0)); + } + + @Test + public void whenPickupActivityIsInsertedAndLoadIsNotSufficient_returnNOT_FullFilled(){ + PickupService pickupService = new PickupService(mock(Service.class)); + PickupService anotherService = new PickupService(mock(Service.class)); + PickupShipment pickupShipment = new PickupShipment(shipment); + + stateManager.putInternalActivityState(pickupService, StateFactory.LOAD, StateFactory.createState(2)); +// when(stateManager.getActivityState(pickupService, StateFactory.LOAD)).thenReturn(StateFactory.createState(2.0)); + assertEquals(ConstraintsStatus.NOT_FULFILLED,constraint.fulfilled(iFacts, pickupService, pickupShipment, anotherService, 0.0)); + } + + @Test + public void whenDeliveryActivityIsInsertedAndLoadIsNotSufficient_returnNOT_FullFilled_BREAK(){ + PickupService pickupService = new PickupService(mock(Service.class)); + PickupService anotherService = new PickupService(mock(Service.class)); + DeliverShipment pickupShipment = new DeliverShipment(shipment); + + stateManager.putInternalActivityState(pickupService, StateFactory.LOAD, StateFactory.createState(2)); + assertEquals(ConstraintsStatus.NOT_FULFILLED_BREAK,constraint.fulfilled(iFacts, pickupService, pickupShipment, anotherService, 0.0)); + } + + @Test + public void whenDeliveryActivityIsInsertedAndLoadIsSufficient_returnFullFilled(){ + PickupService pickupService = new PickupService(mock(Service.class)); + PickupService anotherService = new PickupService(mock(Service.class)); + DeliverShipment pickupShipment = new DeliverShipment(shipment); + + stateManager.putInternalActivityState(pickupService, StateFactory.LOAD, StateFactory.createState(1)); + assertEquals(ConstraintsStatus.FULFILLED,constraint.fulfilled(iFacts, pickupService, pickupShipment, anotherService, 0.0)); + } + + + +} diff --git a/jsprit-core/src/test/java/algorithms/TestTourStateUpdaterWithService.java b/jsprit-core/src/test/java/jsprit/core/algorithm/state/TestTourStateUpdaterWithService.java similarity index 67% rename from jsprit-core/src/test/java/algorithms/TestTourStateUpdaterWithService.java rename to jsprit-core/src/test/java/jsprit/core/algorithm/state/TestTourStateUpdaterWithService.java index 31014486..83ec3285 100644 --- a/jsprit-core/src/test/java/algorithms/TestTourStateUpdaterWithService.java +++ b/jsprit-core/src/test/java/jsprit/core/algorithm/state/TestTourStateUpdaterWithService.java @@ -14,31 +14,34 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.algorithm.state; import static org.junit.Assert.assertEquals; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.solution.route.activity.TourActivities; +import jsprit.core.problem.solution.route.state.StateFactory; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.ManhattanDistanceCalculator; + import org.junit.Before; import org.junit.Test; -import util.Coordinate; -import util.ManhattanDistanceCalculator; -import algorithms.StateUpdates.UpdateStates; -import basics.Job; -import basics.Service; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.DriverImpl; -import basics.route.ServiceActivity; -import basics.route.TimeWindow; -import basics.route.TourActivities; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; public class TestTourStateUpdaterWithService { @@ -51,9 +54,8 @@ public class TestTourStateUpdaterWithService { TourActivities anotherTour; - UpdateStates updateStates; - StateManagerImpl states; + StateManager states; private VehicleRoute vehicleRoute; @@ -100,32 +102,36 @@ public class TestTourStateUpdaterWithService { services.add(firstService); services.add(secondService); - states = new StateManagerImpl(); - - VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("test", 0).build(); + VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("test", 10).build(); vehicle = VehicleImpl.Builder.newInstance("testvehicle").setType(type).setLocationId("0,0") .setEarliestStart(0.0).setLatestArrival(50.0).build(); + + VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addAllJobs(services).addVehicle(vehicle).setRoutingCost(cost).build(); + + states = new StateManager(vrp); + states.updateLoadStates(); + states.updateTimeWindowStates(); + states.addStateUpdater(new UpdateVariableCosts(vrp.getActivityCosts(), vrp.getTransportCosts(), states)); + states.addStateUpdater(new UpdateActivityTimes(vrp.getTransportCosts())); + tour = new TourActivities(); tour.addActivity(ServiceActivity.newInstance(firstService)); tour.addActivity(ServiceActivity.newInstance(secondService)); - - updateStates = new UpdateStates(states, cost, new ExampleActivityCostFunction()); - vehicleRoute = VehicleRoute.newInstance(tour,DriverImpl.noDriver(),vehicle); } @Test public void testCalculatedCost() { - updateStates.update(vehicleRoute); - assertEquals(40.0, states.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(), 0.05); - assertEquals(10, states.getRouteState(vehicleRoute, StateTypes.LOAD).toDouble(), 0.05); + states.informInsertionStarts(Arrays.asList(vehicleRoute), null); + assertEquals(40.0, states.getRouteState(vehicleRoute,StateFactory.COSTS).toDouble(), 0.05); + assertEquals(10, states.getRouteState(vehicleRoute, StateFactory.LOAD_AT_END).toDouble(), 0.05); } @Test public void testStatesOfAct0(){ - updateStates.update(vehicleRoute); + states.informInsertionStarts(Arrays.asList(vehicleRoute), null); assertEquals(0.0, vehicleRoute.getStart().getEndTime(),0.05); assertEquals(vehicleRoute.getVehicle().getLocationId(), vehicleRoute.getStart().getLocationId()); assertEquals(vehicleRoute.getVehicle().getEarliestDeparture(), vehicleRoute.getStart().getTheoreticalEarliestOperationStartTime(),0.05); @@ -135,28 +141,27 @@ public class TestTourStateUpdaterWithService { @Test public void testStatesOfAct1(){ - updateStates.update(vehicleRoute); - assertEquals(10.0, states.getActivityState(tour.getActivities().get(0), StateTypes.COSTS).toDouble(),0.05); - assertEquals(5.0, states.getActivityState(tour.getActivities().get(0), StateTypes.LOAD).toDouble(),0.05); + states.informInsertionStarts(Arrays.asList(vehicleRoute), null); + assertEquals(10.0, states.getActivityState(tour.getActivities().get(0), StateFactory.COSTS).toDouble(),0.05); + assertEquals(5.0, states.getActivityState(tour.getActivities().get(0), StateFactory.LOAD).toDouble(),0.05); // assertEquals(10.0, states.getActivityState(tour.getActivities().get(0), StateTypes.EARLIEST_OPERATION_START_TIME).toDouble(),0.05); - assertEquals(20.0, states.getActivityState(tour.getActivities().get(0), StateTypes.LATEST_OPERATION_START_TIME).toDouble(),0.05); + assertEquals(20.0, states.getActivityState(tour.getActivities().get(0), StateFactory.LATEST_OPERATION_START_TIME).toDouble(),0.05); } @Test public void testStatesOfAct2(){ - updateStates.update(vehicleRoute); + states.informInsertionStarts(Arrays.asList(vehicleRoute), null); - assertEquals(30.0, states.getActivityState(tour.getActivities().get(1), StateTypes.COSTS).toDouble(),0.05); - assertEquals(10.0, states.getActivityState(tour.getActivities().get(1), StateTypes.LOAD).toDouble(),0.05); + assertEquals(30.0, states.getActivityState(tour.getActivities().get(1), StateFactory.COSTS).toDouble(),0.05); + assertEquals(10.0, states.getActivityState(tour.getActivities().get(1), StateFactory.LOAD).toDouble(),0.05); // assertEquals(10.0, states.getActivityState(tour.getActivities().get(0), StateTypes.EARLIEST_OPERATION_START_TIME).toDouble(),0.05); - assertEquals(40.0, states.getActivityState(tour.getActivities().get(1), StateTypes.LATEST_OPERATION_START_TIME).toDouble(),0.05); + assertEquals(40.0, states.getActivityState(tour.getActivities().get(1), StateFactory.LATEST_OPERATION_START_TIME).toDouble(),0.05); } @Test public void testStatesOfAct3(){ - updateStates.update(vehicleRoute); - - assertEquals(40.0, states.getRouteState(vehicleRoute, StateTypes.COSTS).toDouble(), 0.05); + states.informInsertionStarts(Arrays.asList(vehicleRoute), null); + assertEquals(40.0, states.getRouteState(vehicleRoute, StateFactory.COSTS).toDouble(), 0.05); assertEquals(40.0, vehicleRoute.getEnd().getArrTime(),0.05); assertEquals(50.0, vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime(),0.05); } diff --git a/jsprit-core/src/test/java/basics/VehicleRoutingProblemBuilderTest.java b/jsprit-core/src/test/java/jsprit/core/problem/VehicleRoutingProblemBuilderTest.java similarity index 72% rename from jsprit-core/src/test/java/basics/VehicleRoutingProblemBuilderTest.java rename to jsprit-core/src/test/java/jsprit/core/problem/VehicleRoutingProblemBuilderTest.java index b392f94b..71467722 100644 --- a/jsprit-core/src/test/java/basics/VehicleRoutingProblemBuilderTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/VehicleRoutingProblemBuilderTest.java @@ -14,16 +14,19 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem; import static org.junit.Assert.assertEquals; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; import org.junit.Test; -import basics.VehicleRoutingProblem.FleetSize; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleTypeImpl; public class VehicleRoutingProblemBuilderTest { @@ -64,5 +67,20 @@ public class VehicleRoutingProblemBuilderTest { } + @Test + public void whenShipmentsAreAdded_theyShouldBePartOfTheProblem(){ + Shipment s = Shipment.Builder.newInstance("s", 10).setPickupLocation("foofoo").setDeliveryLocation("foo").build(); + Shipment s2 = Shipment.Builder.newInstance("s2", 100).setPickupLocation("foofoo").setDeliveryLocation("foo").build(); + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + vrpBuilder.addJob(s); + vrpBuilder.addJob(s2); + VehicleRoutingProblem vrp = vrpBuilder.build(); + assertEquals(2,vrp.getJobs().size()); + + Job j = vrp.getJobs().get("s"); + assertEquals(s,j); + assertEquals(s2,vrp.getJobs().get("s2")); + } + } diff --git a/jsprit-core/src/test/java/basics/io/AlgorithmReaderTest.java b/jsprit-core/src/test/java/jsprit/core/problem/io/AlgorithmReaderTest.java similarity index 91% rename from jsprit-core/src/test/java/basics/io/AlgorithmReaderTest.java rename to jsprit-core/src/test/java/jsprit/core/problem/io/AlgorithmReaderTest.java index 4d802a54..24beca4b 100644 --- a/jsprit-core/src/test/java/basics/io/AlgorithmReaderTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/io/AlgorithmReaderTest.java @@ -14,7 +14,10 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.problem.io; + +import jsprit.core.algorithm.io.AlgorithmConfig; +import jsprit.core.algorithm.io.AlgorithmConfigXmlReader; import org.junit.Test; diff --git a/jsprit-core/src/test/java/jsprit/core/problem/io/ReaderTest.java b/jsprit-core/src/test/java/jsprit/core/problem/io/ReaderTest.java new file mode 100644 index 00000000..ead80b60 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/problem/io/ReaderTest.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.problem.io; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; + +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Builder; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.activity.DeliverShipment; +import jsprit.core.problem.solution.route.activity.PickupService; +import jsprit.core.problem.solution.route.activity.PickupShipment; +import jsprit.core.problem.solution.route.activity.TourActivity; + +import org.junit.Test; + + +public class ReaderTest { + + + @Test + public void testRead_ifReaderIsCalled_itReadsSuccessfully(){ + new VrpXMLReader(VehicleRoutingProblem.Builder.newInstance(), new ArrayList()).read("src/test/resources/lui-shen-solution.xml"); + } + + @Test + public void testRead_ifReaderIsCalled_itReadsSuccessfullyV2(){ + Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + VehicleRoutingProblem vrp = vrpBuilder.build(); + ArrayList solutions = new ArrayList(); + new VrpXMLReader(vrpBuilder, solutions).read("src/test/resources/finiteVrpWithShipmentsAndSolution.xml"); + assertEquals(3,vrp.getJobs().size()); + assertEquals(1,solutions.size()); + + assertEquals(1,solutions.get(0).getRoutes().size()); + List activities = solutions.get(0).getRoutes().iterator().next().getTourActivities().getActivities(); + assertEquals(4,activities.size()); + assertTrue(activities.get(0) instanceof PickupService); + assertTrue(activities.get(1) instanceof PickupService); + assertTrue(activities.get(2) instanceof PickupShipment); + assertTrue(activities.get(3) instanceof DeliverShipment); + } + +} diff --git a/jsprit-core/src/test/java/basics/io/VrpReaderV2Test.java b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java similarity index 80% rename from jsprit-core/src/test/java/basics/io/VrpReaderV2Test.java rename to jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java index 51693a28..7d97b6ea 100644 --- a/jsprit-core/src/test/java/basics/io/VrpReaderV2Test.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpReaderV2Test.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.problem.io; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -25,14 +25,18 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetComposition; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.job.Job; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.vehicle.Vehicle; + import org.junit.Before; import org.junit.Test; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetComposition; -import basics.VehicleRoutingProblem.FleetSize; -import basics.route.Vehicle; public class VrpReaderV2Test { @@ -110,7 +114,25 @@ public class VrpReaderV2Test { VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); new VrpXMLReader(builder, null).read(inFileName); VehicleRoutingProblem vrp = builder.build(); - assertEquals(2, vrp.getJobs().size()); + assertEquals(3, vrp.getJobs().size()); + int servCounter = 0; + for(Job j : vrp.getJobs().values()){ + if(j instanceof Service) servCounter++; + } + assertEquals(2,servCounter); + } + + @Test + public void whenReadingShipments_itReadsThemCorrectly(){ + VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); + new VrpXMLReader(builder, null).read(inFileName); + VehicleRoutingProblem vrp = builder.build(); + assertEquals(3, vrp.getJobs().size()); + int shipCounter = 0; + for(Job j : vrp.getJobs().values()){ + if(j instanceof Shipment) shipCounter++; + } + assertEquals(1,shipCounter); } @Test @@ -122,6 +144,6 @@ public class VrpReaderV2Test { assertEquals("service",s1.getType()); assertEquals(1,s1.getCapacityDemand()); assertEquals(0.0,s1.getServiceDuration(),0.01); - assertEquals(2, vrp.getJobs().size()); + assertEquals(3, vrp.getJobs().size()); } } diff --git a/jsprit-core/src/test/java/basics/io/VrpWriterV2Test.java b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpWriterV2Test.java similarity index 68% rename from jsprit-core/src/test/java/basics/io/VrpWriterV2Test.java rename to jsprit-core/src/test/java/jsprit/core/problem/io/VrpWriterV2Test.java index 84a52a21..9866bcfb 100644 --- a/jsprit-core/src/test/java/basics/io/VrpWriterV2Test.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/io/VrpWriterV2Test.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.io; +package jsprit.core.problem.io; import static org.junit.Assert.assertEquals; @@ -22,22 +22,25 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Builder; +import jsprit.core.problem.VehicleRoutingProblem.FleetComposition; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.End; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; + import org.junit.Before; import org.junit.Test; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.Builder; -import basics.VehicleRoutingProblem.FleetComposition; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.route.End; -import basics.route.ServiceActivity; -import basics.route.Start; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleRoute; -import basics.route.VehicleTypeImpl; public class VrpWriterV2Test { @@ -129,7 +132,7 @@ public class VrpWriterV2Test { VehicleRoutingProblem vrp = builder.addService(s1).addService(s2).build(); new VrpXMLWriter(vrp, null).write(infileName); - VehicleRoutingProblem.Builder vrpToReadBuilder = builder; + VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); new VrpXMLReader(vrpToReadBuilder, null).read(infileName); VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); assertEquals(2,readVrp.getJobs().size()); @@ -141,57 +144,6 @@ public class VrpWriterV2Test { assertEquals(2.0,s1_read.getServiceDuration(),0.01); } - @Test - public void whenWritingSolutions_itWritesThemCorrectly(){ - VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance(); - builder.setFleetComposition(FleetComposition.HETEROGENEOUS); - builder.setFleetSize(FleetSize.FINITE); - VehicleTypeImpl type1 = VehicleTypeImpl.Builder.newInstance("vehType", 20).build(); - VehicleTypeImpl type2 = VehicleTypeImpl.Builder.newInstance("vehType2", 200).build(); - Vehicle v1 = VehicleImpl.Builder.newInstance("v1").setLocationId("loc").setType(type1).build(); - Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setLocationId("loc").setType(type2).build(); - builder.addVehicleType(type1); - builder.addVehicleType(type2); - builder.addVehicle(v1); - builder.addVehicle(v2); - - Service s1 = Service.Builder.newInstance("1", 1).setLocationId("loc").setServiceTime(2.0).build(); - Service s2 = Service.Builder.newInstance("2", 1).setLocationId("loc2").setServiceTime(4.0).build(); - builder.addService(s1).addService(s2); - - VehicleRoutingProblem vrp = builder.build(); - - Collection routes = new ArrayList(); - Start start = Start.newInstance("start", 0.0, Double.MAX_VALUE); - start.setEndTime(10.0); - End end = End.newInstance("end", 0.0, Double.MAX_VALUE); - end.setArrTime(100); - VehicleRoute.Builder routebuilder = VehicleRoute.Builder.newInstance(start, end); - - ServiceActivity act1 = ServiceActivity.newInstance(s1); - ServiceActivity act2 = ServiceActivity.newInstance(s2); - act1.setArrTime(20.0); - act1.setEndTime(30.0); - - act2.setArrTime(40.0); - act2.setEndTime(80.0); - - routebuilder.addActivity(act1).addActivity(act2).setVehicle(v1); - VehicleRoute route = routebuilder.build(); - routes.add(route); - - VehicleRoutingProblemSolution solution = new VehicleRoutingProblemSolution(routes, 100); - - new VrpXMLWriter(vrp, Arrays.asList(solution)).write(infileName); - - VehicleRoutingProblem.Builder vrpToReadBuilder = VehicleRoutingProblem.Builder.newInstance(); - Collection solutions = new ArrayList(); - new VrpXMLReader(vrpToReadBuilder, solutions).read(infileName); - - VehicleRoutingProblem readVrp = vrpToReadBuilder.build(); - - assertEquals(1, solutions.size()); - - } + } diff --git a/jsprit-core/src/test/java/basics/ServiceTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/ServiceTest.java similarity index 92% rename from jsprit-core/src/test/java/basics/ServiceTest.java rename to jsprit-core/src/test/java/jsprit/core/problem/job/ServiceTest.java index cdefac07..0c68453c 100644 --- a/jsprit-core/src/test/java/basics/ServiceTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/ServiceTest.java @@ -14,20 +14,22 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics; +package jsprit.core.problem.job; import static org.junit.Assert.assertTrue; import java.util.HashSet; import java.util.Set; +import jsprit.core.problem.job.Service; + import org.junit.Test; public class ServiceTest { @Test - public void whenTwoServicesHaveTheSameId_theyShouldBeEqual(){ + public void whenTwoServicesHaveTheSameId_theyReferencesShouldBeUnEqual(){ Service one = Service.Builder.newInstance("service", 10).setLocationId("foo").build(); Service two = Service.Builder.newInstance("service", 10).setLocationId("fo").build(); @@ -35,7 +37,7 @@ public class ServiceTest { } @Test - public void whenTwoServicesHaveTheSameId_theyShouldBeEqual2(){ + public void whenTwoServicesHaveTheSameId_theyShouldBeEqual(){ Service one = Service.Builder.newInstance("service", 10).setLocationId("foo").build(); Service two = Service.Builder.newInstance("service", 10).setLocationId("fo").build(); diff --git a/jsprit-core/src/test/java/jsprit/core/problem/job/ShipmentTest.java b/jsprit-core/src/test/java/jsprit/core/problem/job/ShipmentTest.java new file mode 100644 index 00000000..9fff73b9 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/problem/job/ShipmentTest.java @@ -0,0 +1,57 @@ +package jsprit.core.problem.job; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.util.Coordinate; + +import org.junit.Test; + + +public class ShipmentTest { + + @Test + public void whenTwoShipmentsHaveTheSameId_theyReferencesShouldBeUnEqual(){ + Shipment one = Shipment.Builder.newInstance("s", 10).setPickupLocation("foo"). + setDeliveryLocation("foofoo").setPickupServiceTime(10).setDeliveryServiceTime(20).build(); + Shipment two = Shipment.Builder.newInstance("s", 10).setPickupLocation("foo"). + setDeliveryLocation("foofoo").setPickupServiceTime(10).setDeliveryServiceTime(20).build(); + + assertTrue(one != two); + } + + @Test + public void whenTwoShipmentsHaveTheSameId_theyShouldBeEqual(){ + Shipment one = Shipment.Builder.newInstance("s", 10).setPickupLocation("foo"). + setDeliveryLocation("foofoo").setPickupServiceTime(10).setDeliveryServiceTime(20).build(); + Shipment two = Shipment.Builder.newInstance("s", 10).setPickupLocation("foo"). + setDeliveryLocation("foofoo").setPickupServiceTime(10).setDeliveryServiceTime(20).build(); + + assertTrue(one.equals(two)); + } + + @Test + public void whenShipmentIsInstantiatedWithASizeOf10_theSizeShouldBe10(){ + Shipment one = Shipment.Builder.newInstance("s", 10).setPickupLocation("foo"). + setDeliveryLocation("foofoo").setPickupServiceTime(10).setDeliveryServiceTime(20).build(); + assertEquals(10,one.getCapacityDemand()); + } + + @Test + public void whenShipmentIsDefined_itsFieldsShouldBeDefinedCorrectly(){ + Shipment one = Shipment.Builder.newInstance("s", 10).setPickupLocation("foo").setPickupCoord(Coordinate.newInstance(0, 0)).setPickupServiceTime(1.0) + .setPickupTimeWindow(TimeWindow.newInstance(0.0, 1.0)) + .setDeliveryLocation("foofoo").setDeliveryServiceTime(20).setDeliveryCoord(Coordinate.newInstance(1, 1)). + setDeliveryTimeWindow(TimeWindow.newInstance(1.0, 2.0)).build(); + assertEquals("s",one.getId()); + assertEquals(10,one.getCapacityDemand()); + assertEquals("foo",one.getPickupLocation()); + assertEquals(0,one.getPickupCoord().getX(),0.01); + assertEquals(1.0,one.getPickupServiceTime(),0.01); + assertEquals("foofoo",one.getDeliveryLocation()); + assertEquals(20.0,one.getDeliveryServiceTime(),0.01); + assertEquals(1.0,one.getDeliveryCoord().getX(),0.01); + assertEquals(1.0,one.getDeliveryTimeWindow().getStart(),0.01); + } +} diff --git a/jsprit-core/src/test/java/basics/route/TestVehicleRoute.java b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/TestVehicleRoute.java similarity index 92% rename from jsprit-core/src/test/java/basics/route/TestVehicleRoute.java rename to jsprit-core/src/test/java/jsprit/core/problem/solution/route/TestVehicleRoute.java index c1c02158..9c8b733b 100644 --- a/jsprit-core/src/test/java/basics/route/TestVehicleRoute.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/TestVehicleRoute.java @@ -14,18 +14,28 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Iterator; +import jsprit.core.problem.driver.DriverImpl; +import jsprit.core.problem.driver.DriverImpl.NoDriver; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.VehicleRoute; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.Start; +import jsprit.core.problem.solution.route.activity.TourActivities; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; + import org.junit.Before; import org.junit.Test; -import basics.Service; -import basics.route.DriverImpl.NoDriver; public class TestVehicleRoute { diff --git a/jsprit-core/src/test/java/jsprit/core/problem/solution/route/VehicleRouteBuilderTest.java b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/VehicleRouteBuilderTest.java new file mode 100644 index 00000000..b9219432 --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/VehicleRouteBuilderTest.java @@ -0,0 +1,61 @@ +package jsprit.core.problem.solution.route; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.vehicle.Vehicle; + +import org.junit.Test; + + +public class VehicleRouteBuilderTest { + + @Test(expected=IllegalStateException.class) + public void whenDeliveryIsAddedBeforePickup_throwsException(){ + Shipment s = mock(Shipment.class); + VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class)); + builder.addDelivery(s); + } + + @Test(expected=IllegalStateException.class) + public void whenPickupIsAddedTwice_throwsException(){ + Shipment s = mock(Shipment.class); + VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class)); + builder.addPickup(s); + builder.addPickup(s); + } + + @Test(expected=IllegalStateException.class) + public void whenShipmentIsPickedDeliveredAndDeliveredAgain_throwsException(){ + Shipment s = mock(Shipment.class); + VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class)); + builder.addPickup(s); + builder.addDelivery(s); + builder.addDelivery(s); + } + + @Test(expected=IllegalStateException.class) + public void whenShipmentIsPickedUpThoughButHasNotBeenDeliveredAndRouteIsBuilt_throwsException(){ + Shipment s = mock(Shipment.class); + VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class)); + builder.addPickup(s); + builder.addPickup(mock(Shipment.class)); + builder.addDelivery(s); + builder.build(); + } + + @Test + public void whenTwoShipmentsHaveBeenAdded_nuOfActivitiesMustEqualFour(){ + Shipment s = mock(Shipment.class); + Shipment s2 = mock(Shipment.class); + VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class)); + builder.addPickup(s); + builder.addPickup(s2); + builder.addDelivery(s); + builder.addDelivery(s2); + VehicleRoute route = builder.build(); + assertEquals(4,route.getTourActivities().getActivities().size()); + } + +} diff --git a/jsprit-core/src/test/java/basics/route/ServiceActTest.java b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/ServiceActTest.java similarity index 91% rename from jsprit-core/src/test/java/basics/route/ServiceActTest.java rename to jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/ServiceActTest.java index ffc662f4..80801fc1 100644 --- a/jsprit-core/src/test/java/basics/route/ServiceActTest.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/ServiceActTest.java @@ -14,14 +14,15 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package basics.route; +package jsprit.core.problem.solution.route.activity; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.activity.ServiceActivity; import org.junit.Test; -import basics.Service; public class ServiceActTest { diff --git a/jsprit-core/src/test/java/algorithms/TestRefs.java b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/TestRefs.java similarity index 93% rename from jsprit-core/src/test/java/algorithms/TestRefs.java rename to jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/TestRefs.java index 0133ed26..57d8d5ae 100644 --- a/jsprit-core/src/test/java/algorithms/TestRefs.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/TestRefs.java @@ -14,16 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.solution.route.activity; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; +import jsprit.core.problem.solution.route.activity.Start; + import org.junit.Test; -import basics.route.Start; public class TestRefs { diff --git a/jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/TestTour.java b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/TestTour.java new file mode 100644 index 00000000..8b7b1c0e --- /dev/null +++ b/jsprit-core/src/test/java/jsprit/core/problem/solution/route/activity/TestTour.java @@ -0,0 +1,125 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.core.problem.solution.route.activity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.route.activity.DefaultShipmentActivityFactory; +import jsprit.core.problem.solution.route.activity.ServiceActivity; +import jsprit.core.problem.solution.route.activity.TourActivities; +import jsprit.core.problem.solution.route.activity.TourActivity; +import jsprit.core.problem.solution.route.activity.TourShipmentActivityFactory; + +import org.junit.Before; +import org.junit.Test; + + + +public class TestTour { + + private Service service; + private ServiceActivity act; + private TourActivities tour; + + @Before + public void doBefore(){ + service = Service.Builder.newInstance("yo", 10).setLocationId("loc").build(); + act = ServiceActivity.newInstance(service); + tour = new TourActivities(); + } + + @Test + public void whenAddingServiceAct_serviceActIsAdded(){ + assertFalse(tour.servesJob(service)); + tour.addActivity(act); + assertTrue(tour.servesJob(service)); + } + + @Test(expected=IllegalStateException.class) + public void whenAddingServiceActTwice_anExceptionIsThrown(){ + assertFalse(tour.servesJob(service)); + tour.addActivity(act); + tour.addActivity(act); + } + + @Test + public void whenAddingServiceAndRemovingItImmediately_tourShouldNotServeServiceAnymore(){ + assertFalse(tour.servesJob(service)); + tour.addActivity(act); + assertTrue(tour.servesJob(service)); + tour.removeJob(service); + assertFalse(tour.servesJob(service)); + } + + @Test + public void whenAddingAServiceAndThenRemovingTheServiceAgain_tourShouldNotServeItAnymore(){ + assertEquals(0, tour.getActivities().size()); + tour.addActivity(act); + assertEquals(1, tour.getActivities().size()); + Service anotherServiceInstance = Service.Builder.newInstance("yo", 10).setLocationId("loc").build(); + assertTrue(service.equals(anotherServiceInstance)); + boolean removed = tour.removeJob(anotherServiceInstance); + assertTrue(removed); + assertEquals(0, tour.getActivities().size()); + } + + @Test + public void whenAddingAShipmentActivity_tourShouldServeShipment(){ + Shipment s = Shipment.Builder.newInstance("s", 1).setDeliveryLocation("delLoc").setPickupLocation("pickLoc").build(); + TourShipmentActivityFactory fac = new DefaultShipmentActivityFactory(); + TourActivity pickupShipment = fac.createPickup(s); + TourActivity deliverShipment = fac.createDelivery(s); + tour.addActivity(pickupShipment); + tour.addActivity(deliverShipment); + assertTrue(tour.servesJob(s)); + assertEquals(2,tour.getActivities().size()); + } + + + + @Test + public void whenRemovingShipment_tourShouldNotServiceItAnymore(){ + Shipment s = Shipment.Builder.newInstance("s", 1).setDeliveryLocation("delLoc").setPickupLocation("pickLoc").build(); + TourShipmentActivityFactory fac = new DefaultShipmentActivityFactory(); + TourActivity pickupShipment = fac.createPickup(s); + TourActivity deliverShipment = fac.createDelivery(s); + tour.addActivity(pickupShipment); + tour.addActivity(deliverShipment); + + tour.removeJob(s); + assertFalse(tour.servesJob(s)); + } + + + @Test + public void whenRemovingShipment_theirCorrespondingActivitiesShouldBeRemoved(){ + Shipment s = Shipment.Builder.newInstance("s", 1).setDeliveryLocation("delLoc").setPickupLocation("pickLoc").build(); + TourShipmentActivityFactory fac = new DefaultShipmentActivityFactory(); + TourActivity pickupShipment = fac.createPickup(s); + TourActivity deliverShipment = fac.createDelivery(s); + tour.addActivity(pickupShipment); + tour.addActivity(deliverShipment); + + assertEquals(2, tour.getActivities().size()); + tour.removeJob(s); + assertEquals(0, tour.getActivities().size()); + } + +} diff --git a/jsprit-core/src/test/java/algorithms/TestVehicleFleetManager.java b/jsprit-core/src/test/java/jsprit/core/problem/vehicle/TestVehicleFleetManager.java similarity index 87% rename from jsprit-core/src/test/java/algorithms/TestVehicleFleetManager.java rename to jsprit-core/src/test/java/jsprit/core/problem/vehicle/TestVehicleFleetManager.java index c909e72d..9ab69b02 100644 --- a/jsprit-core/src/test/java/algorithms/TestVehicleFleetManager.java +++ b/jsprit-core/src/test/java/jsprit/core/problem/vehicle/TestVehicleFleetManager.java @@ -14,17 +14,19 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package algorithms; +package jsprit.core.problem.vehicle; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import jsprit.core.problem.vehicle.FiniteFleetManagerFactory; +import jsprit.core.problem.vehicle.PenaltyVehicleType; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleFleetManager; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; import junit.framework.TestCase; -import basics.route.PenaltyVehicleType; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleTypeImpl; public class TestVehicleFleetManager extends TestCase{ @@ -42,7 +44,7 @@ public class TestVehicleFleetManager extends TestCase{ vehicles.add(v1); vehicles.add(v2); - fleetManager = new VehicleFleetManagerImpl(vehicles); + fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager(); } public void testGetVehicles(){ @@ -94,7 +96,7 @@ public class TestVehicleFleetManager extends TestCase{ vehicles.add(v1); vehicles.add(v2); vehicles.add(penalty4standard); - VehicleFleetManager fleetManager = new VehicleFleetManagerImpl(vehicles); + VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager(); Collection availableVehicles = fleetManager.getAvailableVehicles(); assertEquals(2, availableVehicles.size()); @@ -115,7 +117,7 @@ public class TestVehicleFleetManager extends TestCase{ vehicles.add(v2); vehicles.add(penalty4standard); vehicles.add(v3); - VehicleFleetManager fleetManager = new VehicleFleetManagerImpl(vehicles); + VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager(); fleetManager.lock(v1); fleetManager.lock(v2); Collection availableVehicles = fleetManager.getAvailableVehicles(); @@ -133,7 +135,7 @@ public class TestVehicleFleetManager extends TestCase{ vehicles.add(v1); vehicles.add(v2); vehicles.add(penalty4standard); - VehicleFleetManager fleetManager = new VehicleFleetManagerImpl(vehicles); + VehicleFleetManager fleetManager = new FiniteFleetManagerFactory(vehicles).createFleetManager(); fleetManager.lock(v1); fleetManager.lock(v2); Collection availableVehicles = fleetManager.getAvailableVehicles(); diff --git a/jsprit-core/src/test/resources/C101_solomon_pd.xml b/jsprit-core/src/test/resources/C101_solomon_pd.xml new file mode 100644 index 00000000..55d0e3c7 --- /dev/null +++ b/jsprit-core/src/test/resources/C101_solomon_pd.xml @@ -0,0 +1,2535 @@ + + + + INFINITE + HOMOGENEOUS + + + + solomonVehicle + solomonType + + 0 + + + + 0.0 + 1236.0 + + + + + + solomonType + 200 + + 0.0 + 1.0 + + + + + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=5.0][y=35.0] + + 90.0 + + + 283.0 + 344.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=5.0][y=45.0] + + 90.0 + + + 665.0 + 716.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=8.0][y=40.0] + + 90.0 + + + 87.0 + 158.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=8.0][y=45.0] + + 90.0 + + + 751.0 + 816.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=0.0][y=45.0] + + 90.0 + + + 567.0 + 624.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=2.0][y=40.0] + + 90.0 + + + 383.0 + 434.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=0.0][y=40.0] + + 90.0 + + + 479.0 + 522.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=33.0][y=35.0] + + 90.0 + + + 16.0 + 80.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=33.0][y=32.0] + + 90.0 + + + 68.0 + 149.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=32.0] + + 90.0 + + + 166.0 + 235.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=30.0] + + 90.0 + + + 264.0 + 321.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=52.0] + + 90.0 + + + 812.0 + 883.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=55.0] + + 90.0 + + + 732.0 + 777.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=50.0] + + 90.0 + + + 65.0 + 144.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=52.0] + + 90.0 + + + 169.0 + 224.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=55.0] + + 90.0 + + + 622.0 + 701.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=23.0][y=52.0] + + 90.0 + + + 261.0 + 316.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=23.0][y=55.0] + + 90.0 + + + 546.0 + 593.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=50.0] + + 90.0 + + + 358.0 + 405.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=66.0] + + 90.0 + + + 65.0 + 146.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=70.0] + + 90.0 + + + 825.0 + 870.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=68.0] + + 90.0 + + + 912.0 + 967.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=55.0] + + 90.0 + + + 449.0 + 504.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=66.0] + + 90.0 + + + 170.0 + 225.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=69.0] + + 90.0 + + + 621.0 + 702.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=65.0] + + 90.0 + + + 15.0 + 67.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=10.0][y=40.0] + + 90.0 + + + 31.0 + 100.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=68.0] + + 90.0 + + + 727.0 + 782.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=10.0][y=35.0] + + 90.0 + + + 200.0 + 237.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=70.0] + + 90.0 + + + 534.0 + 605.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=68.0] + + 90.0 + + + 255.0 + 324.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=15.0][y=80.0] + + 90.0 + + + 278.0 + 345.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=18.0][y=75.0] + + 90.0 + + + 99.0 + 148.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=15.0][y=75.0] + + 90.0 + + + 179.0 + 254.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=80.0] + + 90.0 + + + 384.0 + 429.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=85.0] + + 90.0 + + + 475.0 + 528.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=22.0][y=75.0] + + 90.0 + + + 30.0 + 92.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=22.0][y=85.0] + + 90.0 + + + 567.0 + 620.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=69.0] + + 90.0 + + + 448.0 + 505.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=85.0] + + 90.0 + + + 652.0 + 721.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=52.0] + + 90.0 + + + 914.0 + 965.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=50.0] + + 90.0 + + + 10.0 + 73.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=55.0][y=80.0] + + 90.0 + + + 743.0 + 820.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=55.0][y=85.0] + + 90.0 + + + 647.0 + 726.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=58.0][y=75.0] + + 90.0 + + + 30.0 + 84.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=85.0] + + 90.0 + + + 561.0 + 622.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=80.0] + + 90.0 + + + 95.0 + 156.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=62.0][y=80.0] + + 90.0 + + + 196.0 + 239.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=82.0] + + 90.0 + + + 285.0 + 336.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=85.0] + + 90.0 + + + 475.0 + 518.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=67.0][y=85.0] + + 90.0 + + + 368.0 + 441.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=60.0] + + 90.0 + + + 836.0 + 889.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=55.0] + + 90.0 + + + 20.0 + 84.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=66.0] + + 90.0 + + + 357.0 + 410.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=60.0] + + 90.0 + + + 645.0 + 708.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=63.0][y=58.0] + + 90.0 + + + 737.0 + 802.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=87.0][y=30.0] + + 90.0 + + + 668.0 + 731.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=88.0][y=35.0] + + 90.0 + + + 109.0 + 170.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=88.0][y=30.0] + + 90.0 + + + 574.0 + 643.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=75.0][y=55.0] + + 90.0 + + + 369.0 + 420.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=72.0][y=55.0] + + 90.0 + + + 265.0 + 338.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=85.0][y=25.0] + + 90.0 + + + 769.0 + 820.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=85.0][y=35.0] + + 90.0 + + + 47.0 + 124.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=66.0][y=55.0] + + 90.0 + + + 173.0 + 238.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=55.0] + + 90.0 + + + 85.0 + 144.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=70.0][y=58.0] + + 90.0 + + + 458.0 + 523.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=68.0][y=60.0] + + 90.0 + + + 555.0 + 612.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=47.0][y=40.0] + + 90.0 + + + 12.0 + 77.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=47.0][y=35.0] + + 90.0 + + + 826.0 + 875.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=35.0] + + 90.0 + + + 916.0 + 969.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=30.0] + + 90.0 + + + 734.0 + 777.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=95.0][y=30.0] + + 90.0 + + + 387.0 + 456.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=95.0][y=35.0] + + 90.0 + + + 293.0 + 360.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=53.0][y=30.0] + + 90.0 + + + 450.0 + 505.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=92.0][y=30.0] + + 90.0 + + + 478.0 + 551.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=53.0][y=35.0] + + 90.0 + + + 353.0 + 412.0 + + + + 50 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=65.0] + + 90.0 + + + 997.0 + 1068.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=90.0][y=35.0] + + 90.0 + + + 203.0 + 260.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=15.0] + + 90.0 + + + 651.0 + 740.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=5.0] + + 90.0 + + + 471.0 + 534.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=15.0] + + 90.0 + + + 35.0 + 87.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=5.0] + + 90.0 + + + 385.0 + 436.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=15.0] + + 90.0 + + + 95.0 + 158.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=48.0][y=30.0] + + 90.0 + + + 632.0 + 693.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=48.0][y=40.0] + + 90.0 + + + 76.0 + 129.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=50.0][y=35.0] + + 90.0 + + + 262.0 + 317.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=50.0][y=40.0] + + 90.0 + + + 171.0 + 218.0 + + + + 50 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=5.0] + + 90.0 + + + 562.0 + 629.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=50.0][y=30.0] + + 90.0 + + + 531.0 + 610.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=35.0] + + 90.0 + + + 1001.0 + 1066.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=30.0] + + 90.0 + + + 632.0 + 693.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=30.0] + + 90.0 + + + 541.0 + 600.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=32.0][y=30.0] + + 90.0 + + + 359.0 + 412.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=35.0] + + 90.0 + + + 1054.0 + 1127.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=32.0] + + 90.0 + + + 448.0 + 509.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=30.0] + + 90.0 + + + 725.0 + 786.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=35.0] + + 90.0 + + + 912.0 + 969.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=44.0][y=5.0] + + 90.0 + + + 286.0 + 347.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=10.0] + + 90.0 + + + 186.0 + 257.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=26.0][y=32.0] + + 90.0 + + + 815.0 + 880.0 + + + + 10 + + + diff --git a/jsprit-core/src/test/resources/finiteVrp.xml b/jsprit-core/src/test/resources/finiteVrp.xml new file mode 100644 index 00000000..1110c71a --- /dev/null +++ b/jsprit-core/src/test/resources/finiteVrp.xml @@ -0,0 +1,89 @@ + + + + + FINITE + HETEROGENEOUS + + + + + v1 + + depotLoc2 + + + vehType + + 0.0 + 1000.0 + + + + v2 + + depotLoc + + + vehType2 + + 0.0 + 1000.0 + + + + + + vehType + 20 + + 0.0 + 0.0 + + + + + vehType2 + 200 + + 0.0 + 0.0 + + + + + + + + j(1,5) + + 1 + 0.0 + + + 0.0 + 4000.0 + + + + + + i(3,9) + + 1 + 0.0 + + + 0.0 + 4000.0 + + + + + + + + + diff --git a/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml b/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml index 073b87c9..4a195415 100644 --- a/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml +++ b/jsprit-core/src/test/resources/finiteVrpForReaderV2Test.xml @@ -102,5 +102,33 @@ + + + + + i(3,9) + + 0.0 + + + 0.0 + 4000.0 + + + + + i(9,9) + + 0.0 + + + 0.0 + 4000.0 + + + + 1 + + diff --git a/jsprit-core/src/test/resources/finiteVrpWithShipmentsAndSolution.xml b/jsprit-core/src/test/resources/finiteVrpWithShipmentsAndSolution.xml new file mode 100644 index 00000000..357b5356 --- /dev/null +++ b/jsprit-core/src/test/resources/finiteVrpWithShipmentsAndSolution.xml @@ -0,0 +1,149 @@ + + + + + FINITE + HETEROGENEOUS + + + + + v1 + + depotLoc2 + + + vehType + + 0.0 + 1000.0 + + + + v2 + + depotLoc + + + vehType2 + + 0.0 + 1000.0 + + + + + + vehType + 20 + + 0.0 + 0.0 + + + + + vehType2 + 200 + + 0.0 + 0.0 + + + + + + + + j(1,5) + + 1 + 0.0 + + + 0.0 + 4000.0 + + + + + + i(3,9) + + 1 + 0.0 + + + 0.0 + 4000.0 + + + + + + + + + i(3,9) + + 0.0 + + + 0.0 + 4000.0 + + + + + i(9,9) + + 0.0 + + + 0.0 + 4000.0 + + + + 1 + + + + + + 100.0 + + + 0.0 + noDriver + v1 + 10.0 + + 1 + 20.0 + 30.0 + + + 2 + 40.0 + 80.0 + + + 3 + 40.0 + 80.0 + + + 3 + 40.0 + 80.0 + + 100.0 + + + + + + diff --git a/jsprit-core/src/test/resources/infiniteWriterV2Test.xml b/jsprit-core/src/test/resources/infiniteWriterV2Test.xml index 5761c975..ec10a45f 100644 --- a/jsprit-core/src/test/resources/infiniteWriterV2Test.xml +++ b/jsprit-core/src/test/resources/infiniteWriterV2Test.xml @@ -2,8 +2,8 @@ - FINITE - HETEROGENEOUS + INFINITE + HOMOGENEOUS @@ -73,28 +73,4 @@ - - - 100.0 - - - 0.0 - noDriver - v1 - 10.0 - - 1 - 20.0 - 30.0 - - - 2 - 40.0 - 80.0 - - 100.0 - - - - diff --git a/jsprit-core/src/test/resources/pd_solomon_c101_sol.xml b/jsprit-core/src/test/resources/pd_solomon_c101_sol.xml new file mode 100644 index 00000000..d19bd54c --- /dev/null +++ b/jsprit-core/src/test/resources/pd_solomon_c101_sol.xml @@ -0,0 +1,3612 @@ + + + + INFINITE + HOMOGENEOUS + + + + solomonVehicle + solomonType + + 0 + + + + 0.0 + 1236.0 + + + + + + solomonType + 200 + + 0.0 + 1.0 + + + + + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=5.0][y=35.0] + + 0.0 + + + 283.0 + 344.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=5.0][y=45.0] + + 0.0 + + + 665.0 + 716.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=8.0][y=40.0] + + 0.0 + + + 87.0 + 158.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=8.0][y=45.0] + + 0.0 + + + 751.0 + 816.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=0.0][y=45.0] + + 0.0 + + + 567.0 + 624.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=2.0][y=40.0] + + 0.0 + + + 383.0 + 434.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=0.0][y=40.0] + + 0.0 + + + 479.0 + 522.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=33.0][y=35.0] + + 0.0 + + + 16.0 + 80.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=33.0][y=32.0] + + 0.0 + + + 68.0 + 149.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=32.0] + + 0.0 + + + 166.0 + 235.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=30.0] + + 0.0 + + + 264.0 + 321.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=52.0] + + 0.0 + + + 812.0 + 883.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=55.0] + + 0.0 + + + 732.0 + 777.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=50.0] + + 0.0 + + + 65.0 + 144.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=52.0] + + 0.0 + + + 169.0 + 224.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=55.0] + + 0.0 + + + 622.0 + 701.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=23.0][y=52.0] + + 0.0 + + + 261.0 + 316.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=23.0][y=55.0] + + 0.0 + + + 546.0 + 593.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=50.0] + + 0.0 + + + 358.0 + 405.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=66.0] + + 0.0 + + + 65.0 + 146.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=70.0] + + 0.0 + + + 825.0 + 870.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=68.0] + + 0.0 + + + 912.0 + 967.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=55.0] + + 0.0 + + + 449.0 + 504.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=66.0] + + 0.0 + + + 170.0 + 225.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=69.0] + + 0.0 + + + 621.0 + 702.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=10.0][y=40.0] + + 0.0 + + + 31.0 + 100.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=65.0] + + 0.0 + + + 15.0 + 67.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=10.0][y=35.0] + + 0.0 + + + 200.0 + 237.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=68.0] + + 0.0 + + + 727.0 + 782.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=70.0] + + 0.0 + + + 534.0 + 605.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=68.0] + + 0.0 + + + 255.0 + 324.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=15.0][y=80.0] + + 0.0 + + + 278.0 + 345.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=18.0][y=75.0] + + 0.0 + + + 99.0 + 148.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=15.0][y=75.0] + + 0.0 + + + 179.0 + 254.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=80.0] + + 0.0 + + + 384.0 + 429.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=85.0] + + 0.0 + + + 475.0 + 528.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=22.0][y=75.0] + + 0.0 + + + 30.0 + 92.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=22.0][y=85.0] + + 0.0 + + + 567.0 + 620.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=69.0] + + 0.0 + + + 448.0 + 505.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=85.0] + + 0.0 + + + 652.0 + 721.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=52.0] + + 0.0 + + + 914.0 + 965.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=50.0] + + 0.0 + + + 10.0 + 73.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=55.0][y=80.0] + + 0.0 + + + 743.0 + 820.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=55.0][y=85.0] + + 0.0 + + + 647.0 + 726.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=58.0][y=75.0] + + 0.0 + + + 30.0 + 84.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=85.0] + + 0.0 + + + 561.0 + 622.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=80.0] + + 0.0 + + + 95.0 + 156.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=62.0][y=80.0] + + 0.0 + + + 196.0 + 239.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=82.0] + + 0.0 + + + 285.0 + 336.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=85.0] + + 0.0 + + + 475.0 + 518.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=67.0][y=85.0] + + 0.0 + + + 368.0 + 441.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=60.0] + + 0.0 + + + 836.0 + 889.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=60.0][y=55.0] + + 0.0 + + + 20.0 + 84.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=66.0] + + 0.0 + + + 357.0 + 410.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=60.0] + + 0.0 + + + 645.0 + 708.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=63.0][y=58.0] + + 0.0 + + + 737.0 + 802.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=87.0][y=30.0] + + 0.0 + + + 668.0 + 731.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=88.0][y=35.0] + + 0.0 + + + 109.0 + 170.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=88.0][y=30.0] + + 0.0 + + + 574.0 + 643.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=75.0][y=55.0] + + 0.0 + + + 369.0 + 420.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=72.0][y=55.0] + + 0.0 + + + 265.0 + 338.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=85.0][y=25.0] + + 0.0 + + + 769.0 + 820.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=85.0][y=35.0] + + 0.0 + + + 47.0 + 124.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=66.0][y=55.0] + + 0.0 + + + 173.0 + 238.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=65.0][y=55.0] + + 0.0 + + + 85.0 + 144.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=70.0][y=58.0] + + 0.0 + + + 458.0 + 523.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=68.0][y=60.0] + + 0.0 + + + 555.0 + 612.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=47.0][y=40.0] + + 0.0 + + + 12.0 + 77.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=47.0][y=35.0] + + 0.0 + + + 826.0 + 875.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=35.0] + + 0.0 + + + 916.0 + 969.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=30.0] + + 0.0 + + + 734.0 + 777.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=95.0][y=30.0] + + 0.0 + + + 387.0 + 456.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=95.0][y=35.0] + + 0.0 + + + 293.0 + 360.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=53.0][y=30.0] + + 0.0 + + + 450.0 + 505.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=92.0][y=30.0] + + 0.0 + + + 478.0 + 551.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=53.0][y=35.0] + + 0.0 + + + 353.0 + 412.0 + + + + 50 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=45.0][y=65.0] + + 0.0 + + + 997.0 + 1068.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=90.0][y=35.0] + + 0.0 + + + 203.0 + 260.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=15.0] + + 0.0 + + + 651.0 + 740.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=38.0][y=5.0] + + 0.0 + + + 471.0 + 534.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=15.0] + + 0.0 + + + 35.0 + 87.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=40.0][y=5.0] + + 0.0 + + + 385.0 + 436.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=15.0] + + 0.0 + + + 95.0 + 158.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=48.0][y=30.0] + + 0.0 + + + 632.0 + 693.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=48.0][y=40.0] + + 0.0 + + + 76.0 + 129.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=50.0][y=35.0] + + 0.0 + + + 262.0 + 317.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=50.0][y=40.0] + + 0.0 + + + 171.0 + 218.0 + + + + 50 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=35.0][y=5.0] + + 0.0 + + + 562.0 + 629.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=50.0][y=30.0] + + 0.0 + + + 531.0 + 610.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=35.0] + + 0.0 + + + 1001.0 + 1066.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=28.0][y=30.0] + + 0.0 + + + 632.0 + 693.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=30.0] + + 0.0 + + + 541.0 + 600.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=32.0][y=30.0] + + 0.0 + + + 359.0 + 412.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=35.0] + + 0.0 + + + 1054.0 + 1127.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=30.0][y=32.0] + + 0.0 + + + 448.0 + 509.0 + + + + 30 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=30.0] + + 0.0 + + + 725.0 + 786.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=25.0][y=35.0] + + 0.0 + + + 912.0 + 969.0 + + + + 10 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=44.0][y=5.0] + + 0.0 + + + 286.0 + 347.0 + + + + 20 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=42.0][y=10.0] + + 0.0 + + + 186.0 + 257.0 + + + + 40 + + + + [x=40.0][y=50.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=26.0][y=32.0] + + 0.0 + + + 815.0 + 880.0 + + + + 10 + + + + + 931.4150471075089 + + + 84.4406775617744 + noDriver + solomonVehicle + 0.0 + + 29 + 0.0 + 0.0 + + + 20 + 0.0 + 0.0 + + + 30 + 0.0 + 0.0 + + + 32 + 0.0 + 0.0 + + + 26 + 0.0 + 0.0 + + + 28 + 0.0 + 0.0 + + + 24 + 0.0 + 0.0 + + + 23 + 0.0 + 0.0 + + + 33 + 0.0 + 0.0 + + + 31 + 0.0 + 0.0 + + + 20 + 10.0 + 10.0 + + + 24 + 15.0 + 65.0 + + + 32 + 83.02775637731995 + 83.02775637731995 + + + 33 + 85.02775637731995 + 87.0 + + + 31 + 92.3851648071345 + 200.0 + + + 29 + 218.02775637731995 + 358.0 + + + 30 + 363.0 + 449.0 + + + 28 + 452.0 + 546.0 + + + 26 + 548.0 + 622.0 + + + 23 + 625.0 + 732.0 + + 745.0 + + + 95.88470913081827 + noDriver + solomonVehicle + 0.0 + + 15 + 0.0 + 0.0 + + + 12 + 0.0 + 0.0 + + + 18 + 0.0 + 0.0 + + + 14 + 0.0 + 0.0 + + + 13 + 0.0 + 0.0 + + + 16 + 0.0 + 0.0 + + + 19 + 0.0 + 0.0 + + + 17 + 0.0 + 0.0 + + + 13 + 30.805843601498726 + 30.805843601498726 + + + 17 + 34.80584360149872 + 99.0 + + + 18 + 102.0 + 179.0 + + + 19 + 184.0 + 278.0 + + + 15 + 283.0 + 384.0 + + + 16 + 389.0 + 475.0 + + + 14 + 477.0 + 567.0 + + + 12 + 570.0 + 652.0 + + 690.0788655293195 + + + 111.98098283607547 + noDriver + solomonVehicle + 0.0 + + 98 + 0.0 + 0.0 + + + 84 + 0.0 + 0.0 + + + 83 + 0.0 + 0.0 + + + 95 + 0.0 + 0.0 + + + 88 + 0.0 + 0.0 + + + 86 + 0.0 + 0.0 + + + 91 + 0.0 + 0.0 + + + 89 + 0.0 + 0.0 + + + 85 + 0.0 + 0.0 + + + 82 + 0.0 + 0.0 + + + 98 + 30.805843601498726 + 30.805843601498726 + + + 95 + 37.20896783893157 + 196.0 + + + 86 + 221.31797780234433 + 221.31797780234433 + + + 83 + 227.31797780234433 + 265.0 + + + 82 + 268.0 + 369.0 + + + 84 + 374.8309518948453 + 458.0 + + + 85 + 460.8284271247462 + 555.0 + + + 88 + 558.0 + 645.0 + + + 89 + 647.8284271247462 + 737.0 + + + 91 + 740.605551275464 + 836.0 + + 858.360679774998 + + + 56.11696343016839 + noDriver + solomonVehicle + 0.0 + + 74 + 0.0 + 0.0 + + + 65 + 0.0 + 0.0 + + + 63 + 0.0 + 0.0 + + + 66 + 0.0 + 0.0 + + + 67 + 0.0 + 0.0 + + + 64 + 0.0 + 0.0 + + + 62 + 0.0 + 0.0 + + + 69 + 0.0 + 0.0 + + + 72 + 0.0 + 0.0 + + + 61 + 0.0 + 0.0 + + + 67 + 12.206555615733702 + 12.206555615733702 + + + 65 + 13.206555615733702 + 76.0 + + + 63 + 78.0 + 171.0 + + + 62 + 176.0 + 262.0 + + + 74 + 265.0 + 353.0 + + + 72 + 358.0 + 450.0 + + + 61 + 453.0 + 531.0 + + + 64 + 533.0 + 632.0 + + + 66 + 637.0990195135928 + 826.0 + + + 69 + 828.0 + 916.0 + + 931.8113883008419 + + + 102.37910960851471 + noDriver + solomonVehicle + 0.0 + + 54 + 0.0 + 0.0 + + + 58 + 0.0 + 0.0 + + + 68 + 0.0 + 0.0 + + + 60 + 0.0 + 0.0 + + + 53 + 0.0 + 0.0 + + + 59 + 0.0 + 0.0 + + + 57 + 0.0 + 0.0 + + + 56 + 0.0 + 0.0 + + + 57 + 35.0 + 35.0 + + + 54 + 40.3851648071345 + 186.0 + + + 53 + 191.38516480713452 + 286.0 + + + 56 + 290.0 + 385.0 + + + 58 + 387.0 + 471.0 + + + 60 + 474.0 + 562.0 + + + 59 + 572.4403065089106 + 651.0 + + + 68 + 667.5529453572468 + 734.0 + + 754.6155281280883 + + + 53.31190824207452 + noDriver + solomonVehicle + 0.0 + + 8 + 0.0 + 0.0 + + + 9 + 0.0 + 0.0 + + + 10 + 0.0 + 0.0 + + + 3 + 0.0 + 0.0 + + + 7 + 0.0 + 0.0 + + + 5 + 0.0 + 0.0 + + + 11 + 0.0 + 0.0 + + + 6 + 0.0 + 0.0 + + + 4 + 0.0 + 0.0 + + + 5 + 15.132745950421556 + 15.132745950421556 + + + 3 + 16.13274595042156 + 65.0 + + + 7 + 67.0 + 170.0 + + + 8 + 172.82842712474618 + 255.0 + + + 10 + 258.605551275464 + 357.0 + + + 11 + 360.0 + 448.0 + + + 9 + 451.1622776601684 + 534.0 + + + 6 + 536.2360679774998 + 621.0 + + + 4 + 623.2360679774998 + 727.0 + + 745.1107702762748 + + + 100.42763486950274 + noDriver + solomonVehicle + 0.0 + + 55 + 0.0 + 0.0 + + + 46 + 0.0 + 0.0 + + + 44 + 0.0 + 0.0 + + + 51 + 0.0 + 0.0 + + + 40 + 0.0 + 0.0 + + + 49 + 0.0 + 0.0 + + + 48 + 0.0 + 0.0 + + + 45 + 0.0 + 0.0 + + + 42 + 0.0 + 0.0 + + + 43 + 0.0 + 0.0 + + + 47 + 0.0 + 0.0 + + + 52 + 0.0 + 0.0 + + + 41 + 0.0 + 0.0 + + + 50 + 0.0 + 0.0 + + + 43 + 16.55294535724685 + 16.55294535724685 + + + 42 + 19.55294535724685 + 68.0 + + + 55 + 87.23538406167134 + 95.0 + + + 41 + 113.38477631085024 + 166.0 + + + 40 + 168.0 + 264.0 + + + 44 + 267.0 + 359.0 + + + 46 + 361.8284271247462 + 448.0 + + + 45 + 450.0 + 541.0 + + + 48 + 543.0 + 632.0 + + + 51 + 635.0 + 725.0 + + + 50 + 727.2360679774998 + 815.0 + + + 52 + 818.1622776601683 + 912.0 + + + 49 + 915.0 + 1001.0 + + + 47 + 1003.0 + 1054.0 + + 1072.02775637732 + + + 133.7631148876197 + noDriver + solomonVehicle + 0.0 + + 87 + 0.0 + 0.0 + + + 79 + 0.0 + 0.0 + + + 77 + 0.0 + 0.0 + + + 81 + 0.0 + 0.0 + + + 76 + 0.0 + 0.0 + + + 90 + 0.0 + 0.0 + + + 78 + 0.0 + 0.0 + + + 80 + 0.0 + 0.0 + + + 73 + 0.0 + 0.0 + + + 71 + 0.0 + 0.0 + + + 70 + 0.0 + 0.0 + + + 90 + 20.615528128088304 + 20.615528128088304 + + + 87 + 25.615528128088304 + 85.0 + + + 81 + 113.2842712474619 + 113.2842712474619 + + + 78 + 116.2842712474619 + 116.2842712474619 + + + 76 + 118.2842712474619 + 203.0 + + + 71 + 208.0 + 293.0 + + + 70 + 298.0 + 387.0 + + + 73 + 390.0 + 478.0 + + + 77 + 482.0 + 574.0 + + + 79 + 575.0 + 668.0 + + + 80 + 673.3851648071345 + 769.0 + + 820.478150704935 + + + 96.99975276181122 + noDriver + solomonVehicle + 0.0 + + 75 + 0.0 + 0.0 + + + 96 + 0.0 + 0.0 + + + 93 + 0.0 + 0.0 + + + 94 + 0.0 + 0.0 + + + 1 + 0.0 + 0.0 + + + 99 + 0.0 + 0.0 + + + 100 + 0.0 + 0.0 + + + 97 + 0.0 + 0.0 + + + 2 + 0.0 + 0.0 + + + 92 + 0.0 + 0.0 + + + 96 + 36.05551275463989 + 95.0 + + + 94 + 100.3851648071345 + 285.0 + + + 92 + 288.605551275464 + 368.0 + + + 93 + 370.0 + 475.0 + + + 97 + 480.0 + 561.0 + + + 100 + 566.0 + 647.0 + + + 99 + 652.0 + 743.0 + + + 2 + 757.142135623731 + 825.0 + + + 1 + 827.0 + 912.0 + + + 75 + 915.0 + 997.0 + + 1012.8113883008419 + + + 96.11019377914941 + noDriver + solomonVehicle + 0.0 + + 36 + 0.0 + 0.0 + + + 35 + 0.0 + 0.0 + + + 25 + 0.0 + 0.0 + + + 34 + 0.0 + 0.0 + + + 37 + 0.0 + 0.0 + + + 27 + 0.0 + 0.0 + + + 21 + 0.0 + 0.0 + + + 22 + 0.0 + 0.0 + + + 39 + 0.0 + 0.0 + + + 38 + 0.0 + 0.0 + + + 25 + 15.132745950421556 + 169.0 + + + 27 + 171.0 + 261.0 + + + 35 + 285.7588368062799 + 285.7588368062799 + + + 37 + 291.5897887011252 + 383.0 + + + 38 + 385.0 + 479.0 + + + 39 + 484.0 + 567.0 + + + 36 + 572.0 + 665.0 + + + 34 + 668.0 + 751.0 + + + 22 + 772.1896201004171 + 812.0 + + + 21 + 814.0 + 914.0 + + 924.1980390271856 + + + + + diff --git a/jsprit-core/src/test/resources/pdp.xml b/jsprit-core/src/test/resources/pdp.xml new file mode 100644 index 00000000..3f3800f1 --- /dev/null +++ b/jsprit-core/src/test/resources/pdp.xml @@ -0,0 +1,511 @@ + + + + INFINITE + HOMOGENEOUS + + + + v + t + + [x=10.0][y=10.0] + + + + 0.0 + 500.0 + + + + + + t + 5 + + 0.0 + 1.0 + + + + + + + + [x=77.0][y=23.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=20.0][y=39.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=67.0][y=1.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=41.0][y=7.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=57.0][y=96.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=36.0][y=97.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=28.0][y=84.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=93.0][y=44.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=3.0][y=36.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=77.0][y=6.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=45.0][y=11.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=63.0][y=80.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=4.0][y=84.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=93.0][y=23.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=80.0][y=9.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=19.0][y=76.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=8.0][y=23.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=84.0][y=33.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=26.0][y=89.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=48.0][y=55.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=78.0][y=43.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=66.0][y=44.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=73.0][y=38.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=89.0][y=40.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=22.0][y=62.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=6.0][y=60.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=56.0][y=17.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=84.0][y=71.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=26.0][y=60.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=37.0][y=25.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=96.0][y=35.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=93.0][y=20.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=1.0][y=18.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=56.0][y=33.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=93.0][y=44.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=5.0][y=90.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + [x=31.0][y=63.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + + [x=12.0][y=56.0] + + 0.0 + + + 0.0 + 1.7976931348623157E308 + + + + 1 + + + + diff --git a/jsprit-examples/src/main/java/examples/CVRPExample.java b/jsprit-examples/src/main/java/jsprit/examples/CVRPExample.java similarity index 87% rename from jsprit-examples/src/main/java/examples/CVRPExample.java rename to jsprit-examples/src/main/java/jsprit/examples/CVRPExample.java index 56120f84..d6bd6444 100644 --- a/jsprit-examples/src/main/java/examples/CVRPExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/CVRPExample.java @@ -14,11 +14,11 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; -import readers.ChristofidesReader; -import basics.VehicleRoutingProblem; -import basics.io.VrpXMLWriter; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.instance.reader.ChristofidesReader; public class CVRPExample { diff --git a/jsprit-examples/src/main/java/examples/CompareAlgorithmExample.java b/jsprit-examples/src/main/java/jsprit/examples/CompareAlgorithmExample.java similarity index 81% rename from jsprit-examples/src/main/java/examples/CompareAlgorithmExample.java rename to jsprit-examples/src/main/java/jsprit/examples/CompareAlgorithmExample.java index 50a53adc..ab7860b2 100644 --- a/jsprit-examples/src/main/java/examples/CompareAlgorithmExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/CompareAlgorithmExample.java @@ -14,18 +14,20 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; -import readers.SolomonReader; -import algorithms.GreedySchrimpfFactory; -import algorithms.SchrimpfFactory; -import analysis.AlgorithmSearchProgressChartListener; -import analysis.StopWatch; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.algo.VehicleRoutingAlgorithmListeners.Priority; +import jsprit.analysis.toolbox.AlgorithmSearchProgressChartListener; +import jsprit.analysis.toolbox.StopWatch; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.GreedySchrimpfFactory; +import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.Priority; +import jsprit.core.algorithm.termination.IterationWithoutImprovementTermination; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.instance.reader.SolomonReader; + public class CompareAlgorithmExample { @@ -82,7 +84,7 @@ public class CompareAlgorithmExample { vra_greedy.searchSolutions(); - vra_greedy.setPrematureBreak(40); + vra_greedy.setPrematureAlgorithmTermination(new IterationWithoutImprovementTermination(40)); vra_greedy.searchSolutions(); diff --git a/jsprit-examples/src/main/java/examples/ConfigureAlgorithmInCodeInsteadOfPerXml.java b/jsprit-examples/src/main/java/jsprit/examples/ConfigureAlgorithmInCodeInsteadOfPerXml.java similarity index 84% rename from jsprit-examples/src/main/java/examples/ConfigureAlgorithmInCodeInsteadOfPerXml.java rename to jsprit-examples/src/main/java/jsprit/examples/ConfigureAlgorithmInCodeInsteadOfPerXml.java index 96497237..e8b53de6 100644 --- a/jsprit-examples/src/main/java/examples/ConfigureAlgorithmInCodeInsteadOfPerXml.java +++ b/jsprit-examples/src/main/java/jsprit/examples/ConfigureAlgorithmInCodeInsteadOfPerXml.java @@ -14,30 +14,30 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.AlgorithmConfig; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + import org.apache.commons.configuration.XMLConfiguration; -import util.Coordinate; -import util.Solutions; -import algorithms.VehicleRoutingAlgorithms; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.io.AlgorithmConfig; -import basics.io.VrpXMLWriter; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleImpl.Builder; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; public class ConfigureAlgorithmInCodeInsteadOfPerXml { @@ -97,11 +97,11 @@ public class ConfigureAlgorithmInCodeInsteadOfPerXml { /* * get the best */ - VehicleRoutingProblemSolution bestSolution = Solutions.getBest(solutions); + VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions); new VrpXMLWriter(problem, solutions).write("output/problem-with-solution.xml"); - SolutionPrinter.print(bestSolution,Print.VERBOSE); + SolutionPrinter.print(bestSolution); /* * plot diff --git a/jsprit-examples/src/main/java/examples/CostMatrixExample.java b/jsprit-examples/src/main/java/jsprit/examples/CostMatrixExample.java similarity index 78% rename from jsprit-examples/src/main/java/examples/CostMatrixExample.java rename to jsprit-examples/src/main/java/jsprit/examples/CostMatrixExample.java index c0893047..196ea236 100644 --- a/jsprit-examples/src/main/java/examples/CostMatrixExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/CostMatrixExample.java @@ -14,28 +14,27 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import util.Solutions; -import util.VehicleRoutingTransportCostsMatrix; -import algorithms.GreedySchrimpfFactory; -import algorithms.VehicleRoutingAlgorithms; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Solutions; +import jsprit.core.util.VehicleRoutingTransportCostsMatrix; + /** * Illustrates how you can use jsprit with an already compiled distance and time matrix. @@ -110,9 +109,9 @@ public class CostMatrixExample { Collection solutions = vra.searchSolutions(); - SolutionPrinter.print(Solutions.getBest(solutions), Print.VERBOSE); + SolutionPrinter.print(Solutions.bestOf(solutions)); - SolutionPlotter.plotSolutionAsPNG(vrp, Solutions.getBest(solutions), "output/yo.png", "po"); + SolutionPlotter.plotSolutionAsPNG(vrp, Solutions.bestOf(solutions), "output/yo.png", "po"); } diff --git a/jsprit-examples/src/main/java/examples/MultipleDepotExample.java b/jsprit-examples/src/main/java/jsprit/examples/MultipleDepotExample.java similarity index 76% rename from jsprit-examples/src/main/java/examples/MultipleDepotExample.java rename to jsprit-examples/src/main/java/jsprit/examples/MultipleDepotExample.java index 1ec0017c..d6c0e35e 100644 --- a/jsprit-examples/src/main/java/examples/MultipleDepotExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/MultipleDepotExample.java @@ -14,28 +14,29 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Arrays; import java.util.Collection; -import util.Coordinate; -import util.Solutions; -import algorithms.VehicleRoutingAlgorithms; -import analysis.AlgorithmSearchProgressChartListener; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.StopWatch; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.algo.VehicleRoutingAlgorithmListeners.Priority; -import basics.io.VrpXMLReader; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleTypeImpl; +import jsprit.analysis.toolbox.AlgorithmSearchProgressChartListener; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.analysis.toolbox.StopWatch; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.Priority; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + public class MultipleDepotExample { @@ -109,8 +110,8 @@ public class MultipleDepotExample { vra.getAlgorithmListeners().addListener(new AlgorithmSearchProgressChartListener("output/progress.png")); Collection solutions = vra.searchSolutions(); - SolutionPrinter.print(Solutions.getBest(solutions)); - SolutionPlotter.plotSolutionAsPNG(vrp, Solutions.getBest(solutions), "output/p01_solution.png", "p01"); + SolutionPrinter.print(Solutions.bestOf(solutions)); + SolutionPlotter.plotSolutionAsPNG(vrp, Solutions.bestOf(solutions), "output/p01_solution.png", "p01"); } diff --git a/jsprit-examples/src/main/java/examples/MultipleDepotExampleWithPenaltyVehicles.java b/jsprit-examples/src/main/java/jsprit/examples/MultipleDepotExampleWithPenaltyVehicles.java similarity index 79% rename from jsprit-examples/src/main/java/examples/MultipleDepotExampleWithPenaltyVehicles.java rename to jsprit-examples/src/main/java/jsprit/examples/MultipleDepotExampleWithPenaltyVehicles.java index 14a0db9f..306128eb 100644 --- a/jsprit-examples/src/main/java/examples/MultipleDepotExampleWithPenaltyVehicles.java +++ b/jsprit-examples/src/main/java/jsprit/examples/MultipleDepotExampleWithPenaltyVehicles.java @@ -14,31 +14,31 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Arrays; import java.util.Collection; -import util.Coordinate; -import util.Solutions; -import algorithms.VehicleRoutingAlgorithms; -import analysis.AlgorithmSearchProgressChartListener; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import analysis.StopWatch; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.algo.VehicleRoutingAlgorithmListeners.Priority; -import basics.io.VrpXMLReader; -import basics.route.PenaltyVehicleType; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; +import jsprit.analysis.toolbox.AlgorithmSearchProgressChartListener; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.analysis.toolbox.StopWatch; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.listener.VehicleRoutingAlgorithmListeners.Priority; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.PenaltyVehicleType; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + public class MultipleDepotExampleWithPenaltyVehicles { @@ -137,8 +137,8 @@ public class MultipleDepotExampleWithPenaltyVehicles { vra.getAlgorithmListeners().addListener(new AlgorithmSearchProgressChartListener("output/progress.png")); Collection solutions = vra.searchSolutions(); - SolutionPrinter.print(Solutions.getBest(solutions),Print.VERBOSE); - SolutionPlotter.plotSolutionAsPNG(vrp, Solutions.getBest(solutions), "output/p08_solution.png", "p08"); + SolutionPrinter.print(Solutions.bestOf(solutions)); + SolutionPlotter.plotSolutionAsPNG(vrp, Solutions.bestOf(solutions), "output/p08_solution.png", "p08"); } diff --git a/jsprit-examples/src/main/java/examples/PickupAndDeliveryExample.java b/jsprit-examples/src/main/java/jsprit/examples/PickupAndDeliveryExample.java similarity index 82% rename from jsprit-examples/src/main/java/examples/PickupAndDeliveryExample.java rename to jsprit-examples/src/main/java/jsprit/examples/PickupAndDeliveryExample.java index 436c6c28..30399f20 100644 --- a/jsprit-examples/src/main/java/examples/PickupAndDeliveryExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/PickupAndDeliveryExample.java @@ -14,24 +14,23 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import algorithms.VehicleRoutingAlgorithms; -import algorithms.selectors.SelectBest; -import analysis.AlgorithmSearchProgressChartListener; -import analysis.Plotter; -import analysis.Plotter.Label; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.VehicleRoutingProblem.Constraint; -import basics.io.VrpXMLReader; +import jsprit.analysis.toolbox.AlgorithmSearchProgressChartListener; +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.Plotter.Label; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + public class PickupAndDeliveryExample { @@ -91,7 +90,7 @@ public class PickupAndDeliveryExample { /* * print solution */ - SolutionPrinter.print(solution, Print.VERBOSE); + SolutionPrinter.print(solution); /* * Plot solution. diff --git a/jsprit-examples/src/main/java/examples/PickupAndDeliveryExample2.java b/jsprit-examples/src/main/java/jsprit/examples/PickupAndDeliveryExample2.java similarity index 80% rename from jsprit-examples/src/main/java/examples/PickupAndDeliveryExample2.java rename to jsprit-examples/src/main/java/jsprit/examples/PickupAndDeliveryExample2.java index 8d5929c9..9b0a1292 100644 --- a/jsprit-examples/src/main/java/examples/PickupAndDeliveryExample2.java +++ b/jsprit-examples/src/main/java/jsprit/examples/PickupAndDeliveryExample2.java @@ -14,29 +14,33 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import algorithms.VehicleRoutingAlgorithms; -import algorithms.selectors.SelectBest; -import analysis.AlgorithmSearchProgressChartListener; -import analysis.Plotter; -import analysis.Plotter.Label; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.VehicleRoutingProblem.Constraint; -import basics.io.VrpXMLReader; +import jsprit.analysis.toolbox.AlgorithmSearchProgressChartListener; +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.Plotter.Label; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; + public class PickupAndDeliveryExample2 { public static void main(String[] args) { + Logger.getRootLogger().setLevel(Level.INFO); + /* * some preparation - create output folder */ @@ -91,7 +95,7 @@ public class PickupAndDeliveryExample2 { /* * print solution */ - SolutionPrinter.print(solution, Print.VERBOSE); + SolutionPrinter.print(solution); /* * Plot solution. diff --git a/jsprit-examples/src/main/java/examples/RefuseCollectionExample.java b/jsprit-examples/src/main/java/jsprit/examples/RefuseCollectionExample.java similarity index 86% rename from jsprit-examples/src/main/java/examples/RefuseCollectionExample.java rename to jsprit-examples/src/main/java/jsprit/examples/RefuseCollectionExample.java index eb31e006..ec7843ce 100644 --- a/jsprit-examples/src/main/java/examples/RefuseCollectionExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/RefuseCollectionExample.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.BufferedReader; import java.io.File; @@ -22,26 +22,26 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Collection; -import java.util.HashMap; import java.util.Map; -import util.Solutions; -import util.VehicleRoutingTransportCostsMatrix; -import util.VehicleRoutingTransportCostsMatrix.Builder; -import algorithms.GreedySchrimpfFactory; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.VehicleRoutingProblemSolution; -import basics.costs.VehicleRoutingTransportCosts; -import basics.io.VrpXMLWriter; -import basics.route.Driver; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleTypeImpl; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.GreedySchrimpfFactory; +import jsprit.core.algorithm.termination.IterationWithoutImprovementTermination; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Solutions; +import jsprit.core.util.VehicleRoutingTransportCostsMatrix; +import jsprit.core.util.VehicleRoutingTransportCostsMatrix.Builder; + /** @@ -197,10 +197,10 @@ public class RefuseCollectionExample { VehicleRoutingProblem vrp = vrpBuilder.build(); VehicleRoutingAlgorithm vra = new GreedySchrimpfFactory().createAlgorithm(vrp); - vra.setPrematureBreak(100); + vra.setPrematureAlgorithmTermination(new IterationWithoutImprovementTermination(100)); Collection solutions = vra.searchSolutions(); - SolutionPrinter.print(Solutions.getBest(solutions),Print.VERBOSE); + SolutionPrinter.print(Solutions.bestOf(solutions)); new VrpXMLWriter(vrp, solutions).write("output/refuseCollectionExampleSolution.xml"); diff --git a/jsprit-examples/src/main/java/examples/SimplePickupAndDeliveryExample.java b/jsprit-examples/src/main/java/jsprit/examples/SimpleDepotBoundedPickupAndDeliveryExample.java similarity index 77% rename from jsprit-examples/src/main/java/examples/SimplePickupAndDeliveryExample.java rename to jsprit-examples/src/main/java/jsprit/examples/SimpleDepotBoundedPickupAndDeliveryExample.java index 1e357090..be7f8d51 100644 --- a/jsprit-examples/src/main/java/examples/SimplePickupAndDeliveryExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SimpleDepotBoundedPickupAndDeliveryExample.java @@ -14,34 +14,31 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import util.Coordinate; -import util.Solutions; -import algorithms.SchrimpfFactory; -import analysis.Plotter; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.Plotter.Label; -import analysis.SolutionPrinter.Print; -import basics.Delivery; -import basics.Pickup; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.Constraint; -import basics.VehicleRoutingProblemSolution; -import basics.io.VrpXMLWriter; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleImpl.Builder; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.Plotter.Label; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; -public class SimplePickupAndDeliveryExample { + +public class SimpleDepotBoundedPickupAndDeliveryExample { public static void main(String[] args) { /* @@ -99,11 +96,11 @@ public class SimplePickupAndDeliveryExample { /* * get the best */ - VehicleRoutingProblemSolution bestSolution = Solutions.getBest(solutions); + VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions); new VrpXMLWriter(problem, solutions).write("output/problem-with-solution.xml"); - SolutionPrinter.print(bestSolution,Print.VERBOSE); + SolutionPrinter.print(bestSolution); /* * plot diff --git a/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryExample.java b/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryExample.java new file mode 100644 index 00000000..ff23e046 --- /dev/null +++ b/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryExample.java @@ -0,0 +1,122 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.examples; + +import java.io.File; +import java.util.Arrays; +import java.util.Collection; + +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + + +public class SimpleEnRoutePickupAndDeliveryExample { + + public static void main(String[] args) { + /* + * some preparation - create output folder + */ + File dir = new File("output"); + // if the directory does not exist, create it + if (!dir.exists()){ + System.out.println("creating directory ./output"); + boolean result = dir.mkdir(); + if(result) System.out.println("./output created"); + } + + /* + * get a vehicle type-builder and build a type with the typeId "vehicleType" and a capacity of 2 + */ + VehicleTypeImpl.Builder vehicleTypeBuilder = VehicleTypeImpl.Builder.newInstance("vehicleType", 2); + VehicleType vehicleType = vehicleTypeBuilder.build(); + + /* + * get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType" + */ + Builder vehicleBuilder = VehicleImpl.Builder.newInstance("vehicle"); + vehicleBuilder.setLocationCoord(Coordinate.newInstance(10, 10)); + vehicleBuilder.setType(vehicleType); + Vehicle vehicle = vehicleBuilder.build(); + + /* + * build services at the required locations, each with a capacity-demand of 1. + * 4 shipments + * 1: (5,7)->(6,9) + * 2: (5,13)->(6,11) + * 3: (15,7)->(14,9) + * 4: (15,13)->(14,11) + */ + + Shipment shipment1 = Shipment.Builder.newInstance("1", 1).setPickupCoord(Coordinate.newInstance(5, 7)).setDeliveryCoord(Coordinate.newInstance(6, 9)).build(); + Shipment shipment2 = Shipment.Builder.newInstance("2", 1).setPickupCoord(Coordinate.newInstance(5, 13)).setDeliveryCoord(Coordinate.newInstance(6, 11)).build(); + + Shipment shipment3 = Shipment.Builder.newInstance("3", 1).setPickupCoord(Coordinate.newInstance(15, 7)).setDeliveryCoord(Coordinate.newInstance(14, 9)).build(); + Shipment shipment4 = Shipment.Builder.newInstance("4", 1).setPickupCoord(Coordinate.newInstance(15, 13)).setDeliveryCoord(Coordinate.newInstance(14, 11)).build(); + + + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + vrpBuilder.addVehicle(vehicle); + vrpBuilder.addJob(shipment1).addJob(shipment2).addJob(shipment3).addJob(shipment4); + + VehicleRoutingProblem problem = vrpBuilder.build(); + + /* + * get the algorithm out-of-the-box. + */ + VehicleRoutingAlgorithm algorithm = new SchrimpfFactory().createAlgorithm(problem); + + /* + * and search a solution + */ + Collection solutions = algorithm.searchSolutions(); + + /* + * get the best + */ + VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions); + + new VrpXMLWriter(problem, solutions).write("output/shipment-problem-with-solution.xml"); + + SolutionPrinter.print(bestSolution); + + /* + * plot + */ + Plotter problemPlotter = new Plotter(problem); + problemPlotter.plotShipments(true); + problemPlotter.plot("output/simpleEnRoutePickupAndDeliveryExample_problem.png", "en-route pickup and delivery"); + + Plotter solutionPlotter = new Plotter(problem,Arrays.asList(Solutions.bestOf(solutions).getRoutes().iterator().next())); + solutionPlotter.plotShipments(true); + solutionPlotter.plot("output/simpleEnRoutePickupAndDeliveryExample_solution.png", "en-route pickup and delivery"); + + } + +} diff --git a/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryWithDepotBoundedDeliveriesExample.java b/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryWithDepotBoundedDeliveriesExample.java new file mode 100644 index 00000000..69e24dc0 --- /dev/null +++ b/jsprit-examples/src/main/java/jsprit/examples/SimpleEnRoutePickupAndDeliveryWithDepotBoundedDeliveriesExample.java @@ -0,0 +1,137 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.examples; + +import java.io.File; +import java.util.Collection; + +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Constraint; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + + +public class SimpleEnRoutePickupAndDeliveryWithDepotBoundedDeliveriesExample { + + public static void main(String[] args) { + /* + * some preparation - create output folder + */ + File dir = new File("output"); + // if the directory does not exist, create it + if (!dir.exists()){ + System.out.println("creating directory ./output"); + boolean result = dir.mkdir(); + if(result) System.out.println("./output created"); + } + + /* + * get a vehicle type-builder and build a type with the typeId "vehicleType" and a capacity of 2 + */ + VehicleTypeImpl.Builder vehicleTypeBuilder = VehicleTypeImpl.Builder.newInstance("vehicleType", 2); + VehicleType vehicleType = vehicleTypeBuilder.build(); + + /* + * get a vehicle-builder and build a vehicle located at (10,10) with type "vehicleType" + */ + Builder vehicleBuilder = VehicleImpl.Builder.newInstance("vehicle"); + vehicleBuilder.setLocationCoord(Coordinate.newInstance(10, 10)); + vehicleBuilder.setType(vehicleType); + Vehicle vehicle = vehicleBuilder.build(); + + /* + * build shipments at the required locations, each with a capacity-demand of 1. + * 4 shipments + * 1: (5,7)->(6,9) + * 2: (5,13)->(6,11) + * 3: (15,7)->(14,9) + * 4: (15,13)->(14,11) + */ + + Shipment shipment1 = Shipment.Builder.newInstance("1", 1).setPickupCoord(Coordinate.newInstance(5, 7)).setDeliveryCoord(Coordinate.newInstance(6, 9)).build(); + Shipment shipment2 = Shipment.Builder.newInstance("2", 1).setPickupCoord(Coordinate.newInstance(5, 13)).setDeliveryCoord(Coordinate.newInstance(6, 11)).build(); + + Shipment shipment3 = Shipment.Builder.newInstance("3", 1).setPickupCoord(Coordinate.newInstance(15, 7)).setDeliveryCoord(Coordinate.newInstance(14, 9)).build(); + Shipment shipment4 = Shipment.Builder.newInstance("4", 1).setPickupCoord(Coordinate.newInstance(15, 13)).setDeliveryCoord(Coordinate.newInstance(14, 11)).build(); +// + /* + * build deliveries, (implicitly picked up in the depot) + * 1: (4,8) + * 2: (4,12) + * 3: (16,8) + * 4: (16,12) + */ + Delivery delivery1 = (Delivery) Delivery.Builder.newInstance("5", 1).setCoord(Coordinate.newInstance(4, 8)).build(); + Delivery delivery2 = (Delivery) Delivery.Builder.newInstance("6", 1).setCoord(Coordinate.newInstance(4, 12)).build(); + Delivery delivery3 = (Delivery) Delivery.Builder.newInstance("7", 1).setCoord(Coordinate.newInstance(16, 8)).build(); + Delivery delivery4 = (Delivery) Delivery.Builder.newInstance("8", 1).setCoord(Coordinate.newInstance(16, 12)).build(); + + VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); + vrpBuilder.addVehicle(vehicle); + vrpBuilder.addJob(shipment1).addJob(shipment2).addJob(shipment3).addJob(shipment4) + .addJob(delivery1).addJob(delivery2).addJob(delivery3).addJob(delivery4).build(); + + vrpBuilder.addProblemConstraint(Constraint.DELIVERIES_FIRST); + + VehicleRoutingProblem problem = vrpBuilder.build(); + + /* + * get the algorithm out-of-the-box. + */ + VehicleRoutingAlgorithm algorithm = new SchrimpfFactory().createAlgorithm(problem); + + /* + * and search a solution + */ + Collection solutions = algorithm.searchSolutions(); + + /* + * get the best + */ + VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions); + + new VrpXMLWriter(problem, solutions).write("output/mixed-shipments-services-problem-with-solution.xml"); + + SolutionPrinter.print(bestSolution); + + /* + * plot + */ + Plotter problemPlotter = new Plotter(problem); + problemPlotter.plotShipments(true); + problemPlotter.plot("output/simpleMixedEnRoutePickupAndDeliveryExample_problem.png", "en-route pd and depot bounded deliveries"); + + Plotter solutionPlotter = new Plotter(problem,Solutions.bestOf(solutions)); + solutionPlotter.plotShipments(true); + solutionPlotter.plot("output/simpleMixedEnRoutePickupAndDeliveryExample_solution.png", "en-route pd and depot bounded deliveries"); + + } + +} diff --git a/jsprit-examples/src/main/java/examples/SimpleExample.java b/jsprit-examples/src/main/java/jsprit/examples/SimpleExample.java similarity index 78% rename from jsprit-examples/src/main/java/examples/SimpleExample.java rename to jsprit-examples/src/main/java/jsprit/examples/SimpleExample.java index f24d15c1..66353b22 100644 --- a/jsprit-examples/src/main/java/examples/SimpleExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SimpleExample.java @@ -14,27 +14,27 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import util.Coordinate; -import util.Solutions; -import algorithms.SchrimpfFactory; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.io.VrpXMLWriter; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleImpl.Builder; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + public class SimpleExample { @@ -93,11 +93,11 @@ public class SimpleExample { /* * get the best */ - VehicleRoutingProblemSolution bestSolution = Solutions.getBest(solutions); + VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions); new VrpXMLWriter(problem, solutions).write("output/problem-with-solution.xml"); - SolutionPrinter.print(bestSolution,Print.VERBOSE); + SolutionPrinter.print(bestSolution); /* * plot diff --git a/jsprit-examples/src/main/java/examples/SimpleVRPWithBackhaulsExample.java b/jsprit-examples/src/main/java/jsprit/examples/SimpleVRPWithBackhaulsExample.java similarity index 75% rename from jsprit-examples/src/main/java/examples/SimpleVRPWithBackhaulsExample.java rename to jsprit-examples/src/main/java/jsprit/examples/SimpleVRPWithBackhaulsExample.java index 57d547db..4e41846c 100644 --- a/jsprit-examples/src/main/java/examples/SimpleVRPWithBackhaulsExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SimpleVRPWithBackhaulsExample.java @@ -14,32 +14,30 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import util.Coordinate; -import util.Solutions; -import algorithms.SchrimpfFactory; -import analysis.Plotter; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.Plotter.Label; -import analysis.SolutionPrinter.Print; -import basics.Delivery; -import basics.Pickup; -import basics.Service; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.Constraint; -import basics.VehicleRoutingProblemSolution; -import basics.io.VrpXMLWriter; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleImpl.Builder; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.Plotter.Label; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.box.SchrimpfFactory; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Constraint; +import jsprit.core.problem.io.VrpXMLWriter; +import jsprit.core.problem.job.Delivery; +import jsprit.core.problem.job.Pickup; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleType; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Solutions; + public class SimpleVRPWithBackhaulsExample { @@ -81,7 +79,8 @@ public class SimpleVRPWithBackhaulsExample { VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance(); vrpBuilder.addVehicle(vehicle); - vrpBuilder.addService(pickup1).addService(pickup2).addService(delivery1).addService(delivery2); + + vrpBuilder.addJob(pickup1).addJob(pickup2).addJob(delivery1).addJob(delivery2); // vrpBuilder.addProblemConstraint(Constraint.DELIVERIES_FIRST); @@ -101,11 +100,11 @@ public class SimpleVRPWithBackhaulsExample { /* * get the best */ - VehicleRoutingProblemSolution bestSolution = Solutions.getBest(solutions); + VehicleRoutingProblemSolution bestSolution = Solutions.bestOf(solutions); new VrpXMLWriter(problem, solutions).write("output/problem-with-solution.xml"); - SolutionPrinter.print(bestSolution,Print.VERBOSE); + SolutionPrinter.print(bestSolution); /* * plot diff --git a/jsprit-examples/src/main/java/examples/SolomonExample.java b/jsprit-examples/src/main/java/jsprit/examples/SolomonExample.java similarity index 84% rename from jsprit-examples/src/main/java/examples/SolomonExample.java rename to jsprit-examples/src/main/java/jsprit/examples/SolomonExample.java index 013dc833..9aaa823c 100644 --- a/jsprit-examples/src/main/java/examples/SolomonExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SolomonExample.java @@ -14,20 +14,20 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import readers.SolomonReader; -import algorithms.VehicleRoutingAlgorithms; -import algorithms.selectors.SelectBest; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.instance.reader.SolomonReader; + public class SolomonExample { @@ -69,7 +69,7 @@ public class SolomonExample { */ // VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp); VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, "input/algorithmConfig_solomon.xml"); - vra.setPrematureBreak(100); +// vra.setPrematureBreak(100); // vra.getAlgorithmListeners().addListener(new AlgorithmSearchProgressChartListener("output/sol_progress.png")); /* * Solve the problem. @@ -86,7 +86,7 @@ public class SolomonExample { /* * print solution */ - SolutionPrinter.print(solution, Print.VERBOSE); + SolutionPrinter.print(solution); /* * Plot solution. diff --git a/jsprit-examples/src/main/java/examples/SolomonR101Example.java b/jsprit-examples/src/main/java/jsprit/examples/SolomonR101Example.java similarity index 85% rename from jsprit-examples/src/main/java/examples/SolomonR101Example.java rename to jsprit-examples/src/main/java/jsprit/examples/SolomonR101Example.java index d08b4a61..f89d2171 100644 --- a/jsprit-examples/src/main/java/examples/SolomonR101Example.java +++ b/jsprit-examples/src/main/java/jsprit/examples/SolomonR101Example.java @@ -14,20 +14,20 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import readers.SolomonReader; -import algorithms.VehicleRoutingAlgorithms; -import algorithms.selectors.SelectBest; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; +import jsprit.instance.reader.SolomonReader; + public class SolomonR101Example { @@ -86,7 +86,7 @@ public class SolomonR101Example { /* * print solution */ - SolutionPrinter.print(solution, Print.VERBOSE); + SolutionPrinter.print(solution); /* * Plot solution. diff --git a/jsprit-examples/src/main/java/examples/VRPWithBackhaulsExample.java b/jsprit-examples/src/main/java/jsprit/examples/VRPWithBackhaulsExample.java similarity index 81% rename from jsprit-examples/src/main/java/examples/VRPWithBackhaulsExample.java rename to jsprit-examples/src/main/java/jsprit/examples/VRPWithBackhaulsExample.java index ceb1c62c..5105b27e 100644 --- a/jsprit-examples/src/main/java/examples/VRPWithBackhaulsExample.java +++ b/jsprit-examples/src/main/java/jsprit/examples/VRPWithBackhaulsExample.java @@ -14,28 +14,23 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import algorithms.VehicleRoutingAlgorithms; -import algorithms.selectors.SelectBest; -import analysis.AlgorithmSearchProgressChartListener; -import analysis.Plotter; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.Plotter.Label; -import analysis.SolutionPrinter.Print; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.VehicleRoutingProblem.Constraint; -import basics.costs.VehicleRoutingActivityCosts; -import basics.io.VrpXMLReader; -import basics.route.Driver; -import basics.route.TourActivity; -import basics.route.Vehicle; +import jsprit.analysis.toolbox.AlgorithmSearchProgressChartListener; +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.Plotter.Label; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Constraint; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + public class VRPWithBackhaulsExample { @@ -96,7 +91,7 @@ public class VRPWithBackhaulsExample { /* * print solution */ - SolutionPrinter.print(solution, Print.VERBOSE); + SolutionPrinter.print(solution); /* * Plot solution. diff --git a/jsprit-examples/src/main/java/examples/VRPWithBackhaulsExample2.java b/jsprit-examples/src/main/java/jsprit/examples/VRPWithBackhaulsExample2.java similarity index 82% rename from jsprit-examples/src/main/java/examples/VRPWithBackhaulsExample2.java rename to jsprit-examples/src/main/java/jsprit/examples/VRPWithBackhaulsExample2.java index 598b2431..8e611a48 100644 --- a/jsprit-examples/src/main/java/examples/VRPWithBackhaulsExample2.java +++ b/jsprit-examples/src/main/java/jsprit/examples/VRPWithBackhaulsExample2.java @@ -14,24 +14,23 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package examples; +package jsprit.examples; import java.io.File; import java.util.Collection; -import algorithms.VehicleRoutingAlgorithms; -import algorithms.selectors.SelectBest; -import analysis.AlgorithmSearchProgressChartListener; -import analysis.Plotter; -import analysis.Plotter.Label; -import analysis.SolutionPlotter; -import analysis.SolutionPrinter; -import analysis.SolutionPrinter.Print; -import basics.VehicleRoutingAlgorithm; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; -import basics.VehicleRoutingProblem.Constraint; -import basics.io.VrpXMLReader; +import jsprit.analysis.toolbox.Plotter; +import jsprit.analysis.toolbox.Plotter.Label; +import jsprit.analysis.toolbox.SolutionPlotter; +import jsprit.analysis.toolbox.SolutionPrinter; +import jsprit.core.algorithm.VehicleRoutingAlgorithm; +import jsprit.core.algorithm.io.VehicleRoutingAlgorithms; +import jsprit.core.algorithm.selector.SelectBest; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Constraint; +import jsprit.core.problem.io.VrpXMLReader; +import jsprit.core.problem.solution.VehicleRoutingProblemSolution; + public class VRPWithBackhaulsExample2 { @@ -94,7 +93,7 @@ public class VRPWithBackhaulsExample2 { /* * print solution */ - SolutionPrinter.print(solution, Print.VERBOSE); + SolutionPrinter.print(solution); /* * Plot solution. diff --git a/jsprit-instances/instances/lilim/1000/LC1101.txt b/jsprit-instances/instances/lilim/1000/LC1101.txt new file mode 100644 index 00000000..3e573837 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1101.txt @@ -0,0 +1,1056 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 10 200 270 90 0 496 +2 5 297 10 955 1017 90 0 62 +3 355 177 20 194 245 90 0 193 +4 78 346 30 355 403 90 0 919 +5 286 159 -20 530 597 90 774 0 +6 322 465 10 226 291 90 0 268 +7 393 408 -20 630 708 90 451 0 +8 89 216 -30 495 562 90 129 0 +9 76 345 30 539 586 90 0 105 +10 410 285 20 499 556 90 0 273 +11 472 189 30 385 440 90 0 733 +12 270 49 -30 925 970 90 618 0 +13 219 325 -20 520 563 90 855 0 +14 437 12 20 557 613 90 0 700 +15 418 218 20 974 1030 0 0 1014 +16 20 488 -10 754 820 90 489 0 +17 77 347 -10 436 505 90 380 0 +18 73 346 10 726 772 90 0 97 +19 480 455 -10 1123 1179 90 302 0 +20 129 292 -20 552 610 90 329 0 +21 337 257 -20 805 863 90 796 0 +22 237 254 -10 629 688 90 438 0 +23 131 220 -10 749 810 90 298 0 +24 417 417 -20 954 1020 90 925 0 +25 287 143 10 748 793 0 0 1046 +26 379 80 -30 737 789 90 173 0 +27 87 285 -20 709 764 90 986 0 +28 374 489 20 269 339 90 0 775 +29 440 247 -20 717 779 90 112 0 +30 281 137 10 370 416 90 0 136 +31 379 196 20 665 714 90 0 41 +32 297 102 -10 214 281 90 941 0 +33 39 76 10 328 399 90 0 709 +34 35 306 20 369 440 90 0 912 +35 435 68 10 259 314 90 0 868 +36 245 251 10 60 130 90 0 311 +37 409 88 -10 655 715 90 582 0 +38 273 55 20 196 246 90 0 192 +39 163 340 30 468 513 90 0 782 +40 129 223 20 274 340 90 0 610 +41 371 200 -20 843 916 90 31 0 +42 357 26 -20 1162 1202 90 659 0 +43 470 473 -20 1221 1270 90 790 0 +44 77 344 10 254 319 90 0 89 +45 478 461 10 462 529 90 0 575 +46 128 291 10 639 706 90 0 689 +47 111 113 10 632 694 90 0 603 +48 164 21 20 578 639 0 0 1019 +49 21 485 30 487 540 90 0 490 +50 108 26 10 423 491 90 0 822 +51 424 286 10 517 571 90 0 848 +52 200 270 20 208 260 90 0 140 +53 7 300 -20 1056 1104 90 407 0 +54 433 31 10 285 333 90 0 135 +55 420 295 -10 976 1044 90 141 0 +56 451 367 -20 1134 1195 90 580 0 +57 118 157 -20 403 465 90 562 0 +58 489 101 -20 1005 1066 90 787 0 +59 200 261 -10 945 1017 90 699 0 +60 476 483 -30 657 722 90 625 0 +61 30 302 10 572 632 90 0 744 +62 8 300 -10 1131 1211 90 2 0 +63 275 45 20 444 515 90 0 366 +64 238 46 40 735 784 90 0 589 +65 152 206 10 910 973 0 0 1047 +66 99 218 30 154 205 90 0 491 +67 393 410 -10 913 982 90 427 0 +68 480 460 20 549 627 90 0 187 +69 337 256 20 154 201 90 0 566 +70 389 300 -20 293 364 90 231 0 +71 90 237 -20 1229 1284 90 723 0 +72 321 280 30 143 194 90 0 588 +73 417 218 -20 1060 1126 90 293 0 +74 64 108 10 473 539 90 0 338 +75 57 432 -20 973 1033 90 570 0 +76 356 24 20 249 323 90 0 467 +77 143 207 30 267 326 90 0 186 +78 221 325 10 594 673 90 0 794 +79 22 483 30 325 389 90 0 387 +80 24 65 -20 904 976 90 271 0 +81 141 431 -20 362 423 90 106 0 +82 202 9 10 1225 1281 0 0 1018 +83 20 48 -10 1294 1358 90 367 0 +84 457 163 -30 284 346 90 194 0 +85 470 290 -10 835 895 90 950 0 +86 268 400 -10 869 928 90 621 0 +87 337 251 10 145 210 90 0 996 +88 366 20 10 874 927 90 0 110 +89 72 344 -10 618 695 90 44 0 +90 149 203 -10 553 597 90 417 0 +91 55 428 -20 511 568 90 571 0 +92 189 7 30 310 372 90 0 200 +93 397 18 -10 519 575 90 108 0 +94 481 122 30 607 653 90 0 843 +95 20 73 10 290 354 90 0 750 +96 54 430 20 610 652 90 0 275 +97 74 350 -10 915 955 90 18 0 +98 202 8 -20 1134 1190 90 683 0 +99 406 285 20 412 456 90 0 649 +100 460 2 -10 655 720 90 334 0 +101 441 244 -20 909 955 90 336 0 +102 1 293 10 492 554 90 0 934 +103 115 465 10 409 465 90 0 401 +104 422 420 20 490 545 0 0 1021 +105 75 347 -30 810 872 90 9 0 +106 141 428 20 208 266 90 0 81 +107 404 264 -40 395 462 90 623 0 +108 398 23 10 270 334 90 0 93 +109 148 211 -20 167 233 90 473 0 +110 362 22 -10 1050 1121 90 88 0 +111 479 127 -20 412 478 90 982 0 +112 443 246 20 536 593 90 0 29 +113 22 37 10 833 894 90 0 452 +114 65 100 10 763 811 90 0 234 +115 404 447 20 250 280 90 0 939 +116 102 264 10 148 215 90 0 840 +117 444 271 -10 633 688 90 829 0 +118 325 466 -10 670 717 90 980 0 +119 124 219 -10 571 615 90 441 0 +120 335 243 -30 428 495 90 997 0 +121 26 42 20 455 519 90 0 448 +122 113 106 20 198 260 90 0 705 +123 399 450 -20 971 1056 90 962 0 +124 146 439 10 642 707 90 0 160 +125 162 336 20 180 247 90 0 857 +126 2 295 30 774 828 0 0 1016 +127 122 35 10 305 376 90 0 235 +128 346 60 10 1027 1086 90 0 691 +129 93 213 30 409 457 90 0 8 +130 218 316 20 73 134 90 0 904 +131 116 156 10 495 557 90 0 374 +132 419 422 -10 575 647 90 785 0 +133 467 141 -40 574 637 90 175 0 +134 187 491 20 771 854 90 0 358 +135 433 25 -10 903 970 90 54 0 +136 286 137 -10 459 516 90 30 0 +137 370 82 -30 450 509 90 931 0 +138 132 290 10 818 898 90 0 225 +139 435 11 40 362 422 90 0 955 +140 206 261 -20 1050 1104 90 52 0 +141 428 291 10 698 764 90 0 55 +142 95 384 -10 719 785 90 505 0 +143 205 223 -10 491 544 90 643 0 +144 463 140 10 295 366 0 0 1017 +145 343 47 -10 738 805 90 909 0 +146 435 62 30 1156 1218 0 0 1010 +147 387 488 -20 987 1046 90 245 0 +148 121 157 10 220 279 90 0 560 +149 182 463 -20 372 440 90 208 0 +150 92 216 10 777 834 90 0 695 +151 370 83 20 357 419 90 0 340 +152 444 242 -10 441 501 90 254 0 +153 90 285 -10 981 1042 90 189 0 +154 446 64 -10 600 665 90 932 0 +155 312 264 20 131 179 90 0 873 +156 208 11 -20 1316 1382 90 764 0 +157 442 247 10 623 689 90 0 283 +158 140 431 30 280 324 90 0 385 +159 118 153 -20 949 1028 90 418 0 +160 134 428 -10 935 992 90 124 0 +161 91 235 -10 1140 1188 90 828 0 +162 406 257 -20 596 637 90 228 0 +163 377 76 20 638 699 0 0 1031 +164 474 96 30 271 327 90 0 877 +165 346 57 20 925 1002 90 0 668 +166 393 301 30 482 545 90 0 515 +167 412 214 10 165 215 90 0 542 +168 210 398 -20 592 647 90 761 0 +169 346 150 -40 948 998 90 294 0 +170 62 453 10 515 584 90 0 240 +171 437 61 -20 1063 1127 90 370 0 +172 87 96 30 744 810 90 0 569 +173 367 83 30 266 324 90 0 26 +174 91 268 -10 869 931 90 886 0 +175 459 145 40 233 291 90 0 133 +176 63 444 -30 1084 1146 90 349 0 +177 433 27 20 628 694 90 0 769 +178 60 454 -10 892 952 90 216 0 +179 478 99 10 617 675 90 0 450 +180 485 454 -20 842 890 90 295 0 +181 6 292 -10 316 360 90 937 0 +182 398 20 20 333 394 90 0 762 +183 248 251 20 2 63 90 0 663 +184 433 15 20 297 344 0 0 1004 +185 64 426 -10 1162 1223 90 400 0 +186 154 207 -30 1002 1066 90 77 0 +187 481 456 -20 1028 1091 90 68 0 +188 380 498 10 523 582 90 0 793 +189 88 286 10 795 859 90 0 153 +190 111 23 10 266 326 90 0 842 +191 199 187 20 433 490 90 0 979 +192 269 48 -20 823 889 90 38 0 +193 367 178 -20 570 620 90 3 0 +194 452 163 30 219 263 90 0 84 +195 431 28 -10 724 783 90 531 0 +196 8 116 -10 894 957 90 509 0 +197 233 47 20 356 415 90 0 214 +198 237 43 -20 631 702 90 648 0 +199 320 262 10 585 656 0 0 1051 +200 188 4 -30 413 455 90 92 0 +201 180 6 10 774 839 90 0 517 +202 328 466 30 847 906 0 0 1023 +203 393 12 -20 617 671 90 470 0 +204 409 90 20 569 617 90 0 696 +205 406 87 10 936 999 90 0 514 +206 394 407 -30 733 789 90 346 0 +207 358 183 -20 932 1005 90 670 0 +208 186 461 20 220 284 90 0 149 +209 38 72 30 420 496 90 0 805 +210 323 471 30 469 546 90 0 547 +211 224 192 10 215 274 90 0 359 +212 278 46 20 205 269 90 0 859 +213 272 403 30 494 555 90 0 252 +214 232 42 -20 545 599 90 197 0 +215 18 63 10 716 792 0 0 1005 +216 58 458 10 702 774 90 0 178 +217 416 417 -30 1057 1099 90 267 0 +218 205 230 30 203 263 0 0 1052 +219 65 453 30 423 490 90 0 237 +220 421 294 10 883 953 90 0 647 +221 434 245 -10 1377 1416 90 453 0 +222 2 116 -30 526 586 90 820 0 +223 411 421 -10 862 917 90 526 0 +224 315 260 10 223 278 90 0 312 +225 136 288 -10 1023 1063 90 138 0 +226 173 490 20 406 462 90 0 671 +227 90 232 10 682 732 90 0 850 +228 402 265 20 306 365 90 0 162 +229 361 14 -20 686 738 90 631 0 +230 348 147 -10 845 914 90 306 0 +231 385 295 20 142 182 90 0 70 +232 394 23 -20 1271 1326 90 601 0 +233 466 295 20 1033 1073 90 0 881 +234 71 103 -10 1402 1472 90 114 0 +235 125 29 -10 588 649 90 127 0 +236 25 65 -20 1005 1057 90 381 0 +237 58 449 -30 993 1042 90 219 0 +238 246 398 40 148 199 90 0 287 +239 423 294 10 790 863 0 0 1035 +240 59 459 -10 622 670 90 170 0 +241 348 145 20 763 813 90 0 540 +242 477 97 10 421 495 90 0 622 +243 307 102 40 602 647 90 0 327 +244 169 31 -20 387 447 90 984 0 +245 381 495 20 705 769 90 0 147 +246 95 234 -10 315 362 90 819 0 +247 22 33 -10 735 803 90 257 0 +248 435 268 -20 1100 1154 90 863 0 +249 135 293 30 360 430 90 0 945 +250 439 266 10 267 293 90 0 629 +251 269 402 -10 587 648 90 969 0 +252 267 400 -30 779 836 90 213 0 +253 473 196 -10 564 642 90 890 0 +254 445 237 10 349 402 90 0 152 +255 461 284 10 275 340 90 0 899 +256 167 339 -20 648 710 90 404 0 +257 26 43 10 365 427 90 0 247 +258 101 386 20 349 415 90 0 317 +259 342 54 -10 553 616 90 901 0 +260 243 399 -10 782 837 90 471 0 +261 288 44 20 636 711 0 0 1032 +262 274 48 10 368 405 90 0 632 +263 360 184 -20 846 906 90 456 0 +264 23 67 -10 1092 1157 90 557 0 +265 6 296 -10 863 926 90 720 0 +266 249 258 30 910 974 0 0 1054 +267 421 415 30 297 364 90 0 217 +268 319 468 -10 289 353 90 6 0 +269 50 438 -20 724 779 90 350 0 +270 440 61 -10 971 1032 90 825 0 +271 17 65 20 625 699 90 0 80 +272 323 118 20 304 367 90 0 321 +273 402 281 -20 886 924 90 10 0 +274 71 153 -10 746 816 90 786 0 +275 52 432 -20 789 843 90 96 0 +276 378 199 -30 761 804 90 987 0 +277 238 204 -10 566 634 90 667 0 +278 208 184 20 146 192 90 0 712 +279 376 195 -20 576 616 90 963 0 +280 473 475 -20 1124 1181 90 990 0 +281 215 395 -10 865 928 90 592 0 +282 123 222 -20 376 430 90 394 0 +283 436 241 -10 1271 1333 90 157 0 +284 70 100 10 1119 1191 90 0 878 +285 73 328 20 193 270 90 0 967 +286 241 205 30 669 717 0 0 1053 +287 250 405 -40 303 370 90 238 0 +288 483 14 10 664 732 90 0 858 +289 466 287 10 467 525 90 0 423 +290 467 114 -10 1159 1223 90 318 0 +291 120 159 10 306 377 90 0 513 +292 408 84 -10 745 814 90 437 0 +293 413 217 20 230 289 90 0 73 +294 338 142 40 204 256 90 0 169 +295 483 457 20 735 811 90 0 180 +296 479 169 20 774 834 90 0 995 +297 95 224 -20 1057 1120 90 383 0 +298 122 216 10 461 537 90 0 23 +299 477 179 20 237 308 90 0 602 +300 406 99 20 367 438 90 0 965 +301 44 47 20 289 356 90 0 763 +302 487 450 10 929 993 90 0 19 +303 172 488 10 310 374 90 0 978 +304 460 374 -20 753 831 90 960 0 +305 279 138 -40 281 320 90 985 0 +306 338 147 10 135 193 90 0 230 +307 395 295 20 677 736 0 0 1038 +308 195 185 -20 335 399 90 544 0 +309 463 194 20 220 279 90 0 651 +310 30 72 -20 1379 1434 90 630 0 +311 244 254 -10 723 787 90 36 0 +312 317 261 -10 398 473 90 224 0 +313 67 108 10 297 346 90 0 795 +314 442 310 20 643 698 90 0 770 +315 63 336 20 822 861 90 0 518 +316 109 107 20 357 416 0 0 1033 +317 100 387 -20 449 498 90 258 0 +318 494 94 10 634 692 90 0 290 +319 343 49 -30 650 710 90 386 0 +320 40 52 40 546 591 90 0 360 +321 319 124 -20 400 465 90 272 0 +322 94 97 -20 285 334 90 415 0 +323 476 94 20 334 396 90 0 419 +324 283 47 10 373 420 90 0 697 +325 398 325 -10 774 843 90 457 0 +326 460 13 20 462 532 90 0 430 +327 305 107 -40 688 753 90 243 0 +328 188 12 30 245 309 90 0 454 +329 136 290 20 272 332 90 0 20 +330 439 268 10 1005 1060 90 0 826 +331 112 467 -20 505 557 90 553 0 +332 181 469 -10 468 536 90 425 0 +333 358 18 10 485 568 90 0 639 +334 459 10 10 566 614 90 0 100 +335 199 268 20 284 368 90 0 654 +336 436 237 20 186 264 90 0 101 +337 318 280 -10 319 384 90 573 0 +338 64 99 -10 853 904 90 74 0 +339 394 333 20 492 567 90 0 735 +340 366 93 -20 936 989 90 151 0 +341 95 391 -10 909 973 90 681 0 +342 391 425 -10 842 909 90 849 0 +343 344 146 -20 496 529 90 766 0 +344 198 12 10 582 631 90 0 399 +345 186 472 20 564 633 90 0 936 +346 390 408 30 450 520 90 0 206 +347 19 43 20 1203 1259 0 0 1003 +348 307 108 -30 777 847 90 686 0 +349 59 457 30 810 848 90 0 176 +350 49 451 20 340 409 90 0 269 +351 125 39 20 245 318 90 0 475 +352 61 147 -20 383 413 90 390 0 +353 317 123 20 497 554 90 0 983 +354 392 426 -20 666 722 90 528 0 +355 237 213 -10 846 917 90 888 0 +356 71 333 10 252 325 90 0 393 +357 304 97 -30 407 466 90 520 0 +358 196 462 -20 955 1003 90 134 0 +359 224 191 -10 312 359 90 211 0 +360 37 51 -40 633 689 90 320 0 +361 491 25 10 957 1010 90 0 447 +362 270 401 20 217 268 90 0 485 +363 474 461 30 307 379 90 0 797 +364 66 448 10 270 345 90 0 492 +365 337 241 20 334 403 0 0 1049 +366 269 46 -20 733 794 90 63 0 +367 22 41 10 1110 1164 90 0 83 +368 198 271 20 380 458 90 0 530 +369 287 43 -10 555 609 90 421 0 +370 446 63 20 697 750 90 0 171 +371 200 229 -10 301 355 90 745 0 +372 48 72 30 711 768 0 0 1009 +373 465 142 10 401 445 90 0 892 +374 123 155 -10 1143 1209 90 131 0 +375 16 497 20 1038 1123 90 0 436 +376 220 319 -10 971 1037 90 971 0 +377 484 171 -20 680 736 90 449 0 +378 55 431 20 694 752 90 0 606 +379 428 24 -10 1105 1140 90 607 0 +380 80 342 10 193 275 90 0 17 +381 16 68 20 521 617 90 0 236 +382 124 56 20 231 285 90 0 907 +383 95 218 20 873 927 90 0 297 +384 481 26 30 321 374 90 0 835 +385 145 434 -30 462 514 90 158 0 +386 335 57 30 210 261 90 0 319 +387 26 490 -30 1345 1394 90 79 0 +388 324 127 30 143 200 90 0 499 +389 109 114 -20 829 871 90 461 0 +390 72 148 20 265 330 90 0 352 +391 220 392 -10 970 1015 90 464 0 +392 442 243 -20 996 1052 90 508 0 +393 69 336 -10 440 507 90 356 0 +394 131 226 20 121 183 90 0 282 +395 150 204 20 639 694 90 0 728 +396 423 217 20 785 849 90 0 469 +397 419 459 -10 785 838 90 440 0 +398 285 163 -30 714 780 90 477 0 +399 203 7 -10 1033 1108 90 344 0 +400 54 445 10 534 593 90 0 185 +401 109 463 -10 959 1018 90 103 0 +402 355 180 30 279 345 90 0 646 +403 13 455 -20 381 430 90 711 0 +404 165 337 20 373 422 90 0 256 +405 314 124 20 775 836 90 0 548 +406 9 124 20 271 336 90 0 502 +407 3 292 20 404 457 90 0 53 +408 16 462 10 935 986 90 0 812 +409 189 464 -40 856 906 90 739 0 +410 288 154 -20 442 494 90 856 0 +411 90 296 20 166 240 90 0 910 +412 138 438 20 832 893 0 0 1029 +413 13 459 20 646 718 90 0 866 +414 461 8 -20 756 812 90 722 0 +415 96 97 20 217 280 90 0 322 +416 68 99 -20 1040 1085 90 895 0 +417 146 205 10 363 417 90 0 90 +418 117 152 20 859 935 90 0 159 +419 481 96 -20 526 577 90 323 0 +420 338 260 -20 622 678 90 495 0 +421 285 44 10 459 522 90 0 369 +422 111 464 10 775 837 90 0 944 +423 468 291 -10 748 798 90 289 0 +424 148 206 20 458 506 90 0 519 +425 184 464 10 285 344 90 0 332 +426 197 11 -10 678 719 90 501 0 +427 396 410 10 829 880 90 0 67 +428 133 53 20 668 720 0 0 1026 +429 132 30 -30 875 926 90 682 0 +430 464 13 -20 853 906 90 326 0 +431 100 394 -20 1006 1067 90 948 0 +432 483 22 -20 476 543 90 853 0 +433 93 235 -20 951 1012 90 999 0 +434 174 26 -10 1037 1105 90 896 0 +435 436 264 20 186 248 90 0 657 +436 24 492 -20 1252 1302 90 375 0 +437 406 94 10 375 430 90 0 292 +438 234 246 10 537 582 90 0 22 +439 315 287 30 693 754 90 0 751 +440 408 453 10 575 661 90 0 397 +441 128 225 10 176 253 90 0 119 +442 226 191 -10 397 459 90 800 0 +443 391 407 -10 549 605 90 578 0 +444 198 264 -10 770 821 90 918 0 +445 179 7 -20 864 930 90 846 0 +446 425 215 -20 699 748 90 619 0 +447 483 27 -10 1322 1384 90 361 0 +448 22 40 -20 1012 1080 90 121 0 +449 479 176 20 296 367 90 0 377 +450 476 102 -10 797 866 90 179 0 +451 386 405 20 206 266 90 0 7 +452 22 38 -10 929 980 90 113 0 +453 440 241 10 1088 1145 90 0 221 +454 182 14 -30 1062 1116 90 328 0 +455 266 405 -10 680 745 90 914 0 +456 357 181 20 367 441 90 0 263 +457 395 332 10 593 648 90 0 325 +458 423 290 10 329 389 90 0 637 +459 104 28 20 716 748 90 0 830 +460 131 56 10 489 533 90 0 852 +461 111 110 20 550 590 90 0 389 +462 97 93 20 460 530 90 0 559 +463 90 274 20 411 458 90 0 586 +464 214 394 10 778 834 90 0 391 +465 6 114 10 809 855 90 0 674 +466 375 191 30 473 531 0 0 1042 +467 356 21 -20 414 452 90 76 0 +468 466 165 -20 747 805 90 908 0 +469 415 223 -20 1257 1302 90 396 0 +470 397 20 20 433 477 90 0 203 +471 241 403 10 686 744 90 0 260 +472 69 334 30 348 415 90 0 688 +473 152 210 20 105 163 90 0 109 +474 67 335 20 629 684 90 0 946 +475 126 30 -20 495 558 90 351 0 +476 390 423 10 290 336 90 0 558 +477 285 162 30 625 688 90 0 398 +478 285 158 -30 340 405 90 758 0 +479 406 96 20 280 342 0 0 1027 +480 459 374 20 848 917 90 0 684 +481 67 109 -10 388 438 90 616 0 +482 468 475 10 313 373 90 0 584 +483 438 31 10 348 413 90 0 791 +484 168 24 10 770 816 90 0 975 +485 267 394 -20 962 1027 90 362 0 +486 406 450 20 405 464 90 0 512 +487 460 288 10 213 265 90 0 554 +488 224 203 20 53 90 90 0 804 +489 21 487 10 582 629 90 0 16 +490 21 488 -30 667 725 90 49 0 +491 87 217 -30 597 644 90 66 0 +492 67 452 -10 327 402 90 364 0 +493 119 223 10 853 906 0 0 1041 +494 398 428 -20 561 634 90 788 0 +495 344 262 20 522 585 90 0 420 +496 390 301 -10 391 450 90 1 0 +497 167 27 30 487 536 90 0 765 +498 236 247 20 443 492 90 0 893 +499 313 119 -30 679 742 90 388 0 +500 13 51 -30 1366 1425 90 536 0 +501 200 13 10 397 453 90 0 426 +502 0 120 -20 431 492 90 406 0 +503 202 4 -20 950 1004 90 799 0 +504 343 144 10 302 349 90 0 930 +505 94 383 10 636 687 90 0 142 +506 250 411 30 492 554 90 0 626 +507 464 134 20 1048 1106 0 0 1013 +508 443 237 20 248 318 90 0 392 +509 4 114 10 712 769 90 0 196 +510 169 336 -10 838 892 90 954 0 +511 200 178 20 240 298 90 0 898 +512 412 453 -20 674 750 90 486 0 +513 121 151 -10 1053 1110 90 291 0 +514 403 93 -10 1131 1181 90 205 0 +515 399 301 -30 584 634 90 166 0 +516 97 387 -30 823 869 90 958 0 +517 176 8 -10 969 1012 90 201 0 +518 62 326 -20 914 969 90 315 0 +519 151 207 -20 731 788 90 424 0 +520 299 98 30 320 364 90 0 357 +521 334 240 -30 526 582 90 585 0 +522 92 270 -10 954 1029 90 541 0 +523 444 269 20 544 593 90 0 768 +524 132 223 30 837 909 0 0 1043 +525 428 25 20 1175 1251 0 0 1006 +526 413 421 10 768 828 90 0 223 +527 382 498 10 619 669 90 0 747 +528 391 429 20 475 525 90 0 354 +529 398 97 -20 264 344 90 780 0 +530 192 265 -20 678 721 90 368 0 +531 438 26 10 453 497 90 0 195 +532 44 79 10 267 333 90 0 991 +533 137 290 -10 176 245 90 577 0 +534 446 319 -30 364 416 90 940 0 +535 175 487 20 248 308 90 0 851 +536 26 45 30 303 366 90 0 500 +537 147 435 20 553 607 90 0 816 +538 111 459 20 1152 1195 0 0 1015 +539 472 132 -10 767 826 90 913 0 +540 349 158 -20 1050 1093 90 241 0 +541 86 268 10 689 735 90 0 522 +542 415 216 -10 319 384 90 167 0 +543 121 218 20 191 257 90 0 781 +544 210 185 20 76 120 90 0 308 +545 98 215 20 218 278 90 0 778 +546 484 174 10 496 544 90 0 759 +547 328 458 -30 944 1006 90 210 0 +548 313 126 -20 873 923 90 405 0 +549 390 415 20 1042 1090 0 0 1025 +550 459 17 -20 1039 1094 90 802 0 +551 481 124 -10 505 571 90 707 0 +552 386 414 -10 1109 1162 90 555 0 +553 116 466 20 318 373 90 0 331 +554 468 295 -10 934 987 90 487 0 +555 391 426 10 752 818 90 0 552 +556 408 279 20 682 747 90 0 598 +557 15 68 10 448 508 90 0 264 +558 392 424 -10 926 1007 90 476 0 +559 88 95 -20 658 712 90 462 0 +560 116 151 -10 774 836 90 148 0 +561 240 250 -30 340 405 90 714 0 +562 123 159 20 156 216 90 0 57 +563 89 290 20 225 300 90 0 680 +564 39 50 30 440 511 0 0 1007 +565 359 179 -20 465 529 90 660 0 +566 338 257 -20 713 772 90 69 0 +567 92 236 20 1041 1104 90 0 862 +568 413 417 -10 1135 1207 90 837 0 +569 91 101 -30 844 902 90 172 0 +570 55 449 20 278 339 90 0 75 +571 57 425 20 260 317 90 0 91 +572 465 287 10 556 617 90 0 650 +573 320 280 10 221 298 90 0 337 +574 322 468 20 575 625 90 0 897 +575 483 458 -10 656 708 90 45 0 +576 312 267 -20 862 941 90 702 0 +577 139 291 10 118 187 90 0 533 +578 388 408 10 361 425 90 0 443 +579 110 459 -20 1057 1109 90 972 0 +580 459 372 20 672 726 90 0 56 +581 204 269 30 49 98 90 0 933 +582 407 98 10 218 297 90 0 37 +583 335 256 -20 890 962 90 734 0 +584 471 484 -10 571 618 90 482 0 +585 339 244 30 251 299 90 0 521 +586 89 272 -20 498 555 90 463 0 +587 488 96 -10 909 973 90 831 0 +588 316 286 -30 601 662 90 72 0 +589 235 50 -40 813 896 90 64 0 +590 316 258 20 317 368 90 0 676 +591 425 288 -20 603 669 90 976 0 +592 213 397 10 680 744 90 0 281 +593 113 156 10 577 661 90 0 953 +594 199 9 -10 853 911 90 879 0 +595 463 167 10 657 709 90 0 847 +596 129 27 10 680 745 90 0 749 +597 248 404 30 214 274 90 0 772 +598 405 276 -20 771 848 90 556 0 +599 400 288 30 154 232 90 0 704 +600 61 156 30 462 532 90 0 870 +601 393 20 20 1190 1222 90 0 232 +602 484 177 -20 390 463 90 299 0 +603 108 116 -10 911 973 90 47 0 +604 112 217 -20 383 443 90 902 0 +605 389 404 10 267 331 90 0 685 +606 102 391 -20 1098 1161 90 378 0 +607 434 26 10 538 601 90 0 379 +608 488 26 -20 1136 1199 90 727 0 +609 477 120 10 968 1026 90 0 753 +610 126 220 -20 659 711 90 40 0 +611 439 310 10 198 256 90 0 738 +612 212 319 -10 227 293 90 725 0 +613 320 283 -10 421 471 90 638 0 +614 17 459 -20 1200 1275 90 690 0 +615 236 213 20 39 114 90 0 988 +616 68 108 10 230 324 90 0 481 +617 390 294 -20 853 931 90 687 0 +618 275 42 30 537 608 90 0 12 +619 423 214 20 595 669 90 0 446 +620 460 367 20 392 450 90 0 959 +621 272 402 10 317 353 90 0 86 +622 478 102 -10 704 775 90 242 0 +623 400 260 40 150 212 90 0 107 +624 181 6 -10 678 753 90 634 0 +625 470 475 30 381 429 90 0 60 +626 245 408 -30 585 652 90 506 0 +627 93 96 20 374 427 90 0 698 +628 218 318 20 884 939 90 0 817 +629 441 265 -10 344 400 90 250 0 +630 21 64 20 818 876 90 0 310 +631 356 23 20 309 373 90 0 229 +632 267 44 -10 649 693 90 262 0 +633 277 50 10 257 329 90 0 929 +634 182 4 10 586 659 90 0 624 +635 26 36 -10 646 702 90 966 0 +636 384 491 -30 897 948 90 973 0 +637 418 290 -10 1172 1221 90 458 0 +638 321 277 10 75 140 90 0 613 +639 358 16 -10 596 641 90 333 0 +640 389 334 -20 316 373 90 783 0 +641 48 78 -20 990 1042 90 777 0 +642 24 68 -10 1282 1337 90 834 0 +643 206 225 10 405 446 90 0 143 +644 290 141 30 645 709 90 0 1000 +645 439 15 20 650 706 90 0 724 +646 359 182 -30 748 821 90 402 0 +647 413 287 -10 1348 1417 90 220 0 +648 230 49 20 201 253 90 0 198 +649 407 280 -20 595 653 90 99 0 +650 459 295 -10 1209 1273 90 572 0 +651 468 199 -20 669 730 90 309 0 +652 101 384 30 200 262 90 0 823 +653 170 26 -20 855 918 90 935 0 +654 197 270 -20 474 548 90 335 0 +655 415 289 20 169 228 90 0 798 +656 203 390 -30 307 361 90 658 0 +657 443 272 -20 821 869 90 435 0 +658 210 391 30 202 272 90 0 656 +659 363 22 20 964 1025 90 0 42 +660 352 176 20 126 175 90 0 565 +661 212 223 -10 758 832 90 968 0 +662 8 120 -10 1169 1232 90 927 0 +663 244 250 -20 157 217 90 183 0 +664 18 484 10 397 444 90 0 731 +665 379 82 -10 827 884 90 998 0 +666 84 346 20 1095 1157 0 0 1034 +667 233 207 10 105 167 90 0 277 +668 344 62 -20 1208 1274 90 165 0 +669 20 489 10 856 901 90 0 701 +670 361 181 20 662 723 90 0 207 +671 174 494 -20 498 559 90 226 0 +672 49 76 -20 899 950 90 894 0 +673 390 325 -20 883 929 90 748 0 +674 7 118 -10 988 1047 90 465 0 +675 107 26 10 517 579 90 0 872 +676 312 270 -20 967 1022 90 590 0 +677 399 102 -10 649 715 90 740 0 +678 109 108 10 444 510 90 0 773 +679 115 218 10 298 341 90 0 742 +680 88 287 -20 878 959 90 563 0 +681 54 424 10 320 387 90 0 341 +682 125 32 30 407 462 90 0 429 +683 199 12 20 475 557 90 0 98 +684 457 374 -20 945 1005 90 480 0 +685 391 413 -10 1013 1069 90 605 0 +686 304 102 30 505 559 90 0 348 +687 391 293 20 768 834 90 0 617 +688 66 336 -30 719 778 90 472 0 +689 132 291 -10 736 797 90 46 0 +690 18 462 20 1015 1090 90 0 614 +691 347 62 -10 1121 1176 90 128 0 +692 466 142 10 492 537 90 0 891 +693 389 17 -20 993 1049 90 875 0 +694 342 254 10 244 301 90 0 951 +695 92 223 -10 967 1023 90 150 0 +696 404 83 -20 831 916 90 204 0 +697 290 46 -10 832 896 90 324 0 +698 95 92 -20 554 621 90 627 0 +699 200 265 10 853 922 90 0 59 +700 435 16 -20 829 895 90 14 0 +701 25 499 -10 1154 1206 90 669 0 +702 319 260 20 489 566 90 0 576 +703 116 225 -30 752 820 90 880 0 +704 402 284 -30 313 367 90 599 0 +705 108 105 -20 258 329 90 122 0 +706 386 13 -20 785 878 90 716 0 +707 472 129 10 312 383 90 0 551 +708 132 57 -40 396 443 90 784 0 +709 43 71 -10 525 581 90 33 0 +710 493 91 -10 542 599 90 957 0 +711 12 451 20 311 359 90 0 403 +712 201 188 -20 526 581 90 278 0 +713 60 428 -20 1059 1137 90 865 0 +714 243 248 30 243 314 90 0 561 +715 230 197 40 588 645 90 0 923 +716 389 11 20 707 769 90 0 706 +717 401 281 -10 968 1024 90 755 0 +718 459 14 20 372 439 0 0 1002 +719 411 95 30 475 521 90 0 746 +720 0 297 10 679 737 90 0 265 +721 476 196 30 476 544 90 0 741 +722 458 16 20 313 369 90 0 414 +723 92 230 20 498 549 90 0 71 +724 432 24 -20 1000 1056 90 645 0 +725 215 317 10 140 194 90 0 612 +726 371 192 30 190 259 90 0 801 +727 481 20 20 572 631 90 0 608 +728 152 207 -20 824 877 90 395 0 +729 14 459 20 559 622 90 0 887 +730 361 17 20 777 832 0 0 1036 +731 8 497 -10 959 1006 90 664 0 +732 206 186 -30 891 955 90 915 0 +733 421 218 -30 880 939 90 11 0 +734 402 264 20 216 273 90 0 583 +735 388 325 -20 971 1026 90 339 0 +736 35 304 30 280 345 90 0 911 +737 321 263 -10 680 743 90 924 0 +738 444 313 -10 462 511 90 611 0 +739 188 462 40 753 826 90 0 409 +740 400 103 10 546 636 90 0 677 +741 418 221 -30 1150 1223 90 721 0 +742 112 219 -10 469 541 90 679 0 +743 408 452 10 490 564 0 0 1012 +744 30 301 -10 660 726 90 61 0 +745 205 228 10 110 173 90 0 371 +746 407 88 -30 1035 1083 90 719 0 +747 380 489 -10 1084 1143 90 527 0 +748 395 331 20 690 734 90 0 673 +749 133 26 -10 776 837 90 596 0 +750 21 68 -10 1189 1243 90 95 0 +751 313 282 -30 790 847 90 439 0 +752 53 440 -10 633 684 90 882 0 +753 458 130 -10 1140 1210 90 609 0 +754 437 15 30 739 801 90 0 889 +755 400 286 10 217 276 90 0 717 +756 346 144 10 661 729 0 0 1040 +757 440 244 10 809 874 90 0 860 +758 280 162 30 158 210 90 0 478 +759 488 173 -10 583 645 90 546 0 +760 326 118 10 213 272 0 0 1039 +761 207 400 20 489 562 90 0 168 +762 391 18 -20 1085 1141 90 182 0 +763 37 55 -20 730 780 90 301 0 +764 204 15 20 239 301 90 0 156 +765 173 28 -30 1134 1191 90 497 0 +766 343 148 20 399 441 90 0 343 +767 231 43 -10 447 513 90 949 0 +768 445 273 -20 725 781 90 523 0 +769 432 27 -20 810 878 90 177 0 +770 439 305 -20 736 797 90 314 0 +771 208 396 -20 401 462 90 815 0 +772 249 407 -30 403 455 90 597 0 +773 107 112 -10 728 787 90 678 0 +774 279 159 20 252 301 90 0 5 +775 376 494 -20 334 396 90 28 0 +776 403 262 30 493 547 90 0 992 +777 41 47 20 359 406 90 0 641 +778 96 213 -20 311 369 90 545 0 +779 461 167 -20 470 531 90 867 0 +780 391 99 20 206 268 90 0 529 +781 116 221 -20 571 627 90 543 0 +782 165 343 -30 556 613 90 39 0 +783 388 334 20 227 280 90 0 640 +784 130 57 40 289 365 90 0 708 +785 422 409 10 234 290 90 0 132 +786 66 156 10 653 718 90 0 274 +787 485 86 20 349 413 90 0 58 +788 389 428 20 380 435 90 0 494 +789 117 467 10 254 307 90 0 974 +790 475 477 20 1028 1091 90 0 43 +791 429 27 -10 1272 1339 90 483 0 +792 339 60 20 274 338 90 0 803 +793 381 494 -10 801 855 90 188 0 +794 218 321 -10 697 759 90 78 0 +795 64 101 -10 667 724 90 313 0 +796 343 254 20 334 394 90 0 21 +797 478 464 -30 360 446 90 363 0 +798 423 286 -20 430 477 90 655 0 +799 198 9 20 763 819 90 0 503 +800 225 196 10 128 174 90 0 442 +801 374 190 -30 292 344 90 726 0 +802 462 14 20 944 1000 90 0 550 +803 347 54 -20 836 904 90 792 0 +804 231 195 -20 497 552 90 488 0 +805 72 96 -30 1220 1278 90 209 0 +806 489 87 20 451 499 90 0 961 +807 443 313 30 554 602 90 0 883 +808 233 204 20 198 260 90 0 964 +809 477 483 20 745 817 0 0 1001 +810 459 368 10 299 361 90 0 841 +811 95 277 -20 1057 1121 90 922 0 +812 16 460 -10 1112 1180 90 408 0 +813 100 266 20 207 275 90 0 906 +814 288 53 -10 925 997 90 838 0 +815 211 386 20 141 212 90 0 771 +816 144 439 -20 736 797 90 537 0 +817 224 314 -20 1074 1126 90 628 0 +818 79 291 -10 519 568 90 938 0 +819 95 235 10 155 227 90 0 246 +820 7 123 30 329 399 90 0 222 +821 91 217 10 692 738 0 0 1037 +822 105 27 -10 611 670 90 50 0 +823 101 385 -30 262 320 90 652 0 +824 238 210 -20 757 821 90 926 0 +825 439 67 10 322 386 90 0 270 +826 435 267 -10 1188 1247 90 330 0 +827 443 64 30 779 854 90 0 832 +828 92 234 10 853 926 90 0 161 +829 450 265 10 444 498 90 0 117 +830 102 27 -20 796 852 90 459 0 +831 492 94 10 724 787 90 0 587 +832 440 63 -30 886 934 90 827 0 +833 453 367 20 1055 1091 0 0 1020 +834 15 69 10 359 414 90 0 642 +835 489 17 -30 764 826 90 384 0 +836 335 255 20 85 124 0 0 1048 +837 419 418 10 394 454 90 0 568 +838 292 41 10 733 804 90 0 814 +839 489 27 10 1035 1117 90 0 994 +840 96 270 -10 308 367 90 116 0 +841 461 369 -10 579 633 90 810 0 +842 105 22 -10 339 385 90 190 0 +843 479 121 -30 692 754 90 94 0 +844 207 223 10 585 634 90 0 956 +845 17 458 -20 1297 1360 90 970 0 +846 186 7 20 500 555 90 0 445 +847 465 168 -10 837 902 90 595 0 +848 416 288 -10 1251 1328 90 51 0 +849 388 418 10 217 283 90 0 342 +850 92 233 -10 768 830 90 227 0 +851 179 492 -20 678 752 90 535 0 +852 132 55 -10 573 632 90 460 0 +853 485 24 20 387 445 90 0 432 +854 388 331 20 160 230 90 0 861 +855 217 323 20 424 473 90 0 13 +856 281 164 20 91 140 90 0 410 +857 169 340 -20 737 806 90 125 0 +858 491 20 -10 853 925 90 288 0 +859 279 42 -20 262 338 90 212 0 +860 439 243 -10 1191 1227 90 757 0 +861 391 334 -20 402 470 90 854 0 +862 96 244 -20 1332 1380 90 567 0 +863 441 273 20 903 972 90 0 248 +864 477 478 -30 942 993 90 993 0 +865 56 434 20 881 940 90 0 713 +866 12 463 -20 751 800 90 413 0 +867 458 164 20 374 439 90 0 779 +868 446 65 -10 516 566 90 35 0 +869 71 156 -30 844 904 90 977 0 +870 65 153 -30 570 614 90 600 0 +871 8 118 20 1079 1138 0 0 1008 +872 102 29 -10 887 946 90 675 0 +873 315 265 -20 774 841 90 155 0 +874 343 62 10 1300 1364 0 0 1028 +875 384 16 20 892 959 90 0 693 +876 67 105 10 579 622 0 0 1022 +877 478 118 -30 1058 1121 90 164 0 +878 73 101 -10 1313 1375 90 284 0 +879 200 14 10 311 356 90 0 594 +880 114 225 30 664 723 90 0 703 +881 460 293 -20 1121 1176 90 233 0 +882 51 447 10 438 501 90 0 752 +883 418 295 -30 1063 1140 90 807 0 +884 282 139 20 188 227 90 0 900 +885 477 122 -40 886 924 90 942 0 +886 91 266 10 776 840 90 0 174 +887 16 463 -20 836 904 90 729 0 +888 228 199 10 673 746 90 0 355 +889 435 20 -30 933 980 90 754 0 +890 467 195 10 285 344 90 0 253 +891 469 132 -10 856 923 90 692 0 +892 465 136 -10 964 1007 90 373 0 +893 246 255 -20 818 877 90 498 0 +894 49 75 20 810 857 90 0 672 +895 66 98 20 944 996 90 0 416 +896 166 32 10 296 352 90 0 434 +897 326 466 -20 753 817 90 574 0 +898 202 186 -20 616 676 90 511 0 +899 467 285 -10 380 428 90 255 0 +900 290 136 -20 549 614 90 884 0 +901 341 58 10 364 433 90 0 259 +902 121 219 20 132 203 90 0 604 +903 107 35 30 986 1041 0 0 1011 +904 216 319 -20 321 387 90 130 0 +905 134 288 20 923 979 0 0 1044 +906 89 270 -20 590 647 90 813 0 +907 136 52 -20 759 817 90 382 0 +908 462 167 20 566 617 90 0 468 +909 340 54 10 461 525 90 0 145 +910 80 286 -20 601 677 90 411 0 +911 38 301 -30 768 814 90 736 0 +912 25 307 -20 480 529 90 34 0 +913 470 139 10 668 731 90 0 539 +914 270 400 10 151 213 90 0 455 +915 204 187 30 803 857 90 0 732 +916 460 171 30 937 994 0 0 1024 +917 399 106 20 925 989 0 0 1030 +918 197 267 10 582 626 90 0 444 +919 77 350 -30 997 1058 90 4 0 +920 91 231 -10 579 652 90 943 0 +921 398 103 30 739 807 90 0 989 +922 35 303 20 221 262 90 0 811 +923 231 204 -40 776 834 90 715 0 +924 311 266 10 63 126 90 0 737 +925 416 420 20 663 746 90 0 24 +926 231 203 20 291 352 90 0 824 +927 4 116 10 618 678 90 0 662 +928 417 217 30 423 465 90 0 952 +929 268 52 -10 1003 1079 90 633 0 +930 345 144 -10 568 640 90 504 0 +931 368 85 30 202 275 90 0 137 +932 441 65 10 422 470 90 0 154 +933 201 270 -30 108 177 90 581 0 +934 0 293 -10 591 637 90 102 0 +935 167 24 20 668 736 90 0 653 +936 186 464 -20 662 730 90 345 0 +937 7 292 10 246 306 90 0 181 +938 80 290 10 420 484 90 0 818 +939 405 455 -20 883 948 90 115 0 +940 439 312 30 257 324 90 0 534 +941 300 108 10 150 211 90 0 32 +942 478 121 40 788 840 90 0 885 +943 92 232 10 401 462 90 0 920 +944 111 463 -10 875 919 90 422 0 +945 132 294 -30 454 521 90 249 0 +946 134 285 -20 1104 1168 90 474 0 +947 316 284 20 510 570 0 0 1050 +948 56 428 20 415 482 90 0 431 +949 232 47 10 262 327 90 0 767 +950 466 291 10 656 705 90 0 85 +951 341 257 -10 424 490 90 694 0 +952 420 213 -30 509 568 90 928 0 +953 116 152 -10 678 750 90 593 0 +954 163 337 10 277 334 90 0 510 +955 440 7 -40 469 508 90 139 0 +956 208 222 -10 667 734 90 844 0 +957 485 95 10 281 351 90 0 710 +958 97 385 30 537 598 90 0 516 +959 462 367 -20 481 545 90 620 0 +960 455 365 20 235 306 90 0 304 +961 492 95 -20 815 877 90 806 0 +962 405 450 20 311 376 90 0 123 +963 371 193 20 133 185 90 0 279 +964 234 202 -20 389 440 90 808 0 +965 404 103 -20 464 530 90 300 0 +966 24 41 10 557 601 90 0 635 +967 67 334 -20 532 600 90 285 0 +968 207 227 10 48 112 90 0 661 +969 277 403 10 395 464 90 0 251 +970 15 457 20 462 534 90 0 845 +971 217 319 10 789 851 90 0 376 +972 111 467 20 597 647 90 0 579 +973 378 493 30 426 487 90 0 636 +974 112 465 -10 685 743 90 789 0 +975 173 25 -10 952 1007 90 484 0 +976 421 292 20 245 287 90 0 591 +977 74 146 30 204 259 90 0 869 +978 178 491 -10 591 656 90 303 0 +979 204 185 -20 707 769 90 191 0 +980 319 470 10 383 442 90 0 118 +981 163 331 40 118 179 0 0 1045 +982 470 125 20 253 316 90 0 111 +983 315 121 -20 590 647 90 353 0 +984 166 34 20 231 305 90 0 244 +985 284 140 40 115 172 90 0 305 +986 85 288 20 329 386 90 0 27 +987 376 190 30 382 439 90 0 276 +988 238 203 -20 483 534 90 615 0 +989 399 104 -30 834 896 90 921 0 +990 472 481 20 477 527 90 0 280 +991 46 74 -10 612 682 90 532 0 +992 401 255 -30 685 738 90 776 0 +993 475 480 30 837 911 90 0 864 +994 485 27 -10 1231 1291 90 839 0 +995 476 174 -20 874 924 90 296 0 +996 330 242 -10 627 671 90 87 0 +997 332 249 30 82 144 90 0 120 +998 375 80 10 550 598 90 0 665 +999 94 235 20 227 266 90 0 433 +1000 287 144 -30 827 895 90 644 0 +1001 477 483 -20 745 817 90 809 0 +1002 459 14 -20 372 439 90 718 0 +1003 19 43 -20 1203 1259 90 347 0 +1004 433 15 -20 297 344 90 184 0 +1005 18 63 -10 716 792 90 215 0 +1006 428 25 -20 1175 1251 90 525 0 +1007 39 50 -30 440 511 90 564 0 +1008 8 118 -20 1079 1138 90 871 0 +1009 48 72 -30 711 768 90 372 0 +1010 435 62 -30 1156 1218 90 146 0 +1011 107 35 -30 986 1041 90 903 0 +1012 408 452 -10 490 564 90 743 0 +1013 464 134 -20 1048 1106 90 507 0 +1014 418 218 -20 974 1030 90 15 0 +1015 111 459 -20 1152 1195 90 538 0 +1016 2 295 -30 774 828 90 126 0 +1017 463 140 -10 295 366 90 144 0 +1018 202 9 -10 1225 1281 90 82 0 +1019 164 21 -20 578 639 90 48 0 +1020 453 367 -20 1055 1091 90 833 0 +1021 422 420 -20 490 545 90 104 0 +1022 67 105 -10 579 622 90 876 0 +1023 328 466 -30 847 906 90 202 0 +1024 460 171 -30 937 994 90 916 0 +1025 390 415 -20 1042 1090 90 549 0 +1026 133 53 -20 668 720 90 428 0 +1027 406 96 -20 280 342 90 479 0 +1028 343 62 -10 1300 1364 90 874 0 +1029 138 438 -20 832 893 90 412 0 +1030 399 106 -20 925 989 90 917 0 +1031 377 76 -20 638 699 90 163 0 +1032 288 44 -20 636 711 90 261 0 +1033 109 107 -20 357 416 90 316 0 +1034 84 346 -20 1095 1157 90 666 0 +1035 423 294 -10 790 863 90 239 0 +1036 361 17 -20 777 832 90 730 0 +1037 91 217 -10 692 738 90 821 0 +1038 395 295 -20 677 736 90 307 0 +1039 326 118 -10 213 272 90 760 0 +1040 346 144 -10 661 729 90 756 0 +1041 119 223 -10 853 906 90 493 0 +1042 375 191 -30 473 531 90 466 0 +1043 132 223 -30 837 909 90 524 0 +1044 134 288 -20 923 979 90 905 0 +1045 163 331 -40 118 179 90 981 0 +1046 287 143 -10 748 793 90 25 0 +1047 152 206 -10 910 973 90 65 0 +1048 335 255 -20 85 124 90 836 0 +1049 337 241 -20 334 403 90 365 0 +1050 316 284 -20 510 570 90 947 0 +1051 320 262 -10 585 656 90 199 0 +1052 205 230 -30 203 263 90 218 0 +1053 241 205 -30 669 717 90 286 0 +1054 249 258 -30 910 974 90 266 0 diff --git a/jsprit-instances/instances/lilim/1000/LC11010.txt b/jsprit-instances/instances/lilim/1000/LC11010.txt new file mode 100644 index 00000000..cee33527 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC11010.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 10 144 681 90 0 515 +2 5 297 10 789 1183 90 0 53 +3 355 177 20 127 680 90 0 965 +4 78 346 -10 196 785 90 44 0 +5 286 159 20 290 836 0 0 1015 +6 322 465 10 226 743 90 0 210 +7 393 408 30 413 926 90 0 848 +8 89 216 10 287 770 90 0 695 +9 76 345 30 348 778 90 0 142 +10 410 285 -20 338 717 90 99 0 +11 472 189 30 230 803 90 0 721 +12 270 49 -10 746 1149 90 633 0 +13 219 325 10 337 745 90 0 78 +14 437 12 20 449 720 90 0 645 +15 418 218 20 740 1264 0 0 1003 +16 20 488 -10 627 948 90 664 0 +17 77 347 -20 260 682 90 89 0 +18 73 346 -20 451 1047 90 967 0 +19 480 455 10 908 1394 0 0 1041 +20 129 292 -20 351 812 90 329 0 +21 337 257 -20 595 1073 90 702 0 +22 237 254 -10 414 902 90 844 0 +23 131 220 -20 599 960 90 119 0 +24 417 417 10 832 1142 0 0 1020 +25 287 143 10 599 942 90 0 644 +26 379 80 -10 602 925 90 760 0 +27 87 285 30 456 1016 90 0 522 +28 374 489 20 269 799 90 0 973 +29 440 247 -10 503 993 90 152 0 +30 281 137 10 117 726 90 0 632 +31 379 196 20 443 935 0 0 1046 +32 297 102 10 155 644 90 0 520 +33 39 76 10 273 734 90 0 320 +34 35 306 -30 222 662 90 736 0 +35 435 68 10 259 746 90 0 832 +36 245 251 10 5 418 90 0 249 +37 409 88 20 409 962 90 0 205 +38 273 55 -40 196 664 90 305 0 +39 163 340 -20 168 813 90 404 0 +40 129 223 20 123 501 90 0 902 +41 371 200 -10 656 1102 90 276 0 +42 357 26 20 936 1428 0 0 1032 +43 470 473 -20 771 1421 90 990 0 +44 77 344 10 196 746 90 0 4 +45 478 461 10 310 686 90 0 575 +46 128 291 -10 362 984 90 577 0 +47 111 113 -20 427 899 90 562 0 +48 164 21 -10 381 835 90 211 0 +49 21 485 -30 348 679 90 79 0 +50 108 26 10 265 654 90 0 675 +51 424 286 10 368 721 90 0 591 +52 200 270 20 53 538 90 0 444 +53 7 300 -10 819 1341 90 2 0 +54 433 31 10 285 788 90 0 177 +55 420 295 -10 800 1220 90 443 0 +56 451 367 -10 944 1385 90 180 0 +57 118 157 20 200 668 90 0 389 +58 489 101 -30 858 1214 90 961 0 +59 200 261 -10 762 1201 90 699 0 +60 476 483 -30 482 898 90 625 0 +61 30 302 10 317 887 90 0 937 +62 8 300 -20 975 1367 90 922 0 +63 275 45 20 206 824 90 0 929 +64 238 46 -20 584 936 90 198 0 +65 152 206 -20 744 1139 90 728 0 +66 99 218 -10 154 690 90 441 0 +67 393 410 20 739 1155 90 0 647 +68 480 460 -10 362 814 90 797 0 +69 337 256 20 87 658 90 0 162 +70 389 300 -20 147 623 90 231 0 +71 90 237 -10 1070 1442 90 433 0 +72 321 280 30 77 522 90 0 439 +73 417 218 -10 937 1250 90 377 0 +74 64 108 10 265 748 90 0 83 +75 57 432 -30 803 1202 90 652 0 +76 356 24 20 249 694 90 0 467 +77 143 207 -20 115 548 90 424 0 +78 221 325 -10 480 786 90 13 0 +79 22 483 30 325 703 90 0 49 +80 24 65 -20 674 1206 90 698 0 +81 141 431 30 211 709 90 0 816 +82 202 9 10 951 1489 90 0 399 +83 20 48 -10 942 1428 90 74 0 +84 457 163 -30 224 840 90 402 0 +85 470 290 -30 611 1120 90 423 0 +86 268 400 -10 656 1140 90 914 0 +87 337 251 10 87 705 90 0 107 +88 366 20 -30 671 1131 90 639 0 +89 72 344 20 402 912 90 0 17 +90 149 203 -20 352 799 90 308 0 +91 55 428 -20 264 849 90 571 0 +92 189 7 30 250 801 90 0 200 +93 397 18 -20 304 789 90 321 0 +94 481 122 30 327 933 90 0 942 +95 20 73 10 290 865 90 0 271 +96 54 430 -20 326 936 90 948 0 +97 74 350 -10 634 1236 90 105 0 +98 202 8 10 826 1488 90 0 156 +99 406 285 20 188 680 90 0 10 +100 460 2 20 408 968 90 0 334 +101 441 244 10 719 1145 90 0 392 +102 1 293 10 278 768 90 0 265 +103 115 465 10 253 674 90 0 422 +104 422 420 20 284 751 90 0 925 +105 75 347 10 606 1076 90 0 97 +106 141 428 20 208 667 90 0 553 +107 404 264 -10 176 681 90 87 0 +108 398 23 10 270 681 90 0 601 +109 148 211 20 109 738 90 0 723 +110 362 22 -20 937 1233 90 730 0 +111 479 127 20 259 660 90 0 843 +112 443 246 -20 254 876 90 336 0 +113 22 37 10 566 1161 90 0 448 +114 65 100 -20 558 1015 90 705 0 +115 404 447 20 250 563 90 0 440 +116 102 264 10 148 606 90 0 563 +117 444 271 10 392 929 90 0 657 +118 325 466 40 483 905 90 0 547 +119 124 219 20 375 810 90 0 23 +120 335 243 -30 181 741 90 997 0 +121 26 42 -30 305 764 90 536 0 +122 113 106 20 198 713 90 0 322 +123 399 450 -20 838 1189 90 397 0 +124 146 439 10 413 936 0 0 1036 +125 162 336 20 123 506 90 0 378 +126 2 295 -30 639 962 90 934 0 +127 122 35 10 250 635 90 0 903 +128 346 60 10 742 1371 90 0 668 +129 93 213 30 215 652 90 0 593 +130 218 316 20 73 681 90 0 904 +131 116 156 10 251 802 90 0 186 +132 419 422 -10 416 807 90 785 0 +133 467 141 -10 408 803 90 692 0 +134 187 491 -20 449 1176 90 535 0 +135 433 25 -20 689 1184 90 195 0 +136 286 137 10 298 677 90 0 900 +137 370 82 40 234 724 90 0 370 +138 132 290 -20 661 1054 90 335 0 +139 435 11 40 302 720 90 0 430 +140 206 261 -10 824 1330 90 530 0 +141 428 291 10 564 898 90 0 863 +142 95 384 -30 572 933 90 9 0 +143 205 223 20 381 655 90 0 661 +144 463 140 10 239 708 90 0 551 +145 343 47 20 526 1017 90 0 691 +146 435 62 -10 962 1413 90 835 0 +147 387 488 -30 848 1186 90 775 0 +148 121 157 10 159 558 90 0 773 +149 182 463 30 223 762 90 0 303 +150 92 216 10 620 991 90 0 297 +151 370 83 -20 205 793 90 272 0 +152 444 242 10 270 671 90 0 29 +153 90 285 -10 876 1146 90 938 0 +154 446 64 -10 447 818 90 825 0 +155 312 264 20 63 504 90 0 873 +156 208 11 -10 972 1492 90 98 0 +157 442 247 -10 390 923 90 254 0 +158 140 431 30 211 802 90 0 579 +159 118 153 -20 791 1186 90 278 0 +160 134 428 20 692 1235 90 0 412 +161 91 235 10 962 1367 0 0 1037 +162 406 257 -20 401 832 90 69 0 +163 377 76 -30 399 939 90 931 0 +164 474 96 -20 271 646 90 193 0 +165 346 57 -10 700 1226 90 909 0 +166 393 301 30 287 739 90 0 676 +167 412 214 10 165 738 90 0 916 +168 210 398 10 335 903 90 0 592 +169 346 150 -20 795 1151 90 774 0 +170 62 453 -30 296 803 90 492 0 +171 437 61 -30 817 1373 90 754 0 +172 87 96 -10 481 1073 90 569 0 +173 367 83 30 203 752 90 0 700 +174 91 268 -10 568 1231 90 679 0 +175 459 145 40 233 866 90 0 885 +176 63 444 -20 822 1408 90 240 0 +177 433 27 -10 468 854 90 54 0 +178 60 454 10 641 1203 90 0 216 +179 478 99 -20 348 944 90 456 0 +180 485 454 10 636 1096 90 0 56 +181 6 292 10 247 908 90 0 407 +182 398 20 20 273 774 90 0 693 +183 248 251 20 2 428 90 0 311 +184 433 15 20 297 707 90 0 414 +185 64 426 10 931 1454 0 0 1014 +186 154 207 -10 801 1268 90 131 0 +187 481 456 40 796 1322 90 0 302 +188 380 498 10 336 768 90 0 747 +189 88 286 -10 551 1104 90 298 0 +190 111 23 10 266 760 90 0 830 +191 199 187 20 270 653 90 0 703 +192 269 48 20 709 1003 0 0 1019 +193 367 178 20 405 785 90 0 164 +194 452 163 30 219 632 90 0 373 +195 431 28 20 463 1043 90 0 135 +196 8 116 20 673 1177 90 0 662 +197 233 47 20 203 790 90 0 589 +198 237 43 20 511 823 90 0 64 +199 320 262 10 376 864 90 0 420 +200 188 4 -30 253 685 90 92 0 +201 180 6 -10 575 1037 90 634 0 +202 328 466 -30 560 1193 90 897 0 +203 393 12 -20 384 905 90 470 0 +204 409 90 -10 300 887 90 437 0 +205 406 87 -20 771 1165 90 37 0 +206 394 407 -30 468 1053 90 346 0 +207 358 183 -40 724 1214 90 294 0 +208 186 461 20 220 656 90 0 332 +209 38 72 30 276 722 90 0 805 +210 323 471 -10 234 780 90 6 0 +211 224 192 10 63 651 90 0 48 +212 278 46 20 205 664 90 0 366 +213 272 403 30 310 739 0 0 1040 +214 232 42 10 422 721 0 0 1009 +215 18 63 -20 529 980 90 381 0 +216 58 458 -10 491 984 90 178 0 +217 416 417 -20 874 1283 90 223 0 +218 205 230 30 53 413 90 0 371 +219 65 453 30 274 802 90 0 237 +220 421 294 -10 642 1195 90 611 0 +221 434 245 -10 1119 1550 90 757 0 +222 2 116 20 391 722 90 0 927 +223 411 421 20 697 1082 90 0 217 +224 315 260 10 65 479 90 0 734 +225 136 288 -10 843 1242 90 689 0 +226 173 490 20 252 644 90 0 409 +227 90 232 -30 439 975 90 920 0 +228 402 265 20 152 696 90 0 776 +229 361 14 -10 392 1032 90 333 0 +230 348 147 -20 647 1113 90 884 0 +231 385 295 20 142 599 90 0 70 +232 394 23 -10 1163 1434 90 762 0 +233 466 295 -10 831 1274 90 950 0 +234 71 103 -10 959 1503 90 338 0 +235 125 29 30 304 932 90 0 596 +236 25 65 10 799 1263 90 0 674 +237 58 449 -30 872 1164 90 219 0 +238 246 398 40 148 635 90 0 266 +239 423 294 -20 611 1041 90 798 0 +240 59 459 20 418 875 90 0 176 +241 348 145 -20 549 1026 90 353 0 +242 477 97 -20 273 825 90 565 0 +243 307 102 40 351 898 90 0 348 +244 169 31 20 233 832 90 0 765 +245 381 495 20 466 1009 90 0 636 +246 95 234 10 155 673 90 0 828 +247 22 33 10 559 979 90 0 452 +248 435 268 -30 851 1403 90 599 0 +249 135 293 -10 160 629 90 36 0 +250 439 266 10 189 478 90 0 768 +251 269 402 -20 446 790 90 362 0 +252 267 400 -10 551 1063 90 621 0 +253 473 196 10 345 862 90 0 733 +254 445 237 10 195 758 90 0 157 +255 461 284 -10 213 653 90 829 0 +256 167 339 10 425 934 90 0 510 +257 26 43 -20 305 753 90 301 0 +258 101 386 20 201 773 90 0 958 +259 342 54 20 357 813 90 0 319 +260 243 399 10 585 1034 0 0 1039 +261 288 44 20 435 912 90 0 697 +262 274 48 10 203 745 90 0 618 +263 360 184 -20 645 1108 90 670 0 +264 23 67 -10 986 1263 90 678 0 +265 6 296 -10 717 1073 90 102 0 +266 249 258 -40 750 1134 90 238 0 +267 421 415 30 237 677 90 0 526 +268 319 468 -10 228 728 90 969 0 +269 50 438 20 543 960 90 0 690 +270 440 61 -20 758 1246 90 868 0 +271 17 65 -10 432 891 90 95 0 +272 323 118 20 150 606 90 0 151 +273 402 281 20 698 1112 90 0 717 +274 71 153 -30 587 975 90 600 0 +275 52 432 20 554 1078 90 0 845 +276 378 199 10 507 1057 90 0 41 +277 238 204 20 392 807 0 0 1044 +278 208 184 20 78 687 90 0 159 +279 376 195 -30 391 800 90 466 0 +280 473 475 -20 996 1309 90 864 0 +281 215 395 -20 698 1096 90 761 0 +282 123 222 30 208 598 90 0 383 +283 436 241 -10 1068 1537 90 453 0 +284 70 100 -10 885 1425 90 876 0 +285 73 328 20 193 625 90 0 666 +286 241 205 30 572 814 90 0 888 +287 250 405 20 155 781 90 0 626 +288 483 14 10 409 988 90 0 858 +289 466 287 -20 219 772 90 899 0 +290 467 114 -10 1016 1366 90 609 0 +291 120 159 10 158 568 90 0 870 +292 408 84 10 564 995 90 0 696 +293 413 217 20 166 643 90 0 908 +294 338 142 40 139 557 90 0 207 +295 483 457 -30 632 914 90 363 0 +296 479 169 -20 634 974 90 759 0 +297 95 224 -10 905 1273 90 150 0 +298 122 216 10 237 760 90 0 189 +299 477 179 -20 237 795 90 309 0 +300 406 99 -20 217 862 90 660 0 +301 44 47 20 289 862 90 0 257 +302 487 450 -40 738 1184 90 187 0 +303 172 488 -30 250 763 90 149 0 +304 460 374 -20 562 1021 90 960 0 +305 279 138 40 115 608 90 0 38 +306 338 147 10 135 671 90 0 646 +307 395 295 -10 494 919 90 496 0 +308 195 185 20 153 582 90 0 90 +309 463 194 20 220 721 90 0 299 +310 30 72 -20 1023 1452 90 750 0 +311 244 254 -20 423 1087 90 183 0 +312 317 261 20 194 678 90 0 566 +313 67 108 10 231 625 0 0 1023 +314 442 310 -20 464 877 90 738 0 +315 63 336 -10 620 1063 90 910 0 +316 109 107 20 200 652 90 0 895 +317 100 387 10 279 668 90 0 865 +318 494 94 -20 459 867 90 806 0 +319 343 49 -20 381 978 90 259 0 +320 40 52 -10 363 773 90 33 0 +321 319 124 20 186 680 90 0 93 +322 94 97 -20 218 497 90 122 0 +323 476 94 20 274 695 0 0 1006 +324 283 47 10 261 531 90 0 369 +325 398 325 30 600 1017 90 0 735 +326 460 13 -20 316 755 90 955 0 +327 305 107 20 500 941 90 0 405 +328 188 12 30 245 762 90 0 846 +329 136 290 20 120 602 90 0 20 +330 439 268 10 749 1316 0 0 1022 +331 112 467 -10 339 723 90 789 0 +332 181 469 -20 253 752 90 208 0 +333 358 18 10 297 755 90 0 229 +334 459 10 -20 357 822 90 100 0 +335 199 268 20 89 564 90 0 138 +336 436 237 20 186 550 90 0 112 +337 318 280 20 110 593 90 0 573 +338 64 99 10 699 1057 90 0 234 +339 394 333 20 357 701 90 0 673 +340 366 93 -10 691 1233 90 665 0 +341 95 391 -10 671 1211 90 516 0 +342 391 425 -10 637 1114 90 354 0 +343 344 146 -10 352 673 90 504 0 +344 198 12 -10 359 854 90 501 0 +345 186 472 20 311 885 90 0 401 +346 390 408 30 260 711 90 0 206 +347 19 43 20 943 1424 90 0 500 +348 307 108 -40 627 997 90 243 0 +349 59 457 -10 552 1106 90 364 0 +350 49 451 20 284 711 90 0 403 +351 125 39 20 245 716 90 0 475 +352 61 147 40 220 576 90 0 465 +353 317 123 20 334 717 90 0 241 +354 392 426 10 478 909 90 0 342 +355 237 213 -30 588 1176 90 824 0 +356 71 333 10 197 665 90 0 472 +357 304 97 20 221 652 90 0 499 +358 196 462 -40 771 1186 90 656 0 +359 224 191 20 132 540 90 0 898 +360 37 51 -10 400 922 90 532 0 +361 491 25 10 727 1240 90 0 447 +362 270 401 20 152 575 90 0 251 +363 474 461 30 307 679 90 0 295 +364 66 448 10 270 720 90 0 349 +365 337 241 20 161 576 90 0 521 +366 269 46 -20 553 974 90 212 0 +367 22 41 -20 873 1401 90 777 0 +368 198 271 -10 217 621 90 663 0 +369 287 43 -10 356 808 90 324 0 +370 446 63 -40 388 1058 90 137 0 +371 200 229 -30 156 500 90 218 0 +372 48 72 -20 423 1056 90 462 0 +373 465 142 -30 240 739 90 194 0 +374 123 155 -20 966 1386 90 418 0 +375 16 497 -10 863 1298 90 669 0 +376 220 319 30 732 1276 0 0 1038 +377 484 171 10 542 874 90 0 73 +378 55 431 -20 516 930 90 125 0 +379 428 24 -10 812 1433 90 607 0 +380 80 342 10 193 604 90 0 505 +381 16 68 20 296 977 90 0 215 +382 124 56 20 231 913 90 0 459 +383 95 218 -30 633 1167 90 282 0 +384 481 26 30 321 756 90 0 432 +385 145 434 -20 269 707 90 537 0 +386 335 57 30 210 606 90 0 792 +387 26 490 -20 832 1406 90 711 0 +388 324 127 30 143 595 90 0 998 +389 109 114 -20 540 1159 90 57 0 +390 72 148 -30 205 683 90 977 0 +391 220 392 -20 722 1263 90 771 0 +392 442 243 -10 712 1336 90 101 0 +393 69 336 20 293 654 90 0 919 +394 131 226 20 121 670 90 0 742 +395 150 204 20 358 976 90 0 781 +396 423 217 -20 603 1030 90 619 0 +397 419 459 20 562 1060 90 0 123 +398 285 163 -20 532 963 90 1000 0 +399 203 7 -10 805 1336 90 82 0 +400 54 445 10 307 819 90 0 752 +401 109 463 -20 776 1202 90 345 0 +402 355 180 30 126 632 90 0 84 +403 13 455 -20 313 921 90 350 0 +404 165 337 20 218 577 90 0 39 +405 314 124 -20 532 1080 90 327 0 +406 9 124 20 271 696 90 0 502 +407 3 292 -10 250 766 90 181 0 +408 16 462 -20 721 1200 90 887 0 +409 189 464 -20 590 1173 90 226 0 +410 288 154 10 170 766 90 0 901 +411 90 296 20 166 636 90 0 474 +412 138 438 -20 643 1081 90 160 0 +413 13 459 20 407 957 0 0 1001 +414 461 8 -20 510 1058 90 184 0 +415 96 97 20 217 687 90 0 627 +416 68 99 10 858 1268 90 0 878 +417 146 205 -20 132 648 90 473 0 +418 117 152 20 675 1118 90 0 374 +419 481 96 20 334 769 90 0 831 +420 338 260 -10 489 810 90 199 0 +421 285 44 -40 258 722 90 859 0 +422 111 464 -10 551 1060 90 103 0 +423 468 291 30 435 1111 90 0 85 +424 148 206 20 205 760 90 0 77 +425 184 464 10 223 688 90 0 944 +426 197 11 10 479 918 0 0 1016 +427 396 410 10 661 1047 90 0 637 +428 133 53 20 453 935 0 0 1029 +429 132 30 -20 695 1106 90 708 0 +430 464 13 -40 560 1200 90 139 0 +431 100 394 10 778 1294 0 0 1005 +432 483 22 -30 325 856 90 384 0 +433 93 235 10 748 1214 90 0 71 +434 174 26 -10 750 1392 90 653 0 +435 436 264 20 186 693 90 0 629 +436 24 492 -10 1053 1403 90 489 0 +437 406 94 10 220 758 90 0 204 +438 234 246 10 349 770 90 0 654 +439 315 287 -30 474 972 90 72 0 +440 408 453 -20 383 853 90 115 0 +441 128 225 10 124 635 90 0 66 +442 226 191 20 163 693 90 0 979 +443 391 407 10 378 776 90 0 55 +444 198 264 -20 559 1032 90 52 0 +445 179 7 -10 705 1089 90 879 0 +446 425 215 10 469 978 90 0 741 +447 483 27 -10 892 1412 90 361 0 +448 22 40 -10 813 1280 90 113 0 +449 479 176 20 240 834 90 0 546 +450 476 102 -10 654 1008 90 622 0 +451 386 405 20 206 640 90 0 476 +452 22 38 -10 721 1187 90 247 0 +453 440 241 10 835 1398 90 0 283 +454 182 14 -10 827 1352 90 517 0 +455 266 405 20 483 941 90 0 485 +456 357 181 20 127 703 90 0 179 +457 395 332 -20 364 878 90 854 0 +458 423 290 -20 177 673 90 976 0 +459 104 28 -20 519 944 90 382 0 +460 131 56 -40 227 832 90 784 0 +461 111 110 -10 369 771 90 968 0 +462 97 93 20 261 730 90 0 372 +463 90 274 20 170 698 90 0 906 +464 214 394 10 558 1053 90 0 817 +465 6 114 -40 649 1016 90 352 0 +466 375 191 30 197 806 90 0 279 +467 356 21 -20 252 798 90 76 0 +468 466 165 30 580 972 0 0 1007 +469 415 223 -10 1016 1544 90 890 0 +470 397 20 20 272 761 90 0 203 +471 241 403 -10 576 855 90 772 0 +472 69 334 -10 199 804 90 356 0 +473 152 210 20 105 447 90 0 417 +474 67 335 -20 461 852 90 411 0 +475 126 30 -20 284 770 90 351 0 +476 390 423 -20 222 658 90 451 0 +477 285 162 -20 403 910 90 856 0 +478 285 158 -30 139 606 90 758 0 +479 406 96 -10 219 696 90 582 0 +480 459 374 20 702 1063 90 0 684 +481 67 109 20 231 702 90 0 795 +482 468 475 -10 313 848 90 605 0 +483 438 31 10 288 893 90 0 769 +484 168 24 10 522 1065 0 0 1004 +485 267 394 -20 818 1170 90 455 0 +486 406 450 -20 253 649 90 788 0 +487 460 288 10 213 626 90 0 572 +488 224 203 20 53 543 90 0 511 +489 21 487 10 329 910 90 0 436 +490 21 488 -10 343 1049 90 882 0 +491 87 217 10 330 912 90 0 821 +492 67 452 30 272 780 90 0 170 +493 119 223 10 691 1067 90 0 524 +494 398 428 -20 355 839 90 528 0 +495 344 262 -20 353 753 90 951 0 +496 390 301 10 149 767 90 0 307 +497 167 27 30 275 747 90 0 975 +498 236 247 -10 267 667 90 561 0 +499 313 119 -20 480 941 90 357 0 +500 13 51 -20 921 1425 90 347 0 +501 200 13 10 242 867 90 0 344 +502 0 120 -20 281 862 90 406 0 +503 202 4 -20 757 1197 90 683 0 +504 343 144 10 153 498 90 0 343 +505 94 383 -10 472 851 90 380 0 +506 250 411 -30 261 785 90 597 0 +507 464 134 20 844 1310 0 0 1034 +508 443 237 -40 193 638 90 623 0 +509 4 114 -30 459 1021 90 820 0 +510 169 336 -10 571 1159 90 256 0 +511 200 178 -20 87 491 90 488 0 +512 412 453 10 395 1029 90 0 939 +513 121 151 -10 821 1342 90 852 0 +514 403 93 -10 1001 1311 90 740 0 +515 399 301 -10 488 730 90 1 0 +516 97 387 10 637 1055 90 0 341 +517 176 8 10 791 1191 90 0 454 +518 62 326 20 707 1176 90 0 946 +519 151 207 10 502 1018 0 0 1043 +520 299 98 -10 159 603 90 32 0 +521 334 240 -20 220 889 90 365 0 +522 92 270 -30 707 1277 90 27 0 +523 444 269 20 345 793 90 0 860 +524 132 223 -10 527 1218 90 493 0 +525 428 25 20 937 1448 0 0 1021 +526 413 421 -30 598 997 90 267 0 +527 382 498 10 433 855 90 0 793 +528 391 429 20 272 728 90 0 494 +529 398 97 10 212 658 90 0 719 +530 192 265 10 522 876 90 0 140 +531 438 26 10 292 785 90 0 724 +532 44 79 10 267 916 90 0 360 +533 137 290 10 119 588 90 0 945 +534 446 319 30 207 741 90 0 810 +535 175 487 20 248 746 90 0 134 +536 26 45 30 303 704 90 0 121 +537 147 435 20 295 865 90 0 385 +538 111 459 20 970 1378 0 0 1013 +539 472 132 -10 626 966 90 913 0 +540 349 158 20 854 1289 0 0 1026 +541 86 268 -20 540 885 90 543 0 +542 415 216 10 168 664 90 0 867 +543 121 218 20 132 676 90 0 541 +544 210 185 20 76 438 90 0 907 +545 98 215 -20 155 518 90 604 0 +546 484 174 -20 338 701 90 449 0 +547 328 458 -40 666 1284 90 118 0 +548 313 126 -10 738 1058 90 983 0 +549 390 415 -10 878 1255 90 578 0 +550 459 17 -20 830 1302 90 802 0 +551 481 124 -10 321 755 90 144 0 +552 386 414 -10 819 1453 90 558 0 +553 116 466 -20 254 941 90 106 0 +554 468 295 10 710 1212 90 0 881 +555 391 426 -10 514 1056 90 849 0 +556 408 279 20 492 938 90 0 649 +557 15 68 -10 297 823 90 834 0 +558 392 424 10 763 1171 90 0 552 +559 88 95 20 479 892 90 0 894 +560 116 151 20 516 1095 90 0 603 +561 240 250 10 147 598 90 0 498 +562 123 159 20 156 646 90 0 47 +563 89 290 -10 165 576 90 116 0 +564 39 50 30 290 739 0 0 1030 +565 359 179 20 270 725 90 0 242 +566 338 257 -20 448 1038 90 312 0 +567 92 236 -10 879 1267 90 586 0 +568 413 417 -10 901 1442 90 837 0 +569 91 101 10 635 1112 90 0 172 +570 55 449 20 278 699 90 0 866 +571 57 425 20 260 860 90 0 91 +572 465 287 -10 426 748 90 487 0 +573 320 280 -20 99 420 90 337 0 +574 322 468 -10 403 798 90 980 0 +575 483 458 -10 411 952 90 45 0 +576 312 267 10 703 1100 0 0 1045 +577 139 291 10 118 682 90 0 46 +578 388 408 10 209 740 90 0 549 +579 110 459 -30 748 1417 90 158 0 +580 459 372 20 471 927 0 0 1017 +581 204 269 30 49 498 0 0 1042 +582 407 98 10 218 696 90 0 479 +583 335 256 -30 659 1193 90 992 0 +584 471 484 10 369 820 90 0 993 +585 339 244 -20 89 685 90 590 0 +586 89 272 10 263 790 90 0 567 +587 488 96 -10 655 1226 90 957 0 +588 316 286 -20 400 863 90 947 0 +589 235 50 -20 682 1028 90 197 0 +590 316 258 20 90 596 90 0 585 +591 425 288 -10 395 877 90 51 0 +592 213 397 -10 502 923 90 168 0 +593 113 156 -30 451 787 90 129 0 +594 199 9 -20 582 1181 90 648 0 +595 463 167 -10 465 901 90 779 0 +596 129 27 -30 410 1015 90 235 0 +597 248 404 30 154 737 90 0 506 +598 405 276 -30 625 994 90 704 0 +599 400 288 30 154 556 90 0 248 +600 61 156 30 263 731 90 0 274 +601 393 20 -10 912 1464 90 108 0 +602 484 177 20 245 628 90 0 995 +603 108 116 -20 773 1111 90 560 0 +604 112 217 20 201 625 90 0 545 +605 389 404 10 207 688 90 0 482 +606 102 391 -20 899 1360 90 713 0 +607 434 26 10 314 825 90 0 379 +608 488 26 -10 936 1399 90 839 0 +609 477 120 10 732 1262 90 0 290 +610 126 220 -10 493 877 90 745 0 +611 439 310 10 198 526 90 0 220 +612 212 319 -30 78 468 90 714 0 +613 320 283 30 213 678 90 0 751 +614 17 459 -20 1006 1421 90 812 0 +615 236 213 20 39 627 90 0 964 +616 68 108 10 230 724 90 0 642 +617 390 294 -20 614 1170 90 687 0 +618 275 42 -10 413 732 90 262 0 +619 423 214 20 412 852 90 0 396 +620 460 367 20 240 861 90 0 833 +621 272 402 10 153 638 90 0 252 +622 478 102 10 558 921 90 0 450 +623 400 260 40 150 527 90 0 508 +624 181 6 20 471 959 0 0 1010 +625 470 475 30 314 975 90 0 60 +626 245 408 -20 363 874 90 287 0 +627 93 96 -20 219 742 90 415 0 +628 218 318 -10 716 1108 90 971 0 +629 441 265 -20 191 734 90 435 0 +630 21 64 -40 590 1104 90 709 0 +631 356 23 20 250 712 90 0 659 +632 267 44 -10 451 891 90 30 0 +633 277 50 10 201 540 90 0 12 +634 182 4 10 377 868 90 0 201 +635 26 36 -10 386 962 90 966 0 +636 384 491 -20 676 1170 90 245 0 +637 418 290 -10 975 1419 90 427 0 +638 321 277 10 75 516 90 0 826 +639 358 16 30 397 839 90 0 88 +640 389 334 20 162 616 90 0 748 +641 48 78 -20 763 1270 90 672 0 +642 24 68 -10 930 1444 90 616 0 +643 206 225 10 195 655 90 0 956 +644 290 141 -10 405 949 90 25 0 +645 439 15 -20 403 954 90 14 0 +646 359 182 -10 572 997 90 306 0 +647 413 287 -20 1076 1567 90 67 0 +648 230 49 20 201 721 90 0 594 +649 407 280 -20 419 828 90 556 0 +650 459 295 20 1027 1455 0 0 1031 +651 468 199 20 507 892 90 0 952 +652 101 384 30 200 563 90 0 75 +653 170 26 10 646 1127 90 0 434 +654 197 270 -10 312 710 90 438 0 +655 415 289 20 169 646 90 0 807 +656 203 390 40 147 644 90 0 358 +657 443 272 -10 585 1105 90 117 0 +658 210 391 -20 146 661 90 815 0 +659 363 22 -20 707 1282 90 631 0 +660 352 176 20 126 473 90 0 300 +661 212 223 -20 515 1076 90 143 0 +662 8 120 -20 946 1455 90 196 0 +663 244 250 10 6 546 90 0 368 +664 18 484 10 329 865 90 0 16 +665 379 82 10 656 1054 90 0 340 +666 84 346 -20 889 1363 90 285 0 +667 233 207 10 46 531 90 0 923 +668 344 62 -10 978 1505 90 128 0 +669 20 489 10 630 1127 90 0 375 +670 361 181 20 483 902 90 0 263 +671 174 494 10 305 751 90 0 978 +672 49 76 20 674 1175 90 0 641 +673 390 325 -20 646 1166 90 339 0 +674 7 118 -10 775 1259 90 236 0 +675 107 26 -10 292 805 90 50 0 +676 312 270 -30 698 1292 90 166 0 +677 399 102 20 381 984 90 0 917 +678 109 108 10 245 709 90 0 264 +679 115 218 10 138 698 90 0 174 +680 88 287 -20 694 1143 90 986 0 +681 54 424 -20 262 838 90 823 0 +682 125 32 30 251 687 90 0 749 +683 199 12 20 265 766 90 0 503 +684 457 374 -20 697 1253 90 480 0 +685 391 413 10 845 1237 0 0 1035 +686 304 102 -10 250 813 90 941 0 +687 391 293 20 611 990 90 0 617 +688 66 336 10 483 1014 0 0 1033 +689 132 291 10 501 1032 90 0 225 +690 18 462 -20 837 1268 90 269 0 +691 347 62 -20 977 1319 90 145 0 +692 466 142 10 247 781 90 0 133 +693 389 17 -20 771 1270 90 182 0 +694 342 254 -20 92 511 90 836 0 +695 92 223 -10 787 1203 90 8 0 +696 404 83 -10 625 1121 90 292 0 +697 290 46 -20 636 1093 90 261 0 +698 95 92 20 277 899 90 0 80 +699 200 265 10 642 1133 90 0 59 +700 435 16 -30 693 1031 90 173 0 +701 25 499 -40 911 1399 90 731 0 +702 319 260 20 207 849 90 0 21 +703 116 225 -20 537 1035 90 191 0 +704 402 284 30 155 634 90 0 598 +705 108 105 20 202 528 90 0 114 +706 386 13 -20 617 1046 90 716 0 +707 472 129 10 252 849 90 0 982 +708 132 57 20 226 833 90 0 429 +709 43 71 40 294 812 90 0 630 +710 493 91 -20 382 759 90 787 0 +711 12 451 20 311 705 90 0 387 +712 201 188 10 267 841 90 0 880 +713 60 428 20 894 1301 90 0 606 +714 243 248 30 44 513 90 0 612 +715 230 197 -20 333 901 90 926 0 +716 389 11 20 534 943 90 0 706 +717 401 281 -20 761 1232 90 273 0 +718 459 14 20 315 778 90 0 994 +719 411 95 -10 235 760 90 529 0 +720 0 297 10 432 983 90 0 744 +721 476 196 -30 260 760 90 11 0 +722 458 16 20 313 764 90 0 727 +723 92 230 -20 311 737 90 109 0 +724 432 24 -10 722 1334 90 531 0 +725 215 317 10 75 402 90 0 936 +726 371 192 30 134 690 90 0 801 +727 481 20 -20 430 773 90 722 0 +728 152 207 20 574 1128 90 0 65 +729 14 459 -20 341 840 90 970 0 +730 361 17 20 577 1032 90 0 110 +731 8 497 40 701 1265 90 0 701 +732 206 186 10 705 1140 90 0 915 +733 421 218 -10 590 1229 90 253 0 +734 402 264 -10 152 702 90 224 0 +735 388 325 -30 732 1264 90 325 0 +736 35 304 30 221 751 90 0 34 +737 321 263 -10 516 907 90 924 0 +738 444 313 20 211 762 90 0 314 +739 188 462 -10 468 1111 90 851 0 +740 400 103 10 360 821 90 0 514 +741 418 221 -10 907 1466 90 446 0 +742 112 219 -20 320 689 90 394 0 +743 408 452 -20 268 786 90 962 0 +744 30 301 -10 459 927 90 720 0 +745 205 228 10 50 480 90 0 610 +746 407 88 -20 806 1312 90 780 0 +747 380 489 -10 928 1300 90 188 0 +748 395 331 -20 410 1013 90 640 0 +749 133 26 -30 560 1054 90 682 0 +750 21 68 20 1020 1412 90 0 310 +751 313 282 -30 637 1000 90 613 0 +752 53 440 -10 420 897 90 400 0 +753 458 130 -20 918 1432 90 877 0 +754 437 15 30 431 1110 90 0 171 +755 400 286 -20 154 447 90 796 0 +756 346 144 -40 437 954 90 985 0 +757 440 244 10 613 1070 90 0 221 +758 280 162 30 92 687 90 0 478 +759 488 173 20 376 852 90 0 296 +760 326 118 10 152 508 90 0 26 +761 207 400 20 256 795 90 0 281 +762 391 18 10 820 1405 90 0 232 +763 37 55 -20 530 981 90 991 0 +764 204 15 20 239 522 90 0 799 +765 173 28 -20 916 1409 90 244 0 +766 343 148 -30 138 795 90 930 0 +767 231 43 -10 280 680 90 949 0 +768 445 273 -10 510 995 90 250 0 +769 432 27 -10 649 1040 90 483 0 +770 439 305 -30 549 985 90 940 0 +771 208 396 20 171 691 90 0 391 +772 249 407 10 174 683 90 0 471 +773 107 112 -10 550 964 90 148 0 +774 279 159 20 121 433 90 0 169 +775 376 494 30 274 552 90 0 147 +776 403 262 -20 259 781 90 228 0 +777 41 47 20 291 795 90 0 367 +778 96 213 30 158 576 90 0 953 +779 461 167 10 226 774 90 0 595 +780 391 99 20 206 716 90 0 746 +781 116 221 -20 346 852 90 395 0 +782 165 343 -40 377 793 90 981 0 +783 388 334 20 161 704 90 0 861 +784 130 57 40 227 786 90 0 460 +785 422 409 10 234 635 90 0 132 +786 66 156 10 349 1021 90 0 869 +787 485 86 20 286 841 90 0 710 +788 389 428 20 225 648 90 0 486 +789 117 467 10 254 794 90 0 331 +790 475 477 -20 822 1297 90 809 0 +791 429 27 -20 1064 1449 90 889 0 +792 339 60 -30 209 685 90 386 0 +793 381 494 -10 633 1024 90 527 0 +794 218 321 20 517 939 90 0 893 +795 64 101 -20 468 922 90 481 0 +796 343 254 20 126 602 90 0 755 +797 478 464 10 312 733 90 0 68 +798 423 286 20 330 577 90 0 239 +799 198 9 -20 540 1041 90 764 0 +800 225 196 10 59 602 90 0 984 +801 374 190 -30 137 520 90 726 0 +802 462 14 20 712 1232 90 0 550 +803 347 54 10 579 1161 90 0 874 +804 231 195 20 262 787 0 0 1027 +805 72 96 -30 965 1499 90 209 0 +806 489 87 20 289 780 90 0 318 +807 443 313 -20 333 823 90 655 0 +808 233 204 20 49 515 90 0 988 +809 477 483 20 554 1007 90 0 790 +810 459 368 -30 240 566 90 534 0 +811 95 277 -10 915 1264 90 818 0 +812 16 460 20 908 1383 90 0 614 +813 100 266 20 150 633 90 0 840 +814 288 53 -10 720 1203 90 838 0 +815 211 386 20 141 455 90 0 658 +816 144 439 -30 490 1042 90 81 0 +817 224 314 -10 935 1265 90 464 0 +818 79 291 10 313 774 90 0 811 +819 95 235 10 155 388 90 0 886 +820 7 123 30 274 734 90 0 509 +821 91 217 -10 482 947 90 491 0 +822 105 27 10 423 857 90 0 872 +823 101 385 20 201 802 90 0 681 +824 238 210 30 580 998 90 0 355 +825 439 67 10 263 748 90 0 154 +826 435 267 -10 1034 1401 90 638 0 +827 443 64 -10 561 1073 90 932 0 +828 92 234 -10 699 1081 90 246 0 +829 450 265 10 215 727 90 0 255 +830 102 27 -10 552 1096 90 190 0 +831 492 94 -20 461 1049 90 419 0 +832 440 63 -10 643 1176 90 35 0 +833 453 367 -20 876 1269 90 620 0 +834 15 69 10 296 586 90 0 557 +835 489 17 10 585 1005 90 0 146 +836 335 255 20 85 494 90 0 694 +837 419 418 10 238 729 90 0 568 +838 292 41 10 594 943 90 0 814 +839 489 27 10 822 1331 90 0 608 +840 96 270 -20 155 712 90 813 0 +841 461 369 -20 412 800 90 959 0 +842 105 22 30 270 823 0 0 1028 +843 479 121 -20 401 1045 90 111 0 +844 207 223 10 447 772 90 0 22 +845 17 458 -20 1024 1422 90 275 0 +846 186 7 -30 278 778 90 328 0 +847 465 168 -30 613 1125 90 928 0 +848 416 288 -30 1058 1521 90 7 0 +849 388 418 10 217 719 90 0 555 +850 92 233 -10 570 1028 90 943 0 +851 179 492 10 441 989 90 0 739 +852 132 55 10 385 819 90 0 513 +853 485 24 20 326 729 0 0 1008 +854 388 331 20 160 529 90 0 457 +855 217 323 -10 133 764 90 933 0 +856 281 164 20 91 629 90 0 477 +857 169 340 -10 467 1075 90 954 0 +858 491 20 -10 620 1157 90 288 0 +859 279 42 40 210 744 90 0 421 +860 439 243 -20 979 1439 90 523 0 +861 391 334 -20 215 657 90 783 0 +862 96 244 -20 1133 1578 90 999 0 +863 441 273 -10 615 1260 90 141 0 +864 477 478 20 696 1239 90 0 280 +865 56 434 -10 632 1188 90 317 0 +866 12 463 -20 519 1033 90 570 0 +867 458 164 -10 225 664 90 542 0 +868 446 65 20 269 819 90 0 270 +869 71 156 -10 641 1108 90 786 0 +870 65 153 -10 385 800 90 291 0 +871 8 118 20 844 1373 0 0 1012 +872 102 29 -10 592 1241 90 822 0 +873 315 265 -20 634 982 90 155 0 +874 343 62 -10 873 1525 90 803 0 +875 384 16 20 764 1088 0 0 1018 +876 67 105 10 354 846 90 0 284 +877 478 118 20 825 1353 90 0 753 +878 73 101 -10 869 1503 90 416 0 +879 200 14 10 241 713 90 0 445 +880 114 225 -10 462 925 90 712 0 +881 460 293 -10 857 1441 90 554 0 +882 51 447 10 280 684 90 0 490 +883 418 295 20 885 1318 0 0 1025 +884 282 139 20 115 506 90 0 230 +885 477 122 -40 705 1105 90 175 0 +886 91 266 -10 512 1104 90 819 0 +887 16 463 20 649 1090 90 0 408 +888 228 199 -30 502 916 90 286 0 +889 435 20 20 728 1184 90 0 791 +890 467 195 10 223 712 90 0 469 +891 469 132 10 707 1071 90 0 892 +892 465 136 -10 689 1282 90 891 0 +893 246 255 -20 543 1153 90 794 0 +894 49 75 -20 707 959 90 559 0 +895 66 98 -20 737 1204 90 316 0 +896 166 32 10 233 814 90 0 935 +897 326 466 30 515 1054 90 0 202 +898 202 186 -20 405 887 90 359 0 +899 467 285 20 219 666 90 0 289 +900 290 136 -10 334 830 90 136 0 +901 341 58 -10 212 656 90 410 0 +902 121 219 -20 132 659 90 40 0 +903 107 35 -10 854 1173 90 127 0 +904 216 319 -20 147 561 90 130 0 +905 134 288 20 668 1234 0 0 1024 +906 89 270 -20 335 902 90 463 0 +907 136 52 -20 572 1004 90 544 0 +908 462 167 -20 340 844 90 293 0 +909 340 54 10 241 745 90 0 165 +910 80 286 10 351 926 90 0 315 +911 38 301 -10 409 1172 90 912 0 +912 25 307 10 239 769 90 0 911 +913 470 139 10 514 885 90 0 539 +914 270 400 10 151 703 90 0 86 +915 204 187 -10 578 1082 90 732 0 +916 460 171 -10 704 1226 90 167 0 +917 399 106 -20 708 1206 90 677 0 +918 197 267 10 378 830 0 0 1002 +919 77 350 -20 700 1355 90 393 0 +920 91 231 30 391 840 90 0 227 +921 398 103 -10 477 1069 90 989 0 +922 35 303 20 221 571 90 0 62 +923 231 204 -10 660 950 90 667 0 +924 311 266 10 63 465 90 0 737 +925 416 420 -20 527 883 90 104 0 +926 231 203 20 115 528 90 0 715 +927 4 116 -20 412 885 90 222 0 +928 417 217 30 170 753 90 0 847 +929 268 52 -20 876 1205 90 63 0 +930 345 144 30 388 820 90 0 766 +931 368 85 30 202 661 90 0 163 +932 441 65 10 265 690 90 0 827 +933 201 270 10 52 702 90 0 855 +934 0 293 30 331 897 90 0 126 +935 167 24 -10 508 896 90 896 0 +936 186 464 -10 434 958 90 725 0 +937 7 292 -10 246 731 90 61 0 +938 80 290 10 213 692 90 0 153 +939 405 455 -10 781 1050 90 512 0 +940 439 312 30 198 646 90 0 770 +941 300 108 10 150 612 90 0 686 +942 478 121 -30 578 1050 90 94 0 +943 92 232 10 196 668 90 0 850 +944 111 463 -10 694 1099 90 425 0 +945 132 294 -10 194 782 90 533 0 +946 134 285 -20 922 1350 90 518 0 +947 316 284 20 311 768 90 0 588 +948 56 428 20 263 824 90 0 96 +949 232 47 10 203 764 90 0 767 +950 466 291 10 406 956 90 0 233 +951 341 257 20 234 681 90 0 495 +952 420 213 -20 202 876 90 651 0 +953 116 152 -30 526 902 90 778 0 +954 163 337 10 123 808 90 0 857 +955 440 7 20 308 714 90 0 326 +956 208 222 -10 410 991 90 643 0 +957 485 95 10 281 825 90 0 587 +958 97 385 -20 310 825 90 258 0 +959 462 367 20 342 685 90 0 841 +960 455 365 20 235 731 90 0 304 +961 492 95 30 603 1089 90 0 58 +962 405 450 20 253 774 90 0 743 +963 371 193 20 133 713 90 0 987 +964 234 202 -20 145 684 90 615 0 +965 404 103 -20 222 772 90 3 0 +966 24 41 10 383 775 90 0 635 +967 67 334 20 317 814 90 0 18 +968 207 227 10 48 522 90 0 461 +969 277 403 10 210 650 90 0 268 +970 15 457 20 313 832 90 0 729 +971 217 319 10 539 1101 90 0 628 +972 111 467 20 408 836 90 0 974 +973 378 493 -20 274 759 90 28 0 +974 112 465 -20 419 1009 90 972 0 +975 173 25 -30 753 1206 90 497 0 +976 421 292 20 176 714 90 0 458 +977 74 146 30 204 555 90 0 390 +978 178 491 -10 302 945 90 671 0 +979 204 185 -20 503 973 90 442 0 +980 319 470 10 230 784 90 0 574 +981 163 331 40 118 326 90 0 782 +982 470 125 -10 253 809 90 707 0 +983 315 121 10 355 882 90 0 548 +984 166 34 -10 231 823 90 800 0 +985 284 140 40 115 584 90 0 756 +986 85 288 20 169 729 90 0 680 +987 376 190 -20 258 563 90 963 0 +988 238 203 -20 305 712 90 808 0 +989 399 104 10 660 1070 90 0 921 +990 472 481 20 320 936 90 0 43 +991 46 74 20 428 866 90 0 763 +992 401 255 30 394 1029 90 0 583 +993 475 480 -10 586 1162 90 584 0 +994 485 27 -20 900 1411 90 718 0 +995 476 174 -20 675 1123 90 602 0 +996 330 242 30 422 876 0 0 1011 +997 332 249 30 82 612 90 0 120 +998 375 80 -30 340 808 90 388 0 +999 94 235 20 156 667 90 0 862 +1000 287 144 20 635 1088 90 0 398 +1001 13 459 -20 407 957 90 413 0 +1002 197 267 -10 378 830 90 918 0 +1003 418 218 -20 740 1264 90 15 0 +1004 168 24 -10 522 1065 90 484 0 +1005 100 394 -10 778 1294 90 431 0 +1006 476 94 -20 274 695 90 323 0 +1007 466 165 -30 580 972 90 468 0 +1008 485 24 -20 326 729 90 853 0 +1009 232 42 -10 422 721 90 214 0 +1010 181 6 -20 471 959 90 624 0 +1011 330 242 -30 422 876 90 996 0 +1012 8 118 -20 844 1373 90 871 0 +1013 111 459 -20 970 1378 90 538 0 +1014 64 426 -10 931 1454 90 185 0 +1015 286 159 -20 290 836 90 5 0 +1016 197 11 -10 479 918 90 426 0 +1017 459 372 -20 471 927 90 580 0 +1018 384 16 -20 764 1088 90 875 0 +1019 269 48 -20 709 1003 90 192 0 +1020 417 417 -10 832 1142 90 24 0 +1021 428 25 -20 937 1448 90 525 0 +1022 439 268 -10 749 1316 90 330 0 +1023 67 108 -10 231 625 90 313 0 +1024 134 288 -20 668 1234 90 905 0 +1025 418 295 -20 885 1318 90 883 0 +1026 349 158 -20 854 1289 90 540 0 +1027 231 195 -20 262 787 90 804 0 +1028 105 22 -30 270 823 90 842 0 +1029 133 53 -20 453 935 90 428 0 +1030 39 50 -30 290 739 90 564 0 +1031 459 295 -20 1027 1455 90 650 0 +1032 357 26 -20 936 1428 90 42 0 +1033 66 336 -10 483 1014 90 688 0 +1034 464 134 -20 844 1310 90 507 0 +1035 391 413 -10 845 1237 90 685 0 +1036 146 439 -10 413 936 90 124 0 +1037 91 235 -10 962 1367 90 161 0 +1038 220 319 -30 732 1276 90 376 0 +1039 243 399 -10 585 1034 90 260 0 +1040 272 403 -30 310 739 90 213 0 +1041 480 455 -10 908 1394 90 19 0 +1042 204 269 -30 49 498 90 581 0 +1043 151 207 -10 502 1018 90 519 0 +1044 238 204 -20 392 807 90 277 0 +1045 312 267 -10 703 1100 90 576 0 +1046 379 196 -20 443 935 90 31 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1102.txt b/jsprit-instances/instances/lilim/1000/LC1102.txt new file mode 100644 index 00000000..adbc6c9b --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1102.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 10 200 270 90 0 307 +2 5 297 -30 955 1017 90 126 0 +3 355 177 -20 0 1607 90 58 0 +4 78 346 -10 355 403 90 44 0 +5 286 159 -30 530 597 90 478 0 +6 322 465 10 226 291 90 0 980 +7 393 408 30 0 1521 90 0 443 +8 89 216 -20 495 562 90 545 0 +9 76 345 -30 0 1536 90 652 0 +10 410 285 20 499 556 90 0 556 +11 472 189 -20 0 1504 90 309 0 +12 270 49 -20 925 970 90 192 0 +13 219 325 10 520 563 90 0 794 +14 437 12 20 557 613 90 0 700 +15 418 218 -10 974 1030 90 446 0 +16 20 488 10 754 820 90 0 387 +17 77 347 20 436 505 90 0 518 +18 73 346 10 726 772 90 0 89 +19 480 455 -40 1123 1179 90 187 0 +20 129 292 -20 552 610 90 329 0 +21 337 257 -30 805 863 90 992 0 +22 237 254 -10 0 1721 90 699 0 +23 131 220 -20 0 1612 90 610 0 +24 417 417 10 954 1020 90 0 568 +25 287 143 10 748 793 0 0 1001 +26 379 80 -40 737 789 90 137 0 +27 87 285 -20 709 764 90 967 0 +28 374 489 20 269 339 90 0 775 +29 440 247 20 717 779 90 0 162 +30 281 137 -40 370 416 90 985 0 +31 379 196 20 665 714 90 0 276 +32 297 102 10 214 281 90 0 243 +33 39 76 10 328 399 90 0 352 +34 35 306 -20 369 440 90 285 0 +35 435 68 10 0 1475 90 0 582 +36 245 251 10 60 130 90 0 277 +37 409 88 20 655 715 90 0 696 +38 273 55 20 196 246 90 0 929 +39 163 340 -10 468 513 90 954 0 +40 129 223 20 274 340 90 0 119 +41 371 200 10 0 1604 90 0 84 +42 357 26 20 0 1486 90 0 229 +43 470 473 10 1221 1270 90 0 797 +44 77 344 10 254 319 90 0 4 +45 478 461 -30 462 529 90 363 0 +46 128 291 -30 639 706 90 249 0 +47 111 113 10 632 694 90 0 773 +48 164 21 20 578 639 90 0 765 +49 21 485 -30 487 540 90 79 0 +50 108 26 -10 423 491 90 190 0 +51 424 286 10 0 1557 0 0 1021 +52 200 270 20 0 1681 90 0 444 +53 7 300 30 1056 1104 90 0 912 +54 433 31 10 285 333 90 0 326 +55 420 295 -20 0 1559 90 655 0 +56 451 367 -20 1134 1195 90 304 0 +57 118 157 20 403 465 90 0 953 +58 489 101 20 0 1453 90 0 3 +59 200 261 -30 945 1017 90 654 0 +60 476 483 -10 657 722 90 584 0 +61 30 302 10 572 632 90 0 922 +62 8 300 -10 1131 1211 90 937 0 +63 275 45 -10 444 515 90 262 0 +64 238 46 40 735 784 90 0 589 +65 152 206 -10 910 973 90 298 0 +66 99 218 30 154 205 90 0 821 +67 393 410 -20 913 982 90 206 0 +68 480 460 20 549 627 90 0 575 +69 337 256 -20 154 201 90 836 0 +70 389 300 -10 0 1587 90 638 0 +71 90 237 20 0 1574 90 0 862 +72 321 280 30 143 194 90 0 751 +73 417 218 -10 0 1564 90 847 0 +74 64 108 10 473 539 90 0 234 +75 57 432 -20 973 1033 90 865 0 +76 356 24 20 249 323 90 0 467 +77 143 207 30 0 1619 90 0 968 +78 221 325 10 0 1654 90 0 817 +79 22 483 30 325 389 90 0 49 +80 24 65 -30 0 1442 90 172 0 +81 141 431 30 362 423 90 0 666 +82 202 9 -20 0 1489 90 764 0 +83 20 48 10 1294 1358 90 0 500 +84 457 163 -10 284 346 90 41 0 +85 470 290 -10 835 895 90 289 0 +86 268 400 -20 869 928 90 455 0 +87 337 251 -10 0 1647 90 221 0 +88 366 20 -20 874 927 90 730 0 +89 72 344 -10 0 1533 90 18 0 +90 149 203 -20 553 597 90 278 0 +91 55 428 -20 511 568 90 571 0 +92 189 7 30 0 1484 90 0 201 +93 397 18 -20 519 575 90 182 0 +94 481 122 -20 607 653 90 111 0 +95 20 73 10 0 1444 90 0 750 +96 54 430 20 610 652 90 0 404 +97 74 350 10 915 955 90 0 919 +98 202 8 10 0 1488 90 0 156 +99 406 285 -20 0 1575 90 848 0 +100 460 2 20 655 720 90 0 994 +101 441 244 10 909 955 0 0 1016 +102 1 293 -10 0 1482 90 181 0 +103 115 465 10 409 465 90 0 944 +104 422 420 -20 0 1493 90 295 0 +105 75 347 10 810 872 0 0 1029 +106 141 428 -20 0 1526 90 412 0 +107 404 264 -20 395 462 90 228 0 +108 398 23 10 270 334 90 0 173 +109 148 211 20 167 233 90 0 786 +110 362 22 20 1050 1121 90 0 909 +111 479 127 20 412 478 90 0 94 +112 443 246 20 536 593 90 0 250 +113 22 37 10 0 1422 90 0 347 +114 65 100 10 763 811 90 0 284 +115 404 447 20 250 280 90 0 743 +116 102 264 10 148 215 90 0 189 +117 444 271 10 633 688 90 0 248 +118 325 466 40 0 1506 90 0 202 +119 124 219 -20 571 615 90 40 0 +120 335 243 20 428 495 90 0 996 +121 26 42 20 455 519 90 0 966 +122 113 106 20 198 260 90 0 461 +123 399 450 -10 971 1056 90 440 0 +124 146 439 -20 642 707 90 208 0 +125 162 336 20 0 1611 90 0 510 +126 2 295 30 774 828 90 0 2 +127 122 35 10 0 1484 90 0 698 +128 346 60 10 1027 1086 90 0 668 +129 93 213 -30 0 1573 90 870 0 +130 218 316 20 73 134 90 0 537 +131 116 156 10 495 557 90 0 159 +132 419 422 -10 0 1493 90 302 0 +133 467 141 10 0 1492 90 0 891 +134 187 491 -20 771 854 90 345 0 +135 433 25 20 0 1444 90 0 724 +136 286 137 -40 0 1616 90 305 0 +137 370 82 40 0 1528 90 0 26 +138 132 290 10 818 898 90 0 225 +139 435 11 40 0 1432 90 0 645 +140 206 261 -30 1050 1104 90 581 0 +141 428 291 10 698 764 90 0 647 +142 95 384 -20 719 785 90 385 0 +143 205 223 -30 491 544 90 371 0 +144 463 140 10 295 366 90 0 539 +145 343 47 -10 0 1511 90 760 0 +146 435 62 30 1156 1218 90 0 965 +147 387 488 -20 987 1046 90 636 0 +148 121 157 10 220 279 90 0 291 +149 182 463 30 372 440 90 0 816 +150 92 216 -30 0 1573 90 920 0 +151 370 83 20 357 419 90 0 163 +152 444 242 10 441 501 90 0 435 +153 90 285 -20 981 1042 90 840 0 +154 446 64 10 600 665 90 0 827 +155 312 264 20 131 179 90 0 199 +156 208 11 -10 0 1492 90 98 0 +157 442 247 -20 623 689 90 336 0 +158 140 431 30 280 324 90 0 516 +159 118 153 -10 949 1028 90 131 0 +160 134 428 20 935 992 90 0 971 +161 91 235 10 1140 1188 90 0 561 +162 406 257 -20 0 1578 90 29 0 +163 377 76 -20 638 699 90 151 0 +164 474 96 30 271 327 90 0 622 +165 346 57 -10 0 1519 90 901 0 +166 393 301 30 482 545 90 0 515 +167 412 214 10 165 215 90 0 860 +168 210 398 -20 592 647 90 815 0 +169 346 150 -10 948 998 90 756 0 +170 62 453 -30 515 584 90 219 0 +171 437 61 -10 1063 1127 90 989 0 +172 87 96 30 0 1510 90 0 80 +173 367 83 -10 0 1531 90 108 0 +174 91 268 10 869 931 90 0 567 +175 459 145 40 233 291 90 0 194 +176 63 444 -20 1084 1146 90 240 0 +177 433 27 -20 628 694 90 470 0 +178 60 454 -10 892 952 90 364 0 +179 478 99 -20 0 1461 90 323 0 +180 485 454 10 0 1423 0 0 1003 +181 6 292 10 316 360 90 0 102 +182 398 20 20 333 394 90 0 93 +183 248 251 20 2 63 90 0 714 +184 433 15 20 297 344 90 0 955 +185 64 426 10 1162 1223 90 0 538 +186 154 207 -30 0 1629 90 282 0 +187 481 456 40 1028 1091 90 0 19 +188 380 498 10 523 582 90 0 793 +189 88 286 -10 795 859 90 116 0 +190 111 23 10 266 326 90 0 50 +191 199 187 20 433 490 90 0 898 +192 269 48 20 0 1532 90 0 12 +193 367 178 -10 0 1597 90 290 0 +194 452 163 -40 0 1515 90 175 0 +195 431 28 20 0 1448 90 0 791 +196 8 116 20 894 957 0 0 1006 +197 233 47 20 356 415 90 0 198 +198 237 43 -20 631 702 90 197 0 +199 320 262 -20 585 656 90 155 0 +200 188 4 20 413 455 90 0 445 +201 180 6 -30 0 1481 90 92 0 +202 328 466 -40 847 906 90 118 0 +203 393 12 10 0 1457 90 0 706 +204 409 90 20 0 1509 90 0 205 +205 406 87 -20 936 999 90 204 0 +206 394 407 20 733 789 90 0 67 +207 358 183 -30 932 1005 90 402 0 +208 186 461 20 220 284 90 0 124 +209 38 72 30 420 496 90 0 559 +210 323 471 -10 0 1502 90 268 0 +211 224 192 10 215 274 90 0 888 +212 278 46 20 205 269 90 0 421 +213 272 403 -10 494 555 90 621 0 +214 232 42 10 545 599 0 0 1038 +215 18 63 -20 716 792 90 381 0 +216 58 458 10 702 774 90 0 349 +217 416 417 -20 1057 1099 90 925 0 +218 205 230 -10 203 263 90 745 0 +219 65 453 30 423 490 90 0 170 +220 421 294 -20 883 953 90 738 0 +221 434 245 10 1377 1416 90 0 87 +222 2 116 20 526 586 90 0 662 +223 411 421 -10 862 917 90 837 0 +224 315 260 10 223 278 90 0 873 +225 136 288 -10 1023 1063 90 138 0 +226 173 490 -10 406 462 90 303 0 +227 90 232 -20 682 732 90 463 0 +228 402 265 20 306 365 90 0 107 +229 361 14 -20 686 738 90 42 0 +230 348 147 -10 845 914 90 343 0 +231 385 295 -20 0 1592 90 617 0 +232 394 23 20 1271 1326 90 0 272 +233 466 295 -10 0 1514 90 487 0 +234 71 103 -10 0 1503 90 74 0 +235 125 29 30 0 1481 90 0 596 +236 25 65 -20 1005 1057 90 777 0 +237 58 449 -30 993 1042 90 492 0 +238 246 398 40 148 199 90 0 626 +239 423 294 10 0 1556 90 0 637 +240 59 459 20 0 1451 90 0 176 +241 348 145 20 763 813 90 0 540 +242 477 97 10 421 495 90 0 419 +243 307 102 -10 0 1576 90 32 0 +244 169 31 -10 0 1501 90 484 0 +245 381 495 -30 705 769 90 973 0 +246 95 234 10 315 362 90 0 383 +247 22 33 10 735 803 90 0 452 +248 435 268 -10 1100 1154 90 117 0 +249 135 293 30 0 1612 90 0 46 +250 439 266 -20 0 1545 90 112 0 +251 269 402 20 587 648 90 0 252 +252 267 400 -20 779 836 90 251 0 +253 473 196 -30 564 642 90 721 0 +254 445 237 -20 349 402 90 508 0 +255 461 284 10 275 340 90 0 423 +256 167 339 10 648 710 90 0 857 +257 26 43 -30 365 427 90 536 0 +258 101 386 -20 349 415 90 823 0 +259 342 54 -30 553 616 90 386 0 +260 243 399 -10 782 837 90 772 0 +261 288 44 -40 0 1525 90 859 0 +262 274 48 10 368 405 90 0 63 +263 360 184 -20 846 906 90 670 0 +264 23 67 -10 0 1443 90 532 0 +265 6 296 10 863 926 0 0 1012 +266 249 258 -20 910 974 90 311 0 +267 421 415 30 297 364 0 0 1017 +268 319 468 10 289 353 90 0 210 +269 50 438 20 0 1460 90 0 713 +270 440 61 -10 971 1032 90 825 0 +271 17 65 20 625 699 90 0 630 +272 323 118 -20 0 1584 90 232 0 +273 402 281 20 886 924 90 0 717 +274 71 153 20 746 816 0 0 1025 +275 52 432 -10 789 843 90 681 0 +276 378 199 -20 761 804 90 31 0 +277 238 204 -10 566 634 90 36 0 +278 208 184 20 146 192 90 0 90 +279 376 195 -30 576 616 90 726 0 +280 473 475 -10 0 1418 90 482 0 +281 215 395 20 865 928 0 0 1027 +282 123 222 30 376 430 90 0 186 +283 436 241 -10 1271 1333 90 757 0 +284 70 100 -10 1119 1191 90 114 0 +285 73 328 20 193 270 90 0 34 +286 241 205 -10 0 1689 90 949 0 +287 250 405 20 303 370 90 0 506 +288 483 14 -20 0 1403 90 727 0 +289 466 287 10 467 525 90 0 85 +290 467 114 10 1159 1223 90 0 193 +291 120 159 -10 306 377 90 148 0 +292 408 84 10 745 814 90 0 514 +293 413 217 20 230 289 90 0 469 +294 338 142 40 204 256 90 0 930 +295 483 457 20 735 811 90 0 104 +296 479 169 -10 774 834 90 377 0 +297 95 224 -10 0 1577 90 819 0 +298 122 216 10 461 537 90 0 65 +299 477 179 -10 0 1497 90 546 0 +300 406 99 20 367 438 90 0 917 +301 44 47 20 0 1445 90 0 878 +302 487 450 10 929 993 90 0 132 +303 172 488 10 310 374 90 0 226 +304 460 374 20 753 831 90 0 56 +305 279 138 40 281 320 90 0 136 +306 338 147 10 135 193 90 0 766 +307 395 295 -10 677 736 90 1 0 +308 195 185 20 335 399 90 0 395 +309 463 194 20 220 279 90 0 11 +310 30 72 -20 0 1452 90 642 0 +311 244 254 20 723 787 90 0 266 +312 317 261 20 398 473 90 0 676 +313 67 108 10 297 346 90 0 795 +314 442 310 -30 643 698 90 807 0 +315 63 336 -10 822 861 90 380 0 +316 109 107 -20 357 416 90 705 0 +317 100 387 -20 0 1531 90 378 0 +318 494 94 10 634 692 90 0 961 +319 343 49 10 650 710 90 0 803 +320 40 52 40 546 591 90 0 390 +321 319 124 20 400 465 90 0 983 +322 94 97 20 285 334 0 0 1043 +323 476 94 20 334 396 90 0 179 +324 283 47 10 373 420 90 0 838 +325 398 325 -20 774 843 90 748 0 +326 460 13 -10 0 1418 90 54 0 +327 305 107 -20 0 1581 90 659 0 +328 188 12 30 245 309 90 0 846 +329 136 290 20 272 332 90 0 20 +330 439 268 10 0 1545 90 0 768 +331 112 467 10 505 557 0 0 1011 +332 181 469 -10 468 536 90 425 0 +333 358 18 10 0 1479 90 0 639 +334 459 10 10 0 1416 90 0 384 +335 199 268 -10 284 368 90 933 0 +336 436 237 20 186 264 90 0 157 +337 318 280 20 319 384 90 0 588 +338 64 99 10 853 904 90 0 895 +339 394 333 -20 0 1568 90 783 0 +340 366 93 20 936 989 0 0 1023 +341 95 391 -20 909 973 90 948 0 +342 391 425 20 842 909 90 0 558 +343 344 146 10 496 529 90 0 230 +344 198 12 10 582 631 90 0 426 +345 186 472 20 564 633 90 0 134 +346 390 408 -10 0 1523 90 605 0 +347 19 43 -10 1203 1259 90 113 0 +348 307 108 10 777 847 90 0 900 +349 59 457 -10 810 848 90 216 0 +350 49 451 20 340 409 90 0 752 +351 125 39 20 245 318 90 0 475 +352 61 147 -10 0 1519 90 33 0 +353 317 123 20 497 554 90 0 548 +354 392 426 -20 666 722 90 788 0 +355 237 213 -40 846 917 90 715 0 +356 71 333 10 0 1537 90 0 411 +357 304 97 -30 407 466 90 520 0 +358 196 462 10 955 1003 90 0 739 +359 224 191 20 312 359 90 0 824 +360 37 51 -30 0 1443 90 564 0 +361 491 25 -20 0 1405 90 718 0 +362 270 401 20 217 268 90 0 969 +363 474 461 30 307 379 90 0 45 +364 66 448 10 270 345 90 0 178 +365 337 241 -10 0 1647 90 542 0 +366 269 46 -20 733 794 90 632 0 +367 22 41 -10 1110 1164 90 635 0 +368 198 271 -10 0 1678 90 689 0 +369 287 43 10 555 609 0 0 1024 +370 446 63 -20 697 750 90 660 0 +371 200 229 30 301 355 90 0 143 +372 48 72 -20 711 768 90 627 0 +373 465 142 10 0 1494 90 0 692 +374 123 155 -20 1143 1209 90 418 0 +375 16 497 20 1038 1123 90 0 436 +376 220 319 -20 971 1037 90 855 0 +377 484 171 10 680 736 90 0 296 +378 55 431 20 694 752 90 0 317 +379 428 24 10 0 1447 90 0 525 +380 80 342 10 193 275 90 0 315 +381 16 68 20 521 617 90 0 215 +382 124 56 -10 0 1503 90 675 0 +383 95 218 -10 873 927 90 246 0 +384 481 26 -10 0 1413 90 334 0 +385 145 434 20 462 514 90 0 142 +386 335 57 30 210 261 90 0 259 +387 26 490 -10 1345 1394 90 16 0 +388 324 127 30 143 200 90 0 998 +389 109 114 10 829 871 90 0 603 +390 72 148 -40 0 1529 90 320 0 +391 220 392 -20 970 1015 90 771 0 +392 442 243 -10 996 1052 90 890 0 +393 69 336 -20 440 507 90 813 0 +394 131 226 20 121 183 90 0 417 +395 150 204 -20 639 694 90 308 0 +396 423 217 20 785 849 90 0 741 +397 419 459 -10 785 838 90 512 0 +398 285 163 -30 714 780 90 477 0 +399 203 7 -10 1033 1108 90 501 0 +400 54 445 -20 534 593 90 570 0 +401 109 463 30 0 1479 90 0 612 +402 355 180 30 279 345 90 0 207 +403 13 455 10 381 430 90 0 887 +404 165 337 -20 0 1613 90 96 0 +405 314 124 -10 0 1593 90 874 0 +406 9 124 20 271 336 90 0 927 +407 3 292 20 404 457 90 0 720 +408 16 462 -20 935 986 90 690 0 +409 189 464 -20 856 906 90 535 0 +410 288 154 -20 442 494 90 774 0 +411 90 296 -10 0 1568 90 356 0 +412 138 438 20 832 893 90 0 106 +413 13 459 -20 646 718 90 711 0 +414 461 8 -20 0 1413 90 802 0 +415 96 97 20 217 280 90 0 709 +416 68 99 10 1040 1085 90 0 593 +417 146 205 -20 0 1621 90 394 0 +418 117 152 20 0 1569 90 0 374 +419 481 96 -10 526 577 90 242 0 +420 338 260 20 0 1646 0 0 1040 +421 285 44 -20 0 1526 90 212 0 +422 111 464 10 775 837 90 0 936 +423 468 291 -10 748 798 90 255 0 +424 148 206 -20 458 506 90 511 0 +425 184 464 10 285 344 90 0 332 +426 197 11 -10 0 1490 90 344 0 +427 396 410 10 829 880 0 0 1022 +428 133 53 20 668 720 0 0 1014 +429 132 30 -30 875 926 90 682 0 +430 464 13 20 853 906 90 0 932 +431 100 394 10 0 1527 90 0 606 +432 483 22 10 476 543 90 0 858 +433 93 235 10 951 1012 90 0 723 +434 174 26 -20 1037 1105 90 935 0 +435 436 264 -10 0 1548 90 152 0 +436 24 492 -20 1252 1302 90 375 0 +437 406 94 10 375 430 0 0 1020 +438 234 246 10 0 1718 0 0 1036 +439 315 287 -20 693 754 90 947 0 +440 408 453 10 0 1477 90 0 123 +441 128 225 -20 0 1610 90 604 0 +442 226 191 20 397 459 90 0 804 +443 391 407 -30 0 1523 90 7 0 +444 198 264 -20 770 821 90 52 0 +445 179 7 -20 864 930 90 200 0 +446 425 215 10 699 748 90 0 15 +447 483 27 -20 1322 1384 90 853 0 +448 22 40 30 1012 1080 0 0 1002 +449 479 176 -30 0 1494 90 995 0 +450 476 102 20 797 866 90 0 646 +451 386 405 20 206 266 90 0 578 +452 22 38 -10 929 980 90 247 0 +453 440 241 -20 0 1544 90 651 0 +454 182 14 -10 1062 1116 90 634 0 +455 266 405 20 680 745 90 0 86 +456 357 181 20 367 441 90 0 565 +457 395 332 10 593 648 90 0 735 +458 423 290 10 0 1557 90 0 591 +459 104 28 20 0 1469 90 0 872 +460 131 56 10 0 1507 90 0 907 +461 111 110 -20 550 590 90 122 0 +462 97 93 -10 0 1515 90 749 0 +463 90 274 20 411 458 90 0 227 +464 214 394 -10 0 1586 90 851 0 +465 6 114 -30 0 1455 90 820 0 +466 375 191 -20 473 531 90 963 0 +467 356 21 -20 414 452 90 76 0 +468 466 165 -20 747 805 90 908 0 +469 415 223 -20 1257 1302 90 293 0 +470 397 20 20 433 477 90 0 177 +471 241 403 -30 686 744 90 597 0 +472 69 334 -20 0 1535 90 474 0 +473 152 210 20 105 163 90 0 778 +474 67 335 20 629 684 90 0 472 +475 126 30 -20 495 558 90 351 0 +476 390 423 10 290 336 90 0 528 +477 285 162 30 625 688 90 0 398 +478 285 158 30 340 405 90 0 5 +479 406 96 20 280 342 90 0 746 +480 459 374 -20 848 917 90 580 0 +481 67 109 20 388 438 90 0 643 +482 468 475 10 313 373 90 0 280 +483 438 31 10 348 413 90 0 550 +484 168 24 10 770 816 90 0 244 +485 267 394 -10 962 1027 90 914 0 +486 406 450 20 405 464 90 0 939 +487 460 288 10 213 265 90 0 233 +488 224 203 -20 0 1681 90 544 0 +489 21 487 10 582 629 90 0 701 +490 21 488 -10 0 1404 90 664 0 +491 87 217 -30 0 1568 90 600 0 +492 67 452 30 327 402 90 0 237 +493 119 223 -20 853 906 90 742 0 +494 398 428 -20 0 1503 90 962 0 +495 344 262 -10 0 1640 90 755 0 +496 390 301 10 0 1585 90 0 687 +497 167 27 -10 487 536 90 896 0 +498 236 247 -20 0 1720 90 728 0 +499 313 119 30 679 742 0 0 1039 +500 13 51 -10 1366 1425 90 83 0 +501 200 13 10 397 453 90 0 399 +502 0 120 30 431 492 90 0 509 +503 202 4 -20 950 1004 90 594 0 +504 343 144 -30 0 1593 90 754 0 +505 94 383 -30 636 687 90 958 0 +506 250 411 -20 492 554 90 287 0 +507 464 134 20 0 1491 0 0 1010 +508 443 237 20 248 318 90 0 254 +509 4 114 -30 712 769 90 502 0 +510 169 336 -20 838 892 90 125 0 +511 200 178 20 240 298 90 0 424 +512 412 453 10 0 1475 90 0 397 +513 121 151 -20 0 1572 90 562 0 +514 403 93 -10 1131 1181 90 292 0 +515 399 301 -30 584 634 90 166 0 +516 97 387 -30 823 869 90 158 0 +517 176 8 10 0 1481 90 0 964 +518 62 326 -20 0 1532 90 17 0 +519 151 207 10 0 1627 0 0 1018 +520 299 98 30 320 364 90 0 357 +521 334 240 -30 0 1650 90 892 0 +522 92 270 -30 954 1029 90 736 0 +523 444 269 -30 0 1540 90 599 0 +524 132 223 -30 0 1613 90 781 0 +525 428 25 -10 1175 1251 90 379 0 +526 413 421 -10 768 828 90 785 0 +527 382 498 10 619 669 90 0 747 +528 391 429 -10 0 1507 90 476 0 +529 398 97 -20 264 344 90 780 0 +530 192 265 -10 678 721 90 918 0 +531 438 26 -20 0 1442 90 889 0 +532 44 79 10 267 333 90 0 264 +533 137 290 10 176 245 90 0 905 +534 446 319 -30 364 416 90 940 0 +535 175 487 20 248 308 90 0 409 +536 26 45 30 0 1431 90 0 257 +537 147 435 -20 553 607 90 130 0 +538 111 459 -10 0 1483 90 185 0 +539 472 132 -10 767 826 90 144 0 +540 349 158 -20 1050 1093 90 241 0 +541 86 268 -10 689 735 90 818 0 +542 415 216 10 319 384 90 0 365 +543 121 218 -20 191 257 90 902 0 +544 210 185 20 0 1658 90 0 488 +545 98 215 20 218 278 90 0 8 +546 484 174 10 0 1488 90 0 299 +547 328 458 -30 0 1512 90 897 0 +548 313 126 -20 873 923 90 353 0 +549 390 415 20 0 1518 0 0 1008 +550 459 17 -10 1039 1094 90 483 0 +551 481 124 10 505 571 90 0 877 +552 386 414 -10 1109 1162 90 685 0 +553 116 466 -10 318 373 90 789 0 +554 468 295 10 934 987 90 0 650 +555 391 426 -10 0 1509 90 849 0 +556 408 279 -20 682 747 90 10 0 +557 15 68 -10 448 508 90 834 0 +558 392 424 -20 926 1007 90 342 0 +559 88 95 -30 658 712 90 209 0 +560 116 151 20 774 836 0 0 1030 +561 240 250 -10 0 1724 90 161 0 +562 123 159 20 156 216 90 0 513 +563 89 290 -30 225 300 90 680 0 +564 39 50 30 440 511 90 0 360 +565 359 179 -20 465 529 90 456 0 +566 338 257 -20 0 1646 90 951 0 +567 92 236 -10 1041 1104 90 174 0 +568 413 417 -10 1135 1207 90 24 0 +569 91 101 -20 0 1517 90 805 0 +570 55 449 20 0 1456 90 0 400 +571 57 425 20 260 317 90 0 91 +572 465 287 -20 556 617 90 899 0 +573 320 280 10 221 298 90 0 613 +574 322 468 20 575 625 0 0 1044 +575 483 458 -20 656 708 90 68 0 +576 312 267 -20 862 941 90 702 0 +577 139 291 10 118 187 90 0 945 +578 388 408 -20 361 425 90 451 0 +579 110 459 -10 0 1483 90 882 0 +580 459 372 20 0 1492 90 0 480 +581 204 269 30 49 98 90 0 140 +582 407 98 -10 0 1516 90 35 0 +583 335 256 -30 890 962 90 776 0 +584 471 484 10 0 1413 90 0 60 +585 339 244 30 251 299 90 0 796 +586 89 272 -20 498 555 90 999 0 +587 488 96 10 909 973 90 0 753 +588 316 286 -20 601 662 90 337 0 +589 235 50 -40 813 896 90 64 0 +590 316 258 20 0 1668 0 0 1007 +591 425 288 -10 0 1555 90 458 0 +592 213 397 -20 680 744 90 761 0 +593 113 156 -10 0 1568 90 416 0 +594 199 9 20 853 911 90 0 503 +595 463 167 -10 657 709 90 779 0 +596 129 27 -30 680 745 90 235 0 +597 248 404 30 214 274 90 0 471 +598 405 276 -10 771 848 90 649 0 +599 400 288 30 154 232 90 0 523 +600 61 156 30 462 532 90 0 491 +601 393 20 -10 1190 1222 90 762 0 +602 484 177 20 390 463 90 0 759 +603 108 116 -10 911 973 90 389 0 +604 112 217 20 383 443 90 0 441 +605 389 404 10 267 331 90 0 346 +606 102 391 -10 1098 1161 90 431 0 +607 434 26 10 0 1445 90 0 769 +608 488 26 -10 0 1408 90 839 0 +609 477 120 -10 968 1026 90 885 0 +610 126 220 20 0 1607 90 0 23 +611 439 310 10 198 256 90 0 883 +612 212 319 -30 0 1656 90 401 0 +613 320 283 -10 421 471 90 573 0 +614 17 459 10 1200 1275 90 0 845 +615 236 213 20 0 1695 90 0 975 +616 68 108 10 230 324 90 0 876 +617 390 294 20 853 931 90 0 231 +618 275 42 -10 537 608 90 633 0 +619 423 214 -10 0 1558 90 952 0 +620 460 367 -20 392 450 90 960 0 +621 272 402 10 317 353 90 0 213 +622 478 102 -30 704 775 90 164 0 +623 400 260 40 150 212 90 0 734 +624 181 6 20 678 753 0 0 1045 +625 470 475 30 381 429 90 0 993 +626 245 408 -40 585 652 90 238 0 +627 93 96 20 374 427 90 0 372 +628 218 318 20 884 939 0 0 1037 +629 441 265 40 344 400 0 0 1032 +630 21 64 -20 818 876 90 271 0 +631 356 23 20 309 373 90 0 693 +632 267 44 20 649 693 90 0 366 +633 277 50 10 0 1533 90 0 618 +634 182 4 10 586 659 90 0 454 +635 26 36 10 646 702 90 0 367 +636 384 491 20 897 948 90 0 147 +637 418 290 -10 1172 1221 90 239 0 +638 321 277 10 75 140 90 0 70 +639 358 16 -10 596 641 90 333 0 +640 389 334 -20 0 1572 90 854 0 +641 48 78 -10 0 1469 90 763 0 +642 24 68 20 1282 1337 90 0 310 +643 206 225 -20 0 1684 90 481 0 +644 290 141 -20 645 709 90 884 0 +645 439 15 -40 650 706 90 139 0 +646 359 182 -20 0 1606 90 450 0 +647 413 287 -10 1348 1417 90 141 0 +648 230 49 20 201 253 90 0 767 +649 407 280 10 595 653 90 0 598 +650 459 295 -10 1209 1273 90 554 0 +651 468 199 20 669 730 90 0 453 +652 101 384 30 200 262 90 0 9 +653 170 26 10 855 918 90 0 984 +654 197 270 30 474 548 90 0 59 +655 415 289 20 169 228 90 0 55 +656 203 390 -30 307 361 90 658 0 +657 443 272 10 821 869 90 0 694 +658 210 391 30 202 272 90 0 656 +659 363 22 20 964 1025 90 0 327 +660 352 176 20 126 175 90 0 370 +661 212 223 -10 758 832 90 844 0 +662 8 120 -20 1169 1232 90 222 0 +663 244 250 -10 0 1728 90 938 0 +664 18 484 10 397 444 90 0 490 +665 379 82 -30 827 884 90 931 0 +666 84 346 -30 1095 1157 90 81 0 +667 233 207 10 105 167 90 0 712 +668 344 62 -10 1208 1274 90 128 0 +669 20 489 10 856 901 90 0 731 +670 361 181 20 662 723 90 0 263 +671 174 494 -10 0 1479 90 974 0 +672 49 76 20 0 1469 0 0 1004 +673 390 325 -20 883 929 90 861 0 +674 7 118 20 0 1458 90 0 871 +675 107 26 10 0 1469 90 0 382 +676 312 270 -20 0 1669 90 312 0 +677 399 102 20 0 1524 90 0 719 +678 109 108 10 0 1534 0 0 1009 +679 115 218 10 298 341 90 0 703 +680 88 287 30 0 1568 90 0 563 +681 54 424 10 320 387 90 0 275 +682 125 32 30 407 462 90 0 429 +683 199 12 -10 475 557 90 879 0 +684 457 374 -10 0 1493 90 841 0 +685 391 413 10 1013 1069 90 0 552 +686 304 102 30 505 559 90 0 1000 +687 391 293 -10 768 834 90 496 0 +688 66 336 10 719 778 0 0 1031 +689 132 291 10 0 1610 90 0 368 +690 18 462 20 0 1420 90 0 408 +691 347 62 -20 1121 1176 90 792 0 +692 466 142 -10 0 1493 90 373 0 +693 389 17 -20 993 1049 90 631 0 +694 342 254 -10 0 1642 90 657 0 +695 92 223 -10 0 1574 90 828 0 +696 404 83 -20 831 916 90 37 0 +697 290 46 20 832 896 90 0 814 +698 95 92 -10 0 1513 90 127 0 +699 200 265 10 853 922 90 0 22 +700 435 16 -20 829 895 90 14 0 +701 25 499 -10 1154 1206 90 489 0 +702 319 260 20 489 566 90 0 576 +703 116 225 -10 752 820 90 679 0 +704 402 284 -10 313 367 90 924 0 +705 108 105 20 258 329 90 0 316 +706 386 13 -10 785 878 90 203 0 +707 472 129 -20 312 383 90 982 0 +708 132 57 20 396 443 90 0 852 +709 43 71 -20 525 581 90 415 0 +710 493 91 30 542 599 0 0 1005 +711 12 451 20 0 1423 90 0 413 +712 201 188 -10 526 581 90 667 0 +713 60 428 -20 1059 1137 90 269 0 +714 243 248 -20 243 314 90 183 0 +715 230 197 40 588 645 90 0 355 +716 389 11 20 707 769 90 0 875 +717 401 281 -20 968 1024 90 273 0 +718 459 14 20 372 439 90 0 361 +719 411 95 -20 475 521 90 677 0 +720 0 297 -20 679 737 90 407 0 +721 476 196 30 476 544 90 0 253 +722 458 16 20 313 369 90 0 835 +723 92 230 -10 0 1575 90 433 0 +724 432 24 -20 1000 1056 90 135 0 +725 215 317 10 140 194 90 0 904 +726 371 192 30 190 259 90 0 279 +727 481 20 20 572 631 90 0 288 +728 152 207 20 824 877 90 0 498 +729 14 459 20 559 622 90 0 866 +730 361 17 20 777 832 90 0 88 +731 8 497 -10 959 1006 90 669 0 +732 206 186 -20 891 955 90 808 0 +733 421 218 -30 880 939 90 997 0 +734 402 264 -40 216 273 90 623 0 +735 388 325 -10 971 1026 90 457 0 +736 35 304 30 280 345 90 0 522 +737 321 263 20 680 743 0 0 1046 +738 444 313 20 462 511 90 0 220 +739 188 462 -10 0 1514 90 358 0 +740 400 103 10 546 636 90 0 921 +741 418 221 -20 1150 1223 90 396 0 +742 112 219 20 469 541 90 0 493 +743 408 452 -20 490 564 90 115 0 +744 30 301 10 660 726 90 0 911 +745 205 228 10 110 173 90 0 218 +746 407 88 -20 1035 1083 90 479 0 +747 380 489 -10 1084 1143 90 527 0 +748 395 331 20 690 734 90 0 325 +749 133 26 10 0 1482 90 0 462 +750 21 68 -10 1189 1243 90 95 0 +751 313 282 -30 790 847 90 72 0 +752 53 440 -20 633 684 90 350 0 +753 458 130 -10 0 1494 90 587 0 +754 437 15 30 0 1434 90 0 504 +755 400 286 10 217 276 90 0 495 +756 346 144 10 0 1591 90 0 169 +757 440 244 10 809 874 90 0 283 +758 280 162 -20 158 210 90 856 0 +759 488 173 -20 0 1484 90 602 0 +760 326 118 10 213 272 90 0 145 +761 207 400 20 489 562 90 0 592 +762 391 18 10 1085 1141 90 0 601 +763 37 55 10 730 780 90 0 641 +764 204 15 20 0 1495 90 0 82 +765 173 28 -20 1134 1191 90 48 0 +766 343 148 -10 399 441 90 306 0 +767 231 43 -20 447 513 90 648 0 +768 445 273 -10 725 781 90 330 0 +769 432 27 -10 810 878 90 607 0 +770 439 305 30 0 1538 0 0 1034 +771 208 396 20 401 462 90 0 391 +772 249 407 10 403 455 90 0 260 +773 107 112 -10 728 787 90 47 0 +774 279 159 20 252 301 90 0 410 +775 376 494 -20 334 396 90 28 0 +776 403 262 30 493 547 90 0 583 +777 41 47 20 359 406 90 0 236 +778 96 213 -20 0 1576 90 473 0 +779 461 167 10 470 531 90 0 595 +780 391 99 20 206 268 90 0 529 +781 116 221 30 571 627 90 0 524 +782 165 343 -40 556 613 90 981 0 +783 388 334 20 227 280 90 0 339 +784 130 57 -20 289 365 90 979 0 +785 422 409 10 234 290 90 0 526 +786 66 156 -20 653 718 90 109 0 +787 485 86 20 349 413 90 0 806 +788 389 428 20 380 435 90 0 354 +789 117 467 10 254 307 90 0 553 +790 475 477 -20 1028 1091 90 990 0 +791 429 27 -20 1272 1339 90 195 0 +792 339 60 20 274 338 90 0 691 +793 381 494 -10 801 855 90 188 0 +794 218 321 -10 697 759 90 13 0 +795 64 101 -10 667 724 90 313 0 +796 343 254 -30 334 394 90 585 0 +797 478 464 -10 0 1422 90 43 0 +798 423 286 -20 430 477 90 976 0 +799 198 9 20 763 819 90 0 988 +800 225 196 -20 128 174 90 923 0 +801 374 190 20 292 344 90 0 987 +802 462 14 20 0 1417 90 0 414 +803 347 54 -10 836 904 90 319 0 +804 231 195 -20 497 552 90 442 0 +805 72 96 20 1220 1278 90 0 569 +806 489 87 -20 451 499 90 787 0 +807 443 313 30 554 602 90 0 314 +808 233 204 20 198 260 90 0 732 +809 477 483 20 745 817 90 0 864 +810 459 368 10 299 361 90 0 959 +811 95 277 20 1057 1121 0 0 1028 +812 16 460 -20 1112 1180 90 970 0 +813 100 266 20 207 275 90 0 393 +814 288 53 -20 925 997 90 697 0 +815 211 386 20 141 212 90 0 168 +816 144 439 -30 736 797 90 149 0 +817 224 314 -10 0 1665 90 78 0 +818 79 291 10 519 568 90 0 541 +819 95 235 10 155 227 90 0 297 +820 7 123 30 329 399 90 0 465 +821 91 217 -30 692 738 90 66 0 +822 105 27 -30 0 1469 90 842 0 +823 101 385 20 262 320 90 0 258 +824 238 210 -20 757 821 90 359 0 +825 439 67 10 322 386 90 0 270 +826 435 267 -20 1188 1247 90 863 0 +827 443 64 -10 779 854 90 154 0 +828 92 234 10 0 1576 90 0 695 +829 450 265 10 0 1534 0 0 1019 +830 102 27 20 796 852 90 0 903 +831 492 94 -10 724 787 90 957 0 +832 440 63 -20 886 934 90 868 0 +833 453 367 20 0 1500 0 0 1015 +834 15 69 10 0 1438 90 0 557 +835 489 17 -20 764 826 90 722 0 +836 335 255 20 85 124 90 0 69 +837 419 418 10 394 454 90 0 223 +838 292 41 -10 733 804 90 324 0 +839 489 27 10 0 1408 90 0 608 +840 96 270 20 308 367 90 0 153 +841 461 369 10 579 633 90 0 684 +842 105 22 30 339 385 90 0 822 +843 479 121 10 0 1472 90 0 942 +844 207 223 10 585 634 90 0 661 +845 17 458 -10 1297 1360 90 614 0 +846 186 7 -30 500 555 90 328 0 +847 465 168 10 837 902 90 0 73 +848 416 288 20 1251 1328 90 0 99 +849 388 418 10 217 283 90 0 555 +850 92 233 10 768 830 90 0 943 +851 179 492 10 678 752 90 0 464 +852 132 55 -20 573 632 90 708 0 +853 485 24 20 0 1408 90 0 447 +854 388 331 20 160 230 90 0 640 +855 217 323 20 424 473 90 0 376 +856 281 164 20 91 140 90 0 758 +857 169 340 -10 737 806 90 256 0 +858 491 20 -10 0 1401 90 432 0 +859 279 42 40 0 1524 90 0 261 +860 439 243 -10 0 1545 90 167 0 +861 391 334 20 402 470 90 0 673 +862 96 244 -20 1332 1380 90 71 0 +863 441 273 20 903 972 90 0 826 +864 477 478 -20 942 993 90 809 0 +865 56 434 20 0 1467 90 0 75 +866 12 463 -20 0 1415 90 729 0 +867 458 164 20 374 439 90 0 916 +868 446 65 20 516 566 90 0 832 +869 71 156 -30 0 1532 90 977 0 +870 65 153 30 570 614 90 0 129 +871 8 118 -20 1079 1138 90 674 0 +872 102 29 -20 0 1469 90 459 0 +873 315 265 -10 774 841 90 224 0 +874 343 62 10 1300 1364 90 0 405 +875 384 16 -20 892 959 90 716 0 +876 67 105 -10 579 622 90 616 0 +877 478 118 -10 1058 1121 90 551 0 +878 73 101 -20 1313 1375 90 301 0 +879 200 14 10 311 356 90 0 683 +880 114 225 -10 0 1596 90 906 0 +881 460 293 -10 1121 1176 90 950 0 +882 51 447 10 438 501 90 0 579 +883 418 295 -10 1063 1140 90 611 0 +884 282 139 20 188 227 90 0 644 +885 477 122 10 886 924 90 0 609 +886 91 266 -20 0 1575 90 986 0 +887 16 463 -10 836 904 90 403 0 +888 228 199 -10 673 746 90 211 0 +889 435 20 20 0 1439 90 0 531 +890 467 195 10 285 344 90 0 392 +891 469 132 -10 856 923 90 133 0 +892 465 136 30 964 1007 90 0 521 +893 246 255 10 818 877 0 0 1033 +894 49 75 -20 810 857 90 991 0 +895 66 98 -10 944 996 90 338 0 +896 166 32 10 296 352 90 0 497 +897 326 466 30 753 817 90 0 547 +898 202 186 -20 616 676 90 191 0 +899 467 285 20 0 1515 90 0 572 +900 290 136 -10 0 1614 90 348 0 +901 341 58 10 0 1522 90 0 165 +902 121 219 20 132 203 90 0 543 +903 107 35 -20 986 1041 90 830 0 +904 216 319 -10 321 387 90 725 0 +905 134 288 -10 923 979 90 533 0 +906 89 270 10 590 647 90 0 880 +907 136 52 -10 759 817 90 460 0 +908 462 167 20 0 1507 90 0 468 +909 340 54 -20 0 1519 90 110 0 +910 80 286 -30 0 1561 90 934 0 +911 38 301 -10 0 1516 90 744 0 +912 25 307 -30 0 1502 90 53 0 +913 470 139 10 668 731 0 0 1013 +914 270 400 10 151 213 90 0 485 +915 204 187 -20 803 857 90 926 0 +916 460 171 -20 937 994 90 867 0 +917 399 106 -20 925 989 90 300 0 +918 197 267 10 582 626 90 0 530 +919 77 350 -10 997 1058 90 97 0 +920 91 231 30 579 652 90 0 150 +921 398 103 -10 739 807 90 740 0 +922 35 303 -10 0 1513 90 61 0 +923 231 204 20 0 1685 90 0 800 +924 311 266 10 63 126 90 0 704 +925 416 420 20 0 1497 90 0 217 +926 231 203 20 291 352 90 0 915 +927 4 116 -20 618 678 90 406 0 +928 417 217 30 0 1564 0 0 1035 +929 268 52 -20 1003 1079 90 38 0 +930 345 144 -40 568 640 90 294 0 +931 368 85 30 0 1532 90 0 665 +932 441 65 -20 0 1469 90 430 0 +933 201 270 10 108 177 90 0 335 +934 0 293 30 591 637 90 0 910 +935 167 24 20 668 736 90 0 434 +936 186 464 -10 0 1511 90 422 0 +937 7 292 10 246 306 90 0 62 +938 80 290 10 420 484 90 0 663 +939 405 455 -20 883 948 90 486 0 +940 439 312 30 257 324 90 0 534 +941 300 108 10 150 211 0 0 1026 +942 478 121 -10 788 840 90 843 0 +943 92 232 -10 0 1575 90 850 0 +944 111 463 -10 0 1480 90 103 0 +945 132 294 -10 454 521 90 577 0 +946 134 285 20 1104 1168 0 0 1041 +947 316 284 20 510 570 90 0 439 +948 56 428 20 415 482 90 0 341 +949 232 47 10 262 327 90 0 286 +950 466 291 10 656 705 90 0 881 +951 341 257 20 0 1643 90 0 566 +952 420 213 10 509 568 90 0 619 +953 116 152 -20 678 750 90 57 0 +954 163 337 10 277 334 90 0 39 +955 440 7 -20 0 1426 90 184 0 +956 208 222 30 667 734 0 0 1042 +957 485 95 10 281 351 90 0 831 +958 97 385 30 537 598 90 0 505 +959 462 367 -10 481 545 90 810 0 +960 455 365 20 235 306 90 0 620 +961 492 95 -10 0 1447 90 318 0 +962 405 450 20 311 376 90 0 494 +963 371 193 20 133 185 90 0 466 +964 234 202 -10 0 1684 90 517 0 +965 404 103 -30 0 1522 90 146 0 +966 24 41 -20 557 601 90 121 0 +967 67 334 20 532 600 90 0 27 +968 207 227 -30 0 1686 90 77 0 +969 277 403 -20 395 464 90 362 0 +970 15 457 20 462 534 90 0 812 +971 217 319 -20 0 1658 90 160 0 +972 111 467 20 597 647 90 0 978 +973 378 493 30 426 487 90 0 245 +974 112 465 10 685 743 90 0 671 +975 173 25 -20 952 1007 90 615 0 +976 421 292 20 245 287 90 0 798 +977 74 146 30 0 1530 90 0 869 +978 178 491 -20 0 1483 90 972 0 +979 204 185 20 0 1655 90 0 784 +980 319 470 -10 0 1504 90 6 0 +981 163 331 40 118 179 90 0 782 +982 470 125 20 253 316 90 0 707 +983 315 121 -20 590 647 90 321 0 +984 166 34 -10 0 1503 90 653 0 +985 284 140 40 115 172 90 0 30 +986 85 288 20 329 386 90 0 886 +987 376 190 -20 382 439 90 801 0 +988 238 203 -20 0 1686 90 799 0 +989 399 104 10 834 896 90 0 171 +990 472 481 20 477 527 90 0 790 +991 46 74 20 612 682 90 0 894 +992 401 255 30 685 738 90 0 21 +993 475 480 -30 837 911 90 625 0 +994 485 27 -20 1231 1291 90 100 0 +995 476 174 30 874 924 90 0 449 +996 330 242 -20 627 671 90 120 0 +997 332 249 30 82 144 90 0 733 +998 375 80 -30 550 598 90 388 0 +999 94 235 20 227 266 90 0 586 +1000 287 144 -30 0 1622 90 686 0 +1001 287 143 -10 748 793 90 25 0 +1002 22 40 -30 1012 1080 90 448 0 +1003 485 454 -10 0 1423 90 180 0 +1004 49 76 -20 0 1469 90 672 0 +1005 493 91 -30 542 599 90 710 0 +1006 8 116 -20 894 957 90 196 0 +1007 316 258 -20 0 1668 90 590 0 +1008 390 415 -20 0 1518 90 549 0 +1009 109 108 -10 0 1534 90 678 0 +1010 464 134 -20 0 1491 90 507 0 +1011 112 467 -10 505 557 90 331 0 +1012 6 296 -10 863 926 90 265 0 +1013 470 139 -10 668 731 90 913 0 +1014 133 53 -20 668 720 90 428 0 +1015 453 367 -20 0 1500 90 833 0 +1016 441 244 -10 909 955 90 101 0 +1017 421 415 -30 297 364 90 267 0 +1018 151 207 -10 0 1627 90 519 0 +1019 450 265 -10 0 1534 90 829 0 +1020 406 94 -10 375 430 90 437 0 +1021 424 286 -10 0 1557 90 51 0 +1022 396 410 -10 829 880 90 427 0 +1023 366 93 -20 936 989 90 340 0 +1024 287 43 -10 555 609 90 369 0 +1025 71 153 -20 746 816 90 274 0 +1026 300 108 -10 150 211 90 941 0 +1027 215 395 -20 865 928 90 281 0 +1028 95 277 -20 1057 1121 90 811 0 +1029 75 347 -10 810 872 90 105 0 +1030 116 151 -20 774 836 90 560 0 +1031 66 336 -10 719 778 90 688 0 +1032 441 265 -40 344 400 90 629 0 +1033 246 255 -10 818 877 90 893 0 +1034 439 305 -30 0 1538 90 770 0 +1035 417 217 -30 0 1564 90 928 0 +1036 234 246 -10 0 1718 90 438 0 +1037 218 318 -20 884 939 90 628 0 +1038 232 42 -10 545 599 90 214 0 +1039 313 119 -30 679 742 90 499 0 +1040 338 260 -20 0 1646 90 420 0 +1041 134 285 -20 1104 1168 90 946 0 +1042 208 222 -30 667 734 90 956 0 +1043 94 97 -20 285 334 90 322 0 +1044 322 468 -20 575 625 90 574 0 +1045 181 6 -20 678 753 90 624 0 +1046 321 263 -20 680 743 90 737 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1103.txt b/jsprit-instances/instances/lilim/1000/LC1103.txt new file mode 100644 index 00000000..31f653ba --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1103.txt @@ -0,0 +1,1050 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 10 200 270 90 0 307 +2 5 297 -10 955 1017 90 181 0 +3 355 177 -20 0 1607 90 565 0 +4 78 346 30 355 403 90 0 518 +5 286 159 -30 530 597 90 478 0 +6 322 465 10 226 291 90 0 980 +7 393 408 -20 0 1521 90 861 0 +8 89 216 -10 0 1570 90 491 0 +9 76 345 30 0 1536 90 0 18 +10 410 285 20 499 556 90 0 554 +11 472 189 30 0 1504 90 0 913 +12 270 49 30 925 970 0 0 1017 +13 219 325 10 0 1653 90 0 794 +14 437 12 -20 557 613 90 645 0 +15 418 218 20 0 1563 0 0 1044 +16 20 488 -30 754 820 90 49 0 +17 77 347 20 436 505 90 0 411 +18 73 346 -30 0 1533 90 9 0 +19 480 455 -40 1123 1179 90 187 0 +20 129 292 10 552 610 90 0 933 +21 337 257 20 0 1647 90 0 495 +22 237 254 20 0 1721 0 0 1027 +23 131 220 -20 0 1612 90 119 0 +24 417 417 -10 954 1020 90 785 0 +25 287 143 -40 748 793 90 985 0 +26 379 80 20 0 1521 0 0 1021 +27 87 285 -10 709 764 90 818 0 +28 374 489 20 0 1465 90 0 747 +29 440 247 20 717 779 90 0 99 +30 281 137 10 0 1617 90 0 136 +31 379 196 -30 665 714 90 726 0 +32 297 102 10 214 281 90 0 983 +33 39 76 10 328 399 90 0 805 +34 35 306 20 0 1512 0 0 1010 +35 435 68 10 0 1475 90 0 868 +36 245 251 10 60 130 90 0 956 +37 409 88 -10 0 1508 90 437 0 +38 273 55 20 196 246 90 0 369 +39 163 340 30 468 513 90 0 612 +40 129 223 20 274 340 90 0 298 +41 371 200 -10 0 1604 90 144 0 +42 357 26 -20 0 1486 90 659 0 +43 470 473 10 1221 1270 90 0 797 +44 77 344 -20 254 319 90 666 0 +45 478 461 10 0 1424 90 0 68 +46 128 291 10 0 1606 0 0 1016 +47 111 113 -20 632 694 90 316 0 +48 164 21 20 578 639 90 0 244 +49 21 485 30 487 540 90 0 16 +50 108 26 -10 423 491 90 675 0 +51 424 286 -10 0 1557 90 572 0 +52 200 270 20 0 1681 90 0 183 +53 7 300 -10 1056 1104 90 720 0 +54 433 31 10 0 1449 90 0 791 +55 420 295 -20 0 1559 90 650 0 +56 451 367 -10 1134 1195 90 841 0 +57 118 157 -10 0 1573 90 131 0 +58 489 101 20 0 1453 90 0 753 +59 200 261 -20 945 1017 90 143 0 +60 476 483 10 0 1410 90 0 864 +61 30 302 -20 0 1508 90 285 0 +62 8 300 10 1131 1211 90 0 910 +63 275 45 20 444 515 90 0 859 +64 238 46 40 735 784 90 0 589 +65 152 206 10 910 973 90 0 417 +66 99 218 30 154 205 90 0 383 +67 393 410 -20 913 982 90 783 0 +68 480 460 -10 549 627 90 45 0 +69 337 256 20 154 201 90 0 556 +70 389 300 -30 0 1587 90 992 0 +71 90 237 -10 0 1574 90 819 0 +72 321 280 30 143 194 90 0 573 +73 417 218 -10 0 1564 90 595 0 +74 64 108 10 473 539 90 0 114 +75 57 432 -30 973 1033 90 158 0 +76 356 24 20 249 323 90 0 110 +77 143 207 -20 0 1619 90 728 0 +78 221 325 10 0 1654 90 0 376 +79 22 483 -10 0 1409 90 387 0 +80 24 65 -10 0 1442 90 557 0 +81 141 431 30 362 423 90 0 269 +82 202 9 -10 0 1489 90 879 0 +83 20 48 -20 1294 1358 90 630 0 +84 457 163 20 284 346 90 0 779 +85 470 290 10 0 1511 90 0 899 +86 268 400 -30 0 1583 90 213 0 +87 337 251 10 0 1647 90 0 583 +88 366 20 -10 874 927 90 229 0 +89 72 344 -10 0 1533 90 97 0 +90 149 203 -20 553 597 90 109 0 +91 55 428 -30 511 568 90 652 0 +92 189 7 30 0 1484 90 0 846 +93 397 18 -20 0 1460 90 470 0 +94 481 122 -20 607 653 90 982 0 +95 20 73 10 0 1444 90 0 834 +96 54 430 -20 610 652 90 948 0 +97 74 350 10 915 955 90 0 89 +98 202 8 -10 0 1488 90 503 0 +99 406 285 -20 0 1575 90 29 0 +100 460 2 20 655 720 90 0 531 +101 441 244 10 0 1543 90 0 392 +102 1 293 10 0 1482 0 0 1042 +103 115 465 -10 409 465 90 789 0 +104 422 420 20 0 1493 90 0 132 +105 75 347 10 0 1534 90 0 669 +106 141 428 20 0 1526 90 0 385 +107 404 264 -20 0 1580 90 228 0 +108 398 23 10 270 334 90 0 706 +109 148 211 20 167 233 90 0 90 +110 362 22 -20 0 1480 90 76 0 +111 479 127 20 412 478 90 0 692 +112 443 246 -20 536 593 90 336 0 +113 22 37 -20 0 1422 90 452 0 +114 65 100 -10 763 811 90 74 0 +115 404 447 20 250 280 90 0 549 +116 102 264 10 148 215 90 0 862 +117 444 271 -10 633 688 90 487 0 +118 325 466 -20 0 1506 90 574 0 +119 124 219 20 571 615 90 0 23 +120 335 243 20 0 1649 90 0 566 +121 26 42 -10 455 519 90 257 0 +122 113 106 20 0 1536 90 0 355 +123 399 450 20 0 1485 90 0 494 +124 146 439 -20 642 707 90 332 0 +125 162 336 -20 0 1611 90 258 0 +126 2 295 -10 774 828 90 937 0 +127 122 35 10 0 1484 0 0 1011 +128 346 60 -20 1027 1086 90 165 0 +129 93 213 -10 0 1573 90 695 0 +130 218 316 -10 0 1661 90 725 0 +131 116 156 10 495 557 90 0 57 +132 419 422 -20 0 1493 90 104 0 +133 467 141 -10 0 1492 90 707 0 +134 187 491 20 0 1485 0 0 1012 +135 433 25 20 0 1444 90 0 525 +136 286 137 -10 0 1616 90 30 0 +137 370 82 40 0 1528 90 0 724 +138 132 290 -10 0 1610 90 577 0 +139 435 11 -20 0 1432 90 955 0 +140 206 261 -10 1050 1104 90 745 0 +141 428 291 -20 698 764 90 655 0 +142 95 384 -30 719 785 90 958 0 +143 205 223 20 491 544 90 0 59 +144 463 140 10 0 1495 90 0 41 +145 343 47 20 0 1511 90 0 803 +146 435 62 30 0 1471 0 0 1031 +147 387 488 -20 0 1460 90 245 0 +148 121 157 10 0 1575 90 0 389 +149 182 463 30 0 1511 90 0 971 +150 92 216 10 0 1573 90 0 778 +151 370 83 20 357 419 90 0 607 +152 444 242 -20 441 501 90 508 0 +153 90 285 40 0 1571 90 0 654 +154 446 64 10 0 1464 90 0 270 +155 312 264 20 131 179 90 0 312 +156 208 11 20 0 1492 90 0 197 +157 442 247 -10 0 1542 90 254 0 +158 140 431 30 280 324 90 0 75 +159 118 153 -40 0 1571 90 784 0 +160 134 428 -20 935 992 90 972 0 +161 91 235 10 0 1575 90 0 227 +162 406 257 -20 0 1578 90 768 0 +163 377 76 20 0 1519 0 0 1005 +164 474 96 30 0 1463 90 0 843 +165 346 57 20 0 1519 90 0 128 +166 393 301 -30 0 1583 90 704 0 +167 412 214 -10 0 1569 90 847 0 +168 210 398 10 0 1581 90 0 281 +169 346 150 -40 948 998 90 294 0 +170 62 453 -30 515 584 90 219 0 +171 437 61 -30 1063 1127 90 827 0 +172 87 96 30 0 1510 90 0 559 +173 367 83 -10 0 1531 90 769 0 +174 91 268 -20 869 931 90 522 0 +175 459 145 40 233 291 90 0 296 +176 63 444 -20 0 1465 90 350 0 +177 433 27 -10 0 1446 90 998 0 +178 60 454 10 892 952 90 0 401 +179 478 99 -20 0 1461 90 323 0 +180 485 454 -10 0 1423 90 575 0 +181 6 292 10 316 360 90 0 2 +182 398 20 20 333 394 90 0 875 +183 248 251 -20 0 1732 90 52 0 +184 433 15 -10 0 1437 90 700 0 +185 64 426 -20 1162 1223 90 713 0 +186 154 207 -10 0 1629 90 519 0 +187 481 456 40 1028 1091 90 0 19 +188 380 498 -30 523 582 90 973 0 +189 88 286 -20 795 859 90 563 0 +190 111 23 10 266 326 90 0 975 +191 199 187 -20 0 1653 90 878 0 +192 269 48 -30 0 1532 90 618 0 +193 367 178 -20 0 1597 90 801 0 +194 452 163 30 0 1515 90 0 867 +195 431 28 -20 0 1448 90 479 0 +196 8 116 -20 894 957 90 406 0 +197 233 47 -20 0 1531 90 156 0 +198 237 43 20 631 702 90 0 548 +199 320 262 -10 585 656 90 224 0 +200 188 4 -30 413 455 90 328 0 +201 180 6 -20 0 1481 90 624 0 +202 328 466 -30 0 1505 90 897 0 +203 393 12 10 0 1457 90 0 693 +204 409 90 20 0 1509 90 0 292 +205 406 87 -10 0 1509 90 740 0 +206 394 407 20 733 789 90 0 605 +207 358 183 20 0 1607 90 0 466 +208 186 461 20 220 284 90 0 919 +209 38 72 30 420 496 0 0 1015 +210 323 471 -10 0 1502 90 268 0 +211 224 192 10 215 274 90 0 926 +212 278 46 -10 0 1529 90 421 0 +213 272 403 30 494 555 90 0 86 +214 232 42 10 545 599 0 0 1001 +215 18 63 -10 716 792 90 966 0 +216 58 458 -10 702 774 90 400 0 +217 416 417 -20 1057 1099 90 223 0 +218 205 230 30 203 263 90 0 699 +219 65 453 30 0 1460 90 0 170 +220 421 294 -20 0 1558 90 826 0 +221 434 245 -20 1377 1416 90 283 0 +222 2 116 20 526 586 90 0 674 +223 411 421 20 862 917 90 0 217 +224 315 260 10 223 278 90 0 199 +225 136 288 -20 1023 1063 90 945 0 +226 173 490 20 406 462 90 0 851 +227 90 232 -10 0 1573 90 161 0 +228 402 265 20 306 365 90 0 107 +229 361 14 10 0 1474 90 0 88 +230 348 147 -10 845 914 90 756 0 +231 385 295 20 0 1592 0 0 1030 +232 394 23 -20 1271 1326 90 716 0 +233 466 295 20 0 1514 0 0 1040 +234 71 103 -30 0 1503 90 264 0 +235 125 29 -20 0 1481 90 429 0 +236 25 65 -20 1005 1057 90 381 0 +237 58 449 30 0 1458 90 0 570 +238 246 398 40 148 199 90 0 772 +239 423 294 -30 0 1556 90 881 0 +240 59 459 -10 0 1451 90 882 0 +241 348 145 20 763 813 0 0 1033 +242 477 97 10 0 1461 90 0 450 +243 307 102 40 0 1576 90 0 410 +244 169 31 -20 0 1501 90 48 0 +245 381 495 20 705 769 90 0 147 +246 95 234 10 315 362 90 0 433 +247 22 33 10 0 1420 90 0 635 +248 435 268 10 1100 1154 90 0 591 +249 135 293 30 0 1612 0 0 1018 +250 439 266 -10 0 1545 90 657 0 +251 269 402 -20 587 648 90 362 0 +252 267 400 -10 779 836 90 969 0 +253 473 196 10 564 642 90 0 453 +254 445 237 10 349 402 90 0 157 +255 461 284 10 275 340 90 0 523 +256 167 339 -20 0 1613 90 606 0 +257 26 43 10 365 427 90 0 121 +258 101 386 20 0 1533 90 0 125 +259 342 54 -20 553 616 90 792 0 +260 243 399 -10 782 837 90 471 0 +261 288 44 20 0 1525 90 0 633 +262 274 48 10 0 1531 90 0 324 +263 360 184 -20 846 906 90 646 0 +264 23 67 30 0 1443 90 0 234 +265 6 296 10 863 926 90 0 912 +266 249 258 -20 0 1726 90 628 0 +267 421 415 30 297 364 90 0 748 +268 319 468 10 289 353 90 0 210 +269 50 438 -30 0 1460 90 81 0 +270 440 61 -10 0 1467 90 154 0 +271 17 65 20 625 699 90 0 500 +272 323 118 -20 0 1584 90 353 0 +273 402 281 -10 0 1579 90 649 0 +274 71 153 -30 746 816 90 600 0 +275 52 432 20 789 843 0 0 1045 +276 378 199 10 761 804 90 0 365 +277 238 204 20 566 634 0 0 1035 +278 208 184 20 146 192 90 0 615 +279 376 195 -20 576 616 90 963 0 +280 473 475 -20 0 1418 90 809 0 +281 215 395 -10 0 1585 90 168 0 +282 123 222 -20 376 430 90 394 0 +283 436 241 20 0 1548 90 0 221 +284 70 100 -10 1119 1191 90 416 0 +285 73 328 20 193 270 90 0 61 +286 241 205 -20 0 1689 90 804 0 +287 250 405 -30 303 370 90 597 0 +288 483 14 -20 0 1403 90 853 0 +289 466 287 10 467 525 90 0 435 +290 467 114 -10 0 1478 90 957 0 +291 120 159 10 306 377 90 0 395 +292 408 84 -20 745 814 90 204 0 +293 413 217 20 230 289 90 0 446 +294 338 142 40 204 256 90 0 169 +295 483 457 20 735 811 0 0 1008 +296 479 169 -40 774 834 90 175 0 +297 95 224 20 0 1577 90 0 821 +298 122 216 -20 461 537 90 40 0 +299 477 179 -20 0 1497 90 309 0 +300 406 99 20 0 1517 90 0 965 +301 44 47 20 0 1445 90 0 564 +302 487 450 -30 929 993 90 363 0 +303 172 488 10 310 374 90 0 671 +304 460 374 -10 753 831 90 810 0 +305 279 138 40 281 320 90 0 644 +306 338 147 10 0 1599 90 0 930 +307 395 295 -10 677 736 90 1 0 +308 195 185 -20 0 1649 90 895 0 +309 463 194 20 0 1514 90 0 299 +310 30 72 -20 0 1452 90 347 0 +311 244 254 20 723 787 90 0 893 +312 317 261 -20 398 473 90 155 0 +313 67 108 10 0 1503 90 0 876 +314 442 310 20 643 698 0 0 1028 +315 63 336 -10 0 1529 90 688 0 +316 109 107 20 357 416 90 0 47 +317 100 387 10 0 1531 90 0 823 +318 494 94 -20 634 692 90 806 0 +319 343 49 10 0 1513 90 0 691 +320 40 52 -20 546 591 90 777 0 +321 319 124 -10 400 465 90 760 0 +322 94 97 20 285 334 90 0 705 +323 476 94 20 334 396 90 0 179 +324 283 47 -10 0 1529 90 262 0 +325 398 325 30 774 843 90 0 673 +326 460 13 20 0 1418 90 0 430 +327 305 107 -10 0 1581 90 767 0 +328 188 12 30 245 309 90 0 200 +329 136 290 20 272 332 90 0 689 +330 439 268 -20 0 1545 90 863 0 +331 112 467 10 0 1477 90 0 974 +332 181 469 20 468 536 90 0 124 +333 358 18 10 0 1479 90 0 639 +334 459 10 10 0 1416 90 0 550 +335 199 268 20 284 368 90 0 918 +336 436 237 20 186 264 90 0 112 +337 318 280 20 319 384 90 0 439 +338 64 99 -20 853 904 90 481 0 +339 394 333 20 0 1568 90 0 854 +340 366 93 20 0 1539 90 0 931 +341 95 391 10 0 1525 0 0 1014 +342 391 425 20 842 909 90 0 558 +343 344 146 -10 0 1594 90 504 0 +344 198 12 10 0 1491 90 0 799 +345 186 472 20 0 1503 90 0 739 +346 390 408 30 0 1523 0 0 1020 +347 19 43 20 1203 1259 90 0 310 +348 307 108 -10 0 1581 90 874 0 +349 59 457 30 810 848 90 0 538 +350 49 451 20 0 1450 90 0 176 +351 125 39 20 245 318 90 0 953 +352 61 147 40 0 1519 90 0 786 +353 317 123 20 497 554 90 0 272 +354 392 426 10 666 722 90 0 578 +355 237 213 -20 0 1695 90 122 0 +356 71 333 -30 0 1537 90 472 0 +357 304 97 20 0 1572 90 0 686 +358 196 462 10 955 1003 90 0 936 +359 224 191 -20 0 1670 90 544 0 +360 37 51 10 0 1443 90 0 367 +361 491 25 10 0 1405 90 0 835 +362 270 401 20 217 268 90 0 251 +363 474 461 30 307 379 90 0 302 +364 66 448 10 270 345 90 0 492 +365 337 241 -10 0 1647 90 276 0 +366 269 46 -20 0 1530 90 648 0 +367 22 41 -10 1110 1164 90 360 0 +368 198 271 -20 0 1678 90 905 0 +369 287 43 -20 555 609 90 38 0 +370 446 63 -10 697 750 90 932 0 +371 200 229 30 0 1680 0 0 1007 +372 48 72 30 711 768 90 0 569 +373 465 142 -30 0 1494 90 892 0 +374 123 155 -30 1143 1209 90 773 0 +375 16 497 20 1038 1123 90 0 436 +376 220 319 -10 0 1659 90 78 0 +377 484 171 -20 680 736 90 602 0 +378 55 431 -10 0 1468 90 681 0 +379 428 24 -30 0 1447 90 754 0 +380 80 342 10 193 275 90 0 701 +381 16 68 20 521 617 90 0 236 +382 124 56 20 0 1503 90 0 898 +383 95 218 -30 873 927 90 66 0 +384 481 26 30 0 1413 90 0 839 +385 145 434 -20 462 514 90 106 0 +386 335 57 30 0 1524 90 0 668 +387 26 490 10 0 1406 90 0 79 +388 324 127 30 143 200 90 0 402 +389 109 114 -10 829 871 90 148 0 +390 72 148 20 0 1529 90 0 977 +391 220 392 20 970 1015 90 0 817 +392 442 243 -10 996 1052 90 101 0 +393 69 336 20 440 507 90 0 911 +394 131 226 20 121 183 90 0 282 +395 150 204 -10 0 1624 90 291 0 +396 423 217 20 785 849 90 0 687 +397 419 459 -20 785 838 90 962 0 +398 285 163 -20 714 780 90 774 0 +399 203 7 -20 0 1487 90 594 0 +400 54 445 10 534 593 90 0 216 +401 109 463 -10 0 1479 90 178 0 +402 355 180 -30 0 1608 90 388 0 +403 13 455 -20 381 430 90 711 0 +404 165 337 20 0 1613 90 0 782 +405 314 124 -10 0 1593 90 896 0 +406 9 124 20 271 336 90 0 196 +407 3 292 20 404 457 90 0 934 +408 16 462 -20 935 986 90 413 0 +409 189 464 -20 0 1512 90 535 0 +410 288 154 -40 0 1631 90 243 0 +411 90 296 -20 0 1568 90 17 0 +412 138 438 -20 0 1516 90 553 0 +413 13 459 20 646 718 90 0 408 +414 461 8 20 0 1413 90 0 514 +415 96 97 20 217 280 90 0 627 +416 68 99 10 1040 1085 90 0 284 +417 146 205 -10 0 1621 90 65 0 +418 117 152 -20 0 1569 90 560 0 +419 481 96 20 526 577 90 0 622 +420 338 260 -30 0 1646 90 714 0 +421 285 44 10 0 1526 90 0 212 +422 111 464 10 775 837 90 0 816 +423 468 291 30 0 1513 90 0 950 +424 148 206 -20 458 506 90 473 0 +425 184 464 10 285 344 90 0 537 +426 197 11 -10 0 1490 90 501 0 +427 396 410 10 829 880 90 0 443 +428 133 53 20 0 1505 90 0 979 +429 132 30 20 875 926 90 0 235 +430 464 13 -20 853 906 90 326 0 +431 100 394 -20 0 1527 90 571 0 +432 483 22 -20 476 543 90 447 0 +433 93 235 -10 0 1577 90 246 0 +434 174 26 -10 0 1498 90 765 0 +435 436 264 -10 0 1548 90 289 0 +436 24 492 -20 1252 1302 90 375 0 +437 406 94 10 375 430 90 0 37 +438 234 246 10 0 1718 90 0 498 +439 315 287 -20 693 754 90 337 0 +440 408 453 -10 0 1477 90 743 0 +441 128 225 -10 0 1610 90 679 0 +442 226 191 20 0 1671 90 0 907 +443 391 407 -10 0 1523 90 427 0 +444 198 264 20 0 1681 90 0 986 +445 179 7 20 864 930 90 0 454 +446 425 215 -20 699 748 90 293 0 +447 483 27 20 0 1412 90 0 432 +448 22 40 -30 1012 1080 90 536 0 +449 479 176 20 0 1494 90 0 891 +450 476 102 -10 0 1464 90 242 0 +451 386 405 -10 0 1528 90 685 0 +452 22 38 20 0 1423 90 0 113 +453 440 241 -10 0 1544 90 253 0 +454 182 14 -20 0 1489 90 445 0 +455 266 405 20 680 745 90 0 855 +456 357 181 20 367 441 90 0 670 +457 395 332 10 593 648 0 0 1023 +458 423 290 -20 0 1557 90 798 0 +459 104 28 20 0 1469 90 0 903 +460 131 56 10 0 1507 90 0 852 +461 111 110 -20 0 1537 90 562 0 +462 97 93 -20 0 1515 90 698 0 +463 90 274 20 411 458 90 0 886 +464 214 394 -10 0 1586 90 978 0 +465 6 114 10 0 1455 90 0 662 +466 375 191 -20 0 1596 90 207 0 +467 356 21 20 414 452 0 0 1004 +468 466 165 30 0 1502 90 0 987 +469 415 223 -20 1257 1302 90 759 0 +470 397 20 20 0 1462 90 0 93 +471 241 403 10 686 744 90 0 260 +472 69 334 30 0 1535 90 0 356 +473 152 210 20 105 163 90 0 424 +474 67 335 -20 629 684 90 967 0 +475 126 30 10 495 558 90 0 497 +476 390 423 -10 0 1512 90 849 0 +477 285 162 -30 625 688 90 758 0 +478 285 158 30 340 405 90 0 5 +479 406 96 20 280 342 90 0 195 +480 459 374 -20 848 917 90 580 0 +481 67 109 20 388 438 90 0 338 +482 468 475 10 313 373 90 0 993 +483 438 31 -20 0 1446 90 802 0 +484 168 24 -10 0 1494 90 653 0 +485 267 394 -10 0 1589 90 547 0 +486 406 450 20 405 464 90 0 512 +487 460 288 10 213 265 90 0 117 +488 224 203 20 0 1681 90 0 923 +489 21 487 10 582 629 90 0 490 +490 21 488 -10 0 1404 90 489 0 +491 87 217 10 0 1568 90 0 8 +492 67 452 -10 327 402 90 364 0 +493 119 223 -20 853 906 90 703 0 +494 398 428 -20 0 1503 90 123 0 +495 344 262 -20 0 1640 90 21 0 +496 390 301 -10 0 1585 90 684 0 +497 167 27 -10 0 1497 90 475 0 +498 236 247 -10 0 1720 90 438 0 +499 313 119 30 679 742 0 0 1047 +500 13 51 -20 0 1425 90 271 0 +501 200 13 10 397 453 90 0 426 +502 0 120 30 0 1453 90 0 509 +503 202 4 10 950 1004 90 0 98 +504 343 144 10 0 1593 90 0 343 +505 94 383 -40 636 687 90 981 0 +506 250 411 30 492 554 90 0 626 +507 464 134 20 0 1491 0 0 1026 +508 443 237 20 248 318 90 0 152 +509 4 114 -30 712 769 90 502 0 +510 169 336 30 0 1616 0 0 1013 +511 200 178 20 240 298 90 0 824 +512 412 453 -20 0 1475 90 486 0 +513 121 151 -30 0 1572 90 603 0 +514 403 93 -20 0 1515 90 414 0 +515 399 301 -10 584 634 90 638 0 +516 97 387 -10 823 869 90 954 0 +517 176 8 -10 0 1481 90 634 0 +518 62 326 -30 0 1532 90 4 0 +519 151 207 10 0 1627 90 0 186 +520 299 98 -20 0 1575 90 900 0 +521 334 240 -30 0 1650 90 585 0 +522 92 270 20 0 1575 90 0 174 +523 444 269 -10 0 1540 90 255 0 +524 132 223 30 0 1613 90 0 604 +525 428 25 -20 0 1448 90 135 0 +526 413 421 -20 768 828 90 925 0 +527 382 498 10 0 1454 90 0 793 +528 391 429 20 0 1507 90 0 555 +529 398 97 10 264 344 90 0 989 +530 192 265 -30 0 1675 90 680 0 +531 438 26 -20 0 1442 90 100 0 +532 44 79 10 267 333 90 0 991 +533 137 290 10 0 1615 90 0 946 +534 446 319 -30 0 1527 90 940 0 +535 175 487 20 248 308 90 0 409 +536 26 45 30 0 1431 90 0 448 +537 147 435 -10 553 607 90 425 0 +538 111 459 -30 0 1483 90 349 0 +539 472 132 10 767 826 90 0 908 +540 349 158 -20 0 1599 90 766 0 +541 86 268 10 689 735 0 0 1036 +542 415 216 10 319 384 90 0 733 +543 121 218 20 191 257 90 0 742 +544 210 185 20 0 1658 90 0 359 +545 98 215 20 0 1579 0 0 1032 +546 484 174 10 0 1488 90 0 995 +547 328 458 10 0 1512 90 0 485 +548 313 126 -20 0 1595 90 198 0 +549 390 415 -20 0 1518 90 115 0 +550 459 17 -10 1039 1094 90 334 0 +551 481 124 10 505 571 0 0 1009 +552 386 414 -20 1109 1162 90 788 0 +553 116 466 20 318 373 90 0 412 +554 468 295 -20 934 987 90 10 0 +555 391 426 -20 0 1509 90 528 0 +556 408 279 -20 682 747 90 69 0 +557 15 68 10 448 508 90 0 80 +558 392 424 -20 926 1007 90 342 0 +559 88 95 -30 0 1510 90 172 0 +560 116 151 20 774 836 90 0 418 +561 240 250 -20 0 1724 90 723 0 +562 123 159 20 156 216 90 0 461 +563 89 290 20 0 1569 90 0 189 +564 39 50 -20 0 1444 90 301 0 +565 359 179 20 0 1604 90 0 3 +566 338 257 -20 0 1646 90 120 0 +567 92 236 -10 0 1576 90 828 0 +568 413 417 -10 1135 1207 90 837 0 +569 91 101 -30 0 1517 90 372 0 +570 55 449 -30 0 1456 90 237 0 +571 57 425 20 0 1474 90 0 431 +572 465 287 10 0 1516 90 0 51 +573 320 280 -30 221 298 90 72 0 +574 322 468 20 0 1505 90 0 118 +575 483 458 10 656 708 90 0 180 +576 312 267 10 0 1670 90 0 924 +577 139 291 10 118 187 90 0 138 +578 388 408 -10 0 1525 90 354 0 +579 110 459 -40 0 1483 90 731 0 +580 459 372 20 0 1492 90 0 480 +581 204 269 30 49 98 0 0 1003 +582 407 98 -30 0 1516 90 696 0 +583 335 256 -10 890 962 90 87 0 +584 471 484 -20 0 1413 90 990 0 +585 339 244 30 251 299 90 0 521 +586 89 272 10 498 555 90 0 906 +587 488 96 -20 0 1451 90 787 0 +588 316 286 -30 601 662 90 613 0 +589 235 50 -40 813 896 90 64 0 +590 316 258 20 0 1668 90 0 873 +591 425 288 -10 0 1555 90 248 0 +592 213 397 -30 680 744 90 658 0 +593 113 156 10 0 1568 0 0 1029 +594 199 9 20 853 911 90 0 399 +595 463 167 10 657 709 90 0 73 +596 129 27 -10 0 1481 90 749 0 +597 248 404 30 0 1580 90 0 287 +598 405 276 20 0 1577 90 0 647 +599 400 288 30 154 232 90 0 734 +600 61 156 30 462 532 90 0 274 +601 393 20 -10 0 1464 90 762 0 +602 484 177 20 390 463 90 0 377 +603 108 116 30 0 1539 90 0 513 +604 112 217 -30 383 443 90 524 0 +605 389 404 -20 0 1527 90 206 0 +606 102 391 20 0 1530 90 0 256 +607 434 26 -20 0 1445 90 151 0 +608 488 26 30 0 1408 90 0 994 +609 477 120 10 968 1026 90 0 877 +610 126 220 -20 0 1607 90 902 0 +611 439 310 10 198 256 90 0 755 +612 212 319 -30 0 1656 90 39 0 +613 320 283 30 421 471 90 0 588 +614 17 459 -20 1200 1275 90 970 0 +615 236 213 -20 0 1695 90 278 0 +616 68 108 10 0 1504 90 0 795 +617 390 294 -30 0 1588 90 776 0 +618 275 42 30 537 608 90 0 192 +619 423 214 20 0 1558 90 0 741 +620 460 367 -20 0 1494 90 960 0 +621 272 402 -10 0 1581 90 914 0 +622 478 102 -20 704 775 90 419 0 +623 400 260 40 150 212 90 0 721 +624 181 6 20 678 753 90 0 201 +625 470 475 30 381 429 90 0 790 +626 245 408 -30 585 652 90 506 0 +627 93 96 -20 374 427 90 415 0 +628 218 318 20 884 939 90 0 266 +629 441 265 40 0 1543 0 0 1043 +630 21 64 20 818 876 90 0 83 +631 356 23 20 0 1484 90 0 730 +632 267 44 20 649 693 90 0 814 +633 277 50 -20 0 1533 90 261 0 +634 182 4 10 586 659 90 0 517 +635 26 36 -10 0 1425 90 247 0 +636 384 491 -30 897 948 90 775 0 +637 418 290 -20 1172 1221 90 796 0 +638 321 277 10 75 140 90 0 515 +639 358 16 -10 596 641 90 333 0 +640 389 334 -20 0 1572 90 751 0 +641 48 78 -20 0 1469 90 672 0 +642 24 68 -20 0 1444 90 750 0 +643 206 225 10 0 1684 90 0 968 +644 290 141 -40 645 709 90 305 0 +645 439 15 20 0 1433 90 0 14 +646 359 182 20 0 1606 90 0 263 +647 413 287 -20 0 1567 90 598 0 +648 230 49 20 201 253 90 0 366 +649 407 280 10 595 653 90 0 273 +650 459 295 20 1209 1273 90 0 55 +651 468 199 -10 669 730 90 890 0 +652 101 384 30 200 262 90 0 91 +653 170 26 10 855 918 90 0 484 +654 197 270 -40 0 1678 90 153 0 +655 415 289 20 169 228 90 0 141 +656 203 390 40 307 361 90 0 761 +657 443 272 10 0 1540 90 0 250 +658 210 391 30 202 272 90 0 592 +659 363 22 20 964 1025 90 0 42 +660 352 176 20 126 175 90 0 780 +661 212 223 -10 758 832 90 844 0 +662 8 120 -10 0 1460 90 465 0 +663 244 250 -10 0 1728 90 678 0 +664 18 484 10 0 1405 90 0 857 +665 379 82 -20 0 1523 90 889 0 +666 84 346 20 0 1543 90 0 44 +667 233 207 -10 0 1688 90 888 0 +668 344 62 -30 1208 1274 90 386 0 +669 20 489 -10 856 901 90 105 0 +670 361 181 -20 662 723 90 456 0 +671 174 494 -10 0 1479 90 303 0 +672 49 76 20 0 1469 90 0 641 +673 390 325 -30 883 929 90 325 0 +674 7 118 -20 0 1458 90 222 0 +675 107 26 10 0 1469 90 0 50 +676 312 270 30 0 1669 90 0 947 +677 399 102 20 0 1524 90 0 917 +678 109 108 10 0 1534 90 0 663 +679 115 218 10 298 341 90 0 441 +680 88 287 30 0 1568 90 0 530 +681 54 424 10 320 387 90 0 378 +682 125 32 30 407 462 90 0 935 +683 199 12 -10 0 1491 90 988 0 +684 457 374 10 0 1493 90 0 496 +685 391 413 10 0 1519 90 0 451 +686 304 102 -20 505 559 90 357 0 +687 391 293 -20 0 1587 90 396 0 +688 66 336 10 719 778 90 0 315 +689 132 291 -20 0 1610 90 329 0 +690 18 462 -20 0 1420 90 729 0 +691 347 62 -10 1121 1176 90 319 0 +692 466 142 -20 0 1493 90 111 0 +693 389 17 -10 0 1463 90 203 0 +694 342 254 10 0 1642 90 0 848 +695 92 223 10 0 1574 90 0 129 +696 404 83 30 831 916 90 0 582 +697 290 46 -10 832 896 90 838 0 +698 95 92 20 0 1513 90 0 462 +699 200 265 -30 853 922 90 218 0 +700 435 16 10 829 895 90 0 184 +701 25 499 -10 0 1399 90 380 0 +702 319 260 20 0 1665 90 0 737 +703 116 225 20 0 1598 90 0 493 +704 402 284 30 313 367 90 0 166 +705 108 105 -20 0 1532 90 322 0 +706 386 13 -10 785 878 90 108 0 +707 472 129 10 312 383 90 0 133 +708 132 57 -10 396 443 90 964 0 +709 43 71 40 0 1461 0 0 1038 +710 493 91 30 542 599 90 0 831 +711 12 451 20 0 1423 90 0 403 +712 201 188 -20 0 1655 90 894 0 +713 60 428 20 1059 1137 90 0 185 +714 243 248 30 243 314 90 0 420 +715 230 197 -20 588 645 90 808 0 +716 389 11 20 707 769 90 0 232 +717 401 281 -20 0 1580 90 836 0 +718 459 14 -20 372 439 90 722 0 +719 411 95 30 475 521 0 0 1019 +720 0 297 10 679 737 90 0 53 +721 476 196 -40 476 544 90 623 0 +722 458 16 20 313 369 90 0 718 +723 92 230 20 0 1575 90 0 561 +724 432 24 -40 0 1444 90 137 0 +725 215 317 10 140 194 90 0 130 +726 371 192 30 0 1600 90 0 31 +727 481 20 -20 0 1409 90 858 0 +728 152 207 20 824 877 90 0 77 +729 14 459 20 0 1419 90 0 690 +730 361 17 -20 777 832 90 631 0 +731 8 497 40 959 1006 90 0 579 +732 206 186 -10 891 955 90 800 0 +733 421 218 -10 880 939 90 542 0 +734 402 264 -30 216 273 90 599 0 +735 388 325 10 971 1026 0 0 1041 +736 35 304 30 0 1513 90 0 938 +737 321 263 -20 0 1662 90 702 0 +738 444 313 20 0 1531 90 0 807 +739 188 462 -20 0 1514 90 345 0 +740 400 103 10 0 1524 90 0 205 +741 418 221 -20 1150 1223 90 619 0 +742 112 219 -20 0 1593 90 543 0 +743 408 452 10 490 564 90 0 440 +744 30 301 10 660 726 90 0 922 +745 205 228 10 0 1684 90 0 140 +746 407 88 -30 0 1509 90 921 0 +747 380 489 -20 0 1462 90 28 0 +748 395 331 -30 0 1568 90 267 0 +749 133 26 10 0 1482 90 0 596 +750 21 68 20 0 1442 90 0 642 +751 313 282 20 0 1664 90 0 640 +752 53 440 10 633 684 90 0 865 +753 458 130 -20 0 1494 90 58 0 +754 437 15 30 0 1434 90 0 379 +755 400 286 -10 0 1580 90 611 0 +756 346 144 10 0 1591 90 0 230 +757 440 244 10 809 874 90 0 860 +758 280 162 30 158 210 90 0 477 +759 488 173 20 0 1484 90 0 469 +760 326 118 10 213 272 90 0 321 +761 207 400 -40 489 562 90 656 0 +762 391 18 10 1085 1141 90 0 601 +763 37 55 10 0 1446 0 0 1002 +764 204 15 20 0 1495 0 0 1039 +765 173 28 10 1134 1191 90 0 434 +766 343 148 20 399 441 90 0 540 +767 231 43 10 447 513 90 0 327 +768 445 273 20 725 781 90 0 162 +769 432 27 10 810 878 90 0 173 +770 439 305 30 0 1538 90 0 883 +771 208 396 -20 401 462 90 815 0 +772 249 407 -40 403 455 90 238 0 +773 107 112 30 728 787 90 0 374 +774 279 159 20 252 301 90 0 398 +775 376 494 30 334 396 90 0 636 +776 403 262 30 493 547 90 0 617 +777 41 47 20 359 406 90 0 320 +778 96 213 -10 0 1576 90 150 0 +779 461 167 -20 470 531 90 84 0 +780 391 99 -20 0 1528 90 660 0 +781 116 221 30 0 1597 90 0 880 +782 165 343 -20 556 613 90 404 0 +783 388 334 20 227 280 90 0 67 +784 130 57 40 289 365 90 0 159 +785 422 409 10 234 290 90 0 24 +786 66 156 -40 653 718 90 352 0 +787 485 86 20 349 413 90 0 587 +788 389 428 20 0 1509 90 0 552 +789 117 467 10 0 1480 90 0 103 +790 475 477 -30 1028 1091 90 625 0 +791 429 27 -10 1272 1339 90 54 0 +792 339 60 20 274 338 90 0 259 +793 381 494 -10 801 855 90 527 0 +794 218 321 -10 0 1657 90 13 0 +795 64 101 -10 667 724 90 616 0 +796 343 254 20 334 394 90 0 637 +797 478 464 -10 0 1422 90 43 0 +798 423 286 20 430 477 90 0 458 +799 198 9 -10 0 1488 90 344 0 +800 225 196 10 128 174 90 0 732 +801 374 190 20 0 1597 90 0 193 +802 462 14 20 0 1417 90 0 483 +803 347 54 -20 836 904 90 145 0 +804 231 195 20 0 1676 90 0 286 +805 72 96 -10 1220 1278 90 33 0 +806 489 87 20 451 499 90 0 318 +807 443 313 -20 554 602 90 738 0 +808 233 204 20 0 1685 90 0 715 +809 477 483 20 745 817 90 0 280 +810 459 368 10 299 361 90 0 304 +811 95 277 20 1057 1121 0 0 1037 +812 16 460 -20 1112 1180 90 866 0 +813 100 266 20 207 275 90 0 840 +814 288 53 -20 0 1534 90 632 0 +815 211 386 20 141 212 90 0 771 +816 144 439 -10 0 1518 90 422 0 +817 224 314 -20 0 1665 90 391 0 +818 79 291 10 519 568 90 0 27 +819 95 235 10 155 227 90 0 71 +820 7 123 30 329 399 90 0 871 +821 91 217 -20 692 738 90 297 0 +822 105 27 10 0 1469 90 0 830 +823 101 385 -10 0 1533 90 317 0 +824 238 210 -20 757 821 90 511 0 +825 439 67 10 322 386 90 0 832 +826 435 267 20 0 1549 90 0 220 +827 443 64 30 779 854 90 0 171 +828 92 234 10 0 1576 90 0 567 +829 450 265 -10 0 1534 90 952 0 +830 102 27 -10 796 852 90 822 0 +831 492 94 -30 724 787 90 710 0 +832 440 63 -10 886 934 90 825 0 +833 453 367 -20 0 1500 90 959 0 +834 15 69 -10 0 1438 90 95 0 +835 489 17 -10 0 1401 90 361 0 +836 335 255 20 85 124 90 0 717 +837 419 418 10 394 454 90 0 568 +838 292 41 10 0 1521 90 0 697 +839 489 27 -30 0 1408 90 384 0 +840 96 270 -20 308 367 90 813 0 +841 461 369 10 0 1492 90 0 56 +842 105 22 30 339 385 90 0 872 +843 479 121 -30 0 1472 90 164 0 +844 207 223 10 585 634 90 0 661 +845 17 458 -20 1297 1360 90 887 0 +846 186 7 -30 0 1483 90 92 0 +847 465 168 10 837 902 90 0 167 +848 416 288 -10 1251 1328 90 694 0 +849 388 418 10 217 283 90 0 476 +850 92 233 -10 768 830 90 943 0 +851 179 492 -20 678 752 90 226 0 +852 132 55 -10 573 632 90 460 0 +853 485 24 20 0 1408 90 0 288 +854 388 331 -20 0 1574 90 339 0 +855 217 323 -20 0 1654 90 455 0 +856 281 164 -20 0 1643 90 884 0 +857 169 340 -10 0 1613 90 664 0 +858 491 20 20 0 1401 90 0 727 +859 279 42 -20 0 1524 90 63 0 +860 439 243 -10 0 1545 90 757 0 +861 391 334 20 402 470 90 0 7 +862 96 244 -10 1332 1380 90 116 0 +863 441 273 20 903 972 90 0 330 +864 477 478 -10 0 1413 90 60 0 +865 56 434 -10 0 1467 90 752 0 +866 12 463 20 0 1415 90 0 812 +867 458 164 -30 374 439 90 194 0 +868 446 65 -10 516 566 90 35 0 +869 71 156 10 0 1532 90 0 870 +870 65 153 -10 0 1526 90 869 0 +871 8 118 -30 1079 1138 90 820 0 +872 102 29 -30 0 1469 90 842 0 +873 315 265 -20 0 1668 90 590 0 +874 343 62 10 1300 1364 90 0 348 +875 384 16 -20 892 959 90 182 0 +876 67 105 -10 0 1501 90 313 0 +877 478 118 -10 0 1471 90 609 0 +878 73 101 20 1313 1375 90 0 191 +879 200 14 10 311 356 90 0 82 +880 114 225 -30 0 1596 90 781 0 +881 460 293 30 1121 1176 90 0 239 +882 51 447 10 438 501 90 0 240 +883 418 295 -30 1063 1140 90 770 0 +884 282 139 20 0 1619 90 0 856 +885 477 122 -40 886 924 90 942 0 +886 91 266 -20 0 1575 90 463 0 +887 16 463 20 0 1418 90 0 845 +888 228 199 10 673 746 90 0 667 +889 435 20 20 0 1439 90 0 665 +890 467 195 10 285 344 90 0 651 +891 469 132 -20 856 923 90 449 0 +892 465 136 30 964 1007 90 0 373 +893 246 255 -20 818 877 90 311 0 +894 49 75 20 810 857 90 0 712 +895 66 98 20 0 1496 90 0 308 +896 166 32 10 296 352 90 0 405 +897 326 466 30 753 817 90 0 202 +898 202 186 -20 0 1654 90 382 0 +899 467 285 -10 0 1515 90 85 0 +900 290 136 20 0 1614 90 0 520 +901 341 58 10 0 1522 90 0 909 +902 121 219 20 0 1602 90 0 610 +903 107 35 -20 986 1041 90 459 0 +904 216 319 -20 0 1658 90 944 0 +905 134 288 20 0 1612 90 0 368 +906 89 270 -10 590 647 90 586 0 +907 136 52 -20 759 817 90 442 0 +908 462 167 -10 0 1507 90 539 0 +909 340 54 -10 0 1519 90 901 0 +910 80 286 -10 0 1561 90 62 0 +911 38 301 -20 0 1516 90 393 0 +912 25 307 -10 0 1502 90 265 0 +913 470 139 -30 668 731 90 11 0 +914 270 400 10 151 213 90 0 621 +915 204 187 30 803 857 0 0 1046 +916 460 171 30 937 994 90 0 928 +917 399 106 -20 0 1527 90 677 0 +918 197 267 -20 582 626 90 335 0 +919 77 350 -20 997 1058 90 208 0 +920 91 231 -20 579 652 90 999 0 +921 398 103 30 739 807 90 0 746 +922 35 303 -10 0 1513 90 744 0 +923 231 204 -20 0 1685 90 488 0 +924 311 266 -10 0 1671 90 576 0 +925 416 420 20 0 1497 90 0 526 +926 231 203 -10 0 1684 90 211 0 +927 4 116 10 618 678 0 0 1022 +928 417 217 -30 0 1564 90 916 0 +929 268 52 -10 1003 1079 90 949 0 +930 345 144 -10 568 640 90 306 0 +931 368 85 -20 0 1532 90 340 0 +932 441 65 10 0 1469 90 0 370 +933 201 270 -10 0 1682 90 20 0 +934 0 293 -20 591 637 90 407 0 +935 167 24 -30 668 736 90 682 0 +936 186 464 -10 0 1511 90 358 0 +937 7 292 10 246 306 90 0 126 +938 80 290 -30 0 1560 90 736 0 +939 405 455 40 0 1477 0 0 1025 +940 439 312 30 257 324 90 0 534 +941 300 108 -20 0 1584 90 984 0 +942 478 121 40 788 840 90 0 885 +943 92 232 10 0 1575 90 0 850 +944 111 463 20 0 1480 90 0 904 +945 132 294 20 454 521 90 0 225 +946 134 285 -10 0 1613 90 533 0 +947 316 284 -30 510 570 90 676 0 +948 56 428 20 415 482 90 0 96 +949 232 47 10 262 327 90 0 929 +950 466 291 -30 0 1515 90 423 0 +951 341 257 -30 0 1643 90 996 0 +952 420 213 10 509 568 90 0 829 +953 116 152 -20 678 750 90 351 0 +954 163 337 10 277 334 90 0 516 +955 440 7 20 0 1426 90 0 139 +956 208 222 -10 667 734 90 36 0 +957 485 95 10 281 351 90 0 290 +958 97 385 30 0 1530 90 0 142 +959 462 367 20 481 545 90 0 833 +960 455 365 20 235 306 90 0 620 +961 492 95 30 0 1447 0 0 1006 +962 405 450 20 311 376 90 0 397 +963 371 193 20 0 1601 90 0 279 +964 234 202 10 0 1684 90 0 708 +965 404 103 -20 0 1522 90 300 0 +966 24 41 10 0 1427 90 0 215 +967 67 334 20 532 600 90 0 474 +968 207 227 -10 0 1686 90 643 0 +969 277 403 10 395 464 90 0 252 +970 15 457 20 462 534 90 0 614 +971 217 319 -30 0 1658 90 149 0 +972 111 467 20 597 647 90 0 160 +973 378 493 30 426 487 90 0 188 +974 112 465 -10 0 1479 90 331 0 +975 173 25 -10 952 1007 90 190 0 +976 421 292 20 0 1558 0 0 1034 +977 74 146 -20 0 1530 90 390 0 +978 178 491 10 0 1483 90 0 464 +979 204 185 -20 0 1655 90 428 0 +980 319 470 -10 0 1504 90 6 0 +981 163 331 40 118 179 90 0 505 +982 470 125 20 253 316 90 0 94 +983 315 121 -10 0 1590 90 32 0 +984 166 34 20 0 1503 90 0 941 +985 284 140 40 115 172 90 0 25 +986 85 288 -20 329 386 90 444 0 +987 376 190 -30 0 1595 90 468 0 +988 238 203 10 0 1686 90 0 683 +989 399 104 -10 0 1526 90 529 0 +990 472 481 20 477 527 90 0 584 +991 46 74 -10 0 1465 90 532 0 +992 401 255 30 685 738 90 0 70 +993 475 480 -10 837 911 90 482 0 +994 485 27 -30 1231 1291 90 608 0 +995 476 174 -10 874 924 90 546 0 +996 330 242 30 627 671 90 0 951 +997 332 249 30 82 144 0 0 1024 +998 375 80 10 550 598 90 0 177 +999 94 235 20 227 266 90 0 920 +1000 287 144 20 0 1622 0 0 1048 +1001 232 42 -10 545 599 90 214 0 +1002 37 55 -10 0 1446 90 763 0 +1003 204 269 -30 49 98 90 581 0 +1004 356 21 -20 414 452 90 467 0 +1005 377 76 -20 0 1519 90 163 0 +1006 492 95 -30 0 1447 90 961 0 +1007 200 229 -30 0 1680 90 371 0 +1008 483 457 -20 735 811 90 295 0 +1009 481 124 -10 505 571 90 551 0 +1010 35 306 -20 0 1512 90 34 0 +1011 122 35 -10 0 1484 90 127 0 +1012 187 491 -20 0 1485 90 134 0 +1013 169 336 -30 0 1616 90 510 0 +1014 95 391 -10 0 1525 90 341 0 +1015 38 72 -30 420 496 90 209 0 +1016 128 291 -10 0 1606 90 46 0 +1017 270 49 -30 925 970 90 12 0 +1018 135 293 -30 0 1612 90 249 0 +1019 411 95 -30 475 521 90 719 0 +1020 390 408 -30 0 1523 90 346 0 +1021 379 80 -20 0 1521 90 26 0 +1022 4 116 -10 618 678 90 927 0 +1023 395 332 -10 593 648 90 457 0 +1024 332 249 -30 82 144 90 997 0 +1025 405 455 -40 0 1477 90 939 0 +1026 464 134 -20 0 1491 90 507 0 +1027 237 254 -20 0 1721 90 22 0 +1028 442 310 -20 643 698 90 314 0 +1029 113 156 -10 0 1568 90 593 0 +1030 385 295 -20 0 1592 90 231 0 +1031 435 62 -30 0 1471 90 146 0 +1032 98 215 -20 0 1579 90 545 0 +1033 348 145 -20 763 813 90 241 0 +1034 421 292 -20 0 1558 90 976 0 +1035 238 204 -20 566 634 90 277 0 +1036 86 268 -10 689 735 90 541 0 +1037 95 277 -20 1057 1121 90 811 0 +1038 43 71 -40 0 1461 90 709 0 +1039 204 15 -20 0 1495 90 764 0 +1040 466 295 -20 0 1514 90 233 0 +1041 388 325 -10 971 1026 90 735 0 +1042 1 293 -10 0 1482 90 102 0 +1043 441 265 -40 0 1543 90 629 0 +1044 418 218 -20 0 1563 90 15 0 +1045 52 432 -20 789 843 90 275 0 +1046 204 187 -30 803 857 90 915 0 +1047 313 119 -30 679 742 90 499 0 +1048 287 144 -20 0 1622 90 1000 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1104.txt b/jsprit-instances/instances/lilim/1000/LC1104.txt new file mode 100644 index 00000000..98f7e589 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1104.txt @@ -0,0 +1,1040 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 10 200 270 90 0 950 +2 5 297 -10 0 1485 90 720 0 +3 355 177 -10 0 1607 90 504 0 +4 78 346 -10 0 1538 90 919 0 +5 286 159 20 0 1637 90 0 477 +6 322 465 10 226 291 90 0 268 +7 393 408 -10 0 1521 90 494 0 +8 89 216 -20 0 1570 90 297 0 +9 76 345 30 0 1536 0 0 1025 +10 410 285 -20 499 556 90 99 0 +11 472 189 30 0 1504 90 0 309 +12 270 49 30 925 970 0 0 1005 +13 219 325 -20 0 1653 90 391 0 +14 437 12 20 557 613 90 0 700 +15 418 218 20 0 1563 0 0 1028 +16 20 488 -10 754 820 90 701 0 +17 77 347 20 436 505 90 0 411 +18 73 346 10 0 1533 90 0 105 +19 480 455 -10 1123 1179 90 180 0 +20 129 292 -30 552 610 90 472 0 +21 337 257 -20 0 1647 90 566 0 +22 237 254 -30 0 1721 90 39 0 +23 131 220 -10 0 1612 90 968 0 +24 417 417 10 0 1498 90 0 217 +25 287 143 -20 0 1621 90 900 0 +26 379 80 -20 0 1521 90 677 0 +27 87 285 -20 0 1568 90 563 0 +28 374 489 20 0 1465 90 0 973 +29 440 247 20 0 1544 0 0 1015 +30 281 137 10 0 1617 90 0 644 +31 379 196 20 0 1595 90 0 466 +32 297 102 10 214 281 90 0 405 +33 39 76 -10 328 399 90 532 0 +34 35 306 20 0 1512 90 0 736 +35 435 68 10 0 1475 90 0 154 +36 245 251 10 60 130 90 0 218 +37 409 88 20 0 1508 90 0 965 +38 273 55 20 196 246 90 0 901 +39 163 340 30 0 1609 90 0 22 +40 129 223 -20 0 1611 90 109 0 +41 371 200 -20 0 1604 90 660 0 +42 357 26 -20 0 1486 90 730 0 +43 470 473 -10 1221 1270 90 60 0 +44 77 344 10 254 319 90 0 518 +45 478 461 10 0 1424 90 0 575 +46 128 291 -10 0 1606 90 910 0 +47 111 113 10 632 694 90 0 773 +48 164 21 -10 578 639 90 484 0 +49 21 485 30 0 1406 90 0 664 +50 108 26 -20 0 1469 90 830 0 +51 424 286 -20 0 1557 90 798 0 +52 200 270 20 0 1681 90 0 654 +53 7 300 -20 0 1486 90 407 0 +54 433 31 10 0 1449 90 0 769 +55 420 295 20 0 1559 90 0 687 +56 451 367 -10 0 1502 90 785 0 +57 118 157 20 0 1573 0 0 1001 +58 489 101 -30 0 1453 90 710 0 +59 200 261 -20 945 1017 90 335 0 +60 476 483 10 0 1410 90 0 43 +61 30 302 -10 0 1508 90 744 0 +62 8 300 -10 0 1487 90 102 0 +63 275 45 -30 0 1528 90 618 0 +64 238 46 40 735 784 90 0 589 +65 152 206 10 0 1627 0 0 1035 +66 99 218 30 154 205 90 0 695 +67 393 410 -20 0 1520 90 115 0 +68 480 460 -10 549 627 90 849 0 +69 337 256 20 154 201 90 0 576 +70 389 300 10 0 1587 90 0 231 +71 90 237 -10 0 1574 90 828 0 +72 321 280 30 0 1657 90 0 573 +73 417 218 -10 0 1564 90 157 0 +74 64 108 -40 0 1500 90 709 0 +75 57 432 10 0 1469 90 0 185 +76 356 24 20 249 323 90 0 659 +77 143 207 -20 0 1619 90 395 0 +78 221 325 -40 0 1654 90 656 0 +79 22 483 30 0 1409 90 0 669 +80 24 65 -10 0 1442 90 500 0 +81 141 431 30 362 423 90 0 142 +82 202 9 -10 0 1489 90 964 0 +83 20 48 -20 1294 1358 90 347 0 +84 457 163 20 284 346 90 0 253 +85 470 290 10 0 1511 0 0 1010 +86 268 400 -20 0 1583 90 362 0 +87 337 251 -20 0 1647 90 768 0 +88 366 20 -20 0 1477 90 631 0 +89 72 344 -20 0 1533 90 393 0 +90 149 203 10 553 597 90 0 473 +91 55 428 20 511 568 90 0 97 +92 189 7 30 0 1484 90 0 454 +93 397 18 -10 0 1460 90 108 0 +94 481 122 30 0 1470 90 0 551 +95 20 73 -10 0 1444 90 113 0 +96 54 430 -10 0 1468 90 341 0 +97 74 350 -20 0 1532 90 91 0 +98 202 8 -20 0 1488 90 399 0 +99 406 285 20 0 1575 90 0 10 +100 460 2 20 0 1410 90 0 483 +101 441 244 -10 0 1543 90 392 0 +102 1 293 10 0 1482 90 0 62 +103 115 465 -10 0 1481 90 789 0 +104 422 420 20 0 1493 90 0 549 +105 75 347 -10 0 1534 90 18 0 +106 141 428 -20 0 1526 90 972 0 +107 404 264 20 0 1580 0 0 1029 +108 398 23 10 0 1464 90 0 93 +109 148 211 20 167 233 90 0 40 +110 362 22 20 0 1480 0 0 1031 +111 479 127 -10 0 1475 90 885 0 +112 443 246 20 0 1541 90 0 757 +113 22 37 10 0 1422 90 0 95 +114 65 100 10 0 1496 90 0 338 +115 404 447 20 250 280 90 0 67 +116 102 264 10 0 1586 90 0 438 +117 444 271 10 0 1539 90 0 283 +118 325 466 -30 0 1506 90 210 0 +119 124 219 20 571 615 90 0 394 +120 335 243 -20 0 1649 90 646 0 +121 26 42 20 455 519 90 0 367 +122 113 106 20 0 1536 90 0 191 +123 399 450 20 0 1485 90 0 788 +124 146 439 -20 0 1519 90 208 0 +125 162 336 20 0 1611 90 0 663 +126 2 295 -10 0 1482 90 937 0 +127 122 35 -20 0 1484 90 351 0 +128 346 60 -20 1027 1086 90 165 0 +129 93 213 -10 0 1573 90 821 0 +130 218 316 20 0 1661 90 0 628 +131 116 156 10 0 1571 90 0 148 +132 419 422 20 0 1493 90 0 925 +133 467 141 10 0 1492 90 0 916 +134 187 491 20 0 1485 90 0 739 +135 433 25 20 0 1444 90 0 724 +136 286 137 10 0 1616 90 0 327 +137 370 82 40 0 1528 90 0 548 +138 132 290 -20 0 1610 90 986 0 +139 435 11 40 0 1432 90 0 645 +140 206 261 -10 1050 1104 90 918 0 +141 428 291 10 698 764 90 0 487 +142 95 384 -30 719 785 90 81 0 +143 205 223 -20 0 1682 90 183 0 +144 463 140 -20 0 1495 90 507 0 +145 343 47 -20 0 1511 90 716 0 +146 435 62 -10 0 1471 90 171 0 +147 387 488 -30 0 1460 90 775 0 +148 121 157 -10 0 1575 90 131 0 +149 182 463 30 0 1511 90 0 537 +150 92 216 10 0 1573 0 0 1018 +151 370 83 20 357 419 90 0 803 +152 444 242 -20 441 501 90 336 0 +153 90 285 -20 0 1571 90 946 0 +154 446 64 -10 0 1464 90 35 0 +155 312 264 20 0 1671 90 0 676 +156 208 11 20 0 1492 90 0 799 +157 442 247 10 0 1542 90 0 73 +158 140 431 -10 0 1523 90 425 0 +159 118 153 -10 0 1571 90 374 0 +160 134 428 -20 0 1522 90 538 0 +161 91 235 10 0 1575 90 0 999 +162 406 257 -20 0 1578 90 435 0 +163 377 76 -30 0 1519 90 921 0 +164 474 96 30 0 1463 90 0 419 +165 346 57 20 0 1519 90 0 128 +166 393 301 30 0 1583 90 0 496 +167 412 214 10 0 1569 90 0 726 +168 210 398 -30 0 1581 90 658 0 +169 346 150 20 948 998 90 0 306 +170 62 453 -10 0 1458 90 752 0 +171 437 61 10 0 1469 90 0 146 +172 87 96 30 0 1510 0 0 1003 +173 367 83 30 0 1531 0 0 1034 +174 91 268 10 869 931 90 0 813 +175 459 145 40 233 291 90 0 546 +176 63 444 20 0 1465 90 0 431 +177 433 27 20 0 1446 90 0 525 +178 60 454 -10 892 952 90 400 0 +179 478 99 -10 0 1461 90 957 0 +180 485 454 10 0 1423 90 0 19 +181 6 292 10 316 360 90 0 934 +182 398 20 20 333 394 90 0 706 +183 248 251 20 0 1732 90 0 143 +184 433 15 -10 0 1437 90 379 0 +185 64 426 -10 1162 1223 90 75 0 +186 154 207 20 0 1629 90 0 417 +187 481 456 -20 0 1425 90 295 0 +188 380 498 10 523 582 0 0 1019 +189 88 286 10 795 859 90 0 680 +190 111 23 10 266 326 90 0 822 +191 199 187 -20 0 1653 90 122 0 +192 269 48 -10 0 1532 90 929 0 +193 367 178 20 0 1597 90 0 565 +194 452 163 -20 0 1515 90 753 0 +195 431 28 -10 0 1448 90 531 0 +196 8 116 -20 0 1458 90 406 0 +197 233 47 20 0 1531 90 0 366 +198 237 43 -10 0 1527 90 896 0 +199 320 262 -20 585 656 90 836 0 +200 188 4 20 0 1481 90 0 328 +201 180 6 10 0 1481 90 0 846 +202 328 466 -10 0 1505 90 980 0 +203 393 12 -10 0 1457 90 762 0 +204 409 90 20 0 1509 90 0 300 +205 406 87 -20 0 1509 90 889 0 +206 394 407 20 733 789 90 0 427 +207 358 183 20 0 1607 90 0 365 +208 186 461 20 0 1514 90 0 124 +209 38 72 30 420 496 90 0 991 +210 323 471 30 0 1502 90 0 118 +211 224 192 -10 215 274 90 800 0 +212 278 46 20 0 1529 90 0 668 +213 272 403 30 494 555 90 0 251 +214 232 42 -20 0 1526 90 984 0 +215 18 63 -10 716 792 90 557 0 +216 58 458 10 0 1451 90 0 349 +217 416 417 -10 0 1499 90 24 0 +218 205 230 -10 0 1685 90 36 0 +219 65 453 -20 0 1460 90 240 0 +220 421 294 -20 0 1558 90 883 0 +221 434 245 -10 1377 1416 90 657 0 +222 2 116 -30 0 1453 90 820 0 +223 411 421 20 862 917 90 0 568 +224 315 260 10 223 278 90 0 848 +225 136 288 -20 1023 1063 90 945 0 +226 173 490 -10 406 462 90 303 0 +227 90 232 10 0 1573 90 0 433 +228 402 265 -40 306 365 90 623 0 +229 361 14 -30 0 1474 90 639 0 +230 348 147 10 0 1592 0 0 1022 +231 385 295 -10 0 1592 90 70 0 +232 394 23 20 0 1466 90 0 875 +233 466 295 20 0 1514 90 0 650 +234 71 103 20 0 1503 90 0 513 +235 125 29 -30 0 1481 90 842 0 +236 25 65 -20 0 1443 90 630 0 +237 58 449 -20 0 1458 90 711 0 +238 246 398 40 0 1586 90 0 597 +239 423 294 10 0 1556 90 0 289 +240 59 459 20 0 1451 90 0 219 +241 348 145 -20 763 813 90 272 0 +242 477 97 -10 0 1461 90 318 0 +243 307 102 40 0 1576 90 0 348 +244 169 31 -20 0 1501 90 935 0 +245 381 495 20 705 769 90 0 793 +246 95 234 10 315 362 90 0 850 +247 22 33 10 0 1420 90 0 635 +248 435 268 -10 1100 1154 90 873 0 +249 135 293 30 0 1612 90 0 905 +250 439 266 -20 0 1545 90 826 0 +251 269 402 -30 0 1581 90 213 0 +252 267 400 10 0 1584 90 0 337 +253 473 196 -20 564 642 90 84 0 +254 445 237 10 349 402 90 0 453 +255 461 284 -30 0 1521 90 423 0 +256 167 339 -10 0 1613 90 954 0 +257 26 43 -30 365 427 90 536 0 +258 101 386 20 0 1533 90 0 823 +259 342 54 -10 0 1518 90 998 0 +260 243 399 -30 782 837 90 506 0 +261 288 44 20 0 1525 90 0 859 +262 274 48 -10 0 1531 90 653 0 +263 360 184 -20 846 906 90 456 0 +264 23 67 -20 0 1443 90 271 0 +265 6 296 10 0 1486 0 0 1026 +266 249 258 -20 0 1726 90 287 0 +267 421 415 30 297 364 90 0 939 +268 319 468 -10 0 1506 90 6 0 +269 50 438 -20 0 1460 90 375 0 +270 440 61 -30 0 1467 90 827 0 +271 17 65 20 0 1437 90 0 264 +272 323 118 20 0 1584 90 0 241 +273 402 281 20 0 1579 90 0 556 +274 71 153 -40 746 816 90 352 0 +275 52 432 20 0 1466 0 0 1012 +276 378 199 10 0 1597 90 0 963 +277 238 204 20 0 1687 90 0 355 +278 208 184 20 146 192 90 0 442 +279 376 195 -20 0 1597 90 293 0 +280 473 475 10 0 1418 90 0 797 +281 215 395 20 0 1585 0 0 1016 +282 123 222 -20 0 1604 90 902 0 +283 436 241 -10 0 1548 90 117 0 +284 70 100 -10 1119 1191 90 313 0 +285 73 328 20 193 270 90 0 689 +286 241 205 30 0 1689 90 0 758 +287 250 405 20 303 370 90 0 266 +288 483 14 -30 0 1403 90 384 0 +289 466 287 -10 0 1515 90 239 0 +290 467 114 10 0 1478 0 0 1037 +291 120 159 -20 0 1576 90 418 0 +292 408 84 -20 0 1505 90 414 0 +293 413 217 20 230 289 90 0 279 +294 338 142 40 204 256 0 0 1017 +295 483 457 20 0 1423 90 0 187 +296 479 169 20 0 1492 90 0 377 +297 95 224 20 0 1577 90 0 8 +298 122 216 -20 461 537 90 610 0 +299 477 179 -20 0 1497 90 759 0 +300 406 99 -20 0 1517 90 204 0 +301 44 47 20 0 1445 90 0 320 +302 487 450 10 929 993 90 0 512 +303 172 488 10 0 1484 90 0 226 +304 460 374 20 753 831 90 0 959 +305 279 138 -20 281 320 90 884 0 +306 338 147 -20 0 1599 90 169 0 +307 395 295 20 0 1583 90 0 637 +308 195 185 -10 0 1649 90 416 0 +309 463 194 -30 0 1514 90 11 0 +310 30 72 -20 0 1452 90 642 0 +311 244 254 20 0 1727 0 0 1024 +312 317 261 -30 398 473 90 997 0 +313 67 108 10 0 1503 90 0 284 +314 442 310 -30 0 1533 90 534 0 +315 63 336 -20 0 1529 90 967 0 +316 109 107 -20 357 416 90 461 0 +317 100 387 -10 0 1531 90 505 0 +318 494 94 10 634 692 90 0 242 +319 343 49 -10 0 1513 90 691 0 +320 40 52 -20 546 591 90 301 0 +321 319 124 20 400 465 90 0 388 +322 94 97 -10 285 334 90 712 0 +323 476 94 20 0 1460 90 0 450 +324 283 47 -10 0 1529 90 633 0 +325 398 325 -20 774 843 90 861 0 +326 460 13 -20 0 1418 90 718 0 +327 305 107 -10 0 1581 90 136 0 +328 188 12 -20 0 1489 90 200 0 +329 136 290 -10 0 1614 90 356 0 +330 439 268 -20 0 1545 90 863 0 +331 112 467 10 0 1477 90 0 401 +332 181 469 -10 468 536 90 936 0 +333 358 18 -20 0 1479 90 467 0 +334 459 10 -20 0 1416 90 722 0 +335 199 268 20 0 1680 90 0 59 +336 436 237 20 186 264 90 0 152 +337 318 280 -10 0 1660 90 252 0 +338 64 99 -10 0 1495 90 114 0 +339 394 333 20 0 1568 90 0 457 +340 366 93 20 0 1539 90 0 931 +341 95 391 10 0 1525 90 0 96 +342 391 425 -10 0 1510 90 440 0 +343 344 146 -10 0 1594 90 756 0 +344 198 12 10 0 1491 90 0 683 +345 186 472 -10 0 1503 90 671 0 +346 390 408 -10 0 1523 90 526 0 +347 19 43 20 0 1424 90 0 83 +348 307 108 -40 0 1581 90 243 0 +349 59 457 -10 0 1453 90 216 0 +350 49 451 -10 0 1450 90 403 0 +351 125 39 20 0 1489 90 0 127 +352 61 147 40 0 1519 90 0 274 +353 317 123 -30 0 1591 90 686 0 +354 392 426 10 666 722 90 0 685 +355 237 213 -20 0 1695 90 277 0 +356 71 333 10 0 1537 90 0 329 +357 304 97 20 0 1572 90 0 520 +358 196 462 10 0 1516 90 0 761 +359 224 191 20 0 1670 90 0 804 +360 37 51 10 0 1443 90 0 763 +361 491 25 10 0 1405 90 0 858 +362 270 401 20 217 268 90 0 86 +363 474 461 30 0 1427 90 0 397 +364 66 448 10 0 1464 90 0 729 +365 337 241 -20 0 1647 90 207 0 +366 269 46 -20 0 1530 90 197 0 +367 22 41 -20 1110 1164 90 121 0 +368 198 271 20 0 1678 90 0 444 +369 287 43 10 0 1524 90 0 838 +370 446 63 -10 0 1464 90 825 0 +371 200 229 -10 0 1680 90 519 0 +372 48 72 -30 0 1465 90 564 0 +373 465 142 -30 0 1494 90 892 0 +374 123 155 10 0 1576 90 0 159 +375 16 497 20 0 1394 90 0 269 +376 220 319 30 0 1659 90 0 817 +377 484 171 -20 680 736 90 296 0 +378 55 431 -20 0 1468 90 571 0 +379 428 24 10 0 1447 90 0 184 +380 80 342 10 193 275 90 0 912 +381 16 68 20 521 617 0 0 1032 +382 124 56 -10 0 1503 90 749 0 +383 95 218 20 873 927 90 0 778 +384 481 26 30 0 1413 90 0 288 +385 145 434 20 462 514 90 0 516 +386 335 57 -10 0 1524 90 909 0 +387 26 490 10 0 1406 90 0 489 +388 324 127 -20 0 1591 90 321 0 +389 109 114 10 829 871 90 0 705 +390 72 148 -10 0 1529 90 786 0 +391 220 392 20 970 1015 90 0 13 +392 442 243 10 0 1542 90 0 101 +393 69 336 20 440 507 90 0 89 +394 131 226 -20 0 1613 90 119 0 +395 150 204 20 0 1624 90 0 77 +396 423 217 -30 0 1558 90 721 0 +397 419 459 -30 0 1466 90 363 0 +398 285 163 -20 0 1641 90 774 0 +399 203 7 20 0 1487 90 0 98 +400 54 445 10 0 1458 90 0 178 +401 109 463 -10 0 1479 90 331 0 +402 355 180 -20 0 1608 90 670 0 +403 13 455 10 381 430 90 0 350 +404 165 337 -40 0 1613 90 981 0 +405 314 124 -10 0 1593 90 32 0 +406 9 124 20 0 1463 90 0 196 +407 3 292 20 404 457 90 0 53 +408 16 462 10 935 986 90 0 845 +409 189 464 -20 0 1512 90 535 0 +410 288 154 -40 0 1631 90 985 0 +411 90 296 -20 0 1568 90 17 0 +412 138 438 -30 0 1516 90 816 0 +413 13 459 -20 0 1419 90 887 0 +414 461 8 20 0 1413 90 0 292 +415 96 97 -20 0 1517 90 627 0 +416 68 99 10 0 1498 90 0 308 +417 146 205 -20 0 1621 90 186 0 +418 117 152 20 0 1569 90 0 291 +419 481 96 -30 526 577 90 164 0 +420 338 260 -20 0 1646 90 598 0 +421 285 44 10 0 1526 90 0 792 +422 111 464 10 0 1479 90 0 944 +423 468 291 30 0 1513 90 0 255 +424 148 206 -20 0 1623 90 728 0 +425 184 464 10 285 344 90 0 158 +426 197 11 -20 0 1490 90 594 0 +427 396 410 -20 829 880 90 206 0 +428 133 53 20 0 1505 90 0 462 +429 132 30 20 875 926 0 0 1033 +430 464 13 20 853 906 90 0 802 +431 100 394 -20 0 1527 90 176 0 +432 483 22 10 0 1409 90 0 447 +433 93 235 -10 0 1577 90 227 0 +434 174 26 -10 0 1498 90 765 0 +435 436 264 20 0 1548 90 0 162 +436 24 492 10 0 1403 90 0 490 +437 406 94 -10 375 430 90 989 0 +438 234 246 -10 0 1718 90 116 0 +439 315 287 30 0 1660 90 0 893 +440 408 453 10 0 1477 90 0 342 +441 128 225 -30 0 1610 90 781 0 +442 226 191 -20 0 1671 90 278 0 +443 391 407 -20 0 1523 90 486 0 +444 198 264 -20 0 1681 90 368 0 +445 179 7 20 0 1481 90 0 634 +446 425 215 10 0 1556 90 0 741 +447 483 27 -10 0 1412 90 432 0 +448 22 40 -10 0 1425 90 966 0 +449 479 176 20 0 1494 90 0 602 +450 476 102 -20 0 1464 90 323 0 +451 386 405 -10 0 1528 90 578 0 +452 22 38 20 0 1423 0 0 1002 +453 440 241 -10 0 1544 90 254 0 +454 182 14 -30 0 1489 90 92 0 +455 266 405 -10 680 745 90 621 0 +456 357 181 20 367 441 90 0 263 +457 395 332 -20 593 648 90 339 0 +458 423 290 10 0 1557 90 0 881 +459 104 28 20 0 1469 90 0 682 +460 131 56 10 0 1507 90 0 569 +461 111 110 20 0 1537 90 0 316 +462 97 93 -20 0 1515 90 428 0 +463 90 274 -10 0 1573 90 699 0 +464 214 394 -20 0 1586 90 815 0 +465 6 114 -10 0 1455 90 509 0 +466 375 191 -20 0 1596 90 31 0 +467 356 21 20 414 452 90 0 333 +468 466 165 30 0 1502 90 0 779 +469 415 223 20 0 1567 90 0 890 +470 397 20 20 0 1462 90 0 693 +471 241 403 10 686 744 0 0 1036 +472 69 334 30 0 1535 90 0 20 +473 152 210 -10 0 1629 90 90 0 +474 67 335 20 0 1533 90 0 688 +475 126 30 10 0 1482 90 0 667 +476 390 423 -20 0 1512 90 747 0 +477 285 162 -20 625 688 90 5 0 +478 285 158 30 340 405 90 0 856 +479 406 96 20 280 342 90 0 746 +480 459 374 20 0 1491 90 0 833 +481 67 109 -20 0 1503 90 641 0 +482 468 475 10 0 1421 90 0 993 +483 438 31 -20 0 1446 90 100 0 +484 168 24 10 0 1494 90 0 48 +485 267 394 10 0 1589 90 0 751 +486 406 450 20 0 1481 90 0 443 +487 460 288 -10 0 1521 90 141 0 +488 224 203 20 0 1681 90 0 898 +489 21 487 -10 582 629 90 387 0 +490 21 488 -10 0 1404 90 436 0 +491 87 217 10 0 1568 90 0 545 +492 67 452 30 0 1462 90 0 579 +493 119 223 -20 853 906 90 604 0 +494 398 428 10 0 1503 90 0 7 +495 344 262 20 0 1640 90 0 951 +496 390 301 -30 0 1585 90 166 0 +497 167 27 30 0 1497 90 0 975 +498 236 247 20 0 1720 0 0 1021 +499 313 119 30 0 1589 90 0 983 +500 13 51 10 0 1425 90 0 80 +501 200 13 10 0 1492 90 0 503 +502 0 120 30 0 1453 0 0 1014 +503 202 4 -10 950 1004 90 501 0 +504 343 144 10 0 1593 90 0 3 +505 94 383 10 636 687 90 0 317 +506 250 411 30 0 1573 90 0 260 +507 464 134 20 0 1491 90 0 144 +508 443 237 20 0 1541 90 0 860 +509 4 114 10 712 769 90 0 465 +510 169 336 -10 0 1616 90 782 0 +511 200 178 20 240 298 90 0 915 +512 412 453 -10 0 1475 90 302 0 +513 121 151 -20 0 1572 90 234 0 +514 403 93 -20 0 1515 90 550 0 +515 399 301 -20 0 1577 90 617 0 +516 97 387 -20 823 869 90 385 0 +517 176 8 10 0 1481 90 0 624 +518 62 326 -10 0 1532 90 44 0 +519 151 207 10 0 1627 90 0 371 +520 299 98 -20 0 1575 90 357 0 +521 334 240 30 0 1650 90 0 996 +522 92 270 -10 0 1575 90 530 0 +523 444 269 -20 0 1540 90 651 0 +524 132 223 30 0 1613 90 0 679 +525 428 25 -20 0 1448 90 177 0 +526 413 421 10 768 828 90 0 346 +527 382 498 10 0 1454 90 0 636 +528 391 429 20 0 1507 0 0 1038 +529 398 97 10 264 344 90 0 780 +530 192 265 10 0 1675 90 0 522 +531 438 26 10 0 1442 90 0 195 +532 44 79 10 0 1467 90 0 33 +533 137 290 10 0 1615 90 0 577 +534 446 319 30 0 1527 90 0 314 +535 175 487 20 248 308 90 0 409 +536 26 45 30 0 1431 90 0 257 +537 147 435 -30 0 1523 90 149 0 +538 111 459 20 0 1483 90 0 160 +539 472 132 -20 767 826 90 982 0 +540 349 158 -20 0 1599 90 766 0 +541 86 268 -10 0 1570 90 906 0 +542 415 216 -10 0 1566 90 733 0 +543 121 218 20 191 257 90 0 742 +544 210 185 20 0 1658 90 0 596 +545 98 215 -10 0 1579 90 491 0 +546 484 174 -40 0 1488 90 175 0 +547 328 458 10 0 1512 90 0 552 +548 313 126 -40 0 1595 90 137 0 +549 390 415 -20 0 1518 90 104 0 +550 459 17 20 1039 1094 90 0 514 +551 481 124 -30 505 571 90 94 0 +552 386 414 -10 1109 1162 90 547 0 +553 116 466 20 0 1480 90 0 974 +554 468 295 10 0 1512 0 0 1011 +555 391 426 10 0 1509 90 0 558 +556 408 279 -20 0 1574 90 273 0 +557 15 68 10 448 508 90 0 215 +558 392 424 -10 0 1510 90 555 0 +559 88 95 -20 0 1510 90 698 0 +560 116 151 20 774 836 90 0 562 +561 240 250 10 0 1724 0 0 1027 +562 123 159 -20 0 1578 90 560 0 +563 89 290 20 0 1569 90 0 27 +564 39 50 30 0 1444 90 0 372 +565 359 179 -20 0 1604 90 193 0 +566 338 257 20 0 1646 90 0 21 +567 92 236 20 0 1576 90 0 862 +568 413 417 -20 1135 1207 90 223 0 +569 91 101 -10 0 1517 90 460 0 +570 55 449 20 0 1456 90 0 865 +571 57 425 20 0 1474 90 0 378 +572 465 287 10 0 1516 90 0 829 +573 320 280 -30 221 298 90 72 0 +574 322 468 20 0 1505 90 0 897 +575 483 458 -10 656 708 90 45 0 +576 312 267 -20 0 1670 90 69 0 +577 139 291 -10 0 1616 90 533 0 +578 388 408 10 0 1525 90 0 451 +579 110 459 -30 0 1483 90 492 0 +580 459 372 -10 0 1492 90 684 0 +581 204 269 30 49 98 90 0 933 +582 407 98 10 0 1516 90 0 740 +583 335 256 -10 890 962 90 694 0 +584 471 484 10 0 1413 90 0 864 +585 339 244 -20 0 1645 90 619 0 +586 89 272 -20 0 1572 90 811 0 +587 488 96 -10 0 1451 90 831 0 +588 316 286 -30 601 662 90 613 0 +589 235 50 -40 813 896 90 64 0 +590 316 258 -10 0 1668 90 649 0 +591 425 288 -10 0 1555 90 924 0 +592 213 397 -20 0 1583 90 771 0 +593 113 156 -20 0 1568 90 953 0 +594 199 9 20 853 911 90 0 426 +595 463 167 -10 0 1506 90 847 0 +596 129 27 -20 0 1481 90 544 0 +597 248 404 -40 0 1580 90 238 0 +598 405 276 20 0 1577 90 0 420 +599 400 288 30 0 1580 90 0 717 +600 61 156 -10 462 532 90 869 0 +601 393 20 20 0 1464 0 0 1008 +602 484 177 -20 0 1489 90 449 0 +603 108 116 -10 0 1539 90 907 0 +604 112 217 20 0 1593 90 0 493 +605 389 404 -10 0 1527 90 837 0 +606 102 391 20 0 1530 90 0 652 +607 434 26 10 0 1445 90 0 791 +608 488 26 30 0 1408 90 0 839 +609 477 120 10 968 1026 90 0 843 +610 126 220 20 0 1607 90 0 298 +611 439 310 -30 0 1536 90 807 0 +612 212 319 30 0 1656 90 0 904 +613 320 283 30 421 471 90 0 588 +614 17 459 -20 0 1421 90 812 0 +615 236 213 20 0 1695 90 0 988 +616 68 108 10 0 1504 90 0 895 +617 390 294 20 0 1588 90 0 515 +618 275 42 30 0 1525 90 0 63 +619 423 214 20 0 1558 90 0 585 +620 460 367 20 0 1494 90 0 960 +621 272 402 10 0 1581 90 0 455 +622 478 102 -20 0 1463 90 806 0 +623 400 260 40 150 212 90 0 228 +624 181 6 -10 678 753 90 517 0 +625 470 475 30 0 1420 90 0 990 +626 245 408 -10 585 652 90 772 0 +627 93 96 20 0 1515 90 0 415 +628 218 318 -20 0 1659 90 130 0 +629 441 265 -20 0 1543 90 899 0 +630 21 64 20 0 1439 90 0 236 +631 356 23 20 0 1484 90 0 88 +632 267 44 -20 0 1528 90 648 0 +633 277 50 10 0 1533 90 0 324 +634 182 4 -20 0 1479 90 445 0 +635 26 36 -10 0 1425 90 247 0 +636 384 491 -10 897 948 90 527 0 +637 418 290 -20 1172 1221 90 307 0 +638 321 277 10 0 1659 90 0 947 +639 358 16 30 596 641 90 0 229 +640 389 334 -20 0 1572 90 854 0 +641 48 78 20 0 1469 90 0 481 +642 24 68 20 0 1444 90 0 310 +643 206 225 -30 0 1684 90 977 0 +644 290 141 -10 645 709 90 30 0 +645 439 15 -40 0 1433 90 139 0 +646 359 182 20 0 1606 90 0 120 +647 413 287 -20 0 1567 90 976 0 +648 230 49 20 201 253 90 0 632 +649 407 280 10 595 653 90 0 590 +650 459 295 -20 0 1521 90 233 0 +651 468 199 20 0 1511 90 0 523 +652 101 384 -20 0 1534 90 606 0 +653 170 26 10 0 1497 90 0 262 +654 197 270 -20 0 1678 90 52 0 +655 415 289 20 169 228 90 0 770 +656 203 390 40 0 1587 90 0 78 +657 443 272 10 0 1540 90 0 221 +658 210 391 30 0 1588 90 0 168 +659 363 22 -20 0 1480 90 76 0 +660 352 176 20 0 1608 90 0 41 +661 212 223 -10 0 1688 90 844 0 +662 8 120 -10 0 1460 90 927 0 +663 244 250 -20 0 1728 90 125 0 +664 18 484 -30 0 1405 90 49 0 +665 379 82 -30 0 1523 90 696 0 +666 84 346 -10 0 1543 90 681 0 +667 233 207 -10 0 1688 90 475 0 +668 344 62 -20 1208 1274 90 212 0 +669 20 489 -30 856 901 90 79 0 +670 361 181 20 662 723 90 0 402 +671 174 494 10 0 1479 90 0 345 +672 49 76 -20 0 1469 90 894 0 +673 390 325 30 883 929 90 0 735 +674 7 118 -20 0 1458 90 871 0 +675 107 26 -30 0 1469 90 872 0 +676 312 270 -20 0 1669 90 155 0 +677 399 102 20 0 1524 90 0 26 +678 109 108 10 0 1534 0 0 1013 +679 115 218 -30 298 341 90 524 0 +680 88 287 -10 0 1568 90 189 0 +681 54 424 10 0 1472 90 0 666 +682 125 32 -20 0 1483 90 459 0 +683 199 12 -10 0 1491 90 344 0 +684 457 374 10 0 1493 90 0 580 +685 391 413 -10 0 1519 90 354 0 +686 304 102 30 0 1577 90 0 353 +687 391 293 -20 0 1587 90 55 0 +688 66 336 -20 0 1531 90 474 0 +689 132 291 -20 0 1610 90 285 0 +690 18 462 -40 0 1420 90 731 0 +691 347 62 10 0 1523 90 0 319 +692 466 142 10 0 1493 90 0 995 +693 389 17 -20 0 1463 90 470 0 +694 342 254 10 0 1642 90 0 583 +695 92 223 -30 0 1574 90 66 0 +696 404 83 30 0 1507 90 0 665 +697 290 46 -40 0 1527 90 814 0 +698 95 92 20 0 1513 90 0 559 +699 200 265 10 0 1682 90 0 463 +700 435 16 -20 0 1436 90 14 0 +701 25 499 10 0 1399 90 0 16 +702 319 260 20 0 1665 90 0 737 +703 116 225 -30 0 1598 90 880 0 +704 402 284 -10 313 367 90 755 0 +705 108 105 -10 0 1532 90 389 0 +706 386 13 -20 0 1461 90 182 0 +707 472 129 10 312 383 90 0 928 +708 132 57 20 396 443 90 0 852 +709 43 71 40 0 1461 90 0 74 +710 493 91 30 542 599 90 0 58 +711 12 451 20 0 1423 90 0 237 +712 201 188 10 0 1655 90 0 322 +713 60 428 20 1059 1137 90 0 857 +714 243 248 30 0 1727 90 0 745 +715 230 197 -20 0 1678 90 808 0 +716 389 11 20 0 1458 90 0 145 +717 401 281 -30 0 1580 90 599 0 +718 459 14 20 372 439 90 0 326 +719 411 95 30 475 521 90 0 917 +720 0 297 10 679 737 90 0 2 +721 476 196 30 476 544 90 0 396 +722 458 16 20 0 1421 90 0 334 +723 92 230 -10 0 1575 90 819 0 +724 432 24 -20 0 1444 90 135 0 +725 215 317 10 0 1659 90 0 855 +726 371 192 -10 0 1600 90 167 0 +727 481 20 20 0 1409 90 0 853 +728 152 207 20 0 1627 90 0 424 +729 14 459 -10 0 1419 90 364 0 +730 361 17 20 777 832 90 0 42 +731 8 497 40 0 1389 90 0 690 +732 206 186 -20 891 955 90 979 0 +733 421 218 10 0 1561 90 0 542 +734 402 264 20 0 1582 90 0 776 +735 388 325 -30 0 1577 90 673 0 +736 35 304 -20 0 1513 90 34 0 +737 321 263 -20 0 1662 90 702 0 +738 444 313 -30 0 1531 90 940 0 +739 188 462 -20 0 1514 90 134 0 +740 400 103 -10 0 1524 90 582 0 +741 418 221 -10 1150 1223 90 446 0 +742 112 219 -20 0 1593 90 543 0 +743 408 452 -20 490 564 90 962 0 +744 30 301 10 660 726 90 0 61 +745 205 228 -30 0 1684 90 714 0 +746 407 88 -20 0 1509 90 479 0 +747 380 489 20 0 1462 90 0 476 +748 395 331 -20 0 1568 90 783 0 +749 133 26 10 0 1482 90 0 382 +750 21 68 20 0 1442 90 0 834 +751 313 282 -10 0 1664 90 485 0 +752 53 440 10 0 1461 90 0 170 +753 458 130 20 0 1494 90 0 194 +754 437 15 -20 0 1434 90 955 0 +755 400 286 10 0 1580 90 0 704 +756 346 144 10 0 1591 90 0 343 +757 440 244 -20 809 874 90 112 0 +758 280 162 -30 158 210 90 286 0 +759 488 173 20 0 1484 90 0 299 +760 326 118 10 213 272 90 0 930 +761 207 400 -10 0 1578 90 358 0 +762 391 18 10 0 1463 90 0 203 +763 37 55 -10 0 1446 90 360 0 +764 204 15 -10 0 1495 90 879 0 +765 173 28 10 0 1500 90 0 434 +766 343 148 20 399 441 90 0 540 +767 231 43 -10 447 513 90 949 0 +768 445 273 20 725 781 90 0 87 +769 432 27 -10 0 1447 90 54 0 +770 439 305 -20 0 1538 90 655 0 +771 208 396 20 0 1583 90 0 592 +772 249 407 10 403 455 90 0 626 +773 107 112 -10 0 1536 90 47 0 +774 279 159 20 0 1639 90 0 398 +775 376 494 30 0 1460 90 0 147 +776 403 262 -20 493 547 90 734 0 +777 41 47 20 359 406 90 0 805 +778 96 213 -20 0 1576 90 383 0 +779 461 167 -30 0 1508 90 468 0 +780 391 99 -10 0 1528 90 529 0 +781 116 221 30 0 1597 90 0 441 +782 165 343 10 556 613 90 0 510 +783 388 334 20 0 1573 90 0 748 +784 130 57 40 289 365 90 0 903 +785 422 409 10 234 290 90 0 56 +786 66 156 10 0 1528 90 0 390 +787 485 86 20 0 1448 90 0 961 +788 389 428 -20 0 1509 90 123 0 +789 117 467 10 0 1480 90 0 103 +790 475 477 -20 0 1415 90 809 0 +791 429 27 -10 1272 1339 90 607 0 +792 339 60 -10 0 1525 90 421 0 +793 381 494 -20 0 1458 90 245 0 +794 218 321 -10 0 1657 90 971 0 +795 64 101 -10 667 724 90 876 0 +796 343 254 -30 0 1641 90 992 0 +797 478 464 -10 0 1422 90 280 0 +798 423 286 20 0 1558 90 0 51 +799 198 9 -20 0 1488 90 156 0 +800 225 196 10 128 174 90 0 211 +801 374 190 -30 0 1597 90 987 0 +802 462 14 -20 0 1417 90 430 0 +803 347 54 -20 0 1516 90 151 0 +804 231 195 -20 0 1676 90 359 0 +805 72 96 -20 0 1499 90 777 0 +806 489 87 20 0 1445 90 0 622 +807 443 313 30 0 1531 90 0 611 +808 233 204 20 0 1685 90 0 715 +809 477 483 20 0 1409 90 0 790 +810 459 368 -10 0 1494 90 841 0 +811 95 277 20 0 1577 90 0 586 +812 16 460 20 1112 1180 90 0 614 +813 100 266 -10 0 1584 90 174 0 +814 288 53 40 0 1534 90 0 697 +815 211 386 20 141 212 90 0 464 +816 144 439 30 0 1518 90 0 412 +817 224 314 -30 0 1665 90 376 0 +818 79 291 10 0 1559 90 0 938 +819 95 235 10 155 227 90 0 723 +820 7 123 30 0 1460 90 0 222 +821 91 217 10 692 738 90 0 129 +822 105 27 -10 0 1469 90 190 0 +823 101 385 -20 0 1533 90 258 0 +824 238 210 -20 757 821 90 923 0 +825 439 67 10 322 386 90 0 370 +826 435 267 20 0 1549 90 0 250 +827 443 64 30 0 1466 90 0 270 +828 92 234 10 0 1576 90 0 71 +829 450 265 -10 0 1534 90 572 0 +830 102 27 20 796 852 90 0 50 +831 492 94 10 0 1447 90 0 587 +832 440 63 -20 0 1468 90 868 0 +833 453 367 -20 0 1500 90 480 0 +834 15 69 -20 0 1438 90 750 0 +835 489 17 10 0 1401 90 0 994 +836 335 255 20 0 1649 90 0 199 +837 419 418 10 394 454 90 0 605 +838 292 41 -10 0 1521 90 369 0 +839 489 27 -30 0 1408 90 608 0 +840 96 270 -10 0 1579 90 886 0 +841 461 369 10 0 1492 90 0 810 +842 105 22 30 0 1464 90 0 235 +843 479 121 -10 0 1472 90 609 0 +844 207 223 10 0 1684 90 0 661 +845 17 458 -10 1297 1360 90 408 0 +846 186 7 -10 0 1483 90 201 0 +847 465 168 10 837 902 90 0 595 +848 416 288 -10 0 1564 90 224 0 +849 388 418 10 217 283 90 0 68 +850 92 233 -10 768 830 90 246 0 +851 179 492 -10 678 752 90 978 0 +852 132 55 -20 0 1507 90 708 0 +853 485 24 -20 0 1408 90 727 0 +854 388 331 20 0 1574 90 0 640 +855 217 323 -10 0 1654 90 725 0 +856 281 164 -30 0 1643 90 478 0 +857 169 340 -20 0 1613 90 713 0 +858 491 20 -10 0 1401 90 361 0 +859 279 42 -20 0 1524 90 261 0 +860 439 243 -20 0 1545 90 508 0 +861 391 334 20 402 470 90 0 325 +862 96 244 -20 0 1580 90 567 0 +863 441 273 20 903 972 90 0 330 +864 477 478 -10 0 1413 90 584 0 +865 56 434 -20 0 1467 90 570 0 +866 12 463 20 0 1415 90 0 970 +867 458 164 -10 0 1509 90 913 0 +868 446 65 20 0 1465 90 0 832 +869 71 156 10 0 1532 90 0 600 +870 65 153 30 0 1526 0 0 1006 +871 8 118 20 1079 1138 90 0 674 +872 102 29 30 0 1469 90 0 675 +873 315 265 10 0 1668 90 0 248 +874 343 62 10 0 1525 90 0 941 +875 384 16 -20 0 1465 90 232 0 +876 67 105 10 0 1501 90 0 795 +877 478 118 20 0 1471 90 0 942 +878 73 101 20 0 1503 0 0 1023 +879 200 14 10 311 356 90 0 764 +880 114 225 30 0 1596 90 0 703 +881 460 293 -10 1121 1176 90 458 0 +882 51 447 10 438 501 0 0 1004 +883 418 295 20 0 1561 90 0 220 +884 282 139 20 0 1619 90 0 305 +885 477 122 10 886 924 90 0 111 +886 91 266 10 0 1575 90 0 840 +887 16 463 20 0 1418 90 0 413 +888 228 199 -20 673 746 90 926 0 +889 435 20 20 0 1439 90 0 205 +890 467 195 -20 285 344 90 469 0 +891 469 132 10 0 1486 0 0 1020 +892 465 136 30 964 1007 90 0 373 +893 246 255 -30 818 877 90 439 0 +894 49 75 20 810 857 90 0 672 +895 66 98 -10 0 1496 90 616 0 +896 166 32 10 296 352 90 0 198 +897 326 466 -20 753 817 90 574 0 +898 202 186 -20 0 1654 90 488 0 +899 467 285 20 0 1515 90 0 629 +900 290 136 20 0 1614 90 0 25 +901 341 58 -20 0 1522 90 38 0 +902 121 219 20 0 1602 90 0 282 +903 107 35 -40 986 1041 90 784 0 +904 216 319 -30 0 1658 90 612 0 +905 134 288 -30 0 1612 90 249 0 +906 89 270 10 590 647 90 0 541 +907 136 52 10 759 817 90 0 603 +908 462 167 20 0 1507 90 0 952 +909 340 54 10 0 1519 90 0 386 +910 80 286 10 0 1561 90 0 46 +911 38 301 -20 0 1516 90 922 0 +912 25 307 -10 0 1502 90 380 0 +913 470 139 10 0 1488 90 0 867 +914 270 400 10 151 213 90 0 969 +915 204 187 -20 803 857 90 511 0 +916 460 171 -10 937 994 90 133 0 +917 399 106 -30 0 1527 90 719 0 +918 197 267 10 582 626 90 0 140 +919 77 350 10 997 1058 90 0 4 +920 91 231 30 0 1574 90 0 943 +921 398 103 30 0 1526 90 0 163 +922 35 303 20 0 1513 90 0 911 +923 231 204 20 0 1685 90 0 824 +924 311 266 10 0 1671 90 0 591 +925 416 420 -20 0 1497 90 132 0 +926 231 203 20 0 1684 90 0 888 +927 4 116 10 618 678 90 0 662 +928 417 217 -10 0 1564 90 707 0 +929 268 52 10 1003 1079 90 0 192 +930 345 144 -10 568 640 90 760 0 +931 368 85 -20 0 1532 90 340 0 +932 441 65 10 0 1469 0 0 1007 +933 201 270 -30 0 1682 90 581 0 +934 0 293 -10 591 637 90 181 0 +935 167 24 20 0 1494 90 0 244 +936 186 464 10 0 1511 90 0 332 +937 7 292 10 246 306 90 0 126 +938 80 290 -10 0 1560 90 818 0 +939 405 455 -30 0 1477 90 267 0 +940 439 312 30 257 324 90 0 738 +941 300 108 -10 0 1584 90 874 0 +942 478 121 -20 788 840 90 877 0 +943 92 232 -30 0 1575 90 920 0 +944 111 463 -10 0 1480 90 422 0 +945 132 294 20 0 1609 90 0 225 +946 134 285 20 0 1613 90 0 153 +947 316 284 -10 510 570 90 638 0 +948 56 428 -30 0 1471 90 958 0 +949 232 47 10 262 327 90 0 767 +950 466 291 -10 0 1515 90 1 0 +951 341 257 -20 0 1643 90 495 0 +952 420 213 -20 0 1561 90 908 0 +953 116 152 20 678 750 90 0 593 +954 163 337 10 0 1611 90 0 256 +955 440 7 20 0 1426 90 0 754 +956 208 222 30 667 734 0 0 1009 +957 485 95 10 281 351 90 0 179 +958 97 385 30 0 1530 90 0 948 +959 462 367 -20 0 1492 90 304 0 +960 455 365 -20 0 1499 90 620 0 +961 492 95 -20 0 1447 90 787 0 +962 405 450 20 0 1481 90 0 743 +963 371 193 -10 0 1601 90 276 0 +964 234 202 10 0 1684 90 0 82 +965 404 103 -20 0 1522 90 37 0 +966 24 41 10 0 1427 90 0 448 +967 67 334 20 532 600 90 0 315 +968 207 227 10 0 1686 90 0 23 +969 277 403 -10 395 464 90 914 0 +970 15 457 -20 0 1421 90 866 0 +971 217 319 10 0 1658 90 0 794 +972 111 467 20 597 647 90 0 106 +973 378 493 -20 426 487 90 28 0 +974 112 465 -20 0 1479 90 553 0 +975 173 25 -30 952 1007 90 497 0 +976 421 292 20 0 1558 90 0 647 +977 74 146 30 0 1530 90 0 643 +978 178 491 10 0 1483 90 0 851 +979 204 185 20 0 1655 90 0 732 +980 319 470 10 0 1504 90 0 202 +981 163 331 40 118 179 90 0 404 +982 470 125 20 253 316 90 0 539 +983 315 121 -30 0 1590 90 499 0 +984 166 34 20 0 1503 90 0 214 +985 284 140 40 115 172 90 0 410 +986 85 288 20 329 386 90 0 138 +987 376 190 30 0 1595 90 0 801 +988 238 203 -20 0 1686 90 615 0 +989 399 104 10 0 1526 90 0 437 +990 472 481 -30 0 1414 90 625 0 +991 46 74 -30 0 1465 90 209 0 +992 401 255 30 0 1583 90 0 796 +993 475 480 -10 0 1413 90 482 0 +994 485 27 -10 1231 1291 90 835 0 +995 476 174 -10 874 924 90 692 0 +996 330 242 -30 0 1654 90 521 0 +997 332 249 30 82 144 90 0 312 +998 375 80 10 550 598 90 0 259 +999 94 235 -10 0 1578 90 161 0 +1000 287 144 20 0 1622 0 0 1030 +1001 118 157 -20 0 1573 90 57 0 +1002 22 38 -20 0 1423 90 452 0 +1003 87 96 -30 0 1510 90 172 0 +1004 51 447 -10 438 501 90 882 0 +1005 270 49 -30 925 970 90 12 0 +1006 65 153 -30 0 1526 90 870 0 +1007 441 65 -10 0 1469 90 932 0 +1008 393 20 -20 0 1464 90 601 0 +1009 208 222 -30 667 734 90 956 0 +1010 470 290 -10 0 1511 90 85 0 +1011 468 295 -10 0 1512 90 554 0 +1012 52 432 -20 0 1466 90 275 0 +1013 109 108 -10 0 1534 90 678 0 +1014 0 120 -30 0 1453 90 502 0 +1015 440 247 -20 0 1544 90 29 0 +1016 215 395 -20 0 1585 90 281 0 +1017 338 142 -40 204 256 90 294 0 +1018 92 216 -10 0 1573 90 150 0 +1019 380 498 -10 523 582 90 188 0 +1020 469 132 -10 0 1486 90 891 0 +1021 236 247 -20 0 1720 90 498 0 +1022 348 147 -10 0 1592 90 230 0 +1023 73 101 -20 0 1503 90 878 0 +1024 244 254 -20 0 1727 90 311 0 +1025 76 345 -30 0 1536 90 9 0 +1026 6 296 -10 0 1486 90 265 0 +1027 240 250 -10 0 1724 90 561 0 +1028 418 218 -20 0 1563 90 15 0 +1029 404 264 -20 0 1580 90 107 0 +1030 287 144 -20 0 1622 90 1000 0 +1031 362 22 -20 0 1480 90 110 0 +1032 16 68 -20 521 617 90 381 0 +1033 132 30 -20 875 926 90 429 0 +1034 367 83 -30 0 1531 90 173 0 +1035 152 206 -10 0 1627 90 65 0 +1036 241 403 -10 686 744 90 471 0 +1037 467 114 -10 0 1478 90 290 0 +1038 391 429 -20 0 1507 90 528 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1105.txt b/jsprit-instances/instances/lilim/1000/LC1105.txt new file mode 100644 index 00000000..1b8b03bf --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1105.txt @@ -0,0 +1,1060 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 -20 187 283 90 231 0 +2 5 297 -10 931 1041 90 720 0 +3 355 177 20 136 303 90 0 565 +4 78 346 -10 307 451 90 44 0 +5 286 159 -30 502 624 90 478 0 +6 322 465 10 226 335 90 0 118 +7 393 408 -10 625 713 90 443 0 +8 89 216 -30 473 584 90 129 0 +9 76 345 -10 503 623 90 380 0 +10 410 285 20 457 599 90 0 649 +11 472 189 30 356 468 90 0 721 +12 270 49 -20 889 1006 90 632 0 +13 219 325 10 486 597 90 0 971 +14 437 12 -40 526 643 90 139 0 +15 418 218 -10 948 1056 90 542 0 +16 20 488 -10 726 849 90 490 0 +17 77 347 20 397 545 90 0 89 +18 73 346 10 701 798 90 0 105 +19 480 455 -10 1098 1203 90 797 0 +20 129 292 10 526 636 90 0 138 +21 337 257 -20 771 897 90 951 0 +22 237 254 20 608 709 0 0 1058 +23 131 220 -10 720 840 90 298 0 +24 417 417 -20 931 1044 90 925 0 +25 287 143 10 718 823 0 0 1051 +26 379 80 -30 694 832 90 173 0 +27 87 285 -10 671 801 90 818 0 +28 374 489 20 269 389 90 0 147 +29 440 247 20 675 822 90 0 392 +30 281 137 10 339 447 90 0 136 +31 379 196 20 633 745 0 0 1047 +32 297 102 10 195 300 90 0 357 +33 39 76 10 299 429 90 0 513 +34 35 306 20 347 461 90 0 61 +35 435 68 10 259 378 90 0 154 +36 245 251 10 26 164 90 0 663 +37 409 88 20 626 744 90 0 746 +38 273 55 20 196 313 90 0 63 +39 163 340 30 431 551 90 0 510 +40 129 223 20 267 347 90 0 524 +41 371 200 -30 812 946 90 726 0 +42 357 26 -10 1117 1247 90 333 0 +43 470 473 10 1195 1296 0 0 1001 +44 77 344 10 215 359 90 0 4 +45 478 461 10 422 569 90 0 187 +46 128 291 10 591 754 0 0 1048 +47 111 113 -20 621 704 90 705 0 +48 164 21 20 555 661 90 0 765 +49 21 485 30 458 568 90 0 701 +50 108 26 -10 380 535 90 190 0 +51 424 286 -10 488 600 90 458 0 +52 200 270 -10 184 283 90 933 0 +53 7 300 -10 1034 1125 90 102 0 +54 433 31 10 285 423 90 0 379 +55 420 295 20 946 1074 90 0 637 +56 451 367 -20 1092 1237 90 304 0 +57 118 157 20 385 484 90 0 593 +58 489 101 -10 995 1076 90 831 0 +59 200 261 10 910 1053 90 0 140 +60 476 483 10 619 760 90 0 809 +61 30 302 -20 536 668 90 34 0 +62 8 300 -30 1125 1216 90 934 0 +63 275 45 -20 422 537 90 38 0 +64 238 46 -10 702 817 90 949 0 +65 152 206 -30 895 989 90 77 0 +66 99 218 30 154 286 90 0 778 +67 393 410 -20 889 1005 90 206 0 +68 480 460 -30 532 643 90 363 0 +69 337 256 -20 142 213 90 836 0 +70 389 300 10 267 390 90 0 617 +71 90 237 -30 1195 1317 90 920 0 +72 321 280 -10 119 218 90 638 0 +73 417 218 -10 1030 1156 90 446 0 +74 64 108 10 453 560 90 0 876 +75 57 432 -20 951 1055 90 269 0 +76 356 24 20 249 363 90 0 631 +77 143 207 30 243 349 90 0 65 +78 221 325 -10 586 681 90 725 0 +79 22 483 30 325 466 90 0 669 +80 24 65 -10 879 1002 90 95 0 +81 141 431 30 341 445 90 0 160 +82 202 9 10 1170 1336 0 0 1020 +83 20 48 10 1267 1385 90 0 500 +84 457 163 20 255 374 90 0 779 +85 470 290 -20 807 924 90 899 0 +86 268 400 -20 833 964 90 455 0 +87 337 251 -30 105 249 90 997 0 +88 366 20 10 844 958 90 0 110 +89 72 344 -20 584 729 90 17 0 +90 149 203 -10 515 636 90 417 0 +91 55 428 20 481 597 90 0 378 +92 189 7 30 291 392 90 0 624 +93 397 18 -10 480 613 90 108 0 +94 481 122 30 547 714 90 0 843 +95 20 73 10 290 397 90 0 80 +96 54 430 20 600 662 90 0 606 +97 74 350 10 885 984 90 0 919 +98 202 8 -10 1082 1242 90 344 0 +99 406 285 -30 375 492 90 704 0 +100 460 2 20 635 741 90 0 802 +101 441 244 -20 849 1016 90 112 0 +102 1 293 10 449 597 90 0 53 +103 115 465 10 365 510 90 0 944 +104 422 420 -30 448 588 90 267 0 +105 75 347 -10 789 893 90 18 0 +106 141 428 20 208 328 90 0 412 +107 404 264 20 371 485 90 0 776 +108 398 23 10 270 404 90 0 93 +109 148 211 -20 147 252 90 473 0 +110 362 22 -10 1022 1149 90 88 0 +111 479 127 -10 375 515 90 707 0 +112 443 246 20 496 633 90 0 101 +113 22 37 -10 798 928 90 635 0 +114 65 100 -20 724 850 90 481 0 +115 404 447 20 250 324 90 0 397 +116 102 264 10 148 257 90 0 813 +117 444 271 -10 607 714 90 250 0 +118 325 466 -10 616 772 90 6 0 +119 124 219 -20 545 641 90 394 0 +120 335 243 -20 393 529 90 365 0 +121 26 42 20 427 546 90 0 452 +122 113 106 20 198 323 90 0 389 +123 399 450 20 964 1063 0 0 1013 +124 146 439 -20 604 744 90 385 0 +125 162 336 20 153 274 90 0 857 +126 2 295 30 741 860 0 0 1018 +127 122 35 10 283 397 90 0 429 +128 346 60 -20 998 1114 90 145 0 +129 93 213 30 370 497 90 0 8 +130 218 316 20 73 211 90 0 904 +131 116 156 10 474 578 90 0 560 +132 419 422 -10 530 692 90 837 0 +133 467 141 10 543 668 90 0 892 +134 187 491 20 736 890 90 0 409 +135 433 25 -10 869 1004 90 607 0 +136 286 137 -10 413 562 90 30 0 +137 370 82 40 419 539 90 0 998 +138 132 290 -10 804 911 90 20 0 +139 435 11 40 325 459 90 0 14 +140 206 261 -10 1017 1137 90 59 0 +141 428 291 -20 664 798 90 798 0 +142 95 384 -30 680 825 90 652 0 +143 205 223 20 443 592 90 0 844 +144 463 140 10 263 398 90 0 692 +145 343 47 20 704 840 90 0 128 +146 435 62 -20 1139 1236 90 868 0 +147 387 488 -20 952 1082 90 28 0 +148 121 157 -20 199 300 90 562 0 +149 182 463 -10 353 459 90 425 0 +150 92 216 -10 746 866 90 821 0 +151 370 83 20 334 442 90 0 340 +152 444 242 -20 399 543 90 508 0 +153 90 285 40 953 1069 90 0 811 +154 446 64 -10 564 700 90 35 0 +155 312 264 20 96 215 90 0 590 +156 208 11 -10 1304 1394 90 503 0 +157 442 247 -20 601 712 90 336 0 +158 140 431 30 265 338 0 0 1034 +159 118 153 30 917 1059 90 0 374 +160 134 428 -30 914 1013 90 81 0 +161 91 235 -10 1111 1218 90 227 0 +162 406 257 -20 556 676 90 228 0 +163 377 76 -30 609 729 90 931 0 +164 474 96 30 271 407 0 0 1009 +165 346 57 20 904 1023 90 0 668 +166 393 301 30 463 564 90 0 515 +167 412 214 10 165 272 90 0 952 +168 210 398 -40 557 681 90 656 0 +169 346 150 -10 922 1024 90 756 0 +170 62 453 -10 475 624 90 364 0 +171 437 61 -20 1033 1157 90 832 0 +172 87 96 30 715 838 0 0 1011 +173 367 83 30 224 366 90 0 26 +174 91 268 -10 844 955 90 906 0 +175 459 145 40 233 363 90 0 539 +176 63 444 -30 1054 1176 90 219 0 +177 433 27 20 619 703 90 0 791 +178 60 454 10 854 990 90 0 237 +179 478 99 10 585 707 90 0 450 +180 485 454 -20 809 924 90 295 0 +181 6 292 -10 288 387 90 937 0 +182 398 20 20 320 408 90 0 601 +183 248 251 20 2 103 90 0 714 +184 433 15 20 297 412 90 0 700 +185 64 426 -10 1122 1263 90 400 0 +186 154 207 20 961 1107 0 0 1052 +187 481 456 -10 991 1128 90 45 0 +188 380 498 -30 485 619 90 775 0 +189 88 286 -10 758 896 90 910 0 +190 111 23 10 266 324 90 0 50 +191 199 187 -20 393 531 90 278 0 +192 269 48 -10 796 915 90 262 0 +193 367 178 20 529 662 90 0 646 +194 452 163 30 219 354 90 0 908 +195 431 28 20 689 818 90 0 525 +196 8 116 20 857 994 90 0 662 +197 233 47 20 321 451 90 0 214 +198 237 43 20 609 725 90 0 589 +199 320 262 10 562 678 90 0 576 +200 188 4 -30 382 486 90 328 0 +201 180 6 10 749 863 90 0 445 +202 328 466 -20 806 947 90 574 0 +203 393 12 10 589 700 90 0 693 +204 409 90 -10 531 655 90 582 0 +205 406 87 -10 893 1043 90 437 0 +206 394 407 20 703 818 90 0 67 +207 358 183 -20 892 1045 90 456 0 +208 186 461 20 220 342 90 0 739 +209 38 72 30 385 530 90 0 372 +210 323 471 -10 433 581 90 268 0 +211 224 192 -20 186 304 90 488 0 +212 278 46 20 205 338 90 0 814 +213 272 403 -10 470 579 90 914 0 +214 232 42 -20 507 637 90 197 0 +215 18 63 -10 705 803 90 834 0 +216 58 458 -30 680 795 90 492 0 +217 416 417 -10 1011 1145 90 785 0 +218 205 230 30 185 282 90 0 956 +219 65 453 30 393 520 90 0 176 +220 421 294 -10 858 978 90 591 0 +221 434 245 -20 1325 1469 90 860 0 +222 2 116 -30 499 614 90 502 0 +223 411 421 20 850 930 90 0 568 +224 315 260 -10 185 315 90 924 0 +225 136 288 -10 986 1099 90 689 0 +226 173 490 20 366 502 90 0 851 +227 90 232 10 661 752 90 0 161 +228 402 265 20 261 410 90 0 162 +229 361 14 -20 665 759 90 467 0 +230 348 147 -10 834 925 90 343 0 +231 385 295 20 142 306 90 0 1 +232 394 23 -20 1249 1349 90 716 0 +233 466 295 -10 998 1107 90 289 0 +234 71 103 -10 1385 1490 90 284 0 +235 125 29 -10 562 675 90 475 0 +236 25 65 -10 974 1089 90 557 0 +237 58 449 -10 956 1080 90 178 0 +238 246 398 40 148 263 90 0 597 +239 423 294 10 787 865 90 0 647 +240 59 459 20 597 696 90 0 349 +241 348 145 -30 730 845 90 930 0 +242 477 97 10 417 498 90 0 753 +243 307 102 -10 580 669 90 941 0 +244 169 31 20 352 481 90 0 935 +245 381 495 -30 675 800 90 973 0 +246 95 234 10 287 390 90 0 850 +247 22 33 10 706 832 90 0 347 +248 435 268 -10 1041 1213 90 829 0 +249 135 293 -20 336 454 90 329 0 +250 439 266 10 234 326 90 0 117 +251 269 402 20 569 667 90 0 252 +252 267 400 -20 746 868 90 251 0 +253 473 196 -10 548 658 90 890 0 +254 445 237 10 322 428 90 0 283 +255 461 284 -10 254 362 90 487 0 +256 167 339 -10 628 731 90 782 0 +257 26 43 10 326 466 90 0 448 +258 101 386 -20 307 457 90 823 0 +259 342 54 20 537 632 90 0 803 +260 243 399 -30 758 861 90 506 0 +261 288 44 -10 612 735 90 369 0 +262 274 48 10 313 459 90 0 192 +263 360 184 -20 819 933 90 660 0 +264 23 67 30 1072 1176 90 0 642 +265 6 296 -20 830 959 90 407 0 +266 249 258 -10 883 1000 90 893 0 +267 421 415 30 265 396 90 0 104 +268 319 468 10 250 391 90 0 210 +269 50 438 20 689 815 90 0 75 +270 440 61 30 953 1050 0 0 1032 +271 17 65 20 607 717 90 0 750 +272 323 118 20 275 397 90 0 548 +273 402 281 20 842 968 90 0 717 +274 71 153 20 738 824 90 0 869 +275 52 432 20 754 878 90 0 865 +276 378 199 -20 725 840 90 801 0 +277 238 204 -20 547 653 90 808 0 +278 208 184 20 108 229 90 0 191 +279 376 195 -20 526 665 90 963 0 +280 473 475 -20 1097 1208 90 864 0 +281 215 395 -20 847 946 90 815 0 +282 123 222 30 355 450 0 0 1049 +283 436 241 -10 1242 1362 90 254 0 +284 70 100 10 1101 1208 90 0 234 +285 73 328 20 193 311 90 0 315 +286 241 205 -10 655 731 90 988 0 +287 250 405 20 279 394 90 0 626 +288 483 14 10 636 761 90 0 447 +289 466 287 10 421 570 90 0 233 +290 467 114 -20 1117 1265 90 806 0 +291 120 159 10 283 400 90 0 418 +292 408 84 10 708 850 90 0 514 +293 413 217 20 186 332 90 0 928 +294 338 142 40 166 294 90 0 766 +295 483 457 20 700 846 90 0 180 +296 479 169 20 742 866 90 0 995 +297 95 224 -20 1030 1147 90 545 0 +298 122 216 10 441 557 90 0 23 +299 477 179 20 237 347 90 0 759 +300 406 99 -10 334 470 90 529 0 +301 44 47 20 289 393 90 0 641 +302 487 450 -10 902 1019 90 575 0 +303 172 488 10 297 387 0 0 1017 +304 460 374 20 740 844 90 0 56 +305 279 138 -40 250 351 90 985 0 +306 338 147 10 135 260 90 0 504 +307 395 295 -10 649 764 90 496 0 +308 195 185 20 310 424 90 0 712 +309 463 194 20 220 336 90 0 741 +310 30 72 -20 1351 1452 90 381 0 +311 244 254 -20 698 813 90 498 0 +312 317 261 20 383 488 90 0 676 +313 67 108 10 266 377 90 0 416 +314 442 310 -30 619 722 90 534 0 +315 63 336 -20 785 898 90 285 0 +316 109 107 20 320 452 90 0 461 +317 100 387 10 404 544 90 0 516 +318 494 94 -10 609 718 90 957 0 +319 343 49 -10 612 747 90 901 0 +320 40 52 -20 508 628 90 777 0 +321 319 124 20 381 485 0 0 1045 +322 94 97 -20 230 388 90 415 0 +323 476 94 20 306 424 90 0 419 +324 283 47 -40 321 472 90 859 0 +325 398 325 30 738 878 90 0 735 +326 460 13 -20 432 562 90 718 0 +327 305 107 -30 662 779 90 686 0 +328 188 12 30 245 426 90 0 200 +329 136 290 20 270 334 90 0 249 +330 439 268 -20 969 1096 90 768 0 +331 112 467 10 478 584 90 0 972 +332 181 469 20 445 559 90 0 345 +333 358 18 10 451 602 90 0 42 +334 459 10 10 522 657 90 0 414 +335 199 268 20 252 400 90 0 699 +336 436 237 20 186 307 90 0 157 +337 318 280 20 298 405 90 0 588 +338 64 99 -10 832 925 90 616 0 +339 394 333 20 454 605 90 0 457 +340 366 93 -20 897 1028 90 151 0 +341 95 391 -20 885 996 90 571 0 +342 391 425 -10 818 934 90 849 0 +343 344 146 10 478 547 90 0 230 +344 198 12 10 542 672 90 0 98 +345 186 472 -20 539 658 90 332 0 +346 390 408 30 431 540 90 0 685 +347 19 43 -10 1178 1283 90 247 0 +348 307 108 -30 769 856 90 520 0 +349 59 457 -20 772 887 90 240 0 +350 49 451 20 314 435 90 0 882 +351 125 39 20 245 353 90 0 596 +352 61 147 -30 322 475 90 977 0 +353 317 123 20 461 589 90 0 983 +354 392 426 -20 653 735 90 528 0 +355 237 213 -10 823 940 90 888 0 +356 71 333 10 217 361 90 0 472 +357 304 97 -10 357 516 90 32 0 +358 196 462 -10 908 1050 90 978 0 +359 224 191 20 266 406 90 0 923 +360 37 51 10 607 716 90 0 763 +361 491 25 -30 926 1041 90 384 0 +362 270 401 20 182 302 90 0 485 +363 474 461 30 307 421 90 0 68 +364 66 448 10 270 338 90 0 170 +365 337 241 20 294 443 90 0 120 +366 269 46 -30 708 820 90 618 0 +367 22 41 -10 1074 1201 90 966 0 +368 198 271 20 357 482 90 0 530 +369 287 43 10 515 649 90 0 261 +370 446 63 20 678 769 90 0 827 +371 200 229 30 275 381 90 0 643 +372 48 72 -30 669 811 90 209 0 +373 465 142 10 375 472 90 0 913 +374 123 155 -30 1136 1216 90 159 0 +375 16 497 -40 1007 1154 90 731 0 +376 220 319 -10 958 1050 90 936 0 +377 484 171 -10 652 765 90 546 0 +378 55 431 -20 673 772 90 91 0 +379 428 24 -10 1061 1183 90 54 0 +380 80 342 10 193 336 90 0 9 +381 16 68 20 510 627 90 0 310 +382 124 56 20 231 345 90 0 708 +383 95 218 -10 834 965 90 491 0 +384 481 26 30 321 444 90 0 361 +385 145 434 20 420 556 90 0 124 +386 335 57 30 210 330 90 0 874 +387 26 490 -10 1278 1406 90 436 0 +388 324 127 30 143 281 90 0 760 +389 109 114 -20 792 908 90 122 0 +390 72 148 20 234 360 90 0 786 +391 220 392 -10 954 1031 90 464 0 +392 442 243 -20 977 1071 90 29 0 +393 69 336 20 399 548 0 0 1037 +394 131 226 20 121 258 90 0 119 +395 150 204 20 595 739 90 0 728 +396 423 217 20 765 868 90 0 469 +397 419 459 -20 766 857 90 115 0 +398 285 163 -30 688 806 90 477 0 +399 203 7 -20 1005 1136 90 594 0 +400 54 445 10 509 618 90 0 185 +401 109 463 -10 914 1064 90 422 0 +402 355 180 30 271 353 90 0 670 +403 13 455 10 346 465 90 0 413 +404 165 337 20 320 475 0 0 1050 +405 314 124 -30 774 838 90 499 0 +406 9 124 20 271 420 90 0 465 +407 3 292 20 376 486 90 0 265 +408 16 462 -20 889 1032 90 729 0 +409 189 464 -20 818 945 90 134 0 +410 288 154 -20 415 521 90 774 0 +411 90 296 20 166 311 90 0 938 +412 138 438 -20 804 920 90 106 0 +413 13 459 -10 634 729 90 403 0 +414 461 8 -10 714 854 90 334 0 +415 96 97 20 217 322 90 0 322 +416 68 99 -10 996 1130 90 313 0 +417 146 205 10 332 448 90 0 90 +418 117 152 -10 835 959 90 291 0 +419 481 96 -20 504 599 90 323 0 +420 338 260 -20 604 695 90 495 0 +421 285 44 10 399 581 90 0 697 +422 111 464 10 747 865 90 0 401 +423 468 291 30 716 829 90 0 650 +424 148 206 20 418 546 90 0 519 +425 184 464 10 254 374 90 0 149 +426 197 11 -20 619 778 90 683 0 +427 396 410 -10 795 913 90 605 0 +428 133 53 -10 648 741 90 460 0 +429 132 30 -10 843 958 90 127 0 +430 464 13 20 843 916 0 0 1002 +431 100 394 10 990 1082 0 0 1014 +432 483 22 10 458 561 90 0 835 +433 93 235 10 917 1046 90 0 862 +434 174 26 -30 1013 1128 90 497 0 +435 436 264 20 186 317 90 0 863 +436 24 492 10 1212 1341 90 0 387 +437 406 94 10 331 475 90 0 205 +438 234 246 -10 497 622 90 561 0 +439 315 287 -30 666 780 90 613 0 +440 408 453 10 570 666 90 0 939 +441 128 225 10 151 278 90 0 610 +442 226 191 -10 367 488 90 800 0 +443 391 407 10 521 633 90 0 7 +444 198 264 -30 746 845 90 581 0 +445 179 7 -10 824 971 90 201 0 +446 425 215 10 646 801 90 0 73 +447 483 27 -10 1256 1412 90 288 0 +448 22 40 -10 975 1118 90 257 0 +449 479 176 20 256 406 90 0 602 +450 476 102 -10 773 890 90 179 0 +451 386 405 20 206 335 90 0 578 +452 22 38 -20 899 1009 90 121 0 +453 440 241 -10 1054 1179 90 757 0 +454 182 14 -20 1039 1139 90 846 0 +455 266 405 20 653 771 90 0 86 +456 357 181 20 324 484 90 0 207 +457 395 332 -20 568 673 90 339 0 +458 423 290 10 304 414 90 0 51 +459 104 28 20 664 799 90 0 830 +460 131 56 10 459 562 90 0 428 +461 111 110 -20 514 625 90 316 0 +462 97 93 -20 433 558 90 627 0 +463 90 274 -20 366 503 90 840 0 +464 214 394 10 749 863 90 0 391 +465 6 114 -20 762 903 90 406 0 +466 375 191 -30 421 582 90 987 0 +467 356 21 20 358 507 90 0 229 +468 466 165 -10 709 844 90 595 0 +469 415 223 -20 1231 1329 90 396 0 +470 397 20 20 386 523 90 0 706 +471 241 403 -10 654 777 90 772 0 +472 69 334 -10 318 444 90 356 0 +473 152 210 20 105 201 90 0 109 +474 67 335 20 591 722 90 0 688 +475 126 30 10 473 580 90 0 235 +476 390 423 10 248 377 90 0 555 +477 285 162 30 579 733 90 0 398 +478 285 158 30 317 428 90 0 5 +479 406 96 20 258 363 90 0 719 +480 459 374 20 815 951 90 0 684 +481 67 109 20 332 493 90 0 114 +482 468 475 10 313 432 90 0 625 +483 438 31 10 335 426 90 0 769 +484 168 24 10 735 852 90 0 653 +485 267 394 -20 945 1043 90 362 0 +486 406 450 -20 382 487 90 962 0 +487 460 288 10 213 350 90 0 255 +488 224 203 20 53 174 90 0 211 +489 21 487 -10 552 659 90 664 0 +490 21 488 10 614 779 90 0 16 +491 87 217 10 558 683 90 0 383 +492 67 452 30 285 443 90 0 216 +493 119 223 -20 817 942 90 604 0 +494 398 428 -20 545 650 90 788 0 +495 344 262 20 483 624 90 0 420 +496 390 301 10 359 482 90 0 307 +497 167 27 30 450 573 90 0 434 +498 236 247 20 394 540 90 0 311 +499 313 119 30 648 773 90 0 405 +500 13 51 -10 1282 1425 90 83 0 +501 200 13 10 378 472 90 0 799 +502 0 120 30 405 518 90 0 222 +503 202 4 10 919 1035 90 0 156 +504 343 144 -10 290 361 90 306 0 +505 94 383 -30 599 723 90 958 0 +506 250 411 30 465 580 90 0 260 +507 464 134 -40 1005 1149 90 942 0 +508 443 237 20 212 355 90 0 152 +509 4 114 -10 671 810 90 927 0 +510 169 336 -30 807 923 90 39 0 +511 200 178 -20 216 322 90 544 0 +512 412 453 -10 646 778 90 743 0 +513 121 151 -10 1022 1141 90 33 0 +514 403 93 -10 1095 1216 90 292 0 +515 399 301 -30 557 662 90 166 0 +516 97 387 -10 799 893 90 317 0 +517 176 8 -10 921 1060 90 634 0 +518 62 326 -20 877 1006 90 967 0 +519 151 207 -20 695 824 90 424 0 +520 299 98 30 283 401 90 0 348 +521 334 240 30 497 612 90 0 996 +522 92 270 -10 937 1047 90 541 0 +523 444 269 20 502 636 90 0 657 +524 132 223 -20 803 942 90 40 0 +525 428 25 -20 1168 1258 90 195 0 +526 413 421 10 740 855 0 0 1023 +527 382 498 10 601 688 90 0 636 +528 391 429 20 434 566 90 0 354 +529 398 97 10 253 354 90 0 300 +530 192 265 -20 624 775 90 368 0 +531 438 26 10 397 553 0 0 1005 +532 44 79 10 267 394 90 0 894 +533 137 290 -10 169 252 90 577 0 +534 446 319 30 345 435 90 0 314 +535 175 487 20 248 398 90 0 671 +536 26 45 30 303 458 0 0 1025 +537 147 435 20 504 656 90 0 816 +538 111 459 -10 1108 1239 90 789 0 +539 472 132 -40 728 864 90 175 0 +540 349 158 -20 1022 1121 90 917 0 +541 86 268 10 655 769 90 0 522 +542 415 216 10 292 410 90 0 15 +543 121 218 20 159 289 90 0 679 +544 210 185 20 76 204 90 0 511 +545 98 215 20 190 306 90 0 297 +546 484 174 10 473 567 90 0 377 +547 328 458 10 907 1043 0 0 1024 +548 313 126 -20 850 947 90 272 0 +549 390 415 -10 1025 1108 90 558 0 +550 459 17 -20 987 1146 90 722 0 +551 481 124 10 463 613 90 0 609 +552 386 414 10 1082 1189 0 0 1027 +553 116 466 20 289 403 90 0 579 +554 468 295 -10 904 1018 90 950 0 +555 391 426 -10 724 845 90 476 0 +556 408 279 -10 650 779 90 755 0 +557 15 68 10 412 544 90 0 236 +558 392 424 10 917 1017 90 0 549 +559 88 95 -20 624 747 90 698 0 +560 116 151 -10 732 878 90 131 0 +561 240 250 10 308 437 90 0 438 +562 123 159 20 156 294 90 0 148 +563 89 290 20 201 324 90 0 986 +564 39 50 30 416 536 0 0 1019 +565 359 179 -20 418 577 90 3 0 +566 338 257 20 692 793 0 0 1007 +567 92 236 -20 1007 1139 90 723 0 +568 413 417 -20 1111 1232 90 223 0 +569 91 101 10 818 929 90 0 603 +570 55 449 20 278 405 90 0 752 +571 57 425 20 260 387 90 0 341 +572 465 287 10 524 650 90 0 881 +573 320 280 10 201 318 90 0 947 +574 322 468 20 533 667 90 0 202 +575 483 458 10 607 756 90 0 302 +576 312 267 -10 852 951 90 199 0 +577 139 291 10 118 235 90 0 533 +578 388 408 -20 321 465 90 451 0 +579 110 459 -20 1029 1136 90 553 0 +580 459 372 -20 631 768 90 620 0 +581 204 269 30 49 194 90 0 444 +582 407 98 10 218 345 90 0 204 +583 335 256 -20 861 991 90 734 0 +584 471 484 -20 558 632 90 990 0 +585 339 244 30 201 348 0 0 1053 +586 89 272 10 471 582 90 0 886 +587 488 96 -30 881 1001 90 710 0 +588 316 286 -20 575 689 90 337 0 +589 235 50 -20 797 912 90 198 0 +590 316 258 -20 262 424 90 155 0 +591 425 288 10 578 694 90 0 220 +592 213 397 -20 652 773 90 761 0 +593 113 156 -20 567 672 90 57 0 +594 199 9 20 840 924 90 0 399 +595 463 167 10 619 746 90 0 468 +596 129 27 -20 663 763 90 351 0 +597 248 404 -40 165 323 90 238 0 +598 405 276 -30 738 881 90 599 0 +599 400 288 30 154 300 90 0 598 +600 61 156 30 431 563 90 0 870 +601 393 20 -20 1120 1292 90 182 0 +602 484 177 -20 363 490 90 449 0 +603 108 116 -10 892 993 90 569 0 +604 112 217 20 345 481 90 0 493 +605 389 404 10 243 356 90 0 427 +606 102 391 -20 1082 1177 90 96 0 +607 434 26 10 499 640 90 0 135 +608 488 26 -10 1113 1222 90 839 0 +609 477 120 -10 938 1057 90 551 0 +610 126 220 -10 630 740 90 441 0 +611 439 310 10 198 342 90 0 940 +612 212 319 30 209 311 90 0 855 +613 320 283 30 384 507 90 0 439 +614 17 459 -20 1185 1289 90 711 0 +615 236 213 20 39 162 90 0 667 +616 68 108 10 230 350 90 0 338 +617 390 294 -10 827 957 90 70 0 +618 275 42 30 509 637 90 0 366 +619 423 214 20 580 684 0 0 1040 +620 460 367 20 375 468 90 0 580 +621 272 402 10 280 390 90 0 969 +622 478 102 10 690 789 90 0 877 +623 400 260 40 150 237 90 0 992 +624 181 6 -30 656 774 90 92 0 +625 470 475 -10 342 468 90 482 0 +626 245 408 -20 575 663 90 287 0 +627 93 96 20 336 464 90 0 462 +628 218 318 -20 854 969 90 794 0 +629 441 265 40 304 441 90 0 826 +630 21 64 20 804 890 0 0 1004 +631 356 23 -20 276 405 90 76 0 +632 267 44 20 613 729 90 0 12 +633 277 50 10 234 352 90 0 929 +634 182 4 10 571 675 90 0 517 +635 26 36 10 622 727 90 0 113 +636 384 491 -10 848 998 90 527 0 +637 418 290 -20 1147 1247 90 55 0 +638 321 277 10 75 187 90 0 72 +639 358 16 30 571 665 90 0 730 +640 389 334 -20 282 406 90 783 0 +641 48 78 -20 946 1087 90 301 0 +642 24 68 -30 1236 1382 90 264 0 +643 206 225 -30 388 463 90 371 0 +644 290 141 30 610 744 90 0 1000 +645 439 15 20 615 741 90 0 889 +646 359 182 -20 735 833 90 193 0 +647 413 287 -10 1325 1440 90 239 0 +648 230 49 20 201 302 90 0 767 +649 407 280 -20 563 684 90 10 0 +650 459 295 -30 1189 1293 90 423 0 +651 468 199 20 651 748 90 0 733 +652 101 384 30 200 296 90 0 142 +653 170 26 -10 817 955 90 484 0 +654 197 270 30 448 573 90 0 918 +655 415 289 20 169 331 90 0 976 +656 203 390 40 279 388 90 0 168 +657 443 272 -20 788 902 90 523 0 +658 210 391 30 172 301 90 0 771 +659 363 22 20 922 1066 0 0 1015 +660 352 176 20 126 233 90 0 263 +661 212 223 -10 742 849 90 968 0 +662 8 120 -20 1128 1273 90 196 0 +663 244 250 -10 123 250 90 36 0 +664 18 484 10 345 495 90 0 489 +665 379 82 10 796 915 0 0 1035 +666 84 346 20 1044 1207 0 0 1038 +667 233 207 -20 72 201 90 615 0 +668 344 62 -20 1176 1306 90 165 0 +669 20 489 -30 833 924 90 79 0 +670 361 181 -30 626 759 90 402 0 +671 174 494 -20 469 587 90 535 0 +672 49 76 -20 882 966 90 991 0 +673 390 325 -20 839 973 90 748 0 +674 7 118 20 958 1076 0 0 1008 +675 107 26 -30 492 605 90 842 0 +676 312 270 -20 951 1038 90 312 0 +677 399 102 -20 608 756 90 780 0 +678 109 108 10 422 532 90 0 773 +679 115 218 -20 247 393 90 543 0 +680 88 287 30 857 980 90 0 946 +681 54 424 10 285 423 90 0 948 +682 125 32 30 377 492 90 0 749 +683 199 12 20 462 570 90 0 426 +684 457 374 -20 909 1040 90 480 0 +685 391 413 -30 985 1097 90 346 0 +686 304 102 30 481 583 90 0 327 +687 391 293 20 736 866 0 0 1044 +688 66 336 -20 674 823 90 474 0 +689 132 291 10 710 824 90 0 225 +690 18 462 20 1005 1100 90 0 845 +691 347 62 -20 1083 1214 90 792 0 +692 466 142 -10 436 592 90 144 0 +693 389 17 -10 960 1081 90 203 0 +694 342 254 10 209 337 90 0 796 +695 92 223 10 934 1056 0 0 1042 +696 404 83 30 806 941 0 0 1030 +697 290 46 -10 800 929 90 421 0 +698 95 92 20 526 650 90 0 559 +699 200 265 -20 822 953 90 335 0 +700 435 16 -20 813 911 90 184 0 +701 25 499 -30 1118 1241 90 49 0 +702 319 260 20 460 596 0 0 1055 +703 116 225 -20 720 851 90 742 0 +704 402 284 30 267 412 90 0 99 +705 108 105 20 234 353 90 0 47 +706 386 13 -20 772 891 90 470 0 +707 472 129 10 278 418 90 0 111 +708 132 57 -20 360 479 90 382 0 +709 43 71 40 505 600 0 0 1010 +710 493 91 30 500 640 90 0 587 +711 12 451 20 311 454 90 0 614 +712 201 188 -20 508 599 90 308 0 +713 60 428 20 1033 1162 0 0 1006 +714 243 248 -20 212 346 90 183 0 +715 230 197 -20 534 700 90 804 0 +716 389 11 20 677 800 90 0 232 +717 401 281 -20 921 1071 90 273 0 +718 459 14 20 362 448 90 0 326 +719 411 95 -20 443 553 90 479 0 +720 0 297 10 639 776 90 0 2 +721 476 196 -30 467 553 90 11 0 +722 458 16 20 313 391 90 0 550 +723 92 230 20 450 597 90 0 567 +724 432 24 20 962 1094 0 0 1003 +725 215 317 10 110 223 90 0 78 +726 371 192 30 167 283 90 0 41 +727 481 20 20 538 666 90 0 994 +728 152 207 -20 795 907 90 395 0 +729 14 459 20 517 664 90 0 408 +730 361 17 -30 751 858 90 639 0 +731 8 497 40 919 1047 90 0 375 +732 206 186 -20 857 989 90 979 0 +733 421 218 -20 845 973 90 651 0 +734 402 264 20 187 303 90 0 583 +735 388 325 -30 930 1067 90 325 0 +736 35 304 30 252 372 0 0 1026 +737 321 263 20 653 771 90 0 873 +738 444 313 20 440 534 90 0 807 +739 188 462 -20 740 839 90 208 0 +740 400 103 10 516 666 90 0 989 +741 418 221 -20 1127 1246 90 309 0 +742 112 219 20 428 581 90 0 703 +743 408 452 10 480 575 90 0 512 +744 30 301 -10 637 748 90 912 0 +745 205 228 10 90 193 0 0 1056 +746 407 88 -20 1004 1115 90 37 0 +747 380 489 -10 1053 1175 90 793 0 +748 395 331 20 649 774 90 0 673 +749 133 26 -30 744 870 90 682 0 +750 21 68 -20 1157 1275 90 271 0 +751 313 282 20 751 886 0 0 1054 +752 53 440 -20 591 725 90 570 0 +753 458 130 -10 1113 1237 90 242 0 +754 437 15 -20 719 821 90 955 0 +755 400 286 10 187 306 90 0 556 +756 346 144 10 637 753 90 0 169 +757 440 244 10 774 909 90 0 453 +758 280 162 -20 125 243 90 856 0 +759 488 173 -20 563 665 90 299 0 +760 326 118 -30 195 291 90 388 0 +761 207 400 20 492 559 90 0 592 +762 391 18 -20 1056 1169 90 875 0 +763 37 55 -10 694 816 90 360 0 +764 204 15 20 239 351 90 0 879 +765 173 28 -20 1112 1213 90 48 0 +766 343 148 -40 345 495 90 294 0 +767 231 43 -20 429 531 90 648 0 +768 445 273 20 700 806 90 0 330 +769 432 27 -10 766 922 90 483 0 +770 439 305 30 693 841 90 0 883 +771 208 396 -30 375 487 90 658 0 +772 249 407 10 373 485 90 0 471 +773 107 112 -10 698 817 90 678 0 +774 279 159 20 238 315 90 0 410 +775 376 494 30 302 428 90 0 188 +776 403 262 -20 466 574 90 107 0 +777 41 47 20 331 433 90 0 320 +778 96 213 -30 292 389 90 66 0 +779 461 167 -20 450 551 90 84 0 +780 391 99 20 206 311 90 0 677 +781 116 221 30 560 639 0 0 1046 +782 165 343 10 550 619 90 0 256 +783 388 334 20 193 314 90 0 640 +784 130 57 40 262 392 90 0 852 +785 422 409 10 234 403 90 0 217 +786 66 156 -20 635 736 90 390 0 +787 485 86 20 307 455 90 0 961 +788 389 428 20 348 468 90 0 494 +789 117 467 10 254 393 90 0 538 +790 475 477 -30 1014 1106 90 993 0 +791 429 27 -20 1231 1380 90 177 0 +792 339 60 20 249 362 90 0 691 +793 381 494 10 768 888 90 0 747 +794 218 321 20 662 794 90 0 628 +795 64 101 20 643 748 90 0 895 +796 343 254 -10 301 426 90 694 0 +797 478 464 10 356 449 90 0 19 +798 423 286 20 407 499 90 0 141 +799 198 9 -10 738 843 90 501 0 +800 225 196 10 85 216 90 0 442 +801 374 190 20 226 411 90 0 276 +802 462 14 -20 915 1029 90 100 0 +803 347 54 -20 813 928 90 259 0 +804 231 195 20 460 589 90 0 715 +805 72 96 20 1194 1305 90 0 878 +806 489 87 20 403 546 90 0 290 +807 443 313 -20 521 635 90 738 0 +808 233 204 20 164 294 90 0 277 +809 477 483 -10 710 851 90 60 0 +810 459 368 10 280 380 90 0 959 +811 95 277 -40 1032 1147 90 153 0 +812 16 460 -20 1099 1193 90 866 0 +813 100 266 -10 183 300 90 116 0 +814 288 53 -20 895 1028 90 212 0 +815 211 386 20 141 250 90 0 281 +816 144 439 -20 711 821 90 537 0 +817 224 314 10 1029 1172 0 0 1029 +818 79 291 10 486 601 90 0 27 +819 95 235 10 155 248 90 0 999 +820 7 123 30 296 433 90 0 871 +821 91 217 10 676 754 90 0 150 +822 105 27 10 571 709 0 0 1012 +823 101 385 20 239 344 90 0 258 +824 238 210 -10 735 843 90 964 0 +825 439 67 10 290 417 90 0 932 +826 435 267 -40 1155 1281 90 629 0 +827 443 64 -20 768 866 90 370 0 +828 92 234 -10 821 959 90 943 0 +829 450 265 10 404 538 90 0 248 +830 102 27 -20 764 885 90 459 0 +831 492 94 10 693 817 90 0 58 +832 440 63 20 835 984 90 0 171 +833 453 367 20 1021 1124 0 0 1022 +834 15 69 10 320 453 90 0 215 +835 489 17 -10 729 860 90 432 0 +836 335 255 20 85 239 90 0 69 +837 419 418 10 367 481 90 0 132 +838 292 41 10 698 840 0 0 1036 +839 489 27 10 999 1153 90 0 608 +840 96 270 20 262 413 90 0 463 +841 461 369 -20 564 648 90 960 0 +842 105 22 30 316 408 90 0 675 +843 479 121 -30 680 765 90 94 0 +844 207 223 -20 543 677 90 143 0 +845 17 458 -20 1255 1402 90 690 0 +846 186 7 20 459 597 90 0 454 +847 465 168 10 794 944 90 0 916 +848 416 288 20 1239 1340 0 0 1039 +849 388 418 10 217 372 90 0 342 +850 92 233 -10 741 856 90 246 0 +851 179 492 -20 641 788 90 226 0 +852 132 55 -40 553 651 90 784 0 +853 485 24 20 370 463 90 0 858 +854 388 331 20 160 303 90 0 861 +855 217 323 -30 358 538 90 612 0 +856 281 164 20 91 225 90 0 758 +857 169 340 -20 723 820 90 125 0 +858 491 20 -20 835 943 90 853 0 +859 279 42 40 231 370 90 0 324 +860 439 243 20 1152 1266 90 0 221 +861 391 334 -20 376 496 90 854 0 +862 96 244 -10 1294 1417 90 433 0 +863 441 273 -20 879 996 90 435 0 +864 477 478 20 914 1021 90 0 280 +865 56 434 -20 844 977 90 275 0 +866 12 463 20 706 846 90 0 812 +867 458 164 20 335 477 0 0 1031 +868 446 65 20 478 605 90 0 146 +869 71 156 -20 806 942 90 274 0 +870 65 153 -30 523 662 90 600 0 +871 8 118 -30 1038 1178 90 820 0 +872 102 29 30 864 969 90 0 903 +873 315 265 -20 746 870 90 737 0 +874 343 62 -30 1271 1394 90 386 0 +875 384 16 20 881 971 90 0 762 +876 67 105 -10 526 674 90 74 0 +877 478 118 -10 1045 1134 90 622 0 +878 73 101 -20 1284 1405 90 805 0 +879 200 14 -20 272 395 90 764 0 +880 114 225 -20 618 769 90 902 0 +881 460 293 -10 1083 1215 90 572 0 +882 51 447 -20 413 525 90 350 0 +883 418 295 -30 1041 1163 90 770 0 +884 282 139 20 133 282 90 0 900 +885 477 122 -20 841 970 90 982 0 +886 91 266 -10 763 852 90 586 0 +887 16 463 -20 823 916 90 970 0 +888 228 199 10 658 760 90 0 355 +889 435 20 -20 900 1013 90 645 0 +890 467 195 10 236 392 90 0 253 +891 469 132 10 828 951 0 0 1043 +892 465 136 -10 915 1055 90 133 0 +893 246 255 10 805 891 90 0 266 +894 49 75 -10 770 896 90 532 0 +895 66 98 -20 913 1027 90 795 0 +896 166 32 -20 256 391 90 984 0 +897 326 466 -10 737 832 90 980 0 +898 202 186 20 578 714 90 0 915 +899 467 285 20 352 455 90 0 85 +900 290 136 -20 521 642 90 884 0 +901 341 58 10 345 452 90 0 319 +902 121 219 20 132 274 90 0 880 +903 107 35 -30 964 1063 90 872 0 +904 216 319 -20 283 425 90 130 0 +905 134 288 -20 888 1014 90 945 0 +906 89 270 10 558 679 90 0 174 +907 136 52 10 734 842 0 0 1028 +908 462 167 -30 514 669 90 194 0 +909 340 54 10 428 557 0 0 1033 +910 80 286 10 566 712 90 0 189 +911 38 301 -20 720 862 90 922 0 +912 25 307 10 442 567 90 0 744 +913 470 139 -10 614 785 90 373 0 +914 270 400 10 151 253 90 0 213 +915 204 187 -20 771 890 90 898 0 +916 460 171 -10 900 1031 90 847 0 +917 399 106 20 892 1022 90 0 540 +918 197 267 -30 538 669 90 654 0 +919 77 350 -10 964 1092 90 97 0 +920 91 231 30 549 681 90 0 71 +921 398 103 -20 699 848 90 965 0 +922 35 303 20 221 353 90 0 911 +923 231 204 -20 741 869 90 359 0 +924 311 266 10 63 165 90 0 224 +925 416 420 20 652 757 90 0 24 +926 231 203 20 278 366 0 0 1057 +927 4 116 10 591 706 90 0 509 +928 417 217 -20 399 488 90 293 0 +929 268 52 -10 977 1105 90 633 0 +930 345 144 30 533 676 90 0 241 +931 368 85 30 202 345 90 0 163 +932 441 65 -10 385 508 90 825 0 +933 201 270 10 88 198 90 0 52 +934 0 293 30 570 657 90 0 62 +935 167 24 -20 622 782 90 244 0 +936 186 464 10 639 754 90 0 376 +937 7 292 10 246 380 90 0 181 +938 80 290 -20 413 492 90 411 0 +939 405 455 -10 857 974 90 440 0 +940 439 312 -10 230 350 90 611 0 +941 300 108 10 150 265 90 0 243 +942 478 121 40 756 871 90 0 507 +943 92 232 10 364 500 90 0 828 +944 111 463 -10 850 944 90 103 0 +945 132 294 20 428 547 90 0 905 +946 134 285 -30 1087 1185 90 680 0 +947 316 284 -10 457 622 90 573 0 +948 56 428 -10 394 503 90 681 0 +949 232 47 10 241 349 90 0 64 +950 466 291 10 615 746 90 0 554 +951 341 257 20 401 513 90 0 21 +952 420 213 -10 462 616 90 167 0 +953 116 152 20 652 777 0 0 1041 +954 163 337 -40 258 353 90 981 0 +955 440 7 20 424 554 90 0 754 +956 208 222 -30 644 757 90 218 0 +957 485 95 10 281 401 90 0 318 +958 97 385 30 502 633 90 0 505 +959 462 367 -10 465 561 90 810 0 +960 455 365 20 235 352 90 0 841 +961 492 95 -20 777 915 90 787 0 +962 405 450 20 288 398 90 0 486 +963 371 193 20 133 221 90 0 279 +964 234 202 10 359 471 90 0 824 +965 404 103 20 431 562 90 0 921 +966 24 41 10 515 643 90 0 367 +967 67 334 20 509 622 90 0 518 +968 207 227 10 48 180 90 0 661 +969 277 403 -10 357 502 90 621 0 +970 15 457 20 452 544 90 0 887 +971 217 319 -10 754 886 90 13 0 +972 111 467 -10 568 676 90 331 0 +973 378 493 30 419 495 90 0 245 +974 112 465 10 658 770 0 0 1016 +975 173 25 20 899 1060 0 0 1021 +976 421 292 -20 204 329 90 655 0 +977 74 146 30 204 305 90 0 352 +978 178 491 10 563 683 90 0 358 +979 204 185 20 697 779 90 0 732 +980 319 470 10 338 487 90 0 897 +981 163 331 40 118 245 90 0 954 +982 470 125 20 253 379 90 0 885 +983 315 121 -20 563 673 90 353 0 +984 166 34 20 231 314 90 0 896 +985 284 140 40 115 227 90 0 305 +986 85 288 -20 288 426 90 563 0 +987 376 190 30 344 477 90 0 466 +988 238 203 10 451 567 90 0 286 +989 399 104 -10 799 930 90 740 0 +990 472 481 20 444 560 90 0 584 +991 46 74 20 592 703 90 0 672 +992 401 255 -40 635 787 90 623 0 +993 475 480 30 806 942 90 0 790 +994 485 27 -20 1193 1328 90 727 0 +995 476 174 -20 823 975 90 296 0 +996 330 242 -30 606 691 90 521 0 +997 332 249 30 82 204 90 0 87 +998 375 80 -40 526 623 90 137 0 +999 94 235 -10 191 302 90 819 0 +1000 287 144 -30 805 918 90 644 0 +1001 470 473 -10 1195 1296 90 43 0 +1002 464 13 -20 843 916 90 430 0 +1003 432 24 -20 962 1094 90 724 0 +1004 21 64 -20 804 890 90 630 0 +1005 438 26 -10 397 553 90 531 0 +1006 60 428 -20 1033 1162 90 713 0 +1007 338 257 -20 692 793 90 566 0 +1008 7 118 -20 958 1076 90 674 0 +1009 474 96 -30 271 407 90 164 0 +1010 43 71 -40 505 600 90 709 0 +1011 87 96 -30 715 838 90 172 0 +1012 105 27 -10 571 709 90 822 0 +1013 399 450 -20 964 1063 90 123 0 +1014 100 394 -10 990 1082 90 431 0 +1015 363 22 -20 922 1066 90 659 0 +1016 112 465 -10 658 770 90 974 0 +1017 172 488 -10 297 387 90 303 0 +1018 2 295 -30 741 860 90 126 0 +1019 39 50 -30 416 536 90 564 0 +1020 202 9 -10 1170 1336 90 82 0 +1021 173 25 -20 899 1060 90 975 0 +1022 453 367 -20 1021 1124 90 833 0 +1023 413 421 -10 740 855 90 526 0 +1024 328 458 -10 907 1043 90 547 0 +1025 26 45 -30 303 458 90 536 0 +1026 35 304 -30 252 372 90 736 0 +1027 386 414 -10 1082 1189 90 552 0 +1028 136 52 -10 734 842 90 907 0 +1029 224 314 -10 1029 1172 90 817 0 +1030 404 83 -30 806 941 90 696 0 +1031 458 164 -20 335 477 90 867 0 +1032 440 61 -30 953 1050 90 270 0 +1033 340 54 -10 428 557 90 909 0 +1034 140 431 -30 265 338 90 158 0 +1035 379 82 -10 796 915 90 665 0 +1036 292 41 -10 698 840 90 838 0 +1037 69 336 -20 399 548 90 393 0 +1038 84 346 -20 1044 1207 90 666 0 +1039 416 288 -20 1239 1340 90 848 0 +1040 423 214 -20 580 684 90 619 0 +1041 116 152 -20 652 777 90 953 0 +1042 92 223 -10 934 1056 90 695 0 +1043 469 132 -10 828 951 90 891 0 +1044 391 293 -20 736 866 90 687 0 +1045 319 124 -20 381 485 90 321 0 +1046 116 221 -30 560 639 90 781 0 +1047 379 196 -20 633 745 90 31 0 +1048 128 291 -10 591 754 90 46 0 +1049 123 222 -30 355 450 90 282 0 +1050 165 337 -20 320 475 90 404 0 +1051 287 143 -10 718 823 90 25 0 +1052 154 207 -20 961 1107 90 186 0 +1053 339 244 -30 201 348 90 585 0 +1054 313 282 -20 751 886 90 751 0 +1055 319 260 -20 460 596 90 702 0 +1056 205 228 -10 90 193 90 745 0 +1057 231 203 -20 278 366 90 926 0 +1058 237 254 -20 608 709 90 22 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1106.txt b/jsprit-instances/instances/lilim/1000/LC1106.txt new file mode 100644 index 00000000..c3e00378 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1106.txt @@ -0,0 +1,1056 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 -20 176 295 90 231 0 +2 5 297 -20 871 1101 90 407 0 +3 355 177 20 140 299 90 0 402 +4 78 346 30 286 473 90 0 89 +5 286 159 20 451 675 90 0 477 +6 322 465 10 226 395 90 0 118 +7 393 408 30 650 688 90 0 67 +8 89 216 10 466 591 90 0 383 +9 76 345 -10 425 701 90 380 0 +10 410 285 20 503 553 90 0 556 +11 472 189 30 345 480 90 0 721 +12 270 49 -20 934 961 90 192 0 +13 219 325 10 504 579 90 0 78 +14 437 12 20 494 675 90 0 700 +15 418 218 -30 837 1167 90 928 0 +16 20 488 10 654 920 90 0 436 +17 77 347 20 410 531 90 0 105 +18 73 346 -10 643 856 90 44 0 +19 480 455 -20 1005 1296 90 68 0 +20 129 292 10 539 623 90 0 905 +21 337 257 -20 687 981 90 796 0 +22 237 254 20 623 693 90 0 266 +23 131 220 30 710 849 0 0 1037 +24 417 417 -30 881 1093 90 267 0 +25 287 143 -40 628 912 90 985 0 +26 379 80 -20 704 823 90 151 0 +27 87 285 -10 660 812 90 910 0 +28 374 489 20 269 462 90 0 527 +29 440 247 20 743 753 90 0 883 +30 281 137 10 300 485 90 0 900 +31 379 196 -30 577 801 90 726 0 +32 297 102 10 192 303 90 0 327 +33 39 76 10 273 482 90 0 372 +34 35 306 20 328 481 90 0 912 +35 435 68 10 259 434 90 0 932 +36 245 251 10 5 241 90 0 663 +37 409 88 -10 583 788 90 582 0 +38 273 55 20 196 352 90 0 633 +39 163 340 -20 468 513 90 404 0 +40 129 223 20 180 434 90 0 77 +41 371 200 -30 798 961 90 466 0 +42 357 26 -30 1059 1304 90 639 0 +43 470 473 -20 1200 1291 90 809 0 +44 77 344 10 248 325 90 0 18 +45 478 461 10 434 558 90 0 302 +46 128 291 -20 614 732 90 329 0 +47 111 113 10 600 725 90 0 389 +48 164 21 -20 567 650 90 244 0 +49 21 485 30 441 585 90 0 490 +50 108 26 10 387 528 90 0 822 +51 424 286 -20 430 658 90 798 0 +52 200 270 20 138 329 90 0 654 +53 7 300 30 1049 1111 90 0 62 +54 433 31 10 285 442 0 0 1005 +55 420 295 20 922 1097 90 0 848 +56 451 367 -20 1115 1214 90 580 0 +57 118 157 20 398 470 90 0 418 +58 489 101 -10 922 1149 90 831 0 +59 200 261 -20 934 1028 90 368 0 +60 476 483 -20 550 830 90 990 0 +61 30 302 10 534 669 90 0 744 +62 8 300 -30 1074 1268 90 53 0 +63 275 45 20 474 485 90 0 632 +64 238 46 -10 612 907 90 214 0 +65 152 206 -20 889 995 90 424 0 +66 99 218 30 154 473 90 0 150 +67 393 410 -30 882 1013 90 7 0 +68 480 460 20 455 721 90 0 19 +69 337 256 20 102 252 90 0 694 +70 389 300 10 285 372 90 0 307 +71 90 237 -20 1190 1322 90 999 0 +72 321 280 -10 77 298 90 638 0 +73 417 218 -10 1067 1120 90 952 0 +74 64 108 10 480 533 90 0 114 +75 57 432 -20 894 1112 90 865 0 +76 356 24 20 249 317 90 0 631 +77 143 207 -20 202 390 90 40 0 +78 221 325 -10 554 713 90 13 0 +79 22 483 30 325 369 90 0 701 +80 24 65 -20 839 1042 90 271 0 +81 141 431 -30 320 466 90 158 0 +82 202 9 -10 1125 1382 90 501 0 +83 20 48 -20 1273 1379 90 452 0 +84 457 163 20 286 343 90 0 916 +85 470 290 -10 854 876 90 289 0 +86 268 400 -30 824 973 90 213 0 +87 337 251 10 92 262 90 0 120 +88 366 20 -20 716 1086 90 730 0 +89 72 344 -30 559 754 90 4 0 +90 149 203 10 524 626 90 0 395 +91 55 428 -10 523 555 90 681 0 +92 189 7 30 250 482 90 0 624 +93 397 18 -20 506 587 90 182 0 +94 481 122 -10 540 720 90 551 0 +95 20 73 10 290 440 90 0 557 +96 54 430 -20 502 761 90 571 0 +97 74 350 10 848 1022 0 0 1036 +98 202 8 -20 1047 1277 90 683 0 +99 406 285 20 279 588 90 0 649 +100 460 2 20 586 789 90 0 802 +101 441 244 -20 882 983 90 309 0 +102 1 293 10 393 652 90 0 720 +103 115 465 10 289 585 90 0 944 +104 422 420 -10 447 589 90 837 0 +105 75 347 -20 704 978 90 17 0 +106 141 428 20 208 512 90 0 537 +107 404 264 20 277 579 90 0 992 +108 398 23 10 270 521 90 0 203 +109 148 211 20 119 280 90 0 417 +110 362 22 -10 975 1195 90 229 0 +111 479 127 -20 415 474 90 982 0 +112 443 246 20 528 601 90 0 647 +113 22 37 -10 793 934 90 966 0 +114 65 100 -10 676 897 90 74 0 +115 404 447 20 250 565 90 0 743 +116 102 264 10 148 195 90 0 463 +117 444 271 10 616 705 90 0 330 +118 325 466 -10 573 815 90 6 0 +119 124 219 -10 506 679 90 298 0 +120 335 243 -10 313 609 90 87 0 +121 26 42 20 417 557 90 0 448 +122 113 106 20 198 391 90 0 316 +123 399 450 -40 994 1034 90 939 0 +124 146 439 10 620 729 90 0 816 +125 162 336 -40 207 221 90 981 0 +126 2 295 -30 726 875 90 934 0 +127 122 35 -20 250 629 90 351 0 +128 346 60 10 979 1134 90 0 874 +129 93 213 30 378 489 0 0 1038 +130 218 316 20 73 199 90 0 612 +131 116 156 10 519 533 90 0 953 +132 419 422 20 570 652 90 0 223 +133 467 141 -10 496 715 90 692 0 +134 187 491 -10 728 897 90 851 0 +135 433 25 -10 898 975 90 607 0 +136 286 137 -40 410 565 90 305 0 +137 370 82 40 351 608 90 0 163 +138 132 290 -30 753 962 90 249 0 +139 435 11 40 302 482 90 0 955 +140 206 261 -10 1036 1118 90 918 0 +141 428 291 10 601 860 90 0 676 +142 95 384 -20 642 863 90 823 0 +143 205 223 -30 395 641 90 371 0 +144 463 140 -40 239 451 90 175 0 +145 343 47 -10 677 866 90 319 0 +146 435 62 30 1143 1231 0 0 1009 +147 387 488 -20 947 1087 90 636 0 +148 121 157 -20 172 327 90 562 0 +149 182 463 30 302 510 90 0 345 +150 92 216 -30 737 874 90 66 0 +151 370 83 20 298 478 90 0 26 +152 444 242 -20 404 538 90 508 0 +153 90 285 -20 886 1136 90 986 0 +154 446 64 -10 629 635 90 825 0 +155 312 264 20 103 208 90 0 702 +156 208 11 -10 1245 1454 90 503 0 +157 442 247 -10 587 725 90 254 0 +158 140 431 30 211 493 90 0 81 +159 118 153 -10 925 1051 90 593 0 +160 134 428 -20 930 996 90 412 0 +161 91 235 -10 1050 1278 90 819 0 +162 406 257 10 497 736 90 0 583 +163 377 76 -40 567 770 90 137 0 +164 474 96 30 271 437 90 0 242 +165 346 57 -30 800 1126 90 386 0 +166 393 301 30 448 578 90 0 515 +167 412 214 10 165 376 90 0 741 +168 210 398 10 451 788 90 0 391 +169 346 150 -20 933 1013 90 241 0 +170 62 453 10 516 584 90 0 240 +171 437 61 -20 1024 1165 90 832 0 +172 87 96 -20 702 852 90 322 0 +173 367 83 30 255 336 0 0 1032 +174 91 268 -10 833 966 90 886 0 +175 459 145 40 233 318 90 0 144 +176 63 444 -10 1103 1127 90 178 0 +177 433 27 20 622 699 90 0 525 +178 60 454 10 805 1040 90 0 176 +179 478 99 -20 561 732 90 323 0 +180 485 454 -20 843 890 90 295 0 +181 6 292 -10 247 496 90 937 0 +182 398 20 20 273 457 90 0 93 +183 248 251 20 2 279 90 0 498 +184 433 15 20 297 391 90 0 645 +185 64 426 -20 1168 1216 90 948 0 +186 154 207 20 907 1162 0 0 1048 +187 481 456 -30 946 1173 90 363 0 +188 380 498 10 463 641 90 0 747 +189 88 286 10 784 871 90 0 811 +190 111 23 10 266 479 90 0 675 +191 199 187 -20 407 516 90 278 0 +192 269 48 20 789 923 90 0 12 +193 367 178 -20 508 683 90 456 0 +194 452 163 30 219 420 90 0 867 +195 431 28 20 698 809 90 0 379 +196 8 116 20 826 1025 0 0 1007 +197 233 47 20 226 546 90 0 648 +198 237 43 -10 508 825 90 949 0 +199 320 262 -20 533 708 90 590 0 +200 188 4 20 368 500 90 0 445 +201 180 6 -20 727 885 90 846 0 +202 328 466 -20 869 884 90 574 0 +203 393 12 -10 629 660 90 108 0 +204 409 90 -30 569 617 90 719 0 +205 406 87 -30 886 1049 90 696 0 +206 394 407 20 739 783 90 0 427 +207 358 183 -10 889 1048 90 263 0 +208 186 461 20 220 468 90 0 376 +209 38 72 30 362 553 90 0 991 +210 323 471 30 494 521 0 0 1021 +211 224 192 -10 186 303 90 800 0 +212 278 46 20 205 293 90 0 859 +213 272 403 30 502 548 90 0 86 +214 232 42 10 518 626 90 0 64 +215 18 63 -10 696 813 90 834 0 +216 58 458 -30 632 843 90 219 0 +217 416 417 -10 1014 1142 90 526 0 +218 205 230 30 228 239 90 0 893 +219 65 453 30 439 475 90 0 216 +220 421 294 -20 857 979 90 314 0 +221 434 245 -10 1348 1445 90 253 0 +222 2 116 20 489 623 90 0 927 +223 411 421 -20 820 959 90 132 0 +224 315 260 10 228 272 90 0 312 +225 136 288 -10 947 1139 90 689 0 +226 173 490 -20 414 454 90 535 0 +227 90 232 -10 629 785 90 246 0 +228 402 265 20 269 403 90 0 776 +229 361 14 10 709 715 90 0 110 +230 348 147 -10 796 963 90 504 0 +231 385 295 20 142 291 90 0 1 +232 394 23 -20 1240 1358 90 716 0 +233 466 295 -10 939 1166 90 572 0 +234 71 103 -20 1267 1503 90 777 0 +235 125 29 30 528 708 90 0 429 +236 25 65 -20 936 1126 90 630 0 +237 58 449 -30 935 1100 90 349 0 +238 246 398 40 148 255 90 0 597 +239 423 294 -10 706 947 90 611 0 +240 59 459 -10 617 675 90 170 0 +241 348 145 20 659 916 90 0 169 +242 477 97 -30 440 476 90 164 0 +243 307 102 -10 520 730 90 941 0 +244 169 31 20 374 460 90 0 48 +245 381 495 20 623 852 90 0 793 +246 95 234 10 261 416 90 0 227 +247 22 33 10 693 846 90 0 347 +248 435 268 10 1098 1156 90 0 826 +249 135 293 30 322 467 90 0 138 +250 439 266 10 230 331 90 0 863 +251 269 402 -20 530 706 90 362 0 +252 267 400 10 713 902 90 0 485 +253 473 196 10 533 673 90 0 221 +254 445 237 10 241 510 90 0 157 +255 461 284 -10 213 402 90 487 0 +256 167 339 10 584 774 90 0 857 +257 26 43 10 314 478 90 0 635 +258 101 386 -30 353 411 90 652 0 +259 342 54 20 433 737 90 0 691 +260 243 399 -20 803 816 90 287 0 +261 288 44 -10 555 793 90 369 0 +262 274 48 10 230 542 90 0 618 +263 360 184 10 744 1009 90 0 207 +264 23 67 30 1001 1248 90 0 310 +265 6 296 10 748 1041 0 0 1014 +266 249 258 -20 914 969 90 22 0 +267 421 415 30 289 371 90 0 24 +268 319 468 10 228 461 90 0 897 +269 50 438 -10 704 799 90 400 0 +270 440 61 -20 984 1020 90 868 0 +271 17 65 20 581 742 90 0 80 +272 323 118 20 228 444 90 0 405 +273 402 281 -30 778 1033 90 599 0 +274 71 153 -10 749 813 90 786 0 +275 52 432 20 744 887 90 0 341 +276 378 199 -20 691 874 90 801 0 +277 238 204 -20 514 685 90 808 0 +278 208 184 20 92 245 90 0 191 +279 376 195 10 500 692 0 0 1045 +280 473 475 -10 1114 1191 90 584 0 +281 215 395 -10 816 978 90 592 0 +282 123 222 30 306 500 0 0 1044 +283 436 241 -10 1290 1315 90 377 0 +284 70 100 -20 1023 1286 90 795 0 +285 73 328 20 193 280 90 0 356 +286 241 205 30 613 773 90 0 824 +287 250 405 20 311 362 90 0 260 +288 483 14 10 684 713 90 0 858 +289 466 287 10 457 534 90 0 85 +290 467 114 -20 1135 1247 90 419 0 +291 120 159 10 253 430 90 0 560 +292 408 84 -10 749 810 90 437 0 +293 413 217 20 210 308 90 0 446 +294 338 142 40 171 289 90 0 766 +295 483 457 20 767 779 90 0 180 +296 479 169 20 725 882 90 0 995 +297 95 224 -20 1044 1133 90 545 0 +298 122 216 10 368 630 90 0 119 +299 477 179 20 237 503 90 0 759 +300 406 99 20 336 469 90 0 965 +301 44 47 20 289 453 90 0 763 +302 487 450 -10 894 1027 90 45 0 +303 172 488 10 282 402 90 0 671 +304 460 374 -20 692 891 90 959 0 +305 279 138 40 264 338 90 0 136 +306 338 147 10 135 267 90 0 540 +307 395 295 -10 638 774 90 70 0 +308 195 185 20 315 420 90 0 979 +309 463 194 20 220 414 90 0 101 +310 30 72 -30 1281 1452 90 264 0 +311 244 254 -10 714 796 90 745 0 +312 317 261 -10 386 486 90 224 0 +313 67 108 10 285 359 90 0 878 +314 442 310 20 578 763 90 0 220 +315 63 336 20 768 915 0 0 1034 +316 109 107 -20 298 475 90 122 0 +317 100 387 10 398 549 90 0 505 +318 494 94 10 478 848 90 0 961 +319 343 49 10 574 786 90 0 145 +320 40 52 40 485 651 90 0 360 +321 319 124 -10 396 469 90 760 0 +322 94 97 20 253 365 90 0 172 +323 476 94 20 274 613 90 0 179 +324 283 47 10 307 485 90 0 838 +325 398 325 -20 706 910 90 861 0 +326 460 13 20 371 623 90 0 430 +327 305 107 -10 505 936 90 32 0 +328 188 12 30 245 323 90 0 634 +329 136 290 20 260 343 90 0 46 +330 439 268 -10 961 1104 90 117 0 +331 112 467 10 438 624 90 0 972 +332 181 469 20 403 601 90 0 936 +333 358 18 -20 479 573 90 467 0 +334 459 10 -20 418 762 90 722 0 +335 199 268 20 187 466 90 0 699 +336 436 237 20 186 417 90 0 637 +337 318 280 20 341 363 90 0 947 +338 64 99 10 862 895 0 0 1020 +339 394 333 -20 448 610 90 854 0 +340 366 93 -30 874 1050 90 931 0 +341 95 391 -20 827 1055 90 275 0 +342 391 425 -10 811 940 90 476 0 +343 344 146 10 398 626 90 0 756 +344 198 12 -10 537 676 90 879 0 +345 186 472 -30 558 638 90 149 0 +346 390 408 -20 468 502 90 451 0 +347 19 43 -10 1083 1378 90 247 0 +348 307 108 -30 760 865 90 686 0 +349 59 457 30 689 969 90 0 237 +350 49 451 20 332 418 90 0 431 +351 125 39 20 245 251 90 0 127 +352 61 147 -30 309 488 90 977 0 +353 317 123 20 419 631 90 0 499 +354 392 426 -20 684 704 90 528 0 +355 237 213 -40 784 979 90 715 0 +356 71 333 -20 197 456 90 285 0 +357 304 97 -30 326 547 90 520 0 +358 196 462 -10 947 1011 90 978 0 +359 224 191 20 212 460 90 0 442 +360 37 51 -40 534 788 90 320 0 +361 491 25 10 881 1087 90 0 839 +362 270 401 20 152 389 90 0 251 +363 474 461 30 307 486 90 0 187 +364 66 448 10 270 437 90 0 492 +365 337 241 20 286 450 0 0 1049 +366 269 46 20 681 847 90 0 929 +367 22 41 10 1067 1208 0 0 1003 +368 198 271 20 379 459 90 0 59 +369 287 43 10 542 623 90 0 261 +370 446 63 20 626 821 90 0 827 +371 200 229 30 254 402 90 0 143 +372 48 72 -10 622 858 90 33 0 +373 465 142 10 380 467 90 0 539 +374 123 155 -20 1118 1235 90 513 0 +375 16 497 20 1053 1109 90 0 387 +376 220 319 -20 868 1140 90 208 0 +377 484 171 10 596 820 90 0 283 +378 55 431 20 635 811 90 0 713 +379 428 24 -20 1095 1150 90 195 0 +380 80 342 10 193 309 90 0 9 +381 16 68 20 413 724 0 0 1004 +382 124 56 20 231 437 90 0 852 +383 95 218 -10 893 907 90 8 0 +384 481 26 30 321 586 90 0 994 +385 145 434 20 389 586 0 0 1029 +386 335 57 30 210 541 90 0 165 +387 26 490 -20 1078 1406 90 375 0 +388 324 127 30 143 377 90 0 548 +389 109 114 -10 784 915 90 47 0 +390 72 148 20 249 346 90 0 600 +391 220 392 -10 916 1070 90 168 0 +392 442 243 -10 957 1091 90 890 0 +393 69 336 20 383 563 90 0 688 +394 131 226 20 121 382 90 0 493 +395 150 204 -10 517 817 90 90 0 +396 423 217 20 739 894 0 0 1027 +397 419 459 -10 787 835 90 440 0 +398 285 163 -10 618 876 90 410 0 +399 203 7 -20 968 1173 90 594 0 +400 54 445 10 537 589 90 0 269 +401 109 463 -10 886 1092 90 422 0 +402 355 180 -20 209 416 90 3 0 +403 13 455 10 362 449 90 0 866 +404 165 337 20 369 426 90 0 39 +405 314 124 -20 729 882 90 272 0 +406 9 124 20 271 282 90 0 662 +407 3 292 20 299 562 90 0 2 +408 16 462 10 851 1071 90 0 845 +409 189 464 10 770 993 90 0 817 +410 288 154 10 433 503 90 0 398 +411 90 296 20 166 214 90 0 563 +412 138 438 20 740 984 90 0 160 +413 13 459 -20 644 720 90 729 0 +414 461 8 20 668 900 0 0 1002 +415 96 97 20 217 390 90 0 559 +416 68 99 -10 954 1171 90 616 0 +417 146 205 -20 275 504 90 109 0 +418 117 152 -20 820 973 90 57 0 +419 481 96 20 465 639 90 0 290 +420 338 260 -20 538 762 90 495 0 +421 285 44 10 364 617 90 0 697 +422 111 464 10 769 843 90 0 401 +423 468 291 -20 712 834 90 899 0 +424 148 206 20 358 607 90 0 65 +425 184 464 10 223 405 90 0 739 +426 197 11 -20 612 784 90 764 0 +427 396 410 -20 797 912 90 206 0 +428 133 53 -10 616 773 90 460 0 +429 132 30 -30 897 905 90 235 0 +430 464 13 -20 862 898 90 326 0 +431 100 394 -20 965 1108 90 350 0 +432 483 22 -20 379 639 90 853 0 +433 93 235 -10 966 996 90 850 0 +434 174 26 -20 979 1162 90 975 0 +435 436 264 20 186 358 90 0 657 +436 24 492 -10 1273 1280 90 16 0 +437 406 94 10 276 530 90 0 292 +438 234 246 10 477 643 0 0 1052 +439 315 287 -10 632 815 90 573 0 +440 408 453 10 562 674 90 0 397 +441 128 225 10 178 252 90 0 781 +442 226 191 -20 338 518 90 359 0 +443 391 407 -10 524 629 90 605 0 +444 198 264 -30 677 913 90 581 0 +445 179 7 -20 765 1030 90 200 0 +446 425 215 -20 691 757 90 293 0 +447 483 27 -30 1218 1412 90 608 0 +448 22 40 -20 986 1106 90 121 0 +449 479 176 20 240 469 90 0 546 +450 476 102 -10 778 885 90 622 0 +451 386 405 20 206 224 90 0 346 +452 22 38 20 895 1013 90 0 83 +453 440 241 -20 992 1240 90 602 0 +454 182 14 -10 893 1286 90 517 0 +455 266 405 -10 679 746 90 969 0 +456 357 181 20 278 530 90 0 193 +457 395 332 10 574 667 90 0 673 +458 423 290 10 187 531 90 0 591 +459 104 28 -30 623 841 90 842 0 +460 131 56 10 430 592 90 0 428 +461 111 110 -20 480 659 90 705 0 +462 97 93 20 448 543 90 0 698 +463 90 274 -10 329 540 90 116 0 +464 214 394 -20 785 827 90 771 0 +465 6 114 -30 792 873 90 820 0 +466 375 191 30 455 549 90 0 41 +467 356 21 20 368 498 90 0 333 +468 466 165 -10 640 912 90 779 0 +469 415 223 -10 1226 1333 90 733 0 +470 397 20 20 338 572 90 0 693 +471 241 403 -30 695 735 90 506 0 +472 69 334 30 302 460 90 0 967 +473 152 210 20 105 321 90 0 844 +474 67 335 20 604 709 90 0 518 +475 126 30 10 459 594 90 0 749 +476 390 423 10 285 341 90 0 342 +477 285 162 -20 560 752 90 5 0 +478 285 158 -20 274 471 90 856 0 +479 406 96 20 225 396 90 0 746 +480 459 374 20 813 952 0 0 1017 +481 67 109 20 363 463 90 0 876 +482 468 475 10 313 594 90 0 625 +483 438 31 10 288 599 90 0 531 +484 168 24 10 754 833 0 0 1016 +485 267 394 -10 876 1112 90 252 0 +486 406 450 -20 335 533 90 962 0 +487 460 288 10 213 538 90 0 255 +488 224 203 20 53 360 90 0 888 +489 21 487 -10 547 664 90 664 0 +490 21 488 -30 635 758 90 49 0 +491 87 217 10 568 673 90 0 821 +492 67 452 -10 276 452 90 364 0 +493 119 223 -20 697 1062 90 394 0 +494 398 428 10 577 617 90 0 555 +495 344 262 20 481 626 90 0 420 +496 390 301 10 307 534 90 0 576 +497 167 27 30 368 654 90 0 935 +498 236 247 -20 448 487 90 183 0 +499 313 119 -20 635 786 90 353 0 +500 13 51 -30 1143 1425 90 536 0 +501 200 13 10 355 495 90 0 82 +502 0 120 30 374 550 90 0 509 +503 202 4 10 973 981 90 0 156 +504 343 144 10 223 429 90 0 230 +505 94 383 -10 541 781 90 317 0 +506 250 411 30 470 575 90 0 471 +507 464 134 -30 1032 1123 90 892 0 +508 443 237 20 258 309 90 0 152 +509 4 114 -30 692 788 90 502 0 +510 169 336 30 804 926 0 0 1042 +511 200 178 20 209 329 90 0 732 +512 412 453 10 647 778 0 0 1011 +513 121 151 20 1059 1105 90 0 374 +514 403 93 10 1114 1198 0 0 1026 +515 399 301 -30 567 651 90 166 0 +516 97 387 -30 736 957 90 958 0 +517 176 8 10 932 1050 90 0 454 +518 62 326 -20 788 1094 90 474 0 +519 151 207 10 680 840 90 0 728 +520 299 98 30 178 506 90 0 357 +521 334 240 -30 448 661 90 585 0 +522 92 270 -20 972 1011 90 813 0 +523 444 269 -40 506 632 90 629 0 +524 132 223 -20 828 918 90 604 0 +525 428 25 -20 1182 1244 90 177 0 +526 413 421 10 624 972 90 0 217 +527 382 498 -20 568 720 90 28 0 +528 391 429 20 405 596 90 0 354 +529 398 97 10 243 364 90 0 989 +530 192 265 -10 656 743 90 933 0 +531 438 26 -10 373 577 90 483 0 +532 44 79 10 267 322 90 0 709 +533 137 290 -10 149 272 90 577 0 +534 446 319 30 334 447 90 0 738 +535 175 487 20 248 457 90 0 226 +536 26 45 30 303 335 90 0 500 +537 147 435 -20 497 664 90 106 0 +538 111 459 20 1083 1264 0 0 1013 +539 472 132 -10 723 869 90 373 0 +540 349 158 -10 1035 1109 90 306 0 +541 86 268 -10 663 762 90 586 0 +542 415 216 10 246 456 90 0 619 +543 121 218 20 154 293 90 0 679 +544 210 185 20 76 212 90 0 915 +545 98 215 20 155 363 90 0 297 +546 484 174 -20 468 571 90 449 0 +547 328 458 -10 871 1078 90 980 0 +548 313 126 -30 797 1000 90 388 0 +549 390 415 -10 952 1180 90 685 0 +550 459 17 -20 928 1204 90 718 0 +551 481 124 10 493 584 90 0 94 +552 386 414 -10 1011 1261 90 558 0 +553 116 466 -10 254 479 90 789 0 +554 468 295 10 869 1053 90 0 881 +555 391 426 -10 719 851 90 494 0 +556 408 279 -20 709 720 90 10 0 +557 15 68 -10 383 572 90 95 0 +558 392 424 10 845 1088 90 0 552 +559 88 95 -20 535 835 90 415 0 +560 116 151 -10 683 927 90 291 0 +561 240 250 10 228 517 90 0 714 +562 123 159 20 156 354 90 0 148 +563 89 290 -20 165 419 90 411 0 +564 39 50 30 362 590 90 0 641 +565 359 179 20 454 540 90 0 646 +566 338 257 20 671 814 0 0 1050 +567 92 236 20 989 1157 90 0 862 +568 413 417 10 1014 1328 0 0 1018 +569 91 101 10 860 887 90 0 603 +570 55 449 20 278 357 90 0 606 +571 57 425 20 260 371 90 0 96 +572 465 287 10 509 665 90 0 233 +573 320 280 10 220 299 90 0 439 +574 322 468 20 529 672 90 0 202 +575 483 458 -10 649 715 90 797 0 +576 312 267 -10 895 909 90 496 0 +577 139 291 10 118 287 90 0 533 +578 388 408 10 280 507 0 0 1024 +579 110 459 -10 955 1211 90 974 0 +580 459 372 20 607 792 90 0 56 +581 204 269 30 49 88 90 0 444 +582 407 98 10 218 320 90 0 37 +583 335 256 -10 879 973 90 162 0 +584 471 484 10 541 648 90 0 280 +585 339 244 30 165 384 90 0 521 +586 89 272 10 428 625 90 0 541 +587 488 96 -30 845 1036 90 710 0 +588 316 286 -30 489 775 90 613 0 +589 235 50 -10 693 1016 90 767 0 +590 316 258 20 208 477 90 0 199 +591 425 288 -10 572 700 90 458 0 +592 213 397 10 619 806 90 0 281 +593 113 156 10 562 677 90 0 159 +594 199 9 20 804 959 90 0 399 +595 463 167 10 592 773 0 0 1046 +596 129 27 -30 674 752 90 682 0 +597 248 404 -40 154 383 90 238 0 +598 405 276 -30 649 969 90 704 0 +599 400 288 30 154 165 90 0 273 +600 61 156 -20 411 584 90 390 0 +601 393 20 -10 1025 1386 90 706 0 +602 484 177 20 365 488 90 0 453 +603 108 116 -10 864 1021 90 569 0 +604 112 217 20 405 420 90 0 524 +605 389 404 10 259 340 90 0 443 +606 102 391 -20 1017 1243 90 570 0 +607 434 26 10 538 600 90 0 135 +608 488 26 30 1119 1216 90 0 447 +609 477 120 10 935 1060 90 0 753 +610 126 220 -20 602 767 90 902 0 +611 439 310 10 198 515 90 0 239 +612 212 319 -20 163 357 90 130 0 +613 320 283 30 357 534 90 0 588 +614 17 459 -20 1171 1304 90 812 0 +615 236 213 20 39 117 90 0 667 +616 68 108 10 230 351 90 0 416 +617 390 294 -20 781 1004 90 976 0 +618 275 42 -10 558 588 90 262 0 +619 423 214 -10 530 734 90 542 0 +620 460 367 20 322 520 90 0 841 +621 272 402 -10 213 457 90 914 0 +622 478 102 10 712 766 90 0 450 +623 400 260 40 150 257 90 0 734 +624 181 6 -30 655 775 90 92 0 +625 470 475 -10 353 458 90 482 0 +626 245 408 -10 542 696 90 772 0 +627 93 96 20 382 419 0 0 1030 +628 218 318 -10 811 1012 90 971 0 +629 441 265 40 295 449 90 0 523 +630 21 64 20 827 867 90 0 236 +631 356 23 -20 305 376 90 76 0 +632 267 44 -20 588 753 90 63 0 +633 277 50 -20 201 442 90 38 0 +634 182 4 -30 471 775 90 328 0 +635 26 36 -10 623 725 90 257 0 +636 384 491 20 918 927 90 0 147 +637 418 290 -20 1118 1276 90 336 0 +638 321 277 10 75 239 90 0 72 +639 358 16 30 512 724 90 0 42 +640 389 334 -20 254 435 90 783 0 +641 48 78 -30 922 1110 90 564 0 +642 24 68 -20 1260 1358 90 750 0 +643 206 225 10 331 519 90 0 956 +644 290 141 30 553 800 90 0 1000 +645 439 15 -20 633 724 90 184 0 +646 359 182 -20 755 813 90 565 0 +647 413 287 -20 1280 1486 90 112 0 +648 230 49 -20 201 438 90 197 0 +649 407 280 -20 516 732 90 99 0 +650 459 295 -10 1217 1265 90 950 0 +651 468 199 20 630 769 90 0 757 +652 101 384 30 200 463 90 0 258 +653 170 26 10 733 1039 90 0 765 +654 197 270 -20 480 541 90 52 0 +655 415 289 20 169 345 90 0 687 +656 203 390 40 280 387 90 0 761 +657 443 272 -20 775 915 90 435 0 +658 210 391 -20 194 280 90 815 0 +659 363 22 20 892 1097 0 0 1012 +660 352 176 20 126 244 90 0 670 +661 212 223 -10 661 929 90 968 0 +662 8 120 -20 1192 1209 90 406 0 +663 244 250 -10 58 315 90 36 0 +664 18 484 10 336 505 90 0 489 +665 379 82 -10 716 995 90 998 0 +666 84 346 -10 1066 1186 90 919 0 +667 233 207 -20 113 159 90 615 0 +668 344 62 -10 1179 1304 90 901 0 +669 20 489 10 786 971 90 0 731 +670 361 181 -20 671 713 90 660 0 +671 174 494 -10 426 630 90 303 0 +672 49 76 20 821 1027 0 0 1008 +673 390 325 -10 818 995 90 457 0 +674 7 118 20 906 1129 90 0 871 +675 107 26 -10 468 629 90 190 0 +676 312 270 -10 836 1154 90 141 0 +677 399 102 20 638 727 90 0 921 +678 109 108 10 339 615 90 0 773 +679 115 218 -20 202 438 90 543 0 +680 88 287 -30 860 977 90 736 0 +681 54 424 10 266 441 90 0 91 +682 125 32 30 311 558 90 0 596 +683 199 12 20 466 566 90 0 98 +684 457 374 10 965 984 90 0 833 +685 391 413 10 971 1110 90 0 549 +686 304 102 30 432 631 90 0 348 +687 391 293 -20 694 907 90 655 0 +688 66 336 -20 545 951 90 393 0 +689 132 291 10 686 847 90 0 225 +690 18 462 -20 931 1174 90 887 0 +691 347 62 -20 1077 1219 90 259 0 +692 466 142 10 416 612 90 0 133 +693 389 17 -20 979 1062 90 470 0 +694 342 254 -20 222 323 90 69 0 +695 92 223 -30 901 1090 90 778 0 +696 404 83 30 782 965 90 0 205 +697 290 46 -10 755 974 90 421 0 +698 95 92 -20 505 670 90 462 0 +699 200 265 -20 790 984 90 335 0 +700 435 16 -20 767 958 90 14 0 +701 25 499 -30 1114 1245 90 79 0 +702 319 260 -20 495 561 90 155 0 +703 116 225 -20 716 856 90 723 0 +704 402 284 30 286 394 90 0 598 +705 108 105 20 287 301 90 0 461 +706 386 13 10 745 918 90 0 601 +707 472 129 10 327 369 90 0 942 +708 132 57 -40 257 581 90 784 0 +709 43 71 -10 436 669 90 532 0 +710 493 91 30 485 655 90 0 587 +711 12 451 20 311 348 90 0 970 +712 201 188 10 452 655 90 0 898 +713 60 428 -20 1035 1161 90 378 0 +714 243 248 -10 198 359 90 561 0 +715 230 197 40 498 736 90 0 355 +716 389 11 20 656 820 90 0 232 +717 401 281 -10 952 1040 90 755 0 +718 459 14 20 391 419 90 0 550 +719 411 95 30 410 585 90 0 204 +720 0 297 -10 615 801 90 102 0 +721 476 196 -30 419 601 90 11 0 +722 458 16 20 313 384 90 0 334 +723 92 230 20 487 560 90 0 703 +724 432 24 -30 927 1130 90 754 0 +725 215 317 10 75 309 90 0 794 +726 371 192 30 134 416 90 0 31 +727 481 20 20 427 777 90 0 835 +728 152 207 -10 758 943 90 519 0 +729 14 459 20 513 669 90 0 413 +730 361 17 20 737 872 90 0 88 +731 8 497 -10 924 1041 90 669 0 +732 206 186 -20 864 981 90 511 0 +733 421 218 10 786 1032 90 0 469 +734 402 264 -40 152 392 90 623 0 +735 388 325 -20 973 1024 90 748 0 +736 35 304 30 221 520 90 0 680 +737 321 263 20 573 850 0 0 1053 +738 444 313 -30 374 599 90 534 0 +739 188 462 -10 686 893 90 425 0 +740 400 103 -20 441 741 90 780 0 +741 418 221 -10 969 1404 90 167 0 +742 112 219 20 394 616 90 0 880 +743 408 452 -20 393 662 90 115 0 +744 30 301 -10 632 753 90 61 0 +745 205 228 10 52 230 90 0 311 +746 407 88 -20 966 1153 90 479 0 +747 380 489 -10 987 1241 90 188 0 +748 395 331 20 641 783 90 0 735 +749 133 26 -10 768 845 90 475 0 +750 21 68 20 1129 1303 90 0 642 +751 313 282 20 761 875 0 0 1051 +752 53 440 -10 593 724 90 882 0 +753 458 130 -10 1116 1233 90 609 0 +754 437 15 30 586 954 90 0 724 +755 400 286 10 172 321 90 0 717 +756 346 144 -10 658 732 90 343 0 +757 440 244 -20 668 1015 90 651 0 +758 280 162 30 92 286 90 0 774 +759 488 173 -20 529 699 90 299 0 +760 326 118 10 152 406 90 0 321 +761 207 400 -40 462 590 90 656 0 +762 391 18 -20 1014 1211 90 875 0 +763 37 55 -20 685 826 90 301 0 +764 204 15 20 239 314 90 0 426 +765 173 28 -10 1158 1168 90 653 0 +766 343 148 -40 357 483 90 294 0 +767 231 43 10 401 560 90 0 589 +768 445 273 -10 620 886 90 829 0 +769 432 27 10 817 872 90 0 791 +770 439 305 -30 644 890 90 940 0 +771 208 396 20 416 447 90 0 464 +772 249 407 10 329 528 90 0 626 +773 107 112 -10 688 827 90 678 0 +774 279 159 -30 216 337 90 758 0 +775 376 494 30 274 533 90 0 973 +776 403 262 -20 501 540 90 228 0 +777 41 47 20 335 429 90 0 234 +778 96 213 30 222 458 90 0 695 +779 461 167 10 456 545 90 0 468 +780 391 99 20 206 334 90 0 740 +781 116 221 -10 510 688 90 441 0 +782 165 343 -10 477 692 90 954 0 +783 388 334 20 161 378 90 0 640 +784 130 57 40 277 377 90 0 708 +785 422 409 10 234 431 90 0 925 +786 66 156 10 600 771 90 0 274 +787 485 86 20 286 510 90 0 877 +788 389 428 -10 389 426 90 849 0 +789 117 467 10 254 446 90 0 553 +790 475 477 20 946 1173 0 0 1001 +791 429 27 -10 1235 1376 90 769 0 +792 339 60 20 247 365 90 0 803 +793 381 494 -20 772 885 90 245 0 +794 218 321 -10 677 780 90 725 0 +795 64 101 20 620 771 90 0 284 +796 343 254 20 204 523 90 0 21 +797 478 464 10 343 462 90 0 575 +798 423 286 20 377 530 90 0 51 +799 198 9 20 750 831 0 0 1015 +800 225 196 10 59 346 90 0 211 +801 374 190 20 239 398 90 0 276 +802 462 14 -20 846 1099 90 100 0 +803 347 54 -20 776 964 90 792 0 +804 231 195 20 480 568 90 0 923 +805 72 96 -20 1211 1288 90 894 0 +806 489 87 -10 436 514 90 957 0 +807 443 313 30 469 687 0 0 1035 +808 233 204 20 189 269 90 0 277 +809 477 483 20 687 875 90 0 43 +810 459 368 -20 240 446 90 960 0 +811 95 277 -10 1036 1142 90 189 0 +812 16 460 20 1066 1225 90 0 614 +813 100 266 20 150 380 90 0 522 +814 288 53 40 850 1073 0 0 1033 +815 211 386 20 141 301 90 0 658 +816 144 439 -10 681 851 90 124 0 +817 224 314 -10 948 1253 90 409 0 +818 79 291 -10 487 601 90 938 0 +819 95 235 10 155 276 90 0 161 +820 7 123 30 327 402 90 0 465 +821 91 217 -10 671 758 90 491 0 +822 105 27 -10 597 684 90 50 0 +823 101 385 20 251 331 90 0 142 +824 238 210 -30 740 838 90 286 0 +825 439 67 10 263 455 90 0 154 +826 435 267 -10 1108 1327 90 248 0 +827 443 64 -20 767 866 90 370 0 +828 92 234 -10 854 925 90 943 0 +829 450 265 10 416 527 90 0 768 +830 102 27 20 780 869 90 0 872 +831 492 94 10 636 875 90 0 58 +832 440 63 20 813 1007 90 0 171 +833 453 367 -10 1045 1101 90 684 0 +834 15 69 10 296 601 90 0 215 +835 489 17 -20 724 865 90 727 0 +836 335 255 20 85 248 90 0 951 +837 419 418 10 295 552 90 0 104 +838 292 41 -10 663 875 90 324 0 +839 489 27 -10 947 1206 90 361 0 +840 96 270 20 253 422 90 0 906 +841 461 369 -20 521 691 90 620 0 +842 105 22 30 270 537 90 0 459 +843 479 121 10 635 810 90 0 885 +844 207 223 -20 545 675 90 473 0 +845 17 458 -10 1192 1422 90 408 0 +846 186 7 20 454 601 90 0 201 +847 465 168 -20 720 1018 90 908 0 +848 416 288 -20 1257 1322 90 55 0 +849 388 418 10 217 498 90 0 788 +850 92 233 10 711 886 90 0 433 +851 179 492 10 654 776 90 0 134 +852 132 55 -20 531 674 90 382 0 +853 485 24 20 326 514 90 0 432 +854 388 331 20 160 314 90 0 339 +855 217 323 -10 432 465 90 904 0 +856 281 164 20 91 299 90 0 478 +857 169 340 -10 750 792 90 256 0 +858 491 20 -10 856 921 90 288 0 +859 279 42 -20 217 384 90 212 0 +860 439 243 20 1083 1335 0 0 1022 +861 391 334 20 412 461 90 0 325 +862 96 244 -20 1333 1378 90 567 0 +863 441 273 -10 847 1028 90 250 0 +864 477 478 -30 943 991 90 993 0 +865 56 434 20 752 1069 90 0 75 +866 12 463 -10 698 853 90 403 0 +867 458 164 -30 330 482 90 194 0 +868 446 65 20 508 574 90 0 270 +869 71 156 -30 735 1013 90 870 0 +870 65 153 30 549 635 90 0 869 +871 8 118 -20 1031 1185 90 674 0 +872 102 29 -20 866 967 90 830 0 +873 315 265 -10 693 922 90 924 0 +874 343 62 -10 1276 1388 90 128 0 +875 384 16 20 754 1098 90 0 762 +876 67 105 -20 447 753 90 481 0 +877 478 118 -20 1018 1161 90 787 0 +878 73 101 -10 1210 1479 90 313 0 +879 200 14 10 278 389 90 0 344 +880 114 225 -20 618 770 90 742 0 +881 460 293 -10 1125 1173 90 554 0 +882 51 447 10 376 562 90 0 752 +883 418 295 -20 1057 1146 90 29 0 +884 282 139 20 146 269 0 0 1019 +885 477 122 -10 849 962 90 843 0 +886 91 266 10 673 943 90 0 174 +887 16 463 20 810 929 90 0 690 +888 228 199 -20 698 720 90 488 0 +889 435 20 20 920 993 0 0 1040 +890 467 195 10 265 363 90 0 392 +891 469 132 -10 819 960 90 913 0 +892 465 136 30 966 1004 90 0 507 +893 246 255 -30 759 937 90 218 0 +894 49 75 20 742 925 90 0 805 +895 66 98 20 885 1055 0 0 1006 +896 166 32 -20 267 380 90 984 0 +897 326 466 -10 716 854 90 268 0 +898 202 186 -10 545 747 90 712 0 +899 467 285 20 281 526 90 0 423 +900 290 136 -10 503 661 90 30 0 +901 341 58 10 334 463 90 0 668 +902 121 219 20 132 143 90 0 610 +903 107 35 30 904 1124 0 0 1010 +904 216 319 10 208 501 90 0 855 +905 134 288 -10 894 1007 90 20 0 +906 89 270 -20 536 702 90 840 0 +907 136 52 10 705 870 0 0 1025 +908 462 167 20 556 627 90 0 847 +909 340 54 10 396 589 0 0 1028 +910 80 286 10 563 714 90 0 27 +911 38 301 20 730 851 0 0 1023 +912 25 307 -20 403 606 90 34 0 +913 470 139 10 687 712 90 0 891 +914 270 400 10 151 224 90 0 621 +915 204 187 -20 720 941 90 544 0 +916 460 171 -20 918 1012 90 84 0 +917 399 106 20 904 1010 0 0 1041 +918 197 267 10 504 704 90 0 140 +919 77 350 10 961 1094 90 0 666 +920 91 231 30 611 620 0 0 1039 +921 398 103 -20 769 777 90 677 0 +922 35 303 20 221 239 90 0 946 +923 231 204 -20 756 855 90 804 0 +924 311 266 10 63 348 90 0 873 +925 416 420 -10 664 745 90 785 0 +926 231 203 20 194 450 0 0 1054 +927 4 116 -20 571 726 90 222 0 +928 417 217 30 384 503 90 0 15 +929 268 52 -20 895 1187 90 366 0 +930 345 144 30 452 756 0 0 1043 +931 368 85 30 202 425 90 0 340 +932 441 65 -10 355 538 90 35 0 +933 201 270 10 64 222 90 0 530 +934 0 293 30 583 645 90 0 126 +935 167 24 -30 646 759 90 497 0 +936 186 464 -20 686 707 90 332 0 +937 7 292 10 246 437 90 0 181 +938 80 290 10 305 600 90 0 818 +939 405 455 40 845 987 90 0 123 +940 439 312 30 198 444 90 0 770 +941 300 108 10 150 211 90 0 243 +942 478 121 -10 713 914 90 707 0 +943 92 232 10 332 531 90 0 828 +944 111 463 -10 861 933 90 103 0 +945 132 294 20 439 536 0 0 1047 +946 134 285 -20 1063 1210 90 922 0 +947 316 284 -20 525 555 90 337 0 +948 56 428 20 306 591 90 0 185 +949 232 47 10 237 353 90 0 198 +950 466 291 10 662 700 90 0 650 +951 341 257 -20 408 507 90 836 0 +952 420 213 10 418 659 90 0 73 +953 116 152 -10 591 837 90 131 0 +954 163 337 10 249 362 90 0 782 +955 440 7 -40 483 495 90 139 0 +956 208 222 -10 641 761 90 643 0 +957 485 95 10 281 424 90 0 806 +958 97 385 30 464 670 90 0 516 +959 462 367 20 425 602 90 0 304 +960 455 365 20 235 369 90 0 810 +961 492 95 -10 713 980 90 318 0 +962 405 450 20 253 454 90 0 486 +963 371 193 20 133 342 90 0 987 +964 234 202 10 378 451 90 0 988 +965 404 103 -20 459 535 90 300 0 +966 24 41 10 497 660 90 0 113 +967 67 334 -30 461 671 90 472 0 +968 207 227 10 48 84 90 0 661 +969 277 403 10 319 541 90 0 455 +970 15 457 -20 448 549 90 711 0 +971 217 319 10 765 875 90 0 628 +972 111 467 -10 560 684 90 331 0 +973 378 493 -30 274 658 90 775 0 +974 112 465 10 693 735 90 0 579 +975 173 25 20 885 1074 90 0 434 +976 421 292 20 249 283 90 0 617 +977 74 146 30 204 265 90 0 352 +978 178 491 10 469 777 90 0 358 +979 204 185 -20 658 818 90 308 0 +980 319 470 10 369 456 90 0 547 +981 163 331 40 118 129 90 0 125 +982 470 125 20 253 313 90 0 111 +983 315 121 10 553 683 0 0 1031 +984 166 34 20 231 302 90 0 896 +985 284 140 40 115 134 90 0 25 +986 85 288 20 328 386 90 0 153 +987 376 190 -20 361 460 90 963 0 +988 238 203 -10 463 555 90 964 0 +989 399 104 -10 736 993 90 529 0 +990 472 481 20 373 630 90 0 60 +991 46 74 -30 525 769 90 209 0 +992 401 255 -20 683 740 90 107 0 +993 475 480 30 811 937 90 0 864 +994 485 27 -30 1223 1299 90 384 0 +995 476 174 -20 847 951 90 296 0 +996 330 242 -30 569 728 90 997 0 +997 332 249 30 82 252 90 0 996 +998 375 80 10 508 640 90 0 665 +999 94 235 20 156 375 90 0 71 +1000 287 144 -30 790 932 90 644 0 +1001 475 477 -20 946 1173 90 790 0 +1002 461 8 -20 668 900 90 414 0 +1003 22 41 -10 1067 1208 90 367 0 +1004 16 68 -20 413 724 90 381 0 +1005 433 31 -10 285 442 90 54 0 +1006 66 98 -20 885 1055 90 895 0 +1007 8 116 -20 826 1025 90 196 0 +1008 49 76 -20 821 1027 90 672 0 +1009 435 62 -30 1143 1231 90 146 0 +1010 107 35 -30 904 1124 90 903 0 +1011 412 453 -10 647 778 90 512 0 +1012 363 22 -20 892 1097 90 659 0 +1013 111 459 -20 1083 1264 90 538 0 +1014 6 296 -10 748 1041 90 265 0 +1015 198 9 -20 750 831 90 799 0 +1016 168 24 -10 754 833 90 484 0 +1017 459 374 -20 813 952 90 480 0 +1018 413 417 -10 1014 1328 90 568 0 +1019 282 139 -20 146 269 90 884 0 +1020 64 99 -10 862 895 90 338 0 +1021 323 471 -30 494 521 90 210 0 +1022 439 243 -20 1083 1335 90 860 0 +1023 38 301 -20 730 851 90 911 0 +1024 388 408 -10 280 507 90 578 0 +1025 136 52 -10 705 870 90 907 0 +1026 403 93 -10 1114 1198 90 514 0 +1027 423 217 -20 739 894 90 396 0 +1028 340 54 -10 396 589 90 909 0 +1029 145 434 -20 389 586 90 385 0 +1030 93 96 -20 382 419 90 627 0 +1031 315 121 -10 553 683 90 983 0 +1032 367 83 -30 255 336 90 173 0 +1033 288 53 -40 850 1073 90 814 0 +1034 63 336 -20 768 915 90 315 0 +1035 443 313 -30 469 687 90 807 0 +1036 74 350 -10 848 1022 90 97 0 +1037 131 220 -30 710 849 90 23 0 +1038 93 213 -30 378 489 90 129 0 +1039 91 231 -30 611 620 90 920 0 +1040 435 20 -20 920 993 90 889 0 +1041 399 106 -20 904 1010 90 917 0 +1042 169 336 -30 804 926 90 510 0 +1043 345 144 -30 452 756 90 930 0 +1044 123 222 -30 306 500 90 282 0 +1045 376 195 -10 500 692 90 279 0 +1046 463 167 -10 592 773 90 595 0 +1047 132 294 -20 439 536 90 945 0 +1048 154 207 -20 907 1162 90 186 0 +1049 337 241 -20 286 450 90 365 0 +1050 338 257 -20 671 814 90 566 0 +1051 313 282 -20 761 875 90 751 0 +1052 234 246 -10 477 643 90 438 0 +1053 321 263 -20 573 850 90 737 0 +1054 231 203 -20 194 450 90 926 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1107.txt b/jsprit-instances/instances/lilim/1000/LC1107.txt new file mode 100644 index 00000000..62a9a98a --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1107.txt @@ -0,0 +1,1054 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 10 145 325 90 0 307 +2 5 297 -20 896 1076 90 407 0 +3 355 177 20 129 309 90 0 193 +4 78 346 30 289 469 90 0 97 +5 286 159 20 473 653 90 0 477 +6 322 465 10 226 406 90 0 268 +7 393 408 30 579 759 90 0 67 +8 89 216 10 438 618 90 0 695 +9 76 345 30 473 653 0 0 1031 +10 410 285 20 438 618 90 0 598 +11 472 189 -10 322 502 90 890 0 +12 270 49 30 857 1037 90 0 929 +13 219 325 -10 451 631 90 725 0 +14 437 12 20 495 675 90 0 700 +15 418 218 -30 912 1092 90 928 0 +16 20 488 10 697 877 90 0 387 +17 77 347 20 381 561 90 0 89 +18 73 346 10 659 839 90 0 666 +19 480 455 -10 1061 1241 90 797 0 +20 129 292 -20 491 671 90 329 0 +21 337 257 -20 744 924 90 796 0 +22 237 254 -20 568 748 90 498 0 +23 131 220 30 690 870 90 0 524 +24 417 417 -20 897 1077 90 104 0 +25 287 143 -20 680 860 90 900 0 +26 379 80 -30 673 853 90 173 0 +27 87 285 30 646 826 90 0 680 +28 374 489 20 269 449 90 0 775 +29 440 247 20 658 838 90 0 101 +30 281 137 -40 303 483 90 305 0 +31 379 196 20 599 779 0 0 1039 +32 297 102 10 157 337 90 0 520 +33 39 76 10 274 454 90 0 991 +34 35 306 -30 314 494 90 736 0 +35 435 68 10 259 439 0 0 1008 +36 245 251 10 5 185 90 0 561 +37 409 88 -20 595 775 90 204 0 +38 273 55 20 196 376 90 0 63 +39 163 340 -20 401 581 90 125 0 +40 129 223 20 217 397 90 0 610 +41 371 200 -10 789 969 90 279 0 +42 357 26 20 1092 1272 90 0 874 +43 470 473 -10 1156 1336 90 482 0 +44 77 344 -10 197 377 90 380 0 +45 478 461 -30 406 586 90 363 0 +46 128 291 10 583 763 0 0 1043 +47 111 113 10 573 753 90 0 560 +48 164 21 -20 518 698 90 984 0 +49 21 485 30 423 603 90 0 375 +50 108 26 10 367 547 90 0 459 +51 424 286 10 454 634 90 0 848 +52 200 270 20 144 324 90 0 335 +53 7 300 -10 990 1170 90 265 0 +54 433 31 10 285 465 90 0 531 +55 420 295 20 920 1100 90 0 637 +56 451 367 -20 1075 1255 90 959 0 +57 118 157 20 344 524 90 0 264 +58 489 101 20 946 1126 0 0 1006 +59 200 261 10 891 1071 90 0 140 +60 476 483 -30 600 780 90 625 0 +61 30 302 10 512 692 90 0 911 +62 8 300 -10 1081 1261 90 181 0 +63 275 45 -20 390 570 90 38 0 +64 238 46 -20 670 850 90 198 0 +65 152 206 -20 852 1032 90 728 0 +66 99 218 30 154 334 90 0 545 +67 393 410 -30 857 1037 90 7 0 +68 480 460 20 498 678 90 0 295 +69 337 256 -20 87 267 90 836 0 +70 389 300 -20 239 419 90 231 0 +71 90 237 20 1166 1346 90 0 862 +72 321 280 30 79 259 90 0 947 +73 417 218 10 1003 1183 0 0 1032 +74 64 108 10 416 596 90 0 569 +75 57 432 -20 913 1093 90 275 0 +76 356 24 20 249 429 90 0 631 +77 143 207 30 206 386 90 0 417 +78 221 325 -10 543 723 90 904 0 +79 22 483 30 325 505 90 0 490 +80 24 65 -10 850 1030 90 593 0 +81 141 431 30 303 483 90 0 160 +82 202 9 10 1163 1343 0 0 1017 +83 20 48 -10 1236 1416 90 367 0 +84 457 163 20 225 405 0 0 1022 +85 470 290 -10 775 955 90 289 0 +86 268 400 -10 808 988 90 914 0 +87 337 251 10 87 267 90 0 120 +88 366 20 10 811 991 0 0 1011 +89 72 344 -20 567 747 90 17 0 +90 149 203 -20 485 665 90 473 0 +91 55 428 20 449 629 90 0 378 +92 189 7 30 251 431 90 0 200 +93 397 18 10 457 637 90 0 203 +94 481 122 30 540 720 90 0 942 +95 20 73 10 290 470 90 0 557 +96 54 430 20 541 721 90 0 431 +97 74 350 -30 845 1025 90 4 0 +98 202 8 -10 1072 1252 90 344 0 +99 406 285 -10 344 524 90 755 0 +100 460 2 -20 598 778 90 722 0 +101 441 244 -20 842 1022 90 29 0 +102 1 293 10 433 613 90 0 720 +103 115 465 -20 347 527 90 553 0 +104 422 420 20 428 608 90 0 24 +105 75 347 10 751 931 90 0 919 +106 141 428 20 208 388 90 0 385 +107 404 264 -20 338 518 90 228 0 +108 398 23 10 270 450 90 0 875 +109 148 211 20 110 290 90 0 519 +110 362 22 -20 995 1175 90 659 0 +111 479 127 20 355 535 90 0 885 +112 443 246 20 475 655 90 0 157 +113 22 37 10 773 953 90 0 347 +114 65 100 10 697 877 90 0 895 +115 404 447 20 250 430 90 0 962 +116 102 264 10 148 328 90 0 886 +117 444 271 10 571 751 90 0 330 +118 325 466 40 604 784 90 0 547 +119 124 219 20 503 683 0 0 1041 +120 335 243 -10 371 551 90 87 0 +121 26 42 20 397 577 90 0 635 +122 113 106 20 198 378 90 0 374 +123 399 450 -10 924 1104 90 440 0 +124 146 439 10 584 764 90 0 816 +125 162 336 20 124 304 90 0 39 +126 2 295 -30 711 891 90 934 0 +127 122 35 10 250 430 90 0 682 +128 346 60 -20 966 1146 90 145 0 +129 93 213 30 343 523 90 0 297 +130 218 316 20 73 253 90 0 612 +131 116 156 -20 436 616 90 562 0 +132 419 422 20 521 701 90 0 217 +133 467 141 -10 516 696 90 373 0 +134 187 491 -10 723 903 90 851 0 +135 433 25 20 847 1027 90 0 232 +136 286 137 10 398 578 90 0 644 +137 370 82 -30 389 569 90 931 0 +138 132 290 -10 768 948 90 577 0 +139 435 11 40 302 482 90 0 724 +140 206 261 -10 987 1167 90 59 0 +141 428 291 -10 641 821 90 458 0 +142 95 384 30 662 842 90 0 516 +143 205 223 -10 428 608 90 745 0 +144 463 140 -40 240 420 90 175 0 +145 343 47 20 682 862 90 0 128 +146 435 62 -10 1097 1277 90 171 0 +147 387 488 -20 927 1107 90 245 0 +148 121 157 10 159 339 90 0 291 +149 182 463 -10 316 496 90 425 0 +150 92 216 -30 716 896 90 778 0 +151 370 83 20 298 478 90 0 998 +152 444 242 -20 381 561 90 336 0 +153 90 285 -10 921 1101 90 189 0 +154 446 64 -20 542 722 90 868 0 +155 312 264 -10 65 245 90 924 0 +156 208 11 -20 1259 1439 90 399 0 +157 442 247 -20 566 746 90 112 0 +158 140 431 30 212 392 90 0 537 +159 118 153 -20 898 1078 90 705 0 +160 134 428 -30 873 1053 90 81 0 +161 91 235 -20 1074 1254 90 567 0 +162 406 257 10 526 706 90 0 992 +163 377 76 20 579 759 0 0 1018 +164 474 96 30 271 451 90 0 323 +165 346 57 -10 873 1053 90 803 0 +166 393 301 30 423 603 90 0 676 +167 412 214 10 165 345 90 0 542 +168 210 398 10 529 709 90 0 817 +169 346 150 -30 883 1063 90 930 0 +170 62 453 10 460 640 90 0 240 +171 437 61 10 1005 1185 90 0 146 +172 87 96 30 687 867 0 0 1035 +173 367 83 30 205 385 90 0 26 +174 91 268 -20 810 990 90 463 0 +175 459 145 40 233 413 90 0 144 +176 63 444 -10 1025 1205 90 216 0 +177 433 27 20 571 751 90 0 601 +178 60 454 -10 832 1012 90 364 0 +179 478 99 10 556 736 90 0 622 +180 485 454 -10 776 956 90 575 0 +181 6 292 10 248 428 90 0 62 +182 398 20 20 274 454 90 0 470 +183 248 251 20 2 182 90 0 714 +184 433 15 20 297 477 90 0 955 +185 64 426 -20 1102 1282 90 713 0 +186 154 207 20 944 1124 0 0 1038 +187 481 456 -10 969 1149 90 302 0 +188 380 498 -30 462 642 90 973 0 +189 88 286 10 737 917 90 0 153 +190 111 23 10 266 446 90 0 675 +191 199 187 -20 372 552 90 278 0 +192 269 48 -20 766 946 90 632 0 +193 367 178 -20 505 685 90 3 0 +194 452 163 30 219 399 90 0 779 +195 431 28 -10 663 843 90 483 0 +196 8 116 20 835 1015 0 0 1036 +197 233 47 20 296 476 90 0 589 +198 237 43 20 577 757 90 0 64 +199 320 262 -10 530 710 90 224 0 +200 188 4 -30 344 524 90 92 0 +201 180 6 -20 716 896 90 624 0 +202 328 466 -20 787 967 90 574 0 +203 393 12 -10 554 734 90 93 0 +204 409 90 20 503 683 90 0 37 +205 406 87 -30 878 1058 90 696 0 +206 394 407 -10 671 851 90 578 0 +207 358 183 -20 879 1059 90 670 0 +208 186 461 20 220 400 90 0 936 +209 38 72 30 368 548 90 0 338 +210 323 471 30 417 597 90 0 897 +211 224 192 10 155 335 90 0 804 +212 278 46 20 205 385 90 0 421 +213 272 403 30 435 615 90 0 455 +214 232 42 -10 482 662 90 767 0 +215 18 63 10 664 844 90 0 630 +216 58 458 10 648 828 90 0 176 +217 416 417 -20 988 1168 90 132 0 +218 205 230 30 143 323 90 0 844 +219 65 453 30 367 547 90 0 349 +220 421 294 -10 828 1008 90 591 0 +221 434 245 -10 1307 1487 90 254 0 +222 2 116 20 466 646 90 0 509 +223 411 421 -20 800 980 90 925 0 +224 315 260 10 160 340 90 0 199 +225 136 288 -30 953 1133 90 249 0 +226 173 490 20 344 524 90 0 671 +227 90 232 -10 617 797 90 943 0 +228 402 265 20 246 426 90 0 107 +229 361 14 10 622 802 90 0 730 +230 348 147 -10 790 970 90 343 0 +231 385 295 20 142 322 90 0 70 +232 394 23 -20 1209 1389 90 135 0 +233 466 295 -10 963 1143 90 255 0 +234 71 103 -20 1323 1503 90 795 0 +235 125 29 30 528 708 90 0 596 +236 25 65 10 941 1121 0 0 1052 +237 58 449 -30 928 1108 90 492 0 +238 246 398 40 148 328 90 0 287 +239 423 294 10 736 916 90 0 647 +240 59 459 -10 556 736 90 170 0 +241 348 145 -10 698 878 90 306 0 +242 477 97 10 368 548 90 0 419 +243 307 102 -10 535 715 90 941 0 +244 169 31 -10 327 507 90 896 0 +245 381 495 20 647 827 90 0 147 +246 95 234 10 248 428 90 0 723 +247 22 33 -10 679 859 90 966 0 +248 435 268 -20 1037 1217 90 523 0 +249 135 293 30 305 485 90 0 225 +250 439 266 10 190 370 90 0 629 +251 269 402 -10 528 708 90 969 0 +252 267 400 10 717 897 90 0 485 +253 473 196 -30 513 693 90 721 0 +254 445 237 10 285 465 90 0 221 +255 461 284 10 218 398 90 0 233 +256 167 339 10 589 769 90 0 510 +257 26 43 10 306 486 90 0 448 +258 101 386 20 292 472 90 0 317 +259 342 54 20 495 675 90 0 668 +260 243 399 -30 720 900 90 506 0 +261 288 44 -10 584 764 90 369 0 +262 274 48 10 296 476 90 0 366 +263 360 184 -20 786 966 90 565 0 +264 23 67 -20 1034 1214 90 57 0 +265 6 296 10 805 985 90 0 53 +266 249 258 30 852 1032 0 0 1033 +267 421 415 30 240 420 90 0 837 +268 319 468 -10 231 411 90 6 0 +269 50 438 -20 662 842 90 350 0 +270 440 61 -10 912 1092 90 932 0 +271 17 65 20 572 752 0 0 1004 +272 323 118 20 246 426 90 0 321 +273 402 281 -30 815 995 90 599 0 +274 71 153 20 691 871 90 0 869 +275 52 432 20 726 906 90 0 75 +276 378 199 -30 692 872 90 466 0 +277 238 204 -10 510 690 90 964 0 +278 208 184 20 79 259 90 0 191 +279 376 195 10 506 686 90 0 41 +280 473 475 -20 1062 1242 90 864 0 +281 215 395 -40 807 987 90 739 0 +282 123 222 -10 313 493 90 441 0 +283 436 241 -10 1212 1392 90 392 0 +284 70 100 10 1065 1245 0 0 1007 +285 73 328 20 193 373 90 0 518 +286 241 205 -10 603 783 90 988 0 +287 250 405 -40 247 427 90 238 0 +288 483 14 10 608 788 90 0 361 +289 466 287 10 406 586 90 0 85 +290 467 114 -20 1101 1281 90 450 0 +291 120 159 -10 251 431 90 148 0 +292 408 84 10 689 869 90 0 746 +293 413 217 20 169 349 90 0 619 +294 338 142 40 140 320 90 0 756 +295 483 457 -20 683 863 90 68 0 +296 479 169 20 714 894 90 0 995 +297 95 224 -30 999 1179 90 129 0 +298 122 216 -20 409 589 90 394 0 +299 477 179 20 237 417 90 0 759 +300 406 99 20 312 492 90 0 965 +301 44 47 20 289 469 90 0 777 +302 487 450 10 871 1051 90 0 187 +303 172 488 -20 252 432 90 535 0 +304 460 374 -20 702 882 90 580 0 +305 279 138 40 211 391 90 0 30 +306 338 147 10 135 315 90 0 241 +307 395 295 -10 616 796 90 1 0 +308 195 185 20 277 457 90 0 898 +309 463 194 20 220 400 90 0 741 +310 30 72 -10 1272 1452 90 360 0 +311 244 254 20 665 845 90 0 893 +312 317 261 20 346 526 0 0 1012 +313 67 108 10 232 412 90 0 805 +314 442 310 -30 581 761 90 940 0 +315 63 336 -10 751 931 90 356 0 +316 109 107 20 296 476 90 0 953 +317 100 387 -20 384 564 90 258 0 +318 494 94 -20 573 753 90 787 0 +319 343 49 -10 590 770 90 901 0 +320 40 52 -30 478 658 90 564 0 +321 319 124 -20 343 523 90 272 0 +322 94 97 -20 219 399 90 415 0 +323 476 94 -30 275 455 90 164 0 +324 283 47 10 306 486 90 0 697 +325 398 325 30 718 898 90 0 735 +326 460 13 20 407 587 90 0 802 +327 305 107 20 630 810 90 0 348 +328 188 12 30 245 425 90 0 634 +329 136 290 20 212 392 90 0 20 +330 439 268 -10 943 1123 90 117 0 +331 112 467 10 441 621 90 0 401 +332 181 469 20 412 592 90 0 345 +333 358 18 10 436 616 90 0 639 +334 459 10 10 500 680 90 0 414 +335 199 268 -20 236 416 90 52 0 +336 436 237 20 186 366 90 0 152 +337 318 280 -10 262 442 90 638 0 +338 64 99 -30 788 968 90 209 0 +339 394 333 20 439 619 90 0 748 +340 366 93 -10 872 1052 90 665 0 +341 95 391 10 851 1031 90 0 606 +342 391 425 20 786 966 0 0 1023 +343 344 146 10 422 602 90 0 230 +344 198 12 10 517 697 90 0 98 +345 186 472 -20 508 688 90 332 0 +346 390 408 30 395 575 90 0 443 +347 19 43 -10 1141 1321 90 113 0 +348 307 108 -20 722 902 90 327 0 +349 59 457 -30 739 919 90 219 0 +350 49 451 20 285 465 90 0 269 +351 125 39 20 245 425 90 0 475 +352 61 147 40 308 488 90 0 600 +353 317 123 20 435 615 90 0 983 +354 392 426 10 604 784 90 0 552 +355 237 213 -20 792 972 90 923 0 +356 71 333 10 199 379 90 0 315 +357 304 97 20 347 527 90 0 686 +358 196 462 -10 889 1069 90 978 0 +359 224 191 -20 246 426 90 488 0 +360 37 51 10 571 751 90 0 310 +361 491 25 -10 894 1074 90 288 0 +362 270 401 20 152 332 90 0 621 +363 474 461 30 307 487 90 0 45 +364 66 448 10 270 450 90 0 178 +365 337 241 -30 278 458 90 997 0 +366 269 46 -10 674 854 90 262 0 +367 22 41 10 1047 1227 90 0 83 +368 198 271 20 329 509 90 0 530 +369 287 43 10 492 672 90 0 261 +370 446 63 -10 633 813 90 825 0 +371 200 229 30 238 418 90 0 643 +372 48 72 30 650 830 90 0 416 +373 465 142 10 333 513 90 0 133 +374 123 155 -20 1086 1266 90 122 0 +375 16 497 -30 991 1171 90 49 0 +376 220 319 -20 914 1094 90 771 0 +377 484 171 -10 618 798 90 546 0 +378 55 431 -20 633 813 90 91 0 +379 428 24 -10 1032 1212 90 769 0 +380 80 342 10 193 373 90 0 44 +381 16 68 -10 479 659 90 834 0 +382 124 56 20 231 411 90 0 708 +383 95 218 20 810 990 0 0 1034 +384 481 26 30 321 501 90 0 835 +385 145 434 -20 398 578 90 106 0 +386 335 57 30 210 390 0 0 1026 +387 26 490 -10 1226 1406 90 16 0 +388 324 127 30 143 323 90 0 760 +389 109 114 10 760 940 0 0 1025 +390 72 148 -30 207 387 90 977 0 +391 220 392 20 903 1083 0 0 1024 +392 442 243 10 934 1114 90 0 283 +393 69 336 20 383 563 90 0 688 +394 131 226 20 121 301 90 0 298 +395 150 204 -20 577 757 90 424 0 +396 423 217 20 727 907 90 0 469 +397 419 459 -10 721 901 90 512 0 +398 285 163 -30 657 837 90 758 0 +399 203 7 20 981 1161 90 0 156 +400 54 445 -20 473 653 90 570 0 +401 109 463 -10 899 1079 90 331 0 +402 355 180 -20 222 402 90 660 0 +403 13 455 -20 316 496 90 711 0 +404 165 337 20 307 487 90 0 782 +405 314 124 -30 716 896 90 499 0 +406 9 124 20 271 451 90 0 820 +407 3 292 20 341 521 90 0 2 +408 16 462 -20 871 1051 90 866 0 +409 189 464 10 791 971 0 0 1013 +410 288 154 -20 378 558 90 856 0 +411 90 296 20 166 346 90 0 986 +412 138 438 20 772 952 0 0 1003 +413 13 459 -20 592 772 90 729 0 +414 461 8 -10 694 874 90 334 0 +415 96 97 20 217 397 90 0 322 +416 68 99 -30 973 1153 90 372 0 +417 146 205 -30 300 480 90 77 0 +418 117 152 20 807 987 0 0 1030 +419 481 96 -10 462 642 90 242 0 +420 338 260 -20 560 740 90 495 0 +421 285 44 -20 400 580 90 212 0 +422 111 464 10 716 896 90 0 579 +423 468 291 -10 683 863 90 950 0 +424 148 206 20 392 572 90 0 395 +425 184 464 10 224 404 90 0 149 +426 197 11 -10 608 788 90 501 0 +427 396 410 10 764 944 90 0 685 +428 133 53 -40 604 784 90 784 0 +429 132 30 -10 811 991 90 749 0 +430 464 13 -20 790 970 90 718 0 +431 100 394 -20 946 1126 90 96 0 +432 483 22 10 419 599 90 0 727 +433 93 235 -10 891 1071 90 828 0 +434 174 26 -10 981 1161 90 484 0 +435 436 264 20 186 366 90 0 863 +436 24 492 -10 1187 1367 90 489 0 +437 406 94 10 313 493 90 0 514 +438 234 246 -10 470 650 90 663 0 +439 315 287 -10 633 813 90 573 0 +440 408 453 10 528 708 90 0 123 +441 128 225 10 125 305 90 0 282 +442 226 191 20 338 518 90 0 888 +443 391 407 -30 487 667 90 346 0 +444 198 264 -30 705 885 90 654 0 +445 179 7 20 807 987 90 0 517 +446 425 215 -10 634 814 90 952 0 +447 483 27 -20 1232 1412 90 853 0 +448 22 40 -10 956 1136 90 257 0 +449 479 176 20 241 421 90 0 602 +450 476 102 20 741 921 90 0 290 +451 386 405 20 206 386 90 0 605 +452 22 38 -30 864 1044 90 536 0 +453 440 241 -10 1026 1206 90 757 0 +454 182 14 -20 999 1179 90 846 0 +455 266 405 -30 622 802 90 213 0 +456 357 181 20 314 494 90 0 646 +457 395 332 10 531 711 90 0 673 +458 423 290 10 269 449 90 0 141 +459 104 28 -10 642 822 90 50 0 +460 131 56 10 421 601 90 0 852 +461 111 110 -10 480 660 90 678 0 +462 97 93 -20 405 585 90 627 0 +463 90 274 20 344 524 90 0 174 +464 214 394 -10 716 896 90 592 0 +465 6 114 -10 742 922 90 927 0 +466 375 191 30 412 592 90 0 276 +467 356 21 20 343 523 90 0 691 +468 466 165 30 686 866 90 0 847 +469 415 223 -20 1190 1370 90 396 0 +470 397 20 -20 365 545 90 182 0 +471 241 403 -30 625 805 90 597 0 +472 69 334 30 291 471 90 0 967 +473 152 210 20 105 285 90 0 90 +474 67 335 20 567 747 90 0 946 +475 126 30 -20 437 617 90 351 0 +476 390 423 10 223 403 90 0 494 +477 285 162 -20 566 746 90 5 0 +478 285 158 -20 283 463 90 774 0 +479 406 96 20 221 401 90 0 719 +480 459 374 -20 793 973 90 960 0 +481 67 109 -10 323 503 90 616 0 +482 468 475 10 313 493 90 0 43 +483 438 31 10 290 470 90 0 195 +484 168 24 10 703 883 90 0 434 +485 267 394 -10 904 1084 90 252 0 +486 406 450 20 344 524 90 0 743 +487 460 288 10 213 393 90 0 572 +488 224 203 20 53 233 90 0 359 +489 21 487 10 515 695 90 0 436 +490 21 488 -30 606 786 90 79 0 +491 87 217 10 531 711 90 0 821 +492 67 452 30 274 454 90 0 237 +493 119 223 -30 789 969 90 781 0 +494 398 428 -10 507 687 90 476 0 +495 344 262 20 463 643 90 0 420 +496 390 301 10 330 510 90 0 515 +497 167 27 30 421 601 0 0 1040 +498 236 247 20 377 557 90 0 22 +499 313 119 30 621 801 90 0 405 +500 13 51 10 1245 1425 0 0 1002 +501 200 13 10 335 515 90 0 426 +502 0 120 30 372 552 90 0 674 +503 202 4 -20 887 1067 90 799 0 +504 343 144 10 236 416 90 0 766 +505 94 383 -30 571 751 90 958 0 +506 250 411 30 433 613 90 0 260 +507 464 134 -10 987 1167 90 843 0 +508 443 237 20 193 373 90 0 860 +509 4 114 -20 650 830 90 222 0 +510 169 336 -10 775 955 90 256 0 +511 200 178 -20 179 359 90 544 0 +512 412 453 10 622 802 90 0 397 +513 121 151 -10 992 1172 90 907 0 +514 403 93 -10 1066 1246 90 437 0 +515 399 301 -10 519 699 90 496 0 +516 97 387 -30 756 936 90 142 0 +517 176 8 -20 901 1081 90 445 0 +518 62 326 -20 851 1031 90 285 0 +519 151 207 -20 670 850 90 109 0 +520 299 98 -10 252 432 90 32 0 +521 334 240 30 464 644 0 0 1046 +522 92 270 -20 902 1082 90 840 0 +523 444 269 20 479 659 90 0 248 +524 132 223 -30 783 963 90 23 0 +525 428 25 -10 1123 1303 90 607 0 +526 413 421 10 708 888 90 0 568 +527 382 498 10 554 734 90 0 747 +528 391 429 20 410 590 90 0 555 +529 398 97 10 214 394 90 0 989 +530 192 265 -20 609 789 90 368 0 +531 438 26 -10 385 565 90 54 0 +532 44 79 10 267 447 90 0 709 +533 137 290 10 121 301 90 0 905 +534 446 319 -10 300 480 90 611 0 +535 175 487 20 248 428 90 0 303 +536 26 45 30 303 483 90 0 452 +537 147 435 -30 490 670 90 158 0 +538 111 459 20 1084 1264 0 0 1048 +539 472 132 10 706 886 90 0 891 +540 349 158 -10 982 1162 90 740 0 +541 86 268 -20 622 802 90 813 0 +542 415 216 -10 261 441 90 167 0 +543 121 218 -20 134 314 90 902 0 +544 210 185 20 76 256 90 0 511 +545 98 215 -30 158 338 90 66 0 +546 484 174 10 430 610 90 0 377 +547 328 458 -40 885 1065 90 118 0 +548 313 126 10 808 988 0 0 1037 +549 390 415 -20 976 1156 90 788 0 +550 459 17 20 976 1156 90 0 791 +551 481 124 -20 448 628 90 982 0 +552 386 414 -10 1046 1226 90 354 0 +553 116 466 20 256 436 90 0 103 +554 468 295 -20 871 1051 90 899 0 +555 391 426 -20 695 875 90 528 0 +556 408 279 -10 625 805 90 649 0 +557 15 68 -10 388 568 90 95 0 +558 392 424 -10 877 1057 90 849 0 +559 88 95 20 595 775 90 0 773 +560 116 151 -10 715 895 90 47 0 +561 240 250 -10 282 462 90 36 0 +562 123 159 20 156 336 90 0 131 +563 89 290 20 173 353 90 0 818 +564 39 50 30 386 566 90 0 320 +565 359 179 20 407 587 90 0 263 +566 338 257 20 653 833 0 0 1047 +567 92 236 20 983 1163 90 0 161 +568 413 417 -10 1081 1261 90 526 0 +569 91 101 -10 783 963 90 74 0 +570 55 449 20 278 458 90 0 400 +571 57 425 20 260 440 90 0 948 +572 465 287 -10 497 677 90 487 0 +573 320 280 10 170 350 90 0 439 +574 322 468 20 510 690 90 0 202 +575 483 458 10 592 772 90 0 180 +576 312 267 -20 812 992 90 738 0 +577 139 291 10 118 298 90 0 138 +578 388 408 10 303 483 90 0 206 +579 110 459 -10 993 1173 90 422 0 +580 459 372 20 609 789 90 0 304 +581 204 269 30 49 229 90 0 699 +582 407 98 10 218 398 0 0 1027 +583 335 256 -20 836 1016 90 734 0 +584 471 484 -20 505 685 90 990 0 +585 339 244 30 185 365 90 0 996 +586 89 272 10 437 617 90 0 906 +587 488 96 -10 851 1031 90 831 0 +588 316 286 -30 542 722 90 613 0 +589 235 50 -20 765 945 90 197 0 +590 316 258 20 253 433 90 0 702 +591 425 288 10 546 726 90 0 220 +592 213 397 10 622 802 90 0 464 +593 113 156 10 529 709 90 0 80 +594 199 9 -20 792 972 90 764 0 +595 463 167 10 593 773 90 0 916 +596 129 27 -30 623 803 90 235 0 +597 248 404 30 154 334 90 0 471 +598 405 276 -20 719 899 90 10 0 +599 400 288 30 154 334 90 0 273 +600 61 156 -40 407 587 90 352 0 +601 393 20 -20 1116 1296 90 177 0 +602 484 177 -20 337 517 90 449 0 +603 108 116 -20 852 1032 90 698 0 +604 112 217 20 323 503 90 0 742 +605 389 404 -20 209 389 90 451 0 +606 102 391 -10 1040 1220 90 341 0 +607 434 26 10 479 659 90 0 525 +608 488 26 -20 1078 1258 90 858 0 +609 477 120 -10 907 1087 90 707 0 +610 126 220 -20 595 775 90 40 0 +611 439 310 10 198 378 90 0 534 +612 212 319 -20 170 350 90 130 0 +613 320 283 30 356 536 90 0 588 +614 17 459 -20 1147 1327 90 812 0 +615 236 213 20 39 219 90 0 667 +616 68 108 10 230 410 90 0 481 +617 390 294 -20 802 982 90 687 0 +618 275 42 -10 483 663 90 633 0 +619 423 214 -20 542 722 90 293 0 +620 460 367 20 331 511 0 0 1019 +621 272 402 -20 245 425 90 362 0 +622 478 102 -10 649 829 90 179 0 +623 400 260 40 150 330 90 0 776 +624 181 6 20 625 805 90 0 201 +625 470 475 30 315 495 90 0 60 +626 245 408 -10 529 709 90 772 0 +627 93 96 20 310 490 90 0 462 +628 218 318 -10 822 1002 90 971 0 +629 441 265 -10 282 462 90 250 0 +630 21 64 -10 757 937 90 215 0 +631 356 23 -20 251 431 90 76 0 +632 267 44 20 581 761 90 0 192 +633 277 50 10 203 383 90 0 618 +634 182 4 -30 533 713 90 328 0 +635 26 36 -20 584 764 90 121 0 +636 384 491 -10 833 1013 90 793 0 +637 418 290 -20 1107 1287 90 55 0 +638 321 277 10 75 255 90 0 337 +639 358 16 -10 528 708 90 333 0 +640 389 334 20 254 434 90 0 861 +641 48 78 -10 926 1106 90 763 0 +642 24 68 -20 1219 1399 90 750 0 +643 206 225 -30 335 515 90 371 0 +644 290 141 -10 587 767 90 136 0 +645 439 15 20 588 768 90 0 889 +646 359 182 -20 694 874 90 456 0 +647 413 287 -10 1293 1473 90 239 0 +648 230 49 20 201 381 90 0 949 +649 407 280 10 534 714 90 0 556 +650 459 295 -30 1151 1331 90 881 0 +651 468 199 20 609 789 90 0 733 +652 101 384 30 200 380 90 0 823 +653 170 26 -20 796 976 90 935 0 +654 197 270 30 421 601 90 0 444 +655 415 289 20 169 349 90 0 976 +656 203 390 40 244 424 90 0 761 +657 443 272 10 755 935 90 0 826 +658 210 391 -20 147 327 90 815 0 +659 363 22 20 904 1084 90 0 110 +660 352 176 20 126 306 90 0 402 +661 212 223 -30 705 885 90 956 0 +662 8 120 -20 1110 1290 90 871 0 +663 244 250 10 97 277 90 0 438 +664 18 484 10 330 510 90 0 731 +665 379 82 10 765 945 90 0 340 +666 84 346 -10 1036 1216 90 18 0 +667 233 207 -20 46 226 90 615 0 +668 344 62 -20 1151 1331 90 259 0 +669 20 489 10 788 968 90 0 701 +670 361 181 20 602 782 90 0 207 +671 174 494 -20 438 618 90 226 0 +672 49 76 -20 834 1014 90 894 0 +673 390 325 -10 816 996 90 457 0 +674 7 118 -30 927 1107 90 502 0 +675 107 26 -10 458 638 90 190 0 +676 312 270 -30 905 1085 90 166 0 +677 399 102 20 592 772 90 0 917 +678 109 108 10 387 567 90 0 461 +679 115 218 10 230 410 90 0 880 +680 88 287 -30 828 1008 90 27 0 +681 54 424 10 264 444 0 0 1010 +682 125 32 -10 344 524 90 127 0 +683 199 12 -10 426 606 90 879 0 +684 457 374 -10 885 1065 90 810 0 +685 391 413 -10 951 1131 90 427 0 +686 304 102 -20 442 622 90 357 0 +687 391 293 20 711 891 90 0 617 +688 66 336 -20 658 838 90 393 0 +689 132 291 -20 677 857 90 945 0 +690 18 462 -20 963 1143 90 887 0 +691 347 62 -20 1058 1238 90 467 0 +692 466 142 10 424 604 90 0 913 +693 389 17 -20 931 1111 90 716 0 +694 342 254 10 183 363 90 0 951 +695 92 223 -10 905 1085 90 8 0 +696 404 83 30 783 963 90 0 205 +697 290 46 -10 774 954 90 324 0 +698 95 92 20 498 678 90 0 603 +699 200 265 -30 797 977 90 581 0 +700 435 16 -20 772 952 90 14 0 +701 25 499 -10 1090 1270 90 669 0 +702 319 260 -20 438 618 90 590 0 +703 116 225 20 696 876 0 0 1045 +704 402 284 30 250 430 90 0 717 +705 108 105 20 204 384 90 0 159 +706 386 13 10 742 922 90 0 762 +707 472 129 10 258 438 90 0 609 +708 132 57 -20 329 509 90 382 0 +709 43 71 -10 463 643 90 532 0 +710 493 91 30 480 660 90 0 961 +711 12 451 20 311 491 90 0 403 +712 201 188 10 464 644 90 0 732 +713 60 428 20 1008 1188 90 0 185 +714 243 248 -20 189 369 90 183 0 +715 230 197 -10 527 707 90 800 0 +716 389 11 20 648 828 90 0 693 +717 401 281 -30 906 1086 90 704 0 +718 459 14 20 315 495 90 0 430 +719 411 95 -20 408 588 90 479 0 +720 0 297 -10 618 798 90 102 0 +721 476 196 30 420 600 90 0 253 +722 458 16 20 313 493 90 0 100 +723 92 230 -10 434 614 90 246 0 +724 432 24 -40 938 1118 90 139 0 +725 215 317 10 77 257 90 0 13 +726 371 192 -20 135 315 90 963 0 +727 481 20 -10 512 692 90 432 0 +728 152 207 20 761 941 90 0 65 +729 14 459 20 501 681 90 0 413 +730 361 17 -10 715 895 90 229 0 +731 8 497 -10 893 1073 90 664 0 +732 206 186 -10 833 1013 90 712 0 +733 421 218 -20 819 999 90 651 0 +734 402 264 20 155 335 90 0 583 +735 388 325 -30 908 1088 90 325 0 +736 35 304 30 222 402 90 0 34 +737 321 263 20 622 802 90 0 873 +738 444 313 20 397 577 90 0 576 +739 188 462 40 699 879 90 0 281 +740 400 103 10 501 681 90 0 540 +741 418 221 -20 1096 1276 90 309 0 +742 112 219 -20 415 595 90 604 0 +743 408 452 -20 437 617 90 486 0 +744 30 301 10 603 783 90 0 811 +745 205 228 10 51 231 90 0 143 +746 407 88 -10 969 1149 90 292 0 +747 380 489 -10 1024 1204 90 527 0 +748 395 331 -20 622 802 90 339 0 +749 133 26 10 717 897 90 0 429 +750 21 68 20 1126 1306 90 0 642 +751 313 282 20 728 908 0 0 1049 +752 53 440 -10 568 748 90 882 0 +753 458 130 -20 1085 1265 90 877 0 +754 437 15 30 680 860 0 0 1029 +755 400 286 10 157 337 90 0 99 +756 346 144 -40 605 785 90 294 0 +757 440 244 10 751 931 90 0 453 +758 280 162 30 94 274 90 0 398 +759 488 173 -20 524 704 90 299 0 +760 326 118 -30 153 333 90 388 0 +761 207 400 -40 436 616 90 656 0 +762 391 18 -10 1023 1203 90 706 0 +763 37 55 10 665 845 90 0 641 +764 204 15 20 239 419 90 0 594 +765 173 28 -20 1073 1253 90 975 0 +766 343 148 -10 330 510 90 504 0 +767 231 43 10 390 570 90 0 214 +768 445 273 -10 663 843 90 829 0 +769 432 27 10 754 934 90 0 379 +770 439 305 -30 677 857 90 807 0 +771 208 396 20 341 521 90 0 376 +772 249 407 10 339 519 90 0 626 +773 107 112 -20 667 847 90 559 0 +774 279 159 20 187 367 90 0 478 +775 376 494 -20 275 455 90 28 0 +776 403 262 -40 430 610 90 623 0 +777 41 47 -20 292 472 90 301 0 +778 96 213 30 250 430 90 0 150 +779 461 167 -30 411 591 90 194 0 +780 391 99 20 206 386 90 0 921 +781 116 221 30 509 689 90 0 493 +782 165 343 -20 495 675 90 404 0 +783 388 334 -20 163 343 90 854 0 +784 130 57 40 237 417 90 0 428 +785 422 409 10 234 414 0 0 1020 +786 66 156 -30 595 775 90 870 0 +787 485 86 20 291 471 90 0 318 +788 389 428 20 318 498 90 0 549 +789 117 467 10 254 434 90 0 972 +790 475 477 -20 970 1150 90 809 0 +791 429 27 -20 1215 1395 90 550 0 +792 339 60 20 216 396 90 0 909 +793 381 494 10 738 918 90 0 636 +794 218 321 -20 638 818 90 855 0 +795 64 101 20 605 785 90 0 234 +796 343 254 20 274 454 90 0 21 +797 478 464 10 313 493 90 0 19 +798 423 286 20 363 543 90 0 883 +799 198 9 20 701 881 90 0 503 +800 225 196 10 61 241 90 0 715 +801 374 190 20 228 408 90 0 987 +802 462 14 -20 882 1062 90 326 0 +803 347 54 10 780 960 90 0 165 +804 231 195 -10 434 614 90 211 0 +805 72 96 -10 1159 1339 90 313 0 +806 489 87 -10 385 565 90 957 0 +807 443 313 30 488 668 90 0 770 +808 233 204 20 139 319 90 0 926 +809 477 483 20 691 871 90 0 790 +810 459 368 10 240 420 90 0 684 +811 95 277 -10 999 1179 90 744 0 +812 16 460 20 1056 1236 90 0 614 +813 100 266 20 151 331 90 0 541 +814 288 53 40 871 1051 0 0 1028 +815 211 386 20 141 321 90 0 658 +816 144 439 -10 676 856 90 124 0 +817 224 314 -10 1010 1190 90 168 0 +818 79 291 -20 454 634 90 563 0 +819 95 235 10 155 335 90 0 920 +820 7 123 -20 274 454 90 406 0 +821 91 217 -10 625 805 90 491 0 +822 105 27 10 550 730 90 0 903 +823 101 385 -30 201 381 90 652 0 +824 238 210 30 699 879 0 0 1051 +825 439 67 10 264 444 90 0 370 +826 435 267 -10 1128 1308 90 657 0 +827 443 64 30 727 907 90 0 832 +828 92 234 10 800 980 90 0 433 +829 450 265 10 381 561 90 0 768 +830 102 27 -30 734 914 90 842 0 +831 492 94 10 665 845 90 0 587 +832 440 63 -30 820 1000 90 827 0 +833 453 367 -10 983 1163 90 841 0 +834 15 69 10 297 477 90 0 381 +835 489 17 -30 705 885 90 384 0 +836 335 255 20 85 265 90 0 69 +837 419 418 -30 334 514 90 267 0 +838 292 41 -40 679 859 90 859 0 +839 489 27 10 986 1166 90 0 994 +840 96 270 20 247 427 90 0 522 +841 461 369 10 516 696 90 0 833 +842 105 22 30 272 452 90 0 830 +843 479 121 10 633 813 90 0 507 +844 207 223 -30 520 700 90 218 0 +845 17 458 -20 1238 1418 90 970 0 +846 186 7 20 438 618 90 0 454 +847 465 168 -30 779 959 90 468 0 +848 416 288 -10 1200 1380 90 51 0 +849 388 418 10 217 397 90 0 558 +850 92 233 -20 709 889 90 999 0 +851 179 492 10 625 805 90 0 134 +852 132 55 -10 512 692 90 460 0 +853 485 24 20 326 506 90 0 447 +854 388 331 20 160 340 90 0 783 +855 217 323 20 358 538 90 0 794 +856 281 164 20 91 271 90 0 410 +857 169 340 10 681 861 0 0 1042 +858 491 20 20 799 979 90 0 608 +859 279 42 40 210 390 90 0 838 +860 439 243 -20 1119 1299 90 508 0 +861 391 334 -20 346 526 90 640 0 +862 96 244 -20 1266 1446 90 71 0 +863 441 273 -20 847 1027 90 435 0 +864 477 478 20 877 1057 90 0 280 +865 56 434 20 820 1000 0 0 1005 +866 12 463 20 686 866 90 0 408 +867 458 164 20 316 496 90 0 908 +868 446 65 20 451 631 90 0 154 +869 71 156 -20 784 964 90 274 0 +870 65 153 30 502 682 90 0 786 +871 8 118 20 1018 1198 90 0 662 +872 102 29 30 826 1006 0 0 1015 +873 315 265 -20 718 898 90 737 0 +874 343 62 -20 1242 1422 90 42 0 +875 384 16 -10 836 1016 90 108 0 +876 67 105 10 510 690 90 0 878 +877 478 118 20 999 1179 90 0 753 +878 73 101 -10 1254 1434 90 876 0 +879 200 14 10 244 424 90 0 683 +880 114 225 -10 604 784 90 679 0 +881 460 293 30 1059 1239 90 0 650 +882 51 447 10 379 559 90 0 752 +883 418 295 -20 1012 1192 90 798 0 +884 282 139 20 117 297 0 0 1044 +885 477 122 -20 815 995 90 111 0 +886 91 266 -10 718 898 90 116 0 +887 16 463 20 780 960 90 0 690 +888 228 199 -20 619 799 90 442 0 +889 435 20 -20 866 1046 90 645 0 +890 467 195 10 224 404 90 0 11 +891 469 132 -10 799 979 90 539 0 +892 465 136 30 895 1075 0 0 1016 +893 246 255 -20 758 938 90 311 0 +894 49 75 20 743 923 90 0 672 +895 66 98 -10 880 1060 90 114 0 +896 166 32 10 234 414 90 0 244 +897 326 466 -30 695 875 90 210 0 +898 202 186 -20 556 736 90 308 0 +899 467 285 20 314 494 90 0 554 +900 290 136 20 492 672 90 0 25 +901 341 58 10 309 489 90 0 319 +902 121 219 20 132 312 90 0 543 +903 107 35 -10 924 1104 90 822 0 +904 216 319 10 264 444 90 0 78 +905 134 288 -10 861 1041 90 533 0 +906 89 270 -10 529 709 90 586 0 +907 136 52 10 698 878 90 0 513 +908 462 167 -20 502 682 90 867 0 +909 340 54 -20 403 583 90 792 0 +910 80 286 -10 549 729 90 938 0 +911 38 301 -10 701 881 90 61 0 +912 25 307 -20 414 594 90 922 0 +913 470 139 -10 609 789 90 692 0 +914 270 400 10 151 331 90 0 86 +915 204 187 -20 740 920 90 979 0 +916 460 171 -10 875 1055 90 595 0 +917 399 106 -20 867 1047 90 677 0 +918 197 267 -10 514 694 90 933 0 +919 77 350 -10 938 1118 90 105 0 +920 91 231 -10 525 705 90 819 0 +921 398 103 -20 683 863 90 780 0 +922 35 303 20 221 401 90 0 912 +923 231 204 20 715 895 90 0 355 +924 311 266 10 63 243 90 0 155 +925 416 420 20 615 795 90 0 223 +926 231 203 -20 232 412 90 808 0 +927 4 116 10 558 738 90 0 465 +928 417 217 30 354 534 90 0 15 +929 268 52 -30 951 1131 90 12 0 +930 345 144 30 514 694 90 0 169 +931 368 85 30 202 382 90 0 137 +932 441 65 10 356 536 90 0 270 +933 201 270 10 53 233 90 0 918 +934 0 293 30 524 704 90 0 126 +935 167 24 20 612 792 90 0 653 +936 186 464 -20 606 786 90 208 0 +937 7 292 10 246 426 0 0 1014 +938 80 290 10 362 542 90 0 910 +939 405 455 40 826 1006 0 0 1009 +940 439 312 30 200 380 90 0 314 +941 300 108 10 150 330 90 0 243 +942 478 121 -30 724 904 90 94 0 +943 92 232 10 342 522 90 0 227 +944 111 463 -10 807 987 90 974 0 +945 132 294 20 398 578 90 0 689 +946 134 285 -20 1046 1226 90 474 0 +947 316 284 -30 450 630 90 72 0 +948 56 428 -20 358 538 90 571 0 +949 232 47 -20 205 385 90 648 0 +950 466 291 10 591 771 90 0 423 +951 341 257 -10 367 547 90 694 0 +952 420 213 10 449 629 90 0 446 +953 116 152 -20 624 804 90 316 0 +954 163 337 -40 215 395 90 981 0 +955 440 7 -20 399 579 90 184 0 +956 208 222 30 611 791 90 0 661 +957 485 95 10 281 461 90 0 806 +958 97 385 30 477 657 90 0 505 +959 462 367 20 423 603 90 0 56 +960 455 365 20 235 415 90 0 480 +961 492 95 -30 756 936 90 710 0 +962 405 450 -20 253 433 90 115 0 +963 371 193 20 133 313 90 0 726 +964 234 202 10 325 505 90 0 277 +965 404 103 -20 407 587 90 300 0 +966 24 41 10 489 669 90 0 247 +967 67 334 -30 476 656 90 472 0 +968 207 227 10 48 228 0 0 1050 +969 277 403 10 340 520 90 0 251 +970 15 457 20 408 588 90 0 845 +971 217 319 10 730 910 90 0 628 +972 111 467 -10 532 712 90 789 0 +973 378 493 30 367 547 90 0 188 +974 112 465 10 624 804 90 0 944 +975 173 25 20 889 1069 90 0 765 +976 421 292 -20 176 356 90 655 0 +977 74 146 30 204 384 90 0 390 +978 178 491 10 533 713 90 0 358 +979 204 185 20 648 828 90 0 915 +980 319 470 10 323 503 0 0 1021 +981 163 331 40 118 298 90 0 954 +982 470 125 20 253 433 90 0 551 +983 315 121 -20 528 708 90 353 0 +984 166 34 20 231 411 90 0 48 +985 284 140 40 115 295 90 0 1000 +986 85 288 -20 267 447 90 411 0 +987 376 190 -20 320 500 90 801 0 +988 238 203 10 419 599 90 0 286 +989 399 104 -10 775 955 90 529 0 +990 472 481 20 412 592 90 0 584 +991 46 74 -10 557 737 90 33 0 +992 401 255 -10 621 801 90 162 0 +993 475 480 30 784 964 0 0 1001 +994 485 27 -10 1171 1351 90 839 0 +995 476 174 -20 809 989 90 296 0 +996 330 242 -30 559 739 90 585 0 +997 332 249 30 82 262 90 0 365 +998 375 80 -20 484 664 90 151 0 +999 94 235 20 157 337 90 0 850 +1000 287 144 -40 771 951 90 985 0 +1001 475 480 -30 784 964 90 993 0 +1002 13 51 -10 1245 1425 90 500 0 +1003 138 438 -20 772 952 90 412 0 +1004 17 65 -20 572 752 90 271 0 +1005 56 434 -20 820 1000 90 865 0 +1006 489 101 -20 946 1126 90 58 0 +1007 70 100 -10 1065 1245 90 284 0 +1008 435 68 -10 259 439 90 35 0 +1009 405 455 -40 826 1006 90 939 0 +1010 54 424 -10 264 444 90 681 0 +1011 366 20 -10 811 991 90 88 0 +1012 317 261 -20 346 526 90 312 0 +1013 189 464 -10 791 971 90 409 0 +1014 7 292 -10 246 426 90 937 0 +1015 102 29 -30 826 1006 90 872 0 +1016 465 136 -30 895 1075 90 892 0 +1017 202 9 -10 1163 1343 90 82 0 +1018 377 76 -20 579 759 90 163 0 +1019 460 367 -20 331 511 90 620 0 +1020 422 409 -10 234 414 90 785 0 +1021 319 470 -10 323 503 90 980 0 +1022 457 163 -20 225 405 90 84 0 +1023 391 425 -20 786 966 90 342 0 +1024 220 392 -20 903 1083 90 391 0 +1025 109 114 -10 760 940 90 389 0 +1026 335 57 -30 210 390 90 386 0 +1027 407 98 -10 218 398 90 582 0 +1028 288 53 -40 871 1051 90 814 0 +1029 437 15 -30 680 860 90 754 0 +1030 117 152 -20 807 987 90 418 0 +1031 76 345 -30 473 653 90 9 0 +1032 417 218 -10 1003 1183 90 73 0 +1033 249 258 -30 852 1032 90 266 0 +1034 95 218 -20 810 990 90 383 0 +1035 87 96 -30 687 867 90 172 0 +1036 8 116 -20 835 1015 90 196 0 +1037 313 126 -10 808 988 90 548 0 +1038 154 207 -20 944 1124 90 186 0 +1039 379 196 -20 599 779 90 31 0 +1040 167 27 -30 421 601 90 497 0 +1041 124 219 -20 503 683 90 119 0 +1042 169 340 -10 681 861 90 857 0 +1043 128 291 -10 583 763 90 46 0 +1044 282 139 -20 117 297 90 884 0 +1045 116 225 -20 696 876 90 703 0 +1046 334 240 -30 464 644 90 521 0 +1047 338 257 -20 653 833 90 566 0 +1048 111 459 -20 1084 1264 90 538 0 +1049 313 282 -20 728 908 90 751 0 +1050 207 227 -10 48 228 90 968 0 +1051 238 210 -30 699 879 90 824 0 +1052 25 65 -10 941 1121 90 236 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1108.txt b/jsprit-instances/instances/lilim/1000/LC1108.txt new file mode 100644 index 00000000..54a8ae3a --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1108.txt @@ -0,0 +1,1054 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 -10 144 390 90 638 0 +2 5 297 -10 857 1116 90 720 0 +3 355 177 20 141 298 90 0 587 +4 78 346 -10 261 497 90 380 0 +5 286 159 20 434 693 90 0 286 +6 322 465 10 226 417 90 0 268 +7 393 408 -30 534 805 90 346 0 +8 89 216 10 399 658 90 0 821 +9 76 345 30 431 694 90 0 905 +10 410 285 20 400 655 90 0 649 +11 472 189 30 290 534 90 0 651 +12 270 49 30 837 1057 90 0 929 +13 219 325 10 434 648 90 0 78 +14 437 12 20 463 706 90 0 645 +15 418 218 20 898 1106 0 0 1020 +16 20 488 -10 665 909 90 664 0 +17 77 347 20 393 549 90 0 189 +18 73 346 10 642 857 90 0 27 +19 480 455 -20 980 1321 90 295 0 +20 129 292 -10 450 712 90 577 0 +21 337 257 -20 698 970 90 598 0 +22 237 254 -20 545 771 90 498 0 +23 131 220 -20 653 907 90 394 0 +24 417 417 10 888 1086 90 0 568 +25 287 143 -20 646 894 90 900 0 +26 379 80 20 655 871 90 0 340 +27 87 285 -10 609 864 90 18 0 +28 374 489 20 269 545 90 0 188 +29 440 247 -10 593 904 90 157 0 +30 281 137 10 255 531 90 0 136 +31 379 196 20 590 789 90 0 276 +32 297 102 10 155 362 90 0 357 +33 39 76 10 273 533 90 0 209 +34 35 306 20 309 500 90 0 946 +35 435 68 10 259 461 90 0 370 +36 245 251 10 5 246 90 0 463 +37 409 88 -20 575 796 90 204 0 +38 273 55 20 196 377 90 0 192 +39 163 340 -10 417 565 90 954 0 +40 129 223 20 191 423 90 0 610 +41 371 200 -20 763 996 90 801 0 +42 357 26 -20 1065 1299 90 875 0 +43 470 473 -30 1146 1345 90 993 0 +44 77 344 10 196 385 90 0 225 +45 478 461 10 347 644 90 0 302 +46 128 291 -20 549 797 90 329 0 +47 111 113 -20 531 794 90 511 0 +48 164 21 -20 479 737 90 984 0 +49 21 485 30 393 633 90 0 490 +50 108 26 10 340 575 90 0 903 +51 424 286 10 412 676 90 0 220 +52 200 270 20 139 328 90 0 59 +53 7 300 30 959 1201 90 0 62 +54 433 31 10 285 554 90 0 531 +55 420 295 20 867 1153 90 0 883 +56 451 367 -10 1047 1283 90 684 0 +57 118 157 -10 303 565 90 968 0 +58 489 101 20 917 1154 90 0 290 +59 200 261 -20 876 1087 90 52 0 +60 476 483 10 584 796 90 0 809 +61 30 302 10 450 753 90 0 744 +62 8 300 -30 1056 1286 90 53 0 +63 275 45 20 359 600 90 0 366 +64 238 46 40 620 900 90 0 589 +65 152 206 -20 824 1059 90 473 0 +66 99 218 30 154 366 90 0 491 +67 393 410 -10 813 1082 90 427 0 +68 480 460 -10 482 693 90 785 0 +69 337 256 20 87 315 90 0 694 +70 389 300 10 225 432 90 0 496 +71 90 237 -10 1122 1390 90 541 0 +72 321 280 30 77 362 90 0 337 +73 417 218 10 938 1249 90 0 741 +74 64 108 -20 386 627 90 481 0 +75 57 432 -20 889 1116 90 350 0 +76 356 24 20 249 546 90 0 639 +77 143 207 30 173 420 90 0 90 +78 221 325 -10 529 738 90 13 0 +79 22 483 30 325 540 90 0 387 +80 24 65 -10 810 1070 90 557 0 +81 141 431 -20 263 522 90 106 0 +82 202 9 -20 1145 1362 90 399 0 +83 20 48 -20 1098 1428 90 121 0 +84 457 163 20 224 445 90 0 908 +85 470 290 -10 738 993 90 289 0 +86 268 400 20 780 1016 90 0 485 +87 337 251 10 87 299 90 0 848 +88 366 20 -20 760 1042 90 631 0 +89 72 344 20 505 809 90 0 518 +90 149 203 -30 460 690 90 77 0 +91 55 428 20 398 681 90 0 96 +92 189 7 -30 250 489 90 328 0 +93 397 18 10 449 645 90 0 203 +94 481 122 30 486 774 90 0 843 +95 20 73 10 290 537 90 0 215 +96 54 430 -20 512 750 90 91 0 +97 74 350 -10 817 1052 90 317 0 +98 202 8 -10 1036 1288 90 503 0 +99 406 285 20 346 522 0 0 1048 +100 460 2 -20 568 807 90 718 0 +101 441 244 10 845 1019 90 0 826 +102 1 293 -10 384 662 90 937 0 +103 115 465 -10 305 569 90 789 0 +104 422 420 20 416 619 90 0 132 +105 75 347 10 696 987 90 0 919 +106 141 428 20 208 407 90 0 81 +107 404 264 -40 340 517 90 623 0 +108 398 23 10 270 485 90 0 693 +109 148 211 20 131 268 90 0 728 +110 362 22 -20 965 1206 90 716 0 +111 479 127 20 331 558 90 0 551 +112 443 246 -20 434 695 90 508 0 +113 22 37 -10 748 978 90 257 0 +114 65 100 10 679 895 90 0 895 +115 404 447 20 250 444 90 0 552 +116 102 264 10 148 425 90 0 840 +117 444 271 10 541 780 90 0 637 +118 325 466 -30 563 824 90 210 0 +119 124 219 -20 476 710 90 183 0 +120 335 243 20 326 596 90 0 477 +121 26 42 20 384 589 90 0 83 +122 113 106 20 198 424 90 0 461 +123 399 450 -10 908 1120 90 512 0 +124 146 439 -30 531 818 90 158 0 +125 162 336 20 123 366 0 0 1046 +126 2 295 -10 676 925 90 181 0 +127 122 35 -20 250 471 90 382 0 +128 346 60 -10 941 1171 90 901 0 +129 93 213 -20 319 548 90 545 0 +130 218 316 20 73 315 90 0 904 +131 116 156 -10 434 619 90 291 0 +132 419 422 -20 446 777 90 104 0 +133 467 141 -40 506 705 90 175 0 +134 187 491 -10 696 929 90 671 0 +135 433 25 20 801 1072 90 0 232 +136 286 137 -10 353 622 90 30 0 +137 370 82 -20 372 586 90 151 0 +138 132 290 -20 741 975 90 945 0 +139 435 11 40 302 597 90 0 791 +140 206 261 -30 932 1223 90 581 0 +141 428 291 10 613 849 90 0 239 +142 95 384 -30 634 871 90 958 0 +143 205 223 -20 359 677 90 615 0 +144 463 140 10 239 480 0 0 1017 +145 343 47 20 639 905 90 0 165 +146 435 62 -10 1086 1289 90 932 0 +147 387 488 -10 884 1149 90 527 0 +148 121 157 10 159 369 90 0 616 +149 182 463 -10 275 537 90 425 0 +150 92 216 -10 726 886 90 227 0 +151 370 83 20 280 497 90 0 137 +152 444 242 -20 343 599 90 336 0 +153 90 285 -10 903 1119 90 174 0 +154 446 64 -10 517 748 90 825 0 +155 312 264 20 63 326 90 0 755 +156 208 11 20 1226 1473 0 0 1035 +157 442 247 10 517 795 90 0 29 +158 140 431 30 211 424 90 0 124 +159 118 153 -20 884 1092 90 418 0 +160 134 428 -20 845 1081 90 385 0 +161 91 235 10 1025 1303 90 0 862 +162 406 257 -20 518 715 90 734 0 +163 377 76 20 561 776 90 0 665 +164 474 96 30 271 496 90 0 242 +165 346 57 -20 808 1119 90 145 0 +166 393 301 -20 401 625 90 231 0 +167 412 214 10 165 454 90 0 542 +168 210 398 -20 502 737 90 761 0 +169 346 150 -10 911 1036 90 504 0 +170 62 453 10 449 651 90 0 216 +171 437 61 -30 954 1235 90 270 0 +172 87 96 -20 637 917 90 627 0 +173 367 83 30 203 499 0 0 1019 +174 91 268 10 778 1021 90 0 153 +175 459 145 40 233 479 90 0 133 +176 63 444 -10 1014 1216 90 364 0 +177 433 27 20 556 766 90 0 724 +178 60 454 10 829 1016 90 0 237 +179 478 99 10 540 753 90 0 753 +180 485 454 10 720 1012 90 0 187 +181 6 292 10 250 425 90 0 126 +182 398 20 20 273 532 90 0 470 +183 248 251 20 2 279 90 0 119 +184 433 15 20 297 569 90 0 754 +185 64 426 -20 1058 1326 90 269 0 +186 154 207 -20 920 1149 90 395 0 +187 481 456 -10 924 1194 90 180 0 +188 380 498 -20 418 687 90 28 0 +189 88 286 -20 740 914 90 17 0 +190 111 23 10 266 439 90 0 459 +191 199 187 -30 338 585 90 218 0 +192 269 48 -20 761 951 90 38 0 +193 367 178 20 453 737 90 0 646 +194 452 163 30 219 486 90 0 692 +195 431 28 20 617 890 90 0 762 +196 8 116 -10 782 1069 90 465 0 +197 233 47 20 292 479 90 0 214 +198 237 43 -10 565 768 90 949 0 +199 320 262 -20 559 681 90 590 0 +200 188 4 20 314 555 90 0 634 +201 180 6 10 691 921 90 0 454 +202 328 466 30 720 1033 0 0 1028 +203 393 12 -10 527 762 90 93 0 +204 409 90 20 481 706 90 0 37 +205 406 87 -20 871 1064 90 300 0 +206 394 407 -20 687 834 90 451 0 +207 358 183 -20 867 1070 90 456 0 +208 186 461 -30 220 467 90 658 0 +209 38 72 -10 317 599 90 33 0 +210 323 471 30 372 643 90 0 118 +211 224 192 10 109 381 90 0 804 +212 278 46 20 205 399 90 0 421 +213 272 403 -10 404 646 90 969 0 +214 232 42 -20 468 676 90 197 0 +215 18 63 -10 648 860 90 95 0 +216 58 458 -10 605 870 90 170 0 +217 416 417 -10 977 1180 90 526 0 +218 205 230 30 90 377 90 0 191 +219 65 453 30 330 584 90 0 240 +220 421 294 -10 794 1042 90 51 0 +221 434 245 -20 1292 1502 90 860 0 +222 2 116 -20 445 667 90 406 0 +223 411 421 -20 782 997 90 925 0 +224 315 260 10 87 414 0 0 1013 +225 136 288 -10 939 1146 90 44 0 +226 173 490 20 336 531 90 0 978 +227 90 232 10 648 765 90 0 150 +228 402 265 20 208 464 90 0 566 +229 361 14 10 609 815 0 0 1051 +230 348 147 -20 768 991 90 241 0 +231 385 295 20 142 327 90 0 166 +232 394 23 -20 1184 1414 90 135 0 +233 466 295 -10 901 1204 90 487 0 +234 71 103 20 1259 1503 0 0 1018 +235 125 29 -30 499 738 90 682 0 +236 25 65 10 919 1143 0 0 1003 +237 58 449 -10 917 1119 90 178 0 +238 246 398 40 148 409 90 0 597 +239 423 294 -10 678 974 90 141 0 +240 59 459 -30 478 814 90 219 0 +241 348 145 20 700 875 90 0 230 +242 477 97 -30 302 614 90 164 0 +243 307 102 -30 497 753 90 686 0 +244 169 31 20 290 543 90 0 484 +245 381 495 20 592 882 90 0 747 +246 95 234 10 244 433 90 0 920 +247 22 33 -10 632 906 90 635 0 +248 435 268 -10 1010 1244 90 330 0 +249 135 293 -10 252 538 90 533 0 +250 439 266 -20 189 399 90 435 0 +251 269 402 20 512 723 90 0 252 +252 267 400 -20 728 887 90 251 0 +253 473 196 10 480 727 90 0 392 +254 445 237 10 236 514 90 0 717 +255 461 284 10 215 400 90 0 423 +256 167 339 10 564 794 90 0 857 +257 26 43 10 305 575 90 0 113 +258 101 386 -20 242 522 90 823 0 +259 342 54 -20 414 756 90 792 0 +260 243 399 -10 721 899 90 471 0 +261 288 44 20 580 767 90 0 814 +262 274 48 -10 270 502 90 633 0 +263 360 184 -20 763 989 90 670 0 +264 23 67 -10 1016 1233 90 834 0 +265 6 296 10 720 1070 0 0 1015 +266 249 258 -10 823 1061 90 626 0 +267 421 415 30 237 495 90 0 837 +268 319 468 -10 228 478 90 6 0 +269 50 438 20 634 870 90 0 185 +270 440 61 30 871 1133 90 0 171 +271 17 65 -20 553 771 90 381 0 +272 323 118 20 212 460 90 0 548 +273 402 281 -10 777 1034 90 757 0 +274 71 153 -20 641 922 90 390 0 +275 52 432 -10 689 942 90 882 0 +276 378 199 -20 670 895 90 31 0 +277 238 204 -10 459 741 90 988 0 +278 208 184 20 91 246 90 0 907 +279 376 195 -30 488 704 90 726 0 +280 473 475 -20 1022 1283 90 790 0 +281 215 395 -20 768 1026 90 815 0 +282 123 222 30 289 517 90 0 298 +283 436 241 -20 1180 1425 90 867 0 +284 70 100 -20 1031 1279 90 672 0 +285 73 328 20 193 328 90 0 474 +286 241 205 -20 553 833 90 5 0 +287 250 405 20 211 463 90 0 772 +288 483 14 10 558 838 90 0 835 +289 466 287 10 386 606 90 0 85 +290 467 114 -20 1093 1288 90 58 0 +291 120 159 10 265 418 90 0 131 +292 408 84 10 640 919 90 0 746 +293 413 217 20 166 401 90 0 469 +294 338 142 40 139 358 90 0 540 +295 483 457 20 653 892 90 0 19 +296 479 169 -10 683 925 90 377 0 +297 95 224 -30 983 1194 90 778 0 +298 122 216 -30 375 622 90 282 0 +299 477 179 20 237 456 90 0 759 +300 406 99 20 303 501 90 0 205 +301 44 47 20 289 583 90 0 777 +302 487 450 -10 822 1099 90 45 0 +303 172 488 -20 250 455 90 535 0 +304 460 374 -10 649 935 90 810 0 +305 279 138 40 159 442 90 0 520 +306 338 147 10 135 446 0 0 1037 +307 395 295 20 577 836 90 0 676 +308 195 185 20 280 455 90 0 915 +309 463 194 20 220 466 90 0 890 +310 30 72 -20 1277 1452 90 750 0 +311 244 254 -10 641 870 90 438 0 +312 317 261 20 315 557 90 0 702 +313 67 108 10 231 494 90 0 795 +314 442 310 20 570 772 0 0 1031 +315 63 336 -10 701 982 90 688 0 +316 109 107 20 246 527 90 0 678 +317 100 387 10 334 613 90 0 97 +318 494 94 -10 524 802 90 957 0 +319 343 49 -10 529 830 90 941 0 +320 40 52 -30 462 674 90 564 0 +321 319 124 -10 300 565 90 760 0 +322 94 97 20 218 410 90 0 532 +323 476 94 20 274 499 0 0 1010 +324 283 47 10 287 505 0 0 1030 +325 398 325 30 675 941 90 0 673 +326 460 13 20 397 596 90 0 334 +327 305 107 20 611 830 90 0 348 +328 188 12 30 245 466 90 0 92 +329 136 290 20 194 410 90 0 46 +330 439 268 10 905 1161 90 0 248 +331 112 467 10 410 651 90 0 579 +332 181 469 20 379 625 90 0 936 +333 358 18 -30 430 623 90 386 0 +334 459 10 -20 457 723 90 326 0 +335 199 268 20 181 471 90 0 368 +336 436 237 20 186 408 90 0 152 +337 318 280 -30 215 489 90 72 0 +338 64 99 -30 740 1017 90 372 0 +339 394 333 20 372 686 90 0 457 +340 366 93 -20 860 1065 90 26 0 +341 95 391 -20 806 1075 90 378 0 +342 391 425 -10 768 983 90 555 0 +343 344 146 -20 390 635 90 766 0 +344 198 12 10 455 758 90 0 799 +345 186 472 20 453 744 90 0 739 +346 390 408 30 375 596 90 0 7 +347 19 43 -30 1086 1375 90 536 0 +348 307 108 -20 666 958 90 327 0 +349 59 457 -30 706 952 90 492 0 +350 49 451 20 284 548 90 0 75 +351 125 39 20 245 509 0 0 1024 +352 61 147 -30 278 518 90 977 0 +353 317 123 20 434 617 0 0 1029 +354 392 426 -10 576 812 90 849 0 +355 237 213 -40 789 974 90 715 0 +356 71 333 10 201 376 90 0 393 +357 304 97 -10 328 546 90 32 0 +358 196 462 -10 875 1083 90 851 0 +359 224 191 -10 243 429 90 667 0 +360 37 51 10 536 787 90 0 763 +361 491 25 -20 870 1097 90 727 0 +362 270 401 -10 152 387 90 914 0 +363 474 461 30 307 534 90 0 797 +364 66 448 10 270 582 90 0 176 +365 337 241 20 236 500 90 0 398 +366 269 46 -20 643 885 90 63 0 +367 22 41 10 997 1278 90 0 500 +368 198 271 -20 285 554 90 335 0 +369 287 43 10 457 708 90 0 697 +370 446 63 -10 616 831 90 35 0 +371 200 229 30 211 446 90 0 898 +372 48 72 30 604 876 90 0 338 +373 465 142 10 307 540 90 0 892 +374 123 155 -10 1077 1276 90 593 0 +375 16 497 20 979 1183 90 0 701 +376 220 319 -40 849 1158 90 656 0 +377 484 171 10 597 820 90 0 296 +378 55 431 20 611 835 90 0 341 +379 428 24 10 998 1247 0 0 1001 +380 80 342 10 193 521 90 0 4 +381 16 68 20 395 742 90 0 271 +382 124 56 20 231 537 90 0 127 +383 95 218 20 796 1003 0 0 1039 +384 481 26 30 321 471 90 0 858 +385 145 434 20 384 592 90 0 160 +386 335 57 30 210 406 90 0 333 +387 26 490 -30 1159 1406 90 79 0 +388 324 127 30 143 392 90 0 983 +389 109 114 -30 763 937 90 773 0 +390 72 148 20 207 387 90 0 274 +391 220 392 20 867 1118 0 0 1014 +392 442 243 -10 906 1142 90 253 0 +393 69 336 -10 323 624 90 356 0 +394 131 226 20 121 336 90 0 23 +395 150 204 20 537 796 90 0 186 +396 423 217 -20 666 967 90 619 0 +397 419 459 -10 682 941 90 743 0 +398 285 163 -20 614 880 90 365 0 +399 203 7 20 972 1170 90 0 82 +400 54 445 10 407 719 90 0 752 +401 109 463 -20 861 1117 90 944 0 +402 355 180 30 228 396 90 0 565 +403 13 455 -20 313 538 90 711 0 +404 165 337 -40 254 541 90 981 0 +405 314 124 -30 696 916 90 499 0 +406 9 124 20 271 581 90 0 222 +407 3 292 20 276 586 90 0 934 +408 16 462 -20 843 1079 90 887 0 +409 189 464 10 778 985 0 0 1049 +410 288 154 10 319 617 0 0 1050 +411 90 296 20 166 436 90 0 912 +412 138 438 -30 720 1004 90 816 0 +413 13 459 20 520 844 90 0 614 +414 461 8 20 703 866 90 0 802 +415 96 97 20 217 484 90 0 603 +416 68 99 10 973 1153 90 0 805 +417 146 205 10 271 509 0 0 1045 +418 117 152 20 768 1026 90 0 159 +419 481 96 -20 451 652 90 660 0 +420 338 260 20 534 765 90 0 873 +421 285 44 -20 392 589 90 212 0 +422 111 464 -10 672 940 90 974 0 +423 468 291 -10 654 891 90 255 0 +424 148 206 20 347 617 90 0 519 +425 184 464 10 223 464 90 0 149 +426 197 11 -20 589 808 90 683 0 +427 396 410 10 717 991 90 0 67 +428 133 53 -40 538 850 90 784 0 +429 132 30 -10 768 1033 90 749 0 +430 464 13 20 782 978 90 0 525 +431 100 394 -20 927 1146 90 948 0 +432 483 22 10 388 630 90 0 839 +433 93 235 -10 886 1077 90 910 0 +434 174 26 -20 970 1171 90 975 0 +435 436 264 20 186 419 90 0 250 +436 24 492 -10 1197 1356 90 489 0 +437 406 94 -10 275 530 90 582 0 +438 234 246 10 424 695 90 0 311 +439 315 287 30 593 853 90 0 751 +440 408 453 10 483 754 90 0 939 +441 128 225 10 124 314 90 0 695 +442 226 191 -10 295 561 90 800 0 +443 391 407 -10 441 712 90 578 0 +444 198 264 -30 665 925 90 654 0 +445 179 7 -20 853 941 90 624 0 +446 425 215 10 605 843 90 0 733 +447 483 27 -30 1113 1412 90 608 0 +448 22 40 -10 944 1149 90 966 0 +449 479 176 20 240 489 90 0 546 +450 476 102 20 677 985 90 0 609 +451 386 405 20 206 411 90 0 206 +452 22 38 20 854 1055 0 0 1002 +453 440 241 -10 986 1247 90 847 0 +454 182 14 -10 986 1193 90 201 0 +455 266 405 -10 599 826 90 621 0 +456 357 181 20 282 527 90 0 207 +457 395 332 -20 505 736 90 339 0 +458 423 290 -30 228 490 90 599 0 +459 104 28 -10 594 869 90 190 0 +460 131 56 -20 406 615 90 544 0 +461 111 110 -20 480 660 90 122 0 +462 97 93 20 391 600 90 0 569 +463 90 274 -10 308 560 90 36 0 +464 214 394 10 682 929 90 0 817 +465 6 114 10 712 952 90 0 196 +466 375 191 -30 346 658 90 987 0 +467 356 21 20 301 564 90 0 730 +468 466 165 -10 663 889 90 595 0 +469 415 223 -20 1139 1420 90 293 0 +470 397 20 -20 326 583 90 182 0 +471 241 403 10 608 823 90 0 260 +472 69 334 30 266 497 90 0 967 +473 152 210 20 105 281 90 0 65 +474 67 335 -20 536 777 90 285 0 +475 126 30 10 411 643 90 0 596 +476 390 423 10 222 489 90 0 549 +477 285 162 -20 512 801 90 120 0 +478 285 158 -30 261 485 90 758 0 +479 406 96 20 219 480 90 0 719 +480 459 374 20 800 966 90 0 833 +481 67 109 20 322 504 90 0 74 +482 468 475 10 313 570 90 0 864 +483 438 31 10 288 538 90 0 769 +484 168 24 -20 641 945 90 244 0 +485 267 394 -20 870 1118 90 86 0 +486 406 450 -20 305 563 90 962 0 +487 460 288 10 213 441 90 0 233 +488 224 203 20 53 237 90 0 653 +489 21 487 10 480 730 90 0 436 +490 21 488 -30 548 845 90 49 0 +491 87 217 -30 486 756 90 66 0 +492 67 452 30 272 474 90 0 349 +493 119 223 10 750 1009 0 0 1036 +494 398 428 10 523 672 90 0 685 +495 344 262 -20 419 688 90 836 0 +496 390 301 -10 326 515 90 70 0 +497 167 27 30 404 618 90 0 765 +498 236 247 20 379 555 90 0 22 +499 313 119 30 635 786 90 0 405 +500 13 51 -10 1223 1425 90 367 0 +501 200 13 10 321 528 90 0 594 +502 0 120 -30 323 601 90 820 0 +503 202 4 10 836 1118 90 0 98 +504 343 144 10 181 471 90 0 169 +505 94 383 10 590 732 0 0 1032 +506 250 411 30 374 672 0 0 1040 +507 464 134 -10 946 1209 90 891 0 +508 443 237 20 193 375 90 0 112 +509 4 114 10 614 867 90 0 871 +510 169 336 -10 742 988 90 782 0 +511 200 178 20 172 365 90 0 47 +512 412 453 10 624 801 90 0 123 +513 121 151 20 971 1192 0 0 1005 +514 403 93 -30 1050 1261 90 696 0 +515 399 301 30 490 729 90 0 687 +516 97 387 10 735 957 90 0 606 +517 176 8 -20 908 1074 90 846 0 +518 62 326 -20 799 1084 90 89 0 +519 151 207 -20 675 845 90 424 0 +520 299 98 -40 232 451 90 305 0 +521 334 240 30 460 648 90 0 996 +522 92 270 -20 877 1106 90 813 0 +523 444 269 20 432 706 90 0 657 +524 132 223 -20 760 985 90 703 0 +525 428 25 -20 1106 1321 90 430 0 +526 413 421 10 689 906 90 0 217 +527 382 498 10 549 739 90 0 147 +528 391 429 -20 400 600 90 788 0 +529 398 97 10 212 411 90 0 740 +530 192 265 -10 596 802 90 933 0 +531 438 26 -10 360 591 90 54 0 +532 44 79 -20 267 463 90 322 0 +533 137 290 10 119 398 90 0 249 +534 446 319 30 292 489 90 0 617 +535 175 487 20 248 469 90 0 303 +536 26 45 30 303 558 90 0 347 +537 147 435 20 418 743 0 0 1026 +538 111 459 -10 1066 1282 90 725 0 +539 472 132 -10 656 936 90 913 0 +540 349 158 -40 994 1149 90 294 0 +541 86 268 10 597 827 90 0 71 +542 415 216 -10 266 437 90 167 0 +543 121 218 20 132 388 90 0 679 +544 210 185 20 76 295 90 0 460 +545 98 215 20 155 375 90 0 129 +546 484 174 -20 376 664 90 449 0 +547 328 458 -10 833 1116 90 980 0 +548 313 126 -20 781 1016 90 272 0 +549 390 415 -10 928 1205 90 476 0 +550 459 17 -20 929 1203 90 722 0 +551 481 124 -20 401 675 90 111 0 +552 386 414 -20 997 1274 90 115 0 +553 116 466 20 254 536 90 0 972 +554 468 295 10 876 1046 90 0 881 +555 391 426 10 684 885 90 0 342 +556 408 279 -30 560 870 90 704 0 +557 15 68 10 311 644 90 0 80 +558 392 424 10 853 1081 0 0 1021 +559 88 95 -20 522 848 90 698 0 +560 116 151 -20 679 932 90 562 0 +561 240 250 -30 237 508 90 714 0 +562 123 159 20 156 457 90 0 560 +563 89 290 20 165 457 90 0 818 +564 39 50 30 370 582 90 0 320 +565 359 179 -30 395 600 90 402 0 +566 338 257 -20 609 876 90 228 0 +567 92 236 -10 914 1232 90 938 0 +568 413 417 -10 1027 1315 90 24 0 +569 91 101 -20 728 1019 90 462 0 +570 55 449 20 278 497 90 0 713 +571 57 425 20 260 542 90 0 681 +572 465 287 -20 483 690 90 899 0 +573 320 280 10 134 386 90 0 613 +574 322 468 20 466 735 90 0 897 +575 483 458 10 539 825 0 0 1027 +576 312 267 -20 804 999 90 951 0 +577 139 291 10 118 458 90 0 20 +578 388 408 10 289 497 90 0 443 +579 110 459 -10 973 1192 90 331 0 +580 459 372 20 580 819 0 0 1047 +581 204 269 30 49 314 90 0 140 +582 407 98 10 218 468 90 0 437 +583 335 256 -30 827 1025 90 992 0 +584 471 484 -30 473 716 90 625 0 +585 339 244 -30 151 399 90 997 0 +586 89 272 10 434 620 90 0 906 +587 488 96 -20 829 1053 90 3 0 +588 316 286 -20 499 765 90 947 0 +589 235 50 -40 763 947 90 64 0 +590 316 258 20 232 454 90 0 199 +591 425 288 -20 513 760 90 976 0 +592 213 397 -20 585 839 90 771 0 +593 113 156 10 483 756 90 0 374 +594 199 9 -10 799 965 90 501 0 +595 463 167 10 561 804 90 0 468 +596 129 27 -10 584 841 90 475 0 +597 248 404 -40 154 432 90 238 0 +598 405 276 20 678 941 90 0 21 +599 400 288 30 154 400 90 0 458 +600 61 156 30 364 631 90 0 869 +601 393 20 -10 1059 1352 90 607 0 +602 484 177 20 318 535 90 0 995 +603 108 116 -20 813 1071 90 415 0 +604 112 217 20 260 565 90 0 742 +605 389 404 10 207 426 90 0 990 +606 102 391 -10 1001 1259 90 516 0 +607 434 26 10 462 676 90 0 601 +608 488 26 30 1056 1280 90 0 447 +609 477 120 -20 845 1150 90 450 0 +610 126 220 -20 539 831 90 40 0 +611 439 310 10 198 471 90 0 770 +612 212 319 30 141 380 90 0 855 +613 320 283 -10 324 567 90 573 0 +614 17 459 -20 1112 1363 90 413 0 +615 236 213 20 39 250 90 0 143 +616 68 108 -10 230 468 90 148 0 +617 390 294 -30 762 1023 90 534 0 +618 275 42 30 458 687 90 0 632 +619 423 214 20 558 705 90 0 396 +620 460 367 20 326 516 90 0 959 +621 272 402 10 216 454 90 0 455 +622 478 102 10 617 862 90 0 877 +623 400 260 40 150 393 90 0 107 +624 181 6 20 577 853 90 0 445 +625 470 475 30 314 548 90 0 584 +626 245 408 10 472 765 90 0 266 +627 93 96 20 317 483 90 0 172 +628 218 318 20 777 1046 90 0 893 +629 441 265 40 252 493 90 0 829 +630 21 64 20 757 937 90 0 642 +631 356 23 20 250 507 90 0 88 +632 267 44 -30 555 786 90 618 0 +633 277 50 10 210 375 90 0 262 +634 182 4 -20 513 732 90 200 0 +635 26 36 10 549 799 90 0 247 +636 384 491 -10 807 1039 90 793 0 +637 418 290 -10 1080 1314 90 117 0 +638 321 277 10 75 261 90 0 1 +639 358 16 -20 512 725 90 76 0 +640 389 334 20 233 455 90 0 861 +641 48 78 -20 901 1132 90 894 0 +642 24 68 -20 1190 1428 90 630 0 +643 206 225 10 334 516 90 0 844 +644 290 141 -20 566 787 90 774 0 +645 439 15 -20 559 798 90 14 0 +646 359 182 -20 642 926 90 193 0 +647 413 287 -20 1296 1469 90 650 0 +648 230 49 20 201 415 90 0 767 +649 407 280 -20 498 749 90 10 0 +650 459 295 20 1110 1372 90 0 647 +651 468 199 -30 584 814 90 11 0 +652 101 384 30 200 476 90 0 666 +653 170 26 -20 735 1037 90 488 0 +654 197 270 30 374 648 90 0 444 +655 415 289 20 169 437 90 0 798 +656 203 390 40 232 436 90 0 376 +657 443 272 -20 723 967 90 523 0 +658 210 391 30 146 466 90 0 208 +659 363 22 20 843 1146 90 0 874 +660 352 176 20 126 328 90 0 419 +661 212 223 -30 661 929 90 956 0 +662 8 120 10 1095 1306 0 0 1008 +663 244 250 10 47 327 0 0 1043 +664 18 484 10 329 605 90 0 16 +665 379 82 -20 751 960 90 163 0 +666 84 346 -30 1042 1209 90 652 0 +667 233 207 10 46 329 90 0 359 +668 344 62 -10 1130 1352 90 691 0 +669 20 489 10 757 999 90 0 731 +670 361 181 20 599 785 90 0 263 +671 174 494 10 382 675 90 0 134 +672 49 76 20 794 1054 90 0 284 +673 390 325 -30 770 1042 90 325 0 +674 7 118 -10 913 1121 90 927 0 +675 107 26 -30 437 660 90 842 0 +676 312 270 -20 889 1101 90 307 0 +677 399 102 -20 592 773 90 780 0 +678 109 108 -20 345 610 90 316 0 +679 115 218 -20 169 471 90 543 0 +680 88 287 -20 798 1039 90 911 0 +681 54 424 -20 262 575 90 571 0 +682 125 32 30 298 570 90 0 235 +683 199 12 20 398 633 90 0 426 +684 457 374 10 864 1086 90 0 56 +685 391 413 -10 920 1161 90 494 0 +686 304 102 30 431 632 90 0 243 +687 391 293 -30 685 916 90 515 0 +688 66 336 10 623 873 90 0 315 +689 132 291 10 668 866 90 0 699 +690 18 462 -20 936 1170 90 866 0 +691 347 62 10 1089 1207 90 0 668 +692 466 142 -30 403 625 90 194 0 +693 389 17 -10 930 1111 90 108 0 +694 342 254 -20 136 409 90 69 0 +695 92 223 -10 894 1096 90 441 0 +696 404 83 30 755 992 90 0 514 +697 290 46 -10 739 990 90 369 0 +698 95 92 20 446 730 90 0 559 +699 200 265 -10 729 1045 90 689 0 +700 435 16 -20 762 963 90 955 0 +701 25 499 -20 1048 1312 90 375 0 +702 319 260 -20 412 643 90 312 0 +703 116 225 20 683 889 90 0 524 +704 402 284 30 229 450 90 0 556 +705 108 105 20 202 414 0 0 1016 +706 386 13 10 739 924 0 0 1009 +707 472 129 -20 259 437 90 982 0 +708 132 57 20 294 545 90 0 852 +709 43 71 40 425 681 90 0 991 +710 493 91 -20 442 698 90 787 0 +711 12 451 20 311 554 90 0 403 +712 201 188 10 411 697 90 0 979 +713 60 428 -20 976 1220 90 570 0 +714 243 248 30 150 408 90 0 561 +715 230 197 40 513 721 90 0 355 +716 389 11 20 610 867 90 0 110 +717 401 281 -10 877 1115 90 254 0 +718 459 14 20 315 510 90 0 100 +719 411 95 -20 373 623 90 479 0 +720 0 297 10 586 829 90 0 2 +721 476 196 30 404 617 0 0 1034 +722 458 16 20 313 462 90 0 550 +723 92 230 -10 433 614 90 819 0 +724 432 24 -20 925 1131 90 177 0 +725 215 317 10 75 327 90 0 538 +726 371 192 30 134 352 90 0 279 +727 481 20 20 486 718 90 0 361 +728 152 207 -20 727 974 90 109 0 +729 14 459 20 422 759 90 0 812 +730 361 17 -20 663 947 90 467 0 +731 8 497 -10 834 1132 90 669 0 +732 206 186 -10 826 1020 90 745 0 +733 421 218 -10 820 999 90 446 0 +734 402 264 20 152 435 90 0 162 +735 388 325 -20 911 1085 90 748 0 +736 35 304 -20 221 456 90 922 0 +737 321 263 -20 632 791 90 796 0 +738 444 313 -30 361 612 90 940 0 +739 188 462 -20 662 917 90 345 0 +740 400 103 -10 479 702 90 529 0 +741 418 221 -10 1046 1327 90 73 0 +742 112 219 -20 423 586 90 604 0 +743 408 452 10 397 657 90 0 397 +744 30 301 -10 581 804 90 61 0 +745 205 228 10 50 274 90 0 732 +746 407 88 -10 943 1176 90 292 0 +747 380 489 -20 1012 1216 90 245 0 +748 395 331 20 572 851 90 0 735 +749 133 26 10 714 900 90 0 429 +750 21 68 20 1091 1341 90 0 310 +751 313 282 -30 708 928 90 439 0 +752 53 440 -10 539 778 90 400 0 +753 458 130 -10 1059 1290 90 179 0 +754 437 15 -20 642 898 90 184 0 +755 400 286 -20 154 416 90 155 0 +756 346 144 -30 565 825 90 930 0 +757 440 244 10 746 936 90 0 273 +758 280 162 30 92 310 90 0 478 +759 488 173 -20 512 716 90 299 0 +760 326 118 10 152 343 90 0 321 +761 207 400 20 412 640 90 0 168 +762 391 18 -20 993 1233 90 195 0 +763 37 55 -10 627 884 90 360 0 +764 204 15 20 239 575 90 0 879 +765 173 28 -30 1023 1302 90 497 0 +766 343 148 20 297 543 90 0 343 +767 231 43 -20 365 596 90 648 0 +768 445 273 20 598 908 90 0 863 +769 432 27 -10 753 936 90 483 0 +770 439 305 -10 647 887 90 611 0 +771 208 396 20 316 547 90 0 592 +772 249 407 -20 356 502 90 287 0 +773 107 112 30 614 901 90 0 389 +774 279 159 20 132 421 90 0 644 +775 376 494 30 274 481 90 0 973 +776 403 262 30 404 637 0 0 1041 +777 41 47 -20 291 494 90 301 0 +778 96 213 30 209 472 90 0 297 +779 461 167 -20 400 602 90 963 0 +780 391 99 20 206 574 90 0 677 +781 116 221 30 487 712 90 0 880 +782 165 343 10 445 724 90 0 510 +783 388 334 -20 161 394 90 854 0 +784 130 57 40 227 459 90 0 428 +785 422 409 10 234 482 90 0 68 +786 66 156 -30 561 809 90 870 0 +787 485 86 20 286 487 90 0 710 +788 389 428 20 275 541 90 0 528 +789 117 467 10 254 460 90 0 103 +790 475 477 20 903 1217 90 0 280 +791 429 27 -40 1179 1431 90 139 0 +792 339 60 20 209 450 90 0 259 +793 381 494 10 708 949 90 0 636 +794 218 321 20 617 839 90 0 971 +795 64 101 -10 594 797 90 313 0 +796 343 254 20 226 502 90 0 737 +797 478 464 -30 312 590 90 363 0 +798 423 286 -20 323 583 90 655 0 +799 198 9 -10 656 926 90 344 0 +800 225 196 10 59 347 90 0 442 +801 374 190 20 185 451 90 0 41 +802 462 14 -20 900 1045 90 414 0 +803 347 54 -10 762 979 90 909 0 +804 231 195 -10 415 633 90 211 0 +805 72 96 -10 1158 1341 90 416 0 +806 489 87 20 319 630 90 0 961 +807 443 313 -10 478 677 90 924 0 +808 233 204 20 91 368 0 0 1022 +809 477 483 -10 667 894 90 60 0 +810 459 368 10 240 438 90 0 304 +811 95 277 20 954 1224 0 0 1044 +812 16 460 -20 1001 1290 90 729 0 +813 100 266 20 150 413 90 0 522 +814 288 53 -20 872 1050 90 261 0 +815 211 386 20 141 357 90 0 281 +816 144 439 30 655 877 90 0 412 +817 224 314 -10 921 1279 90 464 0 +818 79 291 -20 427 661 90 563 0 +819 95 235 10 155 388 90 0 723 +820 7 123 30 274 547 90 0 502 +821 91 217 -10 607 823 90 8 0 +822 105 27 10 509 772 90 0 830 +823 101 385 20 201 423 90 0 258 +824 238 210 -20 642 936 90 856 0 +825 439 67 10 263 450 90 0 154 +826 435 267 -10 1110 1325 90 101 0 +827 443 64 -20 701 933 90 868 0 +828 92 234 -20 797 982 90 986 0 +829 450 265 -40 360 583 90 629 0 +830 102 27 -10 717 931 90 822 0 +831 492 94 10 625 886 0 0 1006 +832 440 63 20 808 1012 0 0 1011 +833 453 367 -20 961 1184 90 480 0 +834 15 69 10 296 549 90 0 264 +835 489 17 -10 689 901 90 288 0 +836 335 255 20 85 378 90 0 495 +837 419 418 -30 292 556 90 267 0 +838 292 41 -40 625 913 90 859 0 +839 489 27 -10 1001 1152 90 432 0 +840 96 270 -10 214 461 90 116 0 +841 461 369 -20 469 742 90 960 0 +842 105 22 30 273 452 90 0 675 +843 479 121 -30 592 853 90 94 0 +844 207 223 -10 500 719 90 643 0 +845 17 458 -20 1110 1422 90 970 0 +846 186 7 20 391 664 90 0 517 +847 465 168 10 740 998 90 0 453 +848 416 288 -10 1151 1428 90 87 0 +849 388 418 10 217 446 90 0 354 +850 92 233 -10 691 907 90 886 0 +851 179 492 10 590 839 90 0 358 +852 132 55 -20 510 694 90 708 0 +853 485 24 20 326 562 90 0 994 +854 388 331 20 160 434 90 0 783 +855 217 323 -30 330 566 90 612 0 +856 281 164 20 91 375 90 0 824 +857 169 340 -10 667 875 90 256 0 +858 491 20 -30 786 991 90 384 0 +859 279 42 40 210 428 90 0 838 +860 439 243 20 1082 1335 90 0 221 +861 391 334 -20 296 577 90 640 0 +862 96 244 -10 1191 1521 90 161 0 +863 441 273 -20 830 1045 90 768 0 +864 477 478 -10 833 1101 90 482 0 +865 56 434 20 797 1023 0 0 1007 +866 12 463 20 686 865 90 0 690 +867 458 164 20 297 515 90 0 283 +868 446 65 20 408 675 90 0 827 +869 71 156 -30 754 995 90 600 0 +870 65 153 30 428 757 90 0 786 +871 8 118 -10 1006 1211 90 509 0 +872 102 29 30 793 1040 0 0 1012 +873 315 265 -20 698 918 90 420 0 +874 343 62 -20 1254 1410 90 659 0 +875 384 16 20 817 1035 90 0 42 +876 67 105 10 479 721 90 0 878 +877 478 118 -10 984 1194 90 622 0 +878 73 101 -10 1236 1453 90 876 0 +879 200 14 -20 241 445 90 764 0 +880 114 225 -30 587 801 90 781 0 +881 460 293 -10 990 1308 90 554 0 +882 51 447 10 343 596 90 0 275 +883 418 295 -20 978 1225 90 55 0 +884 282 139 -40 115 458 90 985 0 +885 477 122 -40 818 993 90 942 0 +886 91 266 10 672 943 90 0 850 +887 16 463 20 776 964 90 0 408 +888 228 199 10 577 842 90 0 923 +889 435 20 20 839 1073 0 0 1004 +890 467 195 -20 223 592 90 309 0 +891 469 132 10 755 1023 90 0 507 +892 465 136 -10 874 1096 90 373 0 +893 246 255 -20 704 991 90 628 0 +894 49 75 20 721 945 90 0 641 +895 66 98 -10 853 1088 90 114 0 +896 166 32 10 233 530 90 0 935 +897 326 466 -20 634 936 90 574 0 +898 202 186 -30 551 742 90 371 0 +899 467 285 20 270 538 90 0 572 +900 290 136 20 479 685 90 0 25 +901 341 58 10 265 532 90 0 128 +902 121 219 20 132 389 0 0 1038 +903 107 35 -10 909 1118 90 50 0 +904 216 319 -20 232 477 90 130 0 +905 134 288 -30 821 1081 90 9 0 +906 89 270 -10 510 728 90 586 0 +907 136 52 -20 661 914 90 278 0 +908 462 167 -20 447 736 90 84 0 +909 340 54 10 347 638 90 0 803 +910 80 286 10 507 770 90 0 433 +911 38 301 20 652 929 90 0 680 +912 25 307 -20 409 599 90 411 0 +913 470 139 10 568 831 90 0 539 +914 270 400 10 151 451 90 0 362 +915 204 187 -20 735 925 90 308 0 +916 460 171 30 869 1062 0 0 1023 +917 399 106 -20 852 1062 90 965 0 +918 197 267 10 504 704 0 0 1052 +919 77 350 -10 920 1135 90 105 0 +920 91 231 -10 462 768 90 246 0 +921 398 103 30 650 896 90 0 989 +922 35 303 20 221 408 90 0 736 +923 231 204 -10 678 933 90 888 0 +924 311 266 10 63 222 90 0 807 +925 416 420 20 580 830 90 0 223 +926 231 203 -10 183 461 90 964 0 +927 4 116 10 544 752 90 0 674 +928 417 217 30 319 568 90 0 952 +929 268 52 -30 927 1155 90 12 0 +930 345 144 30 475 734 90 0 756 +931 368 85 30 202 456 90 0 998 +932 441 65 10 307 586 90 0 146 +933 201 270 10 52 306 90 0 530 +934 0 293 -20 508 719 90 407 0 +935 167 24 -10 601 804 90 896 0 +936 186 464 -20 564 828 90 332 0 +937 7 292 10 246 492 90 0 102 +938 80 290 10 331 573 90 0 567 +939 405 455 -10 796 1036 90 440 0 +940 439 312 30 198 521 90 0 738 +941 300 108 10 150 318 90 0 319 +942 478 121 40 705 922 90 0 885 +943 92 232 -20 288 575 90 999 0 +944 111 463 20 797 997 90 0 401 +945 132 294 20 357 618 90 0 138 +946 134 285 -20 1066 1207 90 34 0 +947 316 284 20 424 655 90 0 588 +948 56 428 20 323 574 90 0 431 +949 232 47 10 203 387 90 0 198 +950 466 291 10 543 819 0 0 1025 +951 341 257 20 352 563 90 0 576 +952 420 213 -30 432 645 90 928 0 +953 116 152 20 589 839 0 0 1042 +954 163 337 10 155 455 90 0 39 +955 440 7 20 420 557 90 0 700 +956 208 222 30 590 811 90 0 661 +957 485 95 10 281 512 90 0 318 +958 97 385 30 456 679 90 0 142 +959 462 367 -20 415 611 90 620 0 +960 455 365 20 235 476 90 0 841 +961 492 95 -20 722 971 90 806 0 +962 405 450 20 253 448 90 0 486 +963 371 193 20 133 373 90 0 779 +964 234 202 10 279 550 90 0 926 +965 404 103 20 358 636 90 0 917 +966 24 41 10 441 716 90 0 448 +967 67 334 -30 422 710 90 472 0 +968 207 227 10 48 328 90 0 57 +969 277 403 10 320 539 90 0 213 +970 15 457 20 365 631 90 0 845 +971 217 319 -20 681 959 90 794 0 +972 111 467 -20 515 728 90 553 0 +973 378 493 -30 335 578 90 775 0 +974 112 465 10 592 836 90 0 422 +975 173 25 20 881 1077 90 0 434 +976 421 292 20 176 456 90 0 591 +977 74 146 30 204 534 90 0 352 +978 178 491 -20 494 752 90 226 0 +979 204 185 -10 630 846 90 712 0 +980 319 470 10 260 565 90 0 547 +981 163 331 40 118 338 90 0 404 +982 470 125 20 253 501 90 0 707 +983 315 121 -30 473 764 90 388 0 +984 166 34 20 231 508 90 0 48 +985 284 140 40 115 326 90 0 884 +986 85 288 20 211 504 90 0 828 +987 376 190 30 295 526 90 0 466 +988 238 203 10 377 641 90 0 277 +989 399 104 -30 743 987 90 921 0 +990 472 481 -10 338 665 90 605 0 +991 46 74 -40 507 788 90 709 0 +992 401 255 30 608 814 90 0 583 +993 475 480 30 745 1003 90 0 43 +994 485 27 -20 1137 1385 90 853 0 +995 476 174 -20 797 1001 90 602 0 +996 330 242 -30 525 772 90 521 0 +997 332 249 30 82 328 90 0 585 +998 375 80 -30 447 701 90 931 0 +999 94 235 20 156 362 90 0 943 +1000 287 144 20 753 969 0 0 1033 +1001 428 24 -10 998 1247 90 379 0 +1002 22 38 -20 854 1055 90 452 0 +1003 25 65 -10 919 1143 90 236 0 +1004 435 20 -20 839 1073 90 889 0 +1005 121 151 -20 971 1192 90 513 0 +1006 492 94 -10 625 886 90 831 0 +1007 56 434 -20 797 1023 90 865 0 +1008 8 120 -10 1095 1306 90 662 0 +1009 386 13 -10 739 924 90 706 0 +1010 476 94 -20 274 499 90 323 0 +1011 440 63 -20 808 1012 90 832 0 +1012 102 29 -30 793 1040 90 872 0 +1013 315 260 -10 87 414 90 224 0 +1014 220 392 -20 867 1118 90 391 0 +1015 6 296 -10 720 1070 90 265 0 +1016 108 105 -20 202 414 90 705 0 +1017 463 140 -10 239 480 90 144 0 +1018 71 103 -20 1259 1503 90 234 0 +1019 367 83 -30 203 499 90 173 0 +1020 418 218 -20 898 1106 90 15 0 +1021 392 424 -10 853 1081 90 558 0 +1022 233 204 -20 91 368 90 808 0 +1023 460 171 -30 869 1062 90 916 0 +1024 125 39 -20 245 509 90 351 0 +1025 466 291 -10 543 819 90 950 0 +1026 147 435 -20 418 743 90 537 0 +1027 483 458 -10 539 825 90 575 0 +1028 328 466 -30 720 1033 90 202 0 +1029 317 123 -20 434 617 90 353 0 +1030 283 47 -10 287 505 90 324 0 +1031 442 310 -20 570 772 90 314 0 +1032 94 383 -10 590 732 90 505 0 +1033 287 144 -20 753 969 90 1000 0 +1034 476 196 -30 404 617 90 721 0 +1035 208 11 -20 1226 1473 90 156 0 +1036 119 223 -10 750 1009 90 493 0 +1037 338 147 -10 135 446 90 306 0 +1038 121 219 -20 132 389 90 902 0 +1039 95 218 -20 796 1003 90 383 0 +1040 250 411 -30 374 672 90 506 0 +1041 403 262 -30 404 637 90 776 0 +1042 116 152 -20 589 839 90 953 0 +1043 244 250 -10 47 327 90 663 0 +1044 95 277 -20 954 1224 90 811 0 +1045 146 205 -10 271 509 90 417 0 +1046 162 336 -20 123 366 90 125 0 +1047 459 372 -20 580 819 90 580 0 +1048 406 285 -20 346 522 90 99 0 +1049 189 464 -10 778 985 90 409 0 +1050 288 154 -10 319 617 90 410 0 +1051 361 14 -10 609 815 90 229 0 +1052 197 267 -10 504 704 90 918 0 diff --git a/jsprit-instances/instances/lilim/1000/LC1109.txt b/jsprit-instances/instances/lilim/1000/LC1109.txt new file mode 100644 index 00000000..63f86a46 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC1109.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1824 0 0 0 +1 387 297 10 144 504 90 0 515 +2 5 297 -20 806 1166 90 407 0 +3 355 177 20 127 487 90 0 565 +4 78 346 30 199 559 90 0 341 +5 286 159 20 383 743 90 0 355 +6 322 465 10 226 586 90 0 28 +7 393 408 -10 489 849 90 605 0 +8 89 216 10 348 708 90 0 821 +9 76 345 30 383 743 90 0 378 +10 410 285 20 348 708 90 0 655 +11 472 189 30 232 592 90 0 296 +12 270 49 -10 767 1127 90 30 0 +13 219 325 10 361 721 90 0 376 +14 437 12 20 405 765 90 0 754 +15 418 218 20 822 1182 90 0 741 +16 20 488 -10 607 967 90 490 0 +17 77 347 20 291 651 90 0 958 +18 73 346 -20 569 929 90 89 0 +19 480 455 -40 971 1331 90 187 0 +20 129 292 -30 401 761 90 249 0 +21 337 257 -20 654 1014 90 590 0 +22 237 254 20 478 838 90 0 311 +23 131 220 30 600 960 90 0 524 +24 417 417 10 807 1167 90 0 568 +25 287 143 -20 590 950 90 357 0 +26 379 80 20 583 943 90 0 340 +27 87 285 30 556 916 90 0 680 +28 374 489 -10 269 629 90 6 0 +29 440 247 -10 568 928 90 152 0 +30 281 137 10 213 573 90 0 12 +31 379 196 -30 509 869 90 987 0 +32 297 102 10 155 515 90 0 520 +33 39 76 10 273 633 90 0 95 +34 35 306 20 224 584 90 0 862 +35 435 68 10 259 619 90 0 932 +36 245 251 10 5 365 90 0 714 +37 409 88 20 505 865 90 0 205 +38 273 55 20 196 556 90 0 261 +39 163 340 30 311 671 90 0 256 +40 129 223 20 127 487 90 0 282 +41 371 200 -30 699 1059 90 466 0 +42 357 26 20 1002 1362 0 0 1003 +43 470 473 -10 1061 1421 90 280 0 +44 77 344 10 196 556 90 0 516 +45 478 461 -30 316 676 90 267 0 +46 128 291 -20 493 853 90 945 0 +47 111 113 -10 483 843 90 131 0 +48 164 21 20 428 788 90 0 765 +49 21 485 -10 333 693 90 664 0 +50 108 26 10 277 637 90 0 459 +51 424 286 -20 364 724 90 99 0 +52 200 270 20 54 414 90 0 530 +53 7 300 -10 900 1260 90 937 0 +54 433 31 10 285 645 90 0 447 +55 420 295 20 830 1190 90 0 883 +56 451 367 -20 985 1345 90 339 0 +57 118 157 20 254 614 90 0 461 +58 489 101 -10 856 1216 90 242 0 +59 200 261 -10 801 1161 90 918 0 +60 476 483 -10 510 870 90 584 0 +61 30 302 -10 422 782 90 938 0 +62 8 300 -10 991 1351 90 720 0 +63 275 45 20 300 660 90 0 192 +64 238 46 -10 580 940 90 214 0 +65 152 206 -10 762 1122 90 786 0 +66 99 218 30 154 514 90 0 491 +67 393 410 -30 767 1127 90 346 0 +68 480 460 -30 408 768 90 363 0 +69 337 256 20 87 447 90 0 556 +70 389 300 10 149 509 90 0 687 +71 90 237 -10 1076 1436 90 161 0 +72 321 280 30 77 437 90 0 217 +73 417 218 10 913 1273 0 0 1023 +74 64 108 -20 326 686 90 481 0 +75 57 432 10 823 1183 0 0 1013 +76 356 24 20 249 609 90 0 88 +77 143 207 30 116 476 90 0 600 +78 221 325 10 453 813 90 0 628 +79 22 483 -20 325 685 90 570 0 +80 24 65 10 760 1120 0 0 1005 +81 141 431 30 213 573 90 0 425 +82 202 9 -20 1073 1433 90 399 0 +83 20 48 -10 1068 1428 90 367 0 +84 457 163 -30 224 584 90 194 0 +85 470 290 -10 685 1045 90 487 0 +86 268 400 -10 718 1078 90 252 0 +87 337 251 10 87 447 90 0 199 +88 366 20 -20 721 1081 90 76 0 +89 72 344 20 477 837 90 0 18 +90 149 203 10 395 755 90 0 728 +91 55 428 20 359 719 90 0 275 +92 189 7 30 250 610 90 0 454 +93 397 18 -20 367 727 90 470 0 +94 481 122 30 450 810 90 0 843 +95 20 73 -10 290 650 90 33 0 +96 54 430 -20 451 811 90 948 0 +97 74 350 10 755 1115 90 0 919 +98 202 8 -10 982 1342 90 503 0 +99 406 285 20 254 614 90 0 51 +100 460 2 20 508 868 90 0 802 +101 441 244 10 752 1112 90 0 453 +102 1 293 10 343 703 90 0 934 +103 115 465 10 257 617 90 0 974 +104 422 420 20 338 698 90 0 526 +105 75 347 10 661 1021 90 0 666 +106 141 428 20 208 568 90 0 345 +107 404 264 20 248 608 90 0 717 +108 398 23 -20 270 630 90 272 0 +109 148 211 20 109 469 90 0 227 +110 362 22 -30 905 1265 90 639 0 +111 479 127 -10 265 625 90 144 0 +112 443 246 -10 385 745 90 694 0 +113 22 37 10 683 1043 90 0 452 +114 65 100 10 607 967 90 0 674 +115 404 447 -20 250 610 90 788 0 +116 102 264 -20 148 508 90 394 0 +117 444 271 10 481 841 90 0 647 +118 325 466 -10 514 874 90 969 0 +119 124 219 20 413 773 90 0 610 +120 335 243 20 281 641 90 0 521 +121 26 42 20 307 667 90 0 966 +122 113 106 20 198 558 90 0 852 +123 399 450 -10 834 1194 90 512 0 +124 146 439 -20 494 854 90 258 0 +125 162 336 20 123 483 90 0 404 +126 2 295 30 621 981 90 0 265 +127 122 35 10 250 610 90 0 475 +128 346 60 -10 876 1236 90 803 0 +129 93 213 30 253 613 90 0 828 +130 218 316 20 73 433 90 0 612 +131 116 156 10 346 706 90 0 47 +132 419 422 20 431 791 90 0 925 +133 467 141 -10 426 786 90 692 0 +134 187 491 20 633 993 90 0 358 +135 433 25 -30 757 1117 90 173 0 +136 286 137 -40 308 668 90 985 0 +137 370 82 -20 299 659 90 321 0 +138 132 290 -20 678 1038 90 329 0 +139 435 11 40 302 662 90 0 334 +140 206 261 -20 897 1257 90 444 0 +141 428 291 -30 551 911 90 599 0 +142 95 384 -10 572 932 90 505 0 +143 205 223 20 338 698 90 0 781 +144 463 140 10 239 599 90 0 111 +145 343 47 20 592 952 90 0 668 +146 435 62 -20 1007 1367 90 832 0 +147 387 488 20 837 1197 0 0 1010 +148 121 157 10 159 519 90 0 795 +149 182 463 30 226 586 90 0 739 +150 92 216 -20 626 986 90 902 0 +151 370 83 20 208 568 90 0 195 +152 444 242 10 291 651 90 0 29 +153 90 285 40 831 1191 0 0 1045 +154 446 64 10 452 812 90 0 370 +155 312 264 20 63 423 90 0 947 +156 208 11 -10 1132 1492 90 426 0 +157 442 247 10 476 836 90 0 330 +158 140 431 30 211 571 90 0 422 +159 118 153 -10 808 1168 90 291 0 +160 134 428 -20 783 1143 90 412 0 +161 91 235 10 984 1344 90 0 71 +162 406 257 10 436 796 90 0 583 +163 377 76 -20 489 849 90 353 0 +164 474 96 -20 271 631 90 449 0 +165 346 57 -10 783 1143 90 901 0 +166 393 301 30 333 693 90 0 617 +167 412 214 10 165 525 90 0 619 +168 210 398 -20 439 799 90 815 0 +169 346 150 -10 793 1153 90 756 0 +170 62 453 10 370 730 90 0 349 +171 437 61 -20 915 1275 90 718 0 +172 87 96 -20 597 957 90 708 0 +173 367 83 30 203 563 90 0 135 +174 91 268 -20 720 1080 90 723 0 +175 459 145 40 233 593 90 0 707 +176 63 444 -30 935 1295 90 237 0 +177 433 27 20 481 841 90 0 791 +178 60 454 -30 742 1102 90 219 0 +179 478 99 10 466 826 0 0 1029 +180 485 454 -10 686 1046 90 797 0 +181 6 292 -20 247 607 90 922 0 +182 398 20 20 273 633 90 0 203 +183 248 251 20 2 362 90 0 592 +184 433 15 -10 297 657 90 531 0 +185 64 426 -20 1012 1372 90 713 0 +186 154 207 20 854 1214 0 0 1043 +187 481 456 40 879 1239 90 0 19 +188 380 498 -30 372 732 90 775 0 +189 88 286 -10 647 1007 90 441 0 +190 111 23 -20 266 626 90 382 0 +191 199 187 -20 282 642 90 278 0 +192 269 48 -20 676 1036 90 63 0 +193 367 178 20 415 775 90 0 670 +194 452 163 30 219 579 90 0 84 +195 431 28 -20 573 933 90 151 0 +196 8 116 -20 745 1105 90 222 0 +197 233 47 20 206 566 90 0 767 +198 237 43 -10 487 847 90 949 0 +199 320 262 -10 440 800 90 87 0 +200 188 4 20 254 614 90 0 634 +201 180 6 -20 626 986 90 846 0 +202 328 466 -10 697 1057 90 980 0 +203 393 12 -20 464 824 90 182 0 +204 409 90 20 413 773 90 0 696 +205 406 87 -20 788 1148 90 37 0 +206 394 407 -10 581 941 90 443 0 +207 358 183 -20 789 1149 90 646 0 +208 186 461 20 220 580 90 0 303 +209 38 72 30 278 638 90 0 301 +210 323 471 -10 327 687 90 268 0 +211 224 192 10 65 425 90 0 898 +212 278 46 20 205 565 90 0 369 +213 272 403 -10 345 705 90 621 0 +214 232 42 10 392 752 90 0 64 +215 18 63 -20 574 934 90 271 0 +216 58 458 -30 558 918 90 492 0 +217 416 417 -30 898 1258 90 72 0 +218 205 230 30 53 413 90 0 473 +219 65 453 30 277 637 90 0 178 +220 421 294 -10 738 1098 90 239 0 +221 434 245 -20 1190 1550 90 860 0 +222 2 116 20 376 736 90 0 196 +223 411 421 -20 710 1070 90 783 0 +224 315 260 10 70 430 90 0 836 +225 136 288 -20 863 1223 90 905 0 +226 173 490 20 254 614 90 0 978 +227 90 232 -20 527 887 90 109 0 +228 402 265 20 156 516 90 0 598 +229 361 14 -20 532 892 90 631 0 +230 348 147 -20 700 1060 90 241 0 +231 385 295 20 142 502 90 0 307 +232 394 23 20 1106 1466 0 0 1011 +233 466 295 -10 873 1233 90 255 0 +234 71 103 -20 1143 1503 90 642 0 +235 125 29 -30 438 798 90 682 0 +236 25 65 10 851 1211 90 0 264 +237 58 449 30 838 1198 90 0 176 +238 246 398 40 148 508 90 0 772 +239 423 294 10 646 1006 90 0 220 +240 59 459 -10 466 826 90 364 0 +241 348 145 20 608 968 90 0 230 +242 477 97 10 278 638 90 0 58 +243 307 102 40 445 805 90 0 665 +244 169 31 -20 237 597 90 511 0 +245 381 495 20 557 917 90 0 747 +246 95 234 10 158 518 90 0 819 +247 22 33 10 589 949 90 0 448 +248 435 268 10 947 1307 90 0 826 +249 135 293 30 215 575 90 0 20 +250 439 266 10 189 549 90 0 829 +251 269 402 20 438 798 90 0 455 +252 267 400 10 627 987 90 0 86 +253 473 196 -10 423 783 90 952 0 +254 445 237 10 195 555 90 0 779 +255 461 284 10 213 573 90 0 233 +256 167 339 -30 499 859 90 39 0 +257 26 43 -30 305 665 90 564 0 +258 101 386 20 202 562 90 0 124 +259 342 54 20 405 765 90 0 319 +260 243 399 -10 630 990 90 626 0 +261 288 44 -20 494 854 90 38 0 +262 274 48 10 206 566 90 0 366 +263 360 184 -20 696 1056 90 660 0 +264 23 67 -10 944 1304 90 236 0 +265 6 296 -30 715 1075 90 126 0 +266 249 258 30 762 1122 0 0 1030 +267 421 415 30 237 597 90 0 45 +268 319 468 10 228 588 90 0 210 +269 50 438 20 572 932 90 0 579 +270 440 61 30 822 1182 0 0 1036 +271 17 65 20 482 842 90 0 215 +272 323 118 20 156 516 90 0 108 +273 402 281 -30 725 1085 90 776 0 +274 71 153 20 601 961 90 0 869 +275 52 432 -20 636 996 90 91 0 +276 378 199 -30 602 962 90 726 0 +277 238 204 20 420 780 90 0 286 +278 208 184 20 78 438 90 0 191 +279 376 195 -20 416 776 90 801 0 +280 473 475 10 972 1332 90 0 43 +281 215 395 -20 717 1077 90 761 0 +282 123 222 -20 223 583 90 40 0 +283 436 241 -10 1122 1482 90 757 0 +284 70 100 -20 975 1335 90 428 0 +285 73 328 20 193 553 90 0 946 +286 241 205 -20 513 873 90 277 0 +287 250 405 -30 157 517 90 597 0 +288 483 14 -20 518 878 90 727 0 +289 466 287 10 316 676 0 0 1027 +290 467 114 10 1011 1371 0 0 1008 +291 120 159 10 161 521 90 0 159 +292 408 84 -10 599 959 90 306 0 +293 413 217 20 166 526 90 0 446 +294 338 142 40 139 499 90 0 930 +295 483 457 20 593 953 0 0 1015 +296 479 169 -30 624 984 90 11 0 +297 95 224 -30 909 1269 90 778 0 +298 122 216 -10 319 679 90 968 0 +299 477 179 -10 237 597 90 890 0 +300 406 99 20 222 582 90 0 514 +301 44 47 -30 289 649 90 209 0 +302 487 450 -10 781 1141 90 575 0 +303 172 488 -20 250 610 90 208 0 +304 460 374 20 612 972 90 0 833 +305 279 138 40 121 481 90 0 589 +306 338 147 10 135 495 90 0 292 +307 395 295 -20 526 886 90 231 0 +308 195 185 20 187 547 90 0 979 +309 463 194 20 220 580 90 0 468 +310 30 72 -10 1092 1452 90 500 0 +311 244 254 -20 575 935 90 22 0 +312 317 261 20 256 616 90 0 566 +313 67 108 -10 231 591 90 616 0 +314 442 310 20 491 851 90 0 637 +315 63 336 -20 661 1021 90 967 0 +316 109 107 20 206 566 90 0 678 +317 100 387 10 294 654 90 0 385 +318 494 94 10 483 843 90 0 961 +319 343 49 -20 500 860 90 259 0 +320 40 52 40 388 748 90 0 360 +321 319 124 20 253 613 90 0 137 +322 94 97 20 218 578 90 0 876 +323 476 94 20 274 634 90 0 877 +324 283 47 -40 216 576 90 859 0 +325 398 325 -20 628 988 90 620 0 +326 460 13 -20 317 677 90 955 0 +327 305 107 20 540 900 90 0 1000 +328 188 12 30 245 605 90 0 624 +329 136 290 20 122 482 90 0 138 +330 439 268 -10 853 1213 90 157 0 +331 112 467 10 351 711 90 0 944 +332 181 469 20 322 682 0 0 1004 +333 358 18 10 346 706 90 0 659 +334 459 10 -40 410 770 90 139 0 +335 199 268 20 146 506 90 0 689 +336 436 237 20 186 546 0 0 1034 +337 318 280 20 172 532 90 0 439 +338 64 99 -20 698 1058 90 895 0 +339 394 333 20 349 709 90 0 56 +340 366 93 -20 782 1142 90 26 0 +341 95 391 -30 761 1121 90 4 0 +342 391 425 -10 696 1056 90 555 0 +343 344 146 -20 332 692 90 766 0 +344 198 12 10 427 787 90 0 594 +345 186 472 -20 418 778 90 106 0 +346 390 408 30 305 665 90 0 67 +347 19 43 20 1051 1411 90 0 750 +348 307 108 -20 632 992 90 774 0 +349 59 457 -10 649 1009 90 170 0 +350 49 451 20 284 644 90 0 729 +351 125 39 20 245 605 90 0 749 +352 61 147 40 218 578 90 0 465 +353 317 123 20 345 705 90 0 163 +354 392 426 -10 514 874 90 494 0 +355 237 213 -20 702 1062 90 5 0 +356 71 333 10 197 557 90 0 393 +357 304 97 20 257 617 90 0 25 +358 196 462 -20 799 1159 90 134 0 +359 224 191 -20 156 516 90 488 0 +360 37 51 -40 481 841 90 320 0 +361 491 25 -10 804 1164 90 432 0 +362 270 401 20 152 512 90 0 485 +363 474 461 30 307 667 90 0 68 +364 66 448 10 270 630 90 0 240 +365 337 241 20 188 548 90 0 996 +366 269 46 -10 584 944 90 262 0 +367 22 41 10 957 1317 90 0 83 +368 198 271 20 239 599 90 0 654 +369 287 43 -20 402 762 90 212 0 +370 446 63 -10 543 903 90 154 0 +371 200 229 30 148 508 90 0 424 +372 48 72 30 560 920 90 0 894 +373 465 142 -20 243 603 90 867 0 +374 123 155 -10 996 1356 90 593 0 +375 16 497 -10 901 1261 90 669 0 +376 220 319 -10 824 1184 90 13 0 +377 484 171 -10 528 888 90 546 0 +378 55 431 -30 543 903 90 9 0 +379 428 24 -10 942 1302 90 769 0 +380 80 342 10 193 553 90 0 431 +381 16 68 -10 389 749 90 834 0 +382 124 56 20 231 591 90 0 190 +383 95 218 -20 720 1080 90 742 0 +384 481 26 30 321 681 90 0 839 +385 145 434 -10 308 668 90 317 0 +386 335 57 30 210 570 90 0 792 +387 26 490 10 1046 1406 90 0 812 +388 324 127 30 143 503 90 0 504 +389 109 114 -30 670 1030 90 773 0 +390 72 148 20 205 565 90 0 870 +391 220 392 -10 813 1173 90 936 0 +392 442 243 -20 844 1204 90 651 0 +393 69 336 -10 293 653 90 356 0 +394 131 226 20 121 481 90 0 116 +395 150 204 20 487 847 90 0 519 +396 423 217 -30 637 997 90 997 0 +397 419 459 -10 631 991 90 440 0 +398 285 163 -30 567 927 90 477 0 +399 203 7 20 891 1251 90 0 82 +400 54 445 -20 383 743 90 571 0 +401 109 463 -20 809 1169 90 972 0 +402 355 180 30 132 492 90 0 456 +403 13 455 10 313 673 90 0 413 +404 165 337 -20 217 577 90 125 0 +405 314 124 20 626 986 90 0 548 +406 9 124 20 271 631 90 0 502 +407 3 292 20 251 611 90 0 2 +408 16 462 10 781 1141 90 0 614 +409 189 464 -20 701 1061 90 535 0 +410 288 154 -30 288 648 90 478 0 +411 90 296 20 166 526 90 0 865 +412 138 438 20 682 1042 90 0 160 +413 13 459 -10 502 862 90 403 0 +414 461 8 20 604 964 90 0 430 +415 96 97 20 217 577 90 0 569 +416 68 99 10 883 1243 90 0 878 +417 146 205 -10 210 570 90 745 0 +418 117 152 -20 717 1077 90 560 0 +419 481 96 20 372 732 90 0 450 +420 338 260 20 470 830 90 0 951 +421 285 44 10 310 670 90 0 838 +422 111 464 -30 626 986 90 158 0 +423 468 291 -10 593 953 90 950 0 +424 148 206 -30 302 662 90 371 0 +425 184 464 -30 223 583 90 81 0 +426 197 11 10 518 878 90 0 156 +427 396 410 -20 674 1034 90 451 0 +428 133 53 20 514 874 90 0 284 +429 132 30 20 721 1081 0 0 1025 +430 464 13 -20 700 1060 90 414 0 +431 100 394 -10 856 1216 90 380 0 +432 483 22 10 329 689 90 0 361 +433 93 235 -10 801 1161 90 912 0 +434 174 26 -10 891 1251 90 484 0 +435 436 264 20 186 546 90 0 629 +436 24 492 10 1043 1403 90 0 845 +437 406 94 10 223 583 90 0 825 +438 234 246 -10 380 740 90 988 0 +439 315 287 -20 543 903 90 337 0 +440 408 453 10 438 798 90 0 397 +441 128 225 10 124 484 90 0 189 +442 226 191 20 248 608 90 0 498 +443 391 407 10 397 757 90 0 206 +444 198 264 20 615 975 90 0 140 +445 179 7 20 717 1077 90 0 517 +446 425 215 -20 544 904 90 293 0 +447 483 27 -10 1052 1412 90 54 0 +448 22 40 -10 866 1226 90 247 0 +449 479 176 20 240 600 90 0 164 +450 476 102 -20 651 1011 90 419 0 +451 386 405 20 206 566 90 0 427 +452 22 38 -10 774 1134 90 113 0 +453 440 241 -10 936 1296 90 101 0 +454 182 14 -30 909 1269 90 92 0 +455 266 405 -20 532 892 90 251 0 +456 357 181 -30 224 584 90 402 0 +457 395 332 10 441 801 90 0 480 +458 423 290 10 179 539 90 0 611 +459 104 28 -10 552 912 90 50 0 +460 131 56 10 331 691 90 0 907 +461 111 110 -20 390 750 90 57 0 +462 97 93 20 315 675 90 0 698 +463 90 274 -20 254 614 90 813 0 +464 214 394 -40 626 986 90 656 0 +465 6 114 -40 652 1012 90 352 0 +466 375 191 30 322 682 90 0 41 +467 356 21 20 253 613 90 0 730 +468 466 165 -20 596 956 90 309 0 +469 415 223 -10 1100 1460 90 733 0 +470 397 20 20 275 635 90 0 93 +471 241 403 -30 535 895 90 506 0 +472 69 334 30 201 561 90 0 474 +473 152 210 -30 105 465 90 218 0 +474 67 335 -30 477 837 90 472 0 +475 126 30 -10 347 707 90 127 0 +476 390 423 10 222 582 90 0 558 +477 285 162 30 476 836 90 0 398 +478 285 158 30 193 553 90 0 410 +479 406 96 20 219 579 90 0 746 +480 459 374 -10 703 1063 90 457 0 +481 67 109 20 233 593 90 0 74 +482 468 475 -10 313 673 90 837 0 +483 438 31 10 288 648 90 0 700 +484 168 24 10 613 973 90 0 434 +485 267 394 -20 814 1174 90 362 0 +486 406 450 -20 254 614 90 962 0 +487 460 288 10 213 573 90 0 85 +488 224 203 20 53 413 90 0 359 +489 21 487 10 425 785 0 0 1001 +490 21 488 10 516 876 90 0 16 +491 87 217 -30 441 801 90 66 0 +492 67 452 30 272 632 90 0 216 +493 119 223 -20 699 1059 90 703 0 +494 398 428 10 417 777 90 0 354 +495 344 262 -20 373 733 90 702 0 +496 390 301 10 240 600 90 0 676 +497 167 27 30 331 691 90 0 975 +498 236 247 -20 287 647 90 442 0 +499 313 119 30 531 891 90 0 983 +500 13 51 10 1065 1425 90 0 310 +501 200 13 -10 245 605 90 879 0 +502 0 120 -20 282 642 90 406 0 +503 202 4 10 797 1157 90 0 98 +504 343 144 -30 146 506 90 388 0 +505 94 383 10 481 841 90 0 142 +506 250 411 30 343 703 90 0 471 +507 464 134 -10 897 1257 90 551 0 +508 443 237 20 193 553 90 0 847 +509 4 114 -10 560 920 90 927 0 +510 169 336 -10 685 1045 90 857 0 +511 200 178 20 89 449 90 0 244 +512 412 453 10 532 892 90 0 123 +513 121 151 -20 902 1262 90 953 0 +514 403 93 -20 976 1336 90 300 0 +515 399 301 -10 429 789 90 1 0 +516 97 387 -10 666 1026 90 44 0 +517 176 8 -20 811 1171 90 445 0 +518 62 326 -10 761 1121 90 688 0 +519 151 207 -20 580 940 90 395 0 +520 299 98 -10 162 522 90 32 0 +521 334 240 -20 374 734 90 120 0 +522 92 270 -20 812 1172 90 604 0 +523 444 269 20 389 749 0 0 1020 +524 132 223 -30 693 1053 90 23 0 +525 428 25 20 1033 1393 0 0 1046 +526 413 421 -20 618 978 90 104 0 +527 382 498 -30 464 824 90 973 0 +528 391 429 -10 320 680 90 849 0 +529 398 97 -20 212 572 90 780 0 +530 192 265 -20 519 879 90 52 0 +531 438 26 10 295 655 90 0 184 +532 44 79 10 267 627 0 0 1007 +533 137 290 -30 119 479 90 581 0 +534 446 319 30 210 570 90 0 960 +535 175 487 20 248 608 90 0 409 +536 26 45 30 303 663 90 0 635 +537 147 435 -30 400 760 90 652 0 +538 111 459 -20 994 1354 90 553 0 +539 472 132 -10 616 976 90 913 0 +540 349 158 -20 892 1252 90 917 0 +541 86 268 10 532 892 90 0 886 +542 415 216 10 171 531 90 0 721 +543 121 218 20 132 492 90 0 545 +544 210 185 20 76 436 0 0 1019 +545 98 215 -20 155 515 90 543 0 +546 484 174 10 340 700 90 0 377 +547 328 458 10 795 1155 0 0 1022 +548 313 126 -20 718 1078 90 405 0 +549 390 415 20 886 1246 90 0 685 +550 459 17 -20 886 1246 90 645 0 +551 481 124 10 358 718 90 0 507 +552 386 414 10 956 1316 0 0 1006 +553 116 466 20 254 614 90 0 538 +554 468 295 -10 781 1141 90 755 0 +555 391 426 10 605 965 90 0 342 +556 408 279 -20 535 895 90 69 0 +557 15 68 10 298 658 90 0 630 +558 392 424 -10 787 1147 90 476 0 +559 88 95 20 505 865 90 0 805 +560 116 151 20 625 985 90 0 418 +561 240 250 10 192 552 90 0 699 +562 123 159 20 156 516 90 0 627 +563 89 290 20 165 525 90 0 681 +564 39 50 30 296 656 90 0 257 +565 359 179 -20 317 677 90 3 0 +566 338 257 -20 563 923 90 312 0 +567 92 236 20 893 1253 0 0 1024 +568 413 417 -10 991 1351 90 24 0 +569 91 101 -20 693 1053 90 415 0 +570 55 449 20 278 638 90 0 79 +571 57 425 20 260 620 90 0 400 +572 465 287 -20 407 767 90 899 0 +573 320 280 10 80 440 90 0 785 +574 322 468 20 420 780 90 0 897 +575 483 458 10 502 862 90 0 302 +576 312 267 10 722 1082 0 0 1041 +577 139 291 10 118 478 0 0 1032 +578 388 408 10 213 573 0 0 1028 +579 110 459 -20 903 1263 90 269 0 +580 459 372 -10 519 879 90 810 0 +581 204 269 30 49 409 90 0 533 +582 407 98 10 218 578 90 0 719 +583 335 256 -10 746 1106 90 162 0 +584 471 484 10 415 775 90 0 60 +585 339 244 30 95 455 0 0 1035 +586 89 272 -20 347 707 90 999 0 +587 488 96 -20 761 1121 90 806 0 +588 316 286 30 452 812 90 0 751 +589 235 50 -40 675 1035 90 305 0 +590 316 258 20 163 523 90 0 21 +591 425 288 -20 456 816 90 798 0 +592 213 397 -20 532 892 90 183 0 +593 113 156 10 439 799 90 0 374 +594 199 9 -10 702 1062 90 344 0 +595 463 167 -20 503 863 90 908 0 +596 129 27 -40 533 893 90 784 0 +597 248 404 30 154 514 90 0 287 +598 405 276 -20 629 989 90 228 0 +599 400 288 30 154 514 90 0 141 +600 61 156 -30 317 677 90 77 0 +601 393 20 -10 1026 1386 90 693 0 +602 484 177 20 247 607 90 0 759 +603 108 116 -20 762 1122 90 705 0 +604 112 217 20 233 593 90 0 522 +605 389 404 10 207 567 90 0 7 +606 102 391 20 950 1310 0 0 1002 +607 434 26 10 389 749 90 0 724 +608 488 26 30 988 1348 90 0 994 +609 477 120 -20 817 1177 90 982 0 +610 126 220 -20 505 865 90 119 0 +611 439 310 -10 198 558 90 458 0 +612 212 319 -20 80 440 90 130 0 +613 320 283 -10 266 626 90 638 0 +614 17 459 -10 1057 1417 90 408 0 +615 236 213 20 39 399 90 0 808 +616 68 108 10 230 590 90 0 313 +617 390 294 -30 712 1072 90 166 0 +618 275 42 30 393 753 90 0 632 +619 423 214 -10 452 812 90 167 0 +620 460 367 20 241 601 90 0 325 +621 272 402 10 155 515 90 0 213 +622 478 102 10 559 919 90 0 753 +623 400 260 -20 150 510 90 796 0 +624 181 6 -30 535 895 90 328 0 +625 470 475 30 314 674 90 0 809 +626 245 408 10 439 799 90 0 260 +627 93 96 -20 220 580 90 562 0 +628 218 318 -10 732 1092 90 78 0 +629 441 265 -20 192 552 90 435 0 +630 21 64 -10 667 1027 90 557 0 +631 356 23 20 250 610 90 0 229 +632 267 44 -30 491 851 90 618 0 +633 277 50 10 201 561 90 0 929 +634 182 4 -20 443 803 90 200 0 +635 26 36 -30 494 854 90 536 0 +636 384 491 -10 743 1103 90 793 0 +637 418 290 -20 1017 1377 90 314 0 +638 321 277 10 75 435 90 0 613 +639 358 16 30 438 798 90 0 110 +640 389 334 20 164 524 90 0 748 +641 48 78 -20 836 1196 90 672 0 +642 24 68 20 1084 1444 90 0 234 +643 206 225 -10 245 605 90 663 0 +644 290 141 -30 497 857 90 686 0 +645 439 15 20 498 858 90 0 550 +646 359 182 20 604 964 90 0 207 +647 413 287 -10 1203 1563 90 117 0 +648 230 49 20 201 561 0 0 1033 +649 407 280 -20 444 804 90 734 0 +650 459 295 -30 1061 1421 90 881 0 +651 468 199 20 519 879 90 0 392 +652 101 384 30 200 560 90 0 537 +653 170 26 -20 706 1066 90 984 0 +654 197 270 -20 331 691 90 368 0 +655 415 289 -20 169 529 90 10 0 +656 203 390 40 154 514 90 0 464 +657 443 272 10 665 1025 90 0 863 +658 210 391 30 146 506 90 0 771 +659 363 22 -10 814 1174 90 333 0 +660 352 176 20 126 486 90 0 263 +661 212 223 -30 615 975 90 956 0 +662 8 120 -20 1020 1380 90 871 0 +663 244 250 10 7 367 90 0 643 +664 18 484 10 329 689 90 0 49 +665 379 82 -40 675 1035 90 243 0 +666 84 346 -10 946 1306 90 105 0 +667 233 207 10 46 406 90 0 926 +668 344 62 -20 1061 1421 90 145 0 +669 20 489 10 698 1058 90 0 375 +670 361 181 -20 512 872 90 193 0 +671 174 494 10 348 708 90 0 851 +672 49 76 20 744 1104 90 0 641 +673 390 325 30 726 1086 90 0 735 +674 7 118 -10 837 1197 90 114 0 +675 107 26 10 368 728 90 0 872 +676 312 270 -10 815 1175 90 496 0 +677 399 102 -20 502 862 90 965 0 +678 109 108 -20 297 657 90 316 0 +679 115 218 10 140 500 90 0 880 +680 88 287 -30 738 1098 90 27 0 +681 54 424 -20 262 622 90 563 0 +682 125 32 30 254 614 90 0 235 +683 199 12 -20 336 696 90 764 0 +684 457 374 10 795 1155 0 0 1021 +685 391 413 -20 861 1221 90 549 0 +686 304 102 30 352 712 90 0 644 +687 391 293 -10 621 981 90 70 0 +688 66 336 10 568 928 90 0 518 +689 132 291 -20 587 947 90 335 0 +690 18 462 -20 873 1233 90 970 0 +691 347 62 10 968 1328 90 0 874 +692 466 142 10 334 694 90 0 133 +693 389 17 10 841 1201 90 0 601 +694 342 254 10 93 453 90 0 112 +695 92 223 10 815 1175 0 0 1037 +696 404 83 -20 693 1053 90 204 0 +697 290 46 20 684 1044 90 0 814 +698 95 92 -20 408 768 90 462 0 +699 200 265 -10 707 1067 90 561 0 +700 435 16 -10 682 1042 90 483 0 +701 25 499 -40 1000 1360 90 731 0 +702 319 260 20 348 708 90 0 495 +703 116 225 20 606 966 90 0 493 +704 402 284 30 160 520 90 0 768 +705 108 105 20 202 562 90 0 603 +706 386 13 10 652 1012 90 0 762 +707 472 129 -40 252 612 90 175 0 +708 132 57 20 239 599 90 0 172 +709 43 71 -20 373 733 90 991 0 +710 493 91 30 390 750 90 0 831 +711 12 451 20 311 671 0 0 1014 +712 201 188 10 374 734 90 0 732 +713 60 428 20 918 1278 90 0 185 +714 243 248 -10 99 459 90 36 0 +715 230 197 -10 437 797 90 964 0 +716 389 11 20 558 918 90 0 875 +717 401 281 -20 816 1176 90 107 0 +718 459 14 20 315 675 90 0 171 +719 411 95 -10 318 678 90 582 0 +720 0 297 10 528 888 90 0 62 +721 476 196 -10 330 690 90 542 0 +722 458 16 20 313 673 90 0 853 +723 92 230 20 344 704 90 0 174 +724 432 24 -10 848 1208 90 607 0 +725 215 317 10 75 435 90 0 971 +726 371 192 30 134 494 90 0 276 +727 481 20 20 422 782 90 0 288 +728 152 207 -10 671 1031 90 90 0 +729 14 459 -20 411 771 90 350 0 +730 361 17 -20 625 985 90 467 0 +731 8 497 40 803 1163 90 0 701 +732 206 186 -10 743 1103 90 712 0 +733 421 218 10 729 1089 90 0 469 +734 402 264 20 152 512 90 0 649 +735 388 325 -30 818 1178 90 673 0 +736 35 304 30 221 581 90 0 911 +737 321 263 20 532 892 90 0 873 +738 444 313 -20 307 667 90 976 0 +739 188 462 -30 609 969 90 149 0 +740 400 103 10 411 771 0 0 1017 +741 418 221 -20 1006 1366 90 15 0 +742 112 219 20 325 685 90 0 383 +743 408 452 10 347 707 90 0 939 +744 30 301 -20 513 873 90 986 0 +745 205 228 10 50 410 90 0 417 +746 407 88 -20 879 1239 90 479 0 +747 380 489 -20 934 1294 90 245 0 +748 395 331 -20 532 892 90 640 0 +749 133 26 -20 627 987 90 351 0 +750 21 68 -20 1036 1396 90 347 0 +751 313 282 -30 638 998 90 588 0 +752 53 440 10 478 838 90 0 882 +753 458 130 -10 995 1355 90 622 0 +754 437 15 -20 590 950 90 14 0 +755 400 286 10 154 514 90 0 554 +756 346 144 10 515 875 90 0 169 +757 440 244 10 661 1021 90 0 283 +758 280 162 30 92 452 90 0 824 +759 488 173 -20 434 794 90 602 0 +760 326 118 10 152 512 90 0 921 +761 207 400 20 346 706 90 0 281 +762 391 18 -10 933 1293 90 706 0 +763 37 55 -20 575 935 90 777 0 +764 204 15 20 239 599 90 0 683 +765 173 28 -20 983 1343 90 48 0 +766 343 148 20 240 600 90 0 343 +767 231 43 -20 300 660 90 197 0 +768 445 273 -30 573 933 90 704 0 +769 432 27 10 664 1024 90 0 379 +770 439 305 30 587 947 90 0 848 +771 208 396 -30 251 611 90 658 0 +772 249 407 -40 249 609 90 238 0 +773 107 112 30 577 937 90 0 389 +774 279 159 20 97 457 90 0 348 +775 376 494 30 274 634 90 0 188 +776 403 262 30 340 700 90 0 273 +777 41 47 20 291 651 90 0 763 +778 96 213 30 160 520 90 0 297 +779 461 167 -10 321 681 90 254 0 +780 391 99 20 206 566 90 0 529 +781 116 221 -20 419 779 90 143 0 +782 165 343 -10 405 765 90 933 0 +783 388 334 20 161 521 90 0 223 +784 130 57 40 227 587 90 0 596 +785 422 409 -10 234 594 90 573 0 +786 66 156 10 505 865 90 0 65 +787 485 86 -10 286 646 90 957 0 +788 389 428 20 228 588 90 0 115 +789 117 467 10 254 614 0 0 1044 +790 475 477 -30 880 1240 90 993 0 +791 429 27 -20 1089 1449 90 177 0 +792 339 60 -30 209 569 90 386 0 +793 381 494 10 648 1008 90 0 636 +794 218 321 20 548 908 90 0 817 +795 64 101 -10 515 875 90 148 0 +796 343 254 20 184 544 90 0 623 +797 478 464 10 312 672 90 0 180 +798 423 286 20 273 633 90 0 591 +799 198 9 -10 611 971 90 800 0 +800 225 196 10 59 419 90 0 799 +801 374 190 20 138 498 90 0 279 +802 462 14 -20 792 1152 90 100 0 +803 347 54 10 690 1050 90 0 128 +804 231 195 20 344 704 90 0 893 +805 72 96 -20 1069 1429 90 559 0 +806 489 87 20 295 655 90 0 587 +807 443 313 -30 398 758 90 940 0 +808 233 204 -20 49 409 90 615 0 +809 477 483 -30 601 961 90 625 0 +810 459 368 10 240 600 90 0 580 +811 95 277 -30 909 1269 90 920 0 +812 16 460 -10 966 1326 90 387 0 +813 100 266 20 150 510 90 0 463 +814 288 53 -20 781 1141 90 697 0 +815 211 386 20 141 501 90 0 168 +816 144 439 -20 586 946 90 823 0 +817 224 314 -20 920 1280 90 794 0 +818 79 291 -20 364 724 90 840 0 +819 95 235 -10 155 515 90 246 0 +820 7 123 30 274 634 0 0 1009 +821 91 217 -10 535 895 90 8 0 +822 105 27 -30 460 820 90 842 0 +823 101 385 20 201 561 90 0 816 +824 238 210 -30 609 969 90 758 0 +825 439 67 -10 263 623 90 437 0 +826 435 267 -10 1038 1398 90 248 0 +827 443 64 -20 637 997 90 868 0 +828 92 234 -30 710 1070 90 129 0 +829 450 265 -10 291 651 90 250 0 +830 102 27 20 644 1004 90 0 903 +831 492 94 -30 575 935 90 710 0 +832 440 63 20 730 1090 90 0 146 +833 453 367 -20 893 1253 90 304 0 +834 15 69 10 296 656 90 0 381 +835 489 17 10 615 975 90 0 858 +836 335 255 -10 85 445 90 224 0 +837 419 418 10 244 604 90 0 482 +838 292 41 -10 589 949 90 421 0 +839 489 27 -30 896 1256 90 384 0 +840 96 270 20 157 517 90 0 818 +841 461 369 -20 426 786 90 959 0 +842 105 22 30 270 630 90 0 822 +843 479 121 -30 543 903 90 94 0 +844 207 223 10 430 790 0 0 1026 +845 17 458 -10 1062 1422 90 436 0 +846 186 7 20 348 708 90 0 201 +847 465 168 -20 689 1049 90 508 0 +848 416 288 -30 1110 1470 90 770 0 +849 388 418 10 217 577 90 0 528 +850 92 233 -10 619 979 90 943 0 +851 179 492 -10 535 895 90 671 0 +852 132 55 -20 422 782 90 122 0 +853 485 24 -20 326 686 90 722 0 +854 388 331 20 160 520 90 0 861 +855 217 323 -10 268 628 90 904 0 +856 281 164 20 91 451 90 0 900 +857 169 340 10 591 951 90 0 510 +858 491 20 -10 709 1069 90 835 0 +859 279 42 40 210 570 90 0 324 +860 439 243 20 1029 1389 90 0 221 +861 391 334 -20 256 616 90 854 0 +862 96 244 -20 1176 1536 90 34 0 +863 441 273 -10 757 1117 90 657 0 +864 477 478 -20 787 1147 90 990 0 +865 56 434 -20 730 1090 90 411 0 +866 12 463 20 596 956 90 0 887 +867 458 164 20 226 586 90 0 373 +868 446 65 20 361 721 90 0 827 +869 71 156 -20 694 1054 90 274 0 +870 65 153 -20 412 772 90 390 0 +871 8 118 20 928 1288 90 0 662 +872 102 29 -10 736 1096 90 675 0 +873 315 265 -20 628 988 90 737 0 +874 343 62 -10 1152 1512 90 691 0 +875 384 16 -20 746 1106 90 716 0 +876 67 105 -20 420 780 90 322 0 +877 478 118 -20 909 1269 90 323 0 +878 73 101 -10 1143 1503 90 416 0 +879 200 14 10 241 601 90 0 501 +880 114 225 -10 514 874 90 679 0 +881 460 293 30 969 1329 90 0 650 +882 51 447 -10 289 649 90 752 0 +883 418 295 -20 922 1282 90 55 0 +884 282 139 20 115 475 0 0 1031 +885 477 122 -40 725 1085 90 942 0 +886 91 266 -10 628 988 90 541 0 +887 16 463 -20 690 1050 90 866 0 +888 228 199 10 529 889 90 0 923 +889 435 20 20 776 1136 0 0 1038 +890 467 195 10 223 583 90 0 299 +891 469 132 10 709 1069 90 0 892 +892 465 136 -10 805 1165 90 891 0 +893 246 255 -20 668 1028 90 804 0 +894 49 75 -30 653 1013 90 372 0 +895 66 98 20 790 1150 90 0 338 +896 166 32 10 233 593 90 0 935 +897 326 466 -20 605 965 90 574 0 +898 202 186 -10 466 826 90 211 0 +899 467 285 20 224 584 90 0 572 +900 290 136 -20 402 762 90 856 0 +901 341 58 10 219 579 90 0 165 +902 121 219 20 132 492 90 0 150 +903 107 35 -20 834 1194 90 830 0 +904 216 319 10 174 534 90 0 855 +905 134 288 20 771 1131 90 0 225 +906 89 270 10 439 799 90 0 910 +907 136 52 -10 608 968 90 460 0 +908 462 167 20 412 772 90 0 595 +909 340 54 -10 313 673 90 941 0 +910 80 286 -10 459 819 90 906 0 +911 38 301 -30 611 971 90 736 0 +912 25 307 10 324 684 90 0 433 +913 470 139 10 519 879 90 0 539 +914 270 400 10 151 511 0 0 1040 +915 204 187 30 650 1010 0 0 1016 +916 460 171 -30 785 1145 90 995 0 +917 399 106 20 777 1137 90 0 540 +918 197 267 10 424 784 90 0 59 +919 77 350 -10 848 1208 90 97 0 +920 91 231 30 435 795 90 0 811 +921 398 103 -10 593 953 90 760 0 +922 35 303 20 221 581 90 0 181 +923 231 204 -10 625 985 90 888 0 +924 311 266 10 63 423 0 0 1039 +925 416 420 -20 525 885 90 132 0 +926 231 203 -10 142 502 90 667 0 +927 4 116 10 468 828 90 0 509 +928 417 217 30 264 624 90 0 992 +929 268 52 -10 861 1221 90 633 0 +930 345 144 -40 424 784 90 294 0 +931 368 85 30 202 562 90 0 989 +932 441 65 -10 266 626 90 35 0 +933 201 270 10 52 412 90 0 782 +934 0 293 -10 434 794 90 102 0 +935 167 24 -10 522 882 90 896 0 +936 186 464 10 516 876 90 0 391 +937 7 292 10 246 606 90 0 53 +938 80 290 10 272 632 90 0 61 +939 405 455 -10 736 1096 90 743 0 +940 439 312 30 198 558 90 0 807 +941 300 108 10 150 510 90 0 909 +942 478 121 40 634 994 90 0 885 +943 92 232 10 252 612 90 0 850 +944 111 463 -10 717 1077 90 331 0 +945 132 294 20 308 668 90 0 46 +946 134 285 -20 956 1316 90 285 0 +947 316 284 -20 360 720 90 155 0 +948 56 428 20 268 628 90 0 96 +949 232 47 10 203 563 90 0 198 +950 466 291 10 501 861 90 0 423 +951 341 257 -20 277 637 90 420 0 +952 420 213 10 359 719 90 0 253 +953 116 152 20 534 894 90 0 513 +954 163 337 -40 125 485 90 981 0 +955 440 7 20 309 669 90 0 326 +956 208 222 30 521 881 90 0 661 +957 485 95 10 281 641 90 0 787 +958 97 385 -20 387 747 90 17 0 +959 462 367 20 333 693 90 0 841 +960 455 365 -30 235 595 90 534 0 +961 492 95 -10 666 1026 90 318 0 +962 405 450 20 253 613 90 0 486 +963 371 193 20 133 493 0 0 1018 +964 234 202 10 235 595 90 0 715 +965 404 103 20 317 677 90 0 677 +966 24 41 -20 399 759 90 121 0 +967 67 334 20 386 746 90 0 315 +968 207 227 10 48 408 90 0 298 +969 277 403 10 250 610 90 0 118 +970 15 457 20 318 678 90 0 690 +971 217 319 -10 640 1000 90 725 0 +972 111 467 20 442 802 90 0 401 +973 378 493 30 277 637 90 0 527 +974 112 465 -10 534 894 90 103 0 +975 173 25 -30 799 1159 90 497 0 +976 421 292 20 176 536 90 0 738 +977 74 146 30 204 564 0 0 1012 +978 178 491 -20 443 803 90 226 0 +979 204 185 -20 558 918 90 308 0 +980 319 470 10 233 593 90 0 202 +981 163 331 40 118 478 90 0 954 +982 470 125 20 253 613 90 0 609 +983 315 121 -30 438 798 90 499 0 +984 166 34 20 231 591 90 0 653 +985 284 140 40 115 475 90 0 136 +986 85 288 20 177 537 90 0 744 +987 376 190 30 230 590 90 0 31 +988 238 203 10 329 689 90 0 438 +989 399 104 -30 685 1045 90 931 0 +990 472 481 20 322 682 90 0 864 +991 46 74 20 467 827 90 0 709 +992 401 255 -30 531 891 90 928 0 +993 475 480 30 694 1054 90 0 790 +994 485 27 -30 1051 1411 90 608 0 +995 476 174 30 719 1079 90 0 916 +996 330 242 -20 469 829 90 365 0 +997 332 249 30 82 442 90 0 396 +998 375 80 10 394 754 0 0 1042 +999 94 235 20 156 516 90 0 586 +1000 287 144 -20 681 1041 90 327 0 +1001 21 487 -10 425 785 90 489 0 +1002 102 391 -20 950 1310 90 606 0 +1003 357 26 -20 1002 1362 90 42 0 +1004 181 469 -20 322 682 90 332 0 +1005 24 65 -10 760 1120 90 80 0 +1006 386 414 -10 956 1316 90 552 0 +1007 44 79 -10 267 627 90 532 0 +1008 467 114 -10 1011 1371 90 290 0 +1009 7 123 -30 274 634 90 820 0 +1010 387 488 -20 837 1197 90 147 0 +1011 394 23 -20 1106 1466 90 232 0 +1012 74 146 -30 204 564 90 977 0 +1013 57 432 -10 823 1183 90 75 0 +1014 12 451 -20 311 671 90 711 0 +1015 483 457 -20 593 953 90 295 0 +1016 204 187 -30 650 1010 90 915 0 +1017 400 103 -10 411 771 90 740 0 +1018 371 193 -20 133 493 90 963 0 +1019 210 185 -20 76 436 90 544 0 +1020 444 269 -20 389 749 90 523 0 +1021 457 374 -10 795 1155 90 684 0 +1022 328 458 -10 795 1155 90 547 0 +1023 417 218 -10 913 1273 90 73 0 +1024 92 236 -20 893 1253 90 567 0 +1025 132 30 -20 721 1081 90 429 0 +1026 207 223 -10 430 790 90 844 0 +1027 466 287 -10 316 676 90 289 0 +1028 388 408 -10 213 573 90 578 0 +1029 478 99 -10 466 826 90 179 0 +1030 249 258 -30 762 1122 90 266 0 +1031 282 139 -20 115 475 90 884 0 +1032 139 291 -10 118 478 90 577 0 +1033 230 49 -20 201 561 90 648 0 +1034 436 237 -20 186 546 90 336 0 +1035 339 244 -30 95 455 90 585 0 +1036 440 61 -30 822 1182 90 270 0 +1037 92 223 -10 815 1175 90 695 0 +1038 435 20 -20 776 1136 90 889 0 +1039 311 266 -10 63 423 90 924 0 +1040 270 400 -10 151 511 90 914 0 +1041 312 267 -10 722 1082 90 576 0 +1042 375 80 -10 394 754 90 998 0 +1043 154 207 -20 854 1214 90 186 0 +1044 117 467 -10 254 614 90 789 0 +1045 90 285 -40 831 1191 90 153 0 +1046 428 25 -20 1033 1393 90 525 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2101.txt b/jsprit-instances/instances/lilim/1000/LC2101.txt new file mode 100644 index 00000000..f2b840f9 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2101.txt @@ -0,0 +1,1016 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -10 2662 2822 90 247 0 +2 266 231 -10 1936 2096 90 921 0 +3 89 284 -20 1436 1596 90 961 0 +4 430 298 -10 1562 1722 90 375 0 +5 435 77 20 1002 1162 0 0 1012 +6 25 293 -30 2964 3124 90 7 0 +7 43 269 30 687 847 90 0 6 +8 216 117 10 429 589 90 0 917 +9 294 437 30 661 821 90 0 810 +10 79 479 30 998 1158 90 0 125 +11 365 18 20 2213 2373 90 0 381 +12 225 125 20 127 287 90 0 274 +13 448 103 -10 3343 3503 90 757 0 +14 143 266 10 402 562 90 0 101 +15 252 347 -20 2911 3071 90 764 0 +16 403 390 -30 2560 2720 90 132 0 +17 67 153 20 912 1072 90 0 480 +18 90 168 -10 3080 3240 90 677 0 +19 302 235 -10 1043 1203 90 98 0 +20 259 355 -10 1917 2077 90 352 0 +21 149 183 20 3108 3268 0 0 1009 +22 19 297 20 2282 2442 90 0 154 +23 209 358 -20 1477 1637 90 665 0 +24 56 388 -10 1791 1951 90 234 0 +25 115 269 -10 2956 3116 90 285 0 +26 377 356 10 1846 2006 90 0 702 +27 113 229 30 1123 1283 90 0 612 +28 205 343 20 902 1062 90 0 751 +29 48 137 -10 1797 1957 90 422 0 +30 467 157 20 2307 2467 90 0 954 +31 220 394 -30 2783 2943 90 878 0 +32 436 54 -10 1991 2151 90 988 0 +33 54 357 -20 1696 1856 90 786 0 +34 456 154 10 238 398 90 0 468 +35 216 307 -40 2516 2676 90 973 0 +36 280 224 -10 2226 2386 90 633 0 +37 90 270 -10 565 725 90 50 0 +38 166 452 20 599 759 90 0 209 +39 17 283 20 2584 2744 90 0 522 +40 196 192 -20 2090 2250 90 610 0 +41 94 275 10 469 629 90 0 860 +42 292 445 -10 1716 1876 90 625 0 +43 329 471 30 2783 2943 90 0 208 +44 326 57 20 1364 1524 90 0 617 +45 95 466 -20 3024 3184 90 160 0 +46 429 282 -20 3018 3178 90 624 0 +47 229 364 10 2512 2672 90 0 149 +48 457 160 -20 2991 3151 90 410 0 +49 452 154 30 332 492 90 0 65 +50 113 289 10 162 322 90 0 37 +51 67 387 -20 2376 2536 90 198 0 +52 368 17 -10 2021 2181 90 650 0 +53 341 367 -30 2530 2690 90 589 0 +54 410 364 30 1842 2002 90 0 523 +55 80 281 10 1717 1877 90 0 470 +56 321 224 30 2106 2266 0 0 1001 +57 73 395 20 1223 1383 90 0 412 +58 259 76 10 928 1088 90 0 920 +59 121 203 -10 1792 1952 90 393 0 +60 118 256 -10 2519 2679 90 289 0 +61 236 361 30 1713 1873 90 0 335 +62 78 371 20 220 380 90 0 229 +63 301 53 20 969 1129 90 0 435 +64 382 197 -10 640 800 90 213 0 +65 491 160 -30 1989 2149 90 49 0 +66 453 164 -10 3086 3246 90 179 0 +67 277 371 30 595 755 90 0 907 +68 272 212 -10 2330 2490 90 153 0 +69 386 218 20 1901 2061 90 0 75 +70 353 32 10 905 1065 90 0 678 +71 59 389 -30 1698 1858 90 398 0 +72 414 62 -20 1686 1846 90 957 0 +73 278 357 10 212 372 90 0 184 +74 101 179 20 2412 2572 90 0 231 +75 396 234 -20 2390 2550 90 69 0 +76 74 390 -10 797 957 90 257 0 +77 332 55 30 211 371 90 0 164 +78 272 365 30 693 853 90 0 187 +79 418 355 -10 2037 2197 90 501 0 +80 216 380 -30 2300 2460 90 292 0 +81 440 173 10 3282 3442 90 0 139 +82 89 358 -10 3471 3631 90 358 0 +83 66 491 -20 2070 2230 90 232 0 +84 317 234 10 2479 2639 90 0 529 +85 439 297 -10 2043 2203 90 569 0 +86 394 367 30 380 540 90 0 697 +87 58 364 10 2262 2422 90 0 418 +88 290 75 20 191 351 90 0 922 +89 346 344 -30 3212 3372 90 854 0 +90 131 269 -10 2388 2548 90 548 0 +91 236 96 20 1604 1764 90 0 283 +92 29 282 -20 1410 1570 90 212 0 +93 418 385 -20 2757 2917 90 262 0 +94 148 225 40 613 773 90 0 166 +95 166 464 10 794 954 90 0 222 +96 266 373 10 793 953 90 0 245 +97 201 273 30 54 214 90 0 755 +98 255 245 10 7 167 90 0 19 +99 220 379 10 2394 2554 90 0 118 +100 85 317 -10 2607 2767 90 595 0 +101 125 264 -10 2855 3015 90 14 0 +102 131 253 -10 2809 2969 90 627 0 +103 184 188 10 1260 1420 90 0 886 +104 128 209 -20 1093 1253 90 983 0 +105 373 364 -30 3170 3330 90 512 0 +106 389 342 10 1145 1305 90 0 385 +107 420 20 30 575 735 90 0 496 +108 132 218 10 136 296 90 0 563 +109 32 256 10 901 1061 90 0 193 +110 406 339 20 295 455 90 0 492 +111 191 397 20 263 423 90 0 312 +112 72 341 10 2866 3026 90 0 508 +113 35 308 -20 3072 3232 90 186 0 +114 169 360 -30 2172 2332 90 314 0 +115 222 381 -30 2589 2749 90 236 0 +116 96 292 10 862 1022 90 0 828 +117 311 496 -20 728 888 90 730 0 +118 220 384 -10 2683 2843 90 99 0 +119 259 243 20 22 182 90 0 336 +120 349 476 10 2483 2643 90 0 366 +121 63 159 -30 1009 1169 90 963 0 +122 112 243 -30 2321 2481 90 777 0 +123 448 302 -30 2327 2487 90 320 0 +124 343 27 20 1196 1356 90 0 404 +125 67 485 -30 2166 2326 90 10 0 +126 220 359 30 1424 1584 90 0 731 +127 147 435 10 2111 2271 90 0 574 +128 317 235 -20 2570 2730 90 778 0 +129 43 355 -20 1595 1755 90 199 0 +130 368 340 10 461 621 90 0 580 +131 450 72 -30 2561 2721 90 345 0 +132 400 364 30 570 730 90 0 16 +133 355 480 -10 1616 1776 90 178 0 +134 450 153 20 533 693 90 0 439 +135 126 188 -20 2098 2258 90 597 0 +136 380 223 -10 1614 1774 90 570 0 +137 71 453 20 685 845 90 0 892 +138 54 287 20 209 369 90 0 606 +139 420 168 -10 3393 3553 90 81 0 +140 219 89 -30 2692 2852 90 204 0 +141 189 327 -20 420 580 90 713 0 +142 191 309 10 1430 1590 90 0 671 +143 301 67 40 480 640 90 0 861 +144 484 161 10 1696 1856 90 0 192 +145 77 483 -20 2539 2699 90 226 0 +146 241 375 -20 1998 2158 90 513 0 +147 428 64 20 1201 1361 90 0 699 +148 403 361 -20 1452 1612 90 475 0 +149 257 336 -10 3106 3266 90 47 0 +150 131 241 -10 3378 3538 90 740 0 +151 63 166 -20 2502 2662 90 768 0 +152 71 368 -40 3257 3417 90 317 0 +153 272 228 10 2033 2193 90 0 68 +154 25 290 -20 2871 3031 90 22 0 +155 441 157 10 433 593 90 0 772 +156 13 266 20 1204 1364 90 0 737 +157 251 376 -10 3186 3346 90 577 0 +158 61 170 -30 2408 2568 90 493 0 +159 386 357 20 1433 1593 90 0 195 +160 95 475 20 2925 3085 90 0 45 +161 90 298 -30 2104 2264 90 346 0 +162 71 388 20 1505 1665 90 0 947 +163 383 246 -20 2868 3028 90 646 0 +164 352 38 -30 626 786 90 77 0 +165 395 1 30 887 1047 90 0 607 +166 120 210 -40 1282 1442 90 94 0 +167 46 383 30 1288 1448 90 0 747 +168 202 198 30 2278 2438 90 0 452 +169 358 365 30 2326 2486 0 0 1010 +170 191 352 20 117 277 90 0 890 +171 470 152 30 1226 1386 90 0 766 +172 228 124 20 141 301 90 0 720 +173 402 230 -10 2202 2362 90 423 0 +174 323 229 10 1718 1878 90 0 368 +175 331 486 -10 2003 2163 90 549 0 +176 112 208 -30 1601 1761 90 554 0 +177 172 435 -20 3061 3221 90 780 0 +178 326 498 10 1021 1181 90 0 133 +179 460 183 10 2787 2947 90 0 66 +180 95 279 20 375 535 90 0 716 +181 76 456 30 780 940 90 0 235 +182 242 350 -10 2811 2971 90 403 0 +183 152 196 -20 212 372 90 383 0 +184 268 351 -10 1450 1610 90 73 0 +185 360 356 -10 2733 2893 90 359 0 +186 39 296 20 1983 2143 90 0 113 +187 262 368 -30 1162 1322 90 78 0 +188 204 90 -20 1094 1254 90 712 0 +189 149 273 20 212 372 90 0 862 +190 446 86 10 3056 3216 90 0 871 +191 139 269 20 1728 1888 90 0 795 +192 483 170 -10 2197 2357 90 144 0 +193 39 278 -10 1601 1761 90 109 0 +194 201 307 10 1713 1873 90 0 959 +195 395 378 -20 1636 1796 90 159 0 +196 139 262 30 1450 1610 90 0 923 +197 176 447 20 311 471 90 0 572 +198 67 380 20 2279 2439 90 0 51 +199 35 358 20 1497 1657 90 0 129 +200 294 455 -20 2426 2586 90 653 0 +201 351 33 -20 721 881 90 749 0 +202 216 316 -30 2319 2479 90 872 0 +203 261 96 40 447 607 90 0 380 +204 238 57 30 1336 1496 90 0 140 +205 383 18 -30 1643 1803 90 863 0 +206 152 460 10 1310 1470 90 0 444 +207 94 479 -10 2830 2990 90 288 0 +208 337 453 -30 2985 3145 90 43 0 +209 135 460 -20 1785 1945 90 38 0 +210 260 104 20 157 317 90 0 771 +211 337 63 -30 2045 2205 90 546 0 +212 32 247 20 802 962 90 0 92 +213 394 205 10 445 605 90 0 64 +214 95 294 10 770 930 90 0 705 +215 253 241 -10 2835 2995 90 560 0 +216 223 90 30 2787 2947 90 0 327 +217 64 473 10 1284 1444 90 0 263 +218 275 431 10 1242 1402 90 0 227 +219 261 84 -10 734 894 90 406 0 +220 176 296 20 1230 1390 90 0 865 +221 361 349 -10 3016 3176 90 916 0 +222 168 433 -10 3156 3316 90 95 0 +223 394 10 -40 1169 1329 90 457 0 +224 308 60 20 776 936 90 0 846 +225 94 456 -40 3124 3284 90 608 0 +226 73 484 20 2445 2605 90 0 145 +227 277 434 -10 1427 1587 90 218 0 +228 119 232 -30 1939 2099 90 551 0 +229 78 375 -20 314 474 90 62 0 +230 366 346 20 648 808 90 0 303 +231 125 181 -20 2718 2878 90 74 0 +232 69 493 20 1977 2137 90 0 83 +233 432 80 40 908 1068 90 0 885 +234 72 391 10 1412 1572 90 0 24 +235 85 486 -30 2638 2798 90 181 0 +236 204 371 30 749 909 90 0 115 +237 173 328 10 2481 2641 90 0 261 +238 280 423 -30 951 1111 90 929 0 +239 200 327 -10 3150 3310 90 585 0 +240 241 98 -30 2987 3147 90 268 0 +241 96 356 10 186 346 90 0 647 +242 332 491 30 1211 1371 90 0 264 +243 81 283 -30 1624 1784 90 552 0 +244 373 22 10 2312 2472 90 0 259 +245 255 371 -10 2209 2369 90 96 0 +246 358 359 -30 2639 2799 90 347 0 +247 216 93 10 2473 2633 90 0 1 +248 73 360 -20 2947 3107 90 517 0 +249 305 212 -20 1156 1316 90 387 0 +250 151 462 10 1402 1562 90 0 857 +251 47 389 30 1102 1262 90 0 502 +252 155 198 30 118 278 90 0 405 +253 152 457 10 1217 1377 90 0 765 +254 329 48 -20 1555 1715 90 427 0 +255 88 394 10 727 887 90 0 758 +256 153 295 -30 3382 3542 90 367 0 +257 81 373 10 590 750 90 0 76 +258 163 453 -20 693 853 90 673 0 +259 378 25 -10 2408 2568 90 244 0 +260 401 385 -20 2864 3024 90 669 0 +261 184 340 -10 2768 2928 90 237 0 +262 402 362 20 1361 1521 90 0 93 +263 70 482 -10 2351 2511 90 217 0 +264 357 445 -30 3187 3347 90 242 0 +265 212 71 20 1204 1364 90 0 869 +266 231 81 -20 2403 2563 90 837 0 +267 379 208 -40 835 995 90 654 0 +268 236 95 30 2117 2277 90 0 240 +269 386 344 20 1239 1399 90 0 536 +270 189 200 -20 1989 2149 90 635 0 +271 296 253 -20 834 994 90 602 0 +272 73 303 10 2397 2557 90 0 906 +273 30 162 10 2102 2262 90 0 407 +274 230 95 -20 1899 2059 90 12 0 +275 57 131 10 1403 1563 90 0 553 +276 379 245 -30 2773 2933 90 756 0 +277 107 221 40 534 694 90 0 424 +278 154 458 -30 1125 1285 90 640 0 +279 290 417 10 182 342 90 0 845 +280 272 243 30 125 285 90 0 674 +281 94 130 10 601 761 90 0 914 +282 222 356 -20 1608 1768 90 590 0 +283 243 108 -20 3061 3221 90 91 0 +284 224 93 20 2191 2351 90 0 287 +285 155 242 10 886 1046 90 0 25 +286 440 302 20 1279 1439 90 0 870 +287 221 102 -20 2858 3018 90 284 0 +288 52 484 10 1681 1841 90 0 207 +289 111 244 10 2229 2389 90 0 60 +290 132 273 -30 2203 2363 90 587 0 +291 228 186 20 269 429 90 0 684 +292 221 374 30 1130 1290 90 0 80 +293 406 286 -30 3314 3474 90 931 0 +294 390 9 30 1263 1423 90 0 655 +295 335 52 -10 1761 1921 90 932 0 +296 189 368 20 144 304 90 0 867 +297 397 40 -20 2491 2651 90 598 0 +298 408 305 -30 419 579 90 993 0 +299 156 434 10 2865 3025 90 0 386 +300 180 335 -20 2581 2741 90 974 0 +301 327 483 -20 2098 2258 90 874 0 +302 363 62 -20 3264 3424 90 909 0 +303 375 342 -20 939 1099 90 230 0 +304 16 280 -10 2767 2927 90 950 0 +305 277 431 -30 1334 1494 90 858 0 +306 110 241 -10 2136 2296 90 994 0 +307 48 385 -20 1008 1168 90 462 0 +308 152 260 10 98 258 90 0 859 +309 255 120 10 130 290 90 0 547 +310 214 382 -20 2491 2651 90 680 0 +311 414 384 -10 2662 2822 90 339 0 +312 232 378 -20 2194 2354 90 111 0 +313 80 141 30 494 654 90 0 658 +314 188 330 30 513 673 90 0 114 +315 157 192 -10 3210 3370 90 875 0 +316 101 237 -20 1831 1991 90 382 0 +317 74 360 40 2856 3016 90 0 152 +318 267 260 20 509 669 90 0 690 +319 378 46 -20 3090 3250 90 849 0 +320 420 311 30 893 1053 90 0 123 +321 384 217 -20 1809 1969 90 813 0 +322 418 300 10 611 771 90 0 514 +323 356 77 -10 2249 2409 90 898 0 +324 253 244 -30 2742 2902 90 830 0 +325 323 258 -20 1328 1488 90 417 0 +326 293 454 -30 2611 2771 90 826 0 +327 231 97 -30 2887 3047 90 216 0 +328 316 234 -20 2661 2821 90 967 0 +329 207 196 -10 2565 2725 90 376 0 +330 321 228 -10 2200 2360 90 356 0 +331 382 17 20 1734 1894 90 0 621 +332 206 326 -10 3246 3406 90 816 0 +333 198 284 10 76 236 90 0 473 +334 137 186 -30 2912 3072 90 431 0 +335 229 396 -30 2882 3042 90 61 0 +336 268 235 -20 1842 2002 90 119 0 +337 95 243 -30 759 919 90 504 0 +338 297 430 20 378 538 90 0 614 +339 393 368 10 472 632 90 0 311 +340 66 391 -30 1601 1761 90 937 0 +341 189 339 -20 2863 3023 90 511 0 +342 280 351 30 116 276 90 0 350 +343 241 77 -20 1225 1385 90 415 0 +344 134 265 -20 2666 2826 90 694 0 +345 420 95 30 345 505 90 0 131 +346 111 279 30 141 301 90 0 161 +347 367 358 30 2133 2293 90 0 246 +348 239 373 -30 1905 2065 90 428 0 +349 384 235 -20 2672 2832 90 616 0 +350 284 360 -30 309 469 90 342 0 +351 325 75 -20 2370 2530 90 531 0 +352 279 369 10 502 662 90 0 20 +353 340 449 -30 3080 3240 90 820 0 +354 275 448 10 2902 3062 90 0 687 +355 447 88 20 2963 3123 90 0 588 +356 314 279 10 270 430 90 0 330 +357 434 377 -10 2345 2505 90 541 0 +358 67 377 10 2186 2346 90 0 82 +359 370 353 10 746 906 90 0 185 +360 57 367 20 2169 2329 90 0 464 +361 332 486 -20 1912 2072 90 419 0 +362 386 361 30 1527 1687 90 0 400 +363 55 282 -20 305 465 90 833 0 +364 317 467 20 424 584 90 0 840 +365 335 54 -10 1853 2013 90 408 0 +366 348 466 -10 2583 2743 90 120 0 +367 132 314 30 3214 3374 90 0 256 +368 328 216 -10 1912 2072 90 174 0 +369 416 48 10 1880 2040 90 0 774 +370 370 55 -10 2886 3046 90 864 0 +371 149 434 -20 2203 2363 90 856 0 +372 466 169 -20 2502 2662 90 832 0 +373 141 267 -20 1635 1795 90 538 0 +374 258 350 -10 1822 1982 90 651 0 +375 428 312 10 1084 1244 90 0 4 +376 211 188 10 660 820 90 0 329 +377 50 343 10 2754 2914 0 0 1013 +378 107 311 -30 2813 2973 90 564 0 +379 178 441 20 215 375 90 0 776 +380 232 85 -40 2309 2469 90 203 0 +381 391 23 -20 2698 2858 90 11 0 +382 137 227 20 115 275 90 0 316 +383 161 203 20 100 260 90 0 183 +384 363 212 -20 3274 3434 90 934 0 +385 384 346 -10 1331 1491 90 106 0 +386 166 434 -10 2965 3125 90 299 0 +387 274 248 20 310 470 90 0 249 +388 156 421 -30 3355 3515 90 433 0 +389 346 211 10 103 263 90 0 980 +390 265 358 20 1352 1512 90 0 958 +391 96 407 20 434 594 90 0 750 +392 443 70 -20 2464 2624 90 989 0 +393 125 212 10 1187 1347 90 0 59 +394 361 337 50 363 523 90 0 939 +395 322 78 20 2464 2624 90 0 899 +396 481 156 20 1600 1760 90 0 986 +397 188 293 30 837 997 90 0 945 +398 76 408 30 1020 1180 90 0 71 +399 130 304 -20 3175 3335 90 881 0 +400 378 363 -30 1749 1909 90 362 0 +401 185 301 20 1330 1490 90 0 882 +402 385 235 -20 2581 2741 90 581 0 +403 261 350 10 1729 1889 90 0 182 +404 389 33 -20 2983 3143 90 124 0 +405 151 214 -30 511 671 90 252 0 +406 265 94 10 258 418 90 0 219 +407 65 164 -10 2595 2755 90 273 0 +408 293 81 10 174 334 90 0 365 +409 363 55 -10 2983 3143 90 727 0 +410 465 176 20 2599 2759 90 0 48 +411 428 298 30 1654 1814 90 0 852 +412 75 379 -20 2567 2727 90 57 0 +413 404 378 -40 857 1017 90 825 0 +414 203 203 -10 2850 3010 90 506 0 +415 259 88 20 545 705 90 0 343 +416 362 17 -20 1884 2044 90 465 0 +417 320 258 20 564 724 90 0 325 +418 59 358 -10 2358 2518 90 87 0 +419 316 453 20 224 384 90 0 361 +420 225 192 20 74 234 90 0 539 +421 140 206 30 408 568 90 0 629 +422 83 151 10 300 460 90 0 29 +423 366 196 10 139 299 90 0 173 +424 108 245 -40 1730 1890 90 277 0 +425 129 267 -20 2480 2640 90 474 0 +426 57 379 20 907 1067 90 0 802 +427 329 56 20 1457 1617 90 0 254 +428 213 363 30 1234 1394 90 0 348 +429 76 391 -10 1318 1478 90 718 0 +430 330 259 30 1231 1391 90 0 724 +431 136 217 30 898 1058 90 0 334 +432 165 333 -30 2381 2541 90 836 0 +433 160 431 30 3254 3414 90 0 388 +434 338 489 -10 1308 1468 90 479 0 +435 335 64 -20 1953 2113 90 63 0 +436 412 361 -10 1748 1908 90 800 0 +437 259 90 30 637 797 90 0 438 +438 265 77 -30 832 992 90 437 0 +439 460 173 -20 2887 3047 90 134 0 +440 83 301 -40 2297 2457 90 565 0 +441 201 331 -20 707 867 90 526 0 +442 118 214 20 240 400 90 0 476 +443 395 30 20 2796 2956 90 0 759 +444 125 444 -10 1997 2157 90 206 0 +445 283 248 30 33 193 90 0 686 +446 391 334 -30 1047 1207 90 835 0 +447 212 215 -10 3160 3320 90 708 0 +448 276 428 20 1048 1208 90 0 834 +449 96 152 20 197 357 90 0 787 +450 425 85 10 536 696 90 0 785 +451 336 7 10 1584 1744 90 0 700 +452 196 219 -30 3054 3214 90 168 0 +453 210 94 20 997 1157 90 0 773 +454 310 81 -10 2846 3006 90 534 0 +455 341 37 -10 434 594 90 1000 0 +456 344 478 -20 2296 2456 90 558 0 +457 406 37 40 275 435 90 0 223 +458 69 346 -30 2962 3122 90 467 0 +459 80 376 -10 407 567 90 561 0 +460 314 449 30 209 369 90 0 991 +461 209 201 -20 2753 2913 90 593 0 +462 88 379 20 689 849 90 0 307 +463 352 500 -10 1505 1665 90 500 0 +464 65 357 -20 2454 2614 90 360 0 +465 345 15 20 1482 1642 90 0 416 +466 125 245 20 3002 3162 90 0 842 +467 52 369 30 2073 2233 90 0 458 +468 449 140 -10 730 890 90 34 0 +469 430 310 30 1176 1336 90 0 982 +470 109 325 -10 3008 3168 90 55 0 +471 446 139 20 637 797 90 0 796 +472 229 214 20 41 201 90 0 968 +473 197 301 -10 183 343 90 333 0 +474 146 245 20 696 856 90 0 425 +475 401 368 20 664 824 90 0 148 +476 116 259 -20 2613 2773 90 442 0 +477 374 55 -20 2792 2952 90 576 0 +478 249 251 -20 3036 3196 90 637 0 +479 325 490 10 923 1083 90 0 434 +480 59 159 -20 1103 1263 90 17 0 +481 186 177 -10 1361 1521 90 623 0 +482 319 229 -10 2292 2452 90 591 0 +483 26 269 30 1005 1165 90 0 568 +484 53 139 -30 1214 1374 90 605 0 +485 471 154 -10 1319 1479 90 908 0 +486 301 247 -20 3238 3398 90 798 0 +487 388 220 -20 1423 1583 90 946 0 +488 235 81 20 1450 1610 90 0 578 +489 347 479 10 2389 2549 90 0 672 +490 367 59 -30 3169 3329 90 918 0 +491 261 370 -10 1069 1229 90 746 0 +492 441 287 -20 2915 3075 90 110 0 +493 44 153 30 1995 2155 90 0 158 +494 263 351 10 1545 1705 90 0 775 +495 444 157 10 215 375 90 0 791 +496 374 17 -30 1925 2085 90 107 0 +497 448 295 -20 2724 2884 90 670 0 +498 446 297 10 2232 2392 90 0 714 +499 347 40 30 530 690 90 0 715 +500 318 493 10 825 985 90 0 463 +501 399 352 10 1260 1420 90 0 79 +502 51 364 -30 1887 2047 90 251 0 +503 250 217 -10 2534 2694 90 767 0 +504 107 225 30 440 600 90 0 337 +505 173 208 -20 1881 2041 90 848 0 +506 204 189 10 2378 2538 90 0 414 +507 399 379 20 2960 3120 90 0 805 +508 79 346 -10 3150 3310 90 112 0 +509 360 338 10 272 432 90 0 722 +510 390 17 30 1453 1613 90 0 693 +511 207 337 20 805 965 90 0 341 +512 409 361 30 1057 1217 90 0 105 +513 206 377 20 559 719 90 0 146 +514 429 294 -10 1943 2103 90 322 0 +515 375 31 20 2185 2345 90 0 912 +516 426 80 20 722 882 90 0 853 +517 74 374 20 2662 2822 90 0 248 +518 408 20 -10 473 633 90 935 0 +519 239 369 -10 1811 1971 90 559 0 +520 420 308 30 709 869 90 0 594 +521 254 357 -10 2012 2172 90 960 0 +522 53 297 -20 3300 3460 90 39 0 +523 434 382 -30 2250 2410 90 54 0 +524 204 171 -20 958 1118 90 970 0 +525 173 169 10 1558 1718 0 0 1002 +526 190 332 20 606 766 90 0 441 +527 274 231 30 2126 2286 90 0 615 +528 207 194 -20 2473 2633 90 736 0 +529 315 232 -10 2753 2913 90 84 0 +530 425 87 20 444 604 90 0 883 +531 312 64 20 582 742 90 0 351 +532 129 244 -10 2908 3068 90 850 0 +533 278 230 10 1466 1626 90 0 709 +534 351 75 10 2154 2314 90 0 454 +535 185 293 -20 930 1090 90 540 0 +536 364 364 -20 2230 2390 90 269 0 +537 432 369 10 2147 2307 90 0 679 +538 128 249 20 1343 1503 90 0 373 +539 221 179 -20 369 529 90 420 0 +540 194 296 20 650 810 90 0 535 +541 413 350 10 1557 1717 90 0 357 +542 214 372 10 943 1103 90 0 900 +543 379 229 -20 1045 1205 90 729 0 +544 91 298 -30 2013 2173 90 656 0 +545 226 120 30 235 395 90 0 926 +546 344 46 30 1660 1820 90 0 211 +547 238 84 -10 1634 1794 90 309 0 +548 138 276 10 1915 2075 90 0 90 +549 346 487 10 1808 1968 90 0 175 +550 95 160 10 179 339 90 0 721 +551 103 266 30 1062 1222 90 0 228 +552 98 286 30 1337 1497 90 0 243 +553 77 172 -10 2976 3136 90 275 0 +554 147 199 30 308 468 90 0 176 +555 210 98 10 721 881 90 0 641 +556 428 292 10 1851 2011 90 0 966 +557 121 236 10 2034 2194 90 0 696 +558 336 479 20 2198 2358 90 0 456 +559 203 369 10 841 1001 90 0 519 +560 296 232 10 1268 1428 90 0 215 +561 87 369 10 201 361 90 0 459 +562 247 88 -20 1924 2084 90 838 0 +563 104 246 -10 1353 1513 90 108 0 +564 67 302 30 2493 2653 90 0 378 +565 114 296 40 259 419 90 0 440 +566 394 356 30 189 349 90 0 889 +567 192 306 -10 1523 1683 90 997 0 +568 16 285 -30 2492 2652 90 483 0 +569 419 310 10 802 962 90 0 85 +570 389 221 10 1332 1492 90 0 136 +571 129 264 20 2761 2921 0 0 1004 +572 172 483 -20 904 1064 90 197 0 +573 325 251 -20 1425 1585 90 639 0 +574 151 436 -10 2386 2546 90 127 0 +575 263 91 20 352 512 90 0 924 +576 401 15 20 685 845 90 0 477 +577 253 382 10 3090 3250 90 0 157 +578 247 89 -20 2015 2175 90 488 0 +579 283 229 30 1371 1531 90 0 748 +580 366 341 -10 553 713 90 130 0 +581 392 213 20 2092 2252 90 0 402 +582 167 304 20 207 367 90 0 940 +583 477 154 10 1506 1666 90 0 725 +584 234 383 10 2099 2259 0 0 1007 +585 199 327 10 3059 3219 90 0 239 +586 140 220 30 803 963 90 0 638 +587 144 266 30 311 471 90 0 290 +588 432 105 -20 3432 3592 90 355 0 +589 368 325 30 139 299 90 0 53 +590 202 386 20 369 529 90 0 282 +591 325 246 10 1520 1680 90 0 482 +592 430 86 -20 2766 2926 90 681 0 +593 200 195 20 2185 2345 90 0 461 +594 440 295 -30 2136 2296 90 520 0 +595 77 287 10 1905 2065 90 0 100 +596 187 362 -10 1786 1946 90 783 0 +597 131 207 20 999 1159 90 0 135 +598 405 5 20 786 946 90 0 297 +599 125 226 20 1389 1549 90 0 893 +600 254 335 10 3013 3173 90 0 676 +601 212 168 20 860 1020 90 0 971 +602 281 279 20 714 874 90 0 271 +603 326 241 -10 1615 1775 90 660 0 +604 152 241 20 793 953 90 0 880 +605 71 139 30 807 967 90 0 484 +606 46 277 -20 589 749 90 138 0 +607 393 13 -30 1358 1518 90 165 0 +608 87 454 40 882 1042 90 0 225 +609 86 359 -30 3255 3415 90 695 0 +610 220 192 20 169 329 90 0 40 +611 426 279 30 3112 3272 90 0 667 +612 131 267 -30 2572 2732 90 27 0 +613 200 297 -10 553 713 90 911 0 +614 299 442 -20 1904 2064 90 338 0 +615 265 218 -30 2429 2589 90 527 0 +616 398 231 20 2296 2456 90 0 349 +617 312 74 -20 2749 2909 90 44 0 +618 99 307 20 2714 2874 90 0 812 +619 22 283 30 1313 1473 90 0 790 +620 67 160 10 2690 2850 90 0 933 +621 390 42 -20 2588 2748 90 331 0 +622 44 279 10 496 656 90 0 632 +623 200 182 10 1153 1313 90 0 481 +624 458 303 20 2531 2691 90 0 46 +625 298 438 10 567 727 90 0 42 +626 62 301 -20 3400 3560 90 784 0 +627 112 251 10 1633 1793 90 0 102 +628 184 354 -10 1976 2136 90 794 0 +629 140 180 -30 3009 3169 90 421 0 +630 269 428 20 1145 1305 90 0 851 +631 123 206 10 1885 2045 90 0 691 +632 36 284 -10 1698 1858 90 622 0 +633 272 233 10 1747 1907 90 0 36 +634 320 231 20 2384 2544 90 0 844 +635 211 180 20 758 918 90 0 270 +636 114 169 -20 2612 2772 90 683 0 +637 245 239 20 2933 3093 90 0 478 +638 117 204 -30 1698 1858 90 586 0 +639 316 254 20 750 910 90 0 573 +640 169 443 30 500 660 90 0 278 +641 212 96 -10 904 1064 90 555 0 +642 119 285 40 3063 3223 90 0 949 +643 71 163 20 2785 2945 0 0 1011 +644 78 361 -10 3448 3608 90 841 0 +645 354 219 -20 3375 3535 90 819 0 +646 389 233 20 2487 2647 90 0 163 +647 90 391 -10 541 701 90 241 0 +648 209 307 10 1811 1971 90 0 728 +649 363 351 -20 2923 3083 90 682 0 +650 405 47 10 255 415 90 0 52 +651 278 329 10 83 243 90 0 374 +652 261 371 -30 978 1138 90 827 0 +653 302 470 20 2227 2387 90 0 200 +654 373 205 40 334 494 90 0 267 +655 381 20 -30 1828 1988 90 294 0 +656 90 277 30 662 822 90 0 544 +657 46 341 10 2659 2819 90 0 719 +658 50 138 -30 1889 2049 90 313 0 +659 61 437 20 265 425 90 0 801 +660 331 252 10 1134 1294 90 0 603 +661 440 81 -20 2665 2825 90 815 0 +662 384 206 20 739 899 90 0 723 +663 232 87 30 1504 1664 90 0 984 +664 59 471 20 1484 1644 90 0 762 +665 174 304 20 110 270 90 0 23 +666 106 248 -20 1446 1606 90 855 0 +667 410 287 -30 3220 3380 90 611 0 +668 206 313 -30 2091 2251 90 829 0 +669 412 367 20 960 1120 90 0 260 +670 412 300 20 515 675 90 0 497 +671 206 295 -10 2809 2969 90 142 0 +672 329 459 -10 2885 3045 90 489 0 +673 177 436 20 199 359 90 0 258 +674 266 264 -30 603 763 90 280 0 +675 308 235 -20 3135 3295 90 975 0 +676 260 330 -10 3203 3363 90 600 0 +677 49 136 10 1705 1865 90 0 18 +678 356 28 -10 1000 1160 90 70 0 +679 428 384 -10 2444 2604 90 537 0 +680 220 362 20 1331 1491 90 0 310 +681 437 61 20 2088 2248 90 0 592 +682 365 360 20 2040 2200 90 0 649 +683 107 168 20 2515 2675 90 0 636 +684 220 177 -20 461 621 90 291 0 +685 347 21 20 1386 1546 90 0 701 +686 293 245 -30 3430 3590 90 445 0 +687 267 436 -10 3007 3167 90 354 0 +688 216 96 -30 2566 2726 90 831 0 +689 383 351 20 167 327 90 0 879 +690 289 240 -20 939 1099 90 318 0 +691 129 185 -10 2814 2974 90 631 0 +692 291 450 10 2705 2865 90 0 979 +693 387 21 -30 1548 1708 90 510 0 +694 116 255 20 1239 1399 90 0 344 +695 50 368 30 1981 2141 90 0 609 +696 121 249 -10 2421 2581 90 557 0 +697 404 346 -30 1163 1323 90 86 0 +698 77 360 -10 3357 3517 90 811 0 +699 447 102 -20 3252 3412 90 147 0 +700 366 16 -10 1978 2138 90 451 0 +701 348 16 -20 1780 1940 90 685 0 +702 353 346 -10 3114 3274 90 26 0 +703 54 485 -30 1773 1933 90 760 0 +704 319 77 30 2558 2718 90 0 779 +705 83 282 -10 1532 1692 90 214 0 +706 384 24 -10 2601 2761 90 876 0 +707 52 469 20 1387 1547 90 0 972 +708 199 200 10 2945 3105 90 0 447 +709 273 234 -10 1656 1816 90 533 0 +710 16 281 -20 2676 2836 90 996 0 +711 151 442 -10 2482 2642 90 809 0 +712 223 114 20 332 492 90 0 188 +713 191 308 20 82 242 90 0 141 +714 448 297 -10 2632 2792 90 498 0 +715 386 28 -30 2507 2667 90 499 0 +716 106 295 -20 1053 1213 90 180 0 +717 387 224 -10 1517 1677 90 745 0 +718 96 377 10 224 384 90 0 429 +719 86 361 -10 3347 3507 90 657 0 +720 211 107 -20 531 691 90 172 0 +721 43 125 -10 1603 1763 90 550 0 +722 369 351 -10 838 998 90 509 0 +723 388 228 -20 1235 1395 90 662 0 +724 325 228 -30 1810 1970 90 430 0 +725 490 159 -10 1897 2057 90 583 0 +726 420 78 -20 1398 1558 90 953 0 +727 396 4 10 1073 1233 90 0 409 +728 222 317 -10 2415 2575 90 648 0 +729 389 198 20 543 703 90 0 543 +730 322 454 20 320 480 90 0 117 +731 241 391 -30 2985 3145 90 126 0 +732 256 117 -20 3167 3327 90 752 0 +733 298 255 10 151 311 90 0 743 +734 74 363 -30 2763 2923 90 905 0 +735 345 496 20 1407 1567 90 0 887 +736 167 169 20 1654 1814 90 0 528 +737 23 306 -20 2182 2342 90 156 0 +738 317 62 20 677 837 90 0 896 +739 319 257 -20 656 816 90 823 0 +740 129 255 10 2716 2876 90 0 150 +741 59 377 20 2088 2248 90 0 868 +742 138 272 -30 1821 1981 90 987 0 +743 317 251 -10 940 1100 90 733 0 +744 279 436 20 1519 1679 0 0 1003 +745 371 207 10 241 401 90 0 717 +746 263 372 10 886 1046 90 0 491 +747 50 347 -30 2562 2722 90 167 0 +748 275 236 -30 1563 1723 90 579 0 +749 334 47 20 331 491 90 0 201 +750 50 383 -20 1889 2049 90 391 0 +751 170 338 -20 2284 2444 90 28 0 +752 245 109 20 3089 3249 90 0 732 +753 69 475 30 1189 1349 90 0 799 +754 54 372 -10 1991 2151 90 915 0 +755 198 334 -30 2203 2363 90 97 0 +756 380 228 30 1137 1297 90 0 276 +757 425 118 10 219 379 90 0 13 +758 80 398 -10 826 986 90 255 0 +759 366 57 -20 3076 3236 90 443 0 +760 67 463 30 584 744 90 0 703 +761 226 86 -10 2595 2755 90 843 0 +762 59 480 -20 1583 1743 90 664 0 +763 40 378 20 1386 1546 90 0 977 +764 250 367 20 2113 2273 90 0 15 +765 157 436 -10 2773 2933 90 253 0 +766 463 161 -30 2403 2563 90 171 0 +767 266 250 10 409 569 90 0 503 +768 51 162 20 2213 2373 90 0 151 +769 194 353 -10 1371 1531 90 913 0 +770 383 41 -10 2685 2845 90 952 0 +771 247 82 -20 1828 1988 90 210 0 +772 457 142 -10 829 989 90 155 0 +773 244 94 -20 1795 1955 90 453 0 +774 441 63 -10 2274 2434 90 369 0 +775 244 371 -10 2310 2470 90 494 0 +776 174 444 -20 405 565 90 379 0 +777 94 247 30 853 1013 90 0 122 +778 320 225 20 2014 2174 90 0 128 +779 316 80 -30 2652 2812 90 704 0 +780 155 447 20 2672 2832 90 0 177 +781 211 308 30 1903 2063 90 0 884 +782 297 442 20 1812 1972 90 0 969 +783 200 342 10 997 1157 90 0 596 +784 44 325 20 3181 3341 90 0 626 +785 438 60 -10 2180 2340 90 450 0 +786 80 374 20 499 659 90 0 33 +787 59 163 -20 2311 2471 90 449 0 +788 236 92 10 2210 2370 0 0 1008 +789 414 66 30 1592 1752 90 0 990 +790 34 279 -30 1506 1666 90 619 0 +791 475 156 -10 1413 1573 90 495 0 +792 404 310 20 165 325 90 0 995 +793 367 239 20 3156 3316 0 0 1005 +794 210 359 10 1568 1728 90 0 628 +795 133 278 -20 2010 2170 90 191 0 +796 446 169 -20 3185 3345 90 471 0 +797 188 356 20 1882 2042 90 0 948 +798 312 252 20 845 1005 90 0 486 +799 69 485 -30 2258 2418 90 753 0 +800 413 353 10 1650 1810 90 0 436 +801 54 446 -20 287 447 90 659 0 +802 56 357 -20 1788 1948 90 426 0 +803 230 105 -20 2958 3118 90 808 0 +804 196 302 20 274 434 90 0 891 +805 391 373 -20 3060 3220 90 507 0 +806 101 295 30 958 1118 90 0 839 +807 234 350 10 2617 2777 90 0 962 +808 215 108 20 2760 2920 90 0 803 +809 142 457 10 1593 1753 90 0 711 +810 283 425 -30 858 1018 90 9 0 +811 77 397 10 919 1079 90 0 698 +812 105 317 -20 2909 3069 90 618 0 +813 382 213 20 1715 1875 90 0 321 +814 213 76 -10 1300 1460 90 999 0 +815 417 56 20 1782 1942 90 0 661 +816 183 340 10 2677 2837 90 0 332 +817 123 242 20 3190 3350 0 0 1006 +818 475 136 20 1029 1189 90 0 824 +819 377 246 20 3054 3214 90 0 645 +820 310 484 30 626 786 90 0 353 +821 47 280 10 403 563 90 0 978 +822 57 456 20 388 548 90 0 877 +823 313 266 20 373 533 90 0 739 +824 475 145 -20 1128 1288 90 818 0 +825 400 376 40 762 922 90 0 413 +826 290 416 30 170 330 90 0 326 +827 277 369 30 410 570 90 0 652 +828 91 303 -10 2199 2359 90 116 0 +829 194 301 30 366 526 90 0 668 +830 254 238 30 2646 2806 90 0 324 +831 215 91 30 2290 2450 90 0 688 +832 500 162 20 2088 2248 90 0 372 +833 56 287 20 197 357 90 0 363 +834 289 452 -20 2798 2958 90 448 0 +835 378 326 30 160 320 90 0 446 +836 197 350 30 1186 1346 90 0 432 +837 243 88 20 1731 1891 90 0 266 +838 250 72 20 1125 1285 90 0 562 +839 101 290 -30 1150 1310 90 806 0 +840 351 480 -20 1710 1870 90 364 0 +841 67 357 10 3044 3204 90 0 644 +842 128 240 -20 3285 3445 90 466 0 +843 253 81 10 1026 1186 90 0 761 +844 307 227 -20 2853 3013 90 634 0 +845 233 441 -10 3225 3385 90 279 0 +846 311 47 -20 1070 1230 90 224 0 +847 292 456 -30 2518 2678 90 998 0 +848 183 187 20 1768 1928 90 0 505 +849 392 31 20 2890 3050 90 0 319 +850 103 251 10 1258 1418 90 0 532 +851 300 443 -20 1996 2156 90 630 0 +852 420 295 -30 1752 1912 90 411 0 +853 427 64 -20 1292 1452 90 516 0 +854 372 354 30 1941 2101 90 0 89 +855 101 263 20 1156 1316 90 0 666 +856 141 454 20 1686 1846 90 0 371 +857 146 461 -10 1497 1657 90 250 0 +858 298 430 30 469 629 90 0 305 +859 148 270 -10 119 279 90 308 0 +860 76 287 -10 1814 1974 90 41 0 +861 308 55 -40 871 1031 90 143 0 +862 143 257 -20 501 661 90 189 0 +863 393 2 30 979 1139 90 0 205 +864 385 28 10 2286 2446 90 0 370 +865 204 291 -20 2903 3063 90 220 0 +866 132 272 30 2294 2454 90 0 925 +867 206 379 -20 467 627 90 296 0 +868 69 383 -20 2470 2630 90 741 0 +869 245 96 -20 1703 1863 90 265 0 +870 431 301 -20 1468 1628 90 286 0 +871 448 94 -10 3154 3314 90 190 0 +872 199 305 30 1620 1780 90 0 202 +873 95 356 -20 3447 3607 90 895 0 +874 328 498 20 1113 1273 90 0 301 +875 108 222 10 1497 1657 90 0 315 +876 341 26 10 1288 1448 90 0 706 +877 63 454 -20 484 644 90 822 0 +878 222 357 30 1517 1677 90 0 31 +879 416 364 -20 1938 2098 90 689 0 +880 127 278 -20 2106 2266 90 604 0 +881 140 252 20 597 757 90 0 399 +882 218 298 -20 2706 2866 90 401 0 +883 432 87 -20 2858 3018 90 530 0 +884 216 300 -30 2613 2773 90 781 0 +885 438 72 -40 1098 1258 90 233 0 +886 184 178 -10 1454 1614 90 103 0 +887 345 468 -20 2677 2837 90 735 0 +888 150 435 -20 2295 2455 90 951 0 +889 395 365 -30 288 448 90 566 0 +890 208 371 -20 655 815 90 170 0 +891 190 292 -20 745 905 90 804 0 +892 78 479 -20 1089 1249 90 137 0 +893 104 198 -20 2303 2463 90 599 0 +894 346 13 20 1686 1846 90 0 910 +895 47 388 20 1193 1353 90 0 873 +896 315 57 -20 1171 1331 90 738 0 +897 110 199 -30 2207 2367 90 955 0 +898 323 60 10 1270 1430 90 0 323 +899 308 82 -20 2939 3099 90 395 0 +900 216 374 -10 1035 1195 90 542 0 +901 326 253 10 1039 1199 90 0 902 +902 308 232 -10 2948 3108 90 901 0 +903 118 223 10 339 499 90 0 943 +904 149 444 -20 2575 2735 90 941 0 +905 95 395 30 332 492 90 0 734 +906 117 319 -10 3108 3268 90 272 0 +907 262 352 -30 1636 1796 90 67 0 +908 468 135 10 932 1092 90 0 485 +909 351 31 20 813 973 90 0 302 +910 361 15 -20 2118 2278 90 894 0 +911 195 300 10 458 618 90 0 613 +912 397 27 -20 2388 2548 90 515 0 +913 179 311 10 311 471 90 0 769 +914 77 133 -10 709 869 90 281 0 +915 66 397 10 1125 1285 90 0 754 +916 366 352 10 2830 2990 90 0 221 +917 221 87 -10 1403 1563 90 8 0 +918 347 23 30 1100 1260 90 0 490 +919 176 358 -10 2075 2235 90 964 0 +920 229 78 -10 2496 2656 90 58 0 +921 272 246 10 218 378 90 0 2 +922 293 67 -20 290 450 90 88 0 +923 140 265 -30 1543 1703 90 196 0 +924 238 83 -20 1543 1703 90 575 0 +925 136 296 -30 3275 3435 90 866 0 +926 218 98 -30 2002 2162 90 545 0 +927 290 440 -10 1621 1781 90 981 0 +928 29 302 -20 2085 2245 90 938 0 +929 290 425 30 280 440 90 0 238 +930 124 247 -10 3095 3255 90 944 0 +931 442 287 30 2824 2984 90 0 293 +932 294 64 10 383 543 90 0 295 +933 74 165 -10 2878 3038 90 620 0 +934 382 245 20 2959 3119 90 0 384 +935 405 24 10 378 538 90 0 518 +936 211 97 20 812 972 90 0 965 +937 88 390 30 633 793 90 0 340 +938 37 295 20 1891 2051 90 0 928 +939 359 371 -50 2422 2582 90 394 0 +940 186 372 -20 1685 1845 90 582 0 +941 116 446 20 1898 2058 90 0 904 +942 293 249 10 53 213 90 0 976 +943 83 228 -10 649 809 90 903 0 +944 96 269 10 965 1125 90 0 930 +945 179 284 -30 1031 1191 90 397 0 +946 368 219 20 940 1100 90 0 487 +947 66 359 -20 3157 3317 90 162 0 +948 189 338 -20 2954 3114 90 797 0 +949 163 277 -40 3492 3652 90 642 0 +950 5 296 10 2386 2546 90 0 304 +951 152 478 20 1015 1175 90 0 888 +952 366 34 10 2086 2246 90 0 770 +953 429 80 20 815 975 90 0 726 +954 464 178 -20 2691 2851 90 30 0 +955 138 196 30 1993 2153 90 0 897 +956 87 481 10 2733 2893 0 0 1014 +957 425 99 20 248 408 90 0 72 +958 241 362 -20 2410 2570 90 390 0 +959 207 289 -10 2997 3157 90 194 0 +960 264 365 10 1255 1415 90 0 521 +961 102 289 20 1242 1402 90 0 3 +962 233 346 -10 2711 2871 90 807 0 +963 78 141 30 402 562 90 0 121 +964 196 348 10 1094 1254 90 0 919 +965 216 92 -20 2382 2542 90 936 0 +966 444 309 -10 2425 2585 90 556 0 +967 313 263 20 466 626 90 0 328 +968 211 198 -20 2660 2820 90 472 0 +969 314 436 -20 2101 2261 90 782 0 +970 217 189 20 564 724 90 0 524 +971 197 178 -20 1058 1218 90 601 0 +972 60 497 -20 1877 2037 90 707 0 +973 206 312 40 2000 2160 90 0 35 +974 197 351 20 1277 1437 90 0 300 +975 305 233 20 3041 3201 90 0 675 +976 297 250 -10 3333 3493 90 942 0 +977 71 348 -20 3055 3215 90 763 0 +978 11 269 -10 1110 1270 90 821 0 +979 247 447 -10 3120 3280 90 692 0 +980 386 213 -10 1996 2156 90 389 0 +981 292 434 10 755 915 90 0 927 +982 436 301 -30 1373 1533 90 469 0 +983 145 221 20 708 868 90 0 104 +984 224 96 -30 2098 2258 90 663 0 +985 59 128 -10 1496 1656 90 992 0 +986 489 150 -20 1798 1958 90 396 0 +987 152 225 30 994 1154 90 0 742 +988 426 85 10 627 787 90 0 32 +989 415 73 20 1495 1655 90 0 392 +990 440 70 -30 2371 2531 90 789 0 +991 320 476 -30 523 683 90 460 0 +992 57 132 10 1312 1472 90 0 985 +993 405 311 30 177 337 90 0 298 +994 109 250 10 1540 1700 90 0 306 +995 428 314 -20 992 1152 90 792 0 +996 40 288 20 1793 1953 90 0 710 +997 175 282 10 1126 1286 90 0 567 +998 298 456 30 2332 2492 90 0 847 +999 208 101 10 627 787 90 0 814 +1000 342 52 10 232 392 90 0 455 +1001 321 224 -30 2106 2266 90 56 0 +1002 173 169 -10 1558 1718 90 525 0 +1003 279 436 -20 1519 1679 90 744 0 +1004 129 264 -20 2761 2921 90 571 0 +1005 367 239 -20 3156 3316 90 793 0 +1006 123 242 -20 3190 3350 90 817 0 +1007 234 383 -10 2099 2259 90 584 0 +1008 236 92 -10 2210 2370 90 788 0 +1009 149 183 -20 3108 3268 90 21 0 +1010 358 365 -30 2326 2486 90 169 0 +1011 71 163 -20 2785 2945 90 643 0 +1012 435 77 -20 1002 1162 90 5 0 +1013 50 343 -10 2754 2914 90 377 0 +1014 87 481 -10 2733 2893 90 956 0 diff --git a/jsprit-instances/instances/lilim/1000/LC21010.txt b/jsprit-instances/instances/lilim/1000/LC21010.txt new file mode 100644 index 00000000..f74b3458 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC21010.txt @@ -0,0 +1,1010 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -20 2302 3182 90 488 0 +2 266 231 -30 1576 2456 90 579 0 +3 89 284 -20 1076 1956 90 839 0 +4 430 298 -10 1202 2082 90 322 0 +5 435 77 -10 642 1522 90 34 0 +6 25 293 20 2604 3484 90 0 113 +7 43 269 30 327 1207 90 0 22 +8 216 117 -20 137 1017 90 12 0 +9 294 437 30 301 1181 90 0 500 +10 79 479 30 638 1518 90 0 226 +11 365 18 -10 1853 2733 90 406 0 +12 225 125 20 127 1007 90 0 8 +13 448 103 -20 2698 3578 90 592 0 +14 143 266 10 108 988 90 0 180 +15 252 347 10 2551 3431 90 0 149 +16 403 390 10 2200 3080 90 0 260 +17 67 153 -10 552 1432 90 914 0 +18 90 168 -30 2720 3600 90 158 0 +19 302 235 20 683 1563 90 0 503 +20 259 355 -10 1557 2437 90 960 0 +21 149 183 20 2748 3628 90 0 315 +22 19 297 -30 1922 2802 90 7 0 +23 209 358 -10 1117 1997 90 559 0 +24 56 388 20 1431 2311 90 0 734 +25 115 269 -20 2596 3476 90 424 0 +26 377 356 -20 1486 2366 90 262 0 +27 113 229 -20 763 1643 90 943 0 +28 205 343 -20 542 1422 90 511 0 +29 48 137 20 1437 2317 90 0 643 +30 467 157 -50 1947 2827 90 986 0 +31 220 394 10 2423 3303 90 0 335 +32 436 54 20 1631 2511 90 0 871 +33 54 357 -30 1336 2216 90 251 0 +34 456 154 10 227 1107 90 0 5 +35 216 307 -40 2156 3036 90 245 0 +36 280 224 -10 1866 2746 90 767 0 +37 90 270 -10 205 1085 90 859 0 +38 166 452 -20 239 1119 90 111 0 +39 17 283 -10 2224 3104 90 109 0 +40 196 192 30 1730 2610 90 0 708 +41 94 275 10 157 1037 90 0 944 +42 292 445 -20 1356 2236 90 630 0 +43 329 471 -20 2423 3303 90 456 0 +44 326 57 20 1004 1884 90 0 770 +45 95 466 -10 2664 3544 90 972 0 +46 429 282 -40 2658 3538 90 492 0 +47 229 364 -10 2152 3032 90 584 0 +48 457 160 10 2631 3511 90 0 796 +49 452 154 30 223 1103 90 0 853 +50 113 289 10 142 1022 90 0 828 +51 67 387 10 2016 2896 90 0 458 +52 368 17 20 1661 2541 90 0 779 +53 341 367 -10 2170 3050 90 185 0 +54 410 364 30 1482 2362 90 0 311 +55 80 281 10 1357 2237 90 0 161 +56 321 224 -20 1746 2626 90 798 0 +57 73 395 -30 863 1743 90 181 0 +58 259 76 -10 568 1448 90 219 0 +59 121 203 -20 1432 2312 90 337 0 +60 118 256 -10 2159 3039 90 228 0 +61 236 361 -10 1353 2233 90 542 0 +62 78 371 20 210 1090 90 0 199 +63 301 53 20 609 1489 90 0 752 +64 382 197 -20 280 1160 90 119 0 +65 491 160 -30 1629 2509 90 171 0 +66 453 164 -10 2724 3604 90 883 0 +67 277 371 30 235 1115 90 0 184 +68 272 212 20 1970 2850 90 0 615 +69 386 218 -30 1541 2421 90 717 0 +70 353 32 10 545 1425 90 0 832 +71 59 389 20 1338 2218 90 0 467 +72 414 62 -30 1326 2206 90 861 0 +73 278 357 10 110 990 90 0 78 +74 101 179 -10 2052 2932 90 393 0 +75 396 234 -10 2030 2910 90 213 0 +76 74 390 -40 437 1317 90 608 0 +77 332 55 30 211 1091 90 0 164 +78 272 365 -10 333 1213 90 73 0 +79 418 355 -30 1677 2557 90 512 0 +80 216 380 -30 1940 2820 90 314 0 +81 440 173 -20 2739 3619 90 396 0 +82 89 358 -10 2751 3631 90 464 0 +83 66 491 20 1710 2590 90 0 263 +84 317 234 10 2119 2999 90 0 675 +85 439 297 -10 1683 2563 90 556 0 +86 394 367 30 185 1065 90 0 93 +87 58 364 -20 1902 2782 90 129 0 +88 290 75 20 179 1059 90 0 918 +89 346 344 -10 2810 3690 90 221 0 +90 131 269 -30 2028 2908 90 866 0 +91 236 96 20 1244 2124 90 0 247 +92 29 282 -10 1050 1930 90 978 0 +93 418 385 -30 2397 3277 90 86 0 +94 148 225 40 253 1133 90 0 285 +95 166 464 10 434 1314 90 0 278 +96 266 373 -10 433 1313 90 352 0 +97 201 273 30 54 934 90 0 961 +98 255 245 10 7 887 90 0 729 +99 220 379 -20 2034 2914 90 890 0 +100 85 317 -20 2247 3127 90 440 0 +101 125 264 -10 2495 3375 90 612 0 +102 131 253 -30 2449 3329 90 196 0 +103 184 188 -20 900 1780 90 848 0 +104 128 209 20 733 1613 90 0 631 +105 373 364 -10 2777 3657 90 413 0 +106 389 342 10 785 1665 90 0 536 +107 420 20 30 286 1166 90 0 607 +108 132 218 10 122 1002 90 0 638 +109 32 256 10 541 1421 90 0 39 +110 406 339 20 179 1059 90 0 375 +111 191 397 20 158 1038 90 0 38 +112 72 341 -20 2506 3386 90 784 0 +113 35 308 -20 2712 3592 90 6 0 +114 169 360 20 1812 2692 90 0 478 +115 222 381 -20 2229 3109 90 296 0 +116 96 292 10 502 1382 90 0 552 +117 311 496 -30 368 1248 90 991 0 +118 220 384 10 2323 3203 90 0 182 +119 259 243 20 11 891 90 0 64 +120 349 476 -20 2123 3003 90 735 0 +121 63 159 20 649 1529 90 0 992 +122 112 243 -10 1961 2841 90 850 0 +123 448 302 -20 1967 2847 90 982 0 +124 343 27 -10 836 1716 90 846 0 +125 67 485 -20 1806 2686 90 665 0 +126 220 359 -30 1064 1944 90 428 0 +127 147 435 10 1751 2631 90 0 371 +128 317 235 -20 2210 3090 90 823 0 +129 43 355 20 1235 2115 90 0 87 +130 368 340 -30 148 1028 90 589 0 +131 450 72 -20 2201 3081 90 471 0 +132 400 364 -30 210 1090 90 889 0 +133 355 480 -10 1256 2136 90 479 0 +134 450 153 20 222 1102 90 0 785 +135 126 188 20 1738 2618 90 0 897 +136 380 223 10 1254 2134 90 0 756 +137 71 453 -10 325 1205 90 913 0 +138 54 287 20 199 1079 90 0 632 +139 420 168 -20 2756 3636 90 439 0 +140 219 89 20 2332 3212 90 0 688 +141 189 327 10 98 978 90 0 170 +142 191 309 -30 1070 1950 90 945 0 +143 301 67 40 189 1069 90 0 546 +144 484 161 -20 1336 2216 90 818 0 +145 77 483 -10 2179 3059 90 217 0 +146 241 375 10 1638 2518 90 0 676 +147 428 64 20 841 1721 90 0 774 +148 403 361 10 1092 1972 90 0 682 +149 257 336 -10 2746 3626 90 15 0 +150 131 241 -10 2825 3705 90 740 0 +151 63 166 -30 2142 3022 90 605 0 +152 71 368 -20 2730 3610 90 754 0 +153 272 228 10 1673 2553 90 0 324 +154 25 290 -30 2511 3391 90 568 0 +155 441 157 10 212 1092 90 0 757 +156 13 266 -20 844 1724 90 212 0 +157 251 376 -10 2818 3698 90 279 0 +158 61 170 30 2048 2928 90 0 18 +159 386 357 20 1073 1953 90 0 854 +160 95 475 -20 2565 3445 90 707 0 +161 90 298 -10 1744 2624 90 55 0 +162 71 388 -10 1145 2025 90 758 0 +163 383 246 -30 2508 3388 90 280 0 +164 352 38 -30 266 1146 90 77 0 +165 395 1 -10 527 1407 90 935 0 +166 120 210 -30 922 1802 90 777 0 +167 46 383 -20 928 1808 90 895 0 +168 202 198 -20 1918 2798 90 593 0 +169 358 365 30 1966 2846 0 0 1007 +170 191 352 -10 117 997 90 141 0 +171 470 152 30 866 1746 90 0 65 +172 228 124 20 127 1007 90 0 545 +173 402 230 -10 1842 2722 90 723 0 +174 323 229 -20 1358 2238 90 603 0 +175 331 486 -20 1643 2523 90 874 0 +176 112 208 -20 1241 2121 90 442 0 +177 172 435 -40 2701 3581 90 386 0 +178 326 498 10 661 1541 90 0 361 +179 460 183 -20 2427 3307 90 749 0 +180 95 279 -10 157 1037 90 14 0 +181 76 456 30 420 1300 90 0 57 +182 242 350 -10 2451 3331 90 118 0 +183 152 196 10 111 991 90 0 313 +184 268 351 -30 1090 1970 90 67 0 +185 360 356 10 2373 3253 90 0 53 +186 39 296 -20 1623 2503 90 860 0 +187 262 368 30 802 1682 90 0 494 +188 204 90 -20 734 1614 90 712 0 +189 149 273 20 103 983 90 0 378 +190 446 86 10 2689 3569 90 0 355 +191 139 269 -30 1368 2248 90 346 0 +192 483 170 -10 1837 2717 90 908 0 +193 39 278 10 1241 2121 90 0 564 +194 201 307 -20 1353 2233 90 567 0 +195 395 378 -20 1276 2156 90 689 0 +196 139 262 30 1090 1970 90 0 102 +197 176 447 20 210 1090 90 0 857 +198 67 380 20 1919 2799 90 0 412 +199 35 358 -20 1137 2017 90 62 0 +200 294 455 30 2066 2946 90 0 354 +201 351 33 20 361 1241 90 0 909 +202 216 316 -10 1959 2839 90 403 0 +203 261 96 -20 154 1034 90 210 0 +204 238 57 30 976 1856 90 0 837 +205 383 18 20 1283 2163 90 0 259 +206 152 460 -10 950 1830 90 250 0 +207 94 479 -10 2470 3350 90 288 0 +208 337 453 -20 2625 3505 90 364 0 +209 135 460 -10 1425 2305 90 253 0 +210 260 104 20 146 1026 90 0 203 +211 337 63 -20 1685 2565 90 295 0 +212 32 247 20 442 1322 90 0 156 +213 394 205 10 150 1030 90 0 75 +214 95 294 10 410 1290 90 0 716 +215 253 241 -10 2475 3355 90 336 0 +216 223 90 -10 2427 3307 90 761 0 +217 64 473 10 924 1804 90 0 145 +218 275 431 10 882 1762 90 0 927 +219 261 84 10 374 1254 90 0 58 +220 176 296 20 870 1750 90 0 872 +221 361 349 10 2656 3536 90 0 89 +222 168 433 -20 2744 3624 90 765 0 +223 394 10 40 809 1689 90 0 706 +224 308 60 20 416 1296 90 0 726 +225 94 456 20 2686 3566 90 0 388 +226 73 484 -30 2085 2965 90 10 0 +227 277 434 -20 1067 1947 90 448 0 +228 119 232 10 1579 2459 90 0 60 +229 78 375 -10 212 1092 90 257 0 +230 366 346 20 288 1168 90 0 303 +231 125 181 -20 2358 3238 90 382 0 +232 69 493 -30 1617 2497 90 760 0 +233 432 80 40 548 1428 90 0 699 +234 72 391 10 1052 1932 90 0 517 +235 85 486 -20 2278 3158 90 664 0 +236 204 371 30 389 1269 90 0 282 +237 173 328 -20 2121 3001 90 432 0 +238 280 423 -30 591 1471 90 826 0 +239 200 327 -10 2790 3670 90 585 0 +240 241 98 -20 2627 3507 90 685 0 +241 96 356 -20 186 1066 90 582 0 +242 332 491 -20 851 1731 90 730 0 +243 81 283 -40 1264 2144 90 565 0 +244 373 22 -20 1952 2832 90 331 0 +245 255 371 40 1849 2729 90 0 35 +246 358 359 20 2279 3159 90 0 939 +247 216 93 -20 2113 2993 90 91 0 +248 73 360 -20 2587 3467 90 763 0 +249 305 212 20 796 1676 90 0 830 +250 151 462 10 1042 1922 90 0 206 +251 47 389 30 742 1622 90 0 33 +252 155 198 30 108 988 90 0 787 +253 152 457 10 857 1737 90 0 209 +254 329 48 -20 1195 2075 90 896 0 +255 88 394 -30 367 1247 90 937 0 +256 153 295 -10 2838 3718 90 399 0 +257 81 373 10 230 1110 90 0 229 +258 163 453 10 333 1213 90 0 809 +259 378 25 -20 2048 2928 90 205 0 +260 401 385 -10 2504 3384 90 16 0 +261 184 340 10 2408 3288 90 0 865 +262 402 362 20 1001 1881 90 0 26 +263 70 482 -20 1991 2871 90 83 0 +264 357 445 -30 2722 3602 90 820 0 +265 212 71 -20 844 1724 90 539 0 +266 231 81 -10 2043 2923 90 788 0 +267 379 208 10 475 1355 90 0 487 +268 236 95 30 1757 2637 90 0 506 +269 386 344 20 879 1759 90 0 501 +270 189 200 10 1629 2509 90 0 414 +271 296 253 -20 474 1354 90 387 0 +272 73 303 10 2037 2917 90 0 470 +273 30 162 -10 1742 2622 90 281 0 +274 230 95 20 1539 2419 90 0 984 +275 57 131 -30 1043 1923 90 963 0 +276 379 245 -10 2413 3293 90 402 0 +277 107 221 -10 174 1054 90 405 0 +278 154 458 -10 765 1645 90 95 0 +279 290 417 10 171 1051 90 0 157 +280 272 243 30 23 903 90 0 163 +281 94 130 10 241 1121 90 0 273 +282 222 356 -30 1248 2128 90 236 0 +283 243 108 -10 2701 3581 90 416 0 +284 224 93 -20 1831 2711 90 936 0 +285 155 242 -40 526 1406 90 94 0 +286 440 302 -10 919 1799 90 298 0 +287 221 102 -20 2498 3378 90 920 0 +288 52 484 10 1321 2201 90 0 207 +289 111 244 -20 1869 2749 90 604 0 +290 132 273 -30 1843 2723 90 587 0 +291 228 186 20 67 947 90 0 917 +292 221 374 30 770 1650 90 0 310 +293 406 286 -10 2784 3664 90 714 0 +294 390 9 30 903 1783 90 0 381 +295 335 52 20 1401 2281 90 0 211 +296 189 368 20 132 1012 90 0 115 +297 397 40 40 2131 3011 90 0 454 +298 408 305 10 167 1047 90 0 286 +299 156 434 -30 2505 3385 90 640 0 +300 180 335 -20 2221 3101 90 804 0 +301 327 483 -30 1738 2618 90 840 0 +302 363 62 -20 2725 3605 90 815 0 +303 375 342 -20 579 1459 90 230 0 +304 16 280 -20 2407 3287 90 737 0 +305 277 431 30 974 1854 90 0 744 +306 110 241 -20 1776 2656 90 666 0 +307 48 385 20 648 1528 90 0 360 +308 152 260 10 98 978 90 0 862 +309 255 120 10 130 1010 90 0 415 +310 214 382 -30 2131 3011 90 292 0 +311 414 384 -30 2302 3182 90 54 0 +312 232 378 -10 1834 2714 90 867 0 +313 80 141 -10 201 1081 90 183 0 +314 188 330 30 153 1033 90 0 80 +315 157 192 -20 2835 3715 90 21 0 +316 101 237 -30 1471 2351 90 987 0 +317 74 360 40 2496 3376 90 0 609 +318 267 260 20 149 1029 90 0 359 +319 378 46 -20 2704 3584 90 404 0 +320 420 311 30 533 1413 90 0 594 +321 384 217 20 1449 2329 90 0 646 +322 418 300 10 251 1131 90 0 4 +323 356 77 -20 1889 2769 90 575 0 +324 253 244 -10 2382 3262 90 153 0 +325 323 258 10 968 1848 90 0 975 +326 293 454 20 2251 3131 90 0 979 +327 231 97 20 2527 3407 90 0 803 +328 316 234 10 2301 3181 90 0 486 +329 207 196 -10 2205 3085 90 528 0 +330 321 228 -20 1840 2720 90 724 0 +331 382 17 20 1374 2254 90 0 244 +332 206 326 -20 2857 3737 90 904 0 +333 198 284 10 62 942 90 0 719 +334 137 186 10 2552 3432 0 0 1006 +335 229 396 -10 2522 3402 90 31 0 +336 268 235 10 1482 2362 90 0 215 +337 95 243 20 399 1279 90 0 59 +338 297 430 20 186 1066 90 0 731 +339 393 368 10 185 1065 90 0 537 +340 66 391 -10 1241 2121 90 915 0 +341 189 339 -10 2503 3383 90 919 0 +342 280 351 30 105 985 90 0 390 +343 241 77 30 865 1745 90 0 663 +344 134 265 -10 2306 3186 90 548 0 +345 420 95 30 230 1110 90 0 518 +346 111 279 30 141 1021 90 0 191 +347 367 358 -50 1773 2653 90 394 0 +348 239 373 -20 1545 2425 90 513 0 +349 384 235 20 2312 3192 90 0 645 +350 284 360 30 115 995 90 0 851 +351 325 75 -20 2010 2890 90 465 0 +352 279 369 10 142 1022 90 0 96 +353 340 449 10 2720 3600 0 0 1003 +354 275 448 -30 2542 3422 90 200 0 +355 447 88 -10 2603 3483 90 190 0 +356 314 279 10 70 950 90 0 514 +357 434 377 10 1985 2865 90 0 702 +358 67 377 -10 1826 2706 90 811 0 +359 370 353 -20 386 1266 90 318 0 +360 57 367 -20 1809 2689 90 307 0 +361 332 486 -10 1552 2432 90 178 0 +362 386 361 -20 1167 2047 90 385 0 +363 55 282 40 197 1077 90 0 928 +364 317 467 20 227 1107 90 0 208 +365 335 54 -10 1493 2373 90 898 0 +366 348 466 -10 2223 3103 90 489 0 +367 132 314 -10 2810 3690 90 868 0 +368 328 216 -30 1552 2432 90 674 0 +369 416 48 10 1520 2400 90 0 621 +370 370 55 10 2526 3406 90 0 759 +371 149 434 -10 1843 2723 90 127 0 +372 466 169 -20 2142 3022 90 772 0 +373 141 267 10 1275 2155 90 0 425 +374 258 350 20 1462 2342 90 0 728 +375 428 312 -20 724 1604 90 110 0 +376 211 188 -20 300 1180 90 970 0 +377 50 343 -10 2394 3274 90 657 0 +378 107 311 -20 2453 3333 90 189 0 +379 178 441 20 204 1084 90 0 888 +380 232 85 -20 1949 2829 90 924 0 +381 391 23 -30 2338 3218 90 294 0 +382 137 227 20 115 995 90 0 231 +383 161 203 20 100 980 90 0 474 +384 363 212 30 2825 3705 90 0 686 +385 384 346 20 971 1851 90 0 362 +386 166 434 40 2605 3485 90 0 177 +387 274 248 20 24 904 90 0 271 +388 156 421 -20 2749 3629 90 225 0 +389 346 211 10 103 983 90 0 662 +390 265 358 -30 992 1872 90 342 0 +391 96 407 20 219 1099 90 0 750 +392 443 70 -10 2104 2984 90 990 0 +393 125 212 10 827 1707 90 0 74 +394 361 337 50 141 1021 90 0 347 +395 322 78 -30 2104 2984 90 701 0 +396 481 156 20 1240 2120 90 0 81 +397 188 293 30 477 1357 90 0 648 +398 76 408 30 660 1540 90 0 892 +399 130 304 10 2813 3693 90 0 256 +400 378 363 -20 1389 2269 90 722 0 +401 185 301 -10 970 1850 90 891 0 +402 385 235 10 2221 3101 90 0 276 +403 261 350 10 1369 2249 90 0 202 +404 389 33 20 2623 3503 90 0 319 +405 151 214 10 151 1031 90 0 277 +406 265 94 10 156 1036 90 0 11 +407 65 164 20 2235 3115 90 0 629 +408 293 81 10 174 1054 90 0 477 +409 363 55 -20 2623 3503 90 655 0 +410 465 176 -10 2239 3119 90 583 0 +411 428 298 30 1294 2174 90 0 852 +412 75 379 -20 2207 3087 90 198 0 +413 404 378 10 497 1377 90 0 105 +414 203 203 -10 2490 3370 90 270 0 +415 259 88 -10 185 1065 90 309 0 +416 362 17 10 1524 2404 90 0 283 +417 320 258 20 204 1084 90 0 901 +418 59 358 20 1998 2878 90 0 841 +419 316 453 -10 213 1093 90 625 0 +420 225 192 20 63 943 90 0 601 +421 140 206 -30 118 998 90 554 0 +422 83 151 -10 194 1074 90 550 0 +423 366 196 10 127 1007 90 0 988 +424 108 245 20 1370 2250 90 0 25 +425 129 267 -10 2120 3000 90 373 0 +426 57 379 20 547 1427 90 0 644 +427 329 56 20 1097 1977 90 0 989 +428 213 363 30 874 1754 90 0 126 +429 76 391 -20 958 1838 90 659 0 +430 330 259 30 871 1751 90 0 591 +431 136 217 30 538 1418 90 0 696 +432 165 333 20 2021 2901 90 0 237 +433 160 431 -20 2742 3622 90 711 0 +434 338 489 30 948 1828 90 0 672 +435 335 64 10 1593 2473 90 0 789 +436 412 361 -20 1388 2268 90 669 0 +437 259 90 30 277 1157 90 0 843 +438 265 77 20 472 1352 90 0 773 +439 460 173 20 2527 3407 90 0 139 +440 83 301 20 1937 2817 90 0 100 +441 201 331 20 347 1227 90 0 959 +442 118 214 20 136 1016 90 0 176 +443 395 30 -30 2436 3316 90 510 0 +444 125 444 -20 1637 2517 90 590 0 +445 283 248 -10 33 913 90 921 0 +446 391 334 -10 687 1567 90 509 0 +447 212 215 -10 2800 3680 90 886 0 +448 276 428 20 688 1568 90 0 227 +449 96 152 20 182 1062 90 0 985 +450 425 85 10 240 1120 90 0 693 +451 336 7 -10 1224 2104 90 876 0 +452 196 219 -20 2694 3574 90 683 0 +453 210 94 20 637 1517 90 0 926 +454 310 81 -40 2486 3366 90 297 0 +455 341 37 20 231 1111 90 0 515 +456 344 478 20 1936 2816 90 0 43 +457 406 37 40 264 1144 90 0 864 +458 69 346 -10 2602 3482 90 51 0 +459 80 376 40 211 1091 90 0 502 +460 314 449 -30 209 1089 90 929 0 +461 209 201 30 2393 3273 90 0 637 +462 88 379 20 329 1209 90 0 822 +463 352 500 30 1145 2025 90 0 549 +464 65 357 10 2094 2974 90 0 82 +465 345 15 20 1122 2002 90 0 351 +466 125 245 20 2642 3522 90 0 476 +467 52 369 -20 1713 2593 90 71 0 +468 449 140 -10 370 1250 90 1000 0 +469 430 310 -30 816 1696 90 993 0 +470 109 325 -10 2648 3528 90 272 0 +471 446 139 20 277 1157 90 0 131 +472 229 214 20 41 921 90 0 505 +473 197 301 10 73 953 90 0 816 +474 146 245 -20 336 1216 90 383 0 +475 401 368 20 304 1184 90 0 523 +476 116 259 -20 2253 3133 90 466 0 +477 374 55 -10 2432 3312 90 408 0 +478 249 251 -20 2676 3556 90 114 0 +479 325 490 10 563 1443 90 0 133 +480 59 159 10 743 1623 90 0 493 +481 186 177 -20 1001 1881 90 971 0 +482 319 229 -20 1932 2812 90 639 0 +483 26 269 -10 645 1525 90 622 0 +484 53 139 30 854 1734 90 0 721 +485 471 154 -30 959 1839 90 824 0 +486 301 247 -10 2878 3758 90 328 0 +487 388 220 -10 1063 1943 90 267 0 +488 235 81 20 1090 1970 90 0 1 +489 347 479 10 2029 2909 90 0 366 +490 367 59 10 2721 3601 90 0 899 +491 261 370 -10 709 1589 90 746 0 +492 441 287 40 2555 3435 90 0 46 +493 44 153 -10 1635 2515 90 480 0 +494 263 351 -30 1185 2065 90 187 0 +495 444 157 10 215 1095 90 0 661 +496 374 17 10 1565 2445 90 0 952 +497 448 295 -20 2364 3244 90 966 0 +498 446 297 10 1872 2752 90 0 624 +499 347 40 30 231 1111 90 0 678 +500 318 493 -30 465 1345 90 9 0 +501 399 352 -20 900 1780 90 269 0 +502 51 364 -40 1527 2407 90 459 0 +503 250 217 -20 2174 3054 90 19 0 +504 107 225 30 145 1025 90 0 599 +505 173 208 -20 1521 2401 90 472 0 +506 204 189 -30 2018 2898 90 268 0 +507 399 379 -10 2600 3480 90 541 0 +508 79 346 -10 2748 3628 90 977 0 +509 360 338 10 140 1020 90 0 446 +510 390 17 30 1093 1973 90 0 443 +511 207 337 20 445 1325 90 0 28 +512 409 361 30 697 1577 90 0 79 +513 206 377 20 199 1079 90 0 348 +514 429 294 -10 1583 2463 90 356 0 +515 375 31 -20 1825 2705 90 455 0 +516 426 80 20 362 1242 90 0 885 +517 74 374 -10 2302 3182 90 234 0 +518 408 20 -30 279 1159 90 345 0 +519 239 369 -10 1451 2331 90 794 0 +520 420 308 30 349 1229 90 0 667 +521 254 357 20 1652 2532 90 0 807 +522 53 297 -10 2742 3622 90 710 0 +523 434 382 -20 1890 2770 90 475 0 +524 204 171 20 598 1478 90 0 736 +525 173 169 -10 1198 2078 90 623 0 +526 190 332 -20 246 1126 90 713 0 +527 274 231 -10 1766 2646 90 533 0 +528 207 194 10 2113 2993 90 0 329 +529 315 232 -20 2393 3273 90 739 0 +530 425 87 20 239 1119 90 0 715 +531 312 64 20 222 1102 90 0 738 +532 129 244 -20 2548 3428 90 571 0 +533 278 230 10 1106 1986 90 0 527 +534 351 75 -20 1794 2674 90 700 0 +535 185 293 -20 570 1450 90 540 0 +536 364 364 -10 1870 2750 90 106 0 +537 432 369 -10 1787 2667 90 339 0 +538 128 249 20 983 1863 90 0 949 +539 221 179 20 76 956 90 0 265 +540 194 296 20 290 1170 90 0 535 +541 413 350 10 1197 2077 90 0 507 +542 214 372 10 583 1463 90 0 61 +543 379 229 10 685 1565 90 0 570 +544 91 298 10 1653 2533 90 0 618 +545 226 120 -20 132 1012 90 172 0 +546 344 46 -40 1300 2180 90 143 0 +547 238 84 10 1274 2154 90 0 771 +548 138 276 10 1555 2435 90 0 344 +549 346 487 -30 1448 2328 90 463 0 +550 95 160 10 179 1059 90 0 422 +551 103 266 30 702 1582 90 0 880 +552 98 286 -10 977 1857 90 116 0 +553 77 172 -20 2616 3496 90 768 0 +554 147 199 30 114 994 90 0 421 +555 210 98 -10 361 1241 90 999 0 +556 428 292 10 1491 2371 90 0 85 +557 121 236 10 1674 2554 90 0 642 +558 336 479 20 1838 2718 90 0 887 +559 203 369 10 481 1361 90 0 23 +560 296 232 -20 908 1788 90 690 0 +561 87 369 10 201 1081 90 0 802 +562 247 88 30 1564 2444 90 0 578 +563 104 246 10 993 1873 90 0 597 +564 67 302 -10 2133 3013 90 193 0 +565 114 296 40 143 1023 90 0 243 +566 394 356 30 178 1058 90 0 825 +567 192 306 20 1163 2043 90 0 194 +568 16 285 30 2132 3012 90 0 154 +569 419 310 10 442 1322 90 0 995 +570 389 221 -10 972 1852 90 543 0 +571 129 264 20 2401 3281 90 0 532 +572 172 483 -10 544 1424 90 776 0 +573 325 251 -30 1065 1945 90 743 0 +574 151 436 10 2026 2906 90 0 780 +575 263 91 20 159 1039 90 0 323 +576 401 15 -20 325 1205 90 957 0 +577 253 382 -30 2730 3610 90 687 0 +578 247 89 -30 1655 2535 90 562 0 +579 283 229 30 1011 1891 90 0 2 +580 366 341 20 193 1073 90 0 697 +581 392 213 20 1732 2612 90 0 934 +582 167 304 20 99 979 90 0 241 +583 477 154 10 1146 2026 90 0 410 +584 234 383 10 1739 2619 90 0 47 +585 199 327 10 2699 3579 90 0 239 +586 140 220 30 443 1323 90 0 983 +587 144 266 30 107 987 90 0 290 +588 432 105 10 2712 3592 0 0 1002 +589 368 325 30 139 1019 90 0 130 +590 202 386 20 144 1024 90 0 444 +591 325 246 -30 1160 2040 90 430 0 +592 430 86 20 2406 3286 90 0 13 +593 200 195 20 1825 2705 90 0 168 +594 440 295 -30 1776 2656 90 320 0 +595 77 287 10 1545 2425 90 0 790 +596 187 362 -20 1426 2306 90 940 0 +597 131 207 -10 639 1519 90 563 0 +598 405 5 -10 426 1306 90 650 0 +599 125 226 -30 1029 1909 90 504 0 +600 254 335 -30 2653 3533 90 900 0 +601 212 168 -20 500 1380 90 420 0 +602 281 279 20 354 1234 90 0 844 +603 326 241 20 1255 2135 90 0 174 +604 152 241 20 433 1313 90 0 289 +605 71 139 30 447 1327 90 0 151 +606 46 277 10 229 1109 90 0 619 +607 393 13 -30 998 1878 90 107 0 +608 87 454 40 522 1402 90 0 76 +609 86 359 -40 2748 3628 90 317 0 +610 220 192 20 65 945 90 0 635 +611 426 279 -30 2752 3632 90 835 0 +612 131 267 10 2212 3092 90 0 101 +613 200 297 30 193 1073 90 0 911 +614 299 442 10 1544 2424 90 0 998 +615 265 218 -20 2069 2949 90 68 0 +616 398 231 -40 1936 2816 90 654 0 +617 312 74 -30 2389 3269 90 704 0 +618 99 307 -10 2354 3234 90 544 0 +619 22 283 -10 953 1833 90 606 0 +620 67 160 10 2330 3210 90 0 933 +621 390 42 -10 2228 3108 90 369 0 +622 44 279 10 208 1088 90 0 483 +623 200 182 10 793 1673 90 0 525 +624 458 303 -10 2171 3051 90 498 0 +625 298 438 10 207 1087 90 0 419 +626 62 301 20 2750 3630 0 0 1005 +627 112 251 10 1273 2153 90 0 930 +628 184 354 30 1616 2496 90 0 751 +629 140 180 -20 2649 3529 90 407 0 +630 269 428 20 785 1665 90 0 42 +631 123 206 -20 1525 2405 90 104 0 +632 36 284 -20 1338 2218 90 138 0 +633 272 233 10 1387 2267 0 0 1008 +634 320 231 20 2024 2904 90 0 902 +635 211 180 -20 398 1278 90 610 0 +636 114 169 -10 2252 3132 90 875 0 +637 245 239 -30 2573 3453 90 461 0 +638 117 204 -10 1338 2218 90 108 0 +639 316 254 20 390 1270 90 0 482 +640 169 443 30 209 1089 90 0 299 +641 212 96 10 544 1424 90 0 808 +642 119 285 -10 2703 3583 90 557 0 +643 71 163 -20 2425 3305 90 29 0 +644 78 361 -20 2740 3620 90 426 0 +645 354 219 -20 2836 3716 90 349 0 +646 389 233 -20 2127 3007 90 321 0 +647 90 391 10 213 1093 90 0 905 +648 209 307 -30 1451 2331 90 397 0 +649 363 351 -10 2563 3443 90 679 0 +650 405 47 10 255 1135 90 0 598 +651 278 329 10 83 963 90 0 764 +652 261 371 -30 618 1498 90 827 0 +653 302 470 -20 1867 2747 90 782 0 +654 373 205 40 130 1010 90 0 616 +655 381 20 20 1468 2348 90 0 409 +656 90 277 30 302 1182 90 0 795 +657 46 341 10 2299 3179 90 0 377 +658 50 138 -10 1529 2409 90 677 0 +659 61 437 20 265 1145 90 0 429 +660 331 252 -20 774 1654 90 967 0 +661 440 81 -10 2305 3185 90 495 0 +662 384 206 -10 379 1259 90 389 0 +663 232 87 -30 1144 2024 90 343 0 +664 59 471 20 1124 2004 90 0 235 +665 174 304 20 93 973 90 0 125 +666 106 248 20 1086 1966 90 0 306 +667 410 287 -30 2780 3660 90 520 0 +668 206 313 20 1731 2611 90 0 882 +669 412 367 20 600 1480 90 0 436 +670 412 300 20 169 1049 90 0 870 +671 206 295 -10 2449 3329 90 948 0 +672 329 459 -30 2525 3405 90 434 0 +673 177 436 20 199 1079 90 0 856 +674 266 264 30 243 1123 90 0 368 +675 308 235 -10 2775 3655 90 84 0 +676 260 330 -10 2843 3723 90 146 0 +677 49 136 10 1345 2225 90 0 658 +678 356 28 -30 640 1520 90 499 0 +679 428 384 10 2084 2964 90 0 649 +680 220 362 20 971 1851 90 0 878 +681 437 61 -20 1728 2608 90 953 0 +682 365 360 -10 1680 2560 90 148 0 +683 107 168 20 2155 3035 90 0 452 +684 220 177 20 101 981 90 0 968 +685 347 21 20 1026 1906 90 0 240 +686 293 245 -30 2901 3781 90 384 0 +687 267 436 30 2647 3527 90 0 577 +688 216 96 -20 2206 3086 90 140 0 +689 383 351 20 167 1047 90 0 195 +690 289 240 20 579 1459 90 0 560 +691 129 185 -20 2454 3334 90 893 0 +692 291 450 10 2345 3225 90 0 834 +693 387 21 -10 1188 2068 90 450 0 +694 116 255 20 879 1759 90 0 994 +695 50 368 30 1621 2501 90 0 698 +696 121 249 -30 2061 2941 90 431 0 +697 404 346 -20 803 1683 90 580 0 +698 77 360 -30 2739 3619 90 695 0 +699 447 102 -40 2698 3578 90 233 0 +700 366 16 20 1618 2498 90 0 534 +701 348 16 30 1420 2300 90 0 395 +702 353 346 -10 2754 3634 90 357 0 +703 54 485 30 1413 2293 90 0 799 +704 319 77 30 2198 3078 90 0 617 +705 83 282 10 1172 2052 90 0 906 +706 384 24 -40 2241 3121 90 223 0 +707 52 469 20 1027 1907 90 0 160 +708 199 200 -30 2585 3465 90 40 0 +709 273 234 -10 1296 2176 90 942 0 +710 16 281 10 2316 3196 90 0 522 +711 151 442 20 2122 3002 90 0 433 +712 223 114 20 138 1018 90 0 188 +713 191 308 20 82 962 90 0 526 +714 448 297 10 2272 3152 90 0 293 +715 386 28 -20 2147 3027 90 530 0 +716 106 295 -10 693 1573 90 214 0 +717 387 224 30 1157 2037 90 0 69 +718 96 377 10 199 1079 90 0 753 +719 86 361 -10 2746 3626 90 333 0 +720 211 107 10 171 1051 90 0 814 +721 43 125 -30 1243 2123 90 484 0 +722 369 351 20 478 1358 90 0 400 +723 388 228 10 875 1755 90 0 173 +724 325 228 20 1450 2330 90 0 330 +725 490 159 -40 1537 2417 90 791 0 +726 420 78 -20 1038 1918 90 224 0 +727 396 4 10 713 1593 90 0 849 +728 222 317 -20 2055 2935 90 374 0 +729 389 198 -10 183 1063 90 98 0 +730 322 454 20 216 1096 90 0 242 +731 241 391 -20 2625 3505 90 338 0 +732 256 117 -20 2807 3687 90 910 0 +733 298 255 10 48 928 90 0 748 +734 74 363 -20 2403 3283 90 24 0 +735 345 496 20 1047 1927 90 0 120 +736 167 169 -20 1294 2174 90 524 0 +737 23 306 20 1822 2702 90 0 304 +738 317 62 -20 317 1197 90 531 0 +739 319 257 20 296 1176 90 0 529 +740 129 255 10 2356 3236 90 0 150 +741 59 377 20 1728 2608 0 0 1001 +742 138 272 -40 1461 2341 90 923 0 +743 317 251 30 580 1460 90 0 573 +744 279 436 -30 1159 2039 90 305 0 +745 371 207 10 128 1008 90 0 813 +746 263 372 10 526 1406 90 0 491 +747 50 347 -20 2202 3082 90 786 0 +748 275 236 -10 1203 2083 90 733 0 +749 334 47 20 219 1099 90 0 179 +750 50 383 -20 1529 2409 90 391 0 +751 170 338 -30 1924 2804 90 628 0 +752 245 109 -20 2729 3609 90 63 0 +753 69 475 -10 829 1709 90 718 0 +754 54 372 20 1631 2511 90 0 152 +755 198 334 -20 1843 2723 90 797 0 +756 380 228 -10 777 1657 90 136 0 +757 425 118 -10 219 1099 90 155 0 +758 80 398 10 466 1346 90 0 162 +759 366 57 -10 2716 3596 90 370 0 +760 67 463 30 280 1160 90 0 232 +761 226 86 10 2235 3115 90 0 216 +762 59 480 -20 1223 2103 90 801 0 +763 40 378 20 1026 1906 90 0 248 +764 250 367 -10 1753 2633 90 651 0 +765 157 436 20 2413 3293 90 0 222 +766 463 161 30 2043 2923 90 0 954 +767 266 250 10 49 929 90 0 36 +768 51 162 20 1853 2733 90 0 553 +769 194 353 -30 1011 1891 90 829 0 +770 383 41 -20 2325 3205 90 44 0 +771 247 82 -10 1468 2348 90 547 0 +772 457 142 20 469 1349 90 0 372 +773 244 94 -20 1435 2315 90 438 0 +774 441 63 -20 1914 2794 90 147 0 +775 244 371 20 1950 2830 90 0 958 +776 174 444 10 208 1088 90 0 572 +777 94 247 30 493 1373 90 0 166 +778 320 225 20 1654 2534 90 0 976 +779 316 80 -20 2292 3172 90 52 0 +780 155 447 -10 2312 3192 90 574 0 +781 211 308 -10 1543 2423 90 997 0 +782 297 442 20 1452 2332 90 0 653 +783 200 342 10 637 1517 90 0 974 +784 44 325 20 2725 3605 90 0 112 +785 438 60 -20 1820 2700 90 134 0 +786 80 374 20 210 1090 90 0 747 +787 59 163 -30 1951 2831 90 252 0 +788 236 92 10 1850 2730 90 0 266 +789 414 66 -10 1232 2112 90 435 0 +790 34 279 -10 1146 2026 90 595 0 +791 475 156 40 1053 1933 90 0 725 +792 404 310 20 165 1045 90 0 931 +793 367 239 -20 2796 3676 90 946 0 +794 210 359 10 1208 2088 90 0 519 +795 133 278 -30 1650 2530 90 656 0 +796 446 169 -10 2732 3612 90 48 0 +797 188 356 20 1522 2402 90 0 755 +798 312 252 20 485 1365 90 0 56 +799 69 485 -30 1898 2778 90 703 0 +800 413 353 10 1290 2170 90 0 879 +801 54 446 20 277 1157 90 0 762 +802 56 357 -10 1428 2308 90 561 0 +803 230 105 -20 2598 3478 90 327 0 +804 196 302 20 74 954 90 0 300 +805 391 373 10 2700 3580 90 0 916 +806 101 295 30 598 1478 90 0 996 +807 234 350 -20 2257 3137 90 521 0 +808 215 108 -10 2400 3280 90 641 0 +809 142 457 -10 1233 2113 90 258 0 +810 283 425 -10 498 1378 90 981 0 +811 77 397 10 559 1439 90 0 358 +812 105 317 10 2549 3429 90 0 925 +813 382 213 -10 1355 2235 90 745 0 +814 213 76 -10 940 1820 90 720 0 +815 417 56 20 1422 2302 90 0 302 +816 183 340 -10 2317 3197 90 473 0 +817 123 242 20 2817 3697 90 0 842 +818 475 136 20 669 1549 90 0 144 +819 377 246 -20 2694 3574 90 980 0 +820 310 484 30 266 1146 90 0 264 +821 47 280 -20 205 1085 90 833 0 +822 57 456 -20 282 1162 90 462 0 +823 313 266 20 65 945 90 0 128 +824 475 145 30 768 1648 90 0 485 +825 400 376 -30 402 1282 90 566 0 +826 290 416 30 170 1050 90 0 238 +827 277 369 30 122 1002 90 0 652 +828 91 303 -10 1839 2719 90 50 0 +829 194 301 30 75 955 90 0 769 +830 254 238 -20 2286 3166 90 249 0 +831 215 91 -20 1930 2810 90 965 0 +832 500 162 -10 1728 2608 90 70 0 +833 56 287 20 197 1077 90 0 821 +834 289 452 -10 2438 3318 90 692 0 +835 378 326 30 148 1028 90 0 611 +836 197 350 -10 826 1706 90 964 0 +837 243 88 -30 1371 2251 90 204 0 +838 250 72 20 765 1645 90 0 869 +839 101 290 20 790 1670 90 0 3 +840 351 480 30 1350 2230 90 0 301 +841 67 357 -20 2684 3564 90 418 0 +842 128 240 -20 2822 3702 90 817 0 +843 253 81 -30 666 1546 90 437 0 +844 307 227 -20 2493 3373 90 602 0 +845 233 441 -20 2753 3633 90 847 0 +846 311 47 10 710 1590 90 0 124 +847 292 456 20 2158 3038 90 0 845 +848 183 187 20 1408 2288 90 0 103 +849 392 31 -10 2530 3410 90 727 0 +850 103 251 10 898 1778 90 0 122 +851 300 443 -30 1636 2516 90 350 0 +852 420 295 -30 1392 2272 90 411 0 +853 427 64 -30 932 1812 90 49 0 +854 372 354 -20 1581 2461 90 159 0 +855 101 263 -20 796 1676 90 881 0 +856 141 454 -20 1326 2206 90 673 0 +857 146 461 -20 1137 2017 90 197 0 +858 298 430 30 186 1066 90 0 969 +859 148 270 10 103 983 90 0 37 +860 76 287 20 1454 2334 90 0 186 +861 308 55 30 511 1391 90 0 72 +862 143 257 -10 141 1021 90 308 0 +863 393 2 30 619 1499 90 0 912 +864 385 28 -40 1926 2806 90 457 0 +865 204 291 -10 2543 3423 90 261 0 +866 132 272 30 1934 2814 90 0 90 +867 206 379 10 136 1016 90 0 312 +868 69 383 10 2110 2990 90 0 367 +869 245 96 -20 1343 2223 90 838 0 +870 431 301 -20 1108 1988 90 670 0 +871 448 94 -20 2692 3572 90 32 0 +872 199 305 -20 1260 2140 90 220 0 +873 95 356 -20 2757 3637 90 947 0 +874 328 498 20 753 1633 90 0 175 +875 108 222 10 1137 2017 90 0 636 +876 341 26 10 928 1808 90 0 451 +877 63 454 10 276 1156 90 0 956 +878 222 357 -20 1157 2037 90 680 0 +879 416 364 -10 1578 2458 90 800 0 +880 127 278 -30 1746 2626 90 551 0 +881 140 252 20 237 1117 90 0 855 +882 218 298 -20 2346 3226 90 668 0 +883 432 87 10 2498 3378 90 0 66 +884 216 300 -40 2253 3133 90 973 0 +885 438 72 -20 738 1618 90 516 0 +886 184 178 10 1094 1974 90 0 447 +887 345 468 -20 2317 3197 90 558 0 +888 150 435 -20 1935 2815 90 379 0 +889 395 365 30 185 1065 90 0 132 +890 208 371 20 295 1175 90 0 99 +891 190 292 10 385 1265 90 0 401 +892 78 479 -30 729 1609 90 398 0 +893 104 198 20 1943 2823 90 0 691 +894 346 13 -10 1326 2206 90 932 0 +895 47 388 20 833 1713 90 0 167 +896 315 57 20 811 1691 90 0 254 +897 110 199 -20 1847 2727 90 135 0 +898 323 60 10 910 1790 90 0 365 +899 308 82 -10 2579 3459 90 490 0 +900 216 374 30 675 1555 90 0 600 +901 326 253 -20 679 1559 90 417 0 +902 308 232 -20 2588 3468 90 634 0 +903 118 223 10 134 1014 90 0 955 +904 149 444 20 2215 3095 90 0 332 +905 95 395 -10 212 1092 90 647 0 +906 117 319 -10 2748 3628 90 705 0 +907 262 352 10 1276 2156 90 0 962 +908 468 135 10 572 1452 90 0 192 +909 351 31 -20 453 1333 90 201 0 +910 361 15 20 1758 2638 90 0 732 +911 195 300 -30 98 978 90 613 0 +912 397 27 -30 2028 2908 90 863 0 +913 179 311 10 93 973 90 0 137 +914 77 133 10 349 1229 90 0 17 +915 66 397 10 765 1645 90 0 340 +916 366 352 -10 2470 3350 90 805 0 +917 221 87 -20 1043 1923 90 291 0 +918 347 23 -20 740 1620 90 88 0 +919 176 358 10 1715 2595 90 0 341 +920 229 78 20 2136 3016 90 0 287 +921 272 246 10 22 902 90 0 445 +922 293 67 20 187 1067 0 0 1004 +923 140 265 40 1183 2063 90 0 742 +924 238 83 20 1183 2063 90 0 380 +925 136 296 -10 2822 3702 90 812 0 +926 218 98 -20 1642 2522 90 453 0 +927 290 440 -10 1261 2141 90 218 0 +928 29 302 -40 1725 2605 90 363 0 +929 290 425 30 179 1059 90 0 460 +930 124 247 -10 2735 3615 90 627 0 +931 442 287 -20 2464 3344 90 792 0 +932 294 64 10 191 1071 90 0 894 +933 74 165 -10 2518 3398 90 620 0 +934 382 245 -20 2599 3479 90 581 0 +935 405 24 10 274 1154 90 0 165 +936 211 97 20 452 1332 90 0 284 +937 88 390 30 273 1153 90 0 255 +938 37 295 20 1531 2411 90 0 950 +939 359 371 -20 2062 2942 90 246 0 +940 186 372 20 1325 2205 90 0 596 +941 116 446 -20 1538 2418 90 951 0 +942 293 249 10 43 923 90 0 709 +943 83 228 20 289 1169 90 0 27 +944 96 269 -10 605 1485 90 41 0 +945 179 284 30 671 1551 90 0 142 +946 368 219 20 580 1460 90 0 793 +947 66 359 20 2731 3611 90 0 873 +948 189 338 10 2594 3474 90 0 671 +949 163 277 -20 2853 3733 90 538 0 +950 5 296 -20 2026 2906 90 938 0 +951 152 478 20 655 1535 90 0 941 +952 366 34 -10 1726 2606 90 496 0 +953 429 80 20 455 1335 90 0 681 +954 464 178 -30 2331 3211 90 766 0 +955 138 196 -10 1633 2513 90 903 0 +956 87 481 -10 2373 3253 90 877 0 +957 425 99 20 231 1111 90 0 576 +958 241 362 -20 2050 2930 90 775 0 +959 207 289 -20 2637 3517 90 441 0 +960 264 365 10 895 1775 90 0 20 +961 102 289 -30 882 1762 90 97 0 +962 233 346 -10 2351 3231 90 907 0 +963 78 141 30 203 1083 90 0 275 +964 196 348 10 734 1614 90 0 836 +965 216 92 20 2022 2902 90 0 831 +966 444 309 20 2065 2945 90 0 497 +967 313 263 20 106 986 90 0 660 +968 211 198 -20 2300 3180 90 684 0 +969 314 436 -30 1741 2621 90 858 0 +970 217 189 20 204 1084 90 0 376 +971 197 178 20 698 1578 90 0 481 +972 60 497 10 1517 2397 90 0 45 +973 206 312 40 1640 2520 90 0 884 +974 197 351 -10 917 1797 90 783 0 +975 305 233 -10 2681 3561 90 325 0 +976 297 250 -20 2897 3777 90 778 0 +977 71 348 10 2695 3575 90 0 508 +978 11 269 10 750 1630 90 0 92 +979 247 447 -20 2747 3627 90 326 0 +980 386 213 20 1636 2516 90 0 819 +981 292 434 10 395 1275 90 0 810 +982 436 301 20 1013 1893 90 0 123 +983 145 221 -30 348 1228 90 586 0 +984 224 96 -20 1738 2618 90 274 0 +985 59 128 -20 1136 2016 90 449 0 +986 489 150 50 1438 2318 90 0 30 +987 152 225 30 634 1514 90 0 316 +988 426 85 -10 267 1147 90 423 0 +989 415 73 -20 1135 2015 90 427 0 +990 440 70 10 2011 2891 90 0 392 +991 320 476 30 236 1116 90 0 117 +992 57 132 -20 952 1832 90 121 0 +993 405 311 30 166 1046 90 0 469 +994 109 250 -20 1180 2060 90 694 0 +995 428 314 -10 632 1512 90 569 0 +996 40 288 -30 1433 2313 90 806 0 +997 175 282 10 766 1646 90 0 781 +998 298 456 -10 1972 2852 90 614 0 +999 208 101 10 267 1147 90 0 555 +1000 342 52 10 218 1098 90 0 468 +1001 59 377 -20 1728 2608 90 741 0 +1002 432 105 -10 2712 3592 90 588 0 +1003 340 449 -10 2720 3600 90 353 0 +1004 293 67 -20 187 1067 90 922 0 +1005 62 301 -20 2750 3630 90 626 0 +1006 137 186 -10 2552 3432 90 334 0 +1007 358 365 -30 1966 2846 90 169 0 +1008 272 233 -10 1387 2267 90 633 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2102.txt b/jsprit-instances/instances/lilim/1000/LC2102.txt new file mode 100644 index 00000000..16b34b08 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2102.txt @@ -0,0 +1,1018 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -30 2662 2822 90 926 0 +2 266 231 -10 1936 2096 90 633 0 +3 89 284 -20 1436 1596 90 716 0 +4 430 298 -30 0 3638 90 469 0 +5 435 77 20 1002 1162 90 0 392 +6 25 293 20 2964 3124 90 0 784 +7 43 269 30 687 847 90 0 996 +8 216 117 -10 0 3687 90 688 0 +9 294 437 -30 661 821 90 929 0 +10 79 479 30 998 1158 90 0 160 +11 365 18 -10 2213 2373 90 898 0 +12 225 125 20 127 287 90 0 172 +13 448 103 30 0 3578 90 0 699 +14 143 266 10 402 562 90 0 538 +15 252 347 10 2911 3071 0 0 1012 +16 403 390 10 2560 2720 90 0 602 +17 67 153 20 912 1072 90 0 721 +18 90 168 20 3080 3240 90 0 893 +19 302 235 20 1043 1203 90 0 503 +20 259 355 20 1917 2077 90 0 99 +21 149 183 20 3108 3268 0 0 1011 +22 19 297 20 2282 2442 90 0 522 +23 209 358 30 1477 1637 90 0 797 +24 56 388 -20 1791 1951 90 162 0 +25 115 269 10 2956 3116 90 0 949 +26 377 356 10 0 3659 90 0 169 +27 113 229 30 1123 1283 90 0 612 +28 205 343 20 902 1062 90 0 974 +29 48 137 20 0 3593 90 0 493 +30 467 157 -20 2307 2467 90 832 0 +31 220 394 10 2783 2943 90 0 521 +32 436 54 -20 1991 2151 90 953 0 +33 54 357 10 1696 1856 90 0 502 +34 456 154 -10 0 3597 90 495 0 +35 216 307 20 2516 2676 90 0 882 +36 280 224 -30 2226 2386 90 579 0 +37 90 270 10 565 725 90 0 961 +38 166 452 20 599 759 90 0 755 +39 17 283 -20 2584 2744 90 833 0 +40 196 192 30 0 3745 90 0 329 +41 94 275 10 469 629 90 0 116 +42 292 445 10 1716 1876 90 0 200 +43 329 471 -20 2783 2943 90 366 0 +44 326 57 20 1364 1524 90 0 704 +45 95 466 -20 0 3559 90 83 0 +46 429 282 20 3018 3178 90 0 611 +47 229 364 -10 2512 2672 90 542 0 +48 457 160 10 2991 3151 90 0 66 +49 452 154 30 332 492 90 0 396 +50 113 289 10 0 3682 0 0 1008 +51 67 387 10 2376 2536 90 0 152 +52 368 17 -20 2021 2181 90 465 0 +53 341 367 -10 2530 2690 90 130 0 +54 410 364 30 1842 2002 90 0 79 +55 80 281 -10 0 3652 90 859 0 +56 321 224 30 2106 2266 90 0 330 +57 73 395 -20 1223 1383 90 462 0 +58 259 76 -20 0 3650 90 909 0 +59 121 203 10 1792 1952 90 0 955 +60 118 256 10 2519 2679 90 0 571 +61 236 361 -20 1713 1873 90 890 0 +62 78 371 20 220 380 90 0 459 +63 301 53 -20 969 1129 90 531 0 +64 382 197 20 640 800 90 0 69 +65 491 160 20 1989 2149 90 0 954 +66 453 164 -10 0 3604 90 48 0 +67 277 371 30 595 755 90 0 187 +68 272 212 -20 2330 2490 90 748 0 +69 386 218 -20 1901 2061 90 64 0 +70 353 32 -10 905 1065 90 164 0 +71 59 389 -30 1698 1858 90 429 0 +72 414 62 -30 0 3575 90 345 0 +73 278 357 10 212 372 90 0 491 +74 101 179 -30 2412 2572 90 421 0 +75 396 234 20 2390 2550 90 0 402 +76 74 390 -10 797 957 90 718 0 +77 332 55 30 211 371 90 0 294 +78 272 365 30 693 853 90 0 907 +79 418 355 -30 2037 2197 90 54 0 +80 216 380 -20 2300 2460 90 390 0 +81 440 173 -20 3282 3442 90 439 0 +82 89 358 20 0 3631 90 0 873 +83 66 491 20 0 3521 90 0 45 +84 317 234 -20 2479 2639 90 573 0 +85 439 297 -10 2043 2203 90 870 0 +86 394 367 30 380 540 90 0 311 +87 58 364 10 2262 2422 90 0 377 +88 290 75 -10 191 351 90 309 0 +89 346 344 -10 3212 3372 90 106 0 +90 131 269 -20 0 3704 90 191 0 +91 236 96 -30 1604 1764 90 204 0 +92 29 282 -20 1410 1570 90 156 0 +93 418 385 -20 2757 2917 90 669 0 +94 148 225 40 613 773 90 0 897 +95 166 464 10 794 954 90 0 857 +96 266 373 10 793 953 90 0 403 +97 201 273 30 54 214 90 0 811 +98 255 245 10 7 167 90 0 654 +99 220 379 -20 0 3692 90 20 0 +100 85 317 -20 0 3646 90 440 0 +101 125 264 -10 2855 3015 90 108 0 +102 131 253 -20 2809 2969 90 344 0 +103 184 188 10 1260 1420 90 0 414 +104 128 209 -30 1093 1253 90 554 0 +105 373 364 -30 3170 3330 90 523 0 +106 389 342 10 1145 1305 90 0 89 +107 420 20 -10 575 735 90 650 0 +108 132 218 10 136 296 90 0 101 +109 32 256 -40 901 1061 90 363 0 +110 406 339 20 295 455 90 0 286 +111 191 397 -20 263 423 90 170 0 +112 72 341 10 0 3625 90 0 719 +113 35 308 -30 3072 3232 90 154 0 +114 169 360 -10 2172 2332 90 919 0 +115 222 381 -10 0 3691 90 184 0 +116 96 292 -10 862 1022 90 41 0 +117 311 496 -30 0 3571 90 820 0 +118 220 384 10 2683 2843 90 0 157 +119 259 243 20 22 182 90 0 723 +120 349 476 10 2483 2643 90 0 672 +121 63 159 -30 1009 1169 90 313 0 +122 112 243 -10 2321 2481 90 228 0 +123 448 302 -10 2327 2487 90 556 0 +124 343 27 -20 0 3583 90 749 0 +125 67 485 40 2166 2326 90 0 799 +126 220 359 30 1424 1584 90 0 519 +127 147 435 10 2111 2271 90 0 780 +128 317 235 20 2570 2730 90 0 529 +129 43 355 20 1595 1755 90 0 734 +130 368 340 10 461 621 90 0 53 +131 450 72 -30 2561 2721 90 785 0 +132 400 364 -30 570 730 90 889 0 +133 355 480 -20 1616 1776 90 419 0 +134 450 153 20 533 693 90 0 818 +135 126 188 20 2098 2258 90 0 683 +136 380 223 -10 1614 1774 90 570 0 +137 71 453 20 685 845 90 0 707 +138 54 287 20 209 369 90 0 565 +139 420 168 -10 3393 3553 90 796 0 +140 219 89 -30 2692 2852 90 771 0 +141 189 327 10 420 580 90 0 341 +142 191 309 -20 1430 1590 90 401 0 +143 301 67 40 480 640 90 0 427 +144 484 161 10 1696 1856 90 0 725 +145 77 483 20 0 3534 90 0 432 +146 241 375 -10 1998 2158 90 651 0 +147 428 64 -40 1201 1361 90 233 0 +148 403 361 10 1452 1612 90 0 879 +149 257 336 -30 0 3738 90 335 0 +150 131 241 -20 3378 3538 90 604 0 +151 63 166 -30 0 3619 90 963 0 +152 71 368 -10 3257 3417 90 51 0 +153 272 228 10 2033 2193 90 0 830 +154 25 290 30 2871 3031 90 0 113 +155 441 157 10 433 593 90 0 372 +156 13 266 20 0 3587 90 0 92 +157 251 376 -10 3186 3346 90 118 0 +158 61 170 30 0 3619 90 0 643 +159 386 357 20 1433 1593 90 0 400 +160 95 475 -30 2925 3085 90 10 0 +161 90 298 10 2104 2264 90 0 470 +162 71 388 20 1505 1665 90 0 24 +163 383 246 20 0 3691 90 0 793 +164 352 38 10 626 786 90 0 70 +165 395 1 -10 0 3536 90 864 0 +166 120 210 -10 1282 1442 90 405 0 +167 46 383 30 1288 1448 90 0 317 +168 202 198 -20 0 3754 90 736 0 +169 358 365 -10 2326 2486 90 26 0 +170 191 352 20 117 277 90 0 111 +171 470 152 -10 1226 1386 90 213 0 +172 228 124 -20 141 301 90 12 0 +173 402 230 -20 0 3671 90 581 0 +174 323 229 -30 1718 1878 90 430 0 +175 331 486 -30 2003 2163 90 242 0 +176 112 208 10 1601 1761 90 0 691 +177 172 435 -10 3061 3221 90 574 0 +178 326 498 -10 1021 1181 90 479 0 +179 460 183 -50 0 3604 90 986 0 +180 95 279 20 375 535 90 0 705 +181 76 456 -30 780 940 90 760 0 +182 242 350 -10 2811 2971 90 958 0 +183 152 196 10 212 372 90 0 597 +184 268 351 10 0 3722 90 0 115 +185 360 356 -20 2733 2893 90 580 0 +186 39 296 -20 1983 2143 90 212 0 +187 262 368 -30 1162 1322 90 67 0 +188 204 90 20 1094 1254 90 0 773 +189 149 273 20 212 372 90 0 548 +190 446 86 -10 3056 3216 90 883 0 +191 139 269 20 1728 1888 90 0 90 +192 483 170 -10 2197 2357 90 583 0 +193 39 278 10 1601 1761 90 0 619 +194 201 307 10 0 3749 0 0 1014 +195 395 378 -20 1636 1796 90 385 0 +196 139 262 -20 1450 1610 90 474 0 +197 176 447 20 311 471 90 0 572 +198 67 380 -20 0 3600 90 199 0 +199 35 358 20 1497 1657 90 0 198 +200 294 455 -10 2426 2586 90 42 0 +201 351 33 -10 0 3585 90 408 0 +202 216 316 -10 2319 2479 90 209 0 +203 261 96 40 0 3670 90 0 838 +204 238 57 30 1336 1496 90 0 91 +205 383 18 20 1643 1803 90 0 952 +206 152 460 -30 1310 1470 90 640 0 +207 94 479 20 0 3547 90 0 911 +208 337 453 -10 0 3604 90 887 0 +209 135 460 10 1785 1945 90 0 202 +210 260 104 20 157 317 90 0 406 +211 337 63 -30 2045 2205 90 546 0 +212 32 247 20 802 962 90 0 186 +213 394 205 10 0 3674 90 0 171 +214 95 294 10 770 930 90 0 828 +215 253 241 -10 2835 2995 90 533 0 +216 223 90 -30 2787 2947 90 663 0 +217 64 473 -20 1284 1444 90 822 0 +218 275 431 10 0 3642 90 0 847 +219 261 84 10 734 894 90 0 965 +220 176 296 -10 1230 1390 90 891 0 +221 361 349 10 3016 3176 90 0 702 +222 168 433 20 3156 3316 90 0 596 +223 394 10 40 1169 1329 90 0 510 +224 308 60 -10 776 936 90 932 0 +225 94 456 -30 3124 3284 90 235 0 +226 73 484 -20 2445 2605 90 664 0 +227 277 434 -10 1427 1587 90 279 0 +228 119 232 10 1939 2099 90 0 122 +229 78 375 10 0 3612 90 0 426 +230 366 346 -10 648 808 90 509 0 +231 125 181 -30 2718 2878 90 638 0 +232 69 493 -40 1977 2137 90 608 0 +233 432 80 40 908 1068 90 0 147 +234 72 391 10 0 3597 90 0 977 +235 85 486 30 0 3537 90 0 225 +236 204 371 30 0 3695 90 0 559 +237 173 328 10 2481 2641 90 0 585 +238 280 423 10 951 1111 90 0 653 +239 200 327 -30 3150 3310 90 628 0 +240 241 98 20 2987 3147 90 0 283 +241 96 356 10 186 346 90 0 915 +242 332 491 30 1211 1371 90 0 175 +243 81 283 10 1624 1784 90 0 367 +244 373 22 10 0 3565 90 0 259 +245 255 371 -30 2209 2369 90 900 0 +246 358 359 -20 2639 2799 90 536 0 +247 216 93 -20 0 3664 90 327 0 +248 73 360 20 0 3616 90 0 698 +249 305 212 -20 0 3758 90 871 0 +250 151 462 10 1402 1562 0 0 1005 +251 47 389 30 1102 1262 90 0 467 +252 155 198 30 118 278 90 0 586 +253 152 457 10 0 3595 90 0 258 +254 329 48 10 1555 1715 90 0 295 +255 88 394 -30 727 887 90 937 0 +256 153 295 -10 3382 3542 90 399 0 +257 81 373 10 590 750 90 0 763 +258 163 453 -10 0 3604 90 253 0 +259 378 25 -10 2408 2568 90 244 0 +260 401 385 -30 2864 3024 90 566 0 +261 184 340 -20 2768 2928 90 526 0 +262 402 362 -10 0 3636 90 339 0 +263 70 482 20 2351 2511 90 0 956 +264 357 445 -20 0 3602 90 558 0 +265 212 71 -30 0 3642 90 545 0 +266 231 81 30 2403 2563 90 0 920 +267 379 208 10 835 995 90 0 321 +268 236 95 30 0 3669 90 0 637 +269 386 344 20 0 3659 90 0 682 +270 189 200 -20 1989 2149 90 472 0 +271 296 253 10 834 994 90 0 336 +272 73 303 -20 2397 2557 90 839 0 +273 30 162 -20 2102 2262 90 658 0 +274 230 95 -20 1899 2059 90 438 0 +275 57 131 -20 1403 1563 90 449 0 +276 379 245 10 2773 2933 90 0 934 +277 107 221 40 0 3679 90 0 424 +278 154 458 20 0 3595 90 0 379 +279 290 417 10 0 3653 90 0 227 +280 272 243 30 0 3801 0 0 1009 +281 94 130 -10 0 3628 90 550 0 +282 222 356 20 1608 1768 90 0 775 +283 243 108 -20 3061 3221 90 240 0 +284 224 93 -30 2191 2351 90 343 0 +285 155 242 10 886 1046 90 0 987 +286 440 302 -20 1279 1439 90 110 0 +287 221 102 -20 2858 3018 90 917 0 +288 52 484 -30 0 3518 90 753 0 +289 111 244 -30 2229 2389 90 777 0 +290 132 273 -10 2203 2363 90 373 0 +291 228 186 20 269 429 90 0 539 +292 221 374 -10 1130 1290 90 867 0 +293 406 286 -10 3314 3474 90 497 0 +294 390 9 -30 1263 1423 90 77 0 +295 335 52 -10 1761 1921 90 254 0 +296 189 368 20 144 304 90 0 676 +297 397 40 40 2491 2651 90 0 770 +298 408 305 10 419 579 90 0 667 +299 156 434 -30 2865 3025 90 371 0 +300 180 335 -10 0 3714 90 964 0 +301 327 483 -20 2098 2258 90 361 0 +302 363 62 -30 0 3605 90 477 0 +303 375 342 10 939 1099 90 0 362 +304 16 280 -20 0 3589 90 928 0 +305 277 431 -10 0 3641 90 625 0 +306 110 241 -20 2136 2296 90 316 0 +307 48 385 20 1008 1168 90 0 895 +308 152 260 -20 0 3726 90 817 0 +309 255 120 10 130 290 90 0 88 +310 214 382 -30 0 3688 90 342 0 +311 414 384 -30 0 3613 90 86 0 +312 232 378 -10 2194 2354 90 352 0 +313 80 141 30 494 654 90 0 121 +314 188 330 30 0 3723 90 0 816 +315 157 192 -20 3210 3370 90 636 0 +316 101 237 20 1831 1991 90 0 306 +317 74 360 -30 2856 3016 90 167 0 +318 267 260 -10 509 669 90 767 0 +319 378 46 -10 3090 3250 90 706 0 +320 420 311 30 893 1053 90 0 995 +321 384 217 -10 1809 1969 90 267 0 +322 418 300 10 611 771 0 0 1007 +323 356 77 -20 2249 2409 90 738 0 +324 253 244 -20 2742 2902 90 615 0 +325 323 258 -20 1328 1488 90 798 0 +326 293 454 -10 0 3616 90 614 0 +327 231 97 20 0 3670 90 0 247 +328 316 234 10 2661 2821 90 0 975 +329 207 196 -30 2565 2725 90 40 0 +330 321 228 -30 0 3750 90 56 0 +331 382 17 -10 1734 1894 90 1000 0 +332 206 326 -20 3246 3406 90 751 0 +333 198 284 -10 0 3762 90 644 0 +334 137 186 10 2912 3072 90 0 629 +335 229 396 30 2882 3042 90 0 149 +336 268 235 -10 1842 2002 90 271 0 +337 95 243 20 759 919 90 0 642 +338 297 430 20 378 538 90 0 851 +339 393 368 10 472 632 90 0 262 +340 66 391 20 0 3593 90 0 397 +341 189 339 -10 2863 3023 90 141 0 +342 280 351 30 116 276 90 0 310 +343 241 77 30 1225 1385 90 0 284 +344 134 265 20 2666 2826 90 0 102 +345 420 95 30 345 505 90 0 72 +346 111 279 30 141 301 90 0 806 +347 367 358 30 2133 2293 90 0 649 +348 239 373 -20 1905 2065 90 374 0 +349 384 235 -20 2672 2832 90 616 0 +350 284 360 30 309 469 90 0 827 +351 325 75 30 2370 2530 90 0 395 +352 279 369 10 0 3702 90 0 312 +353 340 449 -20 3080 3240 90 735 0 +354 275 448 -30 2902 3062 90 826 0 +355 447 88 -40 2963 3123 90 457 0 +356 314 279 10 270 430 90 0 739 +357 434 377 -10 2345 2505 90 436 0 +358 67 377 10 0 3602 90 0 802 +359 370 353 10 746 906 90 0 446 +360 57 367 -20 2169 2329 90 754 0 +361 332 486 20 1912 2072 90 0 301 +362 386 361 -10 1527 1687 90 303 0 +363 55 282 40 305 465 90 0 109 +364 317 467 20 424 584 90 0 991 +365 335 54 -20 1853 2013 90 922 0 +366 348 466 20 0 3587 90 0 43 +367 132 314 -10 3214 3374 90 243 0 +368 328 216 10 0 3739 0 0 1003 +369 416 48 10 1880 2040 90 0 621 +370 370 55 -10 2886 3046 90 988 0 +371 149 434 30 0 3615 90 0 299 +372 466 169 -10 2502 2662 90 155 0 +373 141 267 10 1635 1795 90 0 290 +374 258 350 20 1822 1982 90 0 348 +375 428 312 10 1084 1244 90 0 514 +376 211 188 10 660 820 90 0 601 +377 50 343 -10 2754 2914 90 87 0 +378 107 311 40 2813 2973 90 0 925 +379 178 441 -20 0 3620 90 278 0 +380 232 85 -20 2309 2469 90 924 0 +381 391 23 -20 2698 2858 90 576 0 +382 137 227 20 115 275 90 0 875 +383 161 203 20 100 260 90 0 431 +384 363 212 30 3274 3434 90 0 645 +385 384 346 20 1331 1491 90 0 195 +386 166 434 -20 2965 3125 90 665 0 +387 274 248 20 0 3800 0 0 1015 +388 156 421 -20 0 3629 90 711 0 +389 346 211 10 0 3721 90 0 487 +390 265 358 20 1352 1512 90 0 80 +391 96 407 20 434 594 90 0 904 +392 443 70 -20 2464 2624 90 5 0 +393 125 212 -10 0 3694 90 620 0 +394 361 337 50 363 523 90 0 722 +395 322 78 -30 2464 2624 90 351 0 +396 481 156 -30 1600 1760 90 49 0 +397 188 293 -20 0 3749 90 340 0 +398 76 408 30 0 3589 90 0 444 +399 130 304 10 3175 3335 90 0 256 +400 378 363 -20 1749 1909 90 159 0 +401 185 301 20 1330 1490 90 0 142 +402 385 235 -20 2581 2741 90 75 0 +403 261 350 -10 0 3724 90 96 0 +404 389 33 20 0 3567 90 0 490 +405 151 214 10 511 671 90 0 166 +406 265 94 -20 258 418 90 210 0 +407 65 164 -10 2595 2755 90 480 0 +408 293 81 10 174 334 90 0 201 +409 363 55 -20 2983 3143 90 726 0 +410 465 176 20 2599 2759 90 0 423 +411 428 298 -30 1654 1814 90 993 0 +412 75 379 30 2567 2727 90 0 947 +413 404 378 -10 0 3624 90 501 0 +414 203 203 -10 2850 3010 90 103 0 +415 259 88 -20 0 3662 90 732 0 +416 362 17 -30 1884 2044 90 701 0 +417 320 258 -10 564 724 90 733 0 +418 59 358 -20 2358 2518 90 713 0 +419 316 453 20 224 384 90 0 133 +420 225 192 20 74 234 90 0 971 +421 140 206 30 408 568 90 0 74 +422 83 151 10 300 460 90 0 787 +423 366 196 -20 0 3697 90 410 0 +424 108 245 -40 1730 1890 90 277 0 +425 129 267 10 2480 2640 90 0 466 +426 57 379 -10 907 1067 90 229 0 +427 329 56 -40 1457 1617 90 143 0 +428 213 363 30 0 3706 90 0 809 +429 76 391 30 0 3601 90 0 71 +430 330 259 30 1231 1391 90 0 174 +431 136 217 -20 898 1058 90 383 0 +432 165 333 -20 0 3706 90 145 0 +433 160 431 30 3254 3414 90 0 781 +434 338 489 -30 1308 1468 90 460 0 +435 335 64 10 0 3620 90 0 534 +436 412 361 10 1748 1908 90 0 357 +437 259 90 30 0 3664 90 0 831 +438 265 77 20 832 992 90 0 274 +439 460 173 20 2887 3047 90 0 81 +440 83 301 20 2297 2457 90 0 100 +441 201 331 20 707 867 90 0 836 +442 118 214 20 0 3688 90 0 631 +443 395 30 -20 2796 2956 90 607 0 +444 125 444 -30 1997 2157 90 398 0 +445 283 248 30 33 193 90 0 942 +446 391 334 -10 1047 1207 90 359 0 +447 212 215 -30 3160 3320 90 968 0 +448 276 428 -10 1048 1208 90 981 0 +449 96 152 20 197 357 90 0 275 +450 425 85 10 536 696 90 0 468 +451 336 7 -20 0 3567 90 685 0 +452 196 219 -30 3054 3214 90 461 0 +453 210 94 20 997 1157 90 0 788 +454 310 81 -30 2846 3006 90 779 0 +455 341 37 20 434 594 90 0 910 +456 344 478 -10 2296 2456 90 549 0 +457 406 37 40 275 435 90 0 355 +458 69 346 10 0 3620 90 0 609 +459 80 376 -20 407 567 90 62 0 +460 314 449 30 209 369 90 0 434 +461 209 201 30 2753 2913 90 0 452 +462 88 379 20 689 849 90 0 57 +463 352 500 30 1505 1665 90 0 840 +464 65 357 -10 0 3611 90 841 0 +465 345 15 20 0 3571 90 0 52 +466 125 245 -10 3002 3162 90 425 0 +467 52 369 -30 2073 2233 90 251 0 +468 449 140 -10 730 890 90 450 0 +469 430 310 30 1176 1336 90 0 4 +470 109 325 -10 3008 3168 90 161 0 +471 446 139 20 637 797 90 0 592 +472 229 214 20 41 201 90 0 270 +473 197 301 10 0 3751 90 0 804 +474 146 245 20 696 856 90 0 196 +475 401 368 20 664 824 90 0 800 +476 116 259 -10 2613 2773 90 563 0 +477 374 55 30 2792 2952 90 0 302 +478 249 251 -10 3036 3196 90 648 0 +479 325 490 10 923 1083 90 0 178 +480 59 159 10 0 3613 90 0 407 +481 186 177 -20 1361 1521 90 610 0 +482 319 229 -20 2292 2452 90 603 0 +483 26 269 -10 1005 1165 90 821 0 +484 53 139 30 1214 1374 90 0 992 +485 471 154 -30 0 3584 90 824 0 +486 301 247 -30 0 3773 90 976 0 +487 388 220 -10 1423 1583 90 389 0 +488 235 81 20 1450 1610 90 0 808 +489 347 479 -20 2389 2549 90 874 0 +490 367 59 -20 0 3601 90 404 0 +491 261 370 -10 1069 1229 90 73 0 +492 441 287 -20 2915 3075 90 982 0 +493 44 153 -20 0 3597 90 29 0 +494 263 351 -20 1545 1705 90 652 0 +495 444 157 10 215 375 90 0 34 +496 374 17 10 1925 2085 90 0 515 +497 448 295 10 2724 2884 90 0 293 +498 446 297 -10 2232 2392 90 852 0 +499 347 40 30 530 690 90 0 843 +500 318 493 -20 825 985 90 730 0 +501 399 352 10 1260 1420 90 0 413 +502 51 364 -10 1887 2047 90 33 0 +503 250 217 -20 2534 2694 90 19 0 +504 107 225 30 440 600 90 0 943 +505 173 208 -20 0 3737 90 599 0 +506 204 189 10 0 3748 90 0 528 +507 399 379 20 2960 3120 90 0 825 +508 79 346 -10 3150 3310 90 747 0 +509 360 338 10 272 432 90 0 230 +510 390 17 -40 0 3553 90 223 0 +511 207 337 20 805 965 90 0 769 +512 409 361 -20 0 3631 90 792 0 +513 206 377 -20 559 719 90 590 0 +514 429 294 -10 0 3640 90 375 0 +515 375 31 -10 2185 2345 90 496 0 +516 426 80 20 0 3580 90 0 989 +517 74 374 -10 0 3609 90 868 0 +518 408 20 -10 473 633 90 935 0 +519 239 369 -30 1811 1971 90 126 0 +520 420 308 30 709 869 90 0 594 +521 254 357 -10 0 3717 90 31 0 +522 53 297 -20 0 3622 90 22 0 +523 434 382 30 2250 2410 90 0 105 +524 204 171 20 0 3733 90 0 623 +525 173 169 -20 1558 1718 90 970 0 +526 190 332 20 606 766 90 0 261 +527 274 231 -10 2126 2286 90 560 0 +528 207 194 -10 0 3754 90 506 0 +529 315 232 -20 0 3757 90 128 0 +530 425 87 -20 444 604 90 957 0 +531 312 64 20 582 742 90 0 63 +532 129 244 30 2908 3068 90 0 881 +533 278 230 10 1466 1626 90 0 215 +534 351 75 -10 2154 2314 90 435 0 +535 185 293 10 930 1090 90 0 668 +536 364 364 20 0 3663 90 0 246 +537 432 369 10 2147 2307 90 0 674 +538 128 249 -10 1343 1503 90 14 0 +539 221 179 -20 369 529 90 291 0 +540 194 296 -30 0 3752 90 613 0 +541 413 350 10 0 3633 90 0 679 +542 214 372 10 0 3697 90 0 47 +543 379 229 10 1045 1205 90 0 756 +544 91 298 10 2013 2173 90 0 812 +545 226 120 30 0 3692 90 0 265 +546 344 46 30 1660 1820 90 0 211 +547 238 84 10 1634 1794 90 0 837 +548 138 276 -20 1915 2075 90 189 0 +549 346 487 10 1808 1968 90 0 456 +550 95 160 10 0 3645 90 0 281 +551 103 266 -10 1062 1222 90 944 0 +552 98 286 30 1337 1497 90 0 906 +553 77 172 20 2976 3136 90 0 983 +554 147 199 30 308 468 90 0 104 +555 210 98 10 721 881 90 0 936 +556 428 292 10 0 3642 90 0 123 +557 121 236 -20 2034 2194 90 666 0 +558 336 479 20 2198 2358 90 0 264 +559 203 369 -30 841 1001 90 236 0 +560 296 232 10 1268 1428 90 0 527 +561 87 369 10 201 361 90 0 786 +562 247 88 30 1924 2084 90 0 578 +563 104 246 10 1353 1513 90 0 476 +564 67 302 -10 2493 2653 90 595 0 +565 114 296 -20 0 3681 90 138 0 +566 394 356 30 0 3646 90 0 260 +567 192 306 20 1523 1683 90 0 959 +568 16 285 -20 2492 2652 90 938 0 +569 419 310 -30 802 962 90 589 0 +570 389 221 10 0 3683 90 0 136 +571 129 264 -10 0 3703 90 60 0 +572 172 483 -20 904 1064 90 197 0 +573 325 251 20 1425 1585 90 0 84 +574 151 436 10 2386 2546 90 0 177 +575 263 91 20 352 512 90 0 984 +576 401 15 20 685 845 90 0 381 +577 253 382 -30 3090 3250 90 731 0 +578 247 89 -30 2015 2175 90 562 0 +579 283 229 30 1371 1531 90 0 36 +580 366 341 20 553 713 90 0 185 +581 392 213 20 2092 2252 90 0 173 +582 167 304 20 207 367 90 0 758 +583 477 154 10 1506 1666 90 0 192 +584 234 383 -10 0 3691 90 979 0 +585 199 327 -10 0 3732 90 237 0 +586 140 220 -30 0 3710 90 252 0 +587 144 266 30 311 471 90 0 923 +588 432 105 10 3432 3592 0 0 1002 +589 368 325 30 139 299 90 0 569 +590 202 386 20 0 3680 90 0 513 +591 325 246 10 1520 1680 90 0 675 +592 430 86 -20 0 3581 90 471 0 +593 200 195 20 0 3750 90 0 708 +594 440 295 -30 2136 2296 90 520 0 +595 77 287 10 1905 2065 90 0 564 +596 187 362 -20 0 3696 90 222 0 +597 131 207 -10 999 1159 90 183 0 +598 405 5 20 786 946 90 0 715 +599 125 226 20 1389 1549 90 0 505 +600 254 335 -10 3013 3173 90 807 0 +601 212 168 -10 860 1020 90 376 0 +602 281 279 -10 0 3782 90 16 0 +603 326 241 20 1615 1775 90 0 482 +604 152 241 20 793 953 90 0 150 +605 71 139 -10 807 967 90 914 0 +606 46 277 10 589 749 90 0 622 +607 393 13 20 1358 1518 90 0 443 +608 87 454 40 882 1042 90 0 232 +609 86 359 -10 3255 3415 90 458 0 +610 220 192 20 169 329 90 0 481 +611 426 279 -20 3112 3272 90 46 0 +612 131 267 -30 2572 2732 90 27 0 +613 200 297 30 553 713 90 0 540 +614 299 442 10 1904 2064 90 0 326 +615 265 218 20 2429 2589 90 0 324 +616 398 231 20 2296 2456 90 0 349 +617 312 74 20 0 3638 90 0 655 +618 99 307 -30 0 3663 90 656 0 +619 22 283 -10 0 3594 90 193 0 +620 67 160 10 2690 2850 90 0 393 +621 390 42 -10 2588 2748 90 369 0 +622 44 279 -10 0 3616 90 606 0 +623 200 182 -20 0 3740 90 524 0 +624 458 303 20 0 3610 90 0 931 +625 298 438 10 567 727 90 0 305 +626 62 301 20 3400 3560 0 0 1004 +627 112 251 -10 1633 1793 90 994 0 +628 184 354 30 0 3701 90 0 239 +629 140 180 -10 0 3694 90 334 0 +630 269 428 20 1145 1305 90 0 834 +631 123 206 -20 1885 2045 90 442 0 +632 36 284 10 1698 1858 90 0 737 +633 272 233 10 0 3797 90 0 2 +634 320 231 20 2384 2544 90 0 686 +635 211 180 -20 758 918 90 684 0 +636 114 169 20 2612 2772 90 0 315 +637 245 239 -30 2933 3093 90 268 0 +638 117 204 30 0 3684 90 0 231 +639 316 254 20 0 3758 90 0 743 +640 169 443 30 500 660 90 0 206 +641 212 96 -10 904 1064 90 999 0 +642 119 285 -20 3063 3223 90 337 0 +643 71 163 -30 2785 2945 90 158 0 +644 78 361 10 0 3620 90 0 333 +645 354 219 -30 3375 3535 90 384 0 +646 389 233 -20 0 3684 90 662 0 +647 90 391 10 541 701 90 0 884 +648 209 307 10 1811 1971 90 0 478 +649 363 351 -30 2923 3083 90 347 0 +650 405 47 10 255 415 90 0 107 +651 278 329 10 83 243 90 0 146 +652 261 371 20 978 1138 90 0 494 +653 302 470 -10 2227 2387 90 238 0 +654 373 205 -10 0 3694 90 98 0 +655 381 20 -20 1828 1988 90 617 0 +656 90 277 30 662 822 90 0 618 +657 46 341 -10 2659 2819 90 750 0 +658 50 138 20 0 3595 90 0 273 +659 61 437 20 265 425 90 0 877 +660 331 252 -20 1134 1294 90 967 0 +661 440 81 -10 2665 2825 90 990 0 +662 384 206 20 739 899 90 0 646 +663 232 87 30 0 3661 90 0 216 +664 59 471 20 0 3532 90 0 226 +665 174 304 20 110 270 90 0 386 +666 106 248 20 0 3680 90 0 557 +667 410 287 -10 0 3660 90 298 0 +668 206 313 -10 2091 2251 90 535 0 +669 412 367 20 960 1120 90 0 93 +670 412 300 20 515 675 90 0 714 +671 206 295 -40 2809 2969 90 973 0 +672 329 459 -10 2885 3045 90 120 0 +673 177 436 20 199 359 90 0 856 +674 266 264 -10 0 3803 90 537 0 +675 308 235 -10 3135 3295 90 591 0 +676 260 330 -20 3203 3363 90 296 0 +677 49 136 10 1705 1865 90 0 768 +678 356 28 20 1000 1160 90 0 918 +679 428 384 -10 2444 2604 90 541 0 +680 220 362 20 1331 1491 90 0 878 +681 437 61 -10 0 3559 90 885 0 +682 365 360 -20 2040 2200 90 269 0 +683 107 168 -20 0 3660 90 135 0 +684 220 177 20 0 3746 90 0 635 +685 347 21 20 1386 1546 90 0 451 +686 293 245 -20 3430 3590 90 634 0 +687 267 436 -10 3007 3167 90 692 0 +688 216 96 10 2566 2726 90 0 8 +689 383 351 20 167 327 90 0 697 +690 289 240 -20 0 3784 90 819 0 +691 129 185 -10 2814 2974 90 176 0 +692 291 450 10 2705 2865 90 0 687 +693 387 21 -30 1548 1708 90 863 0 +694 116 255 20 1239 1399 90 0 795 +695 50 368 30 0 3592 90 0 741 +696 121 249 -10 2421 2581 90 850 0 +697 404 346 -20 0 3643 90 689 0 +698 77 360 -20 0 3619 90 248 0 +699 447 102 -30 0 3578 90 13 0 +700 366 16 20 0 3563 90 0 846 +701 348 16 30 1780 1940 90 0 416 +702 353 346 -10 3114 3274 90 221 0 +703 54 485 30 1773 1933 90 0 972 +704 319 77 -20 0 3638 90 44 0 +705 83 282 -20 1532 1692 90 180 0 +706 384 24 10 2601 2761 90 0 319 +707 52 469 -20 1387 1547 90 137 0 +708 199 200 -20 2945 3105 90 593 0 +709 273 234 -10 0 3796 90 921 0 +710 16 281 -20 2676 2836 90 790 0 +711 151 442 20 2482 2642 90 0 388 +712 223 114 20 332 492 90 0 720 +713 191 308 20 82 242 90 0 418 +714 448 297 -20 2632 2792 90 670 0 +715 386 28 -20 2507 2667 90 598 0 +716 106 295 20 1053 1213 90 0 3 +717 387 224 -20 1517 1677 90 729 0 +718 96 377 10 0 3625 90 0 76 +719 86 361 -10 3347 3507 90 112 0 +720 211 107 -20 531 691 90 712 0 +721 43 125 -20 1603 1763 90 17 0 +722 369 351 -50 0 3668 90 394 0 +723 388 228 -20 1235 1395 90 119 0 +724 325 228 -20 1810 1970 90 823 0 +725 490 159 -10 1897 2057 90 144 0 +726 420 78 20 1398 1558 90 0 409 +727 396 4 10 0 3538 0 0 1001 +728 222 317 -10 2415 2575 90 776 0 +729 389 198 20 543 703 90 0 717 +730 322 454 20 320 480 90 0 500 +731 241 391 30 2985 3145 90 0 577 +732 256 117 20 0 3691 90 0 415 +733 298 255 10 151 311 90 0 417 +734 74 363 -20 2763 2923 90 129 0 +735 345 496 20 1407 1567 90 0 353 +736 167 169 20 1654 1814 90 0 168 +737 23 306 -10 2182 2342 90 632 0 +738 317 62 20 677 837 90 0 323 +739 319 257 -10 656 816 90 356 0 +740 129 255 -20 2716 2876 90 742 0 +741 59 377 -30 2088 2248 90 695 0 +742 138 272 20 1821 1981 90 0 740 +743 317 251 -20 940 1100 90 639 0 +744 279 436 20 0 3636 90 0 782 +745 371 207 10 241 401 90 0 813 +746 263 372 10 886 1046 90 0 960 +747 50 347 10 2562 2722 90 0 508 +748 275 236 20 1563 1723 90 0 68 +749 334 47 20 331 491 90 0 124 +750 50 383 10 1889 2049 90 0 657 +751 170 338 20 2284 2444 90 0 332 +752 245 109 -10 0 3683 90 876 0 +753 69 475 30 1189 1349 90 0 288 +754 54 372 20 1991 2151 90 0 360 +755 198 334 -20 2203 2363 90 38 0 +756 380 228 -10 0 3693 90 543 0 +757 425 118 10 219 379 90 0 815 +758 80 398 -20 0 3599 90 582 0 +759 366 57 -30 3076 3236 90 789 0 +760 67 463 30 584 744 90 0 181 +761 226 86 10 2595 2755 0 0 1010 +762 59 480 -20 1583 1743 90 801 0 +763 40 378 -10 1386 1546 90 257 0 +764 250 367 20 2113 2273 90 0 962 +765 157 436 -30 2773 2933 90 905 0 +766 463 161 -40 2403 2563 90 791 0 +767 266 250 10 409 569 90 0 318 +768 51 162 -10 2213 2373 90 677 0 +769 194 353 -20 1371 1531 90 511 0 +770 383 41 -40 2685 2845 90 297 0 +771 247 82 30 1828 1988 90 0 140 +772 457 142 20 829 989 90 0 908 +773 244 94 -20 1795 1955 90 188 0 +774 441 63 -30 2274 2434 90 853 0 +775 244 371 -20 2310 2470 90 282 0 +776 174 444 10 0 3616 90 0 728 +777 94 247 30 853 1013 90 0 289 +778 320 225 -10 0 3750 90 901 0 +779 316 80 30 0 3642 90 0 454 +780 155 447 -10 2672 2832 90 127 0 +781 211 308 -30 0 3755 90 433 0 +782 297 442 -20 1812 1972 90 744 0 +783 200 342 -30 997 1157 90 829 0 +784 44 325 -20 3181 3341 90 6 0 +785 438 60 30 2180 2340 90 0 131 +786 80 374 -10 0 3614 90 561 0 +787 59 163 -10 2311 2471 90 422 0 +788 236 92 -20 2210 2370 90 453 0 +789 414 66 30 1592 1752 90 0 759 +790 34 279 20 0 3607 90 0 710 +791 475 156 40 0 3581 90 0 766 +792 404 310 20 0 3659 90 0 512 +793 367 239 -20 3156 3316 90 163 0 +794 210 359 10 1568 1728 90 0 948 +795 133 278 -20 0 3704 90 694 0 +796 446 169 10 3185 3345 90 0 139 +797 188 356 -30 1882 2042 90 23 0 +798 312 252 20 845 1005 90 0 325 +799 69 485 -40 0 3528 90 125 0 +800 413 353 -20 1650 1810 90 475 0 +801 54 446 20 287 447 90 0 762 +802 56 357 -10 1788 1948 90 358 0 +803 230 105 -20 0 3678 90 814 0 +804 196 302 -10 274 434 90 473 0 +805 391 373 10 0 3637 90 0 854 +806 101 295 -30 958 1118 90 346 0 +807 234 350 10 2617 2777 90 0 600 +808 215 108 -20 2760 2920 90 488 0 +809 142 457 -30 0 3591 90 428 0 +810 283 425 20 0 3646 90 0 927 +811 77 397 -30 919 1079 90 97 0 +812 105 317 -10 2909 3069 90 544 0 +813 382 213 -10 1715 1875 90 745 0 +814 213 76 20 0 3647 90 0 803 +815 417 56 -10 0 3569 90 757 0 +816 183 340 -30 2677 2837 90 314 0 +817 123 242 20 3190 3350 90 0 308 +818 475 136 -20 1029 1189 90 134 0 +819 377 246 20 3054 3214 90 0 690 +820 310 484 30 626 786 90 0 117 +821 47 280 10 403 563 90 0 483 +822 57 456 20 388 548 90 0 217 +823 313 266 20 373 533 90 0 724 +824 475 145 30 1128 1288 90 0 485 +825 400 376 -20 0 3629 90 507 0 +826 290 416 30 0 3654 90 0 354 +827 277 369 -30 0 3702 90 350 0 +828 91 303 -10 0 3657 90 214 0 +829 194 301 30 366 526 90 0 783 +830 254 238 -10 2646 2806 90 153 0 +831 215 91 -30 2290 2450 90 437 0 +832 500 162 20 2088 2248 90 0 30 +833 56 287 20 197 357 90 0 39 +834 289 452 -20 2798 2958 90 630 0 +835 378 326 30 160 320 90 0 966 +836 197 350 -20 1186 1346 90 441 0 +837 243 88 -10 1731 1891 90 547 0 +838 250 72 -40 1125 1285 90 203 0 +839 101 290 20 1150 1310 90 0 272 +840 351 480 -30 0 3573 90 463 0 +841 67 357 10 3044 3204 90 0 464 +842 128 240 -10 3285 3445 90 862 0 +843 253 81 -30 0 3655 90 499 0 +844 307 227 30 2853 3013 90 0 902 +845 233 441 -30 0 3633 90 998 0 +846 311 47 -20 0 3613 90 700 0 +847 292 456 -10 0 3614 90 218 0 +848 183 187 -10 0 3733 90 886 0 +849 392 31 -20 2890 3050 90 912 0 +850 103 251 10 1258 1418 90 0 696 +851 300 443 -20 1996 2156 90 338 0 +852 420 295 10 1752 1912 90 0 498 +853 427 64 30 1292 1452 90 0 774 +854 372 354 -10 1941 2101 90 805 0 +855 101 263 -10 1156 1316 90 903 0 +856 141 454 -20 1686 1846 90 673 0 +857 146 461 -10 1497 1657 90 95 0 +858 298 430 30 469 629 90 0 969 +859 148 270 10 119 279 90 0 55 +860 76 287 20 1814 1974 0 0 1016 +861 308 55 30 871 1031 90 0 896 +862 143 257 10 501 661 90 0 842 +863 393 2 30 979 1139 90 0 693 +864 385 28 10 0 3565 90 0 165 +865 204 291 20 0 3763 90 0 872 +866 132 272 -10 2294 2454 90 880 0 +867 206 379 10 467 627 90 0 292 +868 69 383 10 0 3600 90 0 517 +869 245 96 -20 0 3670 90 894 0 +870 431 301 10 0 3636 90 0 85 +871 448 94 20 3154 3314 90 0 249 +872 199 305 -20 0 3749 90 865 0 +873 95 356 -20 3447 3607 90 82 0 +874 328 498 20 1113 1273 90 0 489 +875 108 222 -20 0 3680 90 382 0 +876 341 26 10 1288 1448 90 0 752 +877 63 454 -20 0 3548 90 659 0 +878 222 357 -20 0 3714 90 680 0 +879 416 364 -10 1938 2098 90 148 0 +880 127 278 10 2106 2266 90 0 866 +881 140 252 -30 0 3714 90 532 0 +882 218 298 -20 2706 2866 90 35 0 +883 432 87 10 2858 3018 90 0 190 +884 216 300 -10 0 3764 90 647 0 +885 438 72 10 1098 1258 90 0 681 +886 184 178 10 1454 1614 90 0 848 +887 345 468 10 2677 2837 90 0 208 +888 150 435 -20 0 3614 90 941 0 +889 395 365 30 0 3639 90 0 132 +890 208 371 20 655 815 90 0 61 +891 190 292 10 745 905 90 0 220 +892 78 479 30 1089 1249 90 0 913 +893 104 198 -20 0 3670 90 18 0 +894 346 13 20 1686 1846 90 0 869 +895 47 388 -20 1193 1353 90 307 0 +896 315 57 -30 0 3621 90 861 0 +897 110 199 -40 2207 2367 90 94 0 +898 323 60 10 0 3621 90 0 11 +899 308 82 30 0 3647 0 0 1006 +900 216 374 30 1035 1195 90 0 245 +901 326 253 10 1039 1199 90 0 778 +902 308 232 -30 2948 3108 90 844 0 +903 118 223 10 339 499 90 0 855 +904 149 444 -20 0 3606 90 391 0 +905 95 395 30 0 3612 90 0 765 +906 117 319 -30 0 3675 90 552 0 +907 262 352 -30 0 3722 90 78 0 +908 468 135 -20 932 1092 90 772 0 +909 351 31 20 813 973 90 0 58 +910 361 15 -20 2118 2278 90 455 0 +911 195 300 -20 0 3750 90 207 0 +912 397 27 20 0 3557 90 0 849 +913 179 311 -30 0 3731 90 892 0 +914 77 133 10 709 869 90 0 605 +915 66 397 -10 1125 1285 90 241 0 +916 366 352 -10 2830 2990 90 939 0 +917 221 87 20 1403 1563 90 0 287 +918 347 23 -20 0 3578 90 678 0 +919 176 358 10 2075 2235 90 0 114 +920 229 78 -30 2496 2656 90 266 0 +921 272 246 10 218 378 90 0 709 +922 293 67 20 0 3637 90 0 365 +923 140 265 -30 1543 1703 90 587 0 +924 238 83 20 1543 1703 90 0 380 +925 136 296 -40 3275 3435 90 378 0 +926 218 98 30 2002 2162 90 0 1 +927 290 440 -20 1621 1781 90 810 0 +928 29 302 20 2085 2245 90 0 304 +929 290 425 30 280 440 90 0 9 +930 124 247 20 3095 3255 0 0 1013 +931 442 287 -20 0 3629 90 624 0 +932 294 64 10 383 543 90 0 224 +933 74 165 -20 2878 3038 90 985 0 +934 382 245 -10 2959 3119 90 276 0 +935 405 24 10 378 538 90 0 518 +936 211 97 -10 812 972 90 555 0 +937 88 390 30 0 3610 90 0 255 +938 37 295 20 1891 2051 90 0 568 +939 359 371 10 0 3662 90 0 916 +940 186 372 -20 0 3687 90 951 0 +941 116 446 20 1898 2058 90 0 888 +942 293 249 -30 53 213 90 445 0 +943 83 228 -30 649 809 90 504 0 +944 96 269 10 965 1125 90 0 551 +945 179 284 -10 0 3746 90 997 0 +946 368 219 20 0 3702 90 0 980 +947 66 359 -30 3157 3317 90 412 0 +948 189 338 -10 2954 3114 90 794 0 +949 163 277 -10 3492 3652 90 25 0 +950 5 296 -10 0 3575 90 978 0 +951 152 478 20 0 3576 90 0 940 +952 366 34 -20 2086 2246 90 205 0 +953 429 80 20 0 3578 90 0 32 +954 464 178 -20 2691 2851 90 65 0 +955 138 196 -10 1993 2153 90 59 0 +956 87 481 -20 2733 2893 90 263 0 +957 425 99 20 248 408 90 0 530 +958 241 362 10 2410 2570 90 0 182 +959 207 289 -20 2997 3157 90 567 0 +960 264 365 -10 1255 1415 90 746 0 +961 102 289 -10 1242 1402 90 37 0 +962 233 346 -20 2711 2871 90 764 0 +963 78 141 30 0 3621 90 0 151 +964 196 348 10 1094 1254 90 0 300 +965 216 92 -10 2382 2542 90 219 0 +966 444 309 -30 2425 2585 90 835 0 +967 313 263 20 466 626 90 0 660 +968 211 198 30 2660 2820 90 0 447 +969 314 436 -30 2101 2261 90 858 0 +970 217 189 20 0 3755 90 0 525 +971 197 178 -20 1058 1218 90 420 0 +972 60 497 -30 0 3513 90 703 0 +973 206 312 40 2000 2160 90 0 671 +974 197 351 -20 1277 1437 90 28 0 +975 305 233 -10 3041 3201 90 328 0 +976 297 250 30 0 3777 90 0 486 +977 71 348 -10 3055 3215 90 234 0 +978 11 269 10 1110 1270 90 0 950 +979 247 447 10 3120 3280 90 0 584 +980 386 213 -20 1996 2156 90 946 0 +981 292 434 10 755 915 90 0 448 +982 436 301 20 1373 1533 90 0 492 +983 145 221 -20 0 3716 90 553 0 +984 224 96 -20 2098 2258 90 575 0 +985 59 128 20 1496 1656 90 0 933 +986 489 150 50 1798 1958 90 0 179 +987 152 225 -10 994 1154 90 285 0 +988 426 85 10 0 3583 90 0 370 +989 415 73 -20 1495 1655 90 516 0 +990 440 70 10 2371 2531 90 0 661 +991 320 476 -20 0 3588 90 364 0 +992 57 132 -30 1312 1472 90 484 0 +993 405 311 30 0 3658 90 0 411 +994 109 250 10 1540 1700 90 0 627 +995 428 314 -30 992 1152 90 320 0 +996 40 288 -30 1793 1953 90 7 0 +997 175 282 10 0 3743 90 0 945 +998 298 456 30 2332 2492 90 0 845 +999 208 101 10 0 3670 90 0 641 +1000 342 52 10 0 3606 90 0 331 +1001 396 4 -10 0 3538 90 727 0 +1002 432 105 -10 3432 3592 90 588 0 +1003 328 216 -10 0 3739 90 368 0 +1004 62 301 -20 3400 3560 90 626 0 +1005 151 462 -10 1402 1562 90 250 0 +1006 308 82 -30 0 3647 90 899 0 +1007 418 300 -10 611 771 90 322 0 +1008 113 289 -10 0 3682 90 50 0 +1009 272 243 -30 0 3801 90 280 0 +1010 226 86 -10 2595 2755 90 761 0 +1011 149 183 -20 3108 3268 90 21 0 +1012 252 347 -10 2911 3071 90 15 0 +1013 124 247 -20 3095 3255 90 930 0 +1014 201 307 -10 0 3749 90 194 0 +1015 274 248 -20 0 3800 90 387 0 +1016 76 287 -20 1814 1974 90 860 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2103.txt b/jsprit-instances/instances/lilim/1000/LC2103.txt new file mode 100644 index 00000000..732c2719 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2103.txt @@ -0,0 +1,1018 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -20 0 3671 90 684 0 +2 266 231 -20 0 3800 90 302 0 +3 89 284 20 1436 1596 90 0 828 +4 430 298 10 0 3638 90 0 286 +5 435 77 20 0 3571 90 0 579 +6 25 293 20 2964 3124 90 0 522 +7 43 269 30 687 847 90 0 109 +8 216 117 -20 0 3687 90 808 0 +9 294 437 30 661 821 90 0 227 +10 79 479 30 998 1158 90 0 707 +11 365 18 -10 0 3566 90 70 0 +12 225 125 20 127 287 90 0 712 +13 448 103 -10 0 3578 90 699 0 +14 143 266 10 402 562 90 0 862 +15 252 347 10 2911 3071 90 0 676 +16 403 390 -10 2560 2720 90 679 0 +17 67 153 20 0 3617 90 0 721 +18 90 168 20 3080 3240 90 0 505 +19 302 235 -20 0 3770 90 724 0 +20 259 355 -20 1917 2077 90 374 0 +21 149 183 -10 3108 3268 90 183 0 +22 19 297 -10 2282 2442 90 978 0 +23 209 358 30 1477 1637 90 0 521 +24 56 388 20 0 3586 90 0 750 +25 115 269 -10 2956 3116 90 880 0 +26 377 356 -20 0 3659 90 669 0 +27 113 229 -20 1123 1283 90 881 0 +28 205 343 -20 902 1062 90 170 0 +29 48 137 20 0 3593 90 0 135 +30 467 157 -10 0 3588 90 495 0 +31 220 394 10 2783 2943 90 0 577 +32 436 54 20 0 3554 90 0 681 +33 54 357 -20 0 3601 90 71 0 +34 456 154 -10 0 3597 90 48 0 +35 216 307 -10 0 3758 90 919 0 +36 280 224 -10 2226 2386 90 486 0 +37 90 270 -10 565 725 90 944 0 +38 166 452 20 0 3606 90 0 95 +39 17 283 20 0 3589 90 0 304 +40 196 192 30 0 3745 90 0 168 +41 94 275 10 469 629 90 0 656 +42 292 445 -40 0 3625 90 927 0 +43 329 471 -20 2783 2943 90 364 0 +44 326 57 20 1364 1524 90 0 295 +45 95 466 10 0 3559 90 0 809 +46 429 282 -10 3018 3178 90 498 0 +47 229 364 -20 0 3709 90 890 0 +48 457 160 10 0 3599 90 0 34 +49 452 154 30 332 492 90 0 410 +50 113 289 -30 0 3682 90 806 0 +51 67 387 10 2376 2536 90 0 470 +52 368 17 -20 2021 2181 90 912 0 +53 341 367 -30 0 3676 90 93 0 +54 410 364 -30 1842 2002 90 512 0 +55 80 281 10 0 3652 90 0 945 +56 321 224 -20 2106 2266 90 417 0 +57 73 395 20 1223 1383 90 0 340 +58 259 76 -30 0 3650 90 704 0 +59 121 203 10 0 3687 90 0 897 +60 118 256 -20 0 3692 90 666 0 +61 236 361 -30 0 3713 90 187 0 +62 78 371 20 220 380 90 0 644 +63 301 53 20 969 1129 90 0 846 +64 382 197 -40 0 3682 90 654 0 +65 491 160 20 1989 2149 90 0 791 +66 453 164 -20 0 3604 90 396 0 +67 277 371 30 595 755 90 0 403 +68 272 212 -10 2330 2490 90 271 0 +69 386 218 -10 1901 2061 90 723 0 +70 353 32 10 0 3583 90 0 11 +71 59 389 20 1698 1858 90 0 33 +72 414 62 10 0 3575 90 0 883 +73 278 357 10 212 372 90 0 751 +74 101 179 -20 2412 2572 90 382 0 +75 396 234 -30 0 3678 90 192 0 +76 74 390 20 797 957 90 0 167 +77 332 55 30 211 371 90 0 685 +78 272 365 30 0 3707 90 0 651 +79 418 355 -20 2037 2197 90 475 0 +80 216 380 -20 2300 2460 90 312 0 +81 440 173 -20 3282 3442 90 439 0 +82 89 358 20 0 3631 90 0 609 +83 66 491 20 0 3521 90 0 263 +84 317 234 -20 2479 2639 90 119 0 +85 439 297 -20 2043 2203 90 982 0 +86 394 367 30 380 540 90 0 169 +87 58 364 10 0 3601 90 0 802 +88 290 75 20 191 351 90 0 592 +89 346 344 -10 3212 3372 90 541 0 +90 131 269 -40 0 3704 90 642 0 +91 236 96 -20 1604 1764 90 172 0 +92 29 282 10 1410 1570 90 0 193 +93 418 385 30 0 3609 90 0 53 +94 148 225 40 613 773 90 0 629 +95 166 464 -20 0 3595 90 38 0 +96 266 373 10 0 3700 90 0 314 +97 201 273 30 54 214 90 0 115 +98 255 245 10 7 167 90 0 356 +99 220 379 -10 0 3692 90 913 0 +100 85 317 30 0 3646 90 0 705 +101 125 264 -10 2855 3015 90 859 0 +102 131 253 -10 0 3705 90 425 0 +103 184 188 -20 1260 1420 90 635 0 +104 128 209 20 0 3696 90 0 593 +105 373 364 20 0 3657 90 0 246 +106 389 342 10 1145 1305 90 0 854 +107 420 20 30 575 735 90 0 990 +108 132 218 10 136 296 90 0 306 +109 32 256 -30 901 1061 90 7 0 +110 406 339 20 295 455 90 0 569 +111 191 397 -20 0 3666 90 673 0 +112 72 341 10 0 3625 90 0 552 +113 35 308 -30 3072 3232 90 568 0 +114 169 360 20 2172 2332 90 0 239 +115 222 381 -30 0 3691 90 97 0 +116 96 292 -20 862 1022 90 180 0 +117 311 496 10 0 3571 90 0 366 +118 220 384 -30 2683 2843 90 836 0 +119 259 243 20 22 182 90 0 84 +120 349 476 -10 0 3578 90 672 0 +121 63 159 20 1009 1169 90 0 787 +122 112 243 -10 0 3686 90 850 0 +123 448 302 20 2327 2487 90 0 492 +124 343 27 20 0 3583 90 0 918 +125 67 485 -30 2166 2326 90 753 0 +126 220 359 30 1424 1584 90 0 519 +127 147 435 -20 2111 2271 90 856 0 +128 317 235 -20 2570 2730 90 778 0 +129 43 355 20 0 3592 90 0 358 +130 368 340 10 461 621 90 0 792 +131 450 72 10 0 3557 90 0 588 +132 400 364 30 570 730 90 0 697 +133 355 480 -10 0 3572 90 178 0 +134 450 153 20 533 693 90 0 468 +135 126 188 -20 0 3686 90 29 0 +136 380 223 10 1614 1774 90 0 402 +137 71 453 -20 685 845 90 822 0 +138 54 287 20 209 369 90 0 212 +139 420 168 -10 3393 3553 90 450 0 +140 219 89 -10 2692 2852 90 641 0 +141 189 327 10 420 580 90 0 769 +142 191 309 10 1430 1590 90 0 648 +143 301 67 40 0 3635 90 0 546 +144 484 161 -30 1696 1856 90 824 0 +145 77 483 -10 0 3534 90 288 0 +146 241 375 10 0 3699 90 0 764 +147 428 64 20 1201 1361 90 0 392 +148 403 361 10 1452 1612 90 0 347 +149 257 336 -20 0 3738 90 582 0 +150 131 241 10 3378 3538 90 0 285 +151 63 166 -20 0 3619 90 643 0 +152 71 368 -20 0 3610 90 307 0 +153 272 228 -10 2033 2193 90 560 0 +154 25 290 30 0 3596 90 0 784 +155 441 157 10 0 3612 90 0 485 +156 13 266 -10 0 3587 90 606 0 +157 251 376 10 3186 3346 0 0 1012 +158 61 170 -30 0 3619 90 493 0 +159 386 357 -20 1433 1593 90 722 0 +160 95 475 -10 0 3551 90 799 0 +161 90 298 -10 2104 2264 90 229 0 +162 71 388 -10 0 3598 90 241 0 +163 383 246 20 0 3691 90 0 174 +164 352 38 10 0 3589 90 0 1000 +165 395 1 30 0 3536 90 0 259 +166 120 210 20 1282 1442 90 0 597 +167 46 383 -20 0 3581 90 76 0 +168 202 198 -30 0 3754 90 40 0 +169 358 365 -30 2326 2486 90 86 0 +170 191 352 20 0 3707 90 0 28 +171 470 152 30 0 3584 90 0 372 +172 228 124 20 141 301 90 0 91 +173 402 230 -10 0 3671 90 796 0 +174 323 229 -20 0 3749 90 163 0 +175 331 486 10 0 3575 90 0 887 +176 112 208 -30 1601 1761 90 586 0 +177 172 435 30 0 3624 90 0 222 +178 326 498 10 1021 1181 90 0 133 +179 460 183 10 0 3604 90 0 793 +180 95 279 20 0 3667 90 0 116 +181 76 456 30 780 940 90 0 956 +182 242 350 -30 0 3724 90 900 0 +183 152 196 10 212 372 90 0 21 +184 268 351 10 0 3722 90 0 218 +185 360 356 10 2733 2893 90 0 916 +186 39 296 -20 1983 2143 90 996 0 +187 262 368 30 1162 1322 90 0 61 +188 204 90 -10 1094 1254 90 720 0 +189 149 273 -10 212 372 90 949 0 +190 446 86 -20 3056 3216 90 726 0 +191 139 269 20 1728 1888 90 0 548 +192 483 170 30 0 3578 90 0 75 +193 39 278 -10 1601 1761 90 92 0 +194 201 307 -20 0 3749 90 567 0 +195 395 378 10 1636 1796 90 0 825 +196 139 262 30 1450 1610 90 0 742 +197 176 447 20 311 471 90 0 433 +198 67 380 -20 0 3600 90 462 0 +199 35 358 -20 0 3584 90 665 0 +200 294 455 -30 2426 2586 90 998 0 +201 351 33 20 0 3585 90 0 319 +202 216 316 -10 2319 2479 90 911 0 +203 261 96 40 0 3670 90 0 837 +204 238 57 -30 0 3631 90 437 0 +205 383 18 20 1643 1803 90 0 331 +206 152 460 10 0 3593 90 0 250 +207 94 479 -10 0 3547 90 972 0 +208 337 453 30 0 3604 90 0 279 +209 135 460 -30 0 3585 90 892 0 +210 260 104 20 157 317 90 0 838 +211 337 63 -20 0 3618 90 896 0 +212 32 247 -20 802 962 90 138 0 +213 394 205 10 0 3674 90 0 813 +214 95 294 10 0 3663 90 0 716 +215 253 241 -10 2835 2995 90 733 0 +216 223 90 30 2787 2947 90 0 287 +217 64 473 10 0 3534 90 0 703 +218 275 431 -10 0 3642 90 184 0 +219 261 84 10 0 3658 90 0 351 +220 176 296 -30 1230 1390 90 613 0 +221 361 349 -10 3016 3176 90 436 0 +222 168 433 -30 3156 3316 90 177 0 +223 394 10 40 0 3545 90 0 706 +224 308 60 20 776 936 90 0 898 +225 94 456 20 0 3566 90 0 584 +226 73 484 20 0 3531 90 0 845 +227 277 434 -30 1427 1587 90 9 0 +228 119 232 -20 1939 2099 90 424 0 +229 78 375 10 0 3612 90 0 161 +230 366 346 -10 0 3674 90 509 0 +231 125 181 20 0 3682 90 0 506 +232 69 493 -20 1977 2137 90 664 0 +233 432 80 40 908 1068 90 0 853 +234 72 391 10 0 3597 90 0 719 +235 85 486 -30 0 3537 90 760 0 +236 204 371 30 0 3695 90 0 348 +237 173 328 -20 2481 2641 90 390 0 +238 280 423 -30 0 3649 90 305 0 +239 200 327 -20 3150 3310 90 114 0 +240 241 98 -10 0 3672 90 406 0 +241 96 356 10 186 346 90 0 162 +242 332 491 -30 1211 1371 90 820 0 +243 81 283 10 1624 1784 90 0 378 +244 373 22 10 0 3565 90 0 443 +245 255 371 -20 2209 2369 90 282 0 +246 358 359 -20 0 3671 90 105 0 +247 216 93 10 0 3664 90 0 688 +248 73 360 -40 0 3616 90 317 0 +249 305 212 20 0 3758 0 0 1001 +250 151 462 -10 1402 1562 90 206 0 +251 47 389 -10 1102 1262 90 718 0 +252 155 198 30 118 278 90 0 405 +253 152 457 10 0 3595 90 0 371 +254 329 48 -20 1555 1715 90 531 0 +255 88 394 -30 0 3608 90 398 0 +256 153 295 -40 3382 3542 90 459 0 +257 81 373 10 590 750 90 0 961 +258 163 453 10 0 3604 90 0 444 +259 378 25 -30 2408 2568 90 165 0 +260 401 385 -10 0 3622 90 303 0 +261 184 340 -10 2768 2928 90 494 0 +262 402 362 -20 0 3636 90 689 0 +263 70 482 -20 2351 2511 90 83 0 +264 357 445 -30 0 3602 90 840 0 +265 212 71 20 0 3642 90 0 814 +266 231 81 -30 2403 2563 90 663 0 +267 379 208 10 835 995 90 0 384 +268 236 95 30 0 3669 90 0 803 +269 386 344 20 0 3659 90 0 385 +270 189 200 -30 1989 2149 90 421 0 +271 296 253 10 834 994 90 0 68 +272 73 303 -10 0 3640 90 561 0 +273 30 162 -30 0 3588 90 605 0 +274 230 95 -20 1899 2059 90 917 0 +275 57 131 10 0 3598 90 0 955 +276 379 245 -10 2773 2933 90 543 0 +277 107 221 -30 0 3679 90 431 0 +278 154 458 -20 0 3595 90 951 0 +279 290 417 -30 0 3653 90 208 0 +280 272 243 -10 0 3801 90 529 0 +281 94 130 10 0 3628 90 0 553 +282 222 356 20 1608 1768 90 0 245 +283 243 108 -20 3061 3221 90 936 0 +284 224 93 -20 2191 2351 90 291 0 +285 155 242 -10 0 3729 90 150 0 +286 440 302 -10 0 3628 90 4 0 +287 221 102 -30 2858 3018 90 216 0 +288 52 484 10 0 3518 90 0 145 +289 111 244 -10 2229 2389 90 875 0 +290 132 273 10 2203 2363 90 0 866 +291 228 186 20 269 429 90 0 284 +292 221 374 -20 0 3697 90 511 0 +293 406 286 -10 3314 3474 90 714 0 +294 390 9 30 1263 1423 90 0 381 +295 335 52 -20 0 3609 90 44 0 +296 189 368 20 144 304 90 0 542 +297 397 40 40 2491 2651 90 0 621 +298 408 305 10 0 3657 90 0 670 +299 156 434 10 0 3618 90 0 386 +300 180 335 -10 0 3714 90 746 0 +301 327 483 20 2098 2258 90 0 460 +302 363 62 20 0 3605 90 0 2 +303 375 342 10 939 1099 90 0 260 +304 16 280 -20 0 3589 90 39 0 +305 277 431 30 0 3641 90 0 238 +306 110 241 -10 0 3684 90 108 0 +307 48 385 20 1008 1168 90 0 152 +308 152 260 10 0 3726 0 0 1013 +309 255 120 10 130 290 90 0 738 +310 214 382 30 0 3688 90 0 731 +311 414 384 10 0 3613 90 0 805 +312 232 378 20 2194 2354 90 0 80 +313 80 141 -10 494 654 90 422 0 +314 188 330 -10 0 3723 90 96 0 +315 157 192 -20 3210 3370 90 383 0 +316 101 237 -20 1831 1991 90 337 0 +317 74 360 40 2856 3016 90 0 248 +318 267 260 20 0 3805 90 0 362 +319 378 46 -20 0 3584 90 201 0 +320 420 311 -30 893 1053 90 589 0 +321 384 217 -30 1809 1969 90 717 0 +322 418 300 -30 611 771 90 835 0 +323 356 77 -10 2249 2409 90 534 0 +324 253 244 -30 0 3818 90 345 0 +325 323 258 10 0 3751 90 0 573 +326 293 454 -20 0 3616 90 847 0 +327 231 97 20 0 3670 90 0 752 +328 316 234 10 2661 2821 90 0 675 +329 207 196 20 2565 2725 90 0 708 +330 321 228 30 0 3750 90 0 902 +331 382 17 -20 1734 1894 90 205 0 +332 206 326 -20 0 3737 90 526 0 +333 198 284 -30 0 3762 90 367 0 +334 137 186 -20 2912 3072 90 683 0 +335 229 396 -10 2882 3042 90 964 0 +336 268 235 -20 1842 2002 90 387 0 +337 95 243 20 0 3669 90 0 316 +338 297 430 20 378 538 90 0 851 +339 393 368 -30 0 3639 90 566 0 +340 66 391 -20 0 3593 90 57 0 +341 189 339 -30 2863 3023 90 342 0 +342 280 351 30 116 276 90 0 341 +343 241 77 30 1225 1385 90 0 454 +344 134 265 -10 2666 2826 90 795 0 +345 420 95 30 345 505 90 0 324 +346 111 279 30 141 301 90 0 373 +347 367 358 -10 2133 2293 90 148 0 +348 239 373 -30 1905 2065 90 236 0 +349 384 235 -20 0 3690 90 980 0 +350 284 360 -20 0 3709 90 653 0 +351 325 75 -10 2370 2530 90 219 0 +352 279 369 10 0 3702 90 0 827 +353 340 449 -20 0 3606 90 419 0 +354 275 448 10 0 3625 90 0 979 +355 447 88 -30 2963 3123 90 365 0 +356 314 279 -10 270 430 90 98 0 +357 434 377 -10 0 3601 90 359 0 +358 67 377 -20 0 3602 90 129 0 +359 370 353 10 746 906 90 0 357 +360 57 367 -20 2169 2329 90 754 0 +361 332 486 20 1912 2072 90 0 558 +362 386 361 -20 1527 1687 90 318 0 +363 55 282 40 305 465 90 0 632 +364 317 467 20 0 3597 90 0 43 +365 335 54 30 1853 2013 90 0 355 +366 348 466 -10 0 3587 90 117 0 +367 132 314 30 0 3690 90 0 333 +368 328 216 10 0 3739 90 0 745 +369 416 48 -20 1880 2040 90 989 0 +370 370 55 10 2886 3046 0 0 1003 +371 149 434 -10 0 3615 90 253 0 +372 466 169 -30 2502 2662 90 171 0 +373 141 267 -30 0 3714 90 346 0 +374 258 350 20 1822 1982 90 0 20 +375 428 312 -30 0 3636 90 993 0 +376 211 188 10 0 3751 0 0 1010 +377 50 343 -30 0 3604 90 467 0 +378 107 311 -10 2813 2973 90 243 0 +379 178 441 20 0 3620 90 0 572 +380 232 85 10 2309 2469 90 0 761 +381 391 23 -30 0 3557 90 294 0 +382 137 227 20 0 3709 90 0 74 +383 161 203 20 100 260 90 0 315 +384 363 212 -10 3274 3434 90 267 0 +385 384 346 -20 1331 1491 90 269 0 +386 166 434 -10 2965 3125 90 299 0 +387 274 248 20 0 3800 90 0 336 +388 156 421 30 0 3629 90 0 728 +389 346 211 10 0 3721 90 0 819 +390 265 358 20 1352 1512 90 0 237 +391 96 407 20 0 3605 90 0 841 +392 443 70 -20 2464 2624 90 147 0 +393 125 212 -30 0 3694 90 587 0 +394 361 337 50 363 523 90 0 446 +395 322 78 -20 2464 2624 90 732 0 +396 481 156 20 1600 1760 90 0 66 +397 188 293 30 0 3749 90 0 781 +398 76 408 30 0 3589 90 0 255 +399 130 304 -10 3175 3335 90 812 0 +400 378 363 -20 0 3654 90 507 0 +401 185 301 20 1330 1490 90 0 671 +402 385 235 -10 2581 2741 90 136 0 +403 261 350 -30 0 3724 90 67 0 +404 389 33 -10 0 3567 90 416 0 +405 151 214 -30 511 671 90 252 0 +406 265 94 10 258 418 90 0 240 +407 65 164 -10 2595 2755 90 480 0 +408 293 81 10 174 334 90 0 749 +409 363 55 -20 2983 3143 90 465 0 +410 465 176 -30 0 3597 90 49 0 +411 428 298 -10 1654 1814 90 870 0 +412 75 379 -20 0 3607 90 426 0 +413 404 378 -20 0 3624 90 580 0 +414 203 203 -30 0 3758 90 461 0 +415 259 88 20 0 3662 90 0 843 +416 362 17 10 0 3566 90 0 404 +417 320 258 20 564 724 90 0 56 +418 59 358 20 2358 2518 90 0 947 +419 316 453 20 224 384 90 0 353 +420 225 192 20 74 234 90 0 539 +421 140 206 30 0 3706 90 0 270 +422 83 151 10 0 3630 90 0 313 +423 366 196 -20 0 3697 90 871 0 +424 108 245 20 0 3682 90 0 228 +425 129 267 10 2480 2640 90 0 102 +426 57 379 20 907 1067 90 0 412 +427 329 56 -30 1457 1617 90 861 0 +428 213 363 -20 0 3706 90 974 0 +429 76 391 30 0 3601 90 0 915 +430 330 259 30 1231 1391 90 0 603 +431 136 217 30 0 3706 90 0 277 +432 165 333 20 0 3706 90 0 829 +433 160 431 -20 0 3622 90 197 0 +434 338 489 -20 1308 1468 90 730 0 +435 335 64 -10 0 3620 90 693 0 +436 412 361 10 1748 1908 90 0 221 +437 259 90 30 0 3664 90 0 204 +438 265 77 20 0 3651 0 0 1008 +439 460 173 20 2887 3047 90 0 81 +440 83 301 -20 0 3650 90 786 0 +441 201 331 -20 0 3730 90 668 0 +442 118 214 -20 0 3688 90 538 0 +443 395 30 -10 2796 2956 90 244 0 +444 125 444 -10 1997 2157 90 258 0 +445 283 248 -10 0 3791 90 767 0 +446 391 334 -50 1047 1207 90 394 0 +447 212 215 -30 3160 3320 90 968 0 +448 276 428 -20 1048 1208 90 810 0 +449 96 152 20 0 3642 90 0 484 +450 425 85 10 0 3584 90 0 139 +451 336 7 10 0 3567 90 0 910 +452 196 219 -10 3054 3214 90 528 0 +453 210 94 -10 997 1157 90 999 0 +454 310 81 -30 0 3645 90 343 0 +455 341 37 20 434 594 90 0 678 +456 344 478 -30 2296 2456 90 991 0 +457 406 37 40 275 435 90 0 953 +458 69 346 -10 0 3620 90 698 0 +459 80 376 40 407 567 90 0 256 +460 314 449 -20 0 3615 90 301 0 +461 209 201 30 2753 2913 90 0 414 +462 88 379 20 689 849 90 0 198 +463 352 500 30 1505 1665 90 0 826 +464 65 357 -10 0 3611 90 657 0 +465 345 15 20 0 3571 90 0 409 +466 125 245 -20 3002 3162 90 696 0 +467 52 369 30 2073 2233 90 0 377 +468 449 140 -20 730 890 90 134 0 +469 430 310 30 0 3635 0 0 1007 +470 109 325 -10 0 3665 90 51 0 +471 446 139 -10 0 3599 90 988 0 +472 229 214 20 41 201 90 0 637 +473 197 301 10 0 3751 90 0 872 +474 146 245 -10 0 3720 90 994 0 +475 401 368 20 664 824 90 0 79 +476 116 259 -30 2613 2773 90 777 0 +477 374 55 30 2792 2952 90 0 759 +478 249 251 -20 3036 3196 90 804 0 +479 325 490 10 0 3573 90 0 874 +480 59 159 10 0 3613 90 0 407 +481 186 177 20 1361 1521 90 0 736 +482 319 229 -10 0 3752 90 591 0 +483 26 269 30 0 3600 90 0 928 +484 53 139 -20 0 3598 90 449 0 +485 471 154 -10 0 3584 90 155 0 +486 301 247 10 0 3773 90 0 36 +487 388 220 -20 0 3683 90 729 0 +488 235 81 20 0 3655 90 0 773 +489 347 479 -20 2389 2549 90 735 0 +490 367 59 -10 0 3601 90 952 0 +491 261 370 30 1069 1229 90 0 816 +492 441 287 -20 0 3630 90 123 0 +493 44 153 30 0 3597 90 0 158 +494 263 351 10 1545 1705 90 0 261 +495 444 157 10 215 375 90 0 30 +496 374 17 -20 0 3561 90 576 0 +497 448 295 -30 0 3621 90 520 0 +498 446 297 10 2232 2392 90 0 46 +499 347 40 -20 0 3593 90 655 0 +500 318 493 10 825 985 90 0 549 +501 399 352 10 1260 1420 90 0 800 +502 51 364 -20 1887 2047 90 763 0 +503 250 217 -30 2534 2694 90 976 0 +504 107 225 30 440 600 90 0 563 +505 173 208 -20 0 3737 90 18 0 +506 204 189 -20 0 3748 90 231 0 +507 399 379 20 2960 3120 90 0 400 +508 79 346 10 0 3628 90 0 906 +509 360 338 10 272 432 90 0 230 +510 390 17 -10 0 3553 90 727 0 +511 207 337 20 0 3727 90 0 292 +512 409 361 30 0 3631 90 0 54 +513 206 377 20 559 719 90 0 807 +514 429 294 -30 0 3640 90 931 0 +515 375 31 -10 2185 2345 90 876 0 +516 426 80 -30 0 3580 90 518 0 +517 74 374 20 0 3609 90 0 734 +518 408 20 30 0 3545 90 0 516 +519 239 369 -30 1811 1971 90 126 0 +520 420 308 30 709 869 90 0 497 +521 254 357 -30 0 3717 90 23 0 +522 53 297 -20 0 3622 90 6 0 +523 434 382 -10 0 3598 90 537 0 +524 204 171 20 0 3733 90 0 984 +525 173 169 -10 1558 1718 90 623 0 +526 190 332 20 0 3723 90 0 332 +527 274 231 30 0 3794 90 0 633 +528 207 194 10 0 3754 90 0 452 +529 315 232 10 0 3757 90 0 280 +530 425 87 20 444 604 90 0 863 +531 312 64 20 582 742 90 0 254 +532 129 244 30 2908 3068 90 0 842 +533 278 230 -30 0 3790 90 789 0 +534 351 75 10 0 3622 90 0 323 +535 185 293 10 0 3747 90 0 755 +536 364 364 20 0 3663 90 0 702 +537 432 369 10 0 3607 90 0 523 +538 128 249 20 0 3702 90 0 442 +539 221 179 -20 369 529 90 420 0 +540 194 296 20 0 3752 90 0 973 +541 413 350 10 0 3633 90 0 89 +542 214 372 -20 0 3697 90 296 0 +543 379 229 10 1045 1205 90 0 276 +544 91 298 -10 2013 2173 90 595 0 +545 226 120 30 0 3692 90 0 788 +546 344 46 -40 1660 1820 90 143 0 +547 238 84 10 1634 1794 90 0 779 +548 138 276 -20 1915 2075 90 191 0 +549 346 487 -10 1808 1968 90 500 0 +550 95 160 10 0 3645 90 0 914 +551 103 266 30 1062 1222 90 0 604 +552 98 286 -10 0 3668 90 112 0 +553 77 172 -10 2976 3136 90 281 0 +554 147 199 30 308 468 90 0 599 +555 210 98 10 0 3667 90 0 920 +556 428 292 -30 0 3642 90 611 0 +557 121 236 -20 2034 2194 90 855 0 +558 336 479 -20 0 3580 90 361 0 +559 203 369 -20 841 1001 90 596 0 +560 296 232 10 1268 1428 90 0 153 +561 87 369 10 201 361 90 0 272 +562 247 88 30 1924 2084 90 0 617 +563 104 246 -30 1353 1513 90 504 0 +564 67 302 -20 2493 2653 90 839 0 +565 114 296 -20 0 3681 90 626 0 +566 394 356 30 0 3646 90 0 339 +567 192 306 20 1523 1683 90 0 194 +568 16 285 30 2492 2652 90 0 113 +569 419 310 -20 0 3645 90 110 0 +570 389 221 10 0 3683 0 0 1011 +571 129 264 20 0 3703 90 0 740 +572 172 483 -20 904 1064 90 379 0 +573 325 251 -10 1425 1585 90 325 0 +574 151 436 -20 2386 2546 90 888 0 +575 263 91 20 0 3665 90 0 869 +576 401 15 20 685 845 90 0 496 +577 253 382 -10 3090 3250 90 31 0 +578 247 89 20 2015 2175 90 0 899 +579 283 229 -20 0 3785 90 5 0 +580 366 341 20 553 713 90 0 413 +581 392 213 20 2092 2252 90 0 934 +582 167 304 20 207 367 90 0 149 +583 477 154 10 1506 1666 90 0 725 +584 234 383 -20 0 3691 90 225 0 +585 199 327 -10 0 3732 90 948 0 +586 140 220 30 0 3710 90 0 176 +587 144 266 30 311 471 90 0 393 +588 432 105 -10 0 3592 90 131 0 +589 368 325 30 139 299 90 0 320 +590 202 386 20 0 3680 90 0 775 +591 325 246 10 1520 1680 90 0 482 +592 430 86 -20 0 3581 90 88 0 +593 200 195 -20 0 3750 90 104 0 +594 440 295 30 2136 2296 90 0 667 +595 77 287 10 1905 2065 90 0 544 +596 187 362 20 0 3696 90 0 559 +597 131 207 -20 0 3698 90 166 0 +598 405 5 20 786 946 90 0 864 +599 125 226 -30 1389 1549 90 554 0 +600 254 335 -30 3013 3173 90 878 0 +601 212 168 20 860 1020 90 0 926 +602 281 279 -20 0 3782 90 649 0 +603 326 241 -30 1615 1775 90 430 0 +604 152 241 -30 0 3726 90 551 0 +605 71 139 30 807 967 90 0 273 +606 46 277 10 589 749 90 0 156 +607 393 13 20 1358 1518 90 0 700 +608 87 454 -10 882 1042 90 877 0 +609 86 359 -20 0 3628 90 82 0 +610 220 192 -30 0 3759 90 638 0 +611 426 279 30 3112 3272 90 0 556 +612 131 267 -40 0 3704 90 923 0 +613 200 297 30 553 713 90 0 220 +614 299 442 -20 1904 2064 90 782 0 +615 265 218 20 2429 2589 0 0 1016 +616 398 231 20 2296 2456 90 0 946 +617 312 74 -30 0 3638 90 562 0 +618 99 307 20 0 3663 90 0 997 +619 22 283 -20 0 3594 90 833 0 +620 67 160 -10 2690 2850 90 992 0 +621 390 42 -40 2588 2748 90 297 0 +622 44 279 10 0 3616 90 0 737 +623 200 182 10 0 3740 90 0 525 +624 458 303 -20 0 3610 90 966 0 +625 298 438 -30 567 727 90 929 0 +626 62 301 20 0 3630 90 0 565 +627 112 251 10 0 3686 90 0 694 +628 184 354 30 0 3701 90 0 783 +629 140 180 -40 0 3694 90 94 0 +630 269 428 -10 1145 1305 90 981 0 +631 123 206 -20 1885 2045 90 983 0 +632 36 284 -40 0 3608 90 363 0 +633 272 233 -30 0 3797 90 527 0 +634 320 231 -10 2384 2544 90 901 0 +635 211 180 20 758 918 90 0 103 +636 114 169 20 2612 2772 90 0 970 +637 245 239 -20 2933 3093 90 472 0 +638 117 204 30 0 3684 90 0 610 +639 316 254 -20 0 3758 90 739 0 +640 169 443 30 500 660 90 0 941 +641 212 96 10 0 3666 90 0 140 +642 119 285 40 0 3689 90 0 90 +643 71 163 20 0 3625 90 0 151 +644 78 361 -20 0 3620 90 62 0 +645 354 219 -30 3375 3535 90 756 0 +646 389 233 -20 0 3684 90 748 0 +647 90 391 10 541 701 90 0 937 +648 209 307 -10 1811 1971 90 142 0 +649 363 351 20 2923 3083 90 0 602 +650 405 47 10 255 415 90 0 885 +651 278 329 -30 0 3741 90 78 0 +652 261 371 20 0 3703 90 0 882 +653 302 470 20 2227 2387 90 0 350 +654 373 205 40 0 3694 90 0 64 +655 381 20 20 1828 1988 90 0 499 +656 90 277 -10 662 822 90 41 0 +657 46 341 10 0 3601 90 0 464 +658 50 138 -10 0 3595 90 677 0 +659 61 437 20 265 425 90 0 758 +660 331 252 -10 0 3743 90 921 0 +661 440 81 -10 0 3570 90 935 0 +662 384 206 20 739 899 90 0 686 +663 232 87 30 0 3661 90 0 266 +664 59 471 20 0 3532 90 0 232 +665 174 304 20 110 270 90 0 199 +666 106 248 20 0 3680 90 0 60 +667 410 287 -30 0 3660 90 594 0 +668 206 313 20 2091 2251 90 0 441 +669 412 367 20 960 1120 90 0 26 +670 412 300 -10 515 675 90 298 0 +671 206 295 -20 2809 2969 90 401 0 +672 329 459 10 0 3601 90 0 120 +673 177 436 20 199 359 90 0 111 +674 266 264 30 0 3803 0 0 1006 +675 308 235 -10 3135 3295 90 328 0 +676 260 330 -10 3203 3363 90 15 0 +677 49 136 10 1705 1865 90 0 658 +678 356 28 -20 1000 1160 90 455 0 +679 428 384 10 0 3602 90 0 16 +680 220 362 20 1331 1491 90 0 962 +681 437 61 -20 0 3559 90 32 0 +682 365 360 20 0 3665 90 0 939 +683 107 168 20 0 3660 90 0 334 +684 220 177 20 0 3746 90 0 1 +685 347 21 -30 1386 1546 90 77 0 +686 293 245 -20 0 3781 90 662 0 +687 267 436 -30 3007 3167 90 858 0 +688 216 96 -10 0 3667 90 247 0 +689 383 351 20 167 327 90 0 262 +690 289 240 20 0 3784 0 0 1015 +691 129 185 -20 2814 2974 90 893 0 +692 291 450 -20 2705 2865 90 744 0 +693 387 21 10 1548 1708 90 0 435 +694 116 255 -10 0 3690 90 627 0 +695 50 368 30 0 3592 0 0 1005 +696 121 249 20 0 3695 90 0 466 +697 404 346 -30 0 3643 90 132 0 +698 77 360 10 0 3619 90 0 458 +699 447 102 10 0 3578 90 0 13 +700 366 16 -20 0 3563 90 607 0 +701 348 16 -20 1780 1940 90 894 0 +702 353 346 -20 0 3684 90 536 0 +703 54 485 -10 1773 1933 90 217 0 +704 319 77 30 0 3638 90 0 58 +705 83 282 -30 1532 1692 90 100 0 +706 384 24 -40 2601 2761 90 223 0 +707 52 469 -30 1387 1547 90 10 0 +708 199 200 -20 2945 3105 90 329 0 +709 273 234 -10 0 3796 90 942 0 +710 16 281 -20 0 3588 90 938 0 +711 151 442 -20 0 3608 90 857 0 +712 223 114 -20 332 492 90 12 0 +713 191 308 -20 0 3742 90 865 0 +714 448 297 10 0 3621 90 0 293 +715 386 28 20 2507 2667 90 0 849 +716 106 295 -10 0 3674 90 214 0 +717 387 224 30 1517 1677 90 0 321 +718 96 377 10 0 3625 90 0 251 +719 86 361 -10 3347 3507 90 234 0 +720 211 107 10 531 691 90 0 188 +721 43 125 -20 1603 1763 90 17 0 +722 369 351 20 0 3668 90 0 159 +723 388 228 10 1235 1395 90 0 69 +724 325 228 20 1810 1970 90 0 19 +725 490 159 -10 1897 2057 90 583 0 +726 420 78 20 0 3583 90 0 190 +727 396 4 10 0 3538 90 0 510 +728 222 317 -30 0 3752 90 388 0 +729 389 198 20 543 703 90 0 487 +730 322 454 20 0 3608 90 0 434 +731 241 391 -30 2985 3145 90 310 0 +732 256 117 20 0 3691 90 0 395 +733 298 255 10 0 3776 90 0 215 +734 74 363 -20 0 3615 90 517 0 +735 345 496 20 0 3561 90 0 489 +736 167 169 -20 1654 1814 90 481 0 +737 23 306 -10 2182 2342 90 622 0 +738 317 62 -10 0 3625 90 309 0 +739 319 257 20 0 3755 90 0 639 +740 129 255 -20 0 3703 90 571 0 +741 59 377 -20 2088 2248 90 895 0 +742 138 272 -30 1821 1981 90 196 0 +743 317 251 30 940 1100 90 0 975 +744 279 436 20 0 3636 90 0 692 +745 371 207 -10 241 401 90 368 0 +746 263 372 10 886 1046 90 0 300 +747 50 347 10 0 3602 90 0 873 +748 275 236 20 0 3796 90 0 646 +749 334 47 -10 331 491 90 408 0 +750 50 383 -20 1889 2049 90 24 0 +751 170 338 -10 2284 2444 90 73 0 +752 245 109 -20 0 3683 90 327 0 +753 69 475 30 1189 1349 90 0 125 +754 54 372 20 1991 2151 90 0 360 +755 198 334 -10 2203 2363 90 535 0 +756 380 228 30 0 3693 90 0 645 +757 425 118 10 219 379 90 0 830 +758 80 398 -20 0 3599 90 659 0 +759 366 57 -30 3076 3236 90 477 0 +760 67 463 30 584 744 90 0 235 +761 226 86 -10 2595 2755 90 380 0 +762 59 480 -20 1583 1743 90 801 0 +763 40 378 20 0 3579 90 0 502 +764 250 367 -10 2113 2273 90 146 0 +765 157 436 -20 0 3617 90 780 0 +766 463 161 -10 2403 2563 90 908 0 +767 266 250 10 409 569 90 0 445 +768 51 162 -30 2213 2373 90 963 0 +769 194 353 -10 0 3707 90 141 0 +770 383 41 -20 2685 2845 90 909 0 +771 247 82 -20 0 3656 90 924 0 +772 457 142 20 829 989 90 0 818 +773 244 94 -20 1795 1955 90 488 0 +774 441 63 -30 0 3557 90 785 0 +775 244 371 -20 2310 2470 90 590 0 +776 174 444 10 0 3616 90 0 904 +777 94 247 30 853 1013 90 0 476 +778 320 225 20 0 3750 90 0 128 +779 316 80 -10 0 3642 90 547 0 +780 155 447 20 2672 2832 90 0 765 +781 211 308 -30 0 3755 90 397 0 +782 297 442 20 1812 1972 90 0 614 +783 200 342 -30 997 1157 90 628 0 +784 44 325 -30 3181 3341 90 154 0 +785 438 60 30 0 3557 90 0 774 +786 80 374 20 0 3614 90 0 440 +787 59 163 -20 2311 2471 90 121 0 +788 236 92 -30 2210 2370 90 545 0 +789 414 66 30 1592 1752 90 0 533 +790 34 279 -10 0 3607 90 821 0 +791 475 156 -20 0 3581 90 65 0 +792 404 310 -10 0 3659 90 130 0 +793 367 239 -10 0 3707 90 179 0 +794 210 359 -20 1568 1728 90 797 0 +795 133 278 10 0 3704 90 0 344 +796 446 169 10 0 3612 90 0 173 +797 188 356 20 0 3702 90 0 794 +798 312 252 -20 845 1005 90 967 0 +799 69 485 10 0 3528 90 0 160 +800 413 353 -10 1650 1810 90 501 0 +801 54 446 20 0 3547 90 0 762 +802 56 357 -10 0 3603 90 87 0 +803 230 105 -30 0 3678 90 268 0 +804 196 302 20 0 3750 90 0 478 +805 391 373 -10 0 3637 90 311 0 +806 101 295 30 0 3669 90 0 50 +807 234 350 -20 2617 2777 90 513 0 +808 215 108 20 2760 2920 90 0 8 +809 142 457 -10 0 3591 90 45 0 +810 283 425 20 0 3646 90 0 448 +811 77 397 -30 919 1079 90 905 0 +812 105 317 10 0 3665 90 0 399 +813 382 213 -10 1715 1875 90 213 0 +814 213 76 -20 0 3647 90 265 0 +815 417 56 20 0 3569 90 0 957 +816 183 340 -30 0 3712 90 491 0 +817 123 242 -20 3190 3350 90 930 0 +818 475 136 -20 1029 1189 90 772 0 +819 377 246 -10 3054 3214 90 389 0 +820 310 484 30 626 786 90 0 242 +821 47 280 10 403 563 90 0 790 +822 57 456 20 388 548 90 0 137 +823 313 266 20 373 533 90 0 844 +824 475 145 30 0 3576 90 0 144 +825 400 376 -10 0 3629 90 195 0 +826 290 416 -30 0 3654 90 463 0 +827 277 369 -10 0 3702 90 352 0 +828 91 303 -20 0 3657 90 3 0 +829 194 301 -20 0 3749 90 432 0 +830 254 238 -10 0 3812 90 757 0 +831 215 91 -10 0 3662 90 886 0 +832 500 162 20 2088 2248 90 0 954 +833 56 287 20 0 3627 90 0 619 +834 289 452 -10 0 3619 90 969 0 +835 378 326 30 160 320 90 0 322 +836 197 350 30 1186 1346 90 0 118 +837 243 88 -40 1731 1891 90 203 0 +838 250 72 -20 1125 1285 90 210 0 +839 101 290 20 1150 1310 90 0 564 +840 351 480 30 0 3573 90 0 264 +841 67 357 -20 3044 3204 90 391 0 +842 128 240 -30 3285 3445 90 532 0 +843 253 81 -20 0 3655 90 415 0 +844 307 227 -20 2853 3013 90 823 0 +845 233 441 -20 0 3633 90 226 0 +846 311 47 -20 0 3613 90 63 0 +847 292 456 20 0 3614 90 0 326 +848 183 187 -30 0 3733 90 987 0 +849 392 31 -20 2890 3050 90 715 0 +850 103 251 10 0 3677 90 0 122 +851 300 443 -20 1996 2156 90 338 0 +852 420 295 -20 0 3649 90 995 0 +853 427 64 -40 1292 1452 90 233 0 +854 372 354 -10 0 3664 90 106 0 +855 101 263 20 0 3675 90 0 557 +856 141 454 20 1686 1846 90 0 127 +857 146 461 20 1497 1657 90 0 711 +858 298 430 30 469 629 90 0 687 +859 148 270 10 119 279 90 0 101 +860 76 287 20 1814 1974 90 0 925 +861 308 55 30 871 1031 90 0 427 +862 143 257 -10 501 661 90 14 0 +863 393 2 -20 979 1139 90 530 0 +864 385 28 -20 0 3565 90 598 0 +865 204 291 20 0 3763 90 0 713 +866 132 272 -10 0 3704 90 290 0 +867 206 379 -20 0 3688 90 940 0 +868 69 383 10 0 3600 90 0 977 +869 245 96 -20 0 3670 90 575 0 +870 431 301 10 0 3636 90 0 411 +871 448 94 20 0 3572 90 0 423 +872 199 305 -10 0 3749 90 473 0 +873 95 356 -10 3447 3607 90 747 0 +874 328 498 -10 0 3565 90 479 0 +875 108 222 10 0 3680 90 0 289 +876 341 26 10 0 3583 90 0 515 +877 63 454 10 0 3548 90 0 608 +878 222 357 30 0 3714 90 0 600 +879 416 364 -30 0 3623 90 889 0 +880 127 278 10 2106 2266 90 0 25 +881 140 252 20 0 3714 90 0 27 +882 218 298 -20 0 3767 90 652 0 +883 432 87 -10 2858 3018 90 72 0 +884 216 300 30 0 3764 0 0 1014 +885 438 72 -10 1098 1258 90 650 0 +886 184 178 10 1454 1614 90 0 831 +887 345 468 -10 2677 2837 90 175 0 +888 150 435 20 0 3614 90 0 574 +889 395 365 30 0 3639 90 0 879 +890 208 371 20 655 815 90 0 47 +891 190 292 10 745 905 90 0 959 +892 78 479 30 1089 1249 90 0 209 +893 104 198 20 0 3670 90 0 691 +894 346 13 20 1686 1846 90 0 701 +895 47 388 20 1193 1353 90 0 741 +896 315 57 20 0 3621 90 0 211 +897 110 199 -10 0 3675 90 59 0 +898 323 60 -20 0 3621 90 224 0 +899 308 82 -20 0 3647 90 578 0 +900 216 374 30 1035 1195 90 0 182 +901 326 253 10 1039 1199 90 0 634 +902 308 232 -30 2948 3108 90 330 0 +903 118 223 10 339 499 90 0 943 +904 149 444 -10 0 3606 90 776 0 +905 95 395 30 0 3612 90 0 811 +906 117 319 -10 0 3675 90 508 0 +907 262 352 -10 0 3722 90 960 0 +908 468 135 10 932 1092 90 0 766 +909 351 31 20 813 973 90 0 770 +910 361 15 -10 2118 2278 90 451 0 +911 195 300 10 0 3750 90 0 202 +912 397 27 20 0 3557 90 0 52 +913 179 311 10 0 3731 90 0 99 +914 77 133 -10 709 869 90 550 0 +915 66 397 -30 0 3589 90 429 0 +916 366 352 -10 2830 2990 90 185 0 +917 221 87 20 1403 1563 90 0 274 +918 347 23 -20 0 3578 90 124 0 +919 176 358 10 2075 2235 90 0 35 +920 229 78 -10 2496 2656 90 555 0 +921 272 246 10 218 378 90 0 660 +922 293 67 20 0 3637 90 0 932 +923 140 265 40 1543 1703 90 0 612 +924 238 83 20 0 3657 90 0 771 +925 136 296 -20 0 3702 90 860 0 +926 218 98 -20 2002 2162 90 601 0 +927 290 440 40 1621 1781 90 0 42 +928 29 302 -30 2085 2245 90 483 0 +929 290 425 30 280 440 90 0 625 +930 124 247 20 0 3698 90 0 817 +931 442 287 30 0 3629 90 0 514 +932 294 64 -20 0 3633 90 922 0 +933 74 165 -20 0 3629 90 985 0 +934 382 245 -20 2959 3119 90 581 0 +935 405 24 10 378 538 90 0 661 +936 211 97 20 812 972 90 0 283 +937 88 390 -10 0 3610 90 647 0 +938 37 295 20 0 3607 90 0 710 +939 359 371 -20 0 3662 90 682 0 +940 186 372 20 0 3687 90 0 867 +941 116 446 -30 1898 2058 90 640 0 +942 293 249 10 0 3781 90 0 709 +943 83 228 -10 0 3656 90 903 0 +944 96 269 10 0 3669 90 0 37 +945 179 284 -10 0 3746 90 55 0 +946 368 219 -20 0 3702 90 616 0 +947 66 359 -20 3157 3317 90 418 0 +948 189 338 10 2954 3114 90 0 585 +949 163 277 10 0 3733 90 0 189 +950 5 296 10 0 3575 0 0 1004 +951 152 478 20 0 3576 90 0 278 +952 366 34 10 2086 2246 90 0 490 +953 429 80 -40 0 3578 90 457 0 +954 464 178 -20 2691 2851 90 832 0 +955 138 196 -10 0 3700 90 275 0 +956 87 481 -30 2733 2893 90 181 0 +957 425 99 -20 0 3593 90 815 0 +958 241 362 10 2410 2570 0 0 1009 +959 207 289 -10 2997 3157 90 891 0 +960 264 365 10 0 3709 90 0 907 +961 102 289 -10 1242 1402 90 257 0 +962 233 346 -20 2711 2871 90 680 0 +963 78 141 30 0 3621 90 0 768 +964 196 348 10 0 3713 90 0 335 +965 216 92 -20 2382 2542 90 971 0 +966 444 309 20 2425 2585 90 0 624 +967 313 263 20 0 3760 90 0 798 +968 211 198 30 2660 2820 90 0 447 +969 314 436 10 2101 2261 90 0 834 +970 217 189 -20 0 3755 90 636 0 +971 197 178 20 0 3735 90 0 965 +972 60 497 10 0 3513 90 0 207 +973 206 312 -20 2000 2160 90 540 0 +974 197 351 20 1277 1437 90 0 428 +975 305 233 -30 3041 3201 90 743 0 +976 297 250 30 0 3777 90 0 503 +977 71 348 -10 3055 3215 90 868 0 +978 11 269 10 1110 1270 90 0 22 +979 247 447 -10 0 3627 90 354 0 +980 386 213 20 1996 2156 90 0 349 +981 292 434 10 755 915 90 0 630 +982 436 301 20 0 3632 90 0 85 +983 145 221 20 0 3716 90 0 631 +984 224 96 -20 0 3668 90 524 0 +985 59 128 20 1496 1656 90 0 933 +986 489 150 50 0 3565 0 0 1002 +987 152 225 30 994 1154 90 0 848 +988 426 85 10 0 3583 90 0 471 +989 415 73 20 1495 1655 90 0 369 +990 440 70 -30 2371 2531 90 107 0 +991 320 476 30 0 3588 90 0 456 +992 57 132 10 1312 1472 90 0 620 +993 405 311 30 0 3658 90 0 375 +994 109 250 10 1540 1700 90 0 474 +995 428 314 20 0 3635 90 0 852 +996 40 288 20 1793 1953 90 0 186 +997 175 282 -20 0 3743 90 618 0 +998 298 456 30 0 3613 90 0 200 +999 208 101 10 0 3670 90 0 453 +1000 342 52 -10 0 3606 90 164 0 +1001 305 212 -20 0 3758 90 249 0 +1002 489 150 -50 0 3565 90 986 0 +1003 370 55 -10 2886 3046 90 370 0 +1004 5 296 -10 0 3575 90 950 0 +1005 50 368 -30 0 3592 90 695 0 +1006 266 264 -30 0 3803 90 674 0 +1007 430 310 -30 0 3635 90 469 0 +1008 265 77 -20 0 3651 90 438 0 +1009 241 362 -10 2410 2570 90 958 0 +1010 211 188 -10 0 3751 90 376 0 +1011 389 221 -10 0 3683 90 570 0 +1012 251 376 -10 3186 3346 90 157 0 +1013 152 260 -10 0 3726 90 308 0 +1014 216 300 -30 0 3764 90 884 0 +1015 289 240 -20 0 3784 90 690 0 +1016 265 218 -20 2429 2589 90 615 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2104.txt b/jsprit-instances/instances/lilim/1000/LC2104.txt new file mode 100644 index 00000000..eca670bb --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2104.txt @@ -0,0 +1,1020 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 30 0 3671 90 0 788 +2 266 231 40 0 3800 90 0 119 +3 89 284 -20 1436 1596 90 961 0 +4 430 298 10 0 3638 90 0 714 +5 435 77 -10 0 3571 90 588 0 +6 25 293 20 0 3595 90 0 22 +7 43 269 30 687 847 90 0 176 +8 216 117 10 0 3687 90 0 452 +9 294 437 30 661 821 90 0 847 +10 79 479 30 998 1158 90 0 753 +11 365 18 20 0 3566 90 0 770 +12 225 125 20 127 287 90 0 712 +13 448 103 30 0 3578 90 0 355 +14 143 266 10 0 3716 90 0 373 +15 252 347 -30 0 3727 90 335 0 +16 403 390 -30 0 3617 90 54 0 +17 67 153 20 0 3617 90 0 538 +18 90 168 20 3080 3240 90 0 405 +19 302 235 -30 0 3770 90 579 0 +20 259 355 20 1917 2077 90 0 649 +21 149 183 -10 3108 3268 90 563 0 +22 19 297 -20 0 3589 90 6 0 +23 209 358 -20 1477 1637 90 80 0 +24 56 388 20 0 3586 90 0 358 +25 115 269 10 0 3688 90 0 180 +26 377 356 10 0 3659 90 0 359 +27 113 229 -20 0 3686 90 442 0 +28 205 343 20 902 1062 90 0 974 +29 48 137 20 0 3593 90 0 658 +30 467 157 -20 0 3588 90 818 0 +31 220 394 10 0 3677 90 0 245 +32 436 54 20 0 3554 90 0 681 +33 54 357 10 0 3601 90 0 129 +34 456 154 -10 0 3597 90 155 0 +35 216 307 -10 0 3758 90 103 0 +36 280 224 -20 0 3785 90 302 0 +37 90 270 10 565 725 90 0 997 +38 166 452 20 0 3606 90 0 572 +39 17 283 20 0 3589 90 0 710 +40 196 192 -20 0 3745 90 736 0 +41 94 275 10 469 629 90 0 855 +42 292 445 10 0 3625 90 0 927 +43 329 471 -10 0 3590 90 120 0 +44 326 57 -30 0 3617 90 499 0 +45 95 466 -20 0 3559 90 263 0 +46 429 282 -10 3018 3178 90 271 0 +47 229 364 -10 0 3709 90 542 0 +48 457 160 -10 0 3599 90 583 0 +49 452 154 30 332 492 90 0 766 +50 113 289 10 0 3682 90 0 564 +51 67 387 -40 0 3596 90 459 0 +52 368 17 20 2021 2181 90 0 910 +53 341 367 -10 0 3676 90 746 0 +54 410 364 30 1842 2002 90 0 16 +55 80 281 10 0 3652 90 0 705 +56 321 224 30 0 3749 90 0 690 +57 73 395 20 1223 1383 90 0 741 +58 259 76 10 0 3650 90 0 562 +59 121 203 10 0 3687 0 0 1012 +60 118 256 -20 0 3692 90 694 0 +61 236 361 -30 0 3713 90 854 0 +62 78 371 -10 0 3614 90 234 0 +63 301 53 20 0 3621 90 0 846 +64 382 197 20 0 3682 90 0 389 +65 491 160 20 0 3567 90 0 171 +66 453 164 10 0 3604 90 0 954 +67 277 371 -50 595 755 90 394 0 +68 272 212 -20 0 3781 90 922 0 +69 386 218 -10 1901 2061 90 136 0 +70 353 32 10 0 3583 90 0 477 +71 59 389 20 0 3588 90 0 644 +72 414 62 10 0 3575 90 0 785 +73 278 357 -20 0 3714 90 385 0 +74 101 179 20 2412 2572 90 0 183 +75 396 234 20 0 3678 90 0 976 +76 74 390 20 797 957 90 0 251 +77 332 55 30 211 371 90 0 490 +78 272 365 30 0 3707 90 0 347 +79 418 355 -30 2037 2197 90 132 0 +80 216 380 20 0 3690 90 0 23 +81 440 173 -20 3282 3442 90 396 0 +82 89 358 -20 0 3631 90 418 0 +83 66 491 -20 0 3521 90 664 0 +84 317 234 10 2479 2639 90 0 902 +85 439 297 -20 0 3630 90 624 0 +86 394 367 30 380 540 90 0 148 +87 58 364 10 0 3601 90 0 609 +88 290 75 20 191 351 90 0 932 +89 346 344 -10 0 3690 90 96 0 +90 131 269 10 0 3704 90 0 97 +91 236 96 20 1604 1764 90 0 971 +92 29 282 -10 1410 1570 90 950 0 +93 418 385 -30 0 3609 90 523 0 +94 148 225 40 613 773 90 0 329 +95 166 464 10 0 3595 90 0 278 +96 266 373 10 0 3700 90 0 89 +97 201 273 -10 0 3770 90 90 0 +98 255 245 10 0 3817 90 0 224 +99 220 379 -20 0 3692 90 282 0 +100 85 317 -20 0 3646 90 440 0 +101 125 264 20 0 3699 90 0 880 +102 131 253 -20 0 3705 90 476 0 +103 184 188 10 1260 1420 90 0 35 +104 128 209 -10 0 3696 90 480 0 +105 373 364 -10 0 3657 90 436 0 +106 389 342 -20 1145 1305 90 670 0 +107 420 20 30 575 735 90 0 899 +108 132 218 10 136 296 90 0 431 +109 32 256 -20 0 3606 90 199 0 +110 406 339 20 295 455 90 0 566 +111 191 397 -30 0 3666 90 900 0 +112 72 341 -10 0 3625 90 502 0 +113 35 308 -10 3072 3232 90 802 0 +114 169 360 -10 2172 2332 90 141 0 +115 222 381 20 0 3691 90 0 577 +116 96 292 10 0 3665 90 0 552 +117 311 496 -20 0 3571 90 419 0 +118 220 384 -10 0 3687 90 184 0 +119 259 243 -40 0 3813 90 2 0 +120 349 476 10 0 3578 90 0 43 +121 63 159 20 0 3617 0 0 1006 +122 112 243 20 0 3686 90 0 930 +123 448 302 20 2327 2487 90 0 497 +124 343 27 -30 0 3583 90 165 0 +125 67 485 40 2166 2326 90 0 911 +126 220 359 30 1424 1584 90 0 428 +127 147 435 -20 2111 2271 90 197 0 +128 317 235 20 0 3756 90 0 581 +129 43 355 -10 0 3592 90 33 0 +130 368 340 -10 461 621 90 509 0 +131 450 72 10 0 3557 90 0 516 +132 400 364 30 0 3636 90 0 79 +133 355 480 20 0 3572 90 0 353 +134 450 153 20 533 693 90 0 410 +135 126 188 -30 0 3686 90 955 0 +136 380 223 10 0 3692 90 0 69 +137 71 453 -20 685 845 90 822 0 +138 54 287 20 209 369 90 0 897 +139 420 168 10 3393 3553 0 0 1003 +140 219 89 20 0 3661 90 0 635 +141 189 327 10 0 3726 90 0 114 +142 191 309 10 0 3741 0 0 1017 +143 301 67 -20 0 3635 90 617 0 +144 484 161 -10 0 3574 90 908 0 +145 77 483 -20 0 3534 90 232 0 +146 241 375 -20 0 3699 90 722 0 +147 428 64 -10 0 3567 90 757 0 +148 403 361 -30 0 3635 90 86 0 +149 257 336 -30 0 3738 90 519 0 +150 131 241 10 3378 3538 90 0 474 +151 63 166 30 0 3619 90 0 696 +152 71 368 -10 0 3610 90 647 0 +153 272 228 10 2033 2193 90 0 748 +154 25 290 30 0 3596 90 0 156 +155 441 157 10 0 3612 90 0 34 +156 13 266 -30 0 3587 90 154 0 +157 251 376 -10 0 3698 90 182 0 +158 61 170 30 0 3619 90 0 166 +159 386 357 20 1433 1593 90 0 260 +160 95 475 -30 0 3551 90 235 0 +161 90 298 10 2104 2264 90 0 399 +162 71 388 20 0 3598 90 0 167 +163 383 246 20 0 3691 90 0 667 +164 352 38 10 0 3589 90 0 211 +165 395 1 30 0 3536 90 0 124 +166 120 210 -30 0 3688 90 158 0 +167 46 383 -20 0 3581 90 162 0 +168 202 198 30 0 3754 90 0 882 +169 358 365 -10 0 3667 90 939 0 +170 191 352 -10 0 3707 90 574 0 +171 470 152 -20 0 3584 90 65 0 +172 228 124 20 141 301 90 0 720 +173 402 230 10 0 3671 90 0 934 +174 323 229 -10 0 3749 90 686 0 +175 331 486 10 0 3575 90 0 887 +176 112 208 -30 0 3680 90 7 0 +177 172 435 30 0 3624 90 0 222 +178 326 498 10 0 3565 90 0 242 +179 460 183 -20 0 3604 90 832 0 +180 95 279 -10 0 3667 90 25 0 +181 76 456 -20 0 3555 90 540 0 +182 242 350 10 0 3724 90 0 157 +183 152 196 -20 0 3713 90 74 0 +184 268 351 10 0 3722 90 0 118 +185 360 356 10 0 3672 90 0 775 +186 39 296 -20 1983 2143 90 790 0 +187 262 368 30 1162 1322 90 0 682 +188 204 90 -20 1094 1254 90 420 0 +189 149 273 20 212 372 90 0 272 +190 446 86 10 0 3569 90 0 988 +191 139 269 -20 0 3712 90 571 0 +192 483 170 30 0 3578 90 0 485 +193 39 278 -10 1601 1761 90 304 0 +194 201 307 -20 0 3749 90 401 0 +195 395 378 -40 0 3631 90 825 0 +196 139 262 30 0 3713 90 0 859 +197 176 447 20 311 471 90 0 127 +198 67 380 -30 0 3600 90 398 0 +199 35 358 20 0 3584 90 0 109 +200 294 455 -30 0 3615 90 929 0 +201 351 33 20 0 3585 90 0 427 +202 216 316 -20 0 3750 90 983 0 +203 261 96 40 0 3670 90 0 415 +204 238 57 30 0 3631 90 0 547 +205 383 18 20 1643 1803 90 0 496 +206 152 460 -10 0 3593 90 776 0 +207 94 479 20 0 3547 90 0 865 +208 337 453 30 0 3604 90 0 350 +209 135 460 -20 0 3585 90 673 0 +210 260 104 20 157 317 90 0 838 +211 337 63 -10 0 3618 90 164 0 +212 32 247 -10 0 3606 90 632 0 +213 394 205 -20 0 3674 90 662 0 +214 95 294 -10 0 3663 90 795 0 +215 253 241 -20 2835 2995 90 837 0 +216 223 90 -10 0 3662 90 555 0 +217 64 473 10 0 3534 90 0 956 +218 275 431 -30 0 3642 90 305 0 +219 261 84 10 0 3658 90 0 843 +220 176 296 -30 1230 1390 90 836 0 +221 361 349 -20 3016 3176 90 390 0 +222 168 433 -30 0 3624 90 177 0 +223 394 10 40 0 3545 90 0 381 +224 308 60 -10 776 936 90 98 0 +225 94 456 20 0 3566 0 0 1001 +226 73 484 -30 0 3531 90 703 0 +227 277 434 -20 0 3639 90 744 0 +228 119 232 -20 1939 2099 90 629 0 +229 78 375 10 0 3612 90 0 255 +230 366 346 -20 0 3674 90 689 0 +231 125 181 -20 0 3682 90 337 0 +232 69 493 20 0 3521 90 0 145 +233 432 80 40 908 1068 90 0 989 +234 72 391 10 0 3597 90 0 62 +235 85 486 30 0 3537 90 0 160 +236 204 371 -20 0 3695 90 680 0 +237 173 328 -30 0 3715 90 905 0 +238 280 423 10 0 3649 90 0 301 +239 200 327 -30 3150 3310 90 314 0 +240 241 98 -20 0 3672 90 773 0 +241 96 356 10 186 346 90 0 464 +242 332 491 -10 1211 1371 90 178 0 +243 81 283 10 1624 1784 90 0 828 +244 373 22 10 0 3565 90 0 451 +245 255 371 -10 0 3703 90 31 0 +246 358 359 -10 0 3671 90 303 0 +247 216 93 -20 0 3664 90 539 0 +248 73 360 20 0 3616 90 0 257 +249 305 212 -10 0 3758 90 796 0 +250 151 462 10 0 3591 90 0 857 +251 47 389 -20 0 3578 90 76 0 +252 155 198 -20 0 3716 90 833 0 +253 152 457 10 0 3595 90 0 941 +254 329 48 10 0 3608 90 0 700 +255 88 394 -10 0 3608 90 229 0 +256 153 295 -20 3382 3542 90 470 0 +257 81 373 -20 0 3615 90 248 0 +258 163 453 10 0 3604 90 0 951 +259 378 25 -20 0 3566 90 331 0 +260 401 385 -20 0 3622 90 159 0 +261 184 340 10 0 3713 90 0 585 +262 402 362 -30 0 3636 90 835 0 +263 70 482 20 2351 2511 90 0 45 +264 357 445 -20 0 3602 90 361 0 +265 212 71 -10 0 3642 90 999 0 +266 231 81 -30 0 3654 90 268 0 +267 379 208 10 835 995 90 0 756 +268 236 95 30 0 3669 90 0 266 +269 386 344 -10 0 3659 90 356 0 +270 189 200 10 1989 2149 90 0 968 +271 296 253 10 0 3778 90 0 46 +272 73 303 -20 0 3640 90 189 0 +273 30 162 -30 0 3588 90 493 0 +274 230 95 -20 1899 2059 90 814 0 +275 57 131 -10 0 3598 90 708 0 +276 379 245 10 0 3695 90 0 616 +277 107 221 -10 0 3679 90 850 0 +278 154 458 -10 0 3595 90 95 0 +279 290 417 10 0 3653 90 0 614 +280 272 243 30 0 3801 90 0 633 +281 94 130 10 0 3628 90 0 421 +282 222 356 20 0 3715 90 0 99 +283 243 108 -30 0 3682 90 437 0 +284 224 93 -20 2191 2351 90 601 0 +285 155 242 -10 0 3729 90 842 0 +286 440 302 20 0 3628 90 0 492 +287 221 102 20 0 3674 90 0 803 +288 52 484 10 0 3518 90 0 799 +289 111 244 -10 0 3685 90 903 0 +290 132 273 10 0 3704 90 0 862 +291 228 186 20 0 3757 90 0 684 +292 221 374 30 0 3697 90 0 794 +293 406 286 -10 0 3664 90 942 0 +294 390 9 30 1263 1423 90 0 607 +295 335 52 20 0 3609 90 0 323 +296 189 368 -20 0 3692 90 940 0 +297 397 40 -30 0 3568 90 518 0 +298 408 305 10 0 3657 90 0 966 +299 156 434 10 0 3618 90 0 781 +300 180 335 20 0 3714 90 0 816 +301 327 483 -10 2098 2258 90 238 0 +302 363 62 20 0 3605 90 0 36 +303 375 342 10 939 1099 90 0 246 +304 16 280 10 0 3589 90 0 193 +305 277 431 30 0 3641 90 0 218 +306 110 241 20 0 3684 90 0 315 +307 48 385 20 0 3582 90 0 841 +308 152 260 10 0 3726 90 0 923 +309 255 120 -30 0 3694 90 771 0 +310 214 382 -20 0 3688 90 962 0 +311 414 384 -10 0 3613 90 679 0 +312 232 378 -20 0 3695 90 764 0 +313 80 141 -10 494 654 90 550 0 +314 188 330 30 0 3723 90 0 239 +315 157 192 -20 3210 3370 90 306 0 +316 101 237 -20 1831 1991 90 666 0 +317 74 360 40 2856 3016 90 0 698 +318 267 260 20 0 3805 90 0 322 +319 378 46 -20 0 3584 90 598 0 +320 420 311 30 0 3644 90 0 993 +321 384 217 -30 1809 1969 90 717 0 +322 418 300 -20 611 771 90 318 0 +323 356 77 -20 2249 2409 90 295 0 +324 253 244 -30 0 3818 90 830 0 +325 323 258 10 0 3751 0 0 1009 +326 293 454 -30 0 3616 90 998 0 +327 231 97 20 0 3670 90 0 524 +328 316 234 10 0 3757 90 0 675 +329 207 196 -40 2565 2725 90 94 0 +330 321 228 -10 0 3750 90 336 0 +331 382 17 20 1734 1894 90 0 259 +332 206 326 -20 0 3737 90 888 0 +333 198 284 10 0 3762 0 0 1005 +334 137 186 -20 2912 3072 90 424 0 +335 229 396 30 2882 3042 90 0 15 +336 268 235 10 1842 2002 90 0 330 +337 95 243 20 0 3669 90 0 231 +338 297 430 20 378 538 90 0 981 +339 393 368 10 0 3639 90 0 879 +340 66 391 -40 0 3593 90 608 0 +341 189 339 -20 2863 3023 90 668 0 +342 280 351 -20 0 3719 90 456 0 +343 241 77 -20 1225 1385 90 575 0 +344 134 265 -10 2666 2826 90 548 0 +345 420 95 30 345 505 90 0 885 +346 111 279 30 141 301 90 0 868 +347 367 358 -30 0 3665 90 78 0 +348 239 373 10 0 3701 90 0 731 +349 384 235 -20 0 3690 90 646 0 +350 284 360 -30 0 3709 90 208 0 +351 325 75 -10 0 3634 90 1000 0 +352 279 369 10 0 3702 90 0 536 +353 340 449 -20 0 3606 90 133 0 +354 275 448 -30 0 3625 90 826 0 +355 447 88 -30 2963 3123 90 13 0 +356 314 279 10 270 430 90 0 269 +357 434 377 10 0 3601 90 0 507 +358 67 377 -20 0 3602 90 24 0 +359 370 353 -10 746 906 90 26 0 +360 57 367 20 0 3599 90 0 947 +361 332 486 20 1912 2072 90 0 264 +362 386 361 -30 1527 1687 90 512 0 +363 55 282 40 305 465 90 0 821 +364 317 467 -20 0 3597 90 730 0 +365 335 54 -20 1853 2013 90 909 0 +366 348 466 -30 0 3587 90 434 0 +367 132 314 -10 0 3690 90 873 0 +368 328 216 -30 0 3739 90 384 0 +369 416 48 -20 0 3563 90 726 0 +370 370 55 10 0 3596 90 0 759 +371 149 434 30 0 3615 90 0 628 +372 466 169 30 0 3594 90 0 986 +373 141 267 -10 0 3714 90 14 0 +374 258 350 -10 1822 1982 90 403 0 +375 428 312 10 0 3636 90 0 469 +376 211 188 10 0 3751 90 0 970 +377 50 343 -20 0 3604 90 784 0 +378 107 311 -30 2813 2973 90 806 0 +379 178 441 20 0 3620 90 0 904 +380 232 85 -40 0 3659 90 503 0 +381 391 23 -40 0 3557 90 223 0 +382 137 227 20 0 3709 90 0 987 +383 161 203 20 0 3724 90 0 505 +384 363 212 30 3274 3434 90 0 368 +385 384 346 20 0 3660 90 0 73 +386 166 434 40 2965 3125 90 0 596 +387 274 248 20 0 3800 90 0 724 +388 156 421 -20 0 3629 90 765 0 +389 346 211 -20 0 3721 90 64 0 +390 265 358 20 1352 1512 90 0 221 +391 96 407 20 0 3605 90 0 877 +392 443 70 20 2464 2624 90 0 530 +393 125 212 -10 0 3694 90 933 0 +394 361 337 50 363 523 90 0 67 +395 322 78 -10 2464 2624 90 898 0 +396 481 156 20 0 3575 90 0 81 +397 188 293 30 0 3749 90 0 755 +398 76 408 30 0 3589 90 0 198 +399 130 304 -10 0 3693 90 161 0 +400 378 363 30 0 3654 90 0 958 +401 185 301 20 0 3742 90 0 194 +402 385 235 -20 2581 2741 90 967 0 +403 261 350 10 0 3724 90 0 374 +404 389 33 -10 0 3567 90 706 0 +405 151 214 -20 0 3719 90 18 0 +406 265 94 10 0 3668 90 0 478 +407 65 164 20 0 3620 90 0 627 +408 293 81 -20 0 3650 90 531 0 +409 363 55 10 0 3599 90 0 576 +410 465 176 -20 0 3597 90 134 0 +411 428 298 30 1654 1814 90 0 514 +412 75 379 30 0 3607 90 0 763 +413 404 378 10 0 3624 90 0 805 +414 203 203 10 0 3758 90 0 992 +415 259 88 -40 0 3662 90 203 0 +416 362 17 10 0 3566 90 0 864 +417 320 258 20 564 724 90 0 591 +418 59 358 20 0 3605 90 0 82 +419 316 453 20 224 384 90 0 117 +420 225 192 20 0 3761 90 0 188 +421 140 206 -10 0 3706 90 281 0 +422 83 151 10 0 3630 90 0 553 +423 366 196 -10 0 3697 90 543 0 +424 108 245 20 0 3682 90 0 334 +425 129 267 -10 2480 2640 90 944 0 +426 57 379 20 0 3592 90 0 786 +427 329 56 -20 1457 1617 90 201 0 +428 213 363 -30 0 3706 90 126 0 +429 76 391 30 0 3601 90 0 719 +430 330 259 -20 0 3744 90 603 0 +431 136 217 -10 0 3706 90 108 0 +432 165 333 -40 0 3706 90 734 0 +433 160 431 -20 0 3622 90 856 0 +434 338 489 30 0 3570 90 0 366 +435 335 64 -10 0 3620 90 952 0 +436 412 361 10 0 3628 90 0 105 +437 259 90 30 0 3664 90 0 283 +438 265 77 20 0 3651 90 0 578 +439 460 173 -20 0 3601 90 725 0 +440 83 301 20 0 3650 90 0 100 +441 201 331 -20 0 3730 90 780 0 +442 118 214 20 0 3688 90 0 27 +443 395 30 -20 2796 2956 90 912 0 +444 125 444 10 1997 2157 90 0 711 +445 283 248 30 0 3791 90 0 733 +446 391 334 20 0 3660 90 0 594 +447 212 215 20 3160 3320 90 0 637 +448 276 428 20 1048 1208 90 0 979 +449 96 152 20 0 3642 90 0 484 +450 425 85 10 0 3584 0 0 1008 +451 336 7 -10 0 3567 90 244 0 +452 196 219 -10 3054 3214 90 8 0 +453 210 94 -30 0 3663 90 545 0 +454 310 81 -20 0 3645 90 849 0 +455 341 37 20 434 594 90 0 876 +456 344 478 20 2296 2456 90 0 342 +457 406 37 40 0 3560 90 0 510 +458 69 346 -10 0 3620 90 508 0 +459 80 376 40 407 567 90 0 51 +460 314 449 30 0 3615 90 0 874 +461 209 201 30 0 3761 90 0 914 +462 88 379 -30 0 3617 90 937 0 +463 352 500 -20 1505 1665 90 735 0 +464 65 357 -10 0 3611 90 241 0 +465 345 15 20 0 3571 90 0 709 +466 125 245 20 3002 3162 90 0 817 +467 52 369 30 0 3593 90 0 695 +468 449 140 -10 730 890 90 495 0 +469 430 310 -10 0 3635 90 375 0 +470 109 325 20 0 3665 90 0 256 +471 446 139 20 0 3599 90 0 772 +472 229 214 -20 0 3783 90 610 0 +473 197 301 10 0 3751 90 0 613 +474 146 245 -10 0 3720 90 150 0 +475 401 368 -10 0 3633 90 697 0 +476 116 259 20 0 3690 90 0 102 +477 374 55 -10 2792 2952 90 70 0 +478 249 251 -10 3036 3196 90 406 0 +479 325 490 10 0 3573 90 0 840 +480 59 159 10 0 3613 90 0 104 +481 186 177 20 0 3727 90 0 525 +482 319 229 -10 0 3752 90 560 0 +483 26 269 30 0 3600 90 0 943 +484 53 139 -20 0 3598 90 449 0 +485 471 154 -30 0 3584 90 192 0 +486 301 247 10 0 3773 90 0 813 +487 388 220 -10 0 3683 90 723 0 +488 235 81 -20 0 3655 90 936 0 +489 347 479 -10 0 3576 90 549 0 +490 367 59 -30 0 3601 90 77 0 +491 261 370 30 1069 1229 90 0 907 +492 441 287 -20 0 3630 90 286 0 +493 44 153 30 0 3597 90 0 273 +494 263 351 -20 1545 1705 90 652 0 +495 444 157 10 0 3609 90 0 468 +496 374 17 -20 0 3561 90 205 0 +497 448 295 -20 0 3621 90 123 0 +498 446 297 -30 0 3623 90 520 0 +499 347 40 30 0 3593 90 0 44 +500 318 493 10 825 985 90 0 672 +501 399 352 10 1260 1420 90 0 889 +502 51 364 10 0 3595 90 0 112 +503 250 217 40 0 3791 90 0 380 +504 107 225 30 0 3679 0 0 1016 +505 173 208 -20 0 3737 90 383 0 +506 204 189 -20 0 3748 90 965 0 +507 399 379 -10 0 3627 90 357 0 +508 79 346 10 0 3628 90 0 458 +509 360 338 10 272 432 90 0 130 +510 390 17 -40 0 3553 90 457 0 +511 207 337 -10 0 3727 90 964 0 +512 409 361 30 0 3631 90 0 362 +513 206 377 -10 0 3690 90 559 0 +514 429 294 -30 0 3640 90 411 0 +515 375 31 -10 2185 2345 90 693 0 +516 426 80 -10 0 3580 90 131 0 +517 74 374 20 0 3609 90 0 750 +518 408 20 30 0 3545 90 0 297 +519 239 369 30 1811 1971 90 0 149 +520 420 308 30 0 3645 90 0 498 +521 254 357 -10 0 3717 90 584 0 +522 53 297 30 0 3622 90 0 568 +523 434 382 30 0 3598 90 0 93 +524 204 171 -20 0 3733 90 327 0 +525 173 169 -20 0 3713 90 481 0 +526 190 332 20 0 3723 90 0 973 +527 274 231 -20 0 3794 90 678 0 +528 207 194 10 0 3754 90 0 600 +529 315 232 -20 0 3757 90 778 0 +530 425 87 -20 0 3585 90 392 0 +531 312 64 20 0 3628 90 0 408 +532 129 244 -30 2908 3068 90 963 0 +533 278 230 -10 0 3790 90 921 0 +534 351 75 -30 0 3622 90 861 0 +535 185 293 -10 0 3747 90 812 0 +536 364 364 -10 0 3663 90 352 0 +537 432 369 -10 0 3607 90 541 0 +538 128 249 -20 0 3702 90 17 0 +539 221 179 20 369 529 90 0 247 +540 194 296 20 0 3752 90 0 181 +541 413 350 10 0 3633 90 0 537 +542 214 372 10 0 3697 90 0 47 +543 379 229 10 1045 1205 90 0 423 +544 91 298 -20 0 3658 90 860 0 +545 226 120 30 0 3692 90 0 453 +546 344 46 30 0 3600 90 0 704 +547 238 84 -30 1634 1794 90 204 0 +548 138 276 10 1915 2075 90 0 344 +549 346 487 10 0 3569 90 0 489 +550 95 160 10 0 3645 90 0 313 +551 103 266 -30 0 3677 90 656 0 +552 98 286 -10 0 3668 90 116 0 +553 77 172 -10 0 3635 90 422 0 +554 147 199 30 308 468 90 0 597 +555 210 98 10 0 3667 90 0 216 +556 428 292 -30 0 3642 90 931 0 +557 121 236 10 0 3695 90 0 994 +558 336 479 -30 0 3580 90 991 0 +559 203 369 10 0 3697 90 0 513 +560 296 232 10 0 3775 90 0 482 +561 87 369 10 201 361 90 0 758 +562 247 88 -10 0 3662 90 58 0 +563 104 246 10 0 3678 90 0 21 +564 67 302 -10 0 3634 90 50 0 +565 114 296 40 0 3681 90 0 839 +566 394 356 -20 0 3646 90 110 0 +567 192 306 -10 0 3744 90 948 0 +568 16 285 -30 0 3588 90 522 0 +569 419 310 10 0 3645 90 0 852 +570 389 221 10 0 3683 90 0 745 +571 129 264 20 0 3703 90 0 191 +572 172 483 -20 0 3579 90 38 0 +573 325 251 20 0 3749 90 0 901 +574 151 436 10 0 3614 90 0 170 +575 263 91 20 0 3665 90 0 343 +576 401 15 -10 0 3545 90 409 0 +577 253 382 -20 3090 3250 90 115 0 +578 247 89 -20 0 3663 90 438 0 +579 283 229 30 0 3785 90 0 19 +580 366 341 -30 0 3677 90 589 0 +581 392 213 -20 2092 2252 90 128 0 +582 167 304 -20 207 367 90 665 0 +583 477 154 10 1506 1666 90 0 48 +584 234 383 10 0 3691 90 0 521 +585 199 327 -10 0 3732 90 261 0 +586 140 220 30 0 3710 90 0 848 +587 144 266 30 0 3717 90 0 866 +588 432 105 10 0 3592 90 0 5 +589 368 325 30 139 299 90 0 580 +590 202 386 20 0 3680 90 0 797 +591 325 246 -20 1520 1680 90 417 0 +592 430 86 20 0 3581 90 0 853 +593 200 195 20 0 3750 90 0 728 +594 440 295 -20 0 3629 90 446 0 +595 77 287 10 0 3648 90 0 925 +596 187 362 -40 0 3696 90 386 0 +597 131 207 -30 0 3698 90 554 0 +598 405 5 20 786 946 90 0 319 +599 125 226 -30 1389 1549 90 777 0 +600 254 335 -10 3013 3173 90 528 0 +601 212 168 20 860 1020 90 0 284 +602 281 279 -30 0 3782 90 827 0 +603 326 241 20 0 3748 90 0 430 +604 152 241 -30 0 3726 90 638 0 +605 71 139 30 0 3614 90 0 631 +606 46 277 -10 0 3619 90 622 0 +607 393 13 -30 0 3548 90 294 0 +608 87 454 40 882 1042 90 0 340 +609 86 359 -10 0 3628 90 87 0 +610 220 192 20 0 3759 90 0 472 +611 426 279 -20 3112 3272 90 819 0 +612 131 267 -20 0 3704 90 742 0 +613 200 297 -10 0 3756 90 473 0 +614 299 442 -10 0 3626 90 279 0 +615 265 218 -20 2429 2589 90 752 0 +616 398 231 -10 0 3675 90 276 0 +617 312 74 20 0 3638 90 0 143 +618 99 307 -40 0 3663 90 642 0 +619 22 283 -20 0 3594 90 938 0 +620 67 160 -20 2690 2850 90 985 0 +621 390 42 -30 2588 2748 90 918 0 +622 44 279 10 0 3616 90 0 606 +623 200 182 -10 0 3740 90 761 0 +624 458 303 20 0 3610 90 0 85 +625 298 438 10 567 727 90 0 630 +626 62 301 -20 0 3630 90 716 0 +627 112 251 -20 0 3686 90 407 0 +628 184 354 -30 0 3701 90 371 0 +629 140 180 20 0 3694 90 0 228 +630 269 428 -10 0 3645 90 625 0 +631 123 206 -30 0 3690 90 605 0 +632 36 284 10 0 3608 90 0 212 +633 272 233 -30 0 3797 90 280 0 +634 320 231 20 0 3752 90 0 729 +635 211 180 -20 0 3744 90 140 0 +636 114 169 20 0 3666 90 0 893 +637 245 239 -20 0 3812 90 447 0 +638 117 204 30 0 3684 90 0 604 +639 316 254 20 0 3758 90 0 798 +640 169 443 30 500 660 90 0 809 +641 212 96 10 0 3666 90 0 926 +642 119 285 40 0 3689 90 0 618 +643 71 163 -20 0 3625 90 683 0 +644 78 361 -20 0 3620 90 71 0 +645 354 219 10 0 3716 90 0 654 +646 389 233 20 0 3684 90 0 349 +647 90 391 10 541 701 90 0 152 +648 209 307 10 1811 1971 90 0 751 +649 363 351 -20 2923 3083 90 20 0 +650 405 47 -10 0 3569 90 935 0 +651 278 329 -30 0 3741 90 820 0 +652 261 371 20 0 3703 90 0 494 +653 302 470 20 2227 2387 90 0 692 +654 373 205 -10 0 3694 90 645 0 +655 381 20 20 1828 1988 0 0 1013 +656 90 277 30 662 822 90 0 551 +657 46 341 10 0 3601 90 0 737 +658 50 138 -20 0 3595 90 29 0 +659 61 437 20 0 3559 90 0 760 +660 331 252 10 0 3743 90 0 793 +661 440 81 20 0 3570 90 0 953 +662 384 206 20 739 899 90 0 213 +663 232 87 -20 0 3661 90 924 0 +664 59 471 20 0 3532 90 0 83 +665 174 304 20 0 3731 90 0 582 +666 106 248 20 0 3680 90 0 316 +667 410 287 -20 0 3660 90 163 0 +668 206 313 20 0 3748 90 0 341 +669 412 367 20 960 1120 90 0 800 +670 412 300 20 515 675 90 0 106 +671 206 295 -20 2809 2969 90 959 0 +672 329 459 -10 0 3601 90 500 0 +673 177 436 20 0 3625 90 0 209 +674 266 264 -10 0 3803 90 916 0 +675 308 235 -10 3135 3295 90 328 0 +676 260 330 40 3203 3363 90 0 884 +677 49 136 -30 0 3593 90 721 0 +678 356 28 20 0 3578 90 0 527 +679 428 384 10 0 3602 90 0 311 +680 220 362 20 0 3709 90 0 236 +681 437 61 -20 0 3559 90 32 0 +682 365 360 -30 0 3665 90 187 0 +683 107 168 20 0 3660 90 0 643 +684 220 177 -20 0 3746 90 291 0 +685 347 21 20 1386 1546 90 0 894 +686 293 245 10 0 3781 90 0 174 +687 267 436 30 0 3638 90 0 845 +688 216 96 -30 0 3667 90 831 0 +689 383 351 20 167 327 90 0 230 +690 289 240 -30 0 3784 90 56 0 +691 129 185 -10 2814 2974 90 875 0 +692 291 450 -20 2705 2865 90 653 0 +693 387 21 10 0 3558 90 0 515 +694 116 255 20 0 3690 90 0 60 +695 50 368 -30 0 3592 90 467 0 +696 121 249 -30 0 3695 90 151 0 +697 404 346 10 0 3643 90 0 475 +698 77 360 -40 0 3619 90 317 0 +699 447 102 10 0 3578 90 0 774 +700 366 16 -10 0 3563 90 254 0 +701 348 16 -30 0 3571 90 863 0 +702 353 346 -10 0 3684 90 960 0 +703 54 485 30 0 3518 90 0 226 +704 319 77 -30 0 3638 90 546 0 +705 83 282 -10 0 3654 90 55 0 +706 384 24 10 2601 2761 90 0 404 +707 52 469 -30 0 3529 90 892 0 +708 199 200 10 0 3753 90 0 275 +709 273 234 -20 0 3796 90 465 0 +710 16 281 -20 0 3588 90 39 0 +711 151 442 -10 0 3608 90 444 0 +712 223 114 -20 332 492 90 12 0 +713 191 308 20 0 3742 90 0 804 +714 448 297 -10 0 3621 90 4 0 +715 386 28 20 2507 2667 0 0 1002 +716 106 295 20 0 3674 90 0 626 +717 387 224 30 0 3685 90 0 321 +718 96 377 10 0 3625 0 0 1010 +719 86 361 -30 3347 3507 90 429 0 +720 211 107 -20 531 691 90 172 0 +721 43 125 30 1603 1763 90 0 677 +722 369 351 20 0 3668 90 0 146 +723 388 228 10 0 3685 90 0 487 +724 325 228 -20 0 3746 90 387 0 +725 490 159 20 1897 2057 90 0 439 +726 420 78 20 0 3583 90 0 369 +727 396 4 -20 0 3538 90 749 0 +728 222 317 -20 0 3752 90 593 0 +729 389 198 -20 0 3676 90 634 0 +730 322 454 20 0 3608 90 0 364 +731 241 391 -10 2985 3145 90 348 0 +732 256 117 20 0 3691 90 0 869 +733 298 255 -30 0 3776 90 445 0 +734 74 363 40 0 3615 90 0 432 +735 345 496 20 0 3561 90 0 463 +736 167 169 20 1654 1814 90 0 40 +737 23 306 -10 0 3591 90 657 0 +738 317 62 20 0 3625 90 0 896 +739 319 257 -10 0 3755 90 767 0 +740 129 255 10 0 3703 90 0 949 +741 59 377 -20 2088 2248 90 57 0 +742 138 272 20 1821 1981 90 0 612 +743 317 251 -20 0 3757 90 823 0 +744 279 436 20 0 3636 90 0 227 +745 371 207 -10 0 3696 90 570 0 +746 263 372 10 886 1046 90 0 53 +747 50 347 -20 0 3602 90 996 0 +748 275 236 -10 0 3796 90 153 0 +749 334 47 20 0 3605 90 0 727 +750 50 383 -20 0 3584 90 517 0 +751 170 338 -10 2284 2444 90 648 0 +752 245 109 20 0 3683 90 0 615 +753 69 475 -30 1189 1349 90 10 0 +754 54 372 -10 0 3594 90 915 0 +755 198 334 -30 0 3726 90 397 0 +756 380 228 -10 0 3693 90 267 0 +757 425 118 10 219 379 90 0 147 +758 80 398 -10 0 3599 90 561 0 +759 366 57 -10 0 3599 90 370 0 +760 67 463 -20 0 3544 90 659 0 +761 226 86 10 0 3659 90 0 623 +762 59 480 10 1583 1743 90 0 829 +763 40 378 -30 0 3579 90 412 0 +764 250 367 20 2113 2273 90 0 312 +765 157 436 20 0 3617 90 0 388 +766 463 161 -30 0 3594 90 49 0 +767 266 250 10 0 3808 90 0 739 +768 51 162 20 0 3607 90 0 787 +769 194 353 20 0 3707 0 0 1011 +770 383 41 -20 2685 2845 90 11 0 +771 247 82 30 0 3656 90 0 309 +772 457 142 -20 0 3591 90 471 0 +773 244 94 20 1795 1955 90 0 240 +774 441 63 -10 0 3557 90 699 0 +775 244 371 -10 0 3703 90 185 0 +776 174 444 10 0 3616 90 0 206 +777 94 247 30 853 1013 90 0 599 +778 320 225 20 0 3750 90 0 529 +779 316 80 30 0 3642 0 0 1007 +780 155 447 20 2672 2832 90 0 441 +781 211 308 -10 0 3755 90 299 0 +782 297 442 20 0 3627 90 0 851 +783 200 342 -10 0 3720 90 913 0 +784 44 325 20 0 3605 90 0 377 +785 438 60 -10 0 3557 90 72 0 +786 80 374 -20 0 3614 90 426 0 +787 59 163 -20 0 3615 90 768 0 +788 236 92 -30 2210 2370 90 1 0 +789 414 66 -20 1592 1752 90 957 0 +790 34 279 20 0 3607 90 0 186 +791 475 156 -30 0 3581 90 824 0 +792 404 310 20 0 3659 90 0 870 +793 367 239 -10 0 3707 90 660 0 +794 210 359 -30 1568 1728 90 292 0 +795 133 278 10 0 3704 90 0 214 +796 446 169 10 0 3612 90 0 249 +797 188 356 -20 0 3702 90 590 0 +798 312 252 -20 0 3762 90 639 0 +799 69 485 -10 0 3528 90 288 0 +800 413 353 -20 0 3632 90 669 0 +801 54 446 20 0 3547 90 0 972 +802 56 357 10 0 3603 90 0 113 +803 230 105 -20 0 3678 90 287 0 +804 196 302 -20 0 3750 90 713 0 +805 391 373 -10 0 3637 90 413 0 +806 101 295 30 0 3669 90 0 378 +807 234 350 10 0 3723 90 0 878 +808 215 108 20 2760 2920 0 0 1015 +809 142 457 -30 0 3591 90 640 0 +810 283 425 20 0 3646 90 0 834 +811 77 397 10 919 1079 90 0 895 +812 105 317 10 0 3665 90 0 535 +813 382 213 -10 1715 1875 90 486 0 +814 213 76 20 0 3647 90 0 274 +815 417 56 -10 0 3569 90 883 0 +816 183 340 -20 0 3712 90 300 0 +817 123 242 -20 3190 3350 90 466 0 +818 475 136 20 0 3572 90 0 30 +819 377 246 20 0 3697 90 0 611 +820 310 484 30 0 3583 90 0 651 +821 47 280 -40 403 563 90 363 0 +822 57 456 20 0 3542 90 0 137 +823 313 266 20 373 533 90 0 743 +824 475 145 30 0 3576 90 0 791 +825 400 376 40 0 3629 90 0 195 +826 290 416 30 0 3654 90 0 354 +827 277 369 30 0 3702 90 0 602 +828 91 303 -10 0 3657 90 243 0 +829 194 301 -10 0 3749 90 762 0 +830 254 238 30 0 3812 90 0 324 +831 215 91 30 0 3662 90 0 688 +832 500 162 20 2088 2248 90 0 179 +833 56 287 20 0 3627 90 0 252 +834 289 452 -20 0 3619 90 810 0 +835 378 326 30 160 320 90 0 262 +836 197 350 30 1186 1346 90 0 220 +837 243 88 20 0 3662 90 0 215 +838 250 72 -20 1125 1285 90 210 0 +839 101 290 -40 0 3670 90 565 0 +840 351 480 -10 0 3573 90 479 0 +841 67 357 -20 0 3613 90 307 0 +842 128 240 10 0 3702 90 0 285 +843 253 81 -10 0 3655 90 219 0 +844 307 227 -20 0 3763 90 975 0 +845 233 441 -30 0 3633 90 687 0 +846 311 47 -20 0 3613 90 63 0 +847 292 456 -30 0 3614 90 9 0 +848 183 187 -30 0 3733 90 586 0 +849 392 31 20 0 3563 90 0 454 +850 103 251 10 0 3677 90 0 277 +851 300 443 -20 1996 2156 90 782 0 +852 420 295 -10 0 3649 90 569 0 +853 427 64 -20 1292 1452 90 592 0 +854 372 354 30 0 3664 90 0 61 +855 101 263 -10 0 3675 90 41 0 +856 141 454 20 0 3593 90 0 433 +857 146 461 -10 1497 1657 90 250 0 +858 298 430 30 469 629 90 0 969 +859 148 270 -30 0 3721 90 196 0 +860 76 287 20 0 3647 90 0 544 +861 308 55 30 0 3621 90 0 534 +862 143 257 -10 0 3717 90 290 0 +863 393 2 30 979 1139 90 0 701 +864 385 28 -10 0 3565 90 416 0 +865 204 291 -20 0 3763 90 207 0 +866 132 272 -30 0 3704 90 587 0 +867 206 379 -20 0 3688 90 890 0 +868 69 383 -30 0 3600 90 346 0 +869 245 96 -20 0 3670 90 732 0 +870 431 301 -20 0 3636 90 792 0 +871 448 94 -10 0 3572 90 990 0 +872 199 305 30 0 3749 90 0 919 +873 95 356 10 3447 3607 90 0 367 +874 328 498 -30 0 3565 90 460 0 +875 108 222 10 0 3680 90 0 691 +876 341 26 -20 0 3583 90 455 0 +877 63 454 -20 0 3548 90 391 0 +878 222 357 -10 0 3714 90 807 0 +879 416 364 -10 0 3623 90 339 0 +880 127 278 -20 2106 2266 90 101 0 +881 140 252 20 0 3714 90 0 945 +882 218 298 -30 0 3767 90 168 0 +883 432 87 10 0 3580 90 0 815 +884 216 300 -40 0 3764 90 676 0 +885 438 72 -30 0 3566 90 345 0 +886 184 178 10 1454 1614 0 0 1018 +887 345 468 -10 2677 2837 90 175 0 +888 150 435 20 0 3614 90 0 332 +889 395 365 -10 0 3639 90 501 0 +890 208 371 20 0 3696 90 0 867 +891 190 292 -10 0 3751 90 906 0 +892 78 479 30 1089 1249 90 0 707 +893 104 198 -20 0 3670 90 636 0 +894 346 13 -20 1686 1846 90 685 0 +895 47 388 -10 1193 1353 90 811 0 +896 315 57 -20 0 3621 90 738 0 +897 110 199 -20 0 3675 90 138 0 +898 323 60 10 0 3621 90 0 395 +899 308 82 -30 0 3647 90 107 0 +900 216 374 30 0 3696 90 0 111 +901 326 253 -20 0 3748 90 573 0 +902 308 232 -10 0 3764 90 84 0 +903 118 223 10 0 3690 90 0 289 +904 149 444 -20 0 3606 90 379 0 +905 95 395 30 0 3612 90 0 237 +906 117 319 10 0 3675 90 0 891 +907 262 352 -30 0 3722 90 491 0 +908 468 135 10 932 1092 90 0 144 +909 351 31 20 813 973 90 0 365 +910 361 15 -20 2118 2278 90 52 0 +911 195 300 -40 0 3750 90 125 0 +912 397 27 20 0 3557 90 0 443 +913 179 311 10 0 3731 90 0 783 +914 77 133 -30 0 3616 90 461 0 +915 66 397 10 0 3589 90 0 754 +916 366 352 10 0 3670 90 0 674 +917 221 87 20 0 3659 90 0 984 +918 347 23 30 0 3578 90 0 621 +919 176 358 -30 0 3694 90 872 0 +920 229 78 20 2496 2656 0 0 1014 +921 272 246 10 218 378 90 0 533 +922 293 67 20 0 3637 90 0 68 +923 140 265 -10 0 3713 90 308 0 +924 238 83 20 0 3657 90 0 663 +925 136 296 -10 0 3702 90 595 0 +926 218 98 -10 0 3669 90 641 0 +927 290 440 -10 0 3630 90 42 0 +928 29 302 -10 0 3597 90 978 0 +929 290 425 30 280 440 90 0 200 +930 124 247 -20 0 3698 90 122 0 +931 442 287 30 0 3629 90 0 556 +932 294 64 -20 0 3633 90 88 0 +933 74 165 10 0 3629 90 0 393 +934 382 245 -10 2959 3119 90 173 0 +935 405 24 10 0 3550 90 0 650 +936 211 97 20 0 3667 90 0 488 +937 88 390 30 0 3610 90 0 462 +938 37 295 20 0 3607 90 0 619 +939 359 371 10 0 3662 90 0 169 +940 186 372 20 0 3687 90 0 296 +941 116 446 -10 1898 2058 90 253 0 +942 293 249 10 0 3781 90 0 293 +943 83 228 -30 0 3656 90 483 0 +944 96 269 10 0 3669 90 0 425 +945 179 284 -20 0 3746 90 881 0 +946 368 219 -20 0 3702 90 980 0 +947 66 359 -20 3157 3317 90 360 0 +948 189 338 10 2954 3114 90 0 567 +949 163 277 -10 0 3733 90 740 0 +950 5 296 10 0 3575 90 0 92 +951 152 478 -10 0 3576 90 258 0 +952 366 34 10 2086 2246 90 0 435 +953 429 80 -20 0 3578 90 661 0 +954 464 178 -10 0 3599 90 66 0 +955 138 196 30 0 3700 90 0 135 +956 87 481 -10 0 3542 90 217 0 +957 425 99 20 0 3593 90 0 789 +958 241 362 -30 0 3712 90 400 0 +959 207 289 20 0 3766 90 0 671 +960 264 365 10 0 3709 90 0 702 +961 102 289 20 1242 1402 90 0 3 +962 233 346 20 0 3727 90 0 310 +963 78 141 30 0 3621 90 0 532 +964 196 348 10 0 3713 90 0 511 +965 216 92 20 2382 2542 90 0 506 +966 444 309 -10 2425 2585 90 298 0 +967 313 263 20 0 3760 90 0 402 +968 211 198 -10 2660 2820 90 270 0 +969 314 436 -30 2101 2261 90 858 0 +970 217 189 -10 0 3755 90 376 0 +971 197 178 -20 0 3735 90 91 0 +972 60 497 -20 0 3513 90 801 0 +973 206 312 -20 2000 2160 90 526 0 +974 197 351 -20 0 3710 90 28 0 +975 305 233 20 3041 3201 90 0 844 +976 297 250 -20 0 3777 90 75 0 +977 71 348 10 3055 3215 0 0 1004 +978 11 269 10 0 3585 90 0 928 +979 247 447 -20 0 3627 90 448 0 +980 386 213 20 1996 2156 90 0 946 +981 292 434 -20 755 915 90 338 0 +982 436 301 -20 0 3632 90 995 0 +983 145 221 20 0 3716 90 0 202 +984 224 96 -20 0 3668 90 917 0 +985 59 128 20 0 3598 90 0 620 +986 489 150 -30 0 3565 90 372 0 +987 152 225 -20 994 1154 90 382 0 +988 426 85 -10 0 3583 90 190 0 +989 415 73 -40 1495 1655 90 233 0 +990 440 70 10 2371 2531 90 0 871 +991 320 476 30 0 3588 90 0 558 +992 57 132 -10 1312 1472 90 414 0 +993 405 311 -30 0 3658 90 320 0 +994 109 250 -10 1540 1700 90 557 0 +995 428 314 20 0 3635 90 0 982 +996 40 288 20 1793 1953 90 0 747 +997 175 282 -10 0 3743 90 37 0 +998 298 456 30 0 3613 90 0 326 +999 208 101 10 0 3670 90 0 265 +1000 342 52 10 0 3606 90 0 351 +1001 94 456 -20 0 3566 90 225 0 +1002 386 28 -20 2507 2667 90 715 0 +1003 420 168 -10 3393 3553 90 139 0 +1004 71 348 -10 3055 3215 90 977 0 +1005 198 284 -10 0 3762 90 333 0 +1006 63 159 -20 0 3617 90 121 0 +1007 316 80 -30 0 3642 90 779 0 +1008 425 85 -10 0 3584 90 450 0 +1009 323 258 -10 0 3751 90 325 0 +1010 96 377 -10 0 3625 90 718 0 +1011 194 353 -20 0 3707 90 769 0 +1012 121 203 -10 0 3687 90 59 0 +1013 381 20 -20 1828 1988 90 655 0 +1014 229 78 -20 2496 2656 90 920 0 +1015 215 108 -20 2760 2920 90 808 0 +1016 107 225 -30 0 3679 90 504 0 +1017 191 309 -10 0 3741 90 142 0 +1018 184 178 -10 1454 1614 90 886 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2105.txt b/jsprit-instances/instances/lilim/1000/LC2105.txt new file mode 100644 index 00000000..c317c76a --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2105.txt @@ -0,0 +1,1016 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -10 2582 2902 90 720 0 +2 266 231 40 1856 2176 90 0 68 +3 89 284 20 1356 1676 90 0 55 +4 430 298 10 1482 1802 90 0 492 +5 435 77 20 922 1242 90 0 726 +6 25 293 -20 2884 3204 90 833 0 +7 43 269 30 607 927 90 0 938 +8 216 117 10 349 669 90 0 555 +9 294 437 30 581 901 90 0 200 +10 79 479 30 918 1238 90 0 753 +11 365 18 -20 2133 2453 90 531 0 +12 225 125 20 127 447 90 0 936 +13 448 103 -20 3258 3578 90 871 0 +14 143 266 10 322 642 90 0 270 +15 252 347 -10 2831 3151 90 47 0 +16 403 390 -20 2480 2800 90 475 0 +17 67 153 -10 832 1152 90 550 0 +18 90 168 -20 3000 3320 90 553 0 +19 302 235 -20 963 1283 90 602 0 +20 259 355 -10 1837 2157 90 403 0 +21 149 183 20 3028 3348 90 0 315 +22 19 297 -20 2202 2522 90 186 0 +23 209 358 30 1397 1717 90 0 794 +24 56 388 -10 1711 2031 90 718 0 +25 115 269 -10 2876 3196 90 290 0 +26 377 356 -30 1766 2086 90 400 0 +27 113 229 30 1043 1363 90 0 373 +28 205 343 20 822 1142 90 0 114 +29 48 137 -20 1717 2037 90 449 0 +30 467 157 20 2227 2547 90 0 179 +31 220 394 -30 2703 3023 90 61 0 +32 436 54 -20 1911 2231 90 815 0 +33 54 357 10 1616 1936 90 0 868 +34 456 154 -10 227 547 90 495 0 +35 216 307 -10 2436 2756 90 648 0 +36 280 224 -20 2146 2466 90 748 0 +37 90 270 10 485 805 90 0 839 +38 166 452 20 519 839 90 0 127 +39 17 283 -30 2504 2824 90 568 0 +40 196 192 30 2010 2330 90 0 968 +41 94 275 -10 389 709 90 859 0 +42 292 445 -10 1636 1956 90 279 0 +43 329 471 -20 2703 3023 90 874 0 +44 326 57 20 1284 1604 90 0 700 +45 95 466 -20 2944 3264 90 713 0 +46 429 282 -10 2938 3258 90 714 0 +47 229 364 10 2432 2752 90 0 15 +48 457 160 10 2911 3231 90 0 796 +49 452 154 30 252 572 90 0 66 +50 113 289 10 142 462 90 0 961 +51 67 387 -20 2296 2616 90 307 0 +52 368 17 -30 1941 2261 90 861 0 +53 341 367 30 2450 2770 90 0 221 +54 410 364 -40 1762 2082 90 825 0 +55 80 281 -20 1637 1957 90 3 0 +56 321 224 -20 2026 2346 90 798 0 +57 73 395 -20 1143 1463 90 391 0 +58 259 76 10 848 1168 90 0 266 +59 121 203 -30 1712 2032 90 431 0 +60 118 256 -10 2439 2759 90 228 0 +61 236 361 30 1633 1953 90 0 31 +62 78 371 20 210 530 90 0 198 +63 301 53 20 889 1209 90 0 849 +64 382 197 20 560 880 90 0 756 +65 491 160 -30 1909 2229 90 171 0 +66 453 164 -30 3006 3326 90 49 0 +67 277 371 30 515 835 90 0 652 +68 272 212 -40 2250 2570 90 2 0 +69 386 218 20 1821 2141 90 0 581 +70 353 32 10 825 1145 90 0 435 +71 59 389 -30 1618 1938 90 905 0 +72 414 62 -20 1606 1926 90 147 0 +73 278 357 10 132 452 90 0 746 +74 101 179 20 2332 2652 90 0 629 +75 396 234 -10 2310 2630 90 136 0 +76 74 390 20 717 1037 90 0 358 +77 332 55 30 211 531 90 0 201 +78 272 365 30 613 933 90 0 494 +79 418 355 -20 1957 2277 90 110 0 +80 216 380 -20 2220 2540 90 513 0 +81 440 173 10 3202 3522 90 0 139 +82 89 358 20 3311 3631 90 0 873 +83 66 491 -20 1990 2310 90 707 0 +84 317 234 10 2399 2719 90 0 328 +85 439 297 30 1963 2283 90 0 624 +86 394 367 30 300 620 90 0 669 +87 58 364 -20 2182 2502 90 665 0 +88 290 75 20 179 499 90 0 143 +89 346 344 -10 3132 3452 90 805 0 +90 131 269 10 2308 2628 90 0 425 +91 236 96 -20 1524 1844 90 917 0 +92 29 282 -30 1330 1650 90 483 0 +93 418 385 30 2677 2997 90 0 260 +94 148 225 40 533 853 90 0 893 +95 166 464 10 714 1034 90 0 572 +96 266 373 -30 713 1033 90 827 0 +97 201 273 30 54 374 90 0 644 +98 255 245 10 7 327 90 0 767 +99 220 379 -10 2314 2634 90 542 0 +100 85 317 -20 2527 2847 90 440 0 +101 125 264 -10 2775 3095 90 880 0 +102 131 253 -20 2729 3049 90 306 0 +103 184 188 -20 1180 1500 90 970 0 +104 128 209 20 1013 1333 90 0 875 +105 373 364 20 3090 3410 90 0 702 +106 389 342 10 1065 1385 90 0 682 +107 420 20 30 495 815 90 0 205 +108 132 218 10 122 442 90 0 795 +109 32 256 -10 821 1141 90 606 0 +110 406 339 20 215 535 90 0 79 +111 191 397 20 183 503 90 0 904 +112 72 341 -20 2786 3106 90 162 0 +113 35 308 30 2992 3312 90 0 784 +114 169 360 -20 2092 2412 90 28 0 +115 222 381 -30 2509 2829 90 310 0 +116 96 292 10 782 1102 90 0 544 +117 311 496 -20 648 968 90 730 0 +118 220 384 10 2603 2923 90 0 676 +119 259 243 20 11 331 90 0 690 +120 349 476 -10 2403 2723 90 175 0 +121 63 159 20 929 1249 90 0 985 +122 112 243 20 2241 2561 90 0 740 +123 448 302 -30 2247 2567 90 594 0 +124 343 27 -30 1116 1436 90 499 0 +125 67 485 40 2086 2406 90 0 609 +126 220 359 30 1344 1664 90 0 348 +127 147 435 -20 2031 2351 90 38 0 +128 317 235 -20 2490 2810 90 603 0 +129 43 355 -40 1515 1835 90 459 0 +130 368 340 10 381 701 90 0 195 +131 450 72 -20 2481 2801 90 530 0 +132 400 364 -10 490 810 90 339 0 +133 355 480 -10 1536 1856 90 479 0 +134 450 153 20 453 773 90 0 986 +135 126 188 -30 2018 2338 90 955 0 +136 380 223 10 1534 1854 90 0 75 +137 71 453 20 605 925 90 0 429 +138 54 287 20 199 519 90 0 632 +139 420 168 -10 3313 3633 90 81 0 +140 219 89 -20 2612 2932 90 210 0 +141 189 327 10 340 660 90 0 314 +142 191 309 10 1350 1670 90 0 478 +143 301 67 -20 400 720 90 88 0 +144 484 161 -20 1616 1936 90 485 0 +145 77 483 20 2459 2779 90 0 207 +146 241 375 -30 1918 2238 90 428 0 +147 428 64 20 1121 1441 90 0 72 +148 403 361 -30 1372 1692 90 512 0 +149 257 336 -30 3026 3346 90 731 0 +150 131 241 -10 3298 3618 90 994 0 +151 63 166 -10 2422 2742 90 183 0 +152 71 368 20 3177 3497 90 0 698 +153 272 228 10 1953 2273 90 0 830 +154 25 290 -10 2791 3111 90 304 0 +155 441 157 10 353 673 90 0 824 +156 13 266 -10 1124 1444 90 978 0 +157 251 376 -10 3106 3426 90 584 0 +158 61 170 30 2328 2648 90 0 407 +159 386 357 20 1353 1673 90 0 246 +160 95 475 20 2845 3165 0 0 1001 +161 90 298 10 2024 2344 90 0 925 +162 71 388 20 1425 1745 90 0 112 +163 383 246 -10 2788 3108 90 402 0 +164 352 38 10 546 866 90 0 701 +165 395 1 -30 807 1127 90 518 0 +166 120 210 -10 1202 1522 90 405 0 +167 46 383 30 1208 1528 90 0 517 +168 202 198 -20 2198 2518 90 291 0 +169 358 365 -30 2246 2566 90 362 0 +170 191 352 20 117 437 90 0 900 +171 470 152 30 1146 1466 90 0 65 +172 228 124 20 127 447 90 0 712 +173 402 230 -20 2122 2442 90 813 0 +174 323 229 10 1638 1958 90 0 975 +175 331 486 10 1923 2243 90 0 120 +176 112 208 10 1521 1841 90 0 631 +177 172 435 30 2981 3301 0 0 1006 +178 326 498 -20 941 1261 90 364 0 +179 460 183 -20 2707 3027 90 30 0 +180 95 279 20 295 615 90 0 705 +181 76 456 30 700 1020 90 0 608 +182 242 350 -20 2731 3051 90 775 0 +183 152 196 10 132 452 90 0 151 +184 268 351 10 1370 1690 90 0 764 +185 360 356 10 2653 2973 90 0 649 +186 39 296 20 1903 2223 90 0 22 +187 262 368 30 1082 1402 90 0 521 +188 204 90 20 1014 1334 90 0 965 +189 149 273 20 132 452 90 0 860 +190 446 86 10 2976 3296 90 0 699 +191 139 269 20 1648 1968 90 0 866 +192 483 170 -10 2117 2437 90 583 0 +193 39 278 -10 1521 1841 90 214 0 +194 201 307 -10 1633 1953 90 333 0 +195 395 378 -10 1556 1876 90 130 0 +196 139 262 -30 1370 1690 90 504 0 +197 176 447 -20 231 551 90 379 0 +198 67 380 -20 2199 2519 90 62 0 +199 35 358 20 1417 1737 90 0 734 +200 294 455 -30 2346 2666 90 9 0 +201 351 33 -30 641 961 90 77 0 +202 216 316 -20 2239 2559 90 755 0 +203 261 96 40 367 687 90 0 219 +204 238 57 30 1256 1576 90 0 547 +205 383 18 -30 1563 1883 90 107 0 +206 152 460 -20 1230 1550 90 951 0 +207 94 479 -20 2750 3070 90 145 0 +208 337 453 -10 2905 3225 90 672 0 +209 135 460 -20 1705 2025 90 278 0 +210 260 104 20 146 466 90 0 140 +211 337 63 -10 1965 2285 90 1000 0 +212 32 247 20 722 1042 90 0 790 +213 394 205 10 365 685 90 0 543 +214 95 294 10 690 1010 90 0 193 +215 253 241 20 2755 3075 90 0 324 +216 223 90 -10 2707 3027 90 380 0 +217 64 473 -30 1204 1524 90 760 0 +218 275 431 -10 1162 1482 90 981 0 +219 261 84 -40 654 974 90 203 0 +220 176 296 -10 1150 1470 90 997 0 +221 361 349 -30 2936 3256 90 53 0 +222 168 433 -10 3076 3396 90 250 0 +223 394 10 40 1089 1409 90 0 759 +224 308 60 20 696 1016 90 0 427 +225 94 456 20 3044 3364 90 0 719 +226 73 484 20 2365 2685 90 0 235 +227 277 434 -30 1347 1667 90 858 0 +228 119 232 10 1859 2179 90 0 60 +229 78 375 10 234 554 90 0 802 +230 366 346 20 568 888 90 0 939 +231 125 181 -20 2638 2958 90 683 0 +232 69 493 20 1897 2217 90 0 263 +233 432 80 40 828 1148 90 0 853 +234 72 391 10 1332 1652 90 0 377 +235 85 486 -20 2558 2878 90 226 0 +236 204 371 30 669 989 90 0 559 +237 173 328 10 2401 2721 90 0 332 +238 280 423 10 871 1191 90 0 927 +239 200 327 30 3070 3390 0 0 1008 +240 241 98 -20 2907 3227 90 327 0 +241 96 356 10 186 506 90 0 502 +242 332 491 30 1131 1451 90 0 463 +243 81 283 10 1544 1864 90 0 564 +244 373 22 -20 2232 2552 90 922 0 +245 255 371 -10 2129 2449 90 960 0 +246 358 359 -20 2559 2879 90 159 0 +247 216 93 10 2393 2713 90 0 808 +248 73 360 -20 2867 3187 90 426 0 +249 305 212 20 1076 1396 90 0 709 +250 151 462 10 1322 1642 90 0 222 +251 47 389 30 1022 1342 90 0 841 +252 155 198 30 108 428 90 0 452 +253 152 457 10 1137 1457 90 0 371 +254 329 48 10 1475 1795 90 0 443 +255 88 394 10 647 967 90 0 758 +256 153 295 -10 3302 3622 90 906 0 +257 81 373 10 510 830 90 0 855 +258 163 453 -20 613 933 90 673 0 +259 378 25 10 2328 2648 90 0 706 +260 401 385 -30 2784 3104 90 93 0 +261 184 340 10 2688 3008 90 0 585 +262 402 362 -30 1281 1601 90 566 0 +263 70 482 -20 2271 2591 90 232 0 +264 357 445 -10 3107 3427 90 353 0 +265 212 71 20 1124 1444 90 0 773 +266 231 81 -10 2323 2643 90 58 0 +267 379 208 10 755 1075 90 0 723 +268 236 95 30 2037 2357 90 0 274 +269 386 344 20 1159 1479 90 0 536 +270 189 200 -10 1909 2229 90 14 0 +271 296 253 10 754 1074 90 0 579 +272 73 303 -30 2317 2637 90 552 0 +273 30 162 -10 2022 2342 90 914 0 +274 230 95 -30 1819 2139 90 268 0 +275 57 131 10 1323 1643 90 0 933 +276 379 245 -30 2693 3013 90 717 0 +277 107 221 40 454 774 90 0 777 +278 154 458 20 1045 1365 90 0 209 +279 290 417 10 171 491 90 0 42 +280 272 243 30 45 365 90 0 387 +281 94 130 10 521 841 90 0 484 +282 222 356 20 1528 1848 90 0 519 +283 243 108 -20 2981 3301 90 838 0 +284 224 93 20 2111 2431 90 0 803 +285 155 242 -10 806 1126 90 308 0 +286 440 302 20 1199 1519 90 0 667 +287 221 102 -20 2778 3098 90 453 0 +288 52 484 -10 1601 1921 90 877 0 +289 111 244 -10 2149 2469 90 563 0 +290 132 273 10 2123 2443 90 0 25 +291 228 186 20 189 509 90 0 168 +292 221 374 -20 1050 1370 90 296 0 +293 406 286 10 3234 3554 90 0 976 +294 390 9 -30 1183 1503 90 863 0 +295 335 52 20 1681 2001 90 0 323 +296 189 368 20 132 452 90 0 292 +297 397 40 -10 2411 2731 90 496 0 +298 408 305 -20 339 659 90 792 0 +299 156 434 -20 2785 3105 90 780 0 +300 180 335 -20 2501 2821 90 797 0 +301 327 483 -10 2018 2338 90 500 0 +302 363 62 -10 3184 3504 90 952 0 +303 375 342 -50 859 1179 90 394 0 +304 16 280 10 2687 3007 90 0 154 +305 277 431 30 1254 1574 90 0 969 +306 110 241 20 2056 2376 90 0 102 +307 48 385 20 928 1248 90 0 51 +308 152 260 10 98 418 90 0 285 +309 255 120 10 130 450 90 0 575 +310 214 382 30 2411 2731 90 0 115 +311 414 384 -20 2582 2902 90 689 0 +312 232 378 -10 2114 2434 90 867 0 +313 80 141 -30 414 734 90 963 0 +314 188 330 -10 433 753 90 141 0 +315 157 192 -20 3130 3450 90 21 0 +316 101 237 -10 1751 2071 90 850 0 +317 74 360 -30 2776 3096 90 695 0 +318 267 260 20 429 749 90 0 336 +319 378 46 30 3010 3330 90 0 409 +320 420 311 -10 813 1133 90 322 0 +321 384 217 20 1729 2049 90 0 616 +322 418 300 10 531 851 90 0 320 +323 356 77 -20 2169 2489 90 295 0 +324 253 244 -20 2662 2982 90 215 0 +325 323 258 10 1248 1568 90 0 573 +326 293 454 -30 2531 2851 90 342 0 +327 231 97 20 2807 3127 90 0 240 +328 316 234 -10 2581 2901 90 84 0 +329 207 196 -20 2485 2805 90 971 0 +330 321 228 -10 2120 2440 90 368 0 +331 382 17 -30 1654 1974 90 510 0 +332 206 326 -10 3166 3486 90 237 0 +333 198 284 10 62 382 90 0 194 +334 137 186 -20 2832 3152 90 691 0 +335 229 396 30 2802 3122 90 0 577 +336 268 235 -20 1762 2082 90 318 0 +337 95 243 20 679 999 90 0 923 +338 297 430 20 298 618 90 0 614 +339 393 368 10 392 712 90 0 132 +340 66 391 20 1521 1841 90 0 657 +341 189 339 -20 2783 3103 90 526 0 +342 280 351 30 105 425 90 0 326 +343 241 77 -20 1145 1465 90 415 0 +344 134 265 -10 2586 2906 90 612 0 +345 420 95 30 265 585 90 0 774 +346 111 279 30 141 461 90 0 363 +347 367 358 -30 2053 2373 90 854 0 +348 239 373 -30 1825 2145 90 126 0 +349 384 235 20 2592 2912 90 0 819 +350 284 360 30 229 549 90 0 845 +351 325 75 -30 2290 2610 90 365 0 +352 279 369 10 422 742 90 0 491 +353 340 449 10 3000 3320 90 0 264 +354 275 448 -30 2822 3142 90 929 0 +355 447 88 -20 2883 3203 90 661 0 +356 314 279 10 190 510 90 0 823 +357 434 377 -10 2265 2585 90 413 0 +358 67 377 -20 2106 2426 90 76 0 +359 370 353 10 666 986 90 0 501 +360 57 367 -30 2089 2409 90 398 0 +361 332 486 20 1832 2152 90 0 887 +362 386 361 30 1447 1767 90 0 169 +363 55 282 -30 225 545 90 346 0 +364 317 467 20 344 664 90 0 178 +365 335 54 30 1773 2093 90 0 351 +366 348 466 -20 2503 2823 90 735 0 +367 132 314 -10 3134 3454 90 508 0 +368 328 216 10 1832 2152 90 0 330 +369 416 48 10 1800 2120 90 0 785 +370 370 55 -10 2806 3126 90 727 0 +371 149 434 -10 2123 2443 90 253 0 +372 466 169 -20 2422 2742 90 832 0 +373 141 267 -30 1555 1875 90 27 0 +374 258 350 -10 1742 2062 90 651 0 +375 428 312 10 1004 1324 90 0 982 +376 211 188 10 580 900 90 0 637 +377 50 343 -10 2674 2994 90 234 0 +378 107 311 40 2733 3053 90 0 399 +379 178 441 20 204 524 90 0 197 +380 232 85 10 2229 2549 90 0 216 +381 391 23 -20 2618 2938 90 910 0 +382 137 227 20 115 435 90 0 548 +383 161 203 20 100 420 90 0 897 +384 363 212 -10 3194 3514 90 389 0 +385 384 346 -30 1251 1571 90 589 0 +386 166 434 40 2885 3205 90 0 433 +387 274 248 -30 230 550 90 280 0 +388 156 421 -20 3275 3595 90 856 0 +389 346 211 10 103 423 90 0 384 +390 265 358 20 1272 1592 90 0 962 +391 96 407 20 354 674 90 0 57 +392 443 70 -30 2384 2704 90 789 0 +393 125 212 -30 1107 1427 90 421 0 +394 361 337 50 283 603 90 0 303 +395 322 78 20 2384 2704 0 0 1007 +396 481 156 -10 1520 1840 90 908 0 +397 188 293 -30 757 1077 90 613 0 +398 76 408 30 940 1260 90 0 360 +399 130 304 -40 3095 3415 90 378 0 +400 378 363 30 1669 1989 90 0 26 +401 185 301 20 1250 1570 90 0 882 +402 385 235 10 2501 2821 90 0 163 +403 261 350 10 1649 1969 90 0 20 +404 389 33 -10 2903 3223 90 416 0 +405 151 214 10 431 751 90 0 166 +406 265 94 10 178 498 90 0 437 +407 65 164 -30 2515 2835 90 158 0 +408 293 81 10 174 494 90 0 898 +409 363 55 -30 2903 3223 90 319 0 +410 465 176 -40 2519 2839 90 791 0 +411 428 298 -10 1574 1894 90 569 0 +412 75 379 -10 2487 2807 90 811 0 +413 404 378 10 777 1097 90 0 357 +414 203 203 10 2770 3090 90 0 447 +415 259 88 20 465 785 90 0 343 +416 362 17 10 1804 2124 90 0 404 +417 320 258 20 484 804 90 0 902 +418 59 358 -10 2278 2598 90 915 0 +419 316 453 20 213 533 90 0 558 +420 225 192 20 63 383 90 0 539 +421 140 206 30 328 648 90 0 393 +422 83 151 10 220 540 90 0 787 +423 366 196 10 127 447 90 0 980 +424 108 245 -10 1650 1970 90 647 0 +425 129 267 -10 2400 2720 90 90 0 +426 57 379 20 827 1147 90 0 248 +427 329 56 -20 1377 1697 90 224 0 +428 213 363 30 1154 1474 90 0 146 +429 76 391 -20 1238 1558 90 137 0 +430 330 259 30 1151 1471 90 0 591 +431 136 217 30 818 1138 90 0 59 +432 165 333 -20 2301 2621 90 804 0 +433 160 431 -40 3174 3494 90 386 0 +434 338 489 -30 1228 1548 90 460 0 +435 335 64 -10 1873 2193 90 70 0 +436 412 361 10 1668 1988 90 0 679 +437 259 90 -10 557 877 90 406 0 +438 265 77 20 752 1072 90 0 924 +439 460 173 -20 2807 3127 90 471 0 +440 83 301 20 2217 2537 90 0 100 +441 201 331 20 627 947 90 0 511 +442 118 214 20 160 480 90 0 742 +443 395 30 -10 2716 3036 90 254 0 +444 125 444 10 1917 2237 90 0 711 +445 283 248 30 33 353 90 0 724 +446 391 334 -10 967 1287 90 509 0 +447 212 215 -10 3080 3400 90 414 0 +448 276 428 20 968 1288 90 0 687 +449 96 152 20 182 502 90 0 29 +450 425 85 -10 456 776 90 757 0 +451 336 7 10 1504 1824 90 0 454 +452 196 219 -30 2974 3294 90 252 0 +453 210 94 20 917 1237 90 0 287 +454 310 81 -10 2766 3086 90 451 0 +455 341 37 20 354 674 90 0 894 +456 344 478 20 2216 2536 0 0 1003 +457 406 37 40 264 584 90 0 912 +458 69 346 -10 2882 3202 90 464 0 +459 80 376 40 327 647 90 0 129 +460 314 449 30 209 529 90 0 434 +461 209 201 -10 2673 2993 90 623 0 +462 88 379 -10 609 929 90 561 0 +463 352 500 -30 1425 1745 90 242 0 +464 65 357 10 2374 2694 90 0 458 +465 345 15 -20 1402 1722 90 678 0 +466 125 245 -30 2922 3242 90 532 0 +467 52 369 30 1993 2313 90 0 747 +468 449 140 20 650 970 90 0 818 +469 430 310 -30 1096 1416 90 835 0 +470 109 325 -10 2928 3248 90 977 0 +471 446 139 20 557 877 90 0 439 +472 229 214 20 41 361 90 0 601 +473 197 301 10 103 423 90 0 913 +474 146 245 20 616 936 90 0 505 +475 401 368 20 584 904 90 0 16 +476 116 259 -20 2533 2853 90 696 0 +477 374 55 -20 2712 3032 90 607 0 +478 249 251 -10 2956 3276 90 142 0 +479 325 490 10 843 1163 90 0 133 +480 59 159 10 1023 1343 90 0 768 +481 186 177 20 1281 1601 90 0 528 +482 319 229 -20 2212 2532 90 778 0 +483 26 269 30 925 1245 90 0 92 +484 53 139 -10 1134 1454 90 281 0 +485 471 154 20 1239 1559 90 0 144 +486 301 247 10 3158 3478 90 0 686 +487 388 220 20 1343 1663 90 0 646 +488 235 81 20 1370 1690 90 0 837 +489 347 479 -30 2309 2629 90 991 0 +490 367 59 -20 3089 3409 90 621 0 +491 261 370 -10 989 1309 90 352 0 +492 441 287 -10 2835 3155 90 4 0 +493 44 153 30 1915 2235 90 0 643 +494 263 351 -30 1465 1785 90 78 0 +495 444 157 10 215 535 90 0 34 +496 374 17 10 1845 2165 90 0 297 +497 448 295 -10 2644 2964 90 556 0 +498 446 297 -30 2152 2472 90 993 0 +499 347 40 30 450 770 90 0 124 +500 318 493 10 745 1065 90 0 301 +501 399 352 -10 1180 1500 90 359 0 +502 51 364 -10 1807 2127 90 241 0 +503 250 217 -20 2454 2774 90 615 0 +504 107 225 30 360 680 90 0 196 +505 173 208 -20 1801 2121 90 474 0 +506 204 189 -20 2298 2618 90 736 0 +507 399 379 -10 2880 3200 90 541 0 +508 79 346 10 3070 3390 90 0 367 +509 360 338 10 192 512 90 0 446 +510 390 17 30 1373 1693 90 0 331 +511 207 337 -20 725 1045 90 441 0 +512 409 361 30 977 1297 90 0 148 +513 206 377 20 479 799 90 0 80 +514 429 294 10 1863 2183 90 0 966 +515 375 31 -20 2105 2425 90 598 0 +516 426 80 -10 642 962 90 988 0 +517 74 374 -30 2582 2902 90 167 0 +518 408 20 30 393 713 90 0 165 +519 239 369 -20 1731 2051 90 282 0 +520 420 308 30 629 949 90 0 931 +521 254 357 -30 1932 2252 90 187 0 +522 53 297 30 3220 3540 0 0 1005 +523 434 382 -10 2170 2490 90 800 0 +524 204 171 -20 878 1198 90 684 0 +525 173 169 10 1478 1798 90 0 593 +526 190 332 20 526 846 90 0 341 +527 274 231 -10 2046 2366 90 633 0 +528 207 194 -20 2393 2713 90 481 0 +529 315 232 10 2673 2993 90 0 675 +530 425 87 20 364 684 90 0 131 +531 312 64 20 502 822 90 0 11 +532 129 244 30 2828 3148 90 0 466 +533 278 230 -10 1386 1706 90 921 0 +534 351 75 10 2074 2394 90 0 617 +535 185 293 -20 850 1170 90 540 0 +536 364 364 -20 2150 2470 90 269 0 +537 432 369 10 2067 2387 0 0 1009 +538 128 249 -20 1263 1583 90 694 0 +539 221 179 -20 289 609 90 420 0 +540 194 296 20 570 890 90 0 535 +541 413 350 10 1477 1797 90 0 507 +542 214 372 10 863 1183 90 0 99 +543 379 229 -10 965 1285 90 213 0 +544 91 298 -10 1933 2253 90 116 0 +545 226 120 30 155 475 90 0 869 +546 344 46 30 1580 1900 0 0 1004 +547 238 84 -30 1554 1874 90 204 0 +548 138 276 -20 1835 2155 90 382 0 +549 346 487 -30 1728 2048 90 826 0 +550 95 160 10 179 499 90 0 17 +551 103 266 -20 982 1302 90 786 0 +552 98 286 30 1257 1577 90 0 272 +553 77 172 20 2896 3216 90 0 18 +554 147 199 30 228 548 90 0 983 +555 210 98 -10 641 961 90 8 0 +556 428 292 10 1771 2091 90 0 497 +557 121 236 -10 1954 2274 90 944 0 +558 336 479 -20 2118 2438 90 419 0 +559 203 369 -30 761 1081 90 236 0 +560 296 232 -30 1188 1508 90 674 0 +561 87 369 10 201 521 90 0 462 +562 247 88 -30 1844 2164 90 771 0 +563 104 246 10 1273 1593 90 0 289 +564 67 302 -10 2413 2733 90 243 0 +565 114 296 40 179 499 90 0 656 +566 394 356 30 178 498 90 0 262 +567 192 306 20 1443 1763 90 0 671 +568 16 285 30 2412 2732 90 0 39 +569 419 310 10 722 1042 90 0 411 +570 389 221 -20 1252 1572 90 662 0 +571 129 264 -20 2681 3001 90 599 0 +572 172 483 -10 824 1144 90 95 0 +573 325 251 -10 1345 1665 90 325 0 +574 151 436 -20 2306 2626 90 888 0 +575 263 91 -10 272 592 90 309 0 +576 401 15 -10 605 925 90 650 0 +577 253 382 -30 3010 3330 90 335 0 +578 247 89 20 1935 2255 90 0 920 +579 283 229 -10 1291 1611 90 271 0 +580 366 341 20 473 793 90 0 697 +581 392 213 -20 2012 2332 90 69 0 +582 167 304 20 127 447 90 0 937 +583 477 154 10 1426 1746 90 0 192 +584 234 383 10 2019 2339 90 0 157 +585 199 327 -10 2979 3299 90 261 0 +586 140 220 30 723 1043 90 0 636 +587 144 266 30 231 551 90 0 862 +588 432 105 10 3272 3592 0 0 1002 +589 368 325 30 139 459 90 0 385 +590 202 386 20 289 609 90 0 680 +591 325 246 -30 1440 1760 90 430 0 +592 430 86 -20 2686 3006 90 989 0 +593 200 195 -10 2105 2425 90 525 0 +594 440 295 30 2056 2376 90 0 123 +595 77 287 10 1825 2145 90 0 618 +596 187 362 -20 1706 2026 90 940 0 +597 131 207 20 919 1239 90 0 638 +598 405 5 20 706 1026 90 0 515 +599 125 226 20 1309 1629 90 0 571 +600 254 335 -10 2933 3253 90 807 0 +601 212 168 -20 780 1100 90 472 0 +602 281 279 20 634 954 90 0 19 +603 326 241 20 1535 1855 90 0 128 +604 152 241 20 713 1033 90 0 708 +605 71 139 30 727 1047 90 0 721 +606 46 277 10 509 829 90 0 109 +607 393 13 20 1278 1598 90 0 477 +608 87 454 -30 802 1122 90 181 0 +609 86 359 -40 3175 3495 90 125 0 +610 220 192 20 89 409 90 0 635 +611 426 279 30 3032 3352 0 0 1010 +612 131 267 10 2492 2812 90 0 344 +613 200 297 30 473 793 90 0 397 +614 299 442 -20 1824 2144 90 338 0 +615 265 218 20 2349 2669 90 0 503 +616 398 231 -20 2216 2536 90 321 0 +617 312 74 -10 2669 2989 90 534 0 +618 99 307 -10 2634 2954 90 595 0 +619 22 283 -10 1233 1553 90 622 0 +620 67 160 -10 2610 2930 90 992 0 +621 390 42 20 2508 2828 90 0 490 +622 44 279 10 416 736 90 0 619 +623 200 182 10 1073 1393 90 0 461 +624 458 303 -30 2451 2771 90 85 0 +625 298 438 10 487 807 90 0 692 +626 62 301 20 3310 3630 90 0 949 +627 112 251 -20 1553 1873 90 666 0 +628 184 354 -20 1896 2216 90 769 0 +629 140 180 -20 2929 3249 90 74 0 +630 269 428 20 1065 1385 90 0 744 +631 123 206 -10 1805 2125 90 176 0 +632 36 284 -20 1618 1938 90 138 0 +633 272 233 10 1667 1987 90 0 527 +634 320 231 20 2304 2624 90 0 844 +635 211 180 -20 678 998 90 610 0 +636 114 169 -30 2532 2852 90 586 0 +637 245 239 -10 2853 3173 90 376 0 +638 117 204 -20 1618 1938 90 597 0 +639 316 254 -20 670 990 90 967 0 +640 169 443 -10 420 740 90 776 0 +641 212 96 10 824 1144 90 0 814 +642 119 285 40 2983 3303 0 0 1013 +643 71 163 -30 2705 3025 90 493 0 +644 78 361 -30 3300 3620 90 97 0 +645 354 219 10 3295 3615 0 0 1014 +646 389 233 -20 2407 2727 90 487 0 +647 90 391 10 461 781 90 0 424 +648 209 307 10 1731 2051 90 0 35 +649 363 351 -10 2843 3163 90 185 0 +650 405 47 10 255 575 90 0 576 +651 278 329 10 83 403 90 0 374 +652 261 371 -30 898 1218 90 67 0 +653 302 470 20 2147 2467 90 0 979 +654 373 205 40 254 574 90 0 946 +655 381 20 -10 1748 2068 90 693 0 +656 90 277 -40 582 902 90 565 0 +657 46 341 -20 2579 2899 90 340 0 +658 50 138 -10 1809 2129 90 677 0 +659 61 437 20 265 585 90 0 972 +660 331 252 -30 1054 1374 90 743 0 +661 440 81 20 2585 2905 90 0 355 +662 384 206 20 659 979 90 0 570 +663 232 87 30 1424 1744 90 0 831 +664 59 471 20 1404 1724 90 0 762 +665 174 304 20 93 413 90 0 87 +666 106 248 20 1366 1686 90 0 627 +667 410 287 -20 3140 3460 90 286 0 +668 206 313 -30 2011 2331 90 945 0 +669 412 367 -30 880 1200 90 86 0 +670 412 300 20 435 755 90 0 995 +671 206 295 -20 2729 3049 90 567 0 +672 329 459 10 2805 3125 90 0 208 +673 177 436 20 199 519 90 0 258 +674 266 264 30 523 843 90 0 560 +675 308 235 -10 3055 3375 90 529 0 +676 260 330 -10 3123 3443 90 118 0 +677 49 136 10 1625 1945 90 0 658 +678 356 28 20 920 1240 90 0 465 +679 428 384 -10 2364 2684 90 436 0 +680 220 362 -20 1251 1571 90 590 0 +681 437 61 -20 2008 2328 90 953 0 +682 365 360 -10 1960 2280 90 106 0 +683 107 168 20 2435 2755 90 0 231 +684 220 177 20 381 701 90 0 524 +685 347 21 20 1306 1626 90 0 899 +686 293 245 -10 3350 3670 90 486 0 +687 267 436 -20 2927 3247 90 448 0 +688 216 96 -40 2486 2806 90 984 0 +689 383 351 20 167 487 90 0 311 +690 289 240 -20 859 1179 90 119 0 +691 129 185 20 2734 3054 90 0 334 +692 291 450 -10 2625 2945 90 625 0 +693 387 21 10 1468 1788 90 0 655 +694 116 255 20 1159 1479 90 0 538 +695 50 368 30 1901 2221 90 0 317 +696 121 249 20 2341 2661 90 0 476 +697 404 346 -20 1083 1403 90 580 0 +698 77 360 -20 3277 3597 90 152 0 +699 447 102 -10 3172 3492 90 190 0 +700 366 16 -20 1898 2218 90 44 0 +701 348 16 -10 1700 2020 90 164 0 +702 353 346 -20 3034 3354 90 105 0 +703 54 485 30 1693 2013 90 0 956 +704 319 77 -20 2478 2798 90 749 0 +705 83 282 -20 1452 1772 90 180 0 +706 384 24 -10 2521 2841 90 259 0 +707 52 469 20 1307 1627 90 0 83 +708 199 200 -20 2865 3185 90 604 0 +709 273 234 -20 1576 1896 90 249 0 +710 16 281 -20 2596 2916 90 928 0 +711 151 442 -10 2402 2722 90 444 0 +712 223 114 -20 252 572 90 172 0 +713 191 308 20 82 402 90 0 45 +714 448 297 10 2552 2872 90 0 46 +715 386 28 -10 2427 2747 90 864 0 +716 106 295 20 973 1293 90 0 806 +717 387 224 30 1437 1757 90 0 276 +718 96 377 10 199 519 90 0 24 +719 86 361 -20 3267 3587 90 225 0 +720 211 107 10 451 771 90 0 1 +721 43 125 -30 1523 1843 90 605 0 +722 369 351 20 758 1078 90 0 916 +723 388 228 -10 1155 1475 90 267 0 +724 325 228 -30 1730 2050 90 445 0 +725 490 159 20 1817 2137 90 0 766 +726 420 78 -20 1318 1638 90 5 0 +727 396 4 10 993 1313 90 0 370 +728 222 317 30 2335 2655 90 0 884 +729 389 198 -10 463 783 90 745 0 +730 322 454 20 240 560 90 0 117 +731 241 391 30 2905 3225 90 0 149 +732 256 117 -20 3087 3407 90 752 0 +733 298 255 -10 71 391 90 942 0 +734 74 363 -20 2683 3003 90 199 0 +735 345 496 20 1327 1647 90 0 366 +736 167 169 20 1574 1894 90 0 506 +737 23 306 20 2102 2422 90 0 950 +738 317 62 -10 597 917 90 932 0 +739 319 257 20 576 896 90 0 901 +740 129 255 -20 2636 2956 90 122 0 +741 59 377 -20 2008 2328 90 895 0 +742 138 272 -20 1741 2061 90 442 0 +743 317 251 30 860 1180 90 0 660 +744 279 436 -20 1439 1759 90 630 0 +745 371 207 10 161 481 90 0 729 +746 263 372 -10 806 1126 90 73 0 +747 50 347 -30 2482 2802 90 467 0 +748 275 236 20 1483 1803 90 0 36 +749 334 47 20 251 571 90 0 704 +750 50 383 10 1809 2129 90 0 754 +751 170 338 -30 2204 2524 90 829 0 +752 245 109 20 3009 3329 90 0 732 +753 69 475 -30 1109 1429 90 10 0 +754 54 372 -10 1911 2231 90 750 0 +755 198 334 20 2123 2443 90 0 202 +756 380 228 -20 1057 1377 90 64 0 +757 425 118 10 219 539 90 0 450 +758 80 398 -10 746 1066 90 255 0 +759 366 57 -40 2996 3316 90 223 0 +760 67 463 30 504 824 90 0 217 +761 226 86 10 2515 2835 0 0 1011 +762 59 480 -20 1503 1823 90 664 0 +763 40 378 20 1306 1626 90 0 947 +764 250 367 -10 2033 2353 90 184 0 +765 157 436 -20 2693 3013 90 941 0 +766 463 161 -20 2323 2643 90 725 0 +767 266 250 -10 329 649 90 98 0 +768 51 162 -10 2133 2453 90 480 0 +769 194 353 20 1291 1611 90 0 628 +770 383 41 -10 2605 2925 90 935 0 +771 247 82 30 1748 2068 90 0 562 +772 457 142 20 749 1069 90 0 954 +773 244 94 -20 1715 2035 90 265 0 +774 441 63 -30 2194 2514 90 345 0 +775 244 371 20 2230 2550 90 0 182 +776 174 444 10 325 645 90 0 640 +777 94 247 -40 773 1093 90 277 0 +778 320 225 20 1934 2254 90 0 482 +779 316 80 -10 2572 2892 90 876 0 +780 155 447 20 2592 2912 90 0 299 +781 211 308 30 1823 2143 90 0 973 +782 297 442 20 1732 2052 90 0 998 +783 200 342 10 917 1237 90 0 964 +784 44 325 -30 3101 3421 90 113 0 +785 438 60 -10 2100 2420 90 369 0 +786 80 374 20 419 739 90 0 551 +787 59 163 -10 2231 2551 90 422 0 +788 236 92 -10 2130 2450 90 843 0 +789 414 66 30 1512 1832 90 0 392 +790 34 279 -20 1426 1746 90 212 0 +791 475 156 40 1333 1653 90 0 410 +792 404 310 20 165 485 90 0 298 +793 367 239 -20 3076 3396 90 934 0 +794 210 359 -30 1488 1808 90 23 0 +795 133 278 -10 1930 2250 90 108 0 +796 446 169 -10 3105 3425 90 48 0 +797 188 356 20 1802 2122 90 0 300 +798 312 252 20 765 1085 90 0 56 +799 69 485 -30 2178 2498 90 892 0 +800 413 353 10 1570 1890 90 0 523 +801 54 446 20 277 597 90 0 822 +802 56 357 -10 1708 2028 90 229 0 +803 230 105 -20 2878 3198 90 284 0 +804 196 302 20 194 514 90 0 432 +805 391 373 10 2980 3300 90 0 89 +806 101 295 -20 878 1198 90 716 0 +807 234 350 10 2537 2857 90 0 600 +808 215 108 -10 2680 3000 90 247 0 +809 142 457 -20 1513 1833 90 857 0 +810 283 425 20 778 1098 90 0 851 +811 77 397 10 839 1159 90 0 412 +812 105 317 -20 2829 3149 90 828 0 +813 382 213 20 1635 1955 90 0 173 +814 213 76 -10 1220 1540 90 641 0 +815 417 56 20 1702 2022 90 0 32 +816 183 340 -20 2597 2917 90 974 0 +817 123 242 -20 3110 3430 90 930 0 +818 475 136 -20 949 1269 90 468 0 +819 377 246 -20 2974 3294 90 349 0 +820 310 484 30 546 866 90 0 840 +821 47 280 10 323 643 90 0 996 +822 57 456 -20 308 628 90 801 0 +823 313 266 -10 293 613 90 356 0 +824 475 145 -10 1048 1368 90 155 0 +825 400 376 40 682 1002 90 0 54 +826 290 416 30 170 490 90 0 549 +827 277 369 30 330 650 90 0 96 +828 91 303 20 2119 2439 90 0 812 +829 194 301 30 286 606 90 0 751 +830 254 238 -10 2566 2886 90 153 0 +831 215 91 -30 2210 2530 90 663 0 +832 500 162 20 2008 2328 90 0 372 +833 56 287 20 197 517 90 0 6 +834 289 452 -20 2718 3038 90 847 0 +835 378 326 30 148 468 90 0 469 +836 197 350 30 1106 1426 90 0 919 +837 243 88 -20 1651 1971 90 488 0 +838 250 72 20 1045 1365 90 0 283 +839 101 290 -10 1070 1390 90 37 0 +840 351 480 -30 1630 1950 90 820 0 +841 67 357 -30 2964 3284 90 251 0 +842 128 240 10 3205 3525 0 0 1012 +843 253 81 10 946 1266 90 0 788 +844 307 227 -20 2773 3093 90 634 0 +845 233 441 -30 3145 3465 90 350 0 +846 311 47 10 990 1310 90 0 896 +847 292 456 20 2438 2758 90 0 834 +848 183 187 -10 1688 2008 90 886 0 +849 392 31 -20 2810 3130 90 63 0 +850 103 251 10 1178 1498 90 0 316 +851 300 443 -20 1916 2236 90 810 0 +852 420 295 -10 1672 1992 90 870 0 +853 427 64 -40 1212 1532 90 233 0 +854 372 354 30 1861 2181 90 0 347 +855 101 263 -10 1076 1396 90 257 0 +856 141 454 20 1606 1926 90 0 388 +857 146 461 20 1417 1737 90 0 809 +858 298 430 30 389 709 90 0 227 +859 148 270 10 103 423 90 0 41 +860 76 287 -20 1734 2054 90 189 0 +861 308 55 30 791 1111 90 0 52 +862 143 257 -30 421 741 90 587 0 +863 393 2 30 899 1219 90 0 294 +864 385 28 10 2206 2526 90 0 715 +865 204 291 20 2823 3143 90 0 959 +866 132 272 -20 2214 2534 90 191 0 +867 206 379 10 387 707 90 0 312 +868 69 383 -10 2390 2710 90 33 0 +869 245 96 -30 1623 1943 90 545 0 +870 431 301 10 1388 1708 90 0 852 +871 448 94 20 3074 3394 90 0 13 +872 199 305 -10 1540 1860 90 891 0 +873 95 356 -20 3317 3637 90 82 0 +874 328 498 20 1033 1353 90 0 43 +875 108 222 -20 1417 1737 90 104 0 +876 341 26 10 1208 1528 90 0 779 +877 63 454 10 404 724 90 0 288 +878 222 357 -20 1437 1757 90 890 0 +879 416 364 -30 1858 2178 90 889 0 +880 127 278 10 2026 2346 90 0 101 +881 140 252 20 517 837 90 0 987 +882 218 298 -20 2626 2946 90 401 0 +883 432 87 -10 2778 3098 90 885 0 +884 216 300 -30 2533 2853 90 728 0 +885 438 72 10 1018 1338 90 0 883 +886 184 178 10 1374 1694 90 0 848 +887 345 468 -20 2597 2917 90 361 0 +888 150 435 20 2215 2535 90 0 574 +889 395 365 30 208 528 90 0 879 +890 208 371 20 575 895 90 0 878 +891 190 292 10 665 985 90 0 872 +892 78 479 30 1009 1329 90 0 799 +893 104 198 -40 2223 2543 90 94 0 +894 346 13 -20 1606 1926 90 455 0 +895 47 388 20 1113 1433 90 0 741 +896 315 57 -10 1091 1411 90 846 0 +897 110 199 -20 2127 2447 90 383 0 +898 323 60 -10 1190 1510 90 408 0 +899 308 82 -20 2859 3179 90 685 0 +900 216 374 -20 955 1275 90 170 0 +901 326 253 -20 959 1279 90 739 0 +902 308 232 -20 2868 3188 90 417 0 +903 118 223 10 259 579 90 0 943 +904 149 444 -20 2495 2815 90 111 0 +905 95 395 30 252 572 90 0 71 +906 117 319 10 3028 3348 90 0 256 +907 262 352 10 1556 1876 90 0 958 +908 468 135 10 852 1172 90 0 396 +909 351 31 20 733 1053 90 0 918 +910 361 15 20 2038 2358 90 0 381 +911 195 300 10 378 698 90 0 948 +912 397 27 -40 2308 2628 90 457 0 +913 179 311 -10 231 551 90 473 0 +914 77 133 10 629 949 90 0 273 +915 66 397 10 1045 1365 90 0 418 +916 366 352 -20 2750 3070 90 722 0 +917 221 87 20 1323 1643 90 0 91 +918 347 23 -20 1020 1340 90 909 0 +919 176 358 -30 1995 2315 90 836 0 +920 229 78 -20 2416 2736 90 578 0 +921 272 246 10 138 458 90 0 533 +922 293 67 20 210 530 90 0 244 +923 140 265 -20 1463 1783 90 337 0 +924 238 83 -20 1463 1783 90 438 0 +925 136 296 -10 3195 3515 90 161 0 +926 218 98 -10 1922 2242 90 999 0 +927 290 440 -10 1541 1861 90 238 0 +928 29 302 20 2005 2325 90 0 710 +929 290 425 30 200 520 90 0 354 +930 124 247 20 3015 3335 90 0 817 +931 442 287 -30 2744 3064 90 520 0 +932 294 64 10 303 623 90 0 738 +933 74 165 -10 2798 3118 90 275 0 +934 382 245 20 2879 3199 90 0 793 +935 405 24 10 298 618 90 0 770 +936 211 97 -20 732 1052 90 12 0 +937 88 390 -20 553 873 90 582 0 +938 37 295 -30 1811 2131 90 7 0 +939 359 371 -20 2342 2662 90 230 0 +940 186 372 20 1605 1925 90 0 596 +941 116 446 20 1818 2138 90 0 765 +942 293 249 10 43 363 90 0 733 +943 83 228 -10 569 889 90 903 0 +944 96 269 10 885 1205 90 0 557 +945 179 284 30 951 1271 90 0 668 +946 368 219 -40 860 1180 90 654 0 +947 66 359 -20 3077 3397 90 763 0 +948 189 338 -10 2874 3194 90 911 0 +949 163 277 -20 3412 3732 90 626 0 +950 5 296 -20 2306 2626 90 737 0 +951 152 478 20 935 1255 90 0 206 +952 366 34 10 2006 2326 90 0 302 +953 429 80 20 735 1055 90 0 681 +954 464 178 -20 2611 2931 90 772 0 +955 138 196 30 1913 2233 90 0 135 +956 87 481 -30 2653 2973 90 703 0 +957 425 99 20 231 551 90 0 990 +958 241 362 -10 2330 2650 90 907 0 +959 207 289 -20 2917 3237 90 865 0 +960 264 365 10 1175 1495 90 0 245 +961 102 289 -10 1162 1482 90 50 0 +962 233 346 -20 2631 2951 90 390 0 +963 78 141 30 322 642 90 0 313 +964 196 348 -10 1014 1334 90 783 0 +965 216 92 -20 2302 2622 90 188 0 +966 444 309 -10 2345 2665 90 514 0 +967 313 263 20 386 706 90 0 639 +968 211 198 -30 2580 2900 90 40 0 +969 314 436 -30 2021 2341 90 305 0 +970 217 189 20 484 804 90 0 103 +971 197 178 20 978 1298 90 0 329 +972 60 497 -20 1797 2117 90 659 0 +973 206 312 -30 1920 2240 90 781 0 +974 197 351 20 1197 1517 90 0 816 +975 305 233 -10 2961 3281 90 174 0 +976 297 250 -10 3253 3573 90 293 0 +977 71 348 10 2975 3295 90 0 470 +978 11 269 10 1030 1350 90 0 156 +979 247 447 -20 3040 3360 90 653 0 +980 386 213 -10 1916 2236 90 423 0 +981 292 434 10 675 995 90 0 218 +982 436 301 -10 1293 1613 90 375 0 +983 145 221 -30 628 948 90 554 0 +984 224 96 40 2018 2338 90 0 688 +985 59 128 -20 1416 1736 90 121 0 +986 489 150 -20 1718 2038 90 134 0 +987 152 225 -20 914 1234 90 881 0 +988 426 85 10 547 867 90 0 516 +989 415 73 20 1415 1735 90 0 592 +990 440 70 -20 2291 2611 90 957 0 +991 320 476 30 443 763 90 0 489 +992 57 132 10 1232 1552 90 0 620 +993 405 311 30 166 486 90 0 498 +994 109 250 10 1460 1780 90 0 150 +995 428 314 -20 912 1232 90 670 0 +996 40 288 -10 1713 2033 90 821 0 +997 175 282 10 1046 1366 90 0 220 +998 298 456 -20 2252 2572 90 782 0 +999 208 101 10 547 867 90 0 926 +1000 342 52 10 218 538 90 0 211 +1001 95 475 -20 2845 3165 90 160 0 +1002 432 105 -10 3272 3592 90 588 0 +1003 344 478 -20 2216 2536 90 456 0 +1004 344 46 -30 1580 1900 90 546 0 +1005 53 297 -30 3220 3540 90 522 0 +1006 172 435 -30 2981 3301 90 177 0 +1007 322 78 -20 2384 2704 90 395 0 +1008 200 327 -30 3070 3390 90 239 0 +1009 432 369 -10 2067 2387 90 537 0 +1010 426 279 -30 3032 3352 90 611 0 +1011 226 86 -10 2515 2835 90 761 0 +1012 128 240 -10 3205 3525 90 842 0 +1013 119 285 -40 2983 3303 90 642 0 +1014 354 219 -10 3295 3615 90 645 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2106.txt b/jsprit-instances/instances/lilim/1000/LC2106.txt new file mode 100644 index 00000000..d5e7968f --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2106.txt @@ -0,0 +1,1020 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -20 2549 2934 90 936 0 +2 266 231 -30 1815 2218 90 743 0 +3 89 284 20 1301 1730 90 0 705 +4 430 298 10 1388 1895 90 0 667 +5 435 77 20 891 1274 90 0 681 +6 25 293 -20 2773 3314 90 22 0 +7 43 269 30 558 977 90 0 186 +8 216 117 10 259 760 90 0 453 +9 294 437 -20 494 989 90 338 0 +10 79 479 30 780 1375 90 0 753 +11 365 18 20 2048 2538 90 0 770 +12 225 125 20 127 757 90 0 869 +13 448 103 -10 2964 3578 90 699 0 +14 143 266 10 297 668 90 0 828 +15 252 347 -30 2796 3187 90 67 0 +16 403 390 -10 2376 2903 90 311 0 +17 67 153 20 674 1309 90 0 484 +18 90 168 20 2934 3386 90 0 629 +19 302 235 20 902 1344 90 0 633 +20 259 355 -10 1768 2226 90 184 0 +21 149 183 -10 2903 3473 90 550 0 +22 19 297 20 2087 2637 90 0 6 +23 209 358 30 1360 1753 90 0 973 +24 56 388 -20 1637 2105 90 76 0 +25 115 269 -10 2800 3273 90 289 0 +26 377 356 -20 1747 2104 90 159 0 +27 113 229 -30 958 1447 90 777 0 +28 205 343 -20 696 1267 90 602 0 +29 48 137 20 1598 2156 90 0 787 +30 467 157 -10 2130 2645 90 144 0 +31 220 394 -30 2634 3092 90 519 0 +32 436 54 20 1733 2409 90 0 190 +33 54 357 -20 1525 2028 90 129 0 +34 456 154 10 227 725 90 0 49 +35 216 307 -20 2380 2812 90 567 0 +36 280 224 10 2049 2562 90 0 215 +37 90 270 10 353 938 90 0 627 +38 166 452 -20 425 934 90 379 0 +39 17 283 -20 2391 2936 90 138 0 +40 196 192 -10 1914 2425 90 376 0 +41 94 275 10 286 811 90 0 122 +42 292 445 10 1557 2036 90 0 614 +43 329 471 30 2583 3142 90 0 672 +44 326 57 -20 1216 1672 90 738 0 +45 95 466 -20 2842 3365 90 232 0 +46 429 282 -20 2859 3337 90 286 0 +47 229 364 -10 2405 2778 90 403 0 +48 457 160 10 2855 3286 90 0 384 +49 452 154 -10 223 701 90 34 0 +50 113 289 10 142 459 90 0 557 +51 67 387 -20 2219 2692 90 57 0 +52 368 17 -10 1903 2299 90 935 0 +53 341 367 -30 2322 2899 90 347 0 +54 410 364 30 1685 2159 90 0 357 +55 80 281 10 1602 1992 90 0 161 +56 321 224 -10 1924 2447 90 901 0 +57 73 395 20 1051 1555 90 0 51 +58 259 76 10 784 1232 90 0 488 +59 121 203 10 1634 2109 90 0 897 +60 118 256 10 2296 2901 90 0 642 +61 236 361 -20 1564 2022 90 713 0 +62 78 371 -10 210 692 90 561 0 +63 301 53 20 826 1271 90 0 704 +64 382 197 20 520 921 90 0 267 +65 491 160 20 1839 2298 90 0 81 +66 453 164 10 2861 3471 90 0 796 +67 277 371 30 354 997 90 0 15 +68 272 212 -10 2098 2723 90 709 0 +69 386 218 20 1785 2177 90 0 980 +70 353 32 10 694 1277 90 0 909 +71 59 389 20 1487 2069 90 0 517 +72 414 62 -20 1524 2008 90 957 0 +73 278 357 10 110 608 90 0 187 +74 101 179 -20 2261 2723 90 597 0 +75 396 234 -10 2118 2821 90 723 0 +76 74 390 20 592 1163 90 0 24 +77 332 55 30 211 797 90 0 201 +78 272 365 30 508 1037 90 0 775 +79 418 355 -10 1909 2325 90 800 0 +80 216 380 20 2094 2667 90 0 118 +81 440 173 -20 3101 3619 90 65 0 +82 89 358 -10 3140 3631 90 508 0 +83 66 491 20 1898 2403 90 0 956 +84 317 234 -30 2372 2746 90 330 0 +85 439 297 -30 1862 2384 90 411 0 +86 394 367 30 197 723 90 0 132 +87 58 364 -20 1994 2690 90 462 0 +88 290 75 20 179 690 90 0 295 +89 346 344 10 3043 3541 0 0 1011 +90 131 269 -20 2222 2714 90 401 0 +91 236 96 20 1412 1955 90 0 808 +92 29 282 10 1196 1784 90 0 632 +93 418 385 -20 2586 3088 90 879 0 +94 148 225 -30 501 885 90 554 0 +95 166 464 10 587 1161 90 0 809 +96 266 373 -30 566 1180 90 350 0 +97 201 273 30 54 690 90 0 220 +98 255 245 10 7 329 90 0 224 +99 220 379 -10 2307 2642 90 146 0 +100 85 317 30 2513 2860 90 0 812 +101 125 264 -20 2588 3283 90 666 0 +102 131 253 -20 2529 3248 90 344 0 +103 184 188 -20 1168 1512 90 610 0 +104 128 209 20 850 1496 90 0 393 +105 373 364 -10 2942 3558 90 679 0 +106 389 342 -10 984 1466 90 298 0 +107 420 20 30 383 927 90 0 165 +108 132 218 10 122 650 90 0 850 +109 32 256 -10 730 1231 90 606 0 +110 406 339 20 179 630 90 0 269 +111 191 397 20 158 673 90 0 197 +112 72 341 10 2720 3172 90 0 873 +113 35 308 -10 2908 3396 90 622 0 +114 169 360 20 1993 2512 90 0 332 +115 222 381 -10 2473 2866 90 584 0 +116 96 292 10 668 1217 90 0 961 +117 311 496 -20 549 1066 90 419 0 +118 220 384 -20 2523 3003 90 80 0 +119 259 243 20 11 505 90 0 223 +120 349 476 -20 2267 2860 90 361 0 +121 63 159 20 961 1216 90 0 985 +122 112 243 -10 2101 2701 90 41 0 +123 448 302 -20 2164 2650 90 670 0 +124 343 27 -10 983 1569 90 164 0 +125 67 485 40 1938 2555 90 0 388 +126 220 359 30 1247 1761 90 0 676 +127 147 435 10 1961 2421 90 0 299 +128 317 235 -10 2414 2886 90 482 0 +129 43 355 20 1388 1963 90 0 33 +130 368 340 10 245 836 90 0 778 +131 450 72 -30 2437 2845 90 853 0 +132 400 364 -30 440 859 90 86 0 +133 355 480 20 1512 1880 90 0 558 +134 450 153 20 298 927 90 0 725 +135 126 188 -30 1918 2437 90 638 0 +136 380 223 -30 1483 1906 90 717 0 +137 71 453 -20 504 1025 90 822 0 +138 54 287 20 199 617 90 0 39 +139 420 168 -50 2983 3636 90 986 0 +140 219 89 20 2530 3014 90 0 752 +141 189 327 -20 253 746 90 804 0 +142 191 309 10 1233 1788 90 0 865 +143 301 67 40 348 773 90 0 323 +144 484 161 10 1482 2071 90 0 30 +145 77 483 -10 2389 2849 90 288 0 +146 241 375 10 1810 2347 90 0 99 +147 428 64 -10 1014 1548 90 757 0 +148 403 361 -10 1323 1742 90 356 0 +149 257 336 -30 2930 3442 90 335 0 +150 131 241 -30 2953 3705 90 866 0 +151 63 166 -30 2338 2826 90 421 0 +152 71 368 -40 3051 3610 90 317 0 +153 272 228 10 1895 2330 90 0 615 +154 25 290 30 2710 3192 90 0 949 +155 441 157 10 259 766 90 0 375 +156 13 266 20 1034 1533 90 0 790 +157 251 376 -10 2972 3561 90 238 0 +158 61 170 30 2225 2750 90 0 683 +159 386 357 20 1285 1740 90 0 26 +160 95 475 -20 2797 3213 90 226 0 +161 90 298 -10 1929 2438 90 55 0 +162 71 388 20 1353 1816 90 0 248 +163 383 246 -20 2627 3268 90 646 0 +164 352 38 10 374 1037 90 0 124 +165 395 1 -30 726 1208 90 107 0 +166 120 210 -10 1084 1640 90 405 0 +167 46 383 30 1090 1647 90 0 199 +168 202 198 30 2137 2579 90 0 506 +169 358 365 -10 2134 2677 90 501 0 +170 191 352 20 117 742 90 0 590 +171 470 152 -20 1010 1603 90 468 0 +172 228 124 20 127 646 90 0 188 +173 402 230 -20 2111 2453 90 581 0 +174 323 229 -10 1560 2036 90 303 0 +175 331 486 10 1745 2421 90 0 887 +176 112 208 10 1404 1959 0 0 1017 +177 172 435 -20 2947 3336 90 780 0 +178 326 498 10 862 1340 0 0 1003 +179 460 183 -30 2596 3139 90 766 0 +180 95 279 20 181 728 90 0 806 +181 76 456 30 574 1147 90 0 664 +182 242 350 -10 2595 3187 90 807 0 +183 152 196 10 111 704 90 0 313 +184 268 351 10 1255 1805 90 0 20 +185 360 356 -20 2538 3088 90 246 0 +186 39 296 -30 1899 2228 90 7 0 +187 262 368 -10 967 1517 90 73 0 +188 204 90 -20 956 1392 90 172 0 +189 149 273 -10 103 485 90 308 0 +190 446 86 -20 2838 3433 90 32 0 +191 139 269 20 1577 2039 90 0 740 +192 483 170 30 2073 2481 90 0 954 +193 39 278 10 1430 1933 90 0 938 +194 201 307 10 1550 2036 90 0 882 +195 395 378 -30 1449 1983 90 993 0 +196 139 262 -10 1369 1691 90 997 0 +197 176 447 -20 210 645 90 111 0 +198 67 380 -10 2037 2680 90 750 0 +199 35 358 -30 1322 1831 90 167 0 +200 294 455 30 2331 2682 90 0 577 +201 351 33 -30 517 1085 90 77 0 +202 216 316 20 2139 2659 90 0 884 +203 261 96 40 361 694 90 0 663 +204 238 57 -20 1112 1720 90 838 0 +205 383 18 -10 1452 1993 90 727 0 +206 152 460 10 1141 1639 90 0 433 +207 94 479 -30 2652 3168 90 703 0 +208 337 453 -30 2844 3286 90 840 0 +209 135 460 10 1634 2096 90 0 941 +210 260 104 20 146 669 90 0 575 +211 337 63 -30 1933 2317 90 546 0 +212 32 247 20 651 1112 90 0 304 +213 394 205 -10 274 776 90 745 0 +214 95 294 10 556 1144 90 0 696 +215 253 241 -10 2646 3184 90 36 0 +216 223 90 30 2535 3199 90 0 240 +217 64 473 -30 1079 1649 90 892 0 +218 275 431 -10 963 1680 90 625 0 +219 261 84 10 464 1164 90 0 761 +220 176 296 -30 1057 1563 90 97 0 +221 361 349 -10 2902 3290 90 916 0 +222 168 433 -20 3009 3462 90 765 0 +223 394 10 -20 1050 1448 90 119 0 +224 308 60 -10 609 1104 90 98 0 +225 94 456 -30 3054 3353 90 235 0 +226 73 484 20 2344 2707 90 0 160 +227 277 434 -20 1282 1732 90 810 0 +228 119 232 -40 1720 2318 90 565 0 +229 78 375 10 212 867 90 0 747 +230 366 346 20 472 983 90 0 325 +231 125 181 20 2499 3098 90 0 691 +232 69 493 20 1802 2311 90 0 45 +233 432 80 -20 746 1231 90 530 0 +234 72 391 -10 1181 1803 90 255 0 +235 85 486 30 2468 2967 90 0 225 +236 204 371 -20 565 1093 90 513 0 +237 173 328 -10 2267 2855 90 271 0 +238 280 423 10 754 1308 90 0 157 +239 200 327 -20 2936 3524 90 300 0 +240 241 98 -30 2822 3312 90 216 0 +241 96 356 10 186 707 90 0 695 +242 332 491 -20 1177 1405 90 364 0 +243 81 283 10 1447 1961 90 0 470 +244 373 22 -30 2121 2664 90 510 0 +245 255 371 40 2017 2562 90 0 600 +246 358 359 20 2501 2937 90 0 185 +247 216 93 -10 2470 2636 90 788 0 +248 73 360 -20 2857 3197 90 162 0 +249 305 212 20 991 1480 90 0 830 +250 151 462 10 1290 1675 90 0 386 +251 47 389 -20 918 1446 90 426 0 +252 155 198 30 108 681 90 0 893 +253 152 457 -30 1028 1566 90 572 0 +254 329 48 -10 1333 1937 90 408 0 +255 88 394 10 560 1054 90 0 234 +256 153 295 -40 3211 3713 90 378 0 +257 81 373 10 421 919 90 0 467 +258 163 453 10 616 929 90 0 444 +259 378 25 -30 2227 2750 90 294 0 +260 401 385 -10 2697 3191 90 339 0 +261 184 340 -10 2646 3049 90 816 0 +262 402 362 -20 1158 1723 90 446 0 +263 70 482 -20 2143 2719 90 391 0 +264 357 445 -20 3079 3455 90 366 0 +265 212 71 -10 1043 1525 90 555 0 +266 231 81 30 2188 2777 90 0 283 +267 379 208 -20 656 1173 90 64 0 +268 236 95 30 1991 2403 90 0 984 +269 386 344 -20 1101 1536 90 110 0 +270 189 200 -20 1738 2400 90 943 0 +271 296 253 10 724 1105 90 0 237 +272 73 303 -20 2258 2697 90 694 0 +273 30 162 -10 1909 2454 90 914 0 +274 230 95 20 1742 2216 0 0 1016 +275 57 131 10 1291 1675 90 0 677 +276 379 245 10 2626 3080 0 0 1018 +277 107 221 -10 284 945 90 903 0 +278 154 458 20 972 1438 90 0 711 +279 290 417 10 171 668 90 0 969 +280 272 243 30 23 642 90 0 402 +281 94 130 10 448 914 0 0 1012 +282 222 356 20 1411 1964 90 0 878 +283 243 108 -30 2897 3384 90 266 0 +284 224 93 20 2019 2523 90 0 831 +285 155 242 10 666 1266 90 0 538 +286 440 302 20 1114 1604 90 0 46 +287 221 102 -30 2727 3149 90 562 0 +288 52 484 10 1592 1931 90 0 145 +289 111 244 10 2089 2530 90 0 25 +290 132 273 -30 2036 2530 90 613 0 +291 228 186 20 119 580 90 0 971 +292 221 374 30 878 1543 90 0 668 +293 406 286 -30 3039 3664 90 520 0 +294 390 9 30 1053 1632 90 0 259 +295 335 52 -20 1587 2095 90 88 0 +296 189 368 20 132 605 90 0 872 +297 397 40 -10 2303 2838 90 451 0 +298 408 305 10 248 750 90 0 106 +299 156 434 -10 2608 3283 90 127 0 +300 180 335 20 2395 2926 90 0 239 +301 327 483 20 1936 2421 90 0 489 +302 363 62 -10 3048 3605 90 490 0 +303 375 342 10 742 1296 90 0 174 +304 16 280 -20 2594 3100 90 212 0 +305 277 431 -20 1174 1653 90 448 0 +306 110 241 -20 1953 2479 90 316 0 +307 48 385 -40 783 1394 90 459 0 +308 152 260 10 98 475 90 0 189 +309 255 120 10 130 591 90 0 771 +310 214 382 30 2351 2791 0 0 1014 +311 414 384 10 2527 2957 90 0 16 +312 232 378 -10 2024 2525 90 348 0 +313 80 141 -10 340 807 90 183 0 +314 188 330 30 386 801 90 0 441 +315 157 192 -20 3049 3532 90 643 0 +316 101 237 20 1700 2122 90 0 306 +317 74 360 40 2660 3212 90 0 152 +318 267 260 20 385 793 90 0 755 +319 378 46 -20 2896 3445 90 621 0 +320 420 311 -10 660 1286 90 322 0 +321 384 217 20 1615 2163 90 0 349 +322 418 300 10 473 909 90 0 320 +323 356 77 -40 2026 2633 90 143 0 +324 253 244 -10 2501 3142 90 733 0 +325 323 258 -20 1160 1657 90 230 0 +326 293 454 20 2394 2987 90 0 979 +327 231 97 -10 2743 3192 90 803 0 +328 316 234 -20 2544 2938 90 634 0 +329 207 196 -20 2309 2982 90 472 0 +330 321 228 30 2046 2514 90 0 84 +331 382 17 -20 1616 2012 90 576 0 +332 206 326 -20 3119 3533 90 114 0 +333 198 284 10 62 632 90 0 540 +334 137 186 10 2688 3297 0 0 1008 +335 229 396 30 2666 3258 90 0 149 +336 268 235 -30 1648 2195 90 579 0 +337 95 243 20 603 1074 90 0 563 +338 297 430 20 250 667 90 0 9 +339 393 368 10 317 787 90 0 260 +340 66 391 -10 1469 1892 90 811 0 +341 189 339 -20 2726 3160 90 769 0 +342 280 351 30 105 565 90 0 491 +343 241 77 30 987 1623 90 0 380 +344 134 265 20 2441 3050 90 0 102 +345 420 95 30 230 634 90 0 988 +346 111 279 -20 141 662 90 582 0 +347 367 358 30 2009 2417 90 0 53 +348 239 373 10 1747 2223 90 0 312 +349 384 235 -20 2449 3055 90 321 0 +350 284 360 30 115 726 90 0 96 +351 325 75 -20 2212 2689 90 531 0 +352 279 369 10 312 853 90 0 958 +353 340 449 -20 2926 3394 90 874 0 +354 275 448 -20 2796 3168 90 847 0 +355 447 88 20 2754 3332 0 0 1002 +356 314 279 10 113 586 90 0 148 +357 434 377 -30 2115 2736 90 54 0 +358 67 377 -30 1952 2579 90 398 0 +359 370 353 10 586 1065 90 0 902 +360 57 367 -20 1898 2600 90 763 0 +361 332 486 20 1681 2304 90 0 120 +362 386 361 30 1389 1824 90 0 854 +363 55 282 40 293 477 90 0 821 +364 317 467 20 269 738 90 0 242 +365 335 54 -10 1675 2192 90 932 0 +366 348 466 20 2389 2937 90 0 264 +367 132 314 -10 3127 3460 90 944 0 +368 328 216 -20 1756 2228 90 603 0 +369 416 48 10 1727 2193 90 0 774 +370 370 55 -20 2691 3241 90 515 0 +371 149 434 30 1999 2568 90 0 888 +372 466 169 30 2268 2896 90 0 410 +373 141 267 10 1419 2011 90 0 880 +374 258 350 -20 1663 2140 90 390 0 +375 428 312 -10 882 1445 90 155 0 +376 211 188 10 461 1019 90 0 40 +377 50 343 10 2524 3143 90 0 609 +378 107 311 40 2609 3176 90 0 256 +379 178 441 20 204 815 90 0 38 +380 232 85 -30 2129 2649 90 343 0 +381 391 23 -20 2470 3086 90 607 0 +382 137 227 20 115 770 90 0 551 +383 161 203 20 100 507 90 0 636 +384 363 212 -10 3103 3605 90 48 0 +385 384 346 20 1183 1639 0 0 1010 +386 166 434 -10 2813 3278 90 250 0 +387 274 248 -10 154 626 90 921 0 +388 156 421 -40 3224 3629 90 125 0 +389 346 211 10 103 432 90 0 487 +390 265 358 20 1271 1593 90 0 374 +391 96 407 20 237 791 90 0 263 +392 443 70 20 2322 2767 90 0 592 +393 125 212 -20 911 1623 90 104 0 +394 361 337 50 167 718 90 0 660 +395 322 78 20 2246 2842 90 0 779 +396 481 156 20 1392 1969 0 0 1004 +397 188 293 30 756 1078 90 0 945 +398 76 408 30 849 1352 90 0 358 +399 130 304 -10 2998 3512 90 906 0 +400 378 363 30 1516 2141 90 0 649 +401 185 301 20 1128 1693 90 0 90 +402 385 235 -30 2402 2920 90 280 0 +403 261 350 10 1562 2056 90 0 47 +404 389 33 -20 2830 3296 90 849 0 +405 151 214 10 278 905 90 0 166 +406 265 94 10 156 708 90 0 547 +407 65 164 -30 2361 2990 90 605 0 +408 293 81 10 174 676 90 0 254 +409 363 55 10 2909 3216 0 0 1005 +410 465 176 -30 2333 3024 90 372 0 +411 428 298 30 1481 1987 90 0 85 +412 75 379 30 2402 2893 90 0 698 +413 404 378 -20 718 1156 90 689 0 +414 203 203 -30 2675 3185 90 955 0 +415 259 88 20 385 865 90 0 843 +416 362 17 -20 1759 2169 90 749 0 +417 320 258 20 394 894 90 0 739 +418 59 358 -20 2137 2739 90 754 0 +419 316 453 20 213 672 90 0 117 +420 225 192 20 63 669 90 0 601 +421 140 206 30 232 743 90 0 151 +422 83 151 -20 194 686 90 449 0 +423 366 196 10 127 631 90 0 662 +424 108 245 -30 1584 2037 90 552 0 +425 129 267 10 2299 2822 90 0 930 +426 57 379 20 774 1201 90 0 251 +427 329 56 20 1259 1816 90 0 454 +428 213 363 -10 1035 1594 90 542 0 +429 76 391 -10 1093 1702 90 718 0 +430 330 259 30 974 1648 90 0 724 +431 136 217 30 756 1200 90 0 452 +432 165 333 -20 2120 2802 90 690 0 +433 160 431 -10 3067 3601 90 206 0 +434 338 489 -10 1164 1611 90 500 0 +435 335 64 -30 1752 2314 90 861 0 +436 412 361 10 1585 2072 90 0 805 +437 259 90 30 433 1001 90 0 438 +438 265 77 -30 628 1196 90 437 0 +439 460 173 20 2723 3211 90 0 645 +440 83 301 20 2086 2668 90 0 564 +441 201 331 -30 493 1080 90 314 0 +442 118 214 20 136 592 90 0 504 +443 395 30 -10 2687 3066 90 496 0 +444 125 444 -10 1836 2318 90 258 0 +445 283 248 30 33 376 90 0 748 +446 391 334 20 873 1380 90 0 262 +447 212 215 -30 3093 3387 90 505 0 +448 276 428 20 959 1297 90 0 305 +449 96 152 20 182 655 90 0 422 +450 425 85 10 427 806 90 0 990 +451 336 7 10 1446 1883 90 0 297 +452 196 219 -30 2836 3431 90 431 0 +453 210 94 -10 811 1342 90 8 0 +454 310 81 -20 2688 3165 90 427 0 +455 341 37 20 342 685 90 0 678 +456 344 478 -30 2092 2661 90 820 0 +457 406 37 40 264 700 90 0 518 +458 69 346 -10 2744 3339 90 657 0 +459 80 376 40 243 730 90 0 307 +460 314 449 -30 209 739 90 826 0 +461 209 201 -10 2586 3081 90 528 0 +462 88 379 20 450 1089 90 0 87 +463 352 500 -20 1366 1804 90 735 0 +464 65 357 -10 2236 2832 90 502 0 +465 345 15 20 1264 1860 90 0 701 +466 125 245 20 2858 3307 90 0 817 +467 52 369 -10 1884 2423 90 257 0 +468 449 140 20 543 1078 90 0 171 +469 430 310 30 1020 1493 90 0 982 +470 109 325 -10 2847 3329 90 243 0 +471 446 139 20 414 1021 90 0 818 +472 229 214 20 41 617 90 0 329 +473 197 301 10 73 550 90 0 511 +474 146 245 -30 466 1087 90 587 0 +475 401 368 20 452 1036 90 0 512 +476 116 259 -20 2421 2965 90 716 0 +477 374 55 -20 2537 3206 90 685 0 +478 249 251 -30 2933 3298 90 728 0 +479 325 490 -20 746 1260 90 730 0 +480 59 159 10 947 1419 90 0 992 +481 186 177 20 1203 1680 90 0 503 +482 319 229 10 2126 2618 90 0 128 +483 26 269 30 865 1305 90 0 619 +484 53 139 -20 1017 1571 90 17 0 +485 471 154 20 1170 1628 90 0 583 +486 301 247 -20 3059 3578 90 793 0 +487 388 220 -10 1277 1729 90 389 0 +488 235 81 -10 1343 1717 90 58 0 +489 347 479 -20 2153 2785 90 301 0 +490 367 59 10 3039 3459 90 0 302 +491 261 370 -30 976 1323 90 342 0 +492 441 287 40 2652 3339 90 0 611 +493 44 153 -20 1884 2266 90 658 0 +494 263 351 -10 1409 1840 90 960 0 +495 444 157 10 215 515 90 0 908 +496 374 17 10 1734 2276 90 0 443 +497 448 295 10 2501 3107 90 0 931 +498 446 297 -10 2084 2539 90 852 0 +499 347 40 -10 333 888 90 1000 0 +500 318 493 10 721 1090 90 0 434 +501 399 352 10 1094 1587 90 0 169 +502 51 364 10 1700 2234 90 0 464 +503 250 217 -20 2435 2794 90 481 0 +504 107 225 -20 265 775 90 442 0 +505 173 208 30 1669 2254 90 0 447 +506 204 189 -30 2147 2769 90 168 0 +507 399 379 -10 2786 3293 90 537 0 +508 79 346 10 2990 3470 90 0 82 +509 360 338 10 140 618 90 0 580 +510 390 17 30 1226 1839 90 0 244 +511 207 337 -10 605 1165 90 473 0 +512 409 361 -20 907 1366 90 475 0 +513 206 377 20 366 911 90 0 236 +514 429 294 10 1760 2286 0 0 1009 +515 375 31 20 2060 2471 90 0 370 +516 426 80 20 602 1003 90 0 953 +517 74 374 -20 2534 2950 90 71 0 +518 408 20 -40 282 825 90 457 0 +519 239 369 30 1613 2169 90 0 31 +520 420 308 30 644 934 90 0 293 +521 254 357 20 1901 2284 90 0 962 +522 53 297 -10 3203 3558 90 978 0 +523 434 382 -10 2123 2537 90 541 0 +524 204 171 20 789 1288 90 0 886 +525 173 169 -20 1471 1805 90 970 0 +526 190 332 -10 387 985 90 911 0 +527 274 231 -10 1841 2572 90 560 0 +528 207 194 10 2250 2856 90 0 461 +529 315 232 10 2580 3086 90 0 975 +530 425 87 20 247 802 90 0 233 +531 312 64 20 368 956 90 0 351 +532 129 244 -10 2794 3183 90 612 0 +533 278 230 -20 1218 1874 90 823 0 +534 351 75 -10 2051 2417 90 898 0 +535 185 293 -10 697 1323 90 891 0 +536 364 364 -20 2011 2609 90 792 0 +537 432 369 10 1922 2532 90 0 507 +538 128 249 -10 1100 1746 90 285 0 +539 221 179 20 153 745 90 0 635 +540 194 296 -10 490 970 90 333 0 +541 413 350 10 1361 1913 90 0 523 +542 214 372 10 657 1389 90 0 428 +543 379 229 10 862 1389 90 0 813 +544 91 298 -10 1854 2332 90 862 0 +545 226 120 30 132 692 90 0 720 +546 344 46 30 1473 2008 90 0 211 +547 238 84 -10 1380 2049 90 406 0 +548 138 276 -20 1734 2256 90 742 0 +549 346 487 -30 1623 2153 90 991 0 +550 95 160 10 179 704 90 0 21 +551 103 266 -20 1035 1250 90 382 0 +552 98 286 30 1202 1632 90 0 424 +553 77 172 -20 2884 3227 90 768 0 +554 147 199 30 126 649 90 0 94 +555 210 98 10 493 1108 90 0 265 +556 428 292 -20 1657 2205 90 995 0 +557 121 236 -10 1912 2316 90 50 0 +558 336 479 -20 1979 2578 90 133 0 +559 203 369 10 652 1190 90 0 794 +560 296 232 10 1109 1586 90 0 527 +561 87 369 10 201 839 90 0 62 +562 247 88 30 1765 2242 90 0 287 +563 104 246 -20 1113 1753 90 337 0 +564 67 302 -20 2329 2817 90 440 0 +565 114 296 40 143 623 90 0 228 +566 394 356 -30 178 628 90 589 0 +567 192 306 20 1364 1843 90 0 35 +568 16 285 -20 2277 2866 90 833 0 +569 419 310 10 572 1192 90 0 714 +570 389 221 -20 1240 1583 90 729 0 +571 129 264 20 2587 3095 90 0 842 +572 172 483 30 793 1175 90 0 253 +573 325 251 20 1241 1769 90 0 844 +574 151 436 10 2250 2682 90 0 904 +575 263 91 -20 188 676 90 210 0 +576 401 15 20 634 897 90 0 331 +577 253 382 -30 2946 3394 90 200 0 +578 247 89 -20 1894 2295 90 924 0 +579 283 229 30 1218 1684 90 0 336 +580 366 341 -10 362 903 90 509 0 +581 392 213 20 1900 2445 90 0 173 +582 167 304 20 99 701 90 0 346 +583 477 154 -20 1359 1812 90 485 0 +584 234 383 10 1965 2393 90 0 115 +585 199 327 -20 2922 3355 90 940 0 +586 140 220 -30 668 1098 90 987 0 +587 144 266 30 141 641 90 0 474 +588 432 105 -20 3152 3592 90 661 0 +589 368 325 30 139 661 90 0 566 +590 202 386 -20 228 670 90 170 0 +591 325 246 -20 1280 1921 90 722 0 +592 430 86 -20 2586 3107 90 392 0 +593 200 195 -10 1948 2581 90 623 0 +594 440 295 30 1976 2455 90 0 976 +595 77 287 -20 1668 2301 90 860 0 +596 187 362 20 1556 2176 90 0 628 +597 131 207 20 967 1191 90 0 74 +598 405 5 20 617 1115 90 0 706 +599 125 226 -20 1204 1734 90 855 0 +600 254 335 -40 2854 3333 90 245 0 +601 212 168 -20 697 1182 90 420 0 +602 281 279 20 592 996 90 0 28 +603 326 241 20 1472 1919 90 0 368 +604 152 241 -10 648 1099 90 859 0 +605 71 139 30 721 1053 90 0 407 +606 46 277 10 463 874 90 0 109 +607 393 13 20 1208 1667 90 0 381 +608 87 454 40 744 1179 90 0 799 +609 86 359 -10 3067 3603 90 377 0 +610 220 192 20 65 645 90 0 103 +611 426 279 -40 2979 3405 90 492 0 +612 131 267 10 2470 2834 90 0 532 +613 200 297 30 395 872 90 0 290 +614 299 442 -10 1791 2178 90 42 0 +615 265 218 -10 2284 2735 90 153 0 +616 398 231 -20 2147 2605 90 946 0 +617 312 74 20 2610 3049 90 0 899 +618 99 307 -20 2602 2985 90 881 0 +619 22 283 -30 1089 1697 90 483 0 +620 67 160 10 2530 3010 90 0 933 +621 390 42 20 2437 2900 90 0 319 +622 44 279 10 409 744 90 0 113 +623 200 182 10 938 1528 90 0 593 +624 458 303 -40 2452 2770 90 654 0 +625 298 438 10 491 803 90 0 218 +626 62 301 20 3152 3630 0 0 1006 +627 112 251 -10 1461 1964 90 37 0 +628 184 354 -20 1793 2319 90 596 0 +629 140 180 -20 2884 3293 90 18 0 +630 269 428 20 986 1463 90 0 998 +631 123 206 -20 1720 2211 90 983 0 +632 36 284 -10 1484 2072 90 92 0 +633 272 233 -20 1602 2053 90 19 0 +634 320 231 20 2214 2714 90 0 328 +635 211 180 -20 569 1107 90 539 0 +636 114 169 -20 2519 2866 90 383 0 +637 245 239 -20 2758 3269 90 773 0 +638 117 204 30 1481 2075 90 0 135 +639 316 254 -10 558 1102 90 942 0 +640 169 443 30 328 832 90 0 951 +641 212 96 -10 734 1233 90 999 0 +642 119 285 -10 2897 3388 90 60 0 +643 71 163 20 2663 3067 90 0 315 +644 78 361 -20 3169 3620 90 947 0 +645 354 219 -20 3198 3712 90 439 0 +646 389 233 20 2350 2783 90 0 163 +647 90 391 -30 383 859 90 905 0 +648 209 307 10 1634 2149 90 0 781 +649 363 351 -30 2754 3253 90 400 0 +650 405 47 10 255 919 90 0 863 +651 278 329 10 83 605 90 0 907 +652 261 371 -30 881 1236 90 827 0 +653 302 470 20 2051 2564 90 0 834 +654 373 205 40 130 708 90 0 624 +655 381 20 -10 1736 2079 90 693 0 +656 90 277 -20 475 1009 90 665 0 +657 46 341 10 2541 2938 90 0 458 +658 50 138 20 1660 2277 90 0 493 +659 61 437 20 265 630 90 0 760 +660 331 252 -50 1008 1420 90 394 0 +661 440 81 20 2494 2995 90 0 588 +662 384 206 -10 562 1077 90 423 0 +663 232 87 -40 1318 1850 90 203 0 +664 59 471 -30 1347 1781 90 181 0 +665 174 304 20 93 482 90 0 656 +666 106 248 20 1243 1809 90 0 101 +667 410 287 -10 3095 3505 90 4 0 +668 206 313 -30 1966 2376 90 292 0 +669 412 367 20 809 1271 90 0 702 +670 412 300 20 385 805 90 0 123 +671 206 295 10 2657 3120 90 0 959 +672 329 459 -30 2653 3276 90 43 0 +673 177 436 20 199 699 90 0 857 +674 266 264 30 421 945 90 0 767 +675 308 235 10 2928 3502 0 0 1013 +676 260 330 -30 3075 3491 90 126 0 +677 49 136 -10 1509 2061 90 275 0 +678 356 28 -20 872 1288 90 455 0 +679 428 384 10 2253 2795 90 0 105 +680 220 362 -20 1225 1597 90 890 0 +681 437 61 -20 1900 2436 90 5 0 +682 365 360 20 1850 2390 90 0 939 +683 107 168 -30 2334 2855 90 158 0 +684 220 177 20 268 815 90 0 968 +685 347 21 20 1345 1588 90 0 477 +686 293 245 -20 3298 3722 90 819 0 +687 267 436 30 2805 3368 90 0 845 +688 216 96 -20 2429 2863 90 712 0 +689 383 351 20 167 796 90 0 413 +690 289 240 20 762 1276 90 0 432 +691 129 185 -20 2692 3095 90 231 0 +692 291 450 -40 2515 3055 90 927 0 +693 387 21 10 1425 1830 90 0 655 +694 116 255 20 1029 1609 90 0 272 +695 50 368 -10 1856 2267 90 241 0 +696 121 249 -10 2270 2733 90 214 0 +697 404 346 -40 1005 1480 90 825 0 +698 77 360 -30 3155 3619 90 412 0 +699 447 102 10 2943 3578 90 0 13 +700 366 16 20 1738 2377 90 0 952 +701 348 16 -20 1616 2104 90 465 0 +702 353 346 -20 2875 3514 90 669 0 +703 54 485 30 1521 2185 90 0 207 +704 319 77 -20 2455 2820 90 63 0 +705 83 282 -20 1323 1902 90 3 0 +706 384 24 -20 2461 2901 90 598 0 +707 52 469 -20 1208 1725 90 801 0 +708 199 200 -10 2842 3207 90 875 0 +709 273 234 10 1430 2041 90 0 68 +710 16 281 -20 2534 2979 90 928 0 +711 151 442 -20 2276 2848 90 278 0 +712 223 114 20 176 647 90 0 688 +713 191 308 20 82 549 90 0 61 +714 448 297 -10 2546 2878 90 569 0 +715 386 28 -20 2308 2865 90 912 0 +716 106 295 20 888 1378 90 0 476 +717 387 224 30 1369 1825 90 0 136 +718 96 377 10 199 664 90 0 429 +719 86 361 20 3096 3626 0 0 1007 +720 211 107 -30 405 816 90 545 0 +721 43 125 -30 1474 1892 90 963 0 +722 369 351 20 753 1084 90 0 591 +723 388 228 10 1091 1538 90 0 75 +724 325 228 -30 1647 2134 90 430 0 +725 490 159 -20 1732 2222 90 134 0 +726 420 78 20 1189 1766 90 0 785 +727 396 4 10 849 1457 90 0 205 +728 222 317 30 2214 2775 90 0 478 +729 389 198 20 349 898 90 0 570 +730 322 454 20 216 708 90 0 479 +731 241 391 -30 2869 3262 90 829 0 +732 256 117 -20 2985 3508 90 896 0 +733 298 255 10 48 724 90 0 324 +734 74 363 -10 2651 3035 90 758 0 +735 345 496 20 1170 1804 90 0 463 +736 167 169 20 1464 2003 90 0 848 +737 23 306 20 2019 2506 90 0 950 +738 317 62 20 502 1012 90 0 44 +739 319 257 -20 527 944 90 417 0 +740 129 255 -20 2593 2999 90 191 0 +741 59 377 20 1946 2390 90 0 868 +742 138 272 20 1652 2149 90 0 548 +743 317 251 30 792 1248 90 0 2 +744 279 436 -10 1423 1776 90 981 0 +745 371 207 10 128 642 90 0 213 +746 263 372 10 770 1162 90 0 764 +747 50 347 -10 2433 2852 90 229 0 +748 275 236 -30 1357 1929 90 445 0 +749 334 47 20 219 638 90 0 416 +750 50 383 10 1655 2282 90 0 198 +751 170 338 -10 2151 2578 90 783 0 +752 245 109 -20 2897 3441 90 140 0 +753 69 475 -30 1041 1496 90 10 0 +754 54 372 20 1775 2367 90 0 418 +755 198 334 -20 1985 2581 90 318 0 +756 380 228 30 925 1508 90 0 934 +757 425 118 10 219 705 90 0 147 +758 80 398 10 698 1114 90 0 734 +759 366 57 -10 2924 3388 90 864 0 +760 67 463 -20 339 989 90 659 0 +761 226 86 -10 2450 2900 90 219 0 +762 59 480 -10 1435 1892 90 877 0 +763 40 378 20 1230 1703 90 0 360 +764 250 367 -10 1917 2468 90 746 0 +765 157 436 20 2593 3112 90 0 222 +766 463 161 30 2220 2747 90 0 179 +767 266 250 -30 321 657 90 674 0 +768 51 162 20 2003 2582 90 0 553 +769 194 353 20 1193 1709 90 0 341 +770 383 41 -20 2541 2990 90 11 0 +771 247 82 -10 1656 2160 90 309 0 +772 457 142 20 670 1148 90 0 791 +773 244 94 20 1697 2054 90 0 637 +774 441 63 -10 2104 2605 90 369 0 +775 244 371 -30 2080 2700 90 78 0 +776 174 444 10 263 706 90 0 856 +777 94 247 30 669 1196 90 0 27 +778 320 225 -10 1879 2309 90 130 0 +779 316 80 -20 2469 2994 90 395 0 +780 155 447 20 2555 2948 90 0 177 +781 211 308 -10 1696 2271 90 648 0 +782 297 442 20 1625 2159 90 0 851 +783 200 342 10 869 1284 90 0 751 +784 44 325 -20 2968 3553 90 996 0 +785 438 60 -20 1990 2530 90 726 0 +786 80 374 20 264 893 90 0 802 +787 59 163 -20 2191 2591 90 29 0 +788 236 92 10 2008 2573 90 0 247 +789 414 66 -10 1440 1904 90 885 0 +790 34 279 -20 1285 1888 90 156 0 +791 475 156 -20 1181 1806 90 772 0 +792 404 310 20 165 666 90 0 536 +793 367 239 20 2983 3490 90 0 486 +794 210 359 -10 1384 1912 90 559 0 +795 133 278 -40 1856 2324 90 923 0 +796 446 169 -10 3054 3475 90 66 0 +797 188 356 20 1587 2337 90 0 948 +798 312 252 -20 690 1159 90 967 0 +799 69 485 -40 2107 2569 90 608 0 +800 413 353 10 1516 1945 90 0 79 +801 54 446 20 277 559 90 0 707 +802 56 357 -20 1637 2099 90 786 0 +803 230 105 10 2762 3313 90 0 327 +804 196 302 20 113 594 90 0 141 +805 391 373 -10 2851 3428 90 436 0 +806 101 295 -20 788 1289 90 180 0 +807 234 350 10 2525 2869 90 0 182 +808 215 108 -20 2671 3008 90 91 0 +809 142 457 -10 1402 1943 90 95 0 +810 283 425 20 655 1221 90 0 227 +811 77 397 10 729 1269 90 0 340 +812 105 317 -30 2749 3229 90 100 0 +813 382 213 -10 1598 1992 90 543 0 +814 213 76 20 1093 1666 90 0 917 +815 417 56 20 1654 2070 90 0 883 +816 183 340 10 2525 2988 90 0 261 +817 123 242 -20 2963 3577 90 466 0 +818 475 136 -20 907 1311 90 471 0 +819 377 246 20 2890 3379 90 0 686 +820 310 484 30 449 962 90 0 456 +821 47 280 -40 249 717 90 363 0 +822 57 456 20 282 805 90 0 137 +823 313 266 20 258 647 90 0 533 +824 475 145 30 965 1450 90 0 832 +825 400 376 40 541 1143 90 0 697 +826 290 416 30 170 877 90 0 460 +827 277 369 30 256 725 90 0 652 +828 91 303 -10 2017 2540 90 14 0 +829 194 301 30 249 643 90 0 731 +830 254 238 -20 2376 3076 90 249 0 +831 215 91 -20 2074 2667 90 284 0 +832 500 162 -30 1905 2431 90 824 0 +833 56 287 20 197 679 90 0 568 +834 289 452 -20 2632 3124 90 653 0 +835 378 326 30 148 691 90 0 889 +836 197 350 30 1037 1496 90 0 974 +837 243 88 20 1515 2106 90 0 920 +838 250 72 20 946 1465 90 0 204 +839 101 290 20 1005 1456 90 0 994 +840 351 480 30 1482 2098 90 0 208 +841 67 357 -10 2887 3362 90 915 0 +842 128 240 -20 3138 3593 90 571 0 +843 253 81 -20 798 1413 90 415 0 +844 307 227 -20 2688 3178 90 573 0 +845 233 441 -30 3024 3586 90 687 0 +846 311 47 -20 894 1406 90 922 0 +847 292 456 20 2305 2891 90 0 354 +848 183 187 -20 1568 2128 90 736 0 +849 392 31 20 2741 3199 90 0 404 +850 103 251 -10 1104 1572 90 108 0 +851 300 443 -20 1835 2317 90 782 0 +852 420 295 10 1547 2117 90 0 498 +853 427 64 30 1129 1615 90 0 131 +854 372 354 -30 1803 2238 90 362 0 +855 101 263 20 1038 1434 90 0 599 +856 141 454 -10 1497 2035 90 776 0 +857 146 461 -20 1389 1765 90 673 0 +858 298 430 -30 362 737 90 929 0 +859 148 270 10 103 609 90 0 604 +860 76 287 20 1710 2078 90 0 595 +861 308 55 30 711 1192 90 0 435 +862 143 257 10 360 802 90 0 544 +863 393 2 -10 871 1247 90 650 0 +864 385 28 10 2091 2641 90 0 759 +865 204 291 -10 2733 3234 90 142 0 +866 132 272 30 2181 2567 90 0 150 +867 206 379 10 317 777 90 0 900 +868 69 383 -20 2308 2793 90 741 0 +869 245 96 -20 1561 2004 90 12 0 +870 431 301 10 1316 1781 90 0 966 +871 448 94 -20 3014 3454 90 989 0 +872 199 305 -20 1356 2044 90 296 0 +873 95 356 -10 3122 3637 90 112 0 +874 328 498 20 967 1419 90 0 353 +875 108 222 10 1305 1849 90 0 708 +876 341 26 10 1096 1640 90 0 918 +877 63 454 10 278 851 90 0 762 +878 222 357 -20 1406 1788 90 282 0 +879 416 364 20 1750 2285 90 0 93 +880 127 278 -10 1969 2404 90 373 0 +881 140 252 20 353 1001 90 0 618 +882 218 298 -10 2482 3091 90 194 0 +883 432 87 -20 2650 3226 90 815 0 +884 216 300 -20 2461 2926 90 202 0 +885 438 72 10 962 1395 90 0 789 +886 184 178 -20 1286 1782 90 524 0 +887 345 468 -10 2530 2984 90 175 0 +888 150 435 -30 2081 2668 90 371 0 +889 395 365 -30 185 722 90 835 0 +890 208 371 20 540 929 90 0 680 +891 190 292 10 559 1092 90 0 535 +892 78 479 30 926 1412 90 0 217 +893 104 198 -30 2166 2601 90 252 0 +894 346 13 20 1431 2102 90 0 910 +895 47 388 20 981 1566 90 0 977 +896 315 57 20 971 1532 90 0 732 +897 110 199 -10 2113 2462 90 59 0 +898 323 60 10 1102 1598 90 0 534 +899 308 82 -20 2764 3274 90 617 0 +900 216 374 -10 900 1330 90 867 0 +901 326 253 10 820 1417 90 0 56 +902 308 232 -10 2788 3267 90 359 0 +903 118 223 10 217 621 90 0 277 +904 149 444 -10 2445 2864 90 574 0 +905 95 395 30 212 717 90 0 647 +906 117 319 10 2922 3454 90 0 399 +907 262 352 -10 1435 1998 90 651 0 +908 468 135 -10 830 1193 90 495 0 +909 351 31 -10 652 1133 90 70 0 +910 361 15 -20 1980 2416 90 894 0 +911 195 300 10 256 820 90 0 526 +912 397 27 20 2209 2727 90 0 715 +913 179 311 10 118 665 90 0 937 +914 77 133 10 503 1074 90 0 273 +915 66 397 10 895 1516 90 0 841 +916 366 352 10 2667 3152 90 0 221 +917 221 87 -20 1206 1761 90 814 0 +918 347 23 -10 942 1419 90 876 0 +919 176 358 -10 1934 2377 90 964 0 +920 229 78 -20 2373 2780 90 837 0 +921 272 246 10 22 606 90 0 387 +922 293 67 20 187 651 90 0 846 +923 140 265 40 1313 1933 90 0 795 +924 238 83 20 1388 1858 90 0 578 +925 136 296 30 3097 3612 0 0 1015 +926 218 98 30 1837 2327 90 0 965 +927 290 440 40 1370 2033 90 0 692 +928 29 302 20 1991 2339 90 0 710 +929 290 425 30 179 770 90 0 858 +930 124 247 -10 2878 3471 90 425 0 +931 442 287 -10 2648 3160 90 497 0 +932 294 64 10 191 769 90 0 365 +933 74 165 -10 2733 3184 90 620 0 +934 382 245 -30 2811 3266 90 756 0 +935 405 24 10 274 923 90 0 52 +936 211 97 20 683 1101 90 0 1 +937 88 390 -10 478 948 90 913 0 +938 37 295 -10 1705 2238 90 193 0 +939 359 371 -20 2311 2692 90 682 0 +940 186 372 20 1538 1993 90 0 585 +941 116 446 -10 1688 2269 90 209 0 +942 293 249 10 43 505 90 0 639 +943 83 228 20 475 984 90 0 270 +944 96 269 10 715 1375 90 0 367 +945 179 284 -30 890 1332 90 397 0 +946 368 219 20 793 1248 90 0 616 +947 66 359 20 2939 3535 90 0 644 +948 189 338 -20 2765 3303 90 797 0 +949 163 277 -30 3282 3733 90 154 0 +950 5 296 -20 2319 2613 90 737 0 +951 152 478 -30 872 1317 90 640 0 +952 366 34 -20 1910 2421 90 700 0 +953 429 80 -20 583 1208 90 516 0 +954 464 178 -30 2477 3065 90 192 0 +955 138 196 30 1926 2220 90 0 414 +956 87 481 -20 2595 3032 90 83 0 +957 425 99 20 231 769 90 0 72 +958 241 362 -10 2306 2674 90 352 0 +959 207 289 -10 2771 3383 90 671 0 +960 264 365 10 1009 1661 90 0 494 +961 102 289 -10 1062 1582 90 116 0 +962 233 346 -20 2550 3031 90 521 0 +963 78 141 30 203 791 90 0 721 +964 196 348 10 948 1400 90 0 919 +965 216 92 -30 2165 2759 90 926 0 +966 444 309 -10 2189 2821 90 870 0 +967 313 263 20 320 772 90 0 798 +968 211 198 -20 2507 2972 90 684 0 +969 314 436 -10 1951 2411 90 279 0 +970 217 189 20 419 869 90 0 525 +971 197 178 -20 874 1402 90 291 0 +972 60 497 10 1677 2236 0 0 1001 +973 206 312 -30 1790 2370 90 23 0 +974 197 351 -30 1119 1596 90 836 0 +975 305 233 -10 2899 3342 90 529 0 +976 297 250 -30 2978 3777 90 594 0 +977 71 348 -20 2904 3365 90 895 0 +978 11 269 10 924 1457 90 0 522 +979 247 447 -20 3024 3375 90 326 0 +980 386 213 -20 1685 2467 90 69 0 +981 292 434 10 591 1079 90 0 744 +982 436 301 -30 1095 1811 90 469 0 +983 145 221 20 517 1058 90 0 631 +984 224 96 -30 1892 2464 90 268 0 +985 59 128 -20 1288 1865 90 121 0 +986 489 150 50 1640 2116 90 0 139 +987 152 225 30 794 1353 90 0 586 +988 426 85 -30 461 954 90 345 0 +989 415 73 20 1358 1792 90 0 871 +990 440 70 -10 2169 2734 90 450 0 +991 320 476 30 438 769 90 0 549 +992 57 132 -10 1127 1656 90 480 0 +993 405 311 30 166 745 90 0 195 +994 109 250 -20 1374 1865 90 839 0 +995 428 314 20 801 1343 90 0 556 +996 40 288 20 1679 2068 90 0 784 +997 175 282 10 952 1459 90 0 196 +998 298 456 -20 2202 2622 90 630 0 +999 208 101 10 467 947 90 0 641 +1000 342 52 10 218 660 90 0 499 +1001 60 497 -10 1677 2236 90 972 0 +1002 447 88 -20 2754 3332 90 355 0 +1003 326 498 -10 862 1340 90 178 0 +1004 481 156 -20 1392 1969 90 396 0 +1005 363 55 -10 2909 3216 90 409 0 +1006 62 301 -20 3152 3630 90 626 0 +1007 86 361 -20 3096 3626 90 719 0 +1008 137 186 -10 2688 3297 90 334 0 +1009 429 294 -10 1760 2286 90 514 0 +1010 384 346 -20 1183 1639 90 385 0 +1011 346 344 -10 3043 3541 90 89 0 +1012 94 130 -10 448 914 90 281 0 +1013 308 235 -10 2928 3502 90 675 0 +1014 214 382 -30 2351 2791 90 310 0 +1015 136 296 -30 3097 3612 90 925 0 +1016 230 95 -20 1742 2216 90 274 0 +1017 112 208 -10 1404 1959 90 176 0 +1018 379 245 -10 2626 3080 90 276 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2107.txt b/jsprit-instances/instances/lilim/1000/LC2107.txt new file mode 100644 index 00000000..e76b7332 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2107.txt @@ -0,0 +1,1020 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -10 2507 2976 90 688 0 +2 266 231 -10 1617 2416 90 560 0 +3 89 284 -20 1109 1922 90 961 0 +4 430 298 10 1179 2104 90 0 594 +5 435 77 20 822 1343 90 0 815 +6 25 293 -20 2667 3420 90 833 0 +7 43 269 30 362 1173 90 0 22 +8 216 117 10 201 817 90 0 999 +9 294 437 -20 474 1008 90 338 0 +10 79 479 -20 707 1448 90 801 0 +11 365 18 -20 2036 2551 90 685 0 +12 225 125 20 127 1025 90 0 720 +13 448 103 30 3190 3578 0 0 1007 +14 143 266 10 108 868 90 0 716 +15 252 347 10 2465 3517 90 0 600 +16 403 390 -30 2146 3133 90 566 0 +17 67 153 20 653 1330 90 0 992 +18 90 168 -10 3003 3317 90 933 0 +19 302 235 20 901 1345 90 0 249 +20 259 355 20 1811 2183 90 0 521 +21 149 183 -30 2911 3466 90 963 0 +22 19 297 -30 2188 2536 90 7 0 +23 209 358 30 1088 2025 90 0 974 +24 56 388 -20 1435 2307 90 162 0 +25 115 269 -20 2988 3085 90 618 0 +26 377 356 10 1319 2533 90 0 53 +27 113 229 30 802 1603 90 0 425 +28 205 343 20 572 1392 90 0 441 +29 48 137 -30 1429 2324 90 313 0 +30 467 157 -30 2134 2640 90 192 0 +31 220 394 -10 2514 3211 90 206 0 +32 436 54 -40 1867 2276 90 233 0 +33 54 357 -30 1428 2125 90 937 0 +34 456 154 10 227 1087 90 0 772 +35 216 307 20 2160 3032 90 0 882 +36 280 224 -30 1943 2669 90 527 0 +37 90 270 -20 617 674 90 189 0 +38 166 452 20 305 1054 90 0 253 +39 17 283 -30 2193 3134 90 568 0 +40 196 192 -10 1894 2445 90 623 0 +41 94 275 10 173 924 90 0 656 +42 292 445 10 1639 1954 90 0 979 +43 329 471 -10 2700 3026 90 489 0 +44 326 57 20 1061 1826 90 0 365 +45 95 466 -10 2567 3559 90 956 0 +46 429 282 20 2906 3290 90 0 293 +47 229 364 -20 2283 2901 90 764 0 +48 457 160 -30 2577 3564 90 766 0 +49 452 154 30 223 1033 90 0 65 +50 113 289 10 142 690 90 0 806 +51 67 387 -30 2145 2767 90 398 0 +52 368 17 -20 1814 2389 90 678 0 +53 341 367 -10 2083 3138 90 26 0 +54 410 364 30 1524 2319 90 0 221 +55 80 281 10 1355 2238 90 0 272 +56 321 224 -10 1843 2529 90 325 0 +57 73 395 20 917 1688 90 0 698 +58 259 76 -20 654 1362 90 438 0 +59 121 203 10 1712 2031 90 0 231 +60 118 256 -10 2154 3044 90 627 0 +61 236 361 -20 1723 1863 90 590 0 +62 78 371 20 210 1033 90 0 459 +63 301 53 20 917 1181 90 0 204 +64 382 197 20 203 1238 90 0 583 +65 491 160 -30 1808 2330 90 49 0 +66 453 164 -20 2842 3490 90 410 0 +67 277 371 30 325 1025 90 0 907 +68 272 212 20 2198 2622 90 0 615 +69 386 218 20 1642 2320 90 0 163 +70 353 32 10 795 1175 90 0 295 +71 59 389 20 1232 2323 90 0 358 +72 414 62 10 1470 2061 90 0 392 +73 278 357 10 110 645 90 0 807 +74 101 179 20 2011 2974 90 0 636 +75 396 234 -10 1875 3065 90 570 0 +76 74 390 -20 424 1330 90 786 0 +77 332 55 -10 211 640 90 98 0 +78 272 365 30 446 1099 90 0 96 +79 418 355 -10 1864 2371 90 541 0 +80 216 380 -30 2345 2415 90 97 0 +81 440 173 -10 2658 3619 90 213 0 +82 89 358 -10 2905 3631 90 502 0 +83 66 491 -30 1642 2658 90 905 0 +84 317 234 10 2150 2967 90 0 128 +85 439 297 30 1785 2462 90 0 931 +86 394 367 -30 303 617 90 889 0 +87 58 364 -30 2026 2659 90 945 0 +88 290 75 20 179 413 90 0 861 +89 346 344 -20 2917 3667 90 649 0 +90 131 269 -30 2231 2705 90 196 0 +91 236 96 -20 1612 1756 90 869 0 +92 29 282 10 1269 1712 90 0 186 +93 418 385 -30 2687 2987 90 132 0 +94 148 225 40 105 1306 90 0 191 +95 166 464 10 431 1317 90 0 711 +96 266 373 -30 737 1008 90 78 0 +97 201 273 30 54 913 90 0 80 +98 255 245 10 7 787 90 0 77 +99 220 379 -30 2158 2790 90 878 0 +100 85 317 -10 2133 3241 90 308 0 +101 125 264 -40 2776 3095 90 565 0 +102 131 253 -20 2347 3430 90 424 0 +103 184 188 -20 1001 1679 90 635 0 +104 128 209 20 696 1650 90 0 683 +105 373 364 -30 2717 3657 90 523 0 +106 389 342 -20 718 1732 90 446 0 +107 420 20 30 430 880 90 0 319 +108 132 218 10 122 1194 90 0 599 +109 32 256 10 635 1327 90 0 978 +110 406 339 20 179 796 90 0 976 +111 191 397 20 158 774 90 0 513 +112 72 341 -20 2693 3199 90 604 0 +113 35 308 -20 2683 3602 90 212 0 +114 169 360 -30 2056 2448 90 628 0 +115 222 381 20 2320 3019 90 0 335 +116 96 292 10 389 1496 90 0 552 +117 311 496 -30 432 1183 90 460 0 +118 220 384 -30 2502 3024 90 519 0 +119 259 243 20 11 518 90 0 745 +120 349 476 10 2402 2724 90 0 672 +121 63 159 20 1051 1126 90 0 620 +122 112 243 -10 2215 2586 90 850 0 +123 448 302 -10 2025 2789 90 322 0 +124 343 27 -20 1183 1369 90 953 0 +125 67 485 40 1768 2725 90 0 263 +126 220 359 -10 1331 1678 90 913 0 +127 147 435 -20 1855 2527 90 951 0 +128 317 235 -10 2310 2989 90 84 0 +129 43 355 20 1454 1896 90 0 508 +130 368 340 -30 296 785 90 589 0 +131 450 72 -20 2562 2721 90 726 0 +132 400 364 30 574 725 90 0 93 +133 355 480 -20 1545 1846 90 735 0 +134 450 153 -10 372 854 90 155 0 +135 126 188 -10 1672 2683 90 550 0 +136 380 223 10 1265 2124 90 0 723 +137 71 453 -10 639 890 90 718 0 +138 54 287 20 199 1177 90 0 363 +139 420 168 -50 2900 3636 90 986 0 +140 219 89 -10 2564 2981 90 761 0 +141 189 327 10 98 958 90 0 919 +142 191 309 10 1265 1755 90 0 202 +143 301 67 40 189 1042 90 0 531 +144 484 161 -20 1350 2203 90 832 0 +145 77 483 -20 2577 2661 90 822 0 +146 241 375 -20 1808 2349 90 680 0 +147 428 64 20 1124 1438 90 0 989 +148 403 361 -20 1190 1875 90 475 0 +149 257 336 -30 2802 3570 90 731 0 +150 131 241 -20 2739 3705 90 694 0 +151 63 166 30 2349 2816 0 0 1010 +152 71 368 -20 3239 3435 90 517 0 +153 272 228 -10 1832 2394 90 709 0 +154 25 290 -10 2406 3495 90 193 0 +155 441 157 10 212 850 90 0 134 +156 13 266 20 821 1747 90 0 790 +157 251 376 -30 2901 3631 90 998 0 +158 61 170 -10 1990 2985 90 273 0 +159 386 357 20 1118 1907 90 0 185 +160 95 475 -10 2654 3355 90 877 0 +161 90 298 10 1967 2401 90 0 470 +162 71 388 20 1200 1970 90 0 24 +163 383 246 -20 2377 3518 90 69 0 +164 352 38 10 563 848 90 0 546 +165 395 1 -40 912 1021 90 457 0 +166 120 210 -20 975 1749 90 442 0 +167 46 383 -20 1043 1693 90 307 0 +168 202 198 -20 1736 2980 90 684 0 +169 358 365 -30 1946 2866 90 854 0 +170 191 352 20 117 582 90 0 676 +171 470 152 -20 1088 1525 90 729 0 +172 228 124 20 127 883 90 0 555 +173 402 230 -20 2148 2415 90 946 0 +174 323 229 10 1544 2052 90 0 482 +175 331 486 10 1559 2607 90 0 558 +176 112 208 -20 1494 1868 90 597 0 +177 172 435 -20 2648 3624 90 222 0 +178 326 498 -30 773 1429 90 991 0 +179 460 183 10 2720 3015 90 0 384 +180 95 279 20 182 727 90 0 944 +181 76 456 30 342 1379 90 0 248 +182 242 350 -20 2392 3389 90 765 0 +183 152 196 -30 122 462 90 252 0 +184 268 351 10 926 2133 90 0 245 +185 360 356 -20 2642 2983 90 159 0 +186 39 296 -10 1600 2526 90 92 0 +187 262 368 -10 1184 1299 90 651 0 +188 204 90 20 827 1521 90 0 920 +189 149 273 20 103 731 90 0 37 +190 446 86 -10 2922 3350 90 883 0 +191 139 269 -40 1442 2174 90 94 0 +192 483 170 30 1897 2656 90 0 30 +193 39 278 10 1474 1889 90 0 154 +194 201 307 10 1467 2119 90 0 478 +195 395 378 -10 1501 1931 90 359 0 +196 139 262 30 1145 1915 90 0 90 +197 176 447 20 210 1241 90 0 258 +198 67 380 20 2183 2534 90 0 644 +199 35 358 -10 1097 2056 90 257 0 +200 294 455 -10 2402 2611 90 279 0 +201 351 33 20 324 1277 90 0 254 +202 216 316 -10 2148 2649 90 142 0 +203 261 96 -10 254 801 90 309 0 +204 238 57 -20 1104 1728 90 63 0 +205 383 18 -40 1151 2294 90 223 0 +206 152 460 10 885 1894 90 0 31 +207 94 479 -30 2430 3390 90 703 0 +208 337 453 -30 2947 3183 90 463 0 +209 135 460 -30 1738 1992 90 572 0 +210 260 104 20 146 1220 90 0 984 +211 337 63 -10 1825 2426 90 898 0 +212 32 247 20 489 1274 90 0 113 +213 394 205 10 331 718 90 0 81 +214 95 294 -30 705 996 90 587 0 +215 253 241 -20 2514 3316 90 427 0 +216 223 90 -10 2646 3087 90 380 0 +217 64 473 10 840 1889 90 0 972 +218 275 431 10 849 1794 90 0 630 +219 261 84 10 503 1124 90 0 773 +220 176 296 20 1027 1592 90 0 418 +221 361 349 -30 2598 3594 90 54 0 +222 168 433 20 2923 3548 90 0 177 +223 394 10 40 792 1705 90 0 205 +224 308 60 20 363 1349 90 0 732 +225 94 456 -20 2864 3544 90 664 0 +226 73 484 -10 2226 2825 90 799 0 +227 277 434 -20 1043 1971 90 448 0 +228 119 232 -30 1536 2502 90 431 0 +229 78 375 10 273 516 90 0 462 +230 366 346 20 591 864 90 0 269 +231 125 181 -10 2351 3245 90 59 0 +232 69 493 20 1562 2552 90 0 433 +233 432 80 40 613 1363 90 0 32 +234 72 391 -20 1096 1888 90 391 0 +235 85 486 -10 2275 3161 90 762 0 +236 204 371 -20 509 1148 90 526 0 +237 173 328 10 2218 2904 90 0 332 +238 280 423 -30 741 1322 90 929 0 +239 200 327 -10 2620 3733 90 585 0 +240 241 98 -10 2998 3136 90 788 0 +241 96 356 -20 186 579 90 582 0 +242 332 491 -10 1014 1568 90 500 0 +243 81 283 -10 1373 2035 90 705 0 +244 373 22 -20 2036 2748 90 331 0 +245 255 371 -10 2076 2503 90 184 0 +246 358 359 -30 2273 3165 90 362 0 +247 216 93 -30 2082 3023 90 437 0 +248 73 360 -30 2711 3344 90 181 0 +249 305 212 -20 938 1533 90 19 0 +250 151 462 -10 1043 1921 90 776 0 +251 47 389 30 1054 1310 90 0 977 +252 155 198 30 108 332 90 0 183 +253 152 457 -20 971 1623 90 38 0 +254 329 48 -20 1327 1943 90 201 0 +255 88 394 10 723 891 90 0 841 +256 153 295 -10 3398 3526 90 657 0 +257 81 373 10 520 820 90 0 199 +258 163 453 -20 296 1249 90 197 0 +259 378 25 -20 2086 2890 90 910 0 +260 401 385 -30 2674 3214 90 512 0 +261 184 340 -20 2500 3195 90 751 0 +262 402 362 -20 1005 1876 90 669 0 +263 70 482 -40 2298 2564 90 125 0 +264 357 445 -10 3082 3452 90 549 0 +265 212 71 -10 1044 1524 90 641 0 +266 231 81 30 2153 2812 90 0 808 +267 379 208 10 851 978 90 0 486 +268 236 95 -10 1944 2451 90 408 0 +269 386 344 -20 1210 1427 90 230 0 +270 189 200 10 1486 2653 90 0 593 +271 296 253 -30 662 1167 90 674 0 +272 73 303 -10 2036 2919 90 55 0 +273 30 162 10 2001 2363 90 0 158 +274 230 95 -10 1578 2380 90 406 0 +275 57 131 -30 1165 1800 90 605 0 +276 379 245 -20 2734 2972 90 616 0 +277 107 221 40 145 1242 90 0 452 +278 154 458 20 903 1507 90 0 444 +279 290 417 10 171 725 90 0 200 +280 272 243 30 23 626 90 0 921 +281 94 130 10 651 712 90 0 985 +282 222 356 20 1494 1882 90 0 584 +283 243 108 -10 2869 3412 90 932 0 +284 224 93 -20 2055 2486 90 415 0 +285 155 242 10 891 1041 90 0 906 +286 440 302 -10 693 2026 90 298 0 +287 221 102 20 2392 3484 90 0 803 +288 52 484 -20 1284 2238 90 659 0 +289 111 244 10 1955 2663 90 0 930 +290 132 273 10 2103 2464 0 0 1018 +291 228 186 20 67 717 90 0 917 +292 221 374 -20 796 1625 90 296 0 +293 406 286 -20 3157 3631 90 46 0 +294 390 9 30 770 1916 90 0 912 +295 335 52 -10 1435 2248 90 70 0 +296 189 368 20 132 1109 90 0 292 +297 397 40 -10 2249 2893 90 381 0 +298 408 305 10 167 1044 90 0 286 +299 156 434 -10 2845 3046 90 809 0 +300 180 335 20 2023 3299 90 0 341 +301 327 483 20 1855 2501 0 0 1005 +302 363 62 -10 2533 3605 90 370 0 +303 375 342 -50 715 1323 90 394 0 +304 16 280 -10 2515 3179 90 821 0 +305 277 431 30 1053 1774 90 0 687 +306 110 241 -30 1967 2464 90 551 0 +307 48 385 20 963 1214 90 0 167 +308 152 260 10 98 588 90 0 100 +309 255 120 10 130 1051 90 0 203 +310 214 382 30 2265 2878 90 0 958 +311 414 384 10 2497 2988 90 0 805 +312 232 378 -10 1737 2811 90 867 0 +313 80 141 30 356 792 90 0 29 +314 188 330 -20 565 621 90 804 0 +315 157 192 -20 2830 3715 90 893 0 +316 101 237 20 1739 2082 90 0 557 +317 74 360 -30 2595 3278 90 412 0 +318 267 260 20 37 1141 90 0 602 +319 378 46 -30 3101 3240 90 107 0 +320 420 311 30 769 1177 90 0 514 +321 384 217 -10 1638 2140 90 543 0 +322 418 300 10 590 792 90 0 123 +323 356 77 20 2312 2347 90 0 454 +324 253 244 -30 2698 2946 90 579 0 +325 323 258 10 1095 1721 90 0 56 +326 293 454 20 2653 2729 90 0 692 +327 231 97 -30 2408 3527 90 562 0 +328 316 234 -20 2309 3173 90 634 0 +329 207 196 -10 2521 2769 90 506 0 +330 321 228 -20 1917 2643 90 724 0 +331 382 17 20 1624 2004 90 0 244 +332 206 326 -10 3271 3381 90 237 0 +333 198 284 10 62 603 90 0 829 +334 137 186 -30 2840 3145 90 955 0 +335 229 396 -20 2681 3244 90 115 0 +336 268 235 -20 1558 2286 90 748 0 +337 95 243 20 698 980 90 0 897 +338 297 430 20 196 721 90 0 9 +339 393 368 10 185 1462 90 0 501 +340 66 391 -10 1344 2017 90 647 0 +341 189 339 -20 2423 3463 90 300 0 +342 280 351 30 105 952 90 0 744 +343 241 77 -20 915 1696 90 922 0 +344 134 265 -10 2493 2998 90 875 0 +345 420 95 30 230 1162 90 0 576 +346 111 279 30 141 866 90 0 994 +347 367 358 30 1937 2489 90 0 939 +348 239 373 -10 1321 2650 90 542 0 +349 384 235 -40 2669 2836 90 654 0 +350 284 360 30 214 564 0 0 1012 +351 325 75 -10 2162 2738 90 435 0 +352 279 369 10 229 935 90 0 827 +353 340 449 -10 2418 3606 90 479 0 +354 275 448 10 2743 3221 90 0 845 +355 447 88 -10 2453 3569 90 990 0 +356 314 279 10 70 1003 90 0 573 +357 434 377 -10 2132 2719 90 697 0 +358 67 377 -20 2008 2523 90 71 0 +359 370 353 10 717 934 90 0 195 +360 57 367 20 1890 2607 0 0 1003 +361 332 486 20 1754 2231 90 0 887 +362 386 361 30 1139 2075 90 0 246 +363 55 282 -20 289 480 90 138 0 +364 317 467 -30 227 1237 90 858 0 +365 335 54 -20 1621 2245 90 44 0 +366 348 466 -30 2360 2967 90 840 0 +367 132 314 -10 2679 3690 90 873 0 +368 328 216 -20 1688 2296 90 798 0 +369 416 48 10 1630 2290 90 0 774 +370 370 55 10 2370 3562 90 0 302 +371 149 434 -30 2041 2526 90 640 0 +372 466 169 30 2443 2720 90 0 439 +373 141 267 -30 1327 2103 90 586 0 +374 258 350 -20 1688 2116 90 652 0 +375 428 312 10 939 1388 90 0 498 +376 211 188 -20 301 1179 90 472 0 +377 50 343 -10 2570 3097 90 535 0 +378 107 311 -20 2603 3183 90 860 0 +379 178 441 20 204 551 90 0 888 +380 232 85 10 2324 2453 90 0 216 +381 391 23 10 2325 3232 90 0 297 +382 137 227 20 115 291 90 0 631 +383 161 203 20 100 898 90 0 421 +384 363 212 -10 2911 3705 90 179 0 +385 384 346 -20 964 1858 90 580 0 +386 166 434 -20 2956 3134 90 941 0 +387 274 248 20 274 507 90 0 686 +388 156 421 30 2797 3629 0 0 1001 +389 346 211 10 103 834 90 0 717 +390 265 358 20 1156 1709 90 0 403 +391 96 407 20 313 715 90 0 234 +392 443 70 -10 2469 2619 90 72 0 +393 125 212 -30 1162 1371 90 504 0 +394 361 337 50 141 1011 90 0 303 +395 322 78 -10 2300 2788 90 534 0 +396 481 156 -10 1244 2116 90 942 0 +397 188 293 30 482 1353 90 0 540 +398 76 408 30 640 1561 90 0 51 +399 130 304 -20 3045 3465 90 401 0 +400 378 363 30 1621 2036 90 0 536 +401 185 301 20 1210 1611 90 0 399 +402 385 235 -20 2408 2914 90 581 0 +403 261 350 -20 1387 2231 90 390 0 +404 389 33 -20 3038 3088 90 715 0 +405 151 214 10 402 781 90 0 742 +406 265 94 10 192 485 90 0 274 +407 65 164 -20 2276 3074 90 658 0 +408 293 81 10 174 318 90 0 268 +409 363 55 -20 2681 3445 90 849 0 +410 465 176 20 2652 2705 90 0 66 +411 428 298 -20 1356 2111 90 982 0 +412 75 379 30 2217 3078 90 0 317 +413 404 378 10 718 1155 90 0 800 +414 203 203 -20 2579 3281 90 539 0 +415 259 88 20 162 1090 90 0 284 +416 362 17 -30 1535 2392 90 918 0 +417 320 258 20 509 780 90 0 743 +418 59 358 -20 2381 2496 90 220 0 +419 316 453 20 213 1055 90 0 434 +420 225 192 20 63 720 90 0 505 +421 140 206 -20 409 566 90 383 0 +422 83 151 10 194 1265 90 0 493 +423 366 196 10 127 906 90 0 468 +424 108 245 20 1459 2162 90 0 102 +425 129 267 -30 2342 2778 90 27 0 +426 57 379 20 560 1415 90 0 464 +427 329 56 20 1311 1763 90 0 215 +428 213 363 30 954 1674 90 0 836 +429 76 391 -10 1076 1719 90 811 0 +430 330 259 -20 834 1788 90 967 0 +431 136 217 30 678 1278 90 0 228 +432 165 333 -20 2339 2583 90 713 0 +433 160 431 -20 3006 3622 90 232 0 +434 338 489 -20 1168 1607 90 419 0 +435 335 64 10 1740 2326 90 0 351 +436 412 361 10 1554 2103 90 0 916 +437 259 90 30 239 1195 90 0 247 +438 265 77 20 739 1085 90 0 58 +439 460 173 -30 2694 3241 90 372 0 +440 83 301 20 2148 2606 90 0 571 +441 201 331 -20 311 1263 90 28 0 +442 118 214 20 136 566 90 0 166 +443 395 30 -20 2459 3293 90 515 0 +444 125 444 -20 1667 2488 90 278 0 +445 283 248 30 33 448 90 0 824 +446 391 334 20 885 1368 90 0 106 +447 212 215 -30 3177 3303 90 968 0 +448 276 428 20 1007 1248 90 0 227 +449 96 152 20 182 789 90 0 643 +450 425 85 10 353 880 90 0 465 +451 336 7 10 1509 1820 90 0 700 +452 196 219 -40 2864 3404 90 277 0 +453 210 94 -30 676 1478 90 545 0 +454 310 81 -20 2501 3352 90 323 0 +455 341 37 20 231 1079 90 0 617 +456 344 478 -30 2002 2751 90 820 0 +457 406 37 40 264 1247 90 0 165 +458 69 346 -20 2786 3297 90 763 0 +459 80 376 -20 211 1467 90 62 0 +460 314 449 30 209 1063 90 0 117 +461 209 201 -20 2292 3375 90 610 0 +462 88 379 -10 603 936 90 229 0 +463 352 500 30 1282 1889 90 0 208 +464 65 357 -20 2087 2981 90 426 0 +465 345 15 -10 1178 1946 90 450 0 +466 125 245 -10 2907 3258 90 563 0 +467 52 369 30 1482 2824 90 0 947 +468 449 140 -10 539 1082 90 423 0 +469 430 310 30 666 1846 90 0 556 +470 109 325 -10 2987 3190 90 161 0 +471 446 139 20 292 1143 90 0 957 +472 229 214 20 41 767 90 0 376 +473 197 301 10 146 380 90 0 794 +474 146 245 20 464 1089 90 0 880 +475 401 368 20 316 1171 90 0 148 +476 116 259 -20 2493 2893 90 666 0 +477 374 55 -20 2785 2958 90 621 0 +478 249 251 -10 2717 3515 90 194 0 +479 325 490 10 771 1236 90 0 353 +480 59 159 10 789 1577 90 0 787 +481 186 177 -20 1264 1618 90 601 0 +482 319 229 -10 2038 2707 90 174 0 +483 26 269 30 828 1342 90 0 619 +484 53 139 -10 1093 1494 90 914 0 +485 471 154 20 1123 1675 90 0 791 +486 301 247 -10 2797 3773 90 267 0 +487 388 220 20 1161 1845 90 0 813 +488 235 81 -20 1081 1978 90 712 0 +489 347 479 10 2278 2661 90 0 43 +490 367 59 -20 3045 3453 90 655 0 +491 261 370 -10 1019 1279 90 746 0 +492 441 287 -10 2850 3140 90 497 0 +493 44 153 -10 1746 2405 90 422 0 +494 263 351 -10 1571 1679 90 960 0 +495 444 157 10 215 1022 90 0 885 +496 374 17 -10 1406 2604 90 988 0 +497 448 295 10 2533 3075 90 0 492 +498 446 297 -10 1991 2633 90 375 0 +499 347 40 -10 231 1089 90 1000 0 +500 318 493 10 643 1167 90 0 242 +501 399 352 -10 897 1783 90 339 0 +502 51 364 10 1390 2545 90 0 82 +503 250 217 -30 2237 2991 90 831 0 +504 107 225 30 228 813 90 0 393 +505 173 208 -20 1942 1981 90 420 0 +506 204 189 10 2409 2507 90 0 329 +507 399 379 -10 2562 3518 90 537 0 +508 79 346 -20 3062 3398 90 129 0 +509 360 338 10 140 920 90 0 702 +510 390 17 -30 1086 1979 90 518 0 +511 207 337 20 97 1687 90 0 567 +512 409 361 30 661 1612 90 0 260 +513 206 377 -20 134 1290 90 111 0 +514 429 294 -30 1878 2167 90 320 0 +515 375 31 20 2136 2395 90 0 443 +516 426 80 20 426 1178 90 0 876 +517 74 374 20 2716 2768 90 0 152 +518 408 20 30 495 612 90 0 510 +519 239 369 30 1521 2261 90 0 118 +520 420 308 -20 569 1009 90 792 0 +521 254 357 -20 1545 2639 90 20 0 +522 53 297 -20 3289 3471 90 996 0 +523 434 382 30 1930 2730 90 0 105 +524 204 171 -20 799 1278 90 970 0 +525 173 169 10 1276 2000 90 0 528 +526 190 332 20 314 1057 90 0 236 +527 274 231 30 1816 2596 90 0 36 +528 207 194 -10 2068 3039 90 525 0 +529 315 232 -20 2421 3246 90 639 0 +530 425 87 20 239 1115 90 0 864 +531 312 64 -40 246 1078 90 143 0 +532 129 244 -20 2767 3210 90 855 0 +533 278 230 10 1456 1637 0 0 1009 +534 351 75 10 1696 2772 90 0 395 +535 185 293 10 614 1406 90 0 377 +536 364 364 -30 2298 2321 90 400 0 +537 432 369 10 1880 2574 90 0 507 +538 128 249 20 1285 1561 0 0 1017 +539 221 179 20 227 671 90 0 414 +540 194 296 -30 348 1111 90 397 0 +541 413 350 10 1209 2066 90 0 79 +542 214 372 10 574 1472 90 0 348 +543 379 229 10 1030 1220 90 0 321 +544 91 298 -10 1598 2587 90 997 0 +545 226 120 30 132 838 90 0 453 +546 344 46 -10 1458 2022 90 164 0 +547 238 84 -20 1406 2023 90 936 0 +548 138 276 10 1485 2505 90 0 812 +549 346 487 10 1397 2379 90 0 264 +550 95 160 10 179 419 90 0 135 +551 103 266 30 968 1316 90 0 306 +552 98 286 -10 1183 1651 90 116 0 +553 77 172 -30 2730 3382 90 721 0 +554 147 199 30 228 548 90 0 987 +555 210 98 -20 503 1099 90 172 0 +556 428 292 -30 1892 1970 90 469 0 +557 121 236 -20 1829 2399 90 316 0 +558 336 479 -10 2220 2337 90 175 0 +559 203 369 10 624 1218 90 0 948 +560 296 232 10 1030 1666 90 0 2 +561 87 369 10 201 785 90 0 868 +562 247 88 30 1662 2346 90 0 327 +563 104 246 10 973 1893 90 0 466 +564 67 302 30 2257 2889 90 0 642 +565 114 296 40 143 1067 90 0 101 +566 394 356 30 178 813 90 0 16 +567 192 306 -20 1546 1660 90 511 0 +568 16 285 30 2298 2845 90 0 39 +569 419 310 -20 599 1165 90 670 0 +570 389 221 10 1045 1778 90 0 75 +571 129 264 -20 2317 3366 90 440 0 +572 172 483 30 627 1340 90 0 209 +573 325 251 -10 1309 1702 90 356 0 +574 151 436 10 1984 2948 90 0 904 +575 263 91 20 159 934 90 0 843 +576 401 15 -30 503 1027 90 345 0 +577 253 382 -20 2611 3692 90 834 0 +578 247 89 -20 1985 2205 90 738 0 +579 283 229 30 1069 1833 90 0 324 +580 366 341 20 311 955 90 0 385 +581 392 213 20 2014 2331 90 0 402 +582 167 304 20 99 1020 90 0 241 +583 477 154 -20 1545 1626 90 64 0 +584 234 383 -20 1946 2411 90 282 0 +585 199 327 10 3096 3182 90 0 239 +586 140 220 30 633 1133 90 0 373 +587 144 266 30 119 664 90 0 214 +588 432 105 -10 2534 3592 90 757 0 +589 368 325 30 139 690 90 0 130 +590 202 386 20 144 1324 90 0 61 +591 325 246 10 1441 1760 90 0 778 +592 430 86 20 2452 3241 90 0 871 +593 200 195 -10 2136 2393 90 270 0 +594 440 295 -10 1890 2541 90 4 0 +595 77 287 10 1449 2521 90 0 828 +596 187 362 -30 1662 2069 90 613 0 +597 131 207 20 663 1495 90 0 176 +598 405 5 20 556 1175 90 0 863 +599 125 226 -10 1157 1781 90 108 0 +600 254 335 -10 2688 3498 90 15 0 +601 212 168 20 649 1231 90 0 481 +602 281 279 -20 559 1030 90 318 0 +603 326 241 -20 1357 2034 90 739 0 +604 152 241 20 549 1197 90 0 112 +605 71 139 30 338 1437 90 0 275 +606 46 277 -10 434 904 90 622 0 +607 393 13 20 1103 1772 90 0 693 +608 87 454 40 565 1358 90 0 734 +609 86 359 -10 2759 3628 90 758 0 +610 220 192 20 65 780 90 0 461 +611 426 279 30 2777 3608 90 0 667 +612 131 267 -30 2514 2791 90 866 0 +613 200 297 30 68 1308 90 0 596 +614 299 442 -10 1647 2322 90 625 0 +615 265 218 -20 2428 2590 90 68 0 +616 398 231 20 1898 2854 90 0 276 +617 312 74 -20 2800 2858 90 455 0 +618 99 307 20 2656 2931 90 0 25 +619 22 283 -30 1197 1590 90 483 0 +620 67 160 -20 2640 2899 90 121 0 +621 390 42 20 2435 2901 90 0 477 +622 44 279 10 368 785 90 0 606 +623 200 182 10 837 1630 90 0 40 +624 458 303 -20 2315 2906 90 966 0 +625 298 438 10 453 841 90 0 614 +626 62 301 20 3016 3630 0 0 1008 +627 112 251 10 1476 1950 90 0 60 +628 184 354 30 1833 2279 90 0 114 +629 140 180 20 2929 3249 90 0 708 +630 269 428 -10 561 1889 90 218 0 +631 123 206 -20 1688 2242 90 382 0 +632 36 284 10 1606 1950 90 0 928 +633 272 233 10 1531 2123 90 0 830 +634 320 231 20 2332 2596 90 0 328 +635 211 180 20 662 1013 90 0 103 +636 114 169 -20 2279 3106 90 74 0 +637 245 239 -20 2708 3319 90 924 0 +638 117 204 -30 1335 2221 90 777 0 +639 316 254 20 385 1275 90 0 529 +640 169 443 30 293 867 90 0 371 +641 212 96 10 784 1184 90 0 265 +642 119 285 -30 2677 3609 90 564 0 +643 71 163 -20 2781 2948 90 449 0 +644 78 361 -20 3011 3620 90 198 0 +645 354 219 -20 2736 3716 90 819 0 +646 389 233 -30 2142 2991 90 756 0 +647 90 391 10 331 911 90 0 340 +648 209 307 10 1615 2167 90 0 781 +649 363 351 20 2555 3452 90 0 89 +650 405 47 10 255 847 90 0 935 +651 278 329 10 83 935 90 0 187 +652 261 371 20 679 1437 90 0 374 +653 302 470 -10 1971 2643 90 851 0 +654 373 205 40 211 616 90 0 349 +655 381 20 20 1655 2161 90 0 490 +656 90 277 -10 471 1013 90 41 0 +657 46 341 10 2342 3136 90 0 256 +658 50 138 20 1596 2342 90 0 407 +659 61 437 20 265 1177 90 0 288 +660 331 252 10 1195 1233 90 0 901 +661 440 81 20 2397 3093 90 0 699 +662 384 206 20 375 1263 90 0 793 +663 232 87 -20 1362 1807 90 814 0 +664 59 471 20 946 2183 90 0 225 +665 174 304 20 93 597 90 0 900 +666 106 248 20 1073 1980 90 0 476 +667 410 287 -30 2773 3660 90 611 0 +668 206 313 -30 1726 2616 90 872 0 +669 412 367 20 765 1315 90 0 262 +670 412 300 20 174 1016 90 0 569 +671 206 295 -10 2802 2975 90 891 0 +672 329 459 -10 2744 3185 90 120 0 +673 177 436 20 199 1084 90 0 857 +674 266 264 30 332 1034 90 0 271 +675 308 235 -30 2999 3431 90 844 0 +676 260 330 -20 2971 3595 90 170 0 +677 49 136 10 1476 2094 90 0 768 +678 356 28 20 954 1207 90 0 52 +679 428 384 -20 2208 2841 90 879 0 +680 220 362 20 1025 1797 90 0 146 +681 437 61 -30 1713 2624 90 789 0 +682 365 360 20 1708 2533 0 0 1013 +683 107 168 -20 2159 3031 90 104 0 +684 220 177 20 78 1366 90 0 168 +685 347 21 20 998 1935 90 0 11 +686 293 245 -20 3365 3654 90 387 0 +687 267 436 -30 2924 3249 90 305 0 +688 216 96 10 2368 2924 90 0 1 +689 383 351 20 167 809 90 0 825 +690 289 240 -10 751 1287 90 733 0 +691 129 185 20 2837 2951 0 0 1016 +692 291 450 -20 2641 2929 90 326 0 +693 387 21 -20 1230 2025 90 607 0 +694 116 255 20 1171 1468 90 0 150 +695 50 368 -20 1648 2474 90 895 0 +696 121 249 20 2466 2537 90 0 817 +697 404 346 10 950 1536 90 0 357 +698 77 360 -20 2959 3619 90 57 0 +699 447 102 -20 2954 3578 90 661 0 +700 366 16 -10 1655 2461 90 451 0 +701 348 16 -20 1399 2320 90 894 0 +702 353 346 -10 2990 3398 90 509 0 +703 54 485 30 1643 2063 90 0 207 +704 319 77 -20 2215 3061 90 749 0 +705 83 282 10 1095 2129 90 0 243 +706 384 24 10 1962 3400 90 0 759 +707 52 469 -30 1167 1766 90 753 0 +708 199 200 -20 2584 3465 90 629 0 +709 273 234 10 1600 1872 90 0 153 +710 16 281 -20 2406 3107 90 737 0 +711 151 442 -10 1971 3153 90 95 0 +712 223 114 20 231 593 90 0 488 +713 191 308 20 82 723 90 0 432 +714 448 297 -10 2272 3153 90 870 0 +715 386 28 20 1892 3282 90 0 404 +716 106 295 -10 785 1481 90 14 0 +717 387 224 -10 1263 1931 90 389 0 +718 96 377 10 199 754 90 0 137 +719 86 361 -10 3024 3626 90 915 0 +720 211 107 -20 167 1055 90 12 0 +721 43 125 30 1387 1979 90 0 553 +722 369 351 -30 664 1172 90 835 0 +723 388 228 -10 892 1738 90 136 0 +724 325 228 20 1337 2443 90 0 330 +725 490 159 -10 1954 2000 90 908 0 +726 420 78 20 1148 1808 90 0 131 +727 396 4 10 827 1478 90 0 952 +728 222 317 -40 2381 2609 90 973 0 +729 389 198 20 449 798 90 0 171 +730 322 454 20 216 698 90 0 874 +731 241 391 30 2878 3253 90 0 149 +732 256 117 -20 2929 3565 90 224 0 +733 298 255 10 48 847 90 0 690 +734 74 363 -40 2798 2888 90 608 0 +735 345 496 20 963 2012 90 0 133 +736 167 169 20 1388 2079 90 0 848 +737 23 306 20 1723 2801 90 0 710 +738 317 62 20 372 1142 90 0 578 +739 319 257 20 69 1469 90 0 603 +740 129 255 10 2402 3190 90 0 842 +741 59 377 20 1815 2520 90 0 754 +742 138 272 -10 1680 2121 90 405 0 +743 317 251 -20 618 1421 90 417 0 +744 279 436 -30 1543 1656 90 342 0 +745 371 207 -20 128 891 90 119 0 +746 263 372 10 784 1149 90 0 491 +747 50 347 -10 2423 2861 90 795 0 +748 275 236 20 1514 1772 90 0 336 +749 334 47 20 219 1330 90 0 704 +750 50 383 -10 1702 2236 90 802 0 +751 170 338 20 2126 2603 90 0 261 +752 245 109 -10 2861 3477 90 846 0 +753 69 475 30 1121 1416 90 0 707 +754 54 372 -20 1486 2656 90 741 0 +755 198 334 -10 1971 2596 90 911 0 +756 380 228 30 1041 1393 90 0 646 +757 425 118 10 219 844 90 0 588 +758 80 398 10 406 1407 90 0 609 +759 366 57 -10 2883 3430 90 706 0 +760 67 463 30 496 832 90 0 892 +761 226 86 10 2297 3052 90 0 140 +762 59 480 10 1560 1766 90 0 235 +763 40 378 20 1019 1914 90 0 458 +764 250 367 20 1937 2449 90 0 47 +765 157 436 20 2677 3029 90 0 182 +766 463 161 30 2109 2857 90 0 48 +767 266 250 10 151 827 90 0 823 +768 51 162 -10 1915 2671 90 677 0 +769 194 353 -20 1059 1842 90 890 0 +770 383 41 20 2314 3216 0 0 1002 +771 247 82 30 1630 2185 0 0 1014 +772 457 142 -10 750 1068 90 34 0 +773 244 94 -10 1554 2197 90 219 0 +774 441 63 -10 2066 2643 90 369 0 +775 244 371 20 1943 2837 90 0 962 +776 174 444 10 208 875 90 0 250 +777 94 247 30 719 1146 90 0 638 +778 320 225 -10 1718 2471 90 591 0 +779 316 80 30 2531 2932 90 0 899 +780 155 447 -20 2585 2918 90 856 0 +781 211 308 -10 1741 2226 90 648 0 +782 297 442 20 1473 2312 0 0 1004 +783 200 342 10 579 1574 90 0 884 +784 44 325 -20 2974 3547 90 938 0 +785 438 60 -30 1967 2552 90 853 0 +786 80 374 20 210 1043 90 0 76 +787 59 163 -10 2014 2768 90 480 0 +788 236 92 10 1905 2676 90 0 240 +789 414 66 30 1327 2016 90 0 681 +790 34 279 -20 1415 1758 90 156 0 +791 475 156 -20 1260 1727 90 485 0 +792 404 310 20 165 1030 90 0 520 +793 367 239 -20 2765 3707 90 662 0 +794 210 359 -10 1112 2184 90 473 0 +795 133 278 10 1718 2463 90 0 747 +796 446 169 10 2680 3612 0 0 1006 +797 188 356 -10 1942 1981 90 964 0 +798 312 252 20 668 1181 90 0 368 +799 69 485 10 2254 2422 90 0 226 +800 413 353 -10 1299 2161 90 413 0 +801 54 446 20 277 1173 90 0 10 +802 56 357 10 1705 2032 90 0 750 +803 230 105 -20 2708 3367 90 287 0 +804 196 302 20 242 466 90 0 314 +805 391 373 -10 2680 3600 90 311 0 +806 101 295 -10 868 1208 90 50 0 +807 234 350 -10 2554 2839 90 73 0 +808 215 108 -30 2597 3082 90 266 0 +809 142 457 10 1293 2052 90 0 299 +810 283 425 20 408 1468 90 0 969 +811 77 397 10 440 1558 90 0 429 +812 105 317 -10 2647 3331 90 548 0 +813 382 213 -20 1391 2199 90 487 0 +814 213 76 20 1171 1589 90 0 663 +815 417 56 -20 1485 2239 90 5 0 +816 183 340 -20 2469 3044 90 940 0 +817 123 242 -20 3163 3376 90 696 0 +818 475 136 20 666 1551 90 0 954 +819 377 246 20 2846 3423 90 0 645 +820 310 484 30 327 1084 90 0 456 +821 47 280 10 205 1155 90 0 304 +822 57 456 20 282 1202 90 0 145 +823 313 266 -10 339 566 90 767 0 +824 475 145 -30 798 1618 90 445 0 +825 400 376 -20 723 962 90 689 0 +826 290 416 30 170 712 90 0 847 +827 277 369 -10 437 543 90 352 0 +828 91 303 -10 1946 2612 90 595 0 +829 194 301 -10 75 1016 90 333 0 +830 254 238 -10 2565 2887 90 633 0 +831 215 91 30 2112 2628 90 0 503 +832 500 162 20 1838 2499 90 0 144 +833 56 287 20 197 858 90 0 6 +834 289 452 20 2460 3295 90 0 577 +835 378 326 30 148 506 90 0 722 +836 197 350 -30 874 1659 90 428 0 +837 243 88 -20 1561 2060 90 838 0 +838 250 72 20 1064 1346 90 0 837 +839 101 290 20 861 1599 0 0 1015 +840 351 480 30 1423 2157 90 0 366 +841 67 357 -10 2727 3521 90 255 0 +842 128 240 -10 3064 3666 90 740 0 +843 253 81 -20 853 1358 90 575 0 +844 307 227 30 2523 3343 90 0 675 +845 233 441 -10 2748 3633 90 354 0 +846 311 47 10 791 1510 90 0 752 +847 292 456 -30 2529 2668 90 826 0 +848 183 187 -20 1639 2057 90 736 0 +849 392 31 20 2930 3010 90 0 409 +850 103 251 10 905 1771 90 0 122 +851 300 443 10 1570 2581 90 0 653 +852 420 295 10 1530 2135 0 0 1011 +853 427 64 30 1132 1612 90 0 785 +854 372 354 30 1543 2498 90 0 169 +855 101 263 20 851 1621 90 0 532 +856 141 454 20 1653 1879 90 0 780 +857 146 461 -20 1534 1620 90 673 0 +858 298 430 30 186 1329 90 0 364 +859 148 270 10 103 358 90 0 950 +860 76 287 20 1512 2276 90 0 378 +861 308 55 -20 689 1214 90 88 0 +862 143 257 10 304 858 90 0 881 +863 393 2 -20 527 1591 90 598 0 +864 385 28 -20 1933 2799 90 530 0 +865 204 291 20 2776 3190 90 0 959 +866 132 272 30 2026 2722 90 0 612 +867 206 379 10 234 860 90 0 312 +868 69 383 -10 2272 2828 90 561 0 +869 245 96 20 1560 2006 90 0 91 +870 431 301 10 1444 1653 90 0 714 +871 448 94 -20 2902 3566 90 592 0 +872 199 305 30 1403 1997 90 0 668 +873 95 356 10 3124 3637 90 0 367 +874 328 498 -20 780 1607 90 730 0 +875 108 222 10 1347 1806 90 0 344 +876 341 26 -20 1249 1487 90 516 0 +877 63 454 10 276 1531 90 0 160 +878 222 357 30 1234 1959 90 0 99 +879 416 364 20 1867 2169 90 0 679 +880 127 278 -20 1723 2650 90 474 0 +881 140 252 -10 653 700 90 862 0 +882 218 298 -20 2498 3074 90 35 0 +883 432 87 10 2784 3092 90 0 190 +884 216 300 -10 2285 3102 90 783 0 +885 438 72 -10 1121 1235 90 495 0 +886 184 178 -20 1171 1897 90 971 0 +887 345 468 -20 2514 3000 90 361 0 +888 150 435 -20 2055 2695 90 379 0 +889 395 365 30 185 690 90 0 86 +890 208 371 20 360 1109 90 0 769 +891 190 292 10 362 1289 90 0 671 +892 78 479 -30 865 1473 90 760 0 +893 104 198 20 2137 2630 90 0 315 +894 346 13 20 1291 2241 90 0 701 +895 47 388 20 788 1759 90 0 695 +896 315 57 -20 1014 1488 90 909 0 +897 110 199 -20 2007 2568 90 337 0 +898 323 60 10 955 1745 90 0 211 +899 308 82 -30 2832 3205 90 779 0 +900 216 374 -20 826 1405 90 665 0 +901 326 253 -10 832 1406 90 660 0 +902 308 232 30 2615 3440 90 0 975 +903 118 223 10 134 841 90 0 943 +904 149 444 -10 2463 2846 90 574 0 +905 95 395 30 212 1071 90 0 83 +906 117 319 -10 2641 3675 90 285 0 +907 262 352 -30 1085 2347 90 67 0 +908 468 135 10 996 1027 90 0 725 +909 351 31 20 859 927 90 0 896 +910 361 15 20 1975 2422 90 0 259 +911 195 300 10 385 691 90 0 755 +912 397 27 -30 2224 2712 90 294 0 +913 179 311 10 175 607 90 0 126 +914 77 133 10 388 1189 90 0 484 +915 66 397 10 1068 1342 90 0 719 +916 366 352 -10 2229 3591 90 436 0 +917 221 87 -20 1215 1751 90 291 0 +918 347 23 30 740 1620 90 0 416 +919 176 358 -10 1742 2569 90 141 0 +920 229 78 -20 2340 2813 90 188 0 +921 272 246 -30 22 781 90 280 0 +922 293 67 20 187 1446 90 0 343 +923 140 265 -20 1176 2070 90 983 0 +924 238 83 20 1381 1865 90 0 637 +925 136 296 30 2421 3702 90 0 949 +926 218 98 -20 1668 2496 90 965 0 +927 290 440 -10 1362 2040 90 981 0 +928 29 302 -10 1949 2382 90 632 0 +929 290 425 30 190 530 90 0 238 +930 124 247 -10 3086 3264 90 289 0 +931 442 287 -30 2488 3321 90 85 0 +932 294 64 10 423 503 90 0 283 +933 74 165 10 2683 3234 90 0 18 +934 382 245 -20 2436 3642 90 980 0 +935 405 24 -10 274 727 90 650 0 +936 211 97 20 668 1116 90 0 547 +937 88 390 30 358 1069 90 0 33 +938 37 295 20 1460 2482 90 0 784 +939 359 371 -30 2258 2746 90 347 0 +940 186 372 20 1444 2087 90 0 816 +941 116 446 20 1655 2302 90 0 386 +942 293 249 10 43 457 90 0 396 +943 83 228 -10 175 1283 90 903 0 +944 96 269 -20 786 1303 90 180 0 +945 179 284 30 643 1579 90 0 87 +946 368 219 20 588 1452 90 0 173 +947 66 359 -30 2910 3563 90 467 0 +948 189 338 -10 2794 3274 90 559 0 +949 163 277 -30 2920 3733 90 925 0 +950 5 296 -10 2283 2650 90 859 0 +951 152 478 20 991 1198 90 0 127 +952 366 34 -10 2042 2289 90 727 0 +953 429 80 20 523 1267 90 0 124 +954 464 178 -20 2404 3137 90 818 0 +955 138 196 30 1887 2259 90 0 334 +956 87 481 10 2466 3161 90 0 45 +957 425 99 -20 231 1005 90 471 0 +958 241 362 -30 1921 3059 90 310 0 +959 207 289 -20 2787 3367 90 865 0 +960 264 365 10 1323 1348 90 0 494 +961 102 289 20 815 1829 90 0 3 +962 233 346 -20 2478 3103 90 775 0 +963 78 141 30 364 600 90 0 21 +964 196 348 10 680 1669 90 0 797 +965 216 92 20 2042 2881 90 0 926 +966 444 309 20 2302 2709 90 0 624 +967 313 263 20 388 703 90 0 430 +968 211 198 30 2319 3161 90 0 447 +969 314 436 -20 1723 2640 90 810 0 +970 217 189 20 357 930 90 0 524 +971 197 178 20 824 1453 90 0 886 +972 60 497 -10 1698 2216 90 217 0 +973 206 312 40 1726 2434 90 0 728 +974 197 351 -30 1086 1628 90 23 0 +975 305 233 -30 3002 3240 90 902 0 +976 297 250 -20 3080 3746 90 110 0 +977 71 348 -30 2976 3294 90 251 0 +978 11 269 -10 882 1498 90 109 0 +979 247 447 -10 3081 3319 90 42 0 +980 386 213 20 1707 2445 90 0 934 +981 292 434 10 454 1217 90 0 927 +982 436 301 20 941 1965 90 0 411 +983 145 221 20 373 1202 90 0 923 +984 224 96 -20 1915 2441 90 210 0 +985 59 128 -10 1390 1762 90 281 0 +986 489 150 50 1476 2280 90 0 139 +987 152 225 -30 766 1382 90 554 0 +988 426 85 10 314 1100 90 0 496 +989 415 73 -20 1315 1834 90 147 0 +990 440 70 10 2165 2738 90 0 355 +991 320 476 30 491 716 90 0 178 +992 57 132 -20 1240 1543 90 17 0 +993 405 311 30 169 344 90 0 995 +994 109 250 -30 1449 1791 90 346 0 +995 428 314 -30 880 1264 90 993 0 +996 40 288 20 1548 2198 90 0 522 +997 175 282 10 602 1809 90 0 544 +998 298 456 30 2137 2687 90 0 157 +999 208 101 -10 257 1157 90 8 0 +1000 342 52 10 218 877 90 0 499 +1001 156 421 -30 2797 3629 90 388 0 +1002 383 41 -20 2314 3216 90 770 0 +1003 57 367 -20 1890 2607 90 360 0 +1004 297 442 -20 1473 2312 90 782 0 +1005 327 483 -20 1855 2501 90 301 0 +1006 446 169 -10 2680 3612 90 796 0 +1007 448 103 -30 3190 3578 90 13 0 +1008 62 301 -20 3016 3630 90 626 0 +1009 278 230 -10 1456 1637 90 533 0 +1010 63 166 -30 2349 2816 90 151 0 +1011 420 295 -10 1530 2135 90 852 0 +1012 284 360 -30 214 564 90 350 0 +1013 365 360 -20 1708 2533 90 682 0 +1014 247 82 -30 1630 2185 90 771 0 +1015 101 290 -20 861 1599 90 839 0 +1016 129 185 -20 2837 2951 90 691 0 +1017 128 249 -20 1285 1561 90 538 0 +1018 132 273 -10 2103 2464 90 290 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2108.txt b/jsprit-instances/instances/lilim/1000/LC2108.txt new file mode 100644 index 00000000..74b073ee --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2108.txt @@ -0,0 +1,1016 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -20 2422 3062 90 575 0 +2 266 231 -10 1696 2336 90 336 0 +3 89 284 20 1196 1836 90 0 860 +4 430 298 10 1322 1962 90 0 556 +5 435 77 -20 762 1402 90 530 0 +6 25 293 -10 2724 3364 90 710 0 +7 43 269 30 447 1087 90 0 483 +8 216 117 10 189 829 90 0 814 +9 294 437 30 421 1061 90 0 238 +10 79 479 -20 758 1398 90 822 0 +11 365 18 20 1973 2613 90 0 409 +12 225 125 20 127 767 90 0 641 +13 448 103 -10 2938 3578 90 699 0 +14 143 266 10 162 802 90 0 114 +15 252 347 10 2671 3311 90 0 149 +16 403 390 10 2320 2960 90 0 89 +17 67 153 -10 672 1312 90 422 0 +18 90 168 -30 2840 3480 90 151 0 +19 302 235 -10 803 1443 90 767 0 +20 259 355 -10 1677 2317 90 96 0 +21 149 183 -20 2868 3508 90 629 0 +22 19 297 20 2042 2682 90 0 522 +23 209 358 -20 1237 1877 90 540 0 +24 56 388 20 1551 2191 90 0 418 +25 115 269 -10 2716 3356 90 623 0 +26 377 356 10 1606 2246 90 0 616 +27 113 229 30 883 1523 90 0 740 +28 205 343 20 662 1302 90 0 680 +29 48 137 20 1557 2197 90 0 768 +30 467 157 -20 2067 2707 90 468 0 +31 220 394 10 2543 3183 90 0 676 +32 436 54 20 1751 2391 90 0 190 +33 54 357 10 1456 2096 90 0 868 +34 456 154 10 227 867 90 0 986 +35 216 307 -20 2276 2916 90 567 0 +36 280 224 -30 1986 2626 90 579 0 +37 90 270 10 325 965 90 0 806 +38 166 452 20 359 999 90 0 444 +39 17 283 -10 2344 2984 90 109 0 +40 196 192 -20 1850 2490 90 68 0 +41 94 275 10 229 869 90 0 595 +42 292 445 -20 1476 2116 90 744 0 +43 329 471 30 2543 3183 90 0 208 +44 326 57 20 1124 1764 90 0 899 +45 95 466 -10 2784 3424 90 288 0 +46 429 282 20 2778 3418 90 0 611 +47 229 364 10 2272 2912 90 0 335 +48 457 160 -20 2751 3391 90 772 0 +49 452 154 -10 223 863 90 495 0 +50 113 289 10 142 782 90 0 272 +51 67 387 -30 2136 2776 90 467 0 +52 368 17 -10 1781 2421 90 416 0 +53 341 367 -30 2290 2930 90 491 0 +54 410 364 30 1602 2242 90 0 436 +55 80 281 -20 1477 2117 90 180 0 +56 321 224 -20 1866 2506 90 487 0 +57 73 395 20 983 1623 90 0 698 +58 259 76 10 688 1328 90 0 843 +59 121 203 -20 1552 2192 90 694 0 +60 118 256 -20 2279 2919 90 539 0 +61 236 361 -10 1473 2113 90 559 0 +62 78 371 -10 210 850 90 241 0 +63 301 53 20 729 1369 90 0 211 +64 382 197 20 400 1040 90 0 778 +65 491 160 -10 1749 2389 90 583 0 +66 453 164 -10 2846 3486 90 155 0 +67 277 371 30 355 995 90 0 746 +68 272 212 20 2090 2730 90 0 40 +69 386 218 -30 1661 2301 90 717 0 +70 353 32 10 665 1305 90 0 678 +71 59 389 20 1458 2098 90 0 977 +72 414 62 -30 1446 2086 90 789 0 +73 278 357 10 110 750 90 0 169 +74 101 179 -30 2172 2812 90 777 0 +75 396 234 -20 2150 2790 90 230 0 +76 74 390 -20 557 1197 90 786 0 +77 332 55 30 211 851 90 0 700 +78 272 365 30 453 1093 90 0 939 +79 418 355 -10 1797 2437 90 697 0 +80 216 380 -30 2060 2700 90 97 0 +81 440 173 -10 2979 3619 90 954 0 +82 89 358 -10 2991 3631 90 464 0 +83 66 491 20 1830 2470 90 0 160 +84 317 234 10 2239 2879 90 0 128 +85 439 297 -10 1803 2443 90 852 0 +86 394 367 30 185 825 90 0 825 +87 58 364 10 2022 2662 90 0 508 +88 290 75 20 179 819 90 0 896 +89 346 344 -10 2972 3612 90 16 0 +90 131 269 10 2148 2788 90 0 466 +91 236 96 20 1364 2004 90 0 752 +92 29 282 10 1170 1810 90 0 996 +93 418 385 30 2517 3157 0 0 1008 +94 148 225 -30 373 1013 90 431 0 +95 166 464 -20 554 1194 90 111 0 +96 266 373 10 553 1193 90 0 20 +97 201 273 30 54 694 90 0 80 +98 255 245 10 7 647 90 0 224 +99 220 379 10 2154 2794 90 0 118 +100 85 317 30 2367 3007 90 0 618 +101 125 264 -20 2615 3255 90 601 0 +102 131 253 -10 2569 3209 90 290 0 +103 184 188 -20 1020 1660 90 684 0 +104 128 209 20 853 1493 90 0 373 +105 373 364 20 2930 3570 90 0 702 +106 389 342 -20 905 1545 90 446 0 +107 420 20 30 335 975 90 0 863 +108 132 218 10 122 762 90 0 850 +109 32 256 10 661 1301 90 0 39 +110 406 339 20 179 819 90 0 995 +111 191 397 20 158 798 90 0 95 +112 72 341 -10 2626 3266 90 257 0 +113 35 308 -20 2832 3472 90 737 0 +114 169 360 -10 1932 2572 90 14 0 +115 222 381 -20 2349 2989 90 441 0 +116 96 292 10 622 1262 90 0 564 +117 311 496 -20 488 1128 90 419 0 +118 220 384 -10 2443 3083 90 99 0 +119 259 243 20 11 651 90 0 912 +120 349 476 10 2243 2883 90 0 558 +121 63 159 -30 769 1409 90 313 0 +122 112 243 -10 2081 2721 90 228 0 +123 448 302 20 2087 2727 90 0 492 +124 343 27 20 956 1596 90 0 918 +125 67 485 40 1926 2566 90 0 799 +126 220 359 -10 1184 1824 90 333 0 +127 147 435 10 1871 2511 90 0 904 +128 317 235 -10 2330 2970 90 84 0 +129 43 355 20 1355 1995 90 0 734 +130 368 340 10 221 861 90 0 359 +131 450 72 -20 2321 2961 90 815 0 +132 400 364 30 330 970 90 0 805 +133 355 480 20 1376 2016 90 0 326 +134 450 153 20 293 933 90 0 471 +135 126 188 -10 1858 2498 90 563 0 +136 380 223 -10 1374 2014 90 213 0 +137 71 453 20 445 1085 90 0 207 +138 54 287 20 199 839 90 0 928 +139 420 168 -30 2996 3636 90 192 0 +140 219 89 20 2452 3092 90 0 287 +141 189 327 10 180 820 90 0 432 +142 191 309 -20 1190 1830 90 881 0 +143 301 67 -10 240 880 90 408 0 +144 484 161 10 1456 2096 0 0 1004 +145 77 483 20 2299 2939 90 0 235 +146 241 375 -10 1758 2398 90 348 0 +147 428 64 -10 961 1601 90 885 0 +148 403 361 -10 1212 1852 90 339 0 +149 257 336 -10 2866 3506 90 15 0 +150 131 241 -20 3065 3705 90 571 0 +151 63 166 30 2262 2902 90 0 18 +152 71 368 20 2970 3610 90 0 719 +153 272 228 -20 1793 2433 90 798 0 +154 25 290 30 2631 3271 0 0 1005 +155 441 157 10 212 852 90 0 66 +156 13 266 20 964 1604 90 0 784 +157 251 376 -20 2946 3586 90 653 0 +158 61 170 -20 2168 2808 90 985 0 +159 386 357 20 1193 1833 90 0 675 +160 95 475 -20 2685 3325 90 83 0 +161 90 298 10 1864 2504 90 0 399 +162 71 388 -30 1265 1905 90 429 0 +163 383 246 -10 2628 3268 90 402 0 +164 352 38 10 386 1026 90 0 864 +165 395 1 30 647 1287 90 0 607 +166 120 210 -30 1042 1682 90 421 0 +167 46 383 30 1048 1688 90 0 657 +168 202 198 -10 2038 2678 90 174 0 +169 358 365 -10 2086 2726 90 73 0 +170 191 352 20 117 757 90 0 807 +171 470 152 30 986 1626 90 0 179 +172 228 124 20 127 767 90 0 720 +173 402 230 -30 1962 2602 90 362 0 +174 323 229 10 1478 2118 90 0 168 +175 331 486 10 1763 2403 90 0 672 +176 112 208 10 1361 2001 90 0 231 +177 172 435 -20 2821 3461 90 765 0 +178 326 498 -30 781 1421 90 820 0 +179 460 183 -30 2547 3187 90 171 0 +180 95 279 20 157 797 90 0 55 +181 76 456 30 540 1180 90 0 263 +182 242 350 -30 2571 3211 90 731 0 +183 152 196 -20 111 751 90 610 0 +184 268 351 -30 1210 1850 90 342 0 +185 360 356 -20 2493 3133 90 246 0 +186 39 296 -10 1743 2383 90 632 0 +187 262 368 30 922 1562 90 0 960 +188 204 90 20 854 1494 90 0 274 +189 149 273 20 103 743 90 0 913 +190 446 86 -20 2816 3456 90 32 0 +191 139 269 -40 1488 2128 90 923 0 +192 483 170 30 1957 2597 90 0 139 +193 39 278 10 1361 2001 90 0 938 +194 201 307 10 1473 2113 90 0 781 +195 395 378 -30 1396 2036 90 889 0 +196 139 262 30 1210 1850 90 0 866 +197 176 447 20 210 850 90 0 258 +198 67 380 -30 2039 2679 90 251 0 +199 35 358 -30 1257 1897 90 905 0 +200 294 455 -10 2186 2826 90 614 0 +201 351 33 20 481 1121 90 0 685 +202 216 316 -10 2079 2719 90 997 0 +203 261 96 40 207 847 90 0 924 +204 238 57 -10 1096 1736 90 309 0 +205 383 18 -10 1403 2043 90 693 0 +206 152 460 -30 1070 1710 90 572 0 +207 94 479 -20 2590 3230 90 137 0 +208 337 453 -30 2745 3385 90 43 0 +209 135 460 -20 1545 2185 90 857 0 +210 260 104 20 146 786 90 0 547 +211 337 63 -20 1805 2445 90 63 0 +212 32 247 -10 562 1202 90 606 0 +213 394 205 10 205 845 90 0 136 +214 95 294 10 530 1170 90 0 243 +215 253 241 -30 2595 3235 90 743 0 +216 223 90 -30 2547 3187 90 562 0 +217 64 473 10 1044 1684 90 0 232 +218 275 431 -30 1002 1642 90 858 0 +219 261 84 10 494 1134 90 0 788 +220 176 296 -30 990 1630 90 945 0 +221 361 349 -30 2776 3416 90 347 0 +222 168 433 -20 2916 3556 90 941 0 +223 394 10 40 929 1569 90 0 496 +224 308 60 -10 536 1176 90 98 0 +225 94 456 -20 2884 3524 90 226 0 +226 73 484 20 2205 2845 90 0 225 +227 277 434 20 1187 1827 90 0 969 +228 119 232 10 1699 2339 90 0 122 +229 78 375 10 212 852 90 0 747 +230 366 346 20 408 1048 90 0 75 +231 125 181 -10 2478 3118 90 176 0 +232 69 493 -10 1737 2377 90 217 0 +233 432 80 -20 668 1308 90 957 0 +234 72 391 -10 1172 1812 90 811 0 +235 85 486 -20 2398 3038 90 145 0 +236 204 371 -20 509 1149 90 713 0 +237 173 328 10 2241 2881 90 0 959 +238 280 423 -30 711 1351 90 9 0 +239 200 327 -20 2910 3550 90 755 0 +240 241 98 -40 2747 3387 90 984 0 +241 96 356 10 186 826 90 0 62 +242 332 491 30 971 1611 90 0 834 +243 81 283 -10 1384 2024 90 214 0 +244 373 22 -30 2072 2712 90 510 0 +245 255 371 40 1969 2609 90 0 958 +246 358 359 20 2399 3039 90 0 185 +247 216 93 10 2233 2873 90 0 803 +248 73 360 20 2707 3347 90 0 317 +249 305 212 20 916 1556 90 0 690 +250 151 462 10 1162 1802 90 0 253 +251 47 389 30 862 1502 90 0 198 +252 155 198 30 108 748 90 0 599 +253 152 457 -10 977 1617 90 250 0 +254 329 48 10 1315 1955 90 0 295 +255 88 394 10 487 1127 90 0 517 +256 153 295 20 3078 3718 0 0 1010 +257 81 373 10 350 990 90 0 112 +258 163 453 -20 453 1093 90 197 0 +259 378 25 10 2168 2808 90 0 849 +260 401 385 -10 2624 3264 90 311 0 +261 184 340 10 2528 3168 90 0 865 +262 402 362 -30 1121 1761 90 512 0 +263 70 482 -30 2111 2751 90 181 0 +264 357 445 -10 2947 3587 90 353 0 +265 212 71 -10 964 1604 90 999 0 +266 231 81 30 2163 2803 90 0 688 +267 379 208 10 595 1235 90 0 543 +268 236 95 -20 1877 2517 90 869 0 +269 386 344 20 999 1639 90 0 349 +270 189 200 10 1749 2389 90 0 696 +271 296 253 10 594 1234 90 0 709 +272 73 303 -10 2157 2797 90 50 0 +273 30 162 -10 1862 2502 90 281 0 +274 230 95 -20 1659 2299 90 188 0 +275 57 131 10 1163 1803 90 0 484 +276 379 245 10 2533 3173 90 0 645 +277 107 221 40 294 934 90 0 504 +278 154 458 20 885 1525 0 0 1006 +279 290 417 -30 171 811 90 826 0 +280 272 243 30 23 663 90 0 946 +281 94 130 10 361 1001 90 0 273 +282 222 356 -30 1368 2008 90 397 0 +283 243 108 -30 2821 3461 90 831 0 +284 224 93 20 1951 2591 90 0 637 +285 155 242 -20 646 1286 90 983 0 +286 440 302 20 1039 1679 90 0 293 +287 221 102 -20 2618 3258 90 140 0 +288 52 484 10 1441 2081 90 0 45 +289 111 244 -20 1989 2629 90 971 0 +290 132 273 10 1963 2603 90 0 102 +291 228 186 20 67 707 90 0 376 +292 221 374 -10 890 1530 90 542 0 +293 406 286 -20 3024 3664 90 286 0 +294 390 9 30 1023 1663 90 0 331 +295 335 52 -10 1521 2161 90 254 0 +296 189 368 -30 132 772 90 829 0 +297 397 40 -20 2251 2891 90 443 0 +298 408 305 -10 179 819 90 356 0 +299 156 434 -20 2625 3265 90 888 0 +300 180 335 -30 2341 2981 90 628 0 +301 327 483 20 1858 2498 90 0 687 +302 363 62 -10 2965 3605 90 381 0 +303 375 342 -20 699 1339 90 823 0 +304 16 280 -30 2527 3167 90 619 0 +305 277 431 -20 1094 1734 90 448 0 +306 110 241 -20 1896 2536 90 424 0 +307 48 385 20 768 1408 90 0 609 +308 152 260 10 98 738 90 0 382 +309 255 120 10 130 770 90 0 204 +310 214 382 -10 2251 2891 90 891 0 +311 414 384 10 2422 3062 90 0 260 +312 232 378 20 1954 2594 90 0 728 +313 80 141 30 254 894 90 0 121 +314 188 330 -10 273 913 90 859 0 +315 157 192 -10 2970 3610 90 620 0 +316 101 237 20 1591 2231 90 0 638 +317 74 360 -20 2616 3256 90 248 0 +318 267 260 20 269 909 90 0 724 +319 378 46 -20 2850 3490 90 770 0 +320 420 311 -30 653 1293 90 993 0 +321 384 217 20 1569 2209 90 0 975 +322 418 300 10 371 1011 90 0 714 +323 356 77 -20 2009 2649 90 427 0 +324 253 244 -10 2502 3142 90 533 0 +325 323 258 10 1088 1728 90 0 660 +326 293 454 -20 2371 3011 90 133 0 +327 231 97 -20 2647 3287 90 773 0 +328 316 234 -20 2421 3061 90 581 0 +329 207 196 -40 2325 2965 90 503 0 +330 321 228 30 1960 2600 90 0 634 +331 382 17 -30 1494 2134 90 294 0 +332 206 326 -10 3006 3646 90 809 0 +333 198 284 10 62 702 90 0 126 +334 137 186 -20 2672 3312 90 666 0 +335 229 396 -10 2642 3282 90 47 0 +336 268 235 10 1602 2242 90 0 2 +337 95 243 20 519 1159 90 0 855 +338 297 430 -30 186 826 90 929 0 +339 393 368 10 232 872 90 0 148 +340 66 391 -10 1361 2001 90 750 0 +341 189 339 -10 2623 3263 90 816 0 +342 280 351 30 105 745 90 0 184 +343 241 77 30 985 1625 90 0 578 +344 134 265 20 2426 3066 90 0 532 +345 420 95 30 230 870 90 0 516 +346 111 279 30 141 781 90 0 367 +347 367 358 30 1893 2533 90 0 221 +348 239 373 10 1665 2305 90 0 146 +349 384 235 -20 2432 3072 90 269 0 +350 284 360 30 115 755 90 0 998 +351 325 75 30 2130 2770 0 0 1009 +352 279 369 -10 262 902 90 651 0 +353 340 449 10 2840 3480 90 0 264 +354 275 448 10 2662 3302 90 0 577 +355 447 88 -20 2723 3363 90 592 0 +356 314 279 10 70 710 90 0 298 +357 434 377 -10 2105 2745 90 501 0 +358 67 377 -20 1946 2586 90 895 0 +359 370 353 -10 506 1146 90 130 0 +360 57 367 -30 1929 2569 90 937 0 +361 332 486 20 1672 2312 90 0 366 +362 386 361 30 1287 1927 90 0 173 +363 55 282 40 197 837 90 0 622 +364 317 467 20 227 867 90 0 489 +365 335 54 -30 1613 2253 90 861 0 +366 348 466 -20 2343 2983 90 361 0 +367 132 314 -30 2974 3614 90 346 0 +368 328 216 -10 1672 2312 90 591 0 +369 416 48 -10 1640 2280 90 757 0 +370 370 55 -20 2646 3286 90 465 0 +371 149 434 30 1963 2603 90 0 780 +372 466 169 30 2262 2902 90 0 410 +373 141 267 -20 1395 2035 90 104 0 +374 258 350 20 1582 2222 90 0 649 +375 428 312 -10 844 1484 90 569 0 +376 211 188 -20 420 1060 90 291 0 +377 50 343 -20 2514 3154 90 763 0 +378 107 311 40 2573 3213 90 0 812 +379 178 441 -20 204 844 90 673 0 +380 232 85 10 2069 2709 90 0 761 +381 391 23 10 2458 3098 90 0 302 +382 137 227 -10 115 755 90 308 0 +383 161 203 -20 100 740 90 472 0 +384 363 212 -20 3034 3674 90 439 0 +385 384 346 -20 1091 1731 90 722 0 +386 166 434 -20 2725 3365 90 711 0 +387 274 248 20 70 710 90 0 639 +388 156 421 -10 2989 3629 90 877 0 +389 346 211 10 103 743 90 0 662 +390 265 358 -20 1112 1752 90 652 0 +391 96 407 20 219 859 90 0 892 +392 443 70 -10 2224 2864 90 990 0 +393 125 212 10 947 1587 90 0 742 +394 361 337 50 141 781 90 0 854 +395 322 78 -10 2224 2864 90 534 0 +396 481 156 20 1360 2000 90 0 725 +397 188 293 30 597 1237 90 0 282 +398 76 408 30 780 1420 90 0 695 +399 130 304 -10 2935 3575 90 161 0 +400 378 363 30 1509 2149 90 0 976 +401 185 301 20 1090 1730 90 0 884 +402 385 235 10 2341 2981 90 0 163 +403 261 350 10 1489 2129 90 0 521 +404 389 33 -20 2743 3383 90 910 0 +405 151 214 10 271 911 90 0 795 +406 265 94 10 156 796 90 0 808 +407 65 164 -20 2355 2995 90 787 0 +408 293 81 10 174 814 90 0 143 +409 363 55 -20 2743 3383 90 11 0 +410 465 176 -30 2359 2999 90 372 0 +411 428 298 -20 1414 2054 90 792 0 +412 75 379 -10 2327 2967 90 502 0 +413 404 378 10 617 1257 90 0 800 +414 203 203 -10 2610 3250 90 528 0 +415 259 88 20 305 945 90 0 838 +416 362 17 10 1644 2284 90 0 52 +417 320 258 20 324 964 90 0 615 +418 59 358 -20 2118 2758 90 24 0 +419 316 453 20 213 853 90 0 117 +420 225 192 20 63 703 90 0 627 +421 140 206 30 168 808 90 0 166 +422 83 151 10 194 834 90 0 17 +423 366 196 10 127 767 90 0 745 +424 108 245 20 1490 2130 90 0 306 +425 129 267 10 2240 2880 90 0 612 +426 57 379 20 667 1307 90 0 947 +427 329 56 20 1217 1857 90 0 323 +428 213 363 -10 994 1634 90 535 0 +429 76 391 30 1078 1718 90 0 162 +430 330 259 -20 991 1631 90 739 0 +431 136 217 30 658 1298 90 0 94 +432 165 333 -10 2141 2781 90 141 0 +433 160 431 -10 2982 3622 90 574 0 +434 338 489 -30 1068 1708 90 460 0 +435 335 64 -10 1713 2353 90 898 0 +436 412 361 -30 1508 2148 90 54 0 +437 259 90 30 397 1037 90 0 438 +438 265 77 -30 592 1232 90 437 0 +439 460 173 20 2647 3287 90 0 384 +440 83 301 20 2057 2697 90 0 906 +441 201 331 20 467 1107 90 0 115 +442 118 214 20 136 776 90 0 875 +443 395 30 20 2556 3196 90 0 297 +444 125 444 -20 1757 2397 90 38 0 +445 283 248 30 33 673 0 0 1014 +446 391 334 20 807 1447 90 0 106 +447 212 215 -20 2920 3560 90 573 0 +448 276 428 20 808 1448 90 0 305 +449 96 152 20 182 822 90 0 933 +450 425 85 10 296 936 90 0 871 +451 336 7 -10 1344 1984 90 1000 0 +452 196 219 -10 2814 3454 90 994 0 +453 210 94 20 757 1397 90 0 917 +454 310 81 -30 2606 3246 90 704 0 +455 341 37 -20 231 871 90 749 0 +456 344 478 -10 2056 2696 90 549 0 +457 406 37 40 264 904 90 0 477 +458 69 346 10 2722 3362 0 0 1007 +459 80 376 -10 211 851 90 561 0 +460 314 449 30 209 849 90 0 434 +461 209 201 30 2513 3153 90 0 708 +462 88 379 20 449 1089 90 0 841 +463 352 500 -20 1265 1905 90 730 0 +464 65 357 10 2214 2854 90 0 82 +465 345 15 20 1242 1882 90 0 370 +466 125 245 -10 2762 3402 90 90 0 +467 52 369 30 1833 2473 90 0 51 +468 449 140 20 490 1130 90 0 30 +469 430 310 30 936 1576 90 0 966 +470 109 325 -40 2768 3408 90 565 0 +471 446 139 -20 397 1037 90 134 0 +472 229 214 20 41 681 90 0 383 +473 197 301 10 73 713 90 0 590 +474 146 245 20 456 1096 90 0 973 +475 401 368 -30 424 1064 90 566 0 +476 116 259 -20 2373 3013 90 481 0 +477 374 55 -40 2552 3192 90 457 0 +478 249 251 20 2796 3436 0 0 1011 +479 325 490 10 683 1323 90 0 692 +480 59 159 10 863 1503 90 0 493 +481 186 177 20 1121 1761 90 0 476 +482 319 229 10 2052 2692 90 0 844 +483 26 269 -30 765 1405 90 7 0 +484 53 139 -10 974 1614 90 275 0 +485 471 154 20 1079 1719 90 0 796 +486 301 247 -20 2998 3638 90 646 0 +487 388 220 20 1183 1823 90 0 56 +488 235 81 20 1210 1850 90 0 771 +489 347 479 -20 2149 2789 90 364 0 +490 367 59 -10 2929 3569 90 650 0 +491 261 370 30 829 1469 90 0 53 +492 441 287 -20 2675 3315 90 123 0 +493 44 153 -10 1755 2395 90 480 0 +494 263 351 10 1305 1945 90 0 907 +495 444 157 10 215 855 90 0 49 +496 374 17 -40 1685 2325 90 223 0 +497 448 295 -10 2484 3124 90 498 0 +498 446 297 10 1992 2632 90 0 497 +499 347 40 30 290 930 90 0 909 +500 318 493 10 585 1225 90 0 874 +501 399 352 10 1020 1660 90 0 357 +502 51 364 10 1647 2287 90 0 412 +503 250 217 40 2294 2934 90 0 329 +504 107 225 -40 200 840 90 277 0 +505 173 208 -10 1641 2281 90 886 0 +506 204 189 -20 2138 2778 90 593 0 +507 399 379 -10 2720 3360 90 537 0 +508 79 346 -10 2910 3550 90 87 0 +509 360 338 10 140 780 90 0 580 +510 390 17 30 1213 1853 90 0 244 +511 207 337 -10 565 1205 90 911 0 +512 409 361 30 817 1457 90 0 262 +513 206 377 20 319 959 90 0 962 +514 429 294 -30 1703 2343 90 520 0 +515 375 31 20 1945 2585 0 0 1002 +516 426 80 -30 482 1122 90 345 0 +517 74 374 -10 2422 3062 90 255 0 +518 408 20 30 279 919 90 0 935 +519 239 369 -20 1571 2211 90 890 0 +520 420 308 30 469 1109 90 0 514 +521 254 357 -10 1772 2412 90 403 0 +522 53 297 -20 2982 3622 90 22 0 +523 434 382 -10 2010 2650 90 541 0 +524 204 171 -20 718 1358 90 635 0 +525 173 169 10 1318 1958 90 0 557 +526 190 332 20 366 1006 90 0 585 +527 274 231 30 1886 2526 90 0 830 +528 207 194 10 2233 2873 90 0 414 +529 315 232 10 2513 3153 90 0 686 +530 425 87 20 239 879 90 0 5 +531 312 64 -10 342 982 90 932 0 +532 129 244 -20 2668 3308 90 344 0 +533 278 230 10 1226 1866 90 0 324 +534 351 75 10 1914 2554 90 0 395 +535 185 293 10 690 1330 90 0 428 +536 364 364 -20 1990 2630 90 682 0 +537 432 369 10 1907 2547 90 0 507 +538 128 249 20 1103 1743 90 0 548 +539 221 179 20 129 769 90 0 60 +540 194 296 20 410 1050 90 0 23 +541 413 350 10 1317 1957 90 0 523 +542 214 372 10 703 1343 90 0 292 +543 379 229 -10 805 1445 90 267 0 +544 91 298 -10 1773 2413 90 705 0 +545 226 120 30 132 772 90 0 555 +546 344 46 -20 1420 2060 90 738 0 +547 238 84 -20 1394 2034 90 210 0 +548 138 276 -20 1675 2315 90 538 0 +549 346 487 10 1568 2208 90 0 456 +550 95 160 10 179 819 90 0 658 +551 103 266 30 822 1462 90 0 893 +552 98 286 30 1097 1737 90 0 828 +553 77 172 -30 2736 3376 90 721 0 +554 147 199 30 114 754 90 0 597 +555 210 98 -30 481 1121 90 545 0 +556 428 292 -10 1611 2251 90 4 0 +557 121 236 -10 1794 2434 90 525 0 +558 336 479 -10 1958 2598 90 120 0 +559 203 369 10 601 1241 90 0 61 +560 296 232 -10 1028 1668 90 942 0 +561 87 369 10 201 841 90 0 459 +562 247 88 30 1684 2324 90 0 216 +563 104 246 10 1113 1753 90 0 135 +564 67 302 -10 2253 2893 90 116 0 +565 114 296 40 143 783 90 0 470 +566 394 356 30 178 818 90 0 475 +567 192 306 20 1283 1923 90 0 35 +568 16 285 -10 2252 2892 90 978 0 +569 419 310 10 562 1202 90 0 375 +570 389 221 10 1092 1732 90 0 980 +571 129 264 20 2521 3161 90 0 150 +572 172 483 30 664 1304 90 0 206 +573 325 251 20 1185 1825 90 0 447 +574 151 436 10 2146 2786 90 0 433 +575 263 91 20 159 799 90 0 1 +576 401 15 20 445 1085 90 0 598 +577 253 382 -10 2850 3490 90 354 0 +578 247 89 -30 1775 2415 90 343 0 +579 283 229 30 1131 1771 90 0 36 +580 366 341 -10 313 953 90 509 0 +581 392 213 20 1852 2492 90 0 328 +582 167 304 20 99 739 90 0 754 +583 477 154 10 1266 1906 90 0 65 +584 234 383 10 1859 2499 90 0 775 +585 199 327 -20 2819 3459 90 526 0 +586 140 220 30 563 1203 90 0 987 +587 144 266 30 107 747 90 0 964 +588 432 105 -30 2952 3592 90 853 0 +589 368 325 30 139 779 90 0 934 +590 202 386 -10 144 784 90 473 0 +591 325 246 10 1280 1920 90 0 368 +592 430 86 20 2526 3166 90 0 355 +593 200 195 20 1945 2585 90 0 506 +594 440 295 30 1896 2536 90 0 624 +595 77 287 -10 1665 2305 90 41 0 +596 187 362 20 1546 2186 90 0 751 +597 131 207 -30 759 1399 90 554 0 +598 405 5 -20 546 1186 90 576 0 +599 125 226 -30 1149 1789 90 252 0 +600 254 335 -10 2773 3413 90 794 0 +601 212 168 20 620 1260 90 0 101 +602 281 279 20 474 1114 90 0 901 +603 326 241 20 1375 2015 90 0 968 +604 152 241 20 553 1193 90 0 872 +605 71 139 -30 567 1207 90 963 0 +606 46 277 10 349 989 90 0 212 +607 393 13 -30 1118 1758 90 165 0 +608 87 454 -20 642 1282 90 659 0 +609 86 359 -20 2988 3628 90 307 0 +610 220 192 20 65 705 90 0 183 +611 426 279 -20 2872 3512 90 46 0 +612 131 267 -10 2332 2972 90 425 0 +613 200 297 30 313 953 90 0 878 +614 299 442 10 1664 2304 90 0 200 +615 265 218 -20 2189 2829 90 417 0 +616 398 231 -10 2056 2696 90 26 0 +617 312 74 -30 2509 3149 90 779 0 +618 99 307 -30 2474 3114 90 100 0 +619 22 283 30 1073 1713 90 0 304 +620 67 160 10 2450 3090 90 0 315 +621 390 42 -10 2348 2988 90 706 0 +622 44 279 -40 256 896 90 363 0 +623 200 182 10 913 1553 90 0 25 +624 458 303 -30 2291 2931 90 594 0 +625 298 438 10 327 967 90 0 927 +626 62 301 20 2990 3630 90 0 925 +627 112 251 -20 1393 2033 90 420 0 +628 184 354 30 1736 2376 90 0 300 +629 140 180 20 2769 3409 90 0 21 +630 269 428 -10 905 1545 90 981 0 +631 123 206 10 1645 2285 0 0 1012 +632 36 284 10 1458 2098 90 0 186 +633 272 233 -20 1507 2147 90 748 0 +634 320 231 -30 2144 2784 90 330 0 +635 211 180 20 518 1158 90 0 524 +636 114 169 -10 2372 3012 90 897 0 +637 245 239 -20 2693 3333 90 284 0 +638 117 204 -20 1458 2098 90 316 0 +639 316 254 -20 510 1150 90 387 0 +640 169 443 -10 260 900 90 776 0 +641 212 96 -20 664 1304 90 12 0 +642 119 285 -20 2823 3463 90 848 0 +643 71 163 -10 2545 3185 90 914 0 +644 78 361 10 2980 3620 90 0 873 +645 354 219 -10 3076 3716 90 276 0 +646 389 233 20 2247 2887 90 0 486 +647 90 391 10 301 941 90 0 915 +648 209 307 10 1571 2211 90 0 882 +649 363 351 -20 2683 3323 90 374 0 +650 405 47 10 255 895 90 0 490 +651 278 329 10 83 723 90 0 352 +652 261 371 20 738 1378 90 0 390 +653 302 470 20 1987 2627 90 0 157 +654 373 205 40 130 770 90 0 902 +655 381 20 -10 1588 2228 90 727 0 +656 90 277 30 422 1062 90 0 839 +657 46 341 -30 2419 3059 90 167 0 +658 50 138 -10 1649 2289 90 550 0 +659 61 437 20 265 905 90 0 608 +660 331 252 -10 894 1534 90 325 0 +661 440 81 20 2425 3065 0 0 1003 +662 384 206 -10 499 1139 90 389 0 +663 232 87 -20 1264 1904 90 712 0 +664 59 471 20 1244 1884 90 0 703 +665 174 304 20 93 733 90 0 769 +666 106 248 20 1206 1846 90 0 334 +667 410 287 -10 2980 3620 90 870 0 +668 206 313 -10 1851 2491 90 862 0 +669 412 367 20 720 1360 90 0 879 +670 412 300 -30 275 915 90 835 0 +671 206 295 -10 2569 3209 90 948 0 +672 329 459 -10 2645 3285 90 175 0 +673 177 436 20 199 839 90 0 379 +674 266 264 30 363 1003 90 0 967 +675 308 235 -20 2895 3535 90 159 0 +676 260 330 -10 2963 3603 90 31 0 +677 49 136 -10 1465 2105 90 992 0 +678 356 28 -10 760 1400 90 70 0 +679 428 384 -20 2204 2844 90 689 0 +680 220 362 -20 1091 1731 90 28 0 +681 437 61 -20 1848 2488 90 989 0 +682 365 360 20 1800 2440 90 0 536 +683 107 168 -30 2275 2915 90 955 0 +684 220 177 20 221 861 90 0 103 +685 347 21 -20 1146 1786 90 201 0 +686 293 245 -10 3141 3781 90 529 0 +687 267 436 -20 2767 3407 90 301 0 +688 216 96 -30 2326 2966 90 266 0 +689 383 351 20 167 807 90 0 679 +690 289 240 -20 699 1339 90 249 0 +691 129 185 -10 2574 3214 90 903 0 +692 291 450 -10 2465 3105 90 479 0 +693 387 21 10 1308 1948 90 0 205 +694 116 255 20 999 1639 90 0 59 +695 50 368 -30 1741 2381 90 398 0 +696 121 249 -10 2181 2821 90 270 0 +697 404 346 10 923 1563 90 0 79 +698 77 360 -20 2979 3619 90 57 0 +699 447 102 10 2938 3578 90 0 13 +700 366 16 -30 1738 2378 90 77 0 +701 348 16 30 1540 2180 90 0 952 +702 353 346 -20 2874 3514 90 105 0 +703 54 485 -20 1533 2173 90 664 0 +704 319 77 30 2318 2958 90 0 454 +705 83 282 10 1292 1932 90 0 544 +706 384 24 10 2361 3001 90 0 621 +707 52 469 -30 1147 1787 90 753 0 +708 199 200 -30 2705 3345 90 461 0 +709 273 234 -10 1416 2056 90 271 0 +710 16 281 10 2436 3076 90 0 6 +711 151 442 20 2242 2882 90 0 386 +712 223 114 20 138 778 90 0 663 +713 191 308 20 82 722 90 0 236 +714 448 297 -10 2392 3032 90 322 0 +715 386 28 20 2267 2907 90 0 759 +716 106 295 20 813 1453 90 0 961 +717 387 224 30 1277 1917 90 0 69 +718 96 377 10 199 839 90 0 741 +719 86 361 -20 2986 3626 90 152 0 +720 211 107 -20 291 931 90 172 0 +721 43 125 30 1363 2003 90 0 553 +722 369 351 20 598 1238 90 0 385 +723 388 228 -30 995 1635 90 756 0 +724 325 228 -20 1570 2210 90 318 0 +725 490 159 -20 1657 2297 90 396 0 +726 420 78 20 1158 1798 90 0 774 +727 396 4 10 833 1473 90 0 655 +728 222 317 -20 2175 2815 90 312 0 +729 389 198 20 303 943 90 0 813 +730 322 454 20 216 856 90 0 463 +731 241 391 30 2745 3385 90 0 182 +732 256 117 -30 2927 3567 90 926 0 +733 298 255 -10 48 688 90 921 0 +734 74 363 -20 2523 3163 90 129 0 +735 345 496 20 1167 1807 90 0 887 +736 167 169 -20 1414 2054 90 970 0 +737 23 306 20 1942 2582 90 0 113 +738 317 62 20 437 1077 90 0 546 +739 319 257 20 416 1056 90 0 430 +740 129 255 -30 2476 3116 90 27 0 +741 59 377 -10 1848 2488 90 718 0 +742 138 272 -10 1581 2221 90 393 0 +743 317 251 30 700 1340 90 0 215 +744 279 436 20 1279 1919 90 0 42 +745 371 207 -10 128 768 90 423 0 +746 263 372 -30 646 1286 90 67 0 +747 50 347 -10 2322 2962 90 229 0 +748 275 236 20 1323 1963 90 0 633 +749 334 47 20 219 859 90 0 455 +750 50 383 10 1649 2289 90 0 340 +751 170 338 -20 2044 2684 90 596 0 +752 245 109 -20 2849 3489 90 91 0 +753 69 475 30 949 1589 90 0 707 +754 54 372 -20 1751 2391 90 582 0 +755 198 334 20 1963 2603 90 0 239 +756 380 228 30 897 1537 90 0 723 +757 425 118 10 219 859 90 0 369 +758 80 398 10 586 1226 90 0 802 +759 366 57 -20 2836 3476 90 715 0 +760 67 463 30 344 984 90 0 972 +761 226 86 -10 2355 2995 90 380 0 +762 59 480 -20 1343 1983 90 801 0 +763 40 378 20 1146 1786 90 0 377 +764 250 367 -10 1873 2513 90 867 0 +765 157 436 20 2533 3173 90 0 177 +766 463 161 -10 2163 2803 90 908 0 +767 266 250 10 169 809 90 0 19 +768 51 162 -20 1973 2613 90 29 0 +769 194 353 -20 1131 1771 90 665 0 +770 383 41 20 2445 3085 90 0 319 +771 247 82 -20 1588 2228 90 488 0 +772 457 142 20 589 1229 90 0 48 +773 244 94 20 1555 2195 90 0 327 +774 441 63 -20 2034 2674 90 726 0 +775 244 371 -10 2070 2710 90 584 0 +776 174 444 10 208 848 90 0 640 +777 94 247 30 613 1253 90 0 74 +778 320 225 -20 1774 2414 90 64 0 +779 316 80 30 2412 3052 90 0 617 +780 155 447 -30 2432 3072 90 371 0 +781 211 308 -10 1663 2303 90 194 0 +782 297 442 -20 1572 2212 90 810 0 +783 200 342 10 757 1397 90 0 919 +784 44 325 -20 2941 3581 90 156 0 +785 438 60 -20 1940 2580 90 953 0 +786 80 374 20 259 899 90 0 76 +787 59 163 20 2071 2711 90 0 407 +788 236 92 -10 1970 2610 90 219 0 +789 414 66 30 1352 1992 90 0 72 +790 34 279 20 1266 1906 90 0 950 +791 475 156 -30 1173 1813 90 824 0 +792 404 310 20 165 805 90 0 411 +793 367 239 -20 2916 3556 90 819 0 +794 210 359 10 1328 1968 90 0 600 +795 133 278 -10 1770 2410 90 405 0 +796 446 169 -20 2945 3585 90 485 0 +797 188 356 -30 1642 2282 90 836 0 +798 312 252 20 605 1245 90 0 153 +799 69 485 -40 2018 2658 90 125 0 +800 413 353 -10 1410 2050 90 413 0 +801 54 446 20 277 917 90 0 762 +802 56 357 -10 1548 2188 90 758 0 +803 230 105 -10 2718 3358 90 247 0 +804 196 302 20 74 714 90 0 900 +805 391 373 -30 2820 3460 90 132 0 +806 101 295 -10 718 1358 90 37 0 +807 234 350 -20 2377 3017 90 170 0 +808 215 108 -10 2520 3160 90 406 0 +809 142 457 10 1353 1993 90 0 332 +810 283 425 20 618 1258 90 0 782 +811 77 397 10 679 1319 90 0 234 +812 105 317 -40 2669 3309 90 378 0 +813 382 213 -20 1475 2115 90 729 0 +814 213 76 -10 1060 1700 90 8 0 +815 417 56 20 1542 2182 90 0 131 +816 183 340 10 2437 3077 90 0 341 +817 123 242 -20 2950 3590 90 930 0 +818 475 136 20 789 1429 90 0 832 +819 377 246 20 2814 3454 90 0 793 +820 310 484 30 386 1026 90 0 178 +821 47 280 -20 205 845 90 833 0 +822 57 456 20 282 922 90 0 10 +823 313 266 20 133 773 90 0 303 +824 475 145 30 888 1528 90 0 791 +825 400 376 -30 522 1162 90 86 0 +826 290 416 30 170 810 90 0 279 +827 277 369 30 170 810 90 0 916 +828 91 303 -30 1959 2599 90 552 0 +829 194 301 30 126 766 90 0 296 +830 254 238 -30 2406 3046 90 527 0 +831 215 91 30 2050 2690 90 0 283 +832 500 162 -20 1848 2488 90 818 0 +833 56 287 20 197 837 90 0 821 +834 289 452 -30 2558 3198 90 242 0 +835 378 326 30 148 788 90 0 670 +836 197 350 30 946 1586 90 0 797 +837 243 88 20 1491 2131 90 0 920 +838 250 72 -20 885 1525 90 415 0 +839 101 290 -30 910 1550 90 656 0 +840 351 480 -30 1470 2110 90 991 0 +841 67 357 -20 2804 3444 90 462 0 +842 128 240 -10 3045 3685 90 880 0 +843 253 81 -10 786 1426 90 58 0 +844 307 227 -10 2613 3253 90 482 0 +845 233 441 -20 2985 3625 90 847 0 +846 311 47 -20 830 1470 90 922 0 +847 292 456 20 2278 2918 90 0 845 +848 183 187 20 1528 2168 90 0 642 +849 392 31 -10 2650 3290 90 259 0 +850 103 251 -10 1018 1658 90 108 0 +851 300 443 10 1756 2396 90 0 979 +852 420 295 10 1512 2152 90 0 85 +853 427 64 30 1052 1692 90 0 588 +854 372 354 -50 1701 2341 90 394 0 +855 101 263 -20 916 1556 90 337 0 +856 141 454 -20 1446 2086 90 951 0 +857 146 461 20 1257 1897 90 0 209 +858 298 430 30 229 869 90 0 218 +859 148 270 10 103 743 90 0 314 +860 76 287 -20 1574 2214 90 3 0 +861 308 55 30 631 1271 90 0 365 +862 143 257 10 261 901 90 0 668 +863 393 2 -30 739 1379 90 107 0 +864 385 28 -10 2046 2686 90 164 0 +865 204 291 -10 2663 3303 90 261 0 +866 132 272 -30 2054 2694 90 196 0 +867 206 379 10 227 867 90 0 764 +868 69 383 -10 2230 2870 90 33 0 +869 245 96 20 1463 2103 90 0 268 +870 431 301 10 1228 1868 90 0 667 +871 448 94 -10 2914 3554 90 450 0 +872 199 305 -20 1380 2020 90 604 0 +873 95 356 -10 2997 3637 90 644 0 +874 328 498 -10 873 1513 90 500 0 +875 108 222 -20 1257 1897 90 442 0 +876 341 26 10 1048 1688 90 0 894 +877 63 454 10 276 916 90 0 388 +878 222 357 -30 1277 1917 90 613 0 +879 416 364 -20 1698 2338 90 669 0 +880 127 278 10 1866 2506 90 0 842 +881 140 252 20 357 997 90 0 142 +882 218 298 -10 2466 3106 90 648 0 +883 432 87 -10 2618 3258 90 988 0 +884 216 300 -20 2373 3013 90 401 0 +885 438 72 10 858 1498 90 0 147 +886 184 178 10 1214 1854 90 0 505 +887 345 468 -20 2437 3077 90 735 0 +888 150 435 20 2055 2695 90 0 299 +889 395 365 30 185 825 90 0 195 +890 208 371 20 415 1055 90 0 519 +891 190 292 10 505 1145 90 0 310 +892 78 479 -20 849 1489 90 391 0 +893 104 198 -30 2063 2703 90 551 0 +894 346 13 -10 1446 2086 90 876 0 +895 47 388 20 953 1593 90 0 358 +896 315 57 -20 931 1571 90 88 0 +897 110 199 10 1967 2607 90 0 636 +898 323 60 10 1030 1670 90 0 435 +899 308 82 -20 2699 3339 90 44 0 +900 216 374 -20 795 1435 90 804 0 +901 326 253 -20 799 1439 90 602 0 +902 308 232 -40 2708 3348 90 654 0 +903 118 223 10 134 774 90 0 691 +904 149 444 -10 2335 2975 90 127 0 +905 95 395 30 212 852 90 0 199 +906 117 319 -20 2868 3508 90 440 0 +907 262 352 -10 1396 2036 90 494 0 +908 468 135 10 692 1332 90 0 766 +909 351 31 -30 573 1213 90 499 0 +910 361 15 20 1878 2518 90 0 404 +911 195 300 10 218 858 90 0 511 +912 397 27 -20 2148 2788 90 119 0 +913 179 311 -20 93 733 90 189 0 +914 77 133 10 469 1109 90 0 643 +915 66 397 -10 885 1525 90 647 0 +916 366 352 -30 2590 3230 90 827 0 +917 221 87 -20 1163 1803 90 453 0 +918 347 23 -20 860 1500 90 124 0 +919 176 358 -10 1835 2475 90 783 0 +920 229 78 -20 2256 2896 90 837 0 +921 272 246 10 22 662 90 0 733 +922 293 67 20 187 827 90 0 846 +923 140 265 40 1303 1943 90 0 191 +924 238 83 -40 1303 1943 90 203 0 +925 136 296 -20 3035 3675 90 626 0 +926 218 98 30 1762 2402 90 0 732 +927 290 440 -10 1381 2021 90 625 0 +928 29 302 -20 1845 2485 90 138 0 +929 290 425 30 179 819 90 0 338 +930 124 247 20 2855 3495 90 0 817 +931 442 287 -20 2584 3224 90 982 0 +932 294 64 10 191 831 90 0 531 +933 74 165 -20 2638 3278 90 449 0 +934 382 245 -30 2719 3359 90 589 0 +935 405 24 -30 274 914 90 518 0 +936 211 97 20 572 1212 90 0 965 +937 88 390 30 393 1033 90 0 360 +938 37 295 -10 1651 2291 90 193 0 +939 359 371 -30 2182 2822 90 78 0 +940 186 372 -20 1445 2085 90 974 0 +941 116 446 20 1658 2298 90 0 222 +942 293 249 10 43 683 90 0 560 +943 83 228 20 409 1049 90 0 944 +944 96 269 -20 725 1365 90 943 0 +945 179 284 30 791 1431 90 0 220 +946 368 219 -30 700 1340 90 280 0 +947 66 359 -20 2917 3557 90 426 0 +948 189 338 10 2714 3354 90 0 671 +949 163 277 10 3093 3733 0 0 1013 +950 5 296 -20 2146 2786 90 790 0 +951 152 478 20 775 1415 90 0 856 +952 366 34 -30 1846 2486 90 701 0 +953 429 80 20 575 1215 90 0 785 +954 464 178 10 2451 3091 90 0 81 +955 138 196 30 1753 2393 90 0 683 +956 87 481 10 2493 3133 0 0 1001 +957 425 99 20 231 871 90 0 233 +958 241 362 -40 2170 2810 90 245 0 +959 207 289 -10 2757 3397 90 237 0 +960 264 365 -30 1015 1655 90 187 0 +961 102 289 -20 1002 1642 90 716 0 +962 233 346 -20 2471 3111 90 513 0 +963 78 141 30 203 843 90 0 605 +964 196 348 -30 854 1494 90 587 0 +965 216 92 -20 2142 2782 90 936 0 +966 444 309 -30 2185 2825 90 469 0 +967 313 263 -30 226 866 90 674 0 +968 211 198 -20 2420 3060 90 603 0 +969 314 436 -20 1861 2501 90 227 0 +970 217 189 20 324 964 90 0 736 +971 197 178 20 818 1458 90 0 289 +972 60 497 -30 1637 2277 90 760 0 +973 206 312 -20 1760 2400 90 474 0 +974 197 351 20 1037 1677 90 0 940 +975 305 233 -20 2801 3441 90 321 0 +976 297 250 -30 3093 3733 90 400 0 +977 71 348 -20 2815 3455 90 71 0 +978 11 269 10 870 1510 90 0 568 +979 247 447 -10 2880 3520 90 851 0 +980 386 213 -10 1756 2396 90 570 0 +981 292 434 10 515 1155 90 0 630 +982 436 301 20 1133 1773 90 0 931 +983 145 221 20 468 1108 90 0 285 +984 224 96 40 1858 2498 90 0 240 +985 59 128 20 1256 1896 90 0 158 +986 489 150 -10 1558 2198 90 34 0 +987 152 225 -30 754 1394 90 586 0 +988 426 85 10 387 1027 90 0 883 +989 415 73 20 1255 1895 90 0 681 +990 440 70 10 2131 2771 90 0 392 +991 320 476 30 283 923 90 0 840 +992 57 132 10 1072 1712 90 0 677 +993 405 311 30 166 806 90 0 320 +994 109 250 10 1300 1940 90 0 452 +995 428 314 -20 752 1392 90 110 0 +996 40 288 -10 1553 2193 90 92 0 +997 175 282 10 886 1526 90 0 202 +998 298 456 -30 2092 2732 90 350 0 +999 208 101 10 387 1027 90 0 265 +1000 342 52 10 218 858 90 0 451 +1001 87 481 -10 2493 3133 90 956 0 +1002 375 31 -20 1945 2585 90 515 0 +1003 440 81 -20 2425 3065 90 661 0 +1004 484 161 -10 1456 2096 90 144 0 +1005 25 290 -30 2631 3271 90 154 0 +1006 154 458 -20 885 1525 90 278 0 +1007 69 346 -10 2722 3362 90 458 0 +1008 418 385 -30 2517 3157 90 93 0 +1009 325 75 -30 2130 2770 90 351 0 +1010 153 295 -20 3078 3718 90 256 0 +1011 249 251 -20 2796 3436 90 478 0 +1012 123 206 -10 1645 2285 90 631 0 +1013 163 277 -10 3093 3733 90 949 0 +1014 283 248 -30 33 673 90 445 0 diff --git a/jsprit-instances/instances/lilim/1000/LC2109.txt b/jsprit-instances/instances/lilim/1000/LC2109.txt new file mode 100644 index 00000000..458cb64a --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LC2109.txt @@ -0,0 +1,1024 @@ +250 700 1 +0 250 250 0 0 3914 0 0 0 +1 212 101 -10 2528 2955 90 788 0 +2 266 231 -30 1254 2779 90 527 0 +3 89 284 20 1341 1691 90 0 977 +4 430 298 -10 1219 2065 90 322 0 +5 435 77 -40 1065 1100 90 233 0 +6 25 293 20 2807 3281 90 0 784 +7 43 269 -10 567 968 90 606 0 +8 216 117 -20 311 707 90 539 0 +9 294 437 30 192 1518 90 0 227 +10 79 479 30 645 1510 90 0 664 +11 365 18 20 1588 2999 90 0 52 +12 225 125 20 127 697 90 0 453 +13 448 103 -10 2474 3578 90 190 0 +14 143 266 -20 126 839 90 189 0 +15 252 347 10 2543 3439 0 0 1010 +16 403 390 -10 1923 3356 90 311 0 +17 67 153 -30 500 1483 90 963 0 +18 90 168 -20 2762 3558 90 407 0 +19 302 235 20 610 1636 90 0 324 +20 259 355 -10 1096 2898 90 403 0 +21 149 183 -30 2528 3703 90 484 0 +22 19 297 -10 1721 3004 90 193 0 +23 209 358 30 1271 1842 90 0 584 +24 56 388 20 957 2784 90 0 741 +25 115 269 -20 2699 3374 90 191 0 +26 377 356 10 1534 2317 90 0 854 +27 113 229 -10 305 2100 90 393 0 +28 205 343 20 862 1102 90 0 194 +29 48 137 20 1467 2286 90 0 493 +30 467 157 20 1889 2886 90 0 372 +31 220 394 10 2611 3114 90 0 731 +32 436 54 -30 1547 2595 90 853 0 +33 54 357 10 1378 2175 90 0 199 +34 456 154 10 227 864 90 0 772 +35 216 307 -20 2072 3120 90 513 0 +36 280 224 -20 2082 2530 90 64 0 +37 90 270 -10 383 907 90 862 0 +38 166 452 20 364 995 90 0 951 +39 17 283 -20 2075 3253 90 212 0 +40 196 192 -20 1749 2591 90 971 0 +41 94 275 -20 333 765 90 855 0 +42 292 445 10 1620 1972 90 0 969 +43 329 471 -10 2513 3213 90 178 0 +44 326 57 20 983 1904 90 0 514 +45 95 466 10 2901 3307 90 0 388 +46 429 282 -30 2118 3643 90 320 0 +47 229 364 10 1915 3268 90 0 671 +48 457 160 -10 2015 3599 90 495 0 +49 452 154 30 299 525 90 0 179 +50 113 289 -30 142 993 90 587 0 +51 67 387 10 2330 2581 90 0 517 +52 368 17 -20 1905 2297 90 11 0 +53 341 367 30 2338 2883 90 0 649 +54 410 364 -10 1221 2622 90 339 0 +55 80 281 10 1459 2134 90 0 860 +56 321 224 -20 1690 2682 90 387 0 +57 73 395 20 719 1886 90 0 904 +58 259 76 10 513 1502 90 0 771 +59 121 203 -20 1392 2351 90 597 0 +60 118 256 10 2181 3017 90 0 740 +61 236 361 -30 1322 2263 90 613 0 +62 78 371 20 210 1804 90 0 470 +63 301 53 -20 925 1172 90 415 0 +64 382 197 20 353 1088 90 0 36 +65 491 160 -20 1970 2168 90 396 0 +66 453 164 -20 2298 3604 90 410 0 +67 277 371 30 284 1067 90 0 746 +68 272 212 20 1819 3002 90 0 615 +69 386 218 -10 1638 2324 90 389 0 +70 353 32 10 657 1313 90 0 465 +71 59 389 20 1469 2087 90 0 644 +72 414 62 10 1392 2140 90 0 871 +73 278 357 10 110 633 90 0 521 +74 101 179 -20 2045 2940 90 135 0 +75 396 234 20 1636 3304 90 0 349 +76 74 390 -10 262 1492 90 255 0 +77 332 55 30 211 1699 90 0 686 +78 272 365 30 180 1366 90 0 494 +79 418 355 -10 1931 2303 90 541 0 +80 216 380 -20 2313 2447 90 596 0 +81 440 173 -20 2388 3619 90 468 0 +82 89 358 -10 3272 3631 90 750 0 +83 66 491 -20 1700 2600 90 801 0 +84 317 234 -10 2334 2784 90 733 0 +85 439 297 -30 1765 2482 90 993 0 +86 394 367 30 223 697 90 0 413 +87 58 364 10 2165 2519 90 0 377 +88 290 75 20 179 998 90 0 427 +89 346 344 -20 2922 3661 90 260 0 +90 131 269 -10 1971 2965 90 891 0 +91 236 96 -20 1423 1945 90 917 0 +92 29 282 -10 1054 1927 90 821 0 +93 418 385 -30 2552 3122 90 132 0 +94 148 225 40 369 1017 90 0 968 +95 166 464 -30 606 1141 90 640 0 +96 266 373 10 258 1487 90 0 775 +97 201 273 30 54 490 90 0 895 +98 255 245 10 7 1158 90 0 499 +99 220 379 -10 2295 2653 90 253 0 +100 85 317 -10 2543 2831 90 243 0 +101 125 264 20 2490 3380 0 0 1019 +102 131 253 -20 2621 3157 90 442 0 +103 184 188 -20 638 2043 90 604 0 +104 128 209 -20 1167 1178 90 383 0 +105 373 364 -20 2915 3586 90 507 0 +106 389 342 10 604 1846 90 0 246 +107 420 20 30 286 1620 90 0 165 +108 132 218 10 122 1422 90 0 150 +109 32 256 10 434 1527 90 0 632 +110 406 339 20 179 578 90 0 512 +111 191 397 20 158 1293 90 0 628 +112 72 341 10 2413 3478 90 0 508 +113 35 308 30 2932 3372 90 0 626 +114 169 360 20 1733 2771 90 0 239 +115 222 381 20 2208 3130 90 0 157 +116 96 292 10 460 1424 90 0 695 +117 311 496 10 320 1296 90 0 489 +118 220 384 10 2374 3152 90 0 577 +119 259 243 20 11 818 90 0 727 +120 349 476 -20 2398 2729 90 874 0 +121 63 159 20 637 1541 90 0 992 +122 112 243 -10 1863 2938 90 228 0 +123 448 302 -20 1545 3269 90 966 0 +124 343 27 -20 1008 1545 90 201 0 +125 67 485 -10 1567 2926 90 972 0 +126 220 359 30 979 2029 90 0 794 +127 147 435 -10 1500 2883 90 758 0 +128 317 235 -10 2339 2961 90 325 0 +129 43 355 -20 556 2794 90 961 0 +130 368 340 10 148 1013 90 0 939 +131 450 72 -30 1990 3293 90 785 0 +132 400 364 30 188 1547 90 0 93 +133 355 480 20 1097 2294 90 0 366 +134 450 153 20 222 1104 90 0 954 +135 126 188 20 1691 2665 90 0 74 +136 380 223 10 1308 2081 90 0 487 +137 71 453 20 550 979 90 0 703 +138 54 287 -20 199 1464 90 833 0 +139 420 168 -10 2472 3636 90 796 0 +140 219 89 20 2368 3177 90 0 965 +141 189 327 10 98 1791 90 0 751 +142 191 309 10 1181 1839 90 0 300 +143 301 67 40 399 721 90 0 738 +144 484 161 10 1404 2148 90 0 975 +145 77 483 20 2433 2805 90 0 225 +146 241 375 -10 1546 2610 90 542 0 +147 428 64 -10 910 1651 90 757 0 +148 403 361 -40 1011 2053 90 825 0 +149 257 336 10 2778 3594 90 0 676 +150 131 241 -10 2539 3705 90 108 0 +151 63 166 -20 2271 2893 90 449 0 +152 71 368 -30 3083 3592 90 251 0 +153 272 228 -10 1595 2630 90 709 0 +154 25 290 -10 2335 3566 90 950 0 +155 441 157 10 212 1343 0 0 1004 +156 13 266 20 941 1626 90 0 737 +157 251 376 -20 2928 3605 90 115 0 +158 61 170 -20 2336 2640 90 658 0 +159 386 357 -10 1255 1770 90 303 0 +160 95 475 -20 2315 3551 90 207 0 +161 90 298 10 1393 2974 90 0 564 +162 71 388 20 896 2274 0 0 1016 +163 383 246 -20 2583 3312 90 531 0 +164 352 38 10 235 1588 90 0 244 +165 395 1 -30 628 1305 90 107 0 +166 120 210 -10 1041 1684 90 183 0 +167 46 383 -20 1022 1714 90 307 0 +168 202 198 30 1768 2949 90 0 708 +169 358 365 30 1821 2990 90 0 221 +170 191 352 20 117 1000 90 0 519 +171 470 152 30 857 1756 90 0 791 +172 228 124 20 127 408 90 0 265 +173 402 230 -10 1988 2575 90 898 0 +174 323 229 10 1432 2163 90 0 675 +175 331 486 -30 1640 2526 90 242 0 +176 112 208 -20 992 2371 90 599 0 +177 172 435 -10 2782 3501 90 209 0 +178 326 498 10 468 1735 90 0 43 +179 460 183 -30 2829 2905 90 49 0 +180 95 279 -20 157 1285 90 881 0 +181 76 456 -20 622 1099 90 659 0 +182 242 350 -20 2221 3560 90 845 0 +183 152 196 10 160 425 90 0 166 +184 268 351 10 1210 1850 90 0 245 +185 360 356 -20 2691 2934 90 580 0 +186 39 296 20 1541 2586 90 0 938 +187 262 368 30 968 1516 0 0 1021 +188 204 90 20 429 1918 90 0 752 +189 149 273 20 120 465 90 0 14 +190 446 86 10 2690 3569 90 0 13 +191 139 269 20 1382 2234 90 0 25 +192 483 170 -20 1956 2598 90 471 0 +193 39 278 10 1153 2209 90 0 22 +194 201 307 -20 1387 2199 90 28 0 +195 395 378 10 1187 2244 90 0 879 +196 139 262 -10 1142 1918 90 333 0 +197 176 447 20 210 1282 90 0 857 +198 67 380 20 1824 2893 90 0 734 +199 35 358 -10 1226 1928 90 33 0 +200 294 455 -10 2094 2919 90 279 0 +201 351 33 20 386 1216 90 0 124 +202 216 316 -30 2074 2724 90 292 0 +203 261 96 40 154 1370 90 0 295 +204 238 57 30 1148 1684 90 0 562 +205 383 18 -30 1618 1828 90 518 0 +206 152 460 -10 1169 1610 90 250 0 +207 94 479 20 2889 2932 90 0 160 +208 337 453 30 2475 3604 0 0 1003 +209 135 460 10 1447 2282 90 0 177 +210 260 104 20 146 1186 90 0 876 +211 337 63 -10 1827 2424 90 254 0 +212 32 247 20 600 1163 90 0 39 +213 394 205 10 150 1106 90 0 543 +214 95 294 10 398 1302 90 0 657 +215 253 241 -20 2383 3447 90 395 0 +216 223 90 -30 2382 3351 90 266 0 +217 64 473 10 822 1907 90 0 762 +218 275 431 10 638 2006 90 0 305 +219 261 84 -10 731 897 90 309 0 +220 176 296 20 953 1667 90 0 742 +221 361 349 -30 2994 3197 90 169 0 +222 168 433 -20 2635 3624 90 780 0 +223 394 10 -20 481 2016 90 598 0 +224 308 60 20 198 1651 90 0 852 +225 94 456 -20 2361 3566 90 145 0 +226 73 484 -30 2419 2632 90 760 0 +227 277 434 -30 1256 1757 90 9 0 +228 119 232 10 1833 2205 90 0 122 +229 78 375 -20 212 1453 90 786 0 +230 366 346 20 194 1262 90 0 269 +231 125 181 -30 2290 3306 90 431 0 +232 69 493 20 1532 2582 90 0 263 +233 432 80 40 454 1523 90 0 5 +234 72 391 10 908 2075 90 0 412 +235 85 486 30 2338 3097 90 0 956 +236 204 371 -10 374 1283 90 867 0 +237 173 328 10 2284 2837 90 0 948 +238 280 423 10 769 1293 90 0 600 +239 200 327 -20 2469 3733 90 114 0 +240 241 98 20 2842 3293 90 0 283 +241 96 356 10 186 781 90 0 257 +242 332 491 30 750 1832 90 0 175 +243 81 283 10 1260 2148 90 0 100 +244 373 22 -10 1931 2853 90 164 0 +245 255 371 -10 1701 2877 90 184 0 +246 358 359 -10 2353 3086 90 106 0 +247 216 93 -20 2191 2914 90 284 0 +248 73 360 -40 2521 3533 90 565 0 +249 305 212 -20 1205 1267 90 690 0 +250 151 462 10 1096 1869 90 0 206 +251 47 389 30 902 1463 90 0 152 +252 155 198 30 108 613 90 0 875 +253 152 457 10 746 1847 90 0 99 +254 329 48 10 1432 1839 90 0 211 +255 88 394 10 325 1289 90 0 76 +256 153 295 -10 2460 3718 90 544 0 +257 81 373 -10 232 1108 90 241 0 +258 163 453 10 494 1051 90 0 310 +259 378 25 -10 1822 3155 90 451 0 +260 401 385 20 2449 3438 90 0 89 +261 184 340 -20 2599 3096 90 432 0 +262 402 362 -30 1170 1712 90 889 0 +263 70 482 -20 1801 3061 90 232 0 +264 357 445 -10 2696 3602 90 549 0 +265 212 71 -20 882 1686 90 172 0 +266 231 81 30 1975 2990 90 0 216 +267 379 208 10 558 1271 90 0 662 +268 236 95 -10 1666 2728 90 641 0 +269 386 344 -20 948 1689 90 230 0 +270 189 200 -10 1543 2595 90 886 0 +271 296 253 10 375 1453 90 0 639 +272 73 303 10 2198 2757 90 0 458 +273 30 162 -10 1775 2589 90 422 0 +274 230 95 -10 1618 2340 90 720 0 +275 57 131 -10 766 2199 90 480 0 +276 379 245 -10 2454 3252 90 402 0 +277 107 221 -20 179 1050 90 382 0 +278 154 458 -20 786 1623 90 379 0 +279 290 417 10 171 998 90 0 200 +280 272 243 30 23 423 90 0 503 +281 94 130 10 279 1083 90 0 605 +282 222 356 -20 1625 1751 90 890 0 +283 243 108 -20 2818 3463 90 240 0 +284 224 93 20 2095 2447 90 0 247 +285 155 242 10 540 1392 90 0 506 +286 440 302 20 780 1939 90 0 498 +287 221 102 20 2914 2963 0 0 1017 +288 52 484 -20 1378 2145 90 707 0 +289 111 244 -20 2073 2545 90 424 0 +290 132 273 -10 1758 2808 90 473 0 +291 228 186 20 67 913 90 0 555 +292 221 374 30 809 1612 90 0 202 +293 406 286 -10 2551 3664 90 569 0 +294 390 9 30 1113 1573 90 0 655 +295 335 52 -40 1218 2465 90 203 0 +296 189 368 20 132 1330 90 0 428 +297 397 40 -10 2099 3042 90 381 0 +298 408 305 10 167 1607 90 0 520 +299 156 434 -10 2500 3390 90 574 0 +300 180 335 -10 1967 3355 90 142 0 +301 327 483 20 1742 2615 90 0 672 +302 363 62 -10 2384 3605 90 693 0 +303 375 342 10 845 1192 90 0 159 +304 16 280 10 2720 2974 90 0 399 +305 277 431 -10 1218 1610 90 218 0 +306 110 241 -10 2123 2309 90 627 0 +307 48 385 20 587 1590 90 0 167 +308 152 260 10 98 461 90 0 944 +309 255 120 10 130 1078 90 0 219 +310 214 382 -10 2259 2884 90 258 0 +311 414 384 10 2453 3032 90 0 16 +312 232 378 20 1839 2709 90 0 478 +313 80 141 30 201 1240 90 0 914 +314 188 330 -20 101 1324 90 441 0 +315 157 192 -20 2659 3715 90 629 0 +316 101 237 -10 1508 2314 90 850 0 +317 74 360 -30 2556 3316 90 552 0 +318 267 260 20 445 733 90 0 579 +319 378 46 -10 2322 3584 90 864 0 +320 420 311 30 452 1494 90 0 46 +321 384 217 -40 1680 2098 90 654 0 +322 418 300 10 175 1340 90 0 4 +323 356 77 -10 2189 2469 90 534 0 +324 253 244 -20 2314 3329 90 19 0 +325 323 258 10 1131 1685 90 0 128 +326 293 454 -10 2247 3134 90 625 0 +327 231 97 -40 2487 3448 90 984 0 +328 316 234 -20 2255 3228 90 603 0 +329 207 196 20 2298 2992 90 0 461 +330 321 228 30 1754 2805 90 0 529 +331 382 17 -10 1336 2293 90 935 0 +332 206 326 -40 2569 3737 90 386 0 +333 198 284 10 62 1139 90 0 196 +334 137 186 10 2772 3213 90 0 452 +335 229 396 -20 1722 3677 90 940 0 +336 268 235 -20 1416 2428 90 602 0 +337 95 243 20 160 1517 90 0 994 +338 297 430 -30 186 1143 90 826 0 +339 393 368 10 185 1396 90 0 54 +340 66 391 20 1003 2359 90 0 868 +341 189 339 50 2397 3488 90 0 585 +342 280 351 30 105 1263 90 0 807 +343 241 77 30 904 1706 90 0 831 +344 134 265 -10 2541 2950 90 997 0 +345 420 95 30 230 706 90 0 530 +346 111 279 30 141 607 90 0 806 +347 367 358 30 1823 2603 90 0 682 +348 239 373 10 1548 2422 90 0 865 +349 384 235 -20 2472 3033 90 75 0 +350 284 360 30 115 854 90 0 652 +351 325 75 30 2004 2896 90 0 899 +352 279 369 10 561 603 90 0 764 +353 340 449 -10 2296 3606 90 887 0 +354 275 448 -30 2784 3181 90 998 0 +355 447 88 -20 2828 3258 90 815 0 +356 314 279 10 70 742 90 0 931 +357 434 377 -20 2003 2847 90 475 0 +358 67 377 -40 1455 3076 90 459 0 +359 370 353 10 520 1131 90 0 702 +360 57 367 20 1700 2798 90 0 747 +361 332 486 20 1862 2122 90 0 840 +362 386 361 -10 972 2241 90 697 0 +363 55 282 40 197 1069 90 0 622 +364 317 467 20 227 893 90 0 820 +365 335 54 -10 1505 2361 90 406 0 +366 348 466 -20 1945 3382 90 133 0 +367 132 314 -10 2307 3690 90 812 0 +368 328 216 -20 1285 2699 90 980 0 +369 416 48 -20 1545 2376 90 726 0 +370 370 55 10 2911 3021 90 0 759 +371 149 434 -10 1832 2735 90 718 0 +372 466 169 -20 2125 3039 90 30 0 +373 141 267 -10 1288 2141 90 911 0 +374 258 350 -10 918 2886 90 960 0 +375 428 312 -20 662 1666 90 792 0 +376 211 188 10 341 1139 90 0 635 +377 50 343 -10 2260 3408 90 87 0 +378 107 311 -30 2808 2977 90 656 0 +379 178 441 20 204 1559 90 0 278 +380 232 85 10 1993 2784 0 0 1014 +381 391 23 10 2200 3356 90 0 297 +382 137 227 20 115 953 90 0 277 +383 161 203 20 100 1008 90 0 104 +384 363 212 30 3130 3577 90 0 486 +385 384 346 -50 1185 1637 90 394 0 +386 166 434 40 2354 3622 90 0 332 +387 274 248 20 24 1128 90 0 56 +388 156 421 -10 3369 3501 90 45 0 +389 346 211 10 103 940 90 0 69 +390 265 358 20 848 2016 90 0 884 +391 96 407 20 219 1030 90 0 888 +392 443 70 -10 2121 2968 90 988 0 +393 125 212 10 711 1823 90 0 27 +394 361 337 50 141 1661 90 0 385 +395 322 78 20 2054 3034 90 0 215 +396 481 156 20 1213 2148 90 0 65 +397 188 293 -30 590 1245 90 829 0 +398 76 408 30 685 1516 90 0 809 +399 130 304 -10 1886 3693 90 304 0 +400 378 363 30 1400 2258 90 0 536 +401 185 301 -20 1394 1426 90 713 0 +402 385 235 10 2035 3288 90 0 276 +403 261 350 10 1609 2008 90 0 20 +404 389 33 20 2157 3567 90 0 490 +405 151 214 10 221 962 90 0 414 +406 265 94 10 156 610 90 0 365 +407 65 164 20 2083 3268 90 0 18 +408 293 81 10 174 930 90 0 922 +409 363 55 -20 2968 3157 90 912 0 +410 465 176 20 2234 3124 90 0 66 +411 428 298 -10 1187 2280 90 870 0 +412 75 379 -10 1718 3577 90 234 0 +413 404 378 -30 661 1213 90 86 0 +414 203 203 -10 2440 3419 90 405 0 +415 259 88 20 296 955 90 0 63 +416 362 17 -20 1536 2391 90 749 0 +417 320 258 -20 70 1855 90 739 0 +418 59 358 20 1962 2915 90 0 947 +419 316 453 20 213 798 90 0 730 +420 225 192 20 63 1146 90 0 578 +421 140 206 30 118 1002 90 0 586 +422 83 151 10 194 1288 90 0 273 +423 366 196 10 127 351 90 0 717 +424 108 245 20 1601 2020 90 0 289 +425 129 267 -10 1866 3254 90 880 0 +426 57 379 20 726 1249 90 0 609 +427 329 56 -20 1095 1980 90 88 0 +428 213 363 -20 1088 1541 90 296 0 +429 76 391 -30 1154 1641 90 905 0 +430 330 259 30 640 1983 90 0 660 +431 136 217 30 457 1499 90 0 231 +432 165 333 20 2054 2868 90 0 261 +433 160 431 -10 3089 3578 90 811 0 +434 338 489 30 931 1844 90 0 456 +435 335 64 10 1316 2751 90 0 793 +436 412 361 10 1526 2130 90 0 537 +437 259 90 30 491 943 90 0 846 +438 265 77 20 830 994 90 0 861 +439 460 173 -30 1996 3601 90 824 0 +440 83 301 20 1929 2825 90 0 618 +441 201 331 20 94 1508 90 0 314 +442 118 214 20 136 1320 90 0 102 +443 395 30 -10 2579 3174 90 650 0 +444 125 444 -10 1451 2704 90 913 0 +445 283 248 30 33 563 90 0 743 +446 391 334 -30 358 1895 90 835 0 +447 212 215 -20 2762 3718 90 481 0 +448 276 428 20 635 1621 90 0 834 +449 96 152 20 182 1146 90 0 151 +450 425 85 -20 240 1237 90 957 0 +451 336 7 10 1573 1755 90 0 259 +452 196 219 -10 2781 3486 90 334 0 +453 210 94 -20 831 1323 90 12 0 +454 310 81 -20 2692 3161 90 575 0 +455 341 37 20 231 1483 90 0 678 +456 344 478 -30 2284 2468 90 434 0 +457 406 37 40 264 1378 90 0 510 +458 69 346 -10 2575 3508 90 272 0 +459 80 376 40 211 1741 90 0 358 +460 314 449 30 209 545 90 0 929 +461 209 201 -20 2425 3241 90 329 0 +462 88 379 20 655 884 90 0 763 +463 352 500 30 1406 1765 90 0 558 +464 65 357 -20 1707 3362 90 754 0 +465 345 15 -10 1276 1849 90 70 0 +466 125 245 20 2870 3294 0 0 1009 +467 52 369 30 2065 2242 90 0 802 +468 449 140 20 264 1356 90 0 81 +469 430 310 30 748 1765 90 0 714 +470 109 325 -20 2575 3602 90 62 0 +471 446 139 20 312 1123 90 0 192 +472 229 214 20 41 52 90 0 610 +473 197 301 10 73 1620 90 0 290 +474 146 245 20 104 1508 90 0 903 +475 401 368 20 301 1186 90 0 357 +476 116 259 -30 2221 3165 90 504 0 +477 374 55 -20 2453 3290 90 576 0 +478 249 251 -20 2856 3375 90 312 0 +479 325 490 -10 290 1717 90 500 0 +480 59 159 10 931 1435 90 0 275 +481 186 177 20 1043 1839 90 0 447 +482 319 229 10 2166 2579 90 0 634 +483 26 269 30 815 1356 90 0 522 +484 53 139 30 907 1681 90 0 21 +485 471 154 20 860 1938 90 0 766 +486 301 247 -30 2860 3773 90 384 0 +487 388 220 -10 1164 1842 90 136 0 +488 235 81 -30 987 2072 90 545 0 +489 347 479 -10 2240 2698 90 117 0 +490 367 59 -20 1945 3601 90 404 0 +491 261 370 30 578 1721 90 0 882 +492 441 287 40 2292 3630 90 0 976 +493 44 153 -20 1902 2248 90 29 0 +494 263 351 -30 994 2255 90 78 0 +495 444 157 10 215 576 90 0 48 +496 374 17 -30 1532 2479 90 918 0 +497 448 295 10 2413 3196 90 0 667 +498 446 297 -20 2113 2511 90 286 0 +499 347 40 -10 231 1334 90 98 0 +500 318 493 10 358 1452 90 0 479 +501 399 352 -30 1167 1514 90 566 0 +502 51 364 -20 1334 2601 90 716 0 +503 250 217 -30 2099 3129 90 280 0 +504 107 225 30 203 838 90 0 476 +505 173 208 -30 1585 2337 90 987 0 +506 204 189 -10 2222 2694 90 285 0 +507 399 379 20 2421 3627 90 0 105 +508 79 346 -10 2560 3628 90 112 0 +509 360 338 10 243 461 90 0 722 +510 390 17 -40 1406 1659 90 457 0 +511 207 337 20 681 1089 90 0 964 +512 409 361 -20 870 1403 90 110 0 +513 206 377 20 134 1356 90 0 35 +514 429 294 -20 1479 2566 90 44 0 +515 375 31 20 1466 3064 90 0 849 +516 426 80 20 244 1637 90 0 990 +517 74 374 -10 2479 3005 90 51 0 +518 408 20 30 279 1422 90 0 205 +519 239 369 -20 1496 2286 90 170 0 +520 420 308 -10 586 993 90 298 0 +521 254 357 -10 1562 2623 90 73 0 +522 53 297 -30 1986 3622 90 483 0 +523 434 382 30 1832 2829 90 0 679 +524 204 171 20 661 1415 90 0 761 +525 173 169 10 1172 2104 90 0 528 +526 190 332 20 514 857 90 0 755 +527 274 231 30 1750 2662 90 0 2 +528 207 194 -10 2003 3103 90 525 0 +529 315 232 -30 2406 3261 90 330 0 +530 425 87 -30 239 971 90 345 0 +531 312 64 20 274 1049 90 0 163 +532 129 244 -10 2395 3581 90 842 0 +533 278 230 -30 1163 1930 90 674 0 +534 351 75 10 2079 2389 90 0 323 +535 185 293 10 601 1419 90 0 795 +536 364 364 -30 1844 2775 90 400 0 +537 432 369 -10 1632 2821 90 436 0 +538 128 249 20 1083 1763 90 0 557 +539 221 179 20 163 735 90 0 8 +540 194 296 20 72 1830 90 0 923 +541 413 350 10 1171 2104 90 0 79 +542 214 372 10 986 1060 90 0 146 +543 379 229 -10 707 1543 90 213 0 +544 91 298 10 1926 2260 90 0 256 +545 226 120 30 132 1157 90 0 488 +546 344 46 30 1277 2203 90 0 704 +547 238 84 -20 1481 1947 90 924 0 +548 138 276 10 1614 2376 90 0 642 +549 346 487 10 1340 2437 90 0 264 +550 95 160 10 179 763 90 0 553 +551 103 266 30 630 1654 90 0 828 +552 98 286 30 1107 1727 90 0 317 +553 77 172 -10 2585 3526 90 550 0 +554 147 199 30 114 1531 90 0 983 +555 210 98 -20 256 1345 90 291 0 +556 428 292 10 1662 2199 0 0 1008 +557 121 236 -20 1576 2651 90 538 0 +558 336 479 -30 2079 2477 90 463 0 +559 203 369 -20 325 1517 90 590 0 +560 296 232 10 1146 1549 90 0 633 +561 87 369 -20 201 497 90 582 0 +562 247 88 -30 1411 2596 90 204 0 +563 104 246 10 1054 1812 90 0 666 +564 67 302 -10 2292 2854 90 161 0 +565 114 296 40 143 1192 90 0 248 +566 394 356 30 178 1252 90 0 501 +567 192 306 -10 1043 2163 90 651 0 +568 16 285 -20 2146 2998 90 928 0 +569 419 310 10 184 1579 90 0 293 +570 389 221 -10 1148 1675 90 745 0 +571 129 264 -20 2286 3396 90 665 0 +572 172 483 -20 677 1291 90 673 0 +573 325 251 -10 1015 1996 90 942 0 +574 151 436 10 1982 2951 90 0 299 +575 263 91 20 159 805 90 0 454 +576 401 15 20 363 1168 90 0 477 +577 253 382 -10 2672 3669 90 118 0 +578 247 89 -20 1862 2328 90 420 0 +579 283 229 -20 816 2087 90 318 0 +580 366 341 20 369 896 90 0 185 +581 392 213 -30 1945 2400 90 756 0 +582 167 304 20 99 814 90 0 561 +583 477 154 10 1010 2162 90 0 832 +584 234 383 -30 1876 2482 90 23 0 +585 199 327 -50 2828 3450 90 341 0 +586 140 220 -30 625 1141 90 421 0 +587 144 266 30 107 1069 90 0 50 +588 432 105 10 3469 3590 0 0 1002 +589 368 325 30 139 1635 90 0 669 +590 202 386 20 246 651 90 0 559 +591 325 246 -10 1091 2109 90 901 0 +592 430 86 -20 2217 3476 90 661 0 +593 200 195 -20 1559 2971 90 736 0 +594 440 295 -20 1561 2871 90 624 0 +595 77 287 10 1520 2450 0 0 1012 +596 187 362 20 1520 2211 90 0 80 +597 131 207 20 543 1616 90 0 59 +598 405 5 20 608 1123 90 0 223 +599 125 226 20 1408 1530 90 0 176 +600 254 335 -10 2833 3354 90 238 0 +601 212 168 20 504 1375 90 0 712 +602 281 279 20 505 1084 90 0 336 +603 326 241 20 1276 2115 90 0 328 +604 152 241 20 389 1357 90 0 103 +605 71 139 -10 371 1403 90 281 0 +606 46 277 10 405 933 90 0 7 +607 393 13 -30 745 2130 90 863 0 +608 87 454 40 709 1215 90 0 753 +609 86 359 -20 2635 3628 90 426 0 +610 220 192 -20 65 1095 90 472 0 +611 426 279 30 2750 3635 0 0 1013 +612 131 267 -30 2224 3080 90 866 0 +613 200 297 30 68 1232 90 0 61 +614 299 442 -20 1775 2194 90 744 0 +615 265 218 -20 2301 2718 90 68 0 +616 398 231 -10 1913 2840 90 723 0 +617 312 74 -10 2355 3304 90 932 0 +618 99 307 -20 2277 3311 90 440 0 +619 22 283 30 1236 1550 90 0 790 +620 67 160 10 2688 2852 90 0 643 +621 390 42 20 2126 3210 0 0 1006 +622 44 279 -40 208 1040 90 363 0 +623 200 182 -20 1042 1424 90 848 0 +624 458 303 20 2189 3032 90 0 594 +625 298 438 10 194 1126 90 0 326 +626 62 301 -30 2935 3630 90 113 0 +627 112 251 10 1274 2151 90 0 306 +628 184 354 -20 1432 2681 90 111 0 +629 140 180 20 2410 3694 90 0 315 +630 269 428 20 626 1823 90 0 927 +631 123 206 10 1456 2475 0 0 1022 +632 36 284 -10 1471 2084 90 109 0 +633 272 233 -10 1454 2201 90 560 0 +634 320 231 -10 1839 3090 90 482 0 +635 211 180 -10 371 1304 90 376 0 +636 114 169 -20 2107 3277 90 787 0 +637 245 239 -20 2397 3629 90 920 0 +638 117 204 30 1453 2103 90 0 683 +639 316 254 -10 618 1043 90 271 0 +640 169 443 30 461 699 90 0 95 +641 212 96 10 476 1492 90 0 268 +642 119 285 -10 2862 3424 90 548 0 +643 71 163 -10 2551 3179 90 620 0 +644 78 361 -20 2651 3620 90 71 0 +645 354 219 -20 3390 3519 90 819 0 +646 389 233 20 2039 3095 90 0 934 +647 90 391 10 213 1224 0 0 1005 +648 209 307 -30 1276 2506 90 872 0 +649 363 351 -30 2479 3527 90 53 0 +650 405 47 10 255 1038 90 0 443 +651 278 329 10 83 1205 90 0 567 +652 261 371 -30 592 1524 90 350 0 +653 302 470 20 1603 3011 90 0 847 +654 373 205 40 130 1466 90 0 321 +655 381 20 -30 1433 2382 90 294 0 +656 90 277 30 234 1251 90 0 378 +657 46 341 -10 2386 3093 90 214 0 +658 50 138 20 1876 2061 90 0 158 +659 61 437 20 265 1330 90 0 181 +660 331 252 -30 871 1556 90 430 0 +661 440 81 20 2277 3212 90 0 592 +662 384 206 -10 141 1631 90 267 0 +663 232 87 30 932 2236 90 0 837 +664 59 471 -30 1311 1817 90 10 0 +665 174 304 20 93 1013 90 0 571 +666 106 248 -10 901 2151 90 563 0 +667 410 287 -10 2200 3660 90 497 0 +668 206 313 -10 1812 2529 90 783 0 +669 412 367 -30 607 1473 90 589 0 +670 412 300 20 169 2097 90 0 995 +671 206 295 -10 2387 3391 90 47 0 +672 329 459 -20 2837 3092 90 301 0 +673 177 436 20 199 458 90 0 572 +674 266 264 30 335 1030 90 0 533 +675 308 235 -10 2917 3513 90 174 0 +676 260 330 -10 3041 3525 90 149 0 +677 49 136 10 1418 2152 90 0 768 +678 356 28 -20 354 1807 90 455 0 +679 428 384 -30 2209 2840 90 523 0 +680 220 362 -30 961 1861 90 900 0 +681 437 61 20 1523 2814 90 0 774 +682 365 360 -30 1509 2732 90 347 0 +683 107 168 -30 2398 2791 90 638 0 +684 220 177 20 78 1039 90 0 999 +685 347 21 20 956 1977 90 0 706 +686 293 245 -30 3021 3781 90 77 0 +687 267 436 -10 2940 3234 90 851 0 +688 216 96 10 2400 2892 90 0 732 +689 383 351 20 167 1003 90 0 916 +690 289 240 20 687 1350 90 0 249 +691 129 185 -30 2514 3273 90 955 0 +692 291 450 -10 2248 3322 90 981 0 +693 387 21 10 1197 2058 90 0 302 +694 116 255 20 779 1860 90 0 817 +695 50 368 -10 1690 2433 90 116 0 +696 121 249 20 2309 2694 90 0 930 +697 404 346 10 740 1745 90 0 362 +698 77 360 -10 2863 3619 90 841 0 +699 447 102 -20 2590 3578 90 989 0 +700 366 16 20 1823 2292 0 0 1001 +701 348 16 30 1497 2223 90 0 910 +702 353 346 -10 2985 3403 90 359 0 +703 54 485 -20 1693 2014 90 137 0 +704 319 77 -30 2601 2675 90 546 0 +705 83 282 10 1147 2078 90 0 906 +706 384 24 -20 2011 3351 90 685 0 +707 52 469 20 1105 1829 90 0 288 +708 199 200 -30 2573 3477 90 168 0 +709 273 234 10 1623 1849 90 0 153 +710 16 281 -10 2586 2926 90 978 0 +711 151 442 -10 2054 3071 90 915 0 +712 223 114 -20 138 1246 90 601 0 +713 191 308 20 82 1031 90 0 401 +714 448 297 -30 2134 3291 90 469 0 +715 386 28 20 1573 3564 90 0 770 +716 106 295 20 459 1807 90 0 502 +717 387 224 -10 863 2332 90 423 0 +718 96 377 10 199 926 90 0 371 +719 86 361 20 3081 3626 90 0 873 +720 211 107 10 163 1059 90 0 274 +721 43 125 -20 1289 2076 90 985 0 +722 369 351 -10 248 1589 90 509 0 +723 388 228 10 905 1724 90 0 616 +724 325 228 20 1472 2309 0 0 1018 +725 490 159 -20 1552 2402 90 818 0 +726 420 78 20 1053 1903 90 0 369 +727 396 4 -20 1055 1251 90 119 0 +728 222 317 30 2076 2914 90 0 959 +729 389 198 20 148 1176 90 0 946 +730 322 454 -20 216 1228 90 419 0 +731 241 391 -10 2807 3324 90 31 0 +732 256 117 -10 2825 3669 90 688 0 +733 298 255 10 48 923 90 0 84 +734 74 363 -20 2460 3226 90 198 0 +735 345 496 -30 1246 1729 90 991 0 +736 167 169 20 1235 2232 90 0 593 +737 23 306 -20 1743 2782 90 156 0 +738 317 62 -40 255 1260 90 143 0 +739 319 257 20 424 1047 90 0 417 +740 129 255 -10 2448 3145 90 60 0 +741 59 377 -20 1899 2436 90 24 0 +742 138 272 -20 1267 2535 90 220 0 +743 317 251 -30 681 1358 90 445 0 +744 279 436 20 1478 1720 90 0 614 +745 371 207 10 128 648 90 0 570 +746 263 372 -30 491 1441 90 67 0 +747 50 347 -20 2261 3023 90 360 0 +748 275 236 -10 1361 1924 90 767 0 +749 334 47 20 219 1207 90 0 416 +750 50 383 10 1732 2206 90 0 82 +751 170 338 -10 2064 2664 90 141 0 +752 245 109 -20 2964 3374 90 188 0 +753 69 475 -40 757 1781 90 608 0 +754 54 372 20 1023 3118 90 0 464 +755 198 334 -20 1622 2944 90 526 0 +756 380 228 30 567 1867 90 0 581 +757 425 118 10 219 342 90 0 147 +758 80 398 10 533 1279 90 0 127 +759 366 57 -10 2957 3355 90 370 0 +760 67 463 30 570 757 90 0 226 +761 226 86 -20 2291 3059 90 524 0 +762 59 480 -10 1302 2024 90 217 0 +763 40 378 -20 1170 1762 90 462 0 +764 250 367 -10 1740 2645 90 352 0 +765 157 436 -20 2138 3568 90 856 0 +766 463 161 -20 2005 2961 90 485 0 +767 266 250 10 181 796 90 0 748 +768 51 162 -10 1791 2794 90 677 0 +769 194 353 20 1216 1686 90 0 919 +770 383 41 -20 2116 3415 90 715 0 +771 247 82 -10 1368 2448 90 58 0 +772 457 142 -10 233 1632 90 34 0 +773 244 94 -20 1767 1983 90 869 0 +774 441 63 -20 1632 3076 90 681 0 +775 244 371 -10 1813 2967 90 96 0 +776 174 444 10 208 784 90 0 797 +777 94 247 -20 585 1280 90 943 0 +778 320 225 20 1257 2931 90 0 844 +779 316 80 30 2254 3209 90 0 830 +780 155 447 20 2447 3056 90 0 222 +781 211 308 -30 1369 2597 90 836 0 +782 297 442 20 1411 2374 90 0 979 +783 200 342 10 797 1356 90 0 668 +784 44 325 -20 3241 3280 90 6 0 +785 438 60 30 2095 2424 90 0 131 +786 80 374 20 279 878 90 0 229 +787 59 163 20 2249 2532 90 0 636 +788 236 92 10 2034 2546 90 0 1 +789 414 66 30 1368 1976 90 0 883 +790 34 279 -30 1481 1691 90 619 0 +791 475 156 -30 1404 1582 90 171 0 +792 404 310 20 165 1321 90 0 375 +793 367 239 -10 2628 3707 90 435 0 +794 210 359 -30 1191 2106 90 126 0 +795 133 278 -10 1538 2642 90 535 0 +796 446 169 10 2920 3609 90 0 139 +797 188 356 -10 1333 2590 90 776 0 +798 312 252 20 393 1456 90 0 902 +799 69 485 -30 2300 2377 90 892 0 +800 413 353 10 1176 2285 90 0 805 +801 54 446 20 343 391 90 0 83 +802 56 357 -30 1128 2608 90 467 0 +803 230 105 -10 2692 3384 90 843 0 +804 196 302 20 74 832 90 0 949 +805 391 373 -10 2695 3585 90 800 0 +806 101 295 -30 543 1534 90 346 0 +807 234 350 -30 2302 3092 90 342 0 +808 215 108 -30 2068 3612 90 926 0 +809 142 457 -30 1252 2094 90 398 0 +810 283 425 -30 567 1308 90 858 0 +811 77 397 10 446 1552 90 0 433 +812 105 317 10 2718 3260 90 0 367 +813 382 213 -20 1450 2140 90 896 0 +814 213 76 -20 996 1763 90 936 0 +815 417 56 20 1172 2553 90 0 355 +816 183 340 -40 1978 3535 90 973 0 +817 123 242 -20 2296 3697 90 694 0 +818 475 136 20 739 1479 90 0 725 +819 377 246 20 2316 3697 90 0 645 +820 310 484 -20 480 931 90 364 0 +821 47 280 10 341 624 90 0 92 +822 57 456 20 282 724 90 0 877 +823 313 266 20 68 838 90 0 982 +824 475 145 30 759 1657 90 0 439 +825 400 376 40 475 1210 90 0 148 +826 290 416 30 170 588 90 0 338 +827 277 369 30 264 716 90 0 962 +828 91 303 -30 1857 2701 90 551 0 +829 194 301 30 110 782 90 0 397 +830 254 238 -30 1703 3748 90 779 0 +831 215 91 -30 1699 3042 90 343 0 +832 500 162 -10 1756 2581 90 583 0 +833 56 287 20 197 1381 90 0 138 +834 289 452 -20 2254 3501 90 448 0 +835 378 326 30 148 1110 90 0 446 +836 197 350 30 1122 1411 90 0 781 +837 243 88 -30 1509 2112 90 663 0 +838 250 72 -20 967 1444 90 970 0 +839 101 290 -10 999 1462 90 859 0 +840 351 480 -20 1171 2408 90 361 0 +841 67 357 10 2418 3613 90 0 698 +842 128 240 10 3148 3582 90 0 532 +843 253 81 10 529 1682 90 0 803 +844 307 227 -20 2504 3361 90 778 0 +845 233 441 20 2468 3633 90 0 182 +846 311 47 -30 712 1589 90 437 0 +847 292 456 -20 2155 3041 90 653 0 +848 183 187 20 1054 2642 90 0 623 +849 392 31 -20 2515 3425 90 515 0 +850 103 251 10 1077 1599 90 0 316 +851 300 443 10 1886 2266 90 0 687 +852 420 295 -20 1478 2187 90 224 0 +853 427 64 30 1154 1589 90 0 32 +854 372 354 -10 1825 2216 90 26 0 +855 101 263 20 458 2013 90 0 41 +856 141 454 20 1465 2068 90 0 765 +857 146 461 -20 1128 2027 90 197 0 +858 298 430 30 186 1377 90 0 810 +859 148 270 10 103 328 90 0 839 +860 76 287 -10 1469 2319 90 55 0 +861 308 55 -20 382 1520 90 438 0 +862 143 257 10 107 1834 90 0 37 +863 393 2 30 424 1693 90 0 607 +864 385 28 10 1609 3123 90 0 319 +865 204 291 -10 2750 3217 90 348 0 +866 132 272 30 1676 3072 90 0 612 +867 206 379 10 136 1309 90 0 236 +868 69 383 -20 2406 2695 90 340 0 +869 245 96 20 1321 2245 90 0 773 +870 431 301 10 1081 2016 90 0 411 +871 448 94 -10 2970 3498 90 72 0 +872 199 305 30 1106 2294 90 0 648 +873 95 356 -20 3340 3637 90 719 0 +874 328 498 20 786 1601 90 0 120 +875 108 222 -30 1320 1834 90 252 0 +876 341 26 -20 880 1857 90 210 0 +877 63 454 -20 276 915 90 822 0 +878 222 357 30 981 2212 0 0 1020 +879 416 364 -10 1470 2565 90 195 0 +880 127 278 10 1902 2470 90 0 425 +881 140 252 20 110 1243 90 0 180 +882 218 298 -30 2319 3253 90 491 0 +883 432 87 -30 2402 3475 90 789 0 +884 216 300 -20 2249 3137 90 390 0 +885 438 72 -20 765 1592 90 953 0 +886 184 178 10 1178 1890 90 0 270 +887 345 468 10 2597 2916 90 0 353 +888 150 435 -20 2148 2602 90 391 0 +889 395 365 30 185 1571 90 0 262 +890 208 371 20 135 1335 90 0 282 +891 190 292 10 415 1236 90 0 90 +892 78 479 30 671 1666 90 0 799 +893 104 198 -10 1922 2844 90 897 0 +894 346 13 20 1245 2288 90 0 952 +895 47 388 -30 1015 1532 90 97 0 +896 315 57 20 863 1639 90 0 813 +897 110 199 10 1672 2902 90 0 893 +898 323 60 10 827 1872 90 0 173 +899 308 82 -30 2605 3433 90 351 0 +900 216 374 30 128 2131 90 0 680 +901 326 253 10 928 1309 90 0 591 +902 308 232 -20 2884 3171 90 798 0 +903 118 223 -20 134 1382 90 474 0 +904 149 444 -20 2066 3244 90 57 0 +905 95 395 30 212 988 90 0 429 +906 117 319 -10 2885 3492 90 705 0 +907 262 352 10 1106 2327 90 0 958 +908 468 135 10 695 1328 90 0 986 +909 351 31 -10 584 1202 90 1000 0 +910 361 15 -30 1810 2587 90 701 0 +911 195 300 10 208 867 90 0 373 +912 397 27 20 1861 3075 90 0 409 +913 179 311 10 93 788 90 0 444 +914 77 133 -30 208 1578 90 313 0 +915 66 397 10 847 1563 90 0 711 +916 366 352 -20 2461 3358 90 689 0 +917 221 87 20 1182 1784 90 0 91 +918 347 23 30 1108 1252 90 0 496 +919 176 358 -20 1742 2569 90 769 0 +920 229 78 20 1765 3388 90 0 637 +921 272 246 10 89 507 90 0 967 +922 293 67 -10 187 1432 90 408 0 +923 140 265 -20 957 2288 90 540 0 +924 238 83 20 1082 2165 90 0 547 +925 136 296 -30 2988 3702 90 945 0 +926 218 98 30 1435 2729 90 0 808 +927 290 440 -20 895 2508 90 630 0 +928 29 302 20 1523 2808 90 0 568 +929 290 425 -30 179 1381 90 460 0 +930 124 247 -20 2175 3698 90 696 0 +931 442 287 -10 2360 3448 90 356 0 +932 294 64 10 191 1579 90 0 617 +933 74 165 10 2620 3296 0 0 1011 +934 382 245 -20 2781 3297 90 646 0 +935 405 24 10 274 904 90 0 331 +936 211 97 20 526 1258 90 0 814 +937 88 390 30 214 1248 90 0 941 +938 37 295 -20 1361 2581 90 186 0 +939 359 371 -10 2163 2841 90 130 0 +940 186 372 20 1328 2203 90 0 335 +941 116 446 -30 1381 2575 90 937 0 +942 293 249 10 43 533 90 0 573 +943 83 228 20 466 993 90 0 777 +944 96 269 -10 341 1748 90 308 0 +945 179 284 30 919 1304 90 0 925 +946 368 219 -20 652 1388 90 729 0 +947 66 359 -20 3020 3454 90 418 0 +948 189 338 -10 2389 3679 90 237 0 +949 163 277 -20 2784 3733 90 804 0 +950 5 296 10 2207 2726 90 0 154 +951 152 478 -20 712 1478 90 38 0 +952 366 34 -20 1649 2683 90 894 0 +953 429 80 20 659 1132 90 0 885 +954 464 178 -20 2562 2980 90 134 0 +955 138 196 30 1763 2384 90 0 691 +956 87 481 -30 2105 3522 90 235 0 +957 425 99 20 231 935 90 0 450 +958 241 362 -10 2284 2695 90 907 0 +959 207 289 -30 2895 3259 90 728 0 +960 264 365 10 943 1727 90 0 374 +961 102 289 20 725 1918 90 0 129 +962 233 346 -30 2170 3411 90 827 0 +963 78 141 30 452 512 90 0 17 +964 196 348 -20 800 1548 90 511 0 +965 216 92 -20 1884 3039 90 140 0 +966 444 309 20 2004 3006 90 0 123 +967 313 263 -10 64 1044 90 921 0 +968 211 198 -40 2312 3167 90 94 0 +969 314 436 -10 1552 2810 90 42 0 +970 217 189 20 253 1034 90 0 838 +971 197 178 20 543 1733 90 0 40 +972 60 497 10 1698 2215 90 0 125 +973 206 312 40 1748 2412 90 0 816 +974 197 351 20 378 2337 0 0 1015 +975 305 233 -10 2564 3678 90 144 0 +976 297 250 -40 3048 3777 90 492 0 +977 71 348 -20 2628 3620 90 3 0 +978 11 269 10 850 1531 90 0 710 +979 247 447 -20 2880 3519 90 782 0 +980 386 213 20 1497 2656 90 0 368 +981 292 434 10 722 949 90 0 692 +982 436 301 -20 785 2122 90 823 0 +983 145 221 -30 434 1141 90 554 0 +984 224 96 40 1980 2376 90 0 327 +985 59 128 20 948 2205 90 0 721 +986 489 150 -10 1449 2307 90 908 0 +987 152 225 30 445 1702 90 0 505 +988 426 85 10 263 1152 90 0 392 +989 415 73 20 1339 1811 90 0 699 +990 440 70 -20 1525 3378 90 516 0 +991 320 476 30 338 869 90 0 735 +992 57 132 -20 1096 1688 90 121 0 +993 405 311 30 166 1060 90 0 85 +994 109 250 -20 1142 2098 90 337 0 +995 428 314 -20 502 1642 90 670 0 +996 40 288 20 1363 2383 0 0 1007 +997 175 282 10 761 1651 90 0 344 +998 298 456 30 2152 2671 90 0 354 +999 208 101 -20 154 1436 90 684 0 +1000 342 52 10 218 613 90 0 909 +1001 366 16 -20 1823 2292 90 700 0 +1002 432 105 -10 3469 3590 90 588 0 +1003 337 453 -30 2475 3604 90 208 0 +1004 441 157 -10 212 1343 90 155 0 +1005 90 391 -10 213 1224 90 647 0 +1006 390 42 -20 2126 3210 90 621 0 +1007 40 288 -20 1363 2383 90 996 0 +1008 428 292 -10 1662 2199 90 556 0 +1009 125 245 -20 2870 3294 90 466 0 +1010 252 347 -10 2543 3439 90 15 0 +1011 74 165 -10 2620 3296 90 933 0 +1012 77 287 -10 1520 2450 90 595 0 +1013 426 279 -30 2750 3635 90 611 0 +1014 232 85 -10 1993 2784 90 380 0 +1015 197 351 -20 378 2337 90 974 0 +1016 71 388 -20 896 2274 90 162 0 +1017 221 102 -20 2914 2963 90 287 0 +1018 325 228 -20 1472 2309 90 724 0 +1019 125 264 -20 2490 3380 90 101 0 +1020 222 357 -30 981 2212 90 878 0 +1021 262 368 -30 968 1516 90 187 0 +1022 123 206 -10 1456 2475 90 631 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1101.txt b/jsprit-instances/instances/lilim/1000/LR1101.txt new file mode 100644 index 00000000..3d42abe4 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1101.txt @@ -0,0 +1,1056 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 -3 1153 1163 10 240 0 +2 67 190 -34 1183 1193 10 248 0 +3 80 400 10 1456 1466 10 0 860 +4 439 237 -2 949 959 10 169 0 +5 377 385 6 876 886 10 0 996 +6 449 428 -28 1257 1267 10 219 0 +7 342 481 -15 1450 1460 10 700 0 +8 466 149 16 1196 1206 0 0 1013 +9 83 290 -12 618 628 10 964 0 +10 251 63 14 997 1007 10 0 362 +11 328 491 -7 688 698 10 440 0 +12 260 472 33 1046 1056 10 0 662 +13 290 145 5 1292 1302 10 0 845 +14 266 221 9 33 43 10 0 434 +15 164 320 -21 1105 1115 10 45 0 +16 52 412 -22 1416 1426 10 243 0 +17 485 104 -17 804 814 10 268 0 +18 144 331 -29 941 951 10 585 0 +19 387 394 -29 1108 1118 10 130 0 +20 472 57 17 1305 1315 10 0 809 +21 343 276 15 96 106 10 0 714 +22 104 349 20 1019 1029 10 0 423 +23 28 467 -11 1353 1363 10 808 0 +24 91 427 -46 893 903 10 496 0 +25 429 476 23 583 593 10 0 228 +26 210 276 5 47 57 10 0 721 +27 58 39 12 1173 1183 10 0 144 +28 273 300 30 55 65 10 0 523 +29 41 232 16 215 225 10 0 657 +30 25 53 -8 1030 1040 10 364 0 +31 52 18 -16 867 877 10 275 0 +32 27 444 -13 1090 1100 10 886 0 +33 178 72 -19 767 777 10 930 0 +34 406 460 -28 729 739 10 334 0 +35 250 328 24 259 269 0 0 1004 +36 492 34 5 821 831 10 0 989 +37 412 100 1 523 533 10 0 359 +38 233 87 18 263 273 10 0 126 +39 60 5 -4 1054 1064 10 491 0 +40 406 408 -13 1466 1476 10 469 0 +41 245 42 24 557 567 10 0 643 +42 166 345 -36 1140 1150 10 690 0 +43 440 294 -10 970 980 10 215 0 +44 370 382 -13 894 904 10 705 0 +45 32 319 21 411 421 10 0 15 +46 480 136 22 256 266 10 0 974 +47 371 163 21 838 848 0 0 1041 +48 0 188 26 942 952 10 0 382 +49 438 5 18 559 569 10 0 221 +50 132 477 25 337 347 10 0 369 +51 203 211 -11 1316 1326 10 157 0 +52 2 264 -19 665 675 10 493 0 +53 231 167 15 85 95 10 0 189 +54 423 221 9 268 278 0 0 1021 +55 459 53 -9 1132 1142 10 193 0 +56 386 154 -28 1111 1121 10 351 0 +57 130 494 -11 769 779 10 80 0 +58 31 175 -18 257 267 10 140 0 +59 69 423 32 812 822 10 0 479 +60 352 241 5 802 812 10 0 787 +61 261 201 -26 1524 1534 10 645 0 +62 59 276 -18 902 912 10 719 0 +63 146 188 6 1245 1255 0 0 1040 +64 451 62 5 292 302 10 0 288 +65 299 285 -9 1264 1274 10 848 0 +66 142 372 18 162 172 10 0 251 +67 440 201 29 903 913 10 0 887 +68 219 210 14 50 60 10 0 165 +69 64 198 -11 1098 1108 10 824 0 +70 390 249 21 592 602 0 0 1008 +71 9 101 16 676 686 10 0 801 +72 424 288 -12 1067 1077 10 939 0 +73 77 372 19 211 221 10 0 717 +74 298 264 36 50 60 10 0 877 +75 405 454 -7 1313 1323 10 943 0 +76 407 35 -22 1298 1308 10 317 0 +77 225 369 38 121 131 10 0 150 +78 347 459 -15 489 499 10 790 0 +79 117 178 -23 1127 1137 10 807 0 +80 132 479 11 257 267 10 0 57 +81 201 66 -13 1177 1187 10 137 0 +82 245 176 -33 1245 1255 10 185 0 +83 470 138 -12 1399 1409 10 195 0 +84 115 296 -20 1539 1549 10 681 0 +85 348 476 -21 1207 1217 10 907 0 +86 43 210 20 210 220 10 0 336 +87 327 139 -24 1267 1277 10 864 0 +88 49 353 -13 1456 1466 10 698 0 +89 356 256 19 106 116 10 0 916 +90 335 99 -17 1228 1238 10 153 0 +91 363 34 19 282 292 10 0 576 +92 33 278 -16 1497 1507 10 836 0 +93 366 288 -19 694 704 10 741 0 +94 452 172 -7 618 628 10 725 0 +95 86 189 21 237 247 10 0 298 +96 262 369 -10 139 149 10 710 0 +97 218 403 -18 1329 1339 10 171 0 +98 218 12 3 554 564 10 0 227 +99 228 399 14 596 606 10 0 925 +100 492 188 33 725 735 10 0 109 +101 267 174 -28 1628 1638 10 965 0 +102 274 441 12 705 715 10 0 413 +103 210 113 28 700 710 10 0 632 +104 370 262 -13 1109 1119 10 827 0 +105 303 186 -11 1364 1374 10 987 0 +106 241 180 13 1705 1715 0 0 1042 +107 100 85 -22 361 371 10 515 0 +108 350 199 -12 1211 1221 10 510 0 +109 500 228 -33 792 802 10 100 0 +110 251 238 27 12 22 0 0 1022 +111 114 102 21 517 527 10 0 443 +112 345 146 -15 1449 1459 10 584 0 +113 21 146 -23 497 507 10 731 0 +114 330 147 -30 858 868 10 508 0 +115 476 61 36 459 469 10 0 561 +116 386 245 16 489 499 10 0 941 +117 201 278 13 56 66 10 0 404 +118 421 499 -25 1355 1365 10 550 0 +119 426 231 24 1038 1048 0 0 1023 +120 105 137 32 462 472 10 0 393 +121 64 437 11 928 938 10 0 224 +122 181 260 23 69 79 10 0 770 +123 413 391 8 227 237 10 0 578 +124 370 493 -10 581 591 10 879 0 +125 447 267 19 990 1000 10 0 861 +126 232 101 -18 356 366 10 38 0 +127 371 332 -36 540 550 10 223 0 +128 447 383 17 237 247 10 0 949 +129 325 147 -20 1197 1207 10 471 0 +130 489 437 29 717 727 10 0 19 +131 415 95 -30 1187 1197 10 467 0 +132 331 356 13 722 732 10 0 142 +133 374 346 27 431 441 10 0 794 +134 108 37 -2 559 569 10 573 0 +135 5 224 19 1065 1075 10 0 231 +136 93 413 17 226 236 10 0 961 +137 210 29 13 1061 1071 10 0 81 +138 136 265 12 114 124 10 0 884 +139 409 155 19 185 195 10 0 818 +140 111 178 18 156 166 10 0 58 +141 291 251 20 41 51 10 0 292 +142 322 290 -13 1489 1499 10 132 0 +143 57 183 -18 1110 1120 10 258 0 +144 181 185 -12 1624 1634 10 27 0 +145 7 382 -14 780 790 10 640 0 +146 425 448 9 804 814 10 0 722 +147 174 41 -14 1313 1323 10 338 0 +148 161 276 8 143 153 10 0 753 +149 398 49 21 802 812 0 0 1011 +150 210 379 -38 719 729 10 77 0 +151 60 231 -15 1036 1046 10 337 0 +152 453 360 13 230 240 10 0 512 +153 367 97 17 998 1008 10 0 90 +154 488 3 3 411 421 10 0 314 +155 44 115 24 246 256 10 0 534 +156 48 293 -22 286 296 10 160 0 +157 64 135 11 878 888 10 0 51 +158 65 62 -31 986 996 10 979 0 +159 404 207 -33 921 931 10 463 0 +160 68 303 22 231 241 10 0 156 +161 263 418 25 288 298 10 0 522 +162 147 30 -23 1119 1129 10 795 0 +163 384 149 18 1207 1217 0 0 1053 +164 340 416 36 331 341 10 0 374 +165 271 128 -14 356 366 10 68 0 +166 89 358 -26 1257 1267 10 858 0 +167 20 480 -30 580 590 10 677 0 +168 488 173 25 1220 1230 0 0 1005 +169 439 156 2 536 546 10 0 4 +170 389 156 -37 726 736 10 679 0 +171 111 392 18 1179 1189 10 0 97 +172 267 162 -20 1459 1469 10 854 0 +173 248 176 -14 1411 1421 10 281 0 +174 413 476 -33 1189 1199 10 912 0 +175 352 481 15 1295 1305 10 0 391 +176 264 135 1 889 899 10 0 821 +177 29 462 -5 1320 1330 10 284 0 +178 148 462 10 737 747 10 0 321 +179 44 140 -22 878 888 10 896 0 +180 414 378 23 505 515 10 0 559 +181 392 95 16 776 786 10 0 871 +182 216 341 19 664 674 10 0 239 +183 211 411 -11 1157 1167 10 900 0 +184 317 45 -11 668 678 10 368 0 +185 178 150 33 642 652 10 0 82 +186 428 302 27 1026 1036 10 0 810 +187 450 45 -20 514 524 10 684 0 +188 453 318 30 384 394 10 0 678 +189 186 135 -15 728 738 10 53 0 +190 11 403 18 353 363 10 0 504 +191 433 447 -26 804 814 10 727 0 +192 272 420 7 1396 1406 10 0 626 +193 429 59 9 469 479 10 0 55 +194 200 27 -12 535 545 10 403 0 +195 498 171 12 1266 1276 10 0 83 +196 487 320 -15 868 878 10 347 0 +197 45 166 -15 1023 1033 10 446 0 +198 490 276 33 248 258 10 0 269 +199 126 391 19 283 293 10 0 373 +200 92 18 8 1134 1144 0 0 1033 +201 293 228 19 48 58 10 0 756 +202 343 205 -15 777 787 10 218 0 +203 182 480 -12 375 385 10 462 0 +204 385 285 -21 878 888 10 712 0 +205 44 344 -22 1089 1099 10 367 0 +206 170 347 15 446 456 10 0 853 +207 457 492 7 518 528 10 0 310 +208 124 448 6 379 389 10 0 880 +209 398 210 31 153 163 10 0 454 +210 75 118 -16 419 429 10 361 0 +211 105 474 27 481 491 0 0 1019 +212 134 211 35 130 140 10 0 265 +213 211 248 26 39 49 0 0 1038 +214 212 186 -35 1732 1742 10 488 0 +215 492 335 10 838 848 10 0 43 +216 497 483 12 363 373 10 0 969 +217 440 436 18 902 912 10 0 828 +218 311 203 15 733 743 10 0 202 +219 491 369 28 740 750 10 0 6 +220 67 378 26 480 490 10 0 390 +221 383 17 -18 950 960 10 49 0 +222 7 82 25 422 432 10 0 552 +223 342 319 36 115 125 10 0 127 +224 78 406 -11 970 980 10 121 0 +225 103 123 -27 500 510 10 433 0 +226 241 38 -5 542 552 10 447 0 +227 224 3 -3 700 710 10 98 0 +228 436 467 -23 746 756 10 25 0 +229 438 488 18 337 347 10 0 437 +230 351 60 15 220 230 10 0 642 +231 13 214 -19 1364 1374 10 135 0 +232 429 67 16 742 752 10 0 952 +233 498 456 27 1416 1426 10 0 730 +234 135 400 -17 309 319 10 718 0 +235 215 293 13 55 65 10 0 312 +236 354 416 10 689 699 10 0 485 +237 294 421 -29 1585 1595 10 272 0 +238 208 445 22 1342 1352 10 0 619 +239 230 320 -19 1202 1212 10 182 0 +240 157 38 3 1058 1068 10 0 1 +241 441 100 31 883 893 10 0 711 +242 61 170 -7 1016 1026 10 492 0 +243 79 467 22 361 371 10 0 16 +244 365 190 -12 1487 1497 10 732 0 +245 282 1 -27 1052 1062 10 675 0 +246 124 111 15 799 809 10 0 976 +247 247 219 17 31 41 10 0 339 +248 28 180 34 396 406 10 0 2 +249 167 488 17 260 270 10 0 779 +250 442 289 25 201 211 10 0 568 +251 136 430 -18 720 730 10 66 0 +252 38 15 3 1101 1111 10 0 354 +253 246 314 -24 1455 1465 10 548 0 +254 176 200 17 578 588 10 0 290 +255 337 232 -16 1581 1591 10 506 0 +256 257 133 -15 872 882 10 948 0 +257 295 247 -24 1313 1323 10 967 0 +258 39 162 18 575 585 10 0 143 +259 79 257 26 963 973 10 0 525 +260 236 126 23 124 134 10 0 303 +261 259 498 -8 1085 1095 10 425 0 +262 180 162 -17 183 193 10 673 0 +263 53 466 9 345 355 10 0 418 +264 167 291 27 1644 1654 0 0 1024 +265 89 185 -35 610 620 10 212 0 +266 487 446 -23 1350 1360 10 594 0 +267 308 199 -13 1518 1528 10 984 0 +268 481 84 17 516 526 10 0 17 +269 495 227 -33 354 364 10 198 0 +270 397 57 17 1486 1496 0 0 1035 +271 372 39 -11 734 744 10 587 0 +272 278 450 29 1385 1395 10 0 237 +273 292 32 14 239 249 0 0 1007 +274 90 496 13 1405 1415 10 0 919 +275 68 53 16 749 759 10 0 31 +276 371 423 10 211 221 0 0 1044 +277 273 149 14 1513 1523 0 0 1017 +278 297 283 -26 1359 1369 10 407 0 +279 120 37 -27 785 795 10 448 0 +280 371 488 10 593 603 10 0 749 +281 206 174 14 810 820 10 0 173 +282 174 347 3 1025 1035 10 0 461 +283 330 281 -11 1340 1350 10 405 0 +284 67 451 5 1226 1236 10 0 177 +285 27 464 -18 1301 1311 10 375 0 +286 361 178 -27 982 992 10 575 0 +287 463 406 -25 867 877 10 995 0 +288 456 157 -5 1465 1475 10 64 0 +289 153 244 5 118 128 0 0 1052 +290 153 192 -17 876 886 10 254 0 +291 352 63 6 1188 1198 10 0 823 +292 371 71 -20 297 307 10 141 0 +293 163 472 9 663 673 0 0 1027 +294 448 495 40 394 404 0 0 1051 +295 282 10 -2 1272 1282 10 329 0 +296 66 163 -35 405 415 10 377 0 +297 314 205 -32 1537 1547 10 613 0 +298 83 169 -21 787 797 10 95 0 +299 221 291 9 56 66 10 0 384 +300 374 116 9 597 607 10 0 661 +301 418 269 3 1215 1225 10 0 530 +302 178 302 -22 897 907 10 517 0 +303 250 57 -23 758 768 10 260 0 +304 475 352 -13 320 330 10 872 0 +305 1 252 5 285 295 10 0 331 +306 286 356 30 111 121 10 0 451 +307 65 82 13 750 760 10 0 528 +308 154 392 9 171 181 10 0 408 +309 196 56 -21 619 629 10 819 0 +310 366 390 -7 1328 1338 10 207 0 +311 436 25 -23 1292 1302 10 892 0 +312 67 352 -13 383 393 10 235 0 +313 173 182 25 102 112 10 0 857 +314 390 34 -3 1070 1080 10 154 0 +315 18 225 -19 701 711 10 341 0 +316 57 43 15 1033 1043 10 0 895 +317 388 44 22 1141 1151 10 0 76 +318 269 112 -23 1273 1283 10 785 0 +319 374 260 -14 1781 1791 10 372 0 +320 291 213 23 1268 1278 0 0 1001 +321 178 420 -10 1081 1091 10 178 0 +322 389 255 15 795 805 10 0 743 +323 134 194 -17 1662 1672 10 940 0 +324 93 490 -18 389 399 10 582 0 +325 64 294 12 1111 1121 10 0 586 +326 493 111 26 551 561 10 0 406 +327 150 484 16 635 645 10 0 837 +328 235 316 -18 666 676 10 697 0 +329 239 15 2 614 624 10 0 295 +330 193 138 -23 671 681 10 606 0 +331 40 278 -5 1114 1124 10 305 0 +332 307 52 23 930 940 10 0 646 +333 161 416 -24 1021 1031 10 738 0 +334 381 457 28 481 491 10 0 34 +335 55 318 13 322 332 10 0 959 +336 80 279 -20 1168 1178 10 86 0 +337 48 162 15 227 237 10 0 151 +338 91 27 14 1192 1202 10 0 147 +339 288 70 -17 189 199 10 247 0 +340 177 404 -23 1272 1282 10 708 0 +341 10 237 19 626 636 10 0 315 +342 493 493 -4 866 876 10 822 0 +343 440 292 -18 950 960 10 906 0 +344 349 76 -10 1041 1051 10 494 0 +345 47 208 30 236 246 0 0 1020 +346 283 454 14 1275 1285 10 0 450 +347 486 324 15 780 790 10 0 196 +348 392 87 23 1193 1203 0 0 1009 +349 122 422 3 1467 1477 0 0 1047 +350 37 281 17 503 513 10 0 685 +351 413 127 28 841 851 10 0 56 +352 222 499 7 855 865 10 0 567 +353 211 446 -13 1133 1143 10 992 0 +354 30 7 -3 1199 1209 10 252 0 +355 398 341 -10 949 959 10 903 0 +356 26 67 15 1327 1337 10 0 603 +357 461 186 -29 1522 1532 10 602 0 +358 313 391 -34 160 170 10 656 0 +359 471 94 -1 1009 1019 10 37 0 +360 341 72 -5 815 825 10 652 0 +361 130 186 16 141 151 10 0 210 +362 257 57 -14 1236 1246 10 10 0 +363 94 344 26 692 702 0 0 1049 +364 6 53 8 597 607 10 0 30 +365 146 376 -22 244 254 10 489 0 +366 244 13 -18 1023 1033 10 507 0 +367 29 336 22 342 352 10 0 205 +368 306 42 11 487 497 10 0 184 +369 177 486 -25 1607 1617 10 50 0 +370 489 338 17 1407 1417 0 0 1032 +371 179 318 2 1131 1141 10 0 455 +372 344 203 14 177 187 10 0 319 +373 149 341 -19 414 424 10 199 0 +374 307 412 -36 414 424 10 164 0 +375 68 450 18 643 653 10 0 285 +376 420 80 24 1107 1117 10 0 633 +377 144 220 35 110 120 10 0 296 +378 497 54 -9 988 998 10 936 0 +379 80 458 30 381 391 10 0 762 +380 84 377 10 936 946 10 0 430 +381 332 382 -23 1020 1030 10 772 0 +382 6 196 -26 1213 1223 10 48 0 +383 104 28 -24 1483 1493 10 942 0 +384 224 320 -9 1294 1304 10 299 0 +385 87 3 13 1443 1453 0 0 1025 +386 149 214 7 492 502 10 0 449 +387 98 29 -14 1057 1067 10 791 0 +388 135 30 -26 484 494 10 702 0 +389 287 397 12 574 584 10 0 526 +390 107 374 -26 924 934 10 220 0 +391 355 485 -15 1489 1499 10 175 0 +392 51 286 -16 1469 1479 10 733 0 +393 49 118 -32 1081 1091 10 120 0 +394 159 226 16 94 104 10 0 829 +395 185 431 15 397 407 10 0 539 +396 262 92 25 640 650 10 0 917 +397 475 198 -31 845 855 10 736 0 +398 142 30 -14 1256 1266 10 441 0 +399 481 207 34 866 876 10 0 422 +400 174 122 -33 603 613 10 947 0 +401 35 263 27 280 290 0 0 1054 +402 24 71 -11 356 366 10 410 0 +403 173 65 12 458 468 10 0 194 +404 91 326 -13 973 983 10 117 0 +405 470 417 11 747 757 10 0 283 +406 397 153 -26 892 902 10 326 0 +407 295 283 26 903 913 10 0 278 +408 174 376 -9 1429 1439 10 308 0 +409 38 190 23 295 305 10 0 902 +410 16 68 11 296 306 10 0 402 +411 179 286 8 351 361 10 0 844 +412 244 422 -14 548 558 10 873 0 +413 250 441 -12 766 776 10 102 0 +414 497 18 10 1140 1150 0 0 1018 +415 195 111 -2 1008 1018 10 599 0 +416 26 221 -10 1006 1016 10 616 0 +417 442 5 -9 330 340 10 486 0 +418 44 496 -9 412 422 10 263 0 +419 448 404 -25 609 619 10 579 0 +420 471 427 -20 826 836 10 950 0 +421 460 424 -15 1465 1475 10 531 0 +422 461 195 -34 1405 1415 10 399 0 +423 146 313 -20 1205 1215 10 22 0 +424 19 273 -16 1027 1037 10 637 0 +425 245 461 8 659 669 10 0 261 +426 69 266 -29 768 778 10 863 0 +427 191 84 -13 877 887 10 724 0 +428 68 160 -26 1146 1156 10 588 0 +429 212 47 20 811 821 10 0 674 +430 80 337 -10 1129 1139 10 380 0 +431 412 478 -21 970 980 10 835 0 +432 225 488 28 646 656 10 0 850 +433 105 140 27 182 192 10 0 225 +434 389 43 -9 406 416 10 14 0 +435 177 156 25 177 187 10 0 800 +436 179 497 -13 1421 1431 10 670 0 +437 377 432 -18 841 851 10 229 0 +438 497 296 14 623 633 10 0 734 +439 152 476 45 533 543 10 0 688 +440 277 428 7 500 510 10 0 11 +441 64 5 14 1139 1149 10 0 398 +442 44 311 -7 417 427 10 544 0 +443 165 59 -21 953 963 10 111 0 +444 261 138 -12 628 638 10 971 0 +445 268 351 7 1685 1695 0 0 1010 +446 48 150 15 665 675 10 0 197 +447 215 79 5 234 244 10 0 226 +448 109 56 27 239 249 10 0 279 +449 171 188 -7 631 641 10 386 0 +450 284 457 -14 1509 1519 10 346 0 +451 274 442 -30 1076 1086 10 306 0 +452 33 286 -25 1556 1566 10 885 0 +453 112 433 29 245 255 10 0 476 +454 423 170 -31 523 533 10 209 0 +455 213 283 -2 1481 1491 10 371 0 +456 240 34 -30 1570 1580 10 780 0 +457 283 438 3 241 251 10 0 972 +458 324 99 10 348 358 10 0 847 +459 259 301 25 109 119 10 0 751 +460 189 402 -18 546 556 10 901 0 +461 215 282 -3 1450 1460 10 282 0 +462 166 440 12 207 217 10 0 203 +463 374 232 33 125 135 10 0 159 +464 339 113 -19 771 781 10 914 0 +465 335 46 18 1352 1362 10 0 889 +466 313 493 -12 1203 1213 10 817 0 +467 432 66 30 1081 1091 10 0 131 +468 76 462 18 966 976 10 0 768 +469 397 477 13 1226 1236 10 0 40 +470 196 489 -4 1040 1050 10 545 0 +471 354 156 20 842 852 10 0 129 +472 171 24 11 1393 1403 10 0 993 +473 187 73 18 302 312 10 0 761 +474 243 408 -13 1444 1454 10 856 0 +475 421 387 -14 811 821 10 929 0 +476 141 426 -29 541 551 10 453 0 +477 415 118 19 227 237 10 0 793 +478 240 255 -16 1621 1631 10 898 0 +479 162 388 -32 1136 1146 10 59 0 +480 413 493 -10 1228 1238 10 951 0 +481 69 414 -22 1273 1283 10 816 0 +482 273 70 36 629 639 10 0 962 +483 142 14 18 845 855 10 0 514 +484 185 434 -9 584 594 10 905 0 +485 360 294 -10 1428 1438 10 236 0 +486 265 240 9 18 28 10 0 417 +487 280 245 21 30 40 10 0 621 +488 87 51 35 524 534 10 0 214 +489 195 273 22 59 69 10 0 365 +490 422 498 -19 702 712 10 920 0 +491 95 64 4 776 786 10 0 39 +492 63 155 7 975 985 10 0 242 +493 24 259 19 380 390 10 0 52 +494 376 92 10 1001 1011 10 0 344 +495 83 300 -15 510 520 10 820 0 +496 72 477 46 288 298 10 0 24 +497 380 194 3 724 734 10 0 639 +498 72 227 -23 574 584 10 755 0 +499 238 123 -18 791 801 10 842 0 +500 188 119 44 985 995 10 0 980 +501 229 322 11 1670 1680 0 0 1014 +502 150 68 -28 433 443 10 680 0 +503 67 24 -16 1028 1038 10 813 0 +504 63 420 -18 530 540 10 190 0 +505 339 144 -33 1109 1119 10 686 0 +506 454 201 16 1315 1325 10 0 255 +507 158 24 18 621 631 10 0 366 +508 365 119 30 392 402 10 0 114 +509 440 284 25 862 872 10 0 716 +510 417 212 12 920 930 10 0 108 +511 404 439 3 249 259 10 0 760 +512 472 248 -13 844 854 10 152 0 +513 235 108 -31 1090 1100 10 623 0 +514 174 67 -18 1270 1280 10 483 0 +515 132 151 22 154 164 10 0 107 +516 217 207 -1 1392 1402 10 638 0 +517 162 306 22 129 139 10 0 302 +518 48 366 29 753 763 0 0 1012 +519 209 68 -30 1578 1588 10 628 0 +520 94 497 31 792 802 10 0 693 +521 110 122 -19 1519 1529 10 855 0 +522 274 403 -25 897 907 10 161 0 +523 421 386 -30 834 844 10 28 0 +524 399 175 13 757 767 10 0 826 +525 56 268 -26 1074 1084 10 259 0 +526 322 406 -12 839 849 10 389 0 +527 244 277 18 1311 1321 0 0 1034 +528 105 181 -13 1541 1551 10 307 0 +529 30 97 23 1220 1230 10 0 665 +530 359 246 -3 1433 1443 10 301 0 +531 498 457 15 923 933 10 0 421 +532 190 267 -21 1764 1774 10 547 0 +533 334 481 -19 340 350 10 763 0 +534 18 24 -24 638 648 10 155 0 +535 482 104 19 817 827 10 0 592 +536 460 328 13 229 239 10 0 554 +537 320 211 16 1003 1013 10 0 541 +538 494 165 -14 614 624 10 960 0 +539 167 445 -15 1422 1432 10 395 0 +540 340 291 22 480 490 10 0 713 +541 272 234 -16 1600 1610 10 537 0 +542 325 56 -12 806 816 10 692 0 +543 71 304 -20 699 709 10 804 0 +544 87 311 7 174 184 10 0 442 +545 207 487 4 699 709 10 0 470 +546 332 5 14 1043 1053 10 0 968 +547 161 275 21 1357 1367 10 0 532 +548 268 458 24 533 543 10 0 253 +549 175 352 -23 1675 1685 10 769 0 +550 398 476 25 428 438 10 0 118 +551 51 360 -12 1155 1165 10 737 0 +552 21 70 -25 781 791 10 222 0 +553 80 251 -13 314 324 10 629 0 +554 457 280 -13 1010 1020 10 536 0 +555 423 315 -24 190 200 10 986 0 +556 66 88 2 840 850 10 0 715 +557 479 387 13 407 417 10 0 894 +558 436 123 40 225 235 10 0 668 +559 286 244 -23 1294 1304 10 180 0 +560 449 190 -25 1150 1160 10 988 0 +561 456 113 -36 1237 1247 10 115 0 +562 480 152 26 1032 1042 10 0 648 +563 100 266 -4 480 490 10 748 0 +564 343 34 7 735 745 10 0 766 +565 374 306 -14 1004 1014 10 728 0 +566 13 465 31 784 794 10 0 571 +567 230 487 -7 1140 1150 10 352 0 +568 442 153 -25 1199 1209 10 250 0 +569 240 362 -4 1424 1434 10 982 0 +570 433 319 11 1386 1396 0 0 1029 +571 0 422 -31 831 841 10 566 0 +572 297 131 -32 1175 1185 10 927 0 +573 71 12 2 303 313 10 0 134 +574 44 440 -23 799 809 10 597 0 +575 447 184 27 434 444 10 0 286 +576 341 59 -19 800 810 10 91 0 +577 132 32 -12 794 804 10 683 0 +578 411 396 -8 930 940 10 123 0 +579 450 416 25 587 597 10 0 419 +580 323 34 -30 1325 1335 10 620 0 +581 244 368 -33 424 434 10 704 0 +582 90 477 18 277 287 10 0 324 +583 34 169 11 494 504 0 0 1045 +584 351 128 15 1263 1273 10 0 112 +585 71 282 29 652 662 10 0 18 +586 157 269 -12 1586 1596 10 325 0 +587 392 1 11 615 625 10 0 271 +588 39 153 26 808 818 10 0 428 +589 306 229 -13 1330 1340 10 973 0 +590 415 253 21 377 387 10 0 831 +591 92 76 -17 1149 1159 10 627 0 +592 437 98 -19 1124 1134 10 535 0 +593 12 367 -21 336 346 10 838 0 +594 448 414 23 1233 1243 10 0 266 +595 128 113 -37 373 383 10 655 0 +596 43 360 2 845 855 10 0 664 +597 102 422 23 236 246 10 0 574 +598 480 131 -32 698 708 10 953 0 +599 210 81 2 409 419 10 0 415 +600 432 2 20 477 487 10 0 660 +601 396 83 -26 1596 1606 10 752 0 +602 489 159 29 1438 1448 10 0 357 +603 56 75 -15 1448 1458 10 356 0 +604 66 31 -11 1058 1068 10 786 0 +605 460 117 14 530 540 10 0 735 +606 175 239 23 75 85 10 0 330 +607 217 333 -21 421 431 10 775 0 +608 62 375 16 359 369 10 0 956 +609 82 183 -8 1112 1122 10 966 0 +610 248 214 -20 1489 1499 10 634 0 +611 385 239 21 796 806 10 0 745 +612 371 315 -17 1176 1186 10 849 0 +613 333 163 32 1250 1260 10 0 297 +614 100 66 -22 1410 1420 10 798 0 +615 311 422 -9 998 1008 10 799 0 +616 153 235 10 98 108 10 0 416 +617 168 109 -7 214 224 10 667 0 +618 284 319 -23 827 837 10 811 0 +619 195 464 -22 1551 1561 10 238 0 +620 382 9 30 282 292 10 0 580 +621 325 210 -21 943 953 10 487 0 +622 366 334 5 420 430 10 0 672 +623 200 78 31 1003 1013 10 0 513 +624 351 5 -31 506 516 10 650 0 +625 197 202 -22 1214 1224 10 788 0 +626 270 337 -7 1793 1803 10 192 0 +627 125 65 17 798 808 10 0 591 +628 120 17 30 289 299 10 0 519 +629 84 255 13 292 302 10 0 553 +630 222 331 10 550 560 0 0 1039 +631 332 459 35 379 389 0 0 1028 +632 226 175 -28 1704 1714 10 103 0 +633 404 140 -24 1269 1279 10 376 0 +634 223 178 20 1146 1156 10 0 610 +635 330 308 24 1180 1190 10 0 694 +636 140 108 29 1081 1091 10 0 866 +637 34 239 16 229 239 10 0 424 +638 94 192 1 1090 1100 10 0 516 +639 458 213 -3 1138 1148 10 497 0 +640 13 314 14 254 264 10 0 145 +641 202 391 30 634 644 10 0 834 +642 339 41 -15 466 476 10 230 0 +643 224 56 -24 1196 1206 10 41 0 +644 345 431 12 355 365 10 0 852 +645 292 104 26 314 324 10 0 61 +646 318 99 -23 1223 1233 10 332 0 +647 46 248 9 824 834 10 0 985 +648 482 184 -26 1117 1127 10 562 0 +649 411 379 -12 1203 1213 10 899 0 +650 293 174 31 87 97 10 0 624 +651 169 305 21 172 182 10 0 937 +652 394 47 5 323 333 10 0 360 +653 323 29 7 1147 1157 0 0 1006 +654 65 343 -35 217 227 10 932 0 +655 158 179 37 116 126 10 0 595 +656 299 353 34 114 124 10 0 358 +657 9 233 -16 316 326 10 29 0 +658 330 138 18 1120 1130 0 0 1048 +659 48 412 -36 1042 1052 10 843 0 +660 385 17 -20 819 829 10 600 0 +661 382 110 -9 1122 1132 10 300 0 +662 336 493 -33 1503 1513 10 12 0 +663 181 441 25 552 562 10 0 840 +664 162 301 -2 1623 1633 10 596 0 +665 1 101 -23 1267 1277 10 529 0 +666 80 117 -28 834 844 10 703 0 +667 210 219 7 50 60 10 0 617 +668 404 59 -40 923 933 10 558 0 +669 288 439 16 283 293 10 0 776 +670 149 458 13 1174 1184 10 0 436 +671 257 391 -21 1643 1653 10 893 0 +672 405 349 -5 532 542 10 622 0 +673 191 215 17 68 78 10 0 262 +674 231 29 -20 1236 1246 10 429 0 +675 253 50 27 236 246 10 0 245 +676 441 177 -8 1011 1021 10 839 0 +677 5 445 30 321 331 10 0 167 +678 463 253 -30 1057 1067 10 188 0 +679 435 180 37 235 245 10 0 170 +680 198 85 28 273 283 10 0 502 +681 59 388 20 673 683 10 0 84 +682 373 418 -23 1269 1279 10 933 0 +683 142 80 12 502 512 10 0 577 +684 441 7 20 402 412 10 0 187 +685 33 268 -17 706 716 10 350 0 +686 355 174 33 725 735 10 0 505 +687 228 260 -12 1616 1626 10 915 0 +688 114 460 -45 1096 1106 10 439 0 +689 337 41 8 1012 1022 10 0 767 +690 154 374 36 947 957 10 0 42 +691 235 13 27 369 379 10 0 784 +692 303 78 12 179 189 10 0 542 +693 103 464 -31 1283 1293 10 520 0 +694 325 311 -24 1332 1342 10 635 0 +695 306 235 25 57 67 10 0 876 +696 382 360 26 188 198 10 0 814 +697 235 288 18 40 50 10 0 328 +698 0 356 13 1096 1106 10 0 88 +699 178 135 -32 1524 1534 10 781 0 +700 226 423 15 207 217 10 0 7 +701 15 11 -15 962 972 10 999 0 +702 144 35 26 239 249 10 0 388 +703 176 199 28 89 99 10 0 666 +704 247 306 33 56 66 10 0 581 +705 396 417 13 820 830 10 0 44 +706 289 220 19 49 59 10 0 773 +707 23 235 43 1033 1043 0 0 1015 +708 137 377 23 169 179 10 0 340 +709 400 71 17 1382 1392 0 0 1016 +710 261 359 10 109 119 10 0 96 +711 438 127 -31 951 961 10 241 0 +712 318 280 21 74 84 10 0 204 +713 333 293 -22 627 637 10 540 0 +714 436 295 -15 538 548 10 21 0 +715 62 94 -2 961 971 10 556 0 +716 495 355 -25 1253 1263 10 509 0 +717 13 394 -19 383 393 10 73 0 +718 172 292 17 102 112 10 0 234 +719 14 232 18 315 325 10 0 62 +720 437 90 12 595 605 0 0 1046 +721 214 274 -5 1379 1389 10 26 0 +722 420 383 -9 992 1002 10 146 0 +723 120 261 5 803 813 10 0 792 +724 179 75 13 750 760 10 0 427 +725 484 224 7 310 320 10 0 94 +726 214 245 8 36 46 0 0 1003 +727 395 474 26 397 407 10 0 191 +728 368 311 14 936 946 10 0 565 +729 199 203 20 1467 1477 10 0 796 +730 485 428 -27 1500 1510 10 233 0 +731 86 199 23 288 298 10 0 113 +732 447 272 12 394 404 10 0 244 +733 40 304 16 1155 1165 10 0 392 +734 475 267 -14 790 800 10 438 0 +735 482 141 -14 1021 1031 10 605 0 +736 489 274 31 544 554 10 0 397 +737 26 342 12 331 341 10 0 551 +738 139 438 24 224 234 10 0 333 +739 12 358 -23 1234 1244 10 742 0 +740 125 61 26 622 632 10 0 747 +741 360 284 19 677 687 10 0 93 +742 29 358 23 621 631 10 0 739 +743 285 247 -15 1285 1295 10 322 0 +744 248 386 22 388 398 10 0 851 +745 415 207 -21 910 920 10 611 0 +746 130 247 17 120 130 10 0 934 +747 172 66 -26 1313 1323 10 740 0 +748 92 259 4 409 419 10 0 563 +749 379 486 -10 682 692 10 280 0 +750 452 484 26 1288 1298 0 0 1002 +751 268 288 -25 1277 1287 10 459 0 +752 349 43 26 229 239 10 0 601 +753 225 269 -8 1281 1291 10 148 0 +754 50 383 20 270 280 10 0 859 +755 110 251 23 508 518 10 0 498 +756 461 182 -19 639 649 10 201 0 +757 255 487 -17 408 418 10 897 0 +758 133 202 -1 471 481 10 1000 0 +759 34 329 -21 1053 1063 10 777 0 +760 368 452 -3 680 690 10 511 0 +761 242 106 -18 1278 1288 10 473 0 +762 171 303 -30 1599 1609 10 379 0 +763 329 456 19 259 269 10 0 533 +764 490 286 -16 532 542 10 910 0 +765 61 214 4 352 362 10 0 867 +766 365 74 -7 858 868 10 564 0 +767 321 149 -8 1435 1445 10 689 0 +768 84 453 -18 1233 1243 10 468 0 +769 26 442 23 1354 1364 10 0 549 +770 180 283 -23 754 764 10 122 0 +771 394 322 12 1035 1045 10 0 957 +772 348 348 23 945 955 10 0 381 +773 309 161 -19 593 603 10 706 0 +774 385 58 24 415 425 10 0 778 +775 228 287 21 43 53 10 0 607 +776 312 453 -16 560 570 10 669 0 +777 35 344 21 873 883 10 0 759 +778 393 98 -24 763 773 10 774 0 +779 208 488 -17 488 498 10 249 0 +780 235 33 30 1347 1357 10 0 456 +781 140 137 32 580 590 10 0 699 +782 405 187 -27 1261 1271 10 812 0 +783 330 371 -26 569 579 10 983 0 +784 265 0 -27 906 916 10 691 0 +785 295 89 23 752 762 10 0 318 +786 3 23 11 401 411 10 0 604 +787 363 225 -5 866 876 10 60 0 +788 148 208 22 536 546 10 0 625 +789 466 362 -4 1162 1172 10 881 0 +790 267 290 15 43 53 10 0 78 +791 98 2 14 602 612 10 0 387 +792 131 246 -5 842 852 10 723 0 +793 418 75 -19 458 468 10 477 0 +794 366 260 -27 1530 1540 10 133 0 +795 138 28 23 1107 1117 10 0 162 +796 209 212 -20 1538 1548 10 729 0 +797 443 167 17 553 563 10 0 883 +798 156 65 22 1047 1057 10 0 614 +799 279 355 9 176 186 10 0 615 +800 206 172 -25 798 808 10 435 0 +801 32 94 -16 940 950 10 71 0 +802 301 239 31 52 62 10 0 978 +803 471 368 19 438 448 10 0 922 +804 133 273 20 119 129 10 0 543 +805 253 74 20 1360 1370 0 0 1026 +806 470 405 17 936 946 0 0 1050 +807 77 172 23 796 806 10 0 79 +808 77 465 11 275 285 10 0 23 +809 466 96 -17 1393 1403 10 20 0 +810 402 277 -27 1448 1458 10 186 0 +811 267 374 23 611 621 10 0 618 +812 450 194 27 635 645 10 0 782 +813 89 65 16 730 740 10 0 503 +814 429 389 -26 434 444 10 696 0 +815 202 28 22 944 954 0 0 1031 +816 46 389 22 267 277 10 0 481 +817 246 407 12 322 332 10 0 466 +818 452 110 -19 350 360 10 139 0 +819 213 185 21 74 84 10 0 309 +820 134 276 15 143 153 10 0 495 +821 262 97 -1 957 967 10 176 0 +822 469 489 4 565 575 10 0 342 +823 364 71 -6 1358 1368 10 291 0 +824 68 240 11 804 814 10 0 69 +825 494 468 31 362 372 10 0 998 +826 439 222 -13 990 1000 10 524 0 +827 386 225 13 929 939 10 0 104 +828 434 359 -18 1402 1412 10 217 0 +829 103 177 -16 636 646 10 394 0 +830 89 322 21 1031 1041 10 0 945 +831 307 249 -21 1387 1397 10 590 0 +832 30 155 -19 1290 1300 10 990 0 +833 401 314 -12 986 996 10 862 0 +834 217 357 -30 1430 1440 10 641 0 +835 373 421 21 247 257 10 0 431 +836 5 281 16 1382 1392 10 0 92 +837 173 474 -16 1295 1305 10 327 0 +838 36 301 21 219 229 10 0 593 +839 429 169 8 913 923 10 0 676 +840 195 450 -25 1496 1506 10 663 0 +841 95 382 -26 241 251 10 944 0 +842 225 121 18 743 753 10 0 499 +843 10 407 36 444 454 10 0 659 +844 221 269 -8 1275 1285 10 411 0 +845 264 180 -5 1691 1701 10 13 0 +846 168 59 6 376 386 10 0 997 +847 281 96 -10 1136 1146 10 458 0 +848 387 349 9 169 179 10 0 65 +849 398 329 17 167 177 10 0 612 +850 239 486 -28 1492 1502 10 432 0 +851 237 420 -22 1344 1354 10 744 0 +852 346 354 -12 827 837 10 644 0 +853 172 314 -15 555 565 10 206 0 +854 233 230 20 26 36 10 0 172 +855 79 80 19 1392 1402 10 0 521 +856 243 402 13 415 425 10 0 474 +857 117 110 -25 989 999 10 313 0 +858 66 314 26 194 204 10 0 166 +859 58 391 -20 892 902 10 754 0 +860 142 360 -10 1542 1552 10 3 0 +861 492 326 -19 1214 1224 10 125 0 +862 381 328 12 727 737 10 0 833 +863 62 236 29 568 578 10 0 426 +864 344 70 24 1156 1166 10 0 87 +865 151 81 -32 1568 1578 10 938 0 +866 240 240 -29 1710 1720 10 636 0 +867 46 163 -4 936 946 10 765 0 +868 455 168 21 877 887 10 0 975 +869 428 202 -18 914 924 10 911 0 +870 432 199 -14 649 659 10 928 0 +871 391 112 -16 1010 1020 10 181 0 +872 451 305 13 208 218 10 0 304 +873 214 311 14 70 80 10 0 412 +874 465 367 -9 1037 1047 10 954 0 +875 164 473 26 306 316 10 0 946 +876 364 173 -25 190 200 10 695 0 +877 274 261 -36 1717 1727 10 74 0 +878 133 455 25 818 828 10 0 909 +879 351 481 10 332 342 10 0 124 +880 115 395 -6 825 835 10 208 0 +881 297 304 4 71 81 10 0 789 +882 7 194 29 961 971 0 0 1043 +883 409 255 -17 1532 1542 10 797 0 +884 87 213 -12 636 646 10 138 0 +885 60 246 25 190 200 10 0 452 +886 3 471 13 721 731 10 0 32 +887 418 251 -29 1207 1217 10 67 0 +888 153 362 7 1171 1181 0 0 1030 +889 323 77 -18 1415 1425 10 465 0 +890 143 158 12 148 158 10 0 963 +891 351 148 30 471 481 10 0 921 +892 426 38 23 619 629 10 0 311 +893 226 316 21 70 80 10 0 671 +894 347 192 -13 1498 1508 10 557 0 +895 102 6 -15 1468 1478 10 316 0 +896 41 120 22 706 716 10 0 179 +897 247 443 17 340 350 10 0 757 +898 218 271 16 1584 1594 10 0 478 +899 376 385 12 184 194 10 0 649 +900 241 402 11 1035 1045 10 0 183 +901 213 399 18 244 254 10 0 460 +902 32 191 -23 596 606 10 409 0 +903 441 374 10 233 243 10 0 355 +904 376 113 -13 524 534 10 931 0 +905 215 434 9 203 213 10 0 484 +906 499 316 18 632 642 10 0 343 +907 318 497 21 864 874 10 0 85 +908 256 441 34 191 201 10 0 913 +909 174 397 -25 1255 1265 10 878 0 +910 468 360 16 284 294 10 0 764 +911 287 256 18 37 47 10 0 869 +912 448 397 33 876 886 10 0 174 +913 352 487 -34 912 922 10 908 0 +914 253 118 19 557 567 10 0 464 +915 159 299 12 1026 1036 10 0 687 +916 351 233 -19 1433 1443 10 89 0 +917 268 113 -25 690 700 10 396 0 +918 164 332 -27 1290 1300 10 958 0 +919 88 484 -13 1501 1511 10 274 0 +920 360 488 19 326 336 10 0 490 +921 343 166 -30 886 896 10 891 0 +922 497 266 -19 758 768 10 803 0 +923 138 406 -7 1226 1236 10 977 0 +924 420 224 10 439 449 10 0 991 +925 231 410 -14 1246 1256 10 99 0 +926 199 438 3 1370 1380 10 0 981 +927 219 215 32 46 56 10 0 572 +928 365 274 14 117 127 10 0 870 +929 481 454 14 330 340 10 0 475 +930 187 61 19 555 565 10 0 33 +931 372 97 13 224 234 10 0 904 +932 187 263 35 64 74 10 0 654 +933 371 427 23 968 978 10 0 682 +934 74 215 -17 239 249 10 746 0 +935 375 145 12 939 949 10 0 955 +936 365 28 9 278 288 10 0 378 +937 118 314 -21 348 358 10 651 0 +938 60 29 32 1373 1383 10 0 865 +939 478 300 12 900 910 10 0 72 +940 33 152 17 1330 1340 10 0 323 +941 347 184 -16 1089 1099 10 116 0 +942 94 40 24 1078 1088 10 0 383 +943 290 328 7 154 164 10 0 75 +944 96 346 26 195 205 10 0 841 +945 97 288 -21 1294 1304 10 830 0 +946 176 470 -26 557 567 10 875 0 +947 206 97 33 458 468 10 0 400 +948 210 133 15 699 709 10 0 256 +949 489 457 -17 326 336 10 128 0 +950 418 399 20 448 458 10 0 420 +951 392 491 10 1143 1153 10 0 480 +952 437 19 -16 1024 1034 10 232 0 +953 495 83 32 451 461 10 0 598 +954 468 352 9 778 788 10 0 874 +955 390 120 -12 1014 1024 10 935 0 +956 80 357 -16 540 550 10 608 0 +957 394 310 -12 1109 1119 10 771 0 +958 61 441 27 554 564 10 0 918 +959 52 303 -13 451 461 10 335 0 +960 391 202 14 148 158 10 0 538 +961 36 451 -17 899 909 10 136 0 +962 276 84 -36 691 701 10 482 0 +963 130 140 -12 204 214 10 890 0 +964 16 287 12 281 291 10 0 9 +965 292 136 28 791 801 10 0 101 +966 53 204 8 1065 1075 10 0 609 +967 359 287 24 115 125 10 0 257 +968 309 29 -14 1304 1314 10 546 0 +969 473 491 -12 423 433 10 216 0 +970 273 255 18 1502 1512 0 0 1037 +971 263 153 12 422 432 10 0 444 +972 328 458 -3 778 788 10 457 0 +973 401 164 13 631 641 10 0 589 +974 480 119 -22 638 648 10 46 0 +975 488 96 -21 1076 1086 10 868 0 +976 149 98 -15 1175 1185 10 246 0 +977 49 437 7 437 447 10 0 923 +978 440 77 -31 923 933 10 802 0 +979 43 135 31 236 246 10 0 158 +980 188 151 -44 1307 1317 10 500 0 +981 175 422 -3 1456 1466 10 926 0 +982 48 437 4 814 824 10 0 569 +983 334 403 26 174 184 10 0 783 +984 372 115 13 374 384 10 0 267 +985 111 192 -9 1209 1219 10 647 0 +986 357 290 24 114 124 10 0 555 +987 331 134 11 1134 1144 10 0 105 +988 495 199 25 347 357 10 0 560 +989 441 60 -5 1469 1479 10 36 0 +990 51 89 19 1218 1228 10 0 832 +991 452 206 -10 502 512 10 924 0 +992 195 386 13 146 156 10 0 353 +993 172 24 -11 1462 1472 10 472 0 +994 408 318 15 653 663 0 0 1036 +995 410 399 25 244 254 10 0 287 +996 413 345 -6 1228 1238 10 5 0 +997 215 129 -6 1129 1139 10 846 0 +998 380 350 -31 876 886 10 825 0 +999 19 38 15 857 867 10 0 701 +1000 166 247 1 84 94 10 0 758 +1001 291 213 -23 1268 1278 10 320 0 +1002 452 484 -26 1288 1298 10 750 0 +1003 214 245 -8 36 46 10 726 0 +1004 250 328 -24 259 269 10 35 0 +1005 488 173 -25 1220 1230 10 168 0 +1006 323 29 -7 1147 1157 10 653 0 +1007 292 32 -14 239 249 10 273 0 +1008 390 249 -21 592 602 10 70 0 +1009 392 87 -23 1193 1203 10 348 0 +1010 268 351 -7 1685 1695 10 445 0 +1011 398 49 -21 802 812 10 149 0 +1012 48 366 -29 753 763 10 518 0 +1013 466 149 -16 1196 1206 10 8 0 +1014 229 322 -11 1670 1680 10 501 0 +1015 23 235 -43 1033 1043 10 707 0 +1016 400 71 -17 1382 1392 10 709 0 +1017 273 149 -14 1513 1523 10 277 0 +1018 497 18 -10 1140 1150 10 414 0 +1019 105 474 -27 481 491 10 211 0 +1020 47 208 -30 236 246 10 345 0 +1021 423 221 -9 268 278 10 54 0 +1022 251 238 -27 12 22 10 110 0 +1023 426 231 -24 1038 1048 10 119 0 +1024 167 291 -27 1644 1654 10 264 0 +1025 87 3 -13 1443 1453 10 385 0 +1026 253 74 -20 1360 1370 10 805 0 +1027 163 472 -9 663 673 10 293 0 +1028 332 459 -35 379 389 10 631 0 +1029 433 319 -11 1386 1396 10 570 0 +1030 153 362 -7 1171 1181 10 888 0 +1031 202 28 -22 944 954 10 815 0 +1032 489 338 -17 1407 1417 10 370 0 +1033 92 18 -8 1134 1144 10 200 0 +1034 244 277 -18 1311 1321 10 527 0 +1035 397 57 -17 1486 1496 10 270 0 +1036 408 318 -15 653 663 10 994 0 +1037 273 255 -18 1502 1512 10 970 0 +1038 211 248 -26 39 49 10 213 0 +1039 222 331 -10 550 560 10 630 0 +1040 146 188 -6 1245 1255 10 63 0 +1041 371 163 -21 838 848 10 47 0 +1042 241 180 -13 1705 1715 10 106 0 +1043 7 194 -29 961 971 10 882 0 +1044 371 423 -10 211 221 10 276 0 +1045 34 169 -11 494 504 10 583 0 +1046 437 90 -12 595 605 10 720 0 +1047 122 422 -3 1467 1477 10 349 0 +1048 330 138 -18 1120 1130 10 658 0 +1049 94 344 -26 692 702 10 363 0 +1050 470 405 -17 936 946 10 806 0 +1051 448 495 -40 394 404 10 294 0 +1052 153 244 -5 118 128 10 289 0 +1053 384 149 -18 1207 1217 10 163 0 +1054 35 263 -27 280 290 10 401 0 diff --git a/jsprit-instances/instances/lilim/1000/LR11010.txt b/jsprit-instances/instances/lilim/1000/LR11010.txt new file mode 100644 index 00000000..c18ef2ae --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR11010.txt @@ -0,0 +1,1040 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 -3 1101 1215 10 240 0 +2 67 190 -32 1104 1272 10 151 0 +3 80 400 -32 1425 1497 10 418 0 +4 439 237 -29 881 1026 10 67 0 +5 377 385 -12 804 958 10 899 0 +6 449 428 -20 1193 1331 10 191 0 +7 342 481 -15 1407 1503 10 175 0 +8 466 149 -19 1157 1246 10 538 0 +9 83 290 -26 573 673 10 495 0 +10 251 63 14 923 1081 10 0 362 +11 328 491 -25 609 777 10 550 0 +12 260 472 -3 988 1113 10 457 0 +13 290 145 5 1263 1331 10 0 101 +14 266 221 9 33 123 10 0 541 +15 164 320 -36 1070 1150 10 690 0 +16 52 412 -16 1371 1471 10 859 0 +17 485 104 21 759 859 10 0 975 +18 144 331 -26 882 1011 10 220 0 +19 387 394 -25 1044 1182 10 649 0 +20 472 57 -10 1253 1366 10 414 0 +21 343 276 15 96 204 10 0 967 +22 104 349 20 943 1106 0 0 1034 +23 28 467 34 1301 1415 10 0 177 +24 91 427 -27 840 956 10 958 0 +25 429 476 23 525 651 10 0 480 +26 210 276 5 47 149 10 0 769 +27 58 39 -28 1113 1242 10 31 0 +28 273 300 30 55 183 10 0 459 +29 41 232 -4 209 338 10 765 0 +30 25 53 -11 974 1096 10 402 0 +31 52 18 28 835 909 10 0 27 +32 27 444 -18 1032 1158 10 190 0 +33 178 72 23 698 846 10 0 214 +34 406 460 2 698 771 10 0 682 +35 250 328 24 199 328 10 0 856 +36 492 34 -9 798 853 10 193 0 +37 412 100 1 478 579 10 0 241 +38 233 87 18 198 338 10 0 724 +39 60 5 18 999 1118 10 0 383 +40 406 408 -28 1411 1532 10 334 0 +41 245 42 24 523 602 10 0 81 +42 166 345 -11 1092 1197 10 479 0 +43 440 294 -7 892 1059 10 725 0 +44 370 382 -23 859 938 10 578 0 +45 32 319 21 345 486 10 0 739 +46 480 136 -14 256 404 10 818 0 +47 371 163 21 781 905 10 0 56 +48 0 188 -11 860 1035 10 583 0 +49 438 5 18 490 638 10 0 131 +50 132 477 25 264 421 10 0 211 +51 203 211 20 1239 1404 10 0 625 +52 2 264 40 586 754 10 0 92 +53 231 167 15 85 245 10 0 415 +54 423 221 9 200 347 10 0 94 +55 459 53 20 1082 1193 10 0 311 +56 386 154 -21 1053 1179 10 47 0 +57 130 494 -9 692 855 10 308 0 +58 31 175 24 231 314 0 0 1013 +59 69 423 32 754 881 10 0 768 +60 352 241 5 728 886 0 0 1035 +61 261 201 -19 1482 1575 10 318 0 +62 59 276 -12 844 970 10 426 0 +63 146 188 -28 1189 1311 10 829 0 +64 451 62 -15 275 403 10 230 0 +65 299 285 -24 1208 1330 10 635 0 +66 142 372 18 162 316 10 0 898 +67 440 201 29 840 975 10 0 4 +68 219 210 14 50 156 10 0 800 +69 64 198 10 1044 1162 0 0 1027 +70 390 249 21 529 665 10 0 887 +71 9 101 16 605 758 10 0 556 +72 424 288 -24 1025 1119 10 343 0 +73 77 372 19 211 311 10 0 681 +74 298 264 36 50 163 10 0 694 +75 405 454 11 1281 1354 0 0 1006 +76 407 35 11 1243 1363 10 0 989 +77 225 369 38 121 248 10 0 663 +78 347 459 -21 433 556 10 835 0 +79 117 178 -23 1079 1186 10 807 0 +80 132 479 -9 257 354 10 299 0 +81 201 66 -24 1108 1256 10 41 0 +82 245 176 -19 1174 1325 10 914 0 +83 470 138 -12 1365 1443 10 195 0 +84 115 296 -22 1472 1615 10 945 0 +85 348 476 -35 1136 1288 10 631 0 +86 43 210 20 210 305 10 0 452 +87 327 139 13 1211 1333 10 0 767 +88 49 353 -12 1421 1501 10 205 0 +89 356 256 19 106 198 10 0 322 +90 335 99 -14 1138 1329 10 464 0 +91 363 34 19 243 372 10 0 270 +92 33 278 -40 1456 1549 10 52 0 +93 366 288 29 634 764 10 0 204 +94 452 172 -9 551 696 10 54 0 +95 86 189 21 195 288 10 0 985 +96 262 369 15 119 286 10 0 522 +97 218 403 15 1294 1374 10 0 834 +98 218 12 3 492 625 10 0 784 +99 228 399 14 547 656 10 0 527 +100 492 188 33 669 792 10 0 512 +101 267 174 -5 1570 1697 10 13 0 +102 274 441 -24 639 781 10 548 0 +103 210 113 -25 640 770 10 435 0 +104 370 262 -24 1078 1151 10 986 0 +105 303 186 -35 1302 1436 10 646 0 +106 241 180 -23 1616 1803 10 632 0 +107 100 85 14 333 399 10 0 225 +108 350 199 -32 1142 1291 10 613 0 +109 500 228 -37 728 866 10 679 0 +110 251 238 27 12 113 10 0 706 +111 114 102 21 454 591 10 0 400 +112 345 146 -18 1387 1521 10 658 0 +113 21 146 21 441 562 10 0 242 +114 330 147 -30 832 895 10 891 0 +115 476 61 -24 395 532 10 187 0 +116 386 245 16 434 553 10 0 883 +117 201 278 13 56 211 10 0 651 +118 421 499 -26 1301 1419 10 727 0 +119 426 231 24 970 1117 10 0 506 +120 105 137 -18 445 489 10 140 0 +121 64 437 -7 900 966 10 977 0 +122 181 260 23 69 210 10 0 753 +123 413 391 8 215 351 10 0 814 +124 370 493 22 533 640 10 0 749 +125 447 267 -14 911 1078 10 438 0 +126 232 101 24 290 432 10 0 785 +127 371 332 -36 484 605 10 223 0 +128 447 383 -10 237 359 10 903 0 +129 325 147 -15 1158 1245 10 344 0 +130 489 437 29 673 770 10 0 217 +131 415 95 -18 1157 1226 10 49 0 +132 331 356 -8 646 807 10 852 0 +133 374 346 27 378 494 10 0 672 +134 108 37 23 486 642 0 0 1009 +135 5 224 -19 1027 1112 10 341 0 +136 93 413 17 226 334 10 0 688 +137 210 29 -20 1013 1118 10 429 0 +138 136 265 12 114 220 10 0 748 +139 409 155 19 185 365 0 0 1036 +140 111 178 18 156 298 10 0 120 +141 291 251 20 41 173 10 0 831 +142 322 290 23 1440 1547 10 0 970 +143 57 183 -22 1049 1182 10 197 0 +144 181 185 -13 1580 1678 10 290 0 +145 7 382 -12 721 849 10 964 0 +146 425 448 9 763 856 10 0 421 +147 174 41 -12 1263 1374 10 403 0 +148 161 276 8 92 211 10 0 543 +149 398 49 21 743 870 10 0 709 +150 210 379 -14 653 794 10 412 0 +151 60 231 32 997 1085 10 0 2 +152 453 360 13 230 397 10 0 557 +153 367 97 -13 950 1056 10 668 0 +154 488 3 -20 352 480 10 684 0 +155 44 115 -31 246 407 10 979 0 +156 48 293 22 234 347 10 0 737 +157 64 135 -22 820 947 10 595 0 +158 65 62 -10 936 1047 10 617 0 +159 404 207 6 862 989 10 0 639 +160 68 303 -7 189 323 10 544 0 +161 263 418 25 242 345 10 0 272 +162 147 30 -23 1055 1192 10 795 0 +163 384 149 -12 1145 1279 10 935 0 +164 340 416 -26 300 372 10 983 0 +165 271 128 12 284 437 10 0 458 +166 89 358 -13 1183 1341 10 698 0 +167 20 480 25 505 666 10 0 886 +168 488 173 25 1169 1282 10 0 602 +169 439 156 2 470 611 10 0 244 +170 389 156 -13 711 750 10 973 0 +171 111 392 -11 1140 1229 10 880 0 +172 267 162 -25 1399 1529 10 572 0 +173 248 176 -1 1344 1488 10 847 0 +174 413 476 -7 1135 1254 10 431 0 +175 352 481 15 1213 1387 10 0 7 +176 264 135 -19 848 940 10 256 0 +177 29 462 -34 1279 1370 10 23 0 +178 148 462 10 658 826 10 0 474 +179 44 140 -13 829 938 10 307 0 +180 414 378 23 467 552 10 0 381 +181 392 95 -13 715 847 10 984 0 +182 216 341 -25 594 744 10 581 0 +183 211 411 15 1116 1208 10 0 253 +184 317 45 -24 589 757 10 339 0 +185 178 150 33 589 704 10 0 948 +186 428 302 -33 989 1072 10 198 0 +187 450 45 24 456 581 10 0 115 +188 453 318 30 333 444 10 0 570 +189 186 135 24 671 795 10 0 842 +190 11 403 18 301 415 10 0 32 +191 433 447 20 779 840 10 0 6 +192 272 420 -34 1367 1435 10 908 0 +193 429 59 9 423 525 10 0 36 +194 200 27 22 458 621 10 0 993 +195 498 171 12 1196 1347 10 0 83 +196 487 320 -28 811 935 10 219 0 +197 45 166 22 960 1096 10 0 143 +198 490 276 33 241 390 10 0 186 +199 126 391 19 233 343 10 0 923 +200 92 18 8 1072 1206 10 0 895 +201 293 228 -21 48 201 10 487 0 +202 343 205 26 716 848 10 0 267 +203 182 480 -15 302 458 10 395 0 +204 385 285 -29 822 944 10 93 0 +205 44 344 12 1033 1155 10 0 88 +206 170 347 15 389 513 10 0 664 +207 457 492 7 450 596 10 0 266 +208 124 448 6 308 459 10 0 263 +209 398 210 31 153 293 10 0 756 +210 75 118 21 366 483 10 0 528 +211 105 474 -25 434 538 10 50 0 +212 134 211 -35 122 255 10 377 0 +213 211 248 26 39 154 10 0 302 +214 212 186 -23 1687 1787 10 33 0 +215 492 335 -13 800 886 10 872 0 +216 497 483 -31 339 450 10 825 0 +217 440 436 -29 826 988 10 130 0 +218 311 203 15 672 804 10 0 621 +219 491 369 28 706 784 10 0 196 +220 67 378 26 409 561 10 0 18 +221 383 17 -9 913 997 10 936 0 +222 7 82 25 368 486 10 0 855 +223 342 319 36 115 241 10 0 127 +224 78 406 15 903 1048 10 0 481 +225 103 123 -14 435 574 10 107 0 +226 241 38 16 468 625 10 0 514 +227 224 3 -27 640 771 10 691 0 +228 436 467 12 700 802 10 0 490 +229 438 488 18 303 402 10 0 294 +230 351 60 15 215 354 10 0 64 +231 13 214 -29 1292 1446 10 882 0 +232 429 67 16 676 818 10 0 711 +233 498 456 -13 1352 1489 10 949 0 +234 135 400 20 220 407 10 0 461 +235 215 293 13 55 147 10 0 423 +236 354 416 10 618 771 10 0 615 +237 294 421 -23 1515 1666 10 933 0 +238 208 445 22 1265 1429 10 0 926 +239 230 320 8 1141 1274 0 0 1030 +240 157 38 3 1016 1109 10 0 1 +241 441 100 -1 833 944 10 37 0 +242 61 170 -21 959 1082 10 113 0 +243 79 467 22 294 438 10 0 408 +244 365 190 -2 1451 1534 10 169 0 +245 282 1 -27 1012 1103 10 675 0 +246 124 111 15 737 871 10 0 323 +247 247 219 17 31 155 10 0 599 +248 28 180 34 342 459 10 0 382 +249 167 488 17 252 358 10 0 327 +250 442 289 25 195 313 10 0 714 +251 136 430 14 663 788 10 0 333 +252 38 15 -15 1041 1172 10 999 0 +253 246 314 -15 1394 1527 10 183 0 +254 176 200 -7 531 635 10 667 0 +255 337 232 -14 1526 1645 10 960 0 +256 257 133 19 802 952 10 0 176 +257 295 247 -31 1258 1378 10 802 0 +258 39 162 -6 518 642 10 296 0 +259 79 257 26 916 1021 10 0 687 +260 236 126 23 124 201 10 0 917 +261 259 498 -7 1035 1144 10 352 0 +262 180 162 9 112 302 0 0 1038 +263 53 466 -6 294 407 10 208 0 +264 167 291 27 1601 1697 0 0 1020 +265 89 185 -16 576 653 10 394 0 +266 487 446 -7 1309 1401 10 207 0 +267 308 199 -26 1455 1592 10 202 0 +268 481 84 17 447 595 10 0 974 +269 495 227 20 308 409 10 0 734 +270 397 57 -19 1439 1543 10 91 0 +271 372 39 10 645 832 10 0 465 +272 278 450 -25 1335 1445 10 161 0 +273 292 32 14 222 326 10 0 368 +274 90 496 13 1356 1465 10 0 369 +275 68 53 16 685 823 10 0 942 +276 371 423 10 211 349 10 0 437 +277 273 149 -28 1461 1575 10 965 0 +278 297 283 -17 1324 1404 10 618 0 +279 120 37 -6 700 881 10 846 0 +280 371 488 10 546 649 10 0 951 +281 206 174 14 779 850 10 0 634 +282 174 347 -21 958 1101 10 775 0 +283 330 281 -22 1300 1390 10 540 0 +284 67 451 5 1185 1276 10 0 693 +285 27 464 -31 1258 1354 10 566 0 +286 361 178 5 931 1044 10 0 941 +287 463 406 -17 771 973 10 806 0 +288 456 157 -14 1412 1528 10 605 0 +289 153 244 5 97 254 10 0 885 +290 153 192 13 821 940 10 0 144 +291 352 63 -27 1132 1254 10 576 0 +292 371 71 21 267 336 10 0 720 +293 163 472 -14 626 710 10 946 0 +294 448 495 -18 327 471 10 229 0 +295 282 10 -2 1200 1354 10 329 0 +296 66 163 6 351 469 10 0 258 +297 314 205 -18 1464 1619 10 894 0 +298 83 169 -22 722 862 10 788 0 +299 221 291 9 50 172 10 0 80 +300 374 116 9 561 643 10 0 494 +301 418 269 3 1170 1270 10 0 810 +302 178 302 -26 818 986 10 213 0 +303 250 57 26 735 791 10 0 805 +304 475 352 33 263 386 10 0 954 +305 1 252 5 249 345 10 0 424 +306 286 356 30 111 231 10 0 900 +307 65 82 13 680 829 10 0 179 +308 154 392 9 171 248 10 0 57 +309 196 56 -5 586 663 10 447 0 +310 366 390 -29 1286 1380 10 523 0 +311 436 25 -20 1247 1348 10 55 0 +312 67 352 -26 315 462 10 944 0 +313 173 182 25 102 209 0 0 1016 +314 390 34 -40 1038 1112 10 660 0 +315 18 225 -8 633 780 10 726 0 +316 57 43 15 966 1111 10 0 441 +317 388 44 -30 1089 1203 10 620 0 +318 269 112 19 1189 1367 10 0 61 +319 374 260 -13 1668 1791 10 827 0 +320 291 213 -10 1202 1343 10 589 0 +321 178 420 -19 1034 1139 10 841 0 +322 389 255 -19 741 860 10 89 0 +323 134 194 -15 1607 1727 10 246 0 +324 93 490 2 369 420 10 0 919 +325 64 294 12 1054 1179 0 0 1024 +326 493 111 26 494 619 10 0 359 +327 150 484 -17 567 713 10 249 0 +328 235 316 2 598 744 10 0 877 +329 239 15 2 549 689 10 0 295 +330 193 138 30 632 720 10 0 499 +331 40 278 -17 1065 1174 10 350 0 +332 307 52 -13 885 986 10 542 0 +333 161 416 -14 971 1081 10 251 0 +334 381 457 28 439 532 10 0 40 +335 55 318 13 303 350 10 0 959 +336 80 279 -15 1134 1212 10 820 0 +337 48 162 15 220 335 10 0 588 +338 91 27 -10 1151 1242 10 503 0 +339 288 70 24 183 345 10 0 184 +340 177 404 -18 1189 1366 10 468 0 +341 10 237 19 569 693 10 0 135 +342 493 493 -3 815 928 10 511 0 +343 440 292 24 872 1038 10 0 72 +344 349 76 15 993 1098 10 0 129 +345 47 208 30 207 372 10 0 637 +346 283 454 -6 1216 1345 10 776 0 +347 486 324 15 743 826 10 0 861 +348 392 87 23 1120 1275 10 0 823 +349 122 422 3 1404 1539 0 0 1005 +350 37 281 17 451 566 10 0 331 +351 413 127 28 791 900 10 0 955 +352 222 499 7 785 935 10 0 261 +353 211 446 15 1068 1208 10 0 851 +354 30 7 -15 1161 1247 10 701 0 +355 398 341 33 889 1019 10 0 833 +356 26 67 -15 1277 1387 10 552 0 +357 461 186 -26 1481 1573 10 422 0 +358 313 391 5 154 238 10 0 526 +359 471 94 -26 954 1074 10 326 0 +360 341 72 -12 781 858 10 692 0 +361 130 186 16 136 199 10 0 699 +362 257 57 -14 1186 1295 10 10 0 +363 94 344 -22 640 754 10 489 0 +364 6 53 8 547 657 10 0 385 +365 146 376 8 166 332 10 0 476 +366 244 13 24 965 1091 10 0 747 +367 29 336 -27 297 397 10 401 0 +368 306 42 -14 428 556 10 273 0 +369 177 486 -13 1551 1668 10 274 0 +370 489 338 -13 1355 1470 10 536 0 +371 179 318 2 1093 1179 10 0 455 +372 344 203 14 113 251 10 0 686 +373 149 341 6 365 472 10 0 549 +374 307 412 -7 339 499 10 440 0 +375 68 450 -19 604 692 10 504 0 +376 420 80 -11 1017 1206 10 587 0 +377 144 220 35 110 221 10 0 212 +378 497 54 -11 915 1071 10 793 0 +379 80 458 30 347 424 10 0 909 +380 84 377 -38 844 1038 10 654 0 +381 332 382 -23 936 1115 10 180 0 +382 6 196 -34 1160 1277 10 248 0 +383 104 28 -18 1450 1526 10 39 0 +384 224 320 -23 1223 1375 10 811 0 +385 87 3 -8 1392 1504 10 364 0 +386 149 214 7 421 573 10 0 758 +387 98 29 -16 1003 1121 10 813 0 +388 135 30 12 385 593 10 0 577 +389 287 397 -34 512 646 10 656 0 +390 107 374 8 861 997 10 0 915 +391 355 485 -27 1450 1539 10 913 0 +392 51 286 -16 1401 1546 10 733 0 +393 49 118 3 1027 1145 0 0 1004 +394 159 226 16 94 195 10 0 265 +395 185 431 15 356 448 10 0 203 +396 262 92 25 566 725 10 0 482 +397 475 198 20 805 895 10 0 399 +398 142 30 -18 1165 1356 10 483 0 +399 481 207 -20 793 950 10 397 0 +400 174 122 -21 540 676 10 111 0 +401 35 263 27 235 336 10 0 367 +402 24 71 11 298 424 10 0 30 +403 173 65 12 445 482 10 0 147 +404 91 326 -26 902 1055 10 937 0 +405 470 417 11 696 808 10 0 420 +406 397 153 -27 832 962 10 454 0 +407 295 283 -26 832 985 10 607 0 +408 174 376 -22 1332 1537 10 243 0 +409 38 190 23 245 354 10 0 902 +410 16 68 11 296 430 10 0 786 +411 179 286 8 290 422 0 0 1026 +412 244 422 14 492 614 10 0 150 +413 250 441 5 694 848 10 0 451 +414 497 18 10 1077 1213 10 0 20 +415 195 111 -15 973 1053 10 53 0 +416 26 221 -31 947 1075 10 657 0 +417 442 5 -5 311 406 10 652 0 +418 44 496 32 364 470 10 0 3 +419 448 404 15 549 678 10 0 579 +420 471 427 -11 748 915 10 405 0 +421 460 424 -9 1393 1546 10 146 0 +422 461 195 26 1336 1485 10 0 357 +423 146 313 -13 1151 1269 10 235 0 +424 19 273 -5 959 1105 10 305 0 +425 245 461 -19 628 701 10 757 0 +426 69 266 12 738 809 10 0 62 +427 191 84 13 815 950 10 0 980 +428 68 160 21 1090 1212 10 0 609 +429 212 47 20 761 871 10 0 137 +430 80 337 -21 1071 1198 10 830 0 +431 412 478 7 905 1045 10 0 174 +432 225 488 -15 590 712 10 700 0 +433 105 140 27 182 305 10 0 857 +434 389 43 -13 370 451 10 931 0 +435 177 156 25 130 234 10 0 103 +436 179 497 1 1381 1471 10 0 619 +437 377 432 -10 787 906 10 276 0 +438 497 296 14 571 685 10 0 125 +439 152 476 -26 486 590 10 875 0 +440 277 428 7 449 562 10 0 374 +441 64 5 -15 1098 1190 10 316 0 +442 44 311 27 378 466 0 0 1019 +443 165 59 -17 909 1007 10 627 0 +444 261 138 -12 574 692 10 971 0 +445 268 351 7 1664 1717 0 0 1018 +446 48 150 15 618 723 0 0 1014 +447 215 79 5 196 282 10 0 309 +448 109 56 27 239 341 10 0 491 +449 171 188 -28 563 708 10 703 0 +450 284 457 -20 1447 1581 10 662 0 +451 274 442 -5 992 1171 10 413 0 +452 33 286 -20 1513 1609 10 86 0 +453 112 433 29 229 358 10 0 520 +454 423 170 27 463 593 10 0 406 +455 213 283 -2 1421 1550 10 371 0 +456 240 34 -14 1517 1632 10 674 0 +457 283 438 3 215 278 10 0 12 +458 324 99 -12 316 390 10 165 0 +459 259 301 -30 52 175 10 28 0 +460 189 402 10 506 596 10 0 484 +461 215 282 -20 1391 1520 10 234 0 +462 166 440 -21 207 354 10 893 0 +463 374 232 33 125 240 10 0 676 +464 339 113 14 707 845 10 0 90 +465 335 46 -10 1276 1437 10 271 0 +466 313 493 -21 1141 1276 10 907 0 +467 432 66 -15 1016 1157 10 952 0 +468 76 462 18 925 1017 10 0 340 +469 397 477 -10 1169 1292 10 879 0 +470 196 489 -33 986 1105 10 704 0 +471 354 156 20 783 911 10 0 505 +472 171 24 -26 1324 1473 10 702 0 +473 187 73 18 219 396 10 0 930 +474 243 408 -10 1387 1510 10 178 0 +475 421 387 15 752 880 10 0 722 +476 141 426 -8 483 609 10 365 0 +477 415 118 19 211 289 10 0 598 +478 240 255 -7 1580 1672 10 539 0 +479 162 388 11 1069 1213 10 0 42 +480 413 493 -23 1185 1281 10 25 0 +481 69 414 -15 1237 1320 10 224 0 +482 273 70 -25 563 706 10 396 0 +483 142 14 18 764 936 10 0 398 +484 185 434 -10 537 640 10 460 0 +485 360 294 -33 1354 1512 10 912 0 +486 265 240 9 18 114 10 0 743 +487 280 245 21 30 155 10 0 201 +488 87 51 35 493 565 10 0 614 +489 195 273 22 59 127 10 0 363 +490 422 498 -12 646 768 10 228 0 +491 95 64 -27 733 829 10 448 0 +492 63 155 7 915 1044 10 0 529 +493 24 259 19 306 465 10 0 836 +494 376 92 -9 966 1046 10 300 0 +495 83 300 26 454 575 10 0 9 +496 72 477 46 288 405 10 0 582 +497 380 194 -13 658 799 10 524 0 +498 72 227 25 534 624 10 0 638 +499 238 123 -30 737 856 10 330 0 +500 188 119 -32 921 1059 10 781 0 +501 229 322 11 1628 1723 0 0 1031 +502 150 68 -12 395 481 10 890 0 +503 67 24 10 978 1088 10 0 338 +504 63 420 19 487 583 10 0 375 +505 339 144 -20 1058 1169 10 471 0 +506 454 201 -24 1286 1353 10 119 0 +507 158 24 -28 569 684 10 680 0 +508 365 119 30 351 442 10 0 778 +509 440 284 -25 805 928 10 922 0 +510 417 212 -18 885 965 10 745 0 +511 404 439 3 243 381 10 0 342 +512 472 248 -33 776 923 10 100 0 +513 235 108 -17 1040 1150 10 821 0 +514 174 67 -16 1233 1317 10 226 0 +515 132 151 22 154 332 10 0 963 +516 217 207 26 1328 1466 10 0 796 +517 162 306 22 104 222 10 0 956 +518 48 366 29 675 841 10 0 777 +519 209 68 27 1533 1633 0 0 1017 +520 94 497 -29 734 860 10 453 0 +521 110 122 -24 1464 1584 10 666 0 +522 274 403 -15 828 976 10 96 0 +523 421 386 29 764 915 10 0 310 +524 399 175 13 715 808 10 0 497 +525 56 268 -29 1032 1125 10 585 0 +526 322 406 -5 803 886 10 358 0 +527 244 277 -14 1252 1380 10 99 0 +528 105 181 -21 1473 1620 10 210 0 +529 30 97 -7 1168 1283 10 492 0 +530 359 246 -14 1338 1538 10 928 0 +531 498 457 15 871 985 10 0 730 +532 190 267 -31 1734 1804 10 586 0 +533 334 481 32 258 432 10 0 920 +534 18 24 32 588 698 10 0 604 +535 482 104 -32 787 857 10 953 0 +536 460 328 13 224 353 10 0 370 +537 320 211 -35 967 1048 10 787 0 +538 494 165 19 553 685 10 0 8 +539 167 445 7 1356 1499 10 0 478 +540 340 291 22 429 542 10 0 283 +541 272 234 -9 1581 1630 10 14 0 +542 325 56 13 771 851 10 0 332 +543 71 304 -8 633 776 10 148 0 +544 87 311 7 174 277 10 0 160 +545 207 487 4 597 812 10 0 850 +546 332 5 -24 993 1103 10 774 0 +547 161 275 -9 1311 1413 10 647 0 +548 268 458 24 522 554 10 0 102 +549 175 352 -6 1624 1736 10 373 0 +550 398 476 25 391 475 10 0 11 +551 51 360 -1 1101 1219 10 1000 0 +552 21 70 15 744 829 10 0 356 +553 80 251 -17 274 363 10 746 0 +554 457 280 -18 946 1084 10 906 0 +555 423 315 12 184 318 10 0 764 +556 66 88 -16 756 933 10 71 0 +557 479 387 -13 408 417 10 152 0 +558 436 123 40 225 312 0 0 1033 +559 286 244 -25 1229 1369 10 695 0 +560 449 190 -7 1120 1190 10 870 0 +561 456 113 17 1200 1284 10 0 568 +562 480 152 -14 978 1095 10 735 0 +563 100 266 -13 421 548 10 629 0 +564 343 34 7 686 793 10 0 889 +565 374 306 4 931 1087 10 0 612 +566 13 465 31 745 833 10 0 285 +567 230 487 -22 1096 1193 10 779 0 +568 442 153 -17 1113 1294 10 561 0 +569 240 362 23 1342 1516 0 0 1023 +570 433 319 -30 1316 1467 10 188 0 +571 0 422 8 757 915 0 0 1029 +572 297 131 25 1132 1229 10 0 172 +573 71 12 -30 297 437 10 628 0 +574 44 440 -30 752 855 10 677 0 +575 447 184 -31 366 513 10 991 0 +576 341 59 27 743 866 10 0 291 +577 132 32 -12 744 855 10 388 0 +578 411 396 23 862 1009 10 0 44 +579 450 416 -15 504 680 10 419 0 +580 323 34 -6 1276 1384 10 642 0 +581 244 368 25 352 507 10 0 182 +582 90 477 -46 277 462 10 496 0 +583 34 169 11 467 532 10 0 48 +584 351 128 -24 1199 1337 10 661 0 +585 71 282 29 609 705 10 0 525 +586 157 269 31 1520 1663 10 0 532 +587 392 1 11 555 685 10 0 376 +588 39 153 -15 743 882 10 337 0 +589 306 229 10 1269 1402 10 0 320 +590 415 253 21 287 476 10 0 957 +591 92 76 4 1076 1231 10 0 603 +592 437 98 -14 1041 1216 10 978 0 +593 12 367 27 289 393 10 0 759 +594 448 414 -1 1194 1282 10 783 0 +595 128 113 22 333 423 10 0 157 +596 43 360 -23 797 904 10 742 0 +597 102 422 23 226 324 10 0 808 +598 480 131 -19 648 758 10 477 0 +599 210 81 -17 321 508 10 247 0 +600 432 2 20 427 536 10 0 892 +601 396 83 -26 1517 1685 10 752 0 +602 489 159 -25 1371 1514 10 168 0 +603 56 75 -4 1385 1521 10 591 0 +604 66 31 -32 1001 1126 10 534 0 +605 460 117 14 484 586 10 0 288 +606 175 239 23 75 157 10 0 824 +607 217 333 26 346 507 10 0 407 +608 62 375 16 308 420 10 0 754 +609 82 183 -21 1020 1214 10 428 0 +610 248 214 -20 1436 1552 10 729 0 +611 385 239 -18 752 850 10 911 0 +612 371 315 -4 1113 1249 10 565 0 +613 333 163 32 1166 1344 10 0 108 +614 100 66 -35 1339 1490 10 488 0 +615 311 422 -10 933 1072 10 236 0 +616 153 235 10 98 190 10 0 884 +617 168 109 10 170 268 10 0 158 +618 284 319 17 774 890 10 0 278 +619 195 464 -1 1492 1620 10 436 0 +620 382 9 30 274 397 10 0 317 +621 325 210 -15 891 1005 10 218 0 +622 366 334 5 365 486 10 0 998 +623 200 78 -33 972 1043 10 947 0 +624 351 5 12 455 567 10 0 968 +625 197 202 -20 1161 1277 10 51 0 +626 270 337 -12 1652 1826 10 817 0 +627 125 65 17 728 878 10 0 443 +628 120 17 30 266 377 10 0 573 +629 84 255 13 252 341 10 0 563 +630 222 331 -15 488 621 10 790 0 +631 332 459 35 318 449 10 0 85 +632 226 175 23 1656 1761 10 0 106 +633 404 140 -24 1203 1344 10 871 0 +634 223 178 -14 1090 1212 10 281 0 +635 330 308 24 1145 1225 10 0 65 +636 140 108 -22 1022 1151 10 798 0 +637 34 239 -30 216 305 10 345 0 +638 94 192 -25 1038 1152 10 498 0 +639 458 213 -6 1069 1217 10 159 0 +640 13 314 -21 245 338 10 838 0 +641 202 391 -22 579 698 10 744 0 +642 339 41 6 413 528 10 0 580 +643 224 56 -22 1122 1280 10 815 0 +644 345 431 -9 275 445 10 799 0 +645 292 104 26 276 361 10 0 766 +646 318 99 35 1151 1305 10 0 105 +647 46 248 9 784 873 10 0 547 +648 482 184 14 1079 1165 0 0 1011 +649 411 379 25 1138 1279 10 0 19 +650 293 174 31 87 187 10 0 773 +651 169 305 -13 119 235 10 117 0 +652 394 47 5 248 425 10 0 417 +653 323 29 -8 1113 1191 10 689 0 +654 65 343 38 207 309 10 0 380 +655 158 179 -17 116 210 10 673 0 +656 299 353 34 114 211 10 0 389 +657 9 233 31 257 386 10 0 416 +658 330 138 18 1085 1165 10 0 112 +659 48 412 -17 996 1098 10 718 0 +660 385 17 40 735 913 10 0 314 +661 382 110 24 1101 1153 10 0 584 +662 336 493 20 1435 1580 10 0 450 +663 181 441 -38 496 618 10 77 0 +664 162 301 -15 1585 1672 10 206 0 +665 1 101 -14 1207 1337 10 801 0 +666 80 117 24 789 890 10 0 521 +667 210 219 7 50 153 10 0 254 +668 404 59 13 889 967 10 0 153 +669 288 439 16 237 340 10 0 897 +670 149 458 -13 1116 1242 10 992 0 +671 257 391 -10 1585 1711 10 710 0 +672 405 349 -27 463 612 10 133 0 +673 191 215 17 68 158 10 0 655 +674 231 29 14 1214 1269 10 0 456 +675 253 50 27 200 301 10 0 245 +676 441 177 -33 950 1082 10 463 0 +677 5 445 30 313 417 10 0 574 +678 463 253 -25 1017 1107 10 988 0 +679 435 180 37 197 327 10 0 109 +680 198 85 28 200 355 10 0 507 +681 59 388 -19 653 703 10 73 0 +682 373 418 -2 1203 1345 10 34 0 +683 142 80 12 461 553 10 0 740 +684 441 7 20 356 458 10 0 154 +685 33 268 -26 647 774 10 858 0 +686 355 174 -14 673 787 10 372 0 +687 228 260 -26 1562 1680 10 259 0 +688 114 460 -17 1032 1169 10 136 0 +689 337 41 8 960 1074 10 0 653 +690 154 374 36 873 1030 10 0 15 +691 235 13 27 311 436 10 0 227 +692 303 78 12 179 272 10 0 360 +693 103 464 -5 1236 1339 10 284 0 +694 325 311 -36 1289 1386 10 74 0 +695 306 235 25 57 140 10 0 559 +696 382 360 -17 171 323 10 849 0 +697 235 288 18 40 115 10 0 873 +698 0 356 13 1025 1177 10 0 166 +699 178 135 -16 1477 1581 10 361 0 +700 226 423 15 174 308 10 0 432 +701 15 11 15 899 1035 10 0 354 +702 144 35 26 239 385 10 0 472 +703 176 199 28 89 201 10 0 449 +704 247 306 33 56 200 10 0 470 +705 396 417 13 776 875 0 0 1008 +706 289 220 -27 49 147 10 110 0 +707 23 235 -18 982 1095 10 719 0 +708 137 377 23 169 274 10 0 888 +709 400 71 -21 1342 1433 10 149 0 +710 261 359 10 109 272 10 0 671 +711 438 127 -16 901 1011 10 232 0 +712 318 280 21 74 193 10 0 713 +713 333 293 -21 562 703 10 712 0 +714 436 295 -25 482 604 10 250 0 +715 62 94 16 911 1020 10 0 990 +716 495 355 3 1192 1325 10 0 828 +717 13 394 15 321 455 10 0 843 +718 172 292 17 88 158 10 0 659 +719 14 232 18 236 442 10 0 707 +720 437 90 -21 542 657 10 292 0 +721 214 274 -19 1330 1438 10 918 0 +722 420 383 -15 925 1068 10 475 0 +723 120 261 5 758 858 10 0 792 +724 179 75 -18 684 826 10 38 0 +725 484 224 7 242 388 10 0 43 +726 214 245 8 36 177 10 0 315 +727 395 474 26 333 471 10 0 118 +728 368 311 14 885 997 10 0 751 +729 199 203 20 1410 1535 10 0 610 +730 485 428 -15 1443 1567 10 531 0 +731 86 199 23 221 365 10 0 966 +732 447 272 12 349 449 10 0 736 +733 40 304 16 1119 1200 10 0 392 +734 475 267 -20 741 849 10 269 0 +735 482 141 14 979 1073 10 0 562 +736 489 274 -12 496 601 10 732 0 +737 26 342 -22 281 390 10 156 0 +738 139 438 24 218 335 10 0 981 +739 12 358 -21 1160 1318 10 45 0 +740 125 61 -12 584 670 10 683 0 +741 360 284 19 617 746 10 0 916 +742 29 358 23 530 722 10 0 596 +743 285 247 -9 1235 1344 10 486 0 +744 248 386 22 337 449 10 0 641 +745 415 207 18 862 968 10 0 510 +746 130 247 17 120 218 10 0 553 +747 172 66 -24 1260 1376 10 366 0 +748 92 259 -12 361 467 10 138 0 +749 379 486 -22 631 742 10 124 0 +750 452 484 26 1239 1348 0 0 1003 +751 268 288 -14 1204 1360 10 728 0 +752 349 43 26 229 318 10 0 601 +753 225 269 -23 1255 1317 10 122 0 +754 50 383 -16 240 391 10 608 0 +755 110 251 -20 444 582 10 804 0 +756 461 182 -31 589 699 10 209 0 +757 255 487 19 380 446 10 0 425 +758 133 202 -7 420 531 10 386 0 +759 34 329 -27 1009 1107 10 593 0 +760 368 452 -4 621 748 10 881 0 +761 242 106 -20 1218 1348 10 962 0 +762 171 303 18 1501 1708 10 0 866 +763 329 456 19 220 334 10 0 972 +764 490 286 -12 495 579 10 555 0 +765 61 214 4 270 443 10 0 29 +766 365 74 -26 788 939 10 645 0 +767 321 149 -13 1364 1515 10 87 0 +768 84 453 -32 1194 1281 10 59 0 +769 26 442 -5 1290 1428 10 26 0 +770 180 283 23 664 854 10 0 844 +771 394 322 12 978 1101 10 0 996 +772 348 348 -12 893 1006 10 862 0 +773 309 161 -31 560 637 10 650 0 +774 385 58 24 344 496 10 0 546 +775 228 287 21 43 177 10 0 282 +776 312 453 6 534 595 10 0 346 +777 35 344 -29 804 952 10 518 0 +778 393 98 -30 710 826 10 508 0 +779 208 488 22 404 581 10 0 567 +780 235 33 30 1265 1439 0 0 1010 +781 140 137 32 511 659 10 0 500 +782 405 187 -8 1196 1335 10 839 0 +783 330 371 1 518 630 10 0 594 +784 265 0 -3 839 984 10 98 0 +785 295 89 -24 708 806 10 126 0 +786 3 23 -11 348 464 10 410 0 +787 363 225 35 789 952 10 0 537 +788 148 208 22 485 598 10 0 298 +789 466 362 -16 1105 1230 10 910 0 +790 267 290 15 43 172 10 0 630 +791 98 2 14 542 672 10 0 938 +792 131 246 -5 793 902 10 723 0 +793 418 75 11 395 530 10 0 378 +794 366 260 -15 1474 1596 10 994 0 +795 138 28 23 1048 1176 10 0 162 +796 209 212 -26 1489 1597 10 516 0 +797 443 167 -10 503 613 10 924 0 +798 156 65 22 966 1138 10 0 636 +799 279 355 9 119 244 10 0 644 +800 206 172 -14 738 867 10 68 0 +801 32 94 14 862 1028 10 0 665 +802 301 239 31 52 214 10 0 257 +803 471 368 19 385 502 10 0 874 +804 133 273 20 119 260 10 0 755 +805 253 74 -26 1285 1446 10 303 0 +806 470 405 17 869 1012 10 0 287 +807 77 172 23 745 856 10 0 79 +808 77 465 -23 275 330 10 597 0 +809 466 96 22 1316 1481 0 0 1022 +810 402 277 -3 1376 1530 10 301 0 +811 267 374 23 540 692 10 0 384 +812 450 194 27 586 693 10 0 868 +813 89 65 16 669 801 10 0 387 +814 429 389 -8 382 496 10 123 0 +815 202 28 22 903 995 10 0 643 +816 46 389 22 246 376 10 0 860 +817 246 407 12 264 389 10 0 626 +818 452 110 14 315 395 10 0 46 +819 213 185 21 74 184 10 0 997 +820 134 276 15 118 240 10 0 336 +821 262 97 17 913 1011 10 0 513 +822 469 489 4 484 656 0 0 1001 +823 364 71 -23 1300 1427 10 348 0 +824 68 240 -23 731 887 10 606 0 +825 494 468 31 327 443 10 0 216 +826 439 222 -24 932 1058 10 869 0 +827 386 225 13 859 1009 10 0 319 +828 434 359 -3 1352 1462 10 716 0 +829 103 177 28 592 691 10 0 63 +830 89 322 21 978 1093 10 0 430 +831 307 249 -20 1359 1425 10 141 0 +832 30 155 -17 1237 1353 10 940 0 +833 401 314 -33 930 1052 10 355 0 +834 217 357 -15 1388 1481 10 97 0 +835 373 421 21 210 351 10 0 78 +836 5 281 -19 1305 1468 10 493 0 +837 173 474 14 1216 1384 10 0 840 +838 36 301 21 219 376 10 0 640 +839 429 169 8 848 988 10 0 782 +840 195 450 -14 1434 1567 10 837 0 +841 95 382 19 203 305 10 0 321 +842 225 121 -24 726 770 10 189 0 +843 10 407 -15 363 535 10 717 0 +844 221 269 -23 1204 1356 10 770 0 +845 264 180 33 1652 1739 0 0 1032 +846 168 59 6 320 442 10 0 279 +847 281 96 1 1073 1208 10 0 173 +848 387 349 9 169 252 10 0 995 +849 398 329 17 167 263 10 0 696 +850 239 486 -4 1407 1588 10 545 0 +851 237 420 -15 1295 1403 10 353 0 +852 346 354 8 773 892 10 0 132 +853 172 314 -35 499 621 10 932 0 +854 233 230 20 26 134 10 0 927 +855 79 80 -25 1351 1444 10 222 0 +856 243 402 -24 359 481 10 35 0 +857 117 110 -27 933 1055 10 433 0 +858 66 314 26 194 300 10 0 685 +859 58 391 16 819 975 10 0 16 +860 142 360 -22 1483 1610 10 816 0 +861 492 326 -15 1135 1304 10 347 0 +862 381 328 12 668 796 10 0 772 +863 62 236 -10 519 626 10 934 0 +864 344 70 24 1116 1205 0 0 1021 +865 151 81 -4 1498 1647 10 976 0 +866 240 240 -18 1629 1800 10 762 0 +867 46 163 -22 877 1005 10 896 0 +868 455 168 -27 808 956 10 812 0 +869 428 202 24 879 958 10 0 826 +870 432 199 7 610 698 10 0 560 +871 391 112 24 965 1065 10 0 633 +872 451 305 13 208 346 10 0 215 +873 214 311 -18 70 158 10 697 0 +874 465 367 -19 970 1113 10 803 0 +875 164 473 26 255 368 10 0 439 +876 364 173 30 137 278 10 0 921 +877 274 261 -2 1692 1752 10 328 0 +878 133 455 25 759 886 0 0 1007 +879 351 481 10 300 373 10 0 469 +880 115 395 11 756 904 10 0 171 +881 297 304 4 71 181 10 0 760 +882 7 194 29 882 1050 10 0 231 +883 409 255 -16 1491 1584 10 116 0 +884 87 213 -10 603 679 10 616 0 +885 60 246 -5 190 307 10 289 0 +886 3 471 -25 652 799 10 167 0 +887 418 251 -21 1173 1250 10 70 0 +888 153 362 -23 1112 1240 10 708 0 +889 323 77 -7 1356 1484 10 564 0 +890 143 158 12 141 286 10 0 502 +891 351 148 30 419 534 10 0 114 +892 426 38 -20 572 675 10 600 0 +893 226 316 21 70 197 10 0 462 +894 347 192 18 1435 1571 10 0 297 +895 102 6 -8 1423 1524 10 200 0 +896 41 120 22 625 796 10 0 867 +897 247 443 -16 309 381 10 669 0 +898 218 271 -18 1513 1665 10 66 0 +899 376 385 12 184 260 10 0 5 +900 241 402 -30 987 1092 10 306 0 +901 213 399 18 169 328 0 0 1037 +902 32 191 -23 539 663 10 409 0 +903 441 374 10 227 344 10 0 128 +904 376 113 8 475 583 0 0 1025 +905 215 434 9 187 286 0 0 1015 +906 499 316 18 576 697 10 0 554 +907 318 497 21 790 948 10 0 466 +908 256 441 34 191 313 10 0 192 +909 174 397 -30 1203 1317 10 379 0 +910 468 360 16 244 361 10 0 789 +911 287 256 18 37 185 10 0 611 +912 448 397 33 813 949 10 0 485 +913 352 487 27 858 975 10 0 391 +914 253 118 19 485 640 10 0 82 +915 159 299 -8 984 1077 10 390 0 +916 351 233 -19 1354 1522 10 741 0 +917 268 113 -23 623 767 10 260 0 +918 164 332 19 1269 1321 10 0 721 +919 88 484 -2 1454 1558 10 324 0 +920 360 488 -32 290 372 10 533 0 +921 343 166 -30 823 959 10 876 0 +922 497 266 25 703 823 10 0 509 +923 138 406 -19 1181 1281 10 199 0 +924 420 224 10 374 514 10 0 797 +925 231 410 -7 1192 1311 10 943 0 +926 199 438 -22 1295 1455 10 238 0 +927 219 215 -20 46 164 10 854 0 +928 365 274 14 117 223 10 0 530 +929 481 454 14 308 380 10 0 969 +930 187 61 -18 501 618 10 473 0 +931 372 97 13 195 335 10 0 434 +932 187 263 35 64 151 10 0 853 +933 371 427 23 899 1047 10 0 237 +934 74 215 10 191 297 10 0 863 +935 375 145 12 891 997 10 0 163 +936 365 28 9 250 383 10 0 221 +937 118 314 26 297 409 10 0 404 +938 60 29 -14 1319 1437 10 791 0 +939 478 300 12 829 981 0 0 1012 +940 33 152 17 1254 1416 10 0 832 +941 347 184 -5 1015 1172 10 286 0 +942 94 40 -16 1010 1156 10 275 0 +943 290 328 7 94 224 10 0 925 +944 96 346 26 181 305 10 0 312 +945 97 288 22 1239 1360 10 0 84 +946 176 470 14 512 612 10 0 293 +947 206 97 33 395 531 10 0 623 +948 210 133 -33 637 770 10 185 0 +949 489 457 13 316 465 10 0 233 +950 418 399 20 382 523 0 0 1002 +951 392 491 -10 1077 1218 10 280 0 +952 437 19 15 991 1066 10 0 467 +953 495 83 32 397 515 10 0 535 +954 468 352 -33 733 834 10 304 0 +955 390 120 -28 951 1088 10 351 0 +956 80 357 -22 495 596 10 517 0 +957 394 310 -21 1066 1161 10 590 0 +958 61 441 27 514 604 10 0 24 +959 52 303 -13 395 518 10 335 0 +960 391 202 14 148 256 10 0 255 +961 36 451 -4 866 942 10 982 0 +962 276 84 20 624 769 10 0 761 +963 130 140 -22 162 318 10 515 0 +964 16 287 12 236 376 10 0 145 +965 292 136 28 722 870 10 0 277 +966 53 204 -23 1028 1112 10 731 0 +967 359 287 -15 115 266 10 21 0 +968 309 29 -12 1236 1382 10 624 0 +969 473 491 -14 382 474 10 929 0 +970 273 255 -23 1425 1590 10 142 0 +971 263 153 12 368 487 10 0 444 +972 328 458 -19 747 819 10 763 0 +973 401 164 13 579 693 10 0 170 +974 480 119 -17 552 734 10 268 0 +975 488 96 -21 1022 1141 10 17 0 +976 149 98 4 1101 1260 10 0 865 +977 49 437 7 351 534 10 0 121 +978 440 77 14 877 979 10 0 592 +979 43 135 31 236 344 10 0 155 +980 188 151 -13 1255 1369 10 427 0 +981 175 422 -24 1390 1533 10 738 0 +982 48 437 4 728 909 10 0 961 +983 334 403 26 174 283 10 0 164 +984 372 115 13 315 443 10 0 181 +985 111 192 -21 1152 1277 10 95 0 +986 357 290 24 114 246 10 0 104 +987 331 134 11 1059 1219 0 0 1028 +988 495 199 25 317 387 10 0 678 +989 441 60 -11 1426 1521 10 76 0 +990 51 89 -16 1156 1291 10 715 0 +991 452 206 31 457 558 10 0 575 +992 195 386 13 146 268 10 0 670 +993 172 24 -22 1416 1519 10 194 0 +994 408 318 15 600 716 10 0 794 +995 410 399 -9 218 342 10 848 0 +996 413 345 -12 1178 1288 10 771 0 +997 215 129 -21 1076 1192 10 819 0 +998 380 350 -5 796 967 10 622 0 +999 19 38 15 786 939 10 0 252 +1000 166 247 1 84 158 10 0 551 +1001 469 489 -4 484 656 10 822 0 +1002 418 399 -20 382 523 10 950 0 +1003 452 484 -26 1239 1348 10 750 0 +1004 49 118 -3 1027 1145 10 393 0 +1005 122 422 -3 1404 1539 10 349 0 +1006 405 454 -11 1281 1354 10 75 0 +1007 133 455 -25 759 886 10 878 0 +1008 396 417 -13 776 875 10 705 0 +1009 108 37 -23 486 642 10 134 0 +1010 235 33 -30 1265 1439 10 780 0 +1011 482 184 -14 1079 1165 10 648 0 +1012 478 300 -12 829 981 10 939 0 +1013 31 175 -24 231 314 10 58 0 +1014 48 150 -15 618 723 10 446 0 +1015 215 434 -9 187 286 10 905 0 +1016 173 182 -25 102 209 10 313 0 +1017 209 68 -27 1533 1633 10 519 0 +1018 268 351 -7 1664 1717 10 445 0 +1019 44 311 -27 378 466 10 442 0 +1020 167 291 -27 1601 1697 10 264 0 +1021 344 70 -24 1116 1205 10 864 0 +1022 466 96 -22 1316 1481 10 809 0 +1023 240 362 -23 1342 1516 10 569 0 +1024 64 294 -12 1054 1179 10 325 0 +1025 376 113 -8 475 583 10 904 0 +1026 179 286 -8 290 422 10 411 0 +1027 64 198 -10 1044 1162 10 69 0 +1028 331 134 -11 1059 1219 10 987 0 +1029 0 422 -8 757 915 10 571 0 +1030 230 320 -8 1141 1274 10 239 0 +1031 229 322 -11 1628 1723 10 501 0 +1032 264 180 -33 1652 1739 10 845 0 +1033 436 123 -40 225 312 10 558 0 +1034 104 349 -20 943 1106 10 22 0 +1035 352 241 -5 728 886 10 60 0 +1036 409 155 -19 185 365 10 139 0 +1037 213 399 -18 169 328 10 901 0 +1038 180 162 -9 112 302 10 262 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1102.txt b/jsprit-instances/instances/lilim/1000/LR1102.txt new file mode 100644 index 00000000..1c4f1337 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1102.txt @@ -0,0 +1,1042 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 -3 1153 1163 10 240 0 +2 67 190 -14 1183 1193 10 553 0 +3 80 400 -15 1456 1466 10 717 0 +4 439 237 11 949 959 10 0 125 +5 377 385 -23 876 886 10 933 0 +6 449 428 25 1257 1267 10 0 421 +7 342 481 18 1450 1460 10 0 920 +8 466 149 -5 1196 1206 10 598 0 +9 83 290 14 0 1744 10 0 586 +10 251 63 14 997 1007 10 0 780 +11 328 491 21 0 1662 10 0 466 +12 260 472 -33 0 1693 10 261 0 +13 290 145 -28 1292 1302 10 965 0 +14 266 221 9 33 43 10 0 668 +15 164 320 -23 1105 1115 10 122 0 +16 52 412 -16 0 1660 10 859 0 +17 485 104 -31 804 814 10 241 0 +18 144 331 -36 941 951 10 690 0 +19 387 394 -23 1108 1118 10 287 0 +20 472 57 17 1305 1315 10 0 477 +21 343 276 15 96 106 10 0 255 +22 104 349 -26 1019 1029 10 220 0 +23 28 467 34 1353 1363 10 0 961 +24 91 427 -32 893 903 10 59 0 +25 429 476 -26 0 1627 10 727 0 +26 210 276 5 47 57 10 0 190 +27 58 39 -25 0 1630 10 604 0 +28 273 300 30 55 65 10 0 995 +29 41 232 16 215 225 10 0 719 +30 25 53 -15 1030 1040 10 999 0 +31 52 18 -11 867 877 10 786 0 +32 27 444 22 1090 1100 10 0 177 +33 178 72 -13 767 777 10 724 0 +34 406 460 -13 729 739 10 469 0 +35 250 328 24 259 269 10 0 374 +36 492 34 5 821 831 10 0 414 +37 412 100 1 523 533 10 0 378 +38 233 87 18 263 273 10 0 400 +39 60 5 -8 1054 1064 10 364 0 +40 406 408 -13 1466 1476 10 705 0 +41 245 42 24 557 567 10 0 444 +42 166 345 -8 1140 1150 10 365 0 +43 440 294 -25 970 980 10 922 0 +44 370 382 -28 894 904 10 334 0 +45 32 319 -21 411 421 10 838 0 +46 480 136 -20 0 1659 10 141 0 +47 371 163 -26 838 848 10 202 0 +48 0 188 26 942 952 10 0 231 +49 438 5 18 559 569 10 0 221 +50 132 477 25 337 347 10 0 476 +51 203 211 -16 1316 1326 10 361 0 +52 2 264 -27 0 1667 10 401 0 +53 231 167 15 0 1830 10 0 632 +54 423 221 9 268 278 10 0 988 +55 459 53 -19 0 1628 10 706 0 +56 386 154 31 1111 1121 10 0 244 +57 130 494 -45 769 779 10 439 0 +58 31 175 24 0 1684 10 0 258 +59 69 423 32 812 822 10 0 24 +60 352 241 -14 802 812 10 127 0 +61 261 201 -22 1524 1534 10 815 0 +62 59 276 11 902 912 10 0 525 +63 146 188 -21 1245 1255 10 210 0 +64 451 62 5 292 302 10 0 633 +65 299 285 -4 1264 1274 10 881 0 +66 142 372 18 162 172 10 0 206 +67 440 201 29 903 913 10 0 530 +68 219 210 14 50 60 10 0 415 +69 64 198 -28 1098 1108 10 416 0 +70 390 249 -16 592 602 10 116 0 +71 9 101 -15 676 686 10 337 0 +72 424 288 -7 1067 1077 10 734 0 +73 77 372 19 211 221 10 0 816 +74 298 264 36 50 60 10 0 713 +75 405 454 -25 0 1659 10 550 0 +76 407 35 -16 0 1649 10 417 0 +77 225 369 38 121 131 10 0 581 +78 347 459 -9 489 499 10 799 0 +79 117 178 -23 1127 1137 10 606 0 +80 132 479 11 257 267 10 0 453 +81 201 66 14 1177 1187 10 0 247 +82 245 176 -1 0 1841 10 176 0 +83 470 138 -17 1399 1409 10 561 0 +84 115 296 -10 1539 1549 10 331 0 +85 348 476 -20 1207 1217 10 437 0 +86 43 210 20 210 220 10 0 248 +87 327 139 -28 1267 1277 10 114 0 +88 49 353 -7 1456 1466 10 739 0 +89 356 256 19 106 116 10 0 883 +90 335 99 -6 1228 1238 10 291 0 +91 363 34 19 282 292 10 0 793 +92 33 278 18 1497 1507 10 0 452 +93 366 288 29 694 704 10 0 970 +94 452 172 -15 618 628 10 230 0 +95 86 189 21 237 247 10 0 528 +96 262 369 15 0 1796 10 0 132 +97 218 403 -18 0 1759 10 468 0 +98 218 12 3 554 564 10 0 362 +99 228 399 -13 0 1765 10 992 0 +100 492 188 -31 725 735 10 991 0 +101 267 174 34 1628 1638 10 0 845 +102 274 441 12 705 715 10 0 272 +103 210 113 28 700 710 10 0 947 +104 370 262 -3 1109 1119 10 301 0 +105 303 186 10 1364 1374 0 0 1006 +106 241 180 -28 1705 1715 10 761 0 +107 100 85 14 361 371 10 0 993 +108 350 199 -21 1211 1221 10 868 0 +109 500 228 8 0 1665 10 0 648 +110 251 238 27 12 22 10 0 260 +111 114 102 -17 517 527 10 963 0 +112 345 146 27 0 1775 10 0 987 +113 21 146 21 497 507 10 0 895 +114 330 147 28 858 868 10 0 87 +115 476 61 36 459 469 10 0 558 +116 386 245 16 489 499 10 0 70 +117 201 278 13 56 66 10 0 681 +118 421 499 -22 1355 1365 10 124 0 +119 426 231 -13 1038 1048 10 756 0 +120 105 137 32 462 472 10 0 666 +121 64 437 11 928 938 10 0 539 +122 181 260 23 0 1846 10 0 15 +123 413 391 -10 0 1700 10 276 0 +124 370 493 22 581 591 10 0 118 +125 447 267 -11 990 1000 10 4 0 +126 232 101 24 356 366 10 0 281 +127 371 332 14 540 550 10 0 60 +128 447 383 -15 0 1678 10 531 0 +129 325 147 -19 1197 1207 10 201 0 +130 489 437 -17 717 727 10 849 0 +131 415 95 -13 1187 1197 10 524 0 +132 331 356 -15 722 732 10 96 0 +133 374 346 27 0 1759 10 0 833 +134 108 37 23 559 569 10 0 443 +135 5 224 -23 0 1669 10 409 0 +136 93 413 17 226 236 10 0 677 +137 210 29 -15 0 1691 10 309 0 +138 136 265 12 114 124 10 0 205 +139 409 155 19 0 1730 10 0 359 +140 111 178 18 156 166 10 0 701 +141 291 251 20 41 51 10 0 46 +142 322 290 -13 0 1833 10 557 0 +143 57 183 -35 0 1711 10 377 0 +144 181 185 -14 1624 1634 10 521 0 +145 7 382 27 780 790 10 0 659 +146 425 448 9 804 814 10 0 174 +147 174 41 -25 0 1693 10 435 0 +148 161 276 8 143 153 10 0 755 +149 398 49 -20 802 812 10 600 0 +150 210 379 12 719 729 10 0 408 +151 60 231 -5 1036 1046 10 902 0 +152 453 360 13 230 240 10 0 579 +153 367 97 -16 998 1008 10 181 0 +154 488 3 3 411 421 10 0 952 +155 44 115 24 246 256 10 0 614 +156 48 293 22 286 296 10 0 392 +157 64 135 -27 0 1697 10 433 0 +158 65 62 15 0 1652 10 0 801 +159 404 207 -31 0 1756 10 209 0 +160 68 303 -25 0 1726 10 959 0 +161 263 418 25 288 298 10 0 440 +162 147 30 26 1119 1129 0 0 1012 +163 384 149 18 1207 1217 0 0 1026 +164 340 416 36 331 341 10 0 310 +165 271 128 12 356 366 10 0 914 +166 89 358 -13 1257 1267 10 335 0 +167 20 480 25 0 1590 0 0 1010 +168 488 173 -20 1220 1230 10 269 0 +169 439 156 -7 0 1704 10 974 0 +170 389 156 27 726 736 0 0 1033 +171 111 392 18 0 1717 10 0 923 +172 267 162 -26 1459 1469 10 752 0 +173 248 176 -17 1411 1421 10 821 0 +174 413 476 -9 1189 1199 10 146 0 +175 352 481 15 1295 1305 10 0 391 +176 264 135 1 889 899 10 0 82 +177 29 462 -22 1320 1330 10 32 0 +178 148 462 10 737 747 10 0 474 +179 44 140 11 878 888 10 0 638 +180 414 378 23 505 515 10 0 954 +181 392 95 16 776 786 10 0 153 +182 216 341 19 664 674 10 0 239 +183 211 411 -3 0 1750 10 926 0 +184 317 45 8 0 1700 0 0 1005 +185 178 150 -21 642 652 10 699 0 +186 428 302 -21 1026 1036 10 835 0 +187 450 45 24 514 524 10 0 311 +188 453 318 -16 384 394 10 910 0 +189 186 135 24 0 1784 0 0 1029 +190 11 403 -5 353 363 10 26 0 +191 433 447 -5 804 814 10 490 0 +192 272 420 -19 1396 1406 10 763 0 +193 429 59 -21 0 1654 10 989 0 +194 200 27 -21 535 545 10 819 0 +195 498 171 -25 1266 1276 10 250 0 +196 487 320 -14 868 878 10 438 0 +197 45 166 -8 1023 1033 10 867 0 +198 490 276 33 248 258 10 0 736 +199 126 391 19 283 293 0 0 1039 +200 92 18 8 1134 1144 10 0 519 +201 293 228 19 48 58 10 0 129 +202 343 205 26 777 787 10 0 47 +203 182 480 -20 0 1676 10 369 0 +204 385 285 13 878 888 10 0 794 +205 44 344 -12 1089 1099 10 138 0 +206 170 347 -18 0 1790 10 66 0 +207 457 492 -40 0 1597 10 294 0 +208 124 448 6 379 389 10 0 880 +209 398 210 31 153 163 10 0 159 +210 75 118 21 419 429 10 0 63 +211 105 474 -18 481 491 10 582 0 +212 134 211 35 130 140 10 0 426 +213 211 248 26 39 49 10 0 547 +214 212 186 -12 1732 1742 10 513 0 +215 492 335 -12 0 1659 10 939 0 +216 497 483 -12 363 373 10 899 0 +217 440 436 -3 902 912 10 511 0 +218 311 203 15 733 743 10 0 613 +219 491 369 -13 0 1647 10 872 0 +220 67 378 26 480 490 10 0 22 +221 383 17 -18 950 960 10 49 0 +222 7 82 25 422 432 10 0 393 +223 342 319 36 115 125 10 0 672 +224 78 406 15 970 980 10 0 455 +225 103 123 8 500 510 10 0 591 +226 241 38 -26 0 1703 10 303 0 +227 224 3 -18 700 710 10 245 0 +228 436 467 -4 746 756 10 822 0 +229 438 488 18 337 347 10 0 722 +230 351 60 15 0 1700 10 0 94 +231 13 214 -26 1364 1374 10 48 0 +232 429 67 -21 742 752 10 292 0 +233 498 456 27 1416 1426 10 0 806 +234 135 400 20 0 1726 10 0 888 +235 215 293 13 55 65 0 0 1023 +236 354 416 -7 0 1720 10 431 0 +237 294 421 -16 1585 1595 10 669 0 +238 208 445 22 1342 1352 0 0 1015 +239 230 320 -19 1202 1212 10 182 0 +240 157 38 3 1058 1068 10 0 1 +241 441 100 31 0 1673 10 0 17 +242 61 170 20 1016 1026 10 0 609 +243 79 467 22 361 371 10 0 375 +244 365 190 -31 1487 1497 10 56 0 +245 282 1 18 0 1664 10 0 227 +246 124 111 15 0 1728 0 0 1024 +247 247 219 -14 0 1884 10 81 0 +248 28 180 -20 396 406 10 86 0 +249 167 488 17 260 270 10 0 875 +250 442 289 25 201 211 10 0 195 +251 136 430 -24 720 730 10 738 0 +252 38 15 3 0 1599 10 0 938 +253 246 314 -21 1455 1465 10 651 0 +254 176 200 17 578 588 10 0 290 +255 337 232 -15 1581 1591 10 21 0 +256 257 133 -32 872 882 10 781 0 +257 295 247 12 1313 1323 0 0 1001 +258 39 162 -24 575 585 10 58 0 +259 79 257 -11 963 973 10 824 0 +260 236 126 -27 0 1791 10 110 0 +261 259 498 33 1085 1095 10 0 12 +262 180 162 9 0 1803 10 0 502 +263 53 466 9 345 355 10 0 769 +264 167 291 -12 1644 1654 10 915 0 +265 89 185 -6 610 620 10 296 0 +266 487 446 9 1350 1360 10 0 730 +267 308 199 -15 1518 1528 10 584 0 +268 481 84 17 516 526 10 0 953 +269 495 227 20 0 1669 10 0 168 +270 397 57 17 1486 1496 10 0 368 +271 372 39 -23 734 744 10 892 0 +272 278 450 -12 1385 1395 10 102 0 +273 292 32 14 239 249 10 0 295 +274 90 496 -22 1405 1415 10 693 0 +275 68 53 -10 749 759 10 503 0 +276 371 423 10 211 221 10 0 123 +277 273 149 -21 1513 1523 10 917 0 +278 297 283 -26 0 1858 10 407 0 +279 120 37 -30 0 1666 10 628 0 +280 371 488 -35 0 1649 10 631 0 +281 206 174 -24 810 820 10 126 0 +282 174 347 -6 1025 1035 10 373 0 +283 330 281 -25 1340 1350 10 649 0 +284 67 451 -4 1226 1236 10 982 0 +285 27 464 -8 1301 1311 10 571 0 +286 361 178 5 0 1783 10 0 955 +287 463 406 23 867 877 10 0 19 +288 456 157 -19 1465 1475 10 535 0 +289 153 244 5 118 128 10 0 583 +290 153 192 -17 876 886 10 254 0 +291 352 63 6 1188 1198 10 0 90 +292 371 71 21 297 307 10 0 232 +293 163 472 -14 663 673 10 925 0 +294 448 495 40 394 404 10 0 207 +295 282 10 -14 0 1673 10 273 0 +296 66 163 6 405 415 10 0 265 +297 314 205 -23 1537 1547 10 676 0 +298 83 169 -2 0 1730 10 556 0 +299 221 291 9 56 66 10 0 429 +300 374 116 9 597 607 10 0 864 +301 418 269 3 0 1746 10 0 104 +302 178 302 -9 897 907 10 853 0 +303 250 57 26 758 768 10 0 226 +304 475 352 33 0 1668 10 0 714 +305 1 252 -10 0 1666 10 616 0 +306 286 356 -33 0 1804 10 704 0 +307 65 82 -35 750 760 10 488 0 +308 154 392 9 171 181 10 0 850 +309 196 56 15 0 1714 10 0 137 +310 366 390 -36 0 1734 10 164 0 +311 436 25 -24 1292 1302 10 187 0 +312 67 352 20 383 393 10 0 430 +313 173 182 25 102 112 10 0 499 +314 390 34 7 1070 1080 10 0 774 +315 18 225 -30 701 711 10 345 0 +316 57 43 -14 0 1632 10 791 0 +317 388 44 -21 1141 1151 10 434 0 +318 269 112 19 1273 1283 0 0 1031 +319 374 260 -15 1781 1791 10 994 0 +320 291 213 23 1268 1278 10 0 541 +321 178 420 -16 1081 1091 10 327 0 +322 389 255 15 795 805 10 0 827 +323 134 194 -23 1662 1672 10 807 0 +324 93 490 2 389 399 10 0 878 +325 64 294 12 1111 1121 10 0 945 +326 493 111 26 551 561 10 0 497 +327 150 484 16 635 645 10 0 321 +328 235 316 -10 666 676 10 630 0 +329 239 15 2 0 1680 10 0 366 +330 193 138 30 671 681 10 0 842 +331 40 278 10 1114 1124 10 0 84 +332 307 52 -12 930 940 10 624 0 +333 161 416 25 0 1727 10 0 981 +334 381 457 28 481 491 10 0 44 +335 55 318 13 322 332 10 0 166 +336 80 279 19 0 1743 10 0 687 +337 48 162 15 227 237 10 0 71 +338 91 27 -11 1192 1202 10 410 0 +339 288 70 -12 189 199 10 971 0 +340 177 404 17 1272 1282 10 0 501 +341 10 237 19 626 636 10 0 707 +342 493 493 20 866 876 10 0 862 +343 440 292 -25 950 960 10 509 0 +344 349 76 -21 1041 1051 10 487 0 +345 47 208 30 236 246 10 0 315 +346 283 454 -10 0 1709 10 710 0 +347 486 324 15 0 1668 10 0 370 +348 392 87 -31 0 1699 10 802 0 +349 122 422 -31 1467 1477 10 566 0 +350 37 281 -26 503 513 10 858 0 +351 413 127 28 841 851 10 0 467 +352 222 499 -25 855 865 10 663 0 +353 211 446 -14 1133 1143 10 946 0 +354 30 7 -15 1199 1209 10 552 0 +355 398 341 -15 949 959 10 998 0 +356 26 67 -22 1327 1337 10 515 0 +357 461 186 -10 0 1695 10 924 0 +358 313 391 -6 0 1761 10 776 0 +359 471 94 -19 1009 1019 10 139 0 +360 341 72 -36 815 825 10 889 0 +361 130 186 16 141 151 10 0 51 +362 257 57 -3 1236 1246 10 98 0 +363 94 344 -13 0 1733 10 551 0 +364 6 53 8 0 1602 10 0 39 +365 146 376 8 244 254 10 0 42 +366 244 13 -2 1023 1033 10 329 0 +367 29 336 -12 342 352 10 737 0 +368 306 42 -17 0 1700 10 270 0 +369 177 486 20 0 1668 10 0 203 +370 489 338 -15 1407 1417 10 347 0 +371 179 318 -5 1131 1141 10 563 0 +372 344 203 14 177 187 10 0 592 +373 149 341 6 414 424 10 0 282 +374 307 412 -24 414 424 10 35 0 +375 68 450 -22 643 653 10 243 0 +376 420 80 -2 0 1675 10 560 0 +377 144 220 35 110 120 10 0 143 +378 497 54 -1 988 998 10 37 0 +379 80 458 30 381 391 10 0 837 +380 84 377 10 0 1706 10 0 843 +381 332 382 2 1020 1030 10 0 751 +382 6 196 -26 1213 1223 10 588 0 +383 104 28 -14 1483 1493 10 441 0 +384 224 320 -26 1294 1304 10 607 0 +385 87 3 13 0 1620 0 0 1002 +386 149 214 -8 0 1808 10 966 0 +387 98 29 14 0 1647 10 0 599 +388 135 30 12 484 494 10 0 795 +389 287 397 -20 574 584 10 626 0 +390 107 374 8 924 934 10 0 860 +391 355 485 -15 1489 1499 10 175 0 +392 51 286 -22 1469 1479 10 156 0 +393 49 118 -25 1081 1091 10 222 0 +394 159 226 16 94 104 10 0 884 +395 185 431 15 397 407 10 0 567 +396 262 92 25 640 650 10 0 456 +397 475 198 -12 0 1685 10 732 0 +398 142 30 -13 1256 1266 10 857 0 +399 481 207 -16 866 876 10 506 0 +400 174 122 -18 603 613 10 38 0 +401 35 263 27 280 290 10 0 52 +402 24 71 11 356 366 10 0 534 +403 173 65 12 458 468 0 0 1036 +404 91 326 -14 0 1739 10 640 0 +405 470 417 -10 747 757 10 903 0 +406 397 153 -13 892 902 10 973 0 +407 295 283 26 0 1860 10 0 278 +408 174 376 -12 0 1768 10 150 0 +409 38 190 23 295 305 10 0 135 +410 16 68 11 0 1619 10 0 338 +411 179 286 -36 351 361 10 532 0 +412 244 422 14 548 558 10 0 671 +413 250 441 -12 766 776 10 817 0 +414 497 18 -5 1140 1150 10 36 0 +415 195 111 -14 1008 1018 10 68 0 +416 26 221 28 1006 1016 10 0 69 +417 442 5 16 330 340 10 0 76 +418 44 496 32 412 422 10 0 549 +419 448 404 15 0 1665 10 0 578 +420 471 427 8 826 836 10 0 682 +421 460 424 -25 1465 1475 10 6 0 +422 461 195 -17 1405 1415 10 554 0 +423 146 313 22 0 1794 10 0 937 +424 19 273 -18 1027 1037 10 685 0 +425 245 461 -18 659 669 10 901 0 +426 69 266 -35 768 778 10 212 0 +427 191 84 -15 877 887 10 514 0 +428 68 160 -31 0 1712 10 979 0 +429 212 47 -9 811 821 10 299 0 +430 80 337 -20 0 1725 10 312 0 +431 412 478 7 0 1636 10 0 236 +432 225 488 28 646 656 10 0 900 +433 105 140 27 0 1733 10 0 157 +434 389 43 21 0 1666 10 0 317 +435 177 156 25 177 187 10 0 147 +436 179 497 -23 1421 1431 10 470 0 +437 377 432 20 841 851 10 0 85 +438 497 296 14 623 633 10 0 196 +439 152 476 45 533 543 10 0 57 +440 277 428 -25 500 510 10 161 0 +441 64 5 14 1139 1149 10 0 383 +442 44 311 -16 0 1701 10 733 0 +443 165 59 -23 953 963 10 134 0 +444 261 138 -24 0 1803 10 41 0 +445 268 351 -29 0 1813 10 615 0 +446 48 150 -8 0 1690 10 726 0 +447 215 79 -31 0 1741 10 623 0 +448 109 56 27 239 249 10 0 573 +449 171 188 -28 631 641 10 703 0 +450 284 457 -3 0 1706 10 457 0 +451 274 442 -21 0 1722 10 893 0 +452 33 286 -18 1556 1566 10 92 0 +453 112 433 -11 0 1686 10 80 0 +454 423 170 -25 523 533 10 695 0 +455 213 283 -15 0 1866 10 224 0 +456 240 34 -25 1570 1580 10 396 0 +457 283 438 3 241 251 10 0 450 +458 324 99 -26 348 358 10 645 0 +459 259 301 25 109 119 10 0 526 +460 189 402 -12 0 1752 10 462 0 +461 215 282 21 1450 1460 10 0 478 +462 166 440 12 207 217 10 0 460 +463 374 232 33 125 135 10 0 512 +464 339 113 -18 771 781 10 767 0 +465 335 46 18 0 1694 10 0 572 +466 313 493 -21 1203 1213 10 11 0 +467 432 66 -28 1081 1091 10 351 0 +468 76 462 18 966 976 10 0 97 +469 397 477 13 0 1645 10 0 34 +470 196 489 23 1040 1050 10 0 436 +471 354 156 20 842 852 10 0 621 +472 171 24 -17 1393 1403 10 673 0 +473 187 73 -28 302 312 10 680 0 +474 243 408 -10 1444 1454 10 178 0 +475 421 387 15 811 821 0 0 1028 +476 141 426 -25 541 551 10 50 0 +477 415 118 -17 0 1704 10 20 0 +478 240 255 -21 1621 1631 10 461 0 +479 162 388 11 1136 1146 10 0 909 +480 413 493 -22 1228 1238 10 749 0 +481 69 414 6 1273 1283 10 0 841 +482 273 70 36 629 639 10 0 785 +483 142 14 18 845 855 0 0 1022 +484 185 434 9 0 1720 10 0 545 +485 360 294 9 0 1797 10 0 559 +486 265 240 9 18 28 10 0 711 +487 280 245 21 30 40 10 0 344 +488 87 51 35 524 534 10 0 307 +489 195 273 22 59 69 10 0 585 +490 422 498 5 702 712 10 0 191 +491 95 64 -16 776 786 10 813 0 +492 63 155 -9 0 1706 10 832 0 +493 24 259 19 0 1689 0 0 1025 +494 376 92 10 0 1713 0 0 1018 +495 83 300 -17 510 520 10 718 0 +496 72 477 46 288 298 10 0 504 +497 380 194 -26 0 1774 10 326 0 +498 72 227 25 574 584 10 0 844 +499 238 123 -25 791 801 10 313 0 +500 188 119 44 985 995 10 0 634 +501 229 322 -17 0 1840 10 340 0 +502 150 68 -9 0 1708 10 262 0 +503 67 24 10 0 1625 10 0 275 +504 63 420 -46 0 1663 10 496 0 +505 339 144 13 1109 1119 10 0 658 +506 454 201 16 0 1706 10 0 399 +507 158 24 18 621 631 10 0 747 +508 365 119 -13 392 402 10 984 0 +509 440 284 25 862 872 10 0 343 +510 417 212 -27 920 930 10 812 0 +511 404 439 3 249 259 10 0 217 +512 472 248 -33 0 1693 10 463 0 +513 235 108 12 0 1773 10 0 214 +514 174 67 15 0 1717 10 0 427 +515 132 151 22 154 164 10 0 356 +516 217 207 -28 1392 1402 10 829 0 +517 162 306 22 129 139 10 0 723 +518 48 366 -20 753 763 10 754 0 +519 209 68 -8 1578 1588 10 200 0 +520 94 497 -11 792 802 10 808 0 +521 110 122 14 1519 1529 10 0 144 +522 274 403 -13 897 907 10 856 0 +523 421 386 -18 834 844 10 814 0 +524 399 175 13 757 767 10 0 131 +525 56 268 -11 1074 1084 10 62 0 +526 322 406 -25 839 849 10 459 0 +527 244 277 18 1311 1321 0 0 1013 +528 105 181 -21 1541 1551 10 95 0 +529 30 97 23 1220 1230 10 0 665 +530 359 246 -29 0 1806 10 67 0 +531 498 457 15 0 1592 10 0 128 +532 190 267 36 0 1853 10 0 411 +533 334 481 -17 340 350 10 618 0 +534 18 24 -11 638 648 10 402 0 +535 482 104 19 817 827 10 0 288 +536 460 328 13 229 239 0 0 1007 +537 320 211 16 1003 1013 0 0 1037 +538 494 165 19 0 1657 10 0 735 +539 167 445 -11 0 1704 10 121 0 +540 340 291 22 480 490 10 0 787 +541 272 234 -23 1600 1610 10 320 0 +542 325 56 13 806 816 10 0 580 +543 71 304 19 699 709 10 0 830 +544 87 311 7 0 1741 10 0 956 +545 207 487 -9 699 709 10 484 0 +546 332 5 -20 1043 1053 10 684 0 +547 161 275 -26 0 1823 10 213 0 +548 268 458 24 533 543 10 0 790 +549 175 352 -32 0 1789 10 418 0 +550 398 476 25 0 1645 10 0 75 +551 51 360 13 1155 1165 10 0 363 +552 21 70 15 781 791 10 0 354 +553 80 251 14 314 324 10 0 2 +554 457 280 17 1010 1020 10 0 422 +555 423 315 -11 0 1731 10 570 0 +556 66 88 2 840 850 10 0 298 +557 479 387 13 407 417 10 0 142 +558 436 123 -36 0 1690 10 115 0 +559 286 244 -9 1294 1304 10 485 0 +560 449 190 2 1150 1160 10 0 376 +561 456 113 17 1237 1247 10 0 83 +562 480 152 -29 0 1665 10 602 0 +563 100 266 5 480 490 10 0 371 +564 343 34 7 735 745 10 0 766 +565 374 306 -14 1004 1014 10 728 0 +566 13 465 31 784 794 10 0 349 +567 230 487 -15 1140 1150 10 395 0 +568 442 153 -24 1199 1209 10 869 0 +569 240 362 -22 0 1803 10 744 0 +570 433 319 11 0 1720 10 0 555 +571 0 422 8 831 841 10 0 285 +572 297 131 -18 1175 1185 10 465 0 +573 71 12 -27 303 313 10 448 0 +574 44 440 24 0 1635 0 0 1038 +575 447 184 27 434 444 0 0 1003 +576 341 59 27 800 810 0 0 1011 +577 132 32 18 794 804 10 0 798 +578 411 396 -15 930 940 10 419 0 +579 450 416 -13 587 597 10 152 0 +580 323 34 -13 0 1687 10 542 0 +581 244 368 -38 424 434 10 77 0 +582 90 477 18 277 287 10 0 211 +583 34 169 -5 494 504 10 289 0 +584 351 128 15 1263 1273 10 0 267 +585 71 282 -22 0 1734 10 489 0 +586 157 269 -14 1586 1596 10 9 0 +587 392 1 11 615 625 10 0 847 +588 39 153 26 808 818 10 0 382 +589 306 229 -33 1330 1340 10 686 0 +590 415 253 21 377 387 10 0 941 +591 92 76 -8 1149 1159 10 225 0 +592 437 98 -14 1124 1134 10 372 0 +593 12 367 27 336 346 10 0 759 +594 448 414 -33 1233 1243 10 912 0 +595 128 113 -7 373 383 10 667 0 +596 43 360 -23 0 1681 10 742 0 +597 102 422 23 236 246 10 0 670 +598 480 131 5 698 708 10 0 8 +599 210 81 -14 0 1742 10 387 0 +600 432 2 20 0 1608 10 0 149 +601 396 83 -22 1596 1606 10 809 0 +602 489 159 29 0 1660 10 0 562 +603 56 75 -19 0 1654 10 990 0 +604 66 31 25 0 1629 10 0 27 +605 460 117 -31 530 540 10 650 0 +606 175 239 23 75 85 10 0 79 +607 217 333 26 421 431 10 0 384 +608 62 375 -38 359 369 10 654 0 +609 82 183 -20 1112 1122 10 242 0 +610 248 214 -29 1489 1499 10 800 0 +611 385 239 21 796 806 10 0 870 +612 371 315 -16 1176 1186 10 760 0 +613 333 163 -15 0 1795 10 218 0 +614 100 66 -24 0 1678 10 155 0 +615 311 422 29 0 1733 10 0 445 +616 153 235 10 98 108 10 0 305 +617 168 109 10 214 224 10 0 997 +618 284 319 17 0 1839 10 0 533 +619 195 464 -14 0 1695 10 688 0 +620 382 9 30 282 292 10 0 653 +621 325 210 -20 943 953 10 471 0 +622 366 334 5 420 430 10 0 957 +623 200 78 31 1003 1013 10 0 447 +624 351 5 12 506 516 10 0 332 +625 197 202 29 1214 1224 10 0 796 +626 270 337 20 0 1826 10 0 389 +627 125 65 17 798 808 10 0 636 +628 120 17 30 289 299 10 0 279 +629 84 255 13 292 302 10 0 731 +630 222 331 10 550 560 10 0 328 +631 332 459 35 379 389 10 0 280 +632 226 175 -15 1704 1714 10 53 0 +633 404 140 -5 1269 1279 10 64 0 +634 223 178 -44 1146 1156 10 500 0 +635 330 308 24 1180 1190 0 0 1017 +636 140 108 -17 1081 1091 10 627 0 +637 34 239 16 0 1699 10 0 647 +638 94 192 -11 1090 1100 10 179 0 +639 458 213 -23 1138 1148 10 678 0 +640 13 314 14 254 264 10 0 404 +641 202 391 30 0 1767 10 0 908 +642 339 41 -9 466 476 10 936 0 +643 224 56 13 1196 1206 10 0 674 +644 345 431 -26 355 365 10 983 0 +645 292 104 26 314 324 10 0 458 +646 318 99 -23 1223 1233 10 773 0 +647 46 248 -16 824 834 10 637 0 +648 482 184 -8 0 1674 10 109 0 +649 411 379 25 0 1709 10 0 283 +650 293 174 31 87 97 10 0 605 +651 169 305 21 172 182 10 0 253 +652 394 47 5 323 333 10 0 839 +653 323 29 -30 1147 1157 10 620 0 +654 65 343 38 217 227 10 0 608 +655 158 179 37 0 1799 0 0 1016 +656 299 353 -23 0 1801 10 811 0 +657 9 233 31 316 326 0 0 1035 +658 330 138 -13 0 1778 10 505 0 +659 48 412 -27 1042 1052 10 145 0 +660 385 17 40 819 829 10 0 968 +661 382 110 -24 1122 1132 10 871 0 +662 336 493 20 0 1658 10 0 907 +663 181 441 25 552 562 10 0 352 +664 162 301 -26 1623 1633 10 944 0 +665 1 101 -23 1267 1277 10 529 0 +666 80 117 -32 834 844 10 120 0 +667 210 219 7 50 60 10 0 595 +668 404 59 -9 923 933 10 14 0 +669 288 439 16 0 1723 10 0 237 +670 149 458 -23 0 1684 10 597 0 +671 257 391 -14 1643 1653 10 412 0 +672 405 349 -36 532 542 10 223 0 +673 191 215 17 68 78 10 0 472 +674 231 29 -13 1236 1246 10 643 0 +675 253 50 -20 236 246 10 805 0 +676 441 177 23 1011 1021 10 0 297 +677 5 445 -17 321 331 10 136 0 +678 463 253 23 1057 1067 10 0 639 +679 435 180 37 235 245 10 0 797 +680 198 85 28 273 283 10 0 473 +681 59 388 -13 673 683 10 117 0 +682 373 418 -8 1269 1279 10 420 0 +683 142 80 -26 0 1714 10 740 0 +684 441 7 20 402 412 10 0 546 +685 33 268 18 706 716 10 0 424 +686 355 174 33 0 1786 10 0 589 +687 228 260 -19 1616 1626 10 336 0 +688 114 460 14 0 1665 10 0 619 +689 337 41 -12 1012 1022 10 692 0 +690 154 374 36 0 1759 10 0 18 +691 235 13 -10 369 379 10 784 0 +692 303 78 12 179 189 10 0 689 +693 103 464 22 1283 1293 10 0 274 +694 325 311 22 1332 1342 10 0 877 +695 306 235 25 57 67 10 0 454 +696 382 360 26 188 198 10 0 828 +697 235 288 18 40 50 10 0 779 +698 0 356 -21 0 1644 10 777 0 +699 178 135 21 0 1780 10 0 185 +700 226 423 15 207 217 10 0 897 +701 15 11 -18 962 972 10 140 0 +702 144 35 26 239 249 10 0 980 +703 176 199 28 89 99 10 0 449 +704 247 306 33 56 66 10 0 306 +705 396 417 13 0 1694 10 0 40 +706 289 220 19 49 59 10 0 55 +707 23 235 -19 1033 1043 10 341 0 +708 137 377 23 169 179 10 0 958 +709 400 71 17 1382 1392 10 0 962 +710 261 359 10 109 119 10 0 346 +711 438 127 -9 951 961 10 486 0 +712 318 280 -12 0 1841 10 771 0 +713 333 293 -36 627 637 10 74 0 +714 436 295 -33 538 548 10 304 0 +715 62 94 16 0 1671 10 0 940 +716 495 355 -19 1253 1263 10 861 0 +717 13 394 15 383 393 10 0 3 +718 172 292 17 0 1827 10 0 495 +719 14 232 -16 0 1679 10 29 0 +720 437 90 -13 595 605 10 931 0 +721 214 274 24 0 1872 0 0 1009 +722 420 383 -18 992 1002 10 229 0 +723 120 261 -22 803 813 10 517 0 +724 179 75 13 750 760 10 0 33 +725 484 224 -14 310 320 10 928 0 +726 214 245 8 36 46 10 0 446 +727 395 474 26 397 407 10 0 25 +728 368 311 14 936 946 10 0 565 +729 199 203 20 1467 1477 10 0 866 +730 485 428 -9 1500 1510 10 266 0 +731 86 199 -13 0 1744 10 629 0 +732 447 272 12 394 404 10 0 397 +733 40 304 16 1155 1165 10 0 442 +734 475 267 7 790 800 10 0 72 +735 482 141 -19 1021 1031 10 538 0 +736 489 274 -33 544 554 10 198 0 +737 26 342 12 331 341 10 0 367 +738 139 438 24 0 1697 10 0 251 +739 12 358 7 1234 1244 10 0 88 +740 125 61 26 622 632 10 0 683 +741 360 284 -24 0 1800 10 967 0 +742 29 358 23 621 631 10 0 596 +743 285 247 -14 0 1880 10 873 0 +744 248 386 22 388 398 10 0 569 +745 415 207 18 910 920 10 0 916 +746 130 247 17 120 130 0 0 1019 +747 172 66 -18 1313 1323 10 507 0 +748 92 259 4 409 419 10 0 792 +749 379 486 22 682 692 10 0 480 +750 452 484 26 0 1606 10 0 848 +751 268 288 -2 1277 1287 10 381 0 +752 349 43 26 229 239 10 0 172 +753 225 269 -35 0 1884 10 932 0 +754 50 383 20 270 280 10 0 518 +755 110 251 -8 508 518 10 148 0 +756 461 182 13 639 649 10 0 119 +757 255 487 19 408 418 10 0 840 +758 133 202 -22 471 481 10 788 0 +759 34 329 -27 1053 1063 10 593 0 +760 368 452 16 680 690 10 0 612 +761 242 106 28 1278 1288 10 0 106 +762 171 303 18 0 1820 10 0 770 +763 329 456 19 0 1695 10 0 192 +764 490 286 29 0 1673 10 0 906 +765 61 214 -29 0 1723 10 882 0 +766 365 74 -7 858 868 10 564 0 +767 321 149 18 0 1792 10 0 464 +768 84 453 -7 0 1653 10 977 0 +769 26 442 -9 1354 1364 10 263 0 +770 180 283 -18 754 764 10 762 0 +771 394 322 12 1035 1045 10 0 712 +772 348 348 -21 945 955 10 775 0 +773 309 161 23 593 603 10 0 646 +774 385 58 -7 0 1681 10 314 0 +775 228 287 21 43 53 10 0 772 +776 312 453 6 560 570 10 0 358 +777 35 344 21 873 883 10 0 698 +778 393 98 -8 763 773 10 904 0 +779 208 488 -18 488 498 10 697 0 +780 235 33 -14 1347 1357 10 10 0 +781 140 137 32 580 590 10 0 256 +782 405 187 -12 1261 1271 10 935 0 +783 330 371 -10 0 1770 10 951 0 +784 265 0 10 0 1665 10 0 691 +785 295 89 -36 752 762 10 482 0 +786 3 23 11 0 1580 10 0 31 +787 363 225 -22 866 876 10 540 0 +788 148 208 22 0 1805 10 0 758 +789 466 362 -24 0 1672 10 986 0 +790 267 290 -24 0 1872 10 548 0 +791 98 2 14 602 612 10 0 316 +792 131 246 -4 842 852 10 748 0 +793 418 75 -19 458 468 10 91 0 +794 366 260 -13 1530 1540 10 204 0 +795 138 28 -12 1107 1117 10 388 0 +796 209 212 -29 0 1860 10 625 0 +797 443 167 -37 553 563 10 679 0 +798 156 65 -18 1047 1057 10 577 0 +799 279 355 9 176 186 10 0 78 +800 206 172 29 798 808 10 0 610 +801 32 94 -15 940 950 10 158 0 +802 301 239 31 52 62 10 0 348 +803 471 368 -14 0 1665 10 874 0 +804 133 273 20 119 129 10 0 820 +805 253 74 20 0 1739 10 0 675 +806 470 405 -27 0 1646 10 233 0 +807 77 172 23 796 806 10 0 323 +808 77 465 11 275 285 10 0 520 +809 466 96 22 1393 1403 10 0 601 +810 402 277 5 1448 1458 0 0 1014 +811 267 374 23 611 621 10 0 656 +812 450 194 27 635 645 10 0 510 +813 89 65 16 730 740 10 0 491 +814 429 389 18 434 444 10 0 523 +815 202 28 22 0 1688 10 0 61 +816 46 389 -19 0 1669 10 73 0 +817 246 407 12 322 332 10 0 413 +818 452 110 14 0 1670 10 0 823 +819 213 185 21 74 84 10 0 194 +820 134 276 -20 143 153 10 804 0 +821 262 97 17 957 967 10 0 173 +822 469 489 4 565 575 10 0 228 +823 364 71 -14 1358 1368 10 818 0 +824 68 240 11 804 814 10 0 259 +825 494 468 -13 362 372 10 949 0 +826 439 222 22 990 1000 0 0 1030 +827 386 225 -15 929 939 10 322 0 +828 434 359 -26 1402 1412 10 696 0 +829 103 177 28 636 646 10 0 516 +830 89 322 -19 1031 1041 10 543 0 +831 307 249 -21 1387 1397 10 887 0 +832 30 155 9 1290 1300 10 0 492 +833 401 314 -27 986 996 10 133 0 +834 217 357 23 1430 1440 10 0 898 +835 373 421 21 247 257 10 0 186 +836 5 281 16 1382 1392 10 0 964 +837 173 474 -30 1295 1305 10 379 0 +838 36 301 21 219 229 10 0 45 +839 429 169 -5 913 923 10 652 0 +840 195 450 -19 0 1708 10 757 0 +841 95 382 -6 0 1712 10 481 0 +842 225 121 -30 0 1784 10 330 0 +843 10 407 -10 444 454 10 380 0 +844 221 269 -25 1275 1285 10 498 0 +845 264 180 -34 1691 1701 10 101 0 +846 168 59 6 376 386 10 0 930 +847 281 96 -11 0 1758 10 587 0 +848 387 349 -26 0 1746 10 750 0 +849 398 329 17 167 177 10 0 130 +850 239 486 -9 1492 1502 10 308 0 +851 237 420 15 1344 1354 0 0 1020 +852 346 354 8 0 1774 0 0 1032 +853 172 314 9 555 565 10 0 302 +854 233 230 20 26 36 10 0 927 +855 79 80 19 1392 1402 0 0 1008 +856 243 402 13 415 425 10 0 522 +857 117 110 13 0 1722 10 0 398 +858 66 314 26 194 204 10 0 350 +859 58 391 16 892 902 10 0 16 +860 142 360 -8 1542 1552 10 390 0 +861 492 326 19 1214 1224 10 0 716 +862 381 328 -20 0 1763 10 342 0 +863 62 236 -25 568 578 10 885 0 +864 344 70 -9 1156 1166 10 300 0 +865 151 81 -4 1568 1578 10 976 0 +866 240 240 -20 1710 1720 10 729 0 +867 46 163 8 936 946 10 0 197 +868 455 168 21 877 887 10 0 108 +869 428 202 24 914 924 10 0 568 +870 432 199 -21 0 1726 10 611 0 +871 391 112 24 1010 1020 10 0 661 +872 451 305 13 208 218 10 0 219 +873 214 311 14 70 80 10 0 743 +874 465 367 14 0 1671 10 0 803 +875 164 473 -17 306 316 10 249 0 +876 364 173 30 190 200 10 0 921 +877 274 261 -22 1717 1727 10 694 0 +878 133 455 -2 818 828 10 324 0 +879 351 481 -7 332 342 10 943 0 +880 115 395 -6 825 835 10 208 0 +881 297 304 4 71 81 10 0 65 +882 7 194 29 0 1666 10 0 765 +883 409 255 -19 0 1756 10 89 0 +884 87 213 -16 636 646 10 394 0 +885 60 246 25 0 1725 10 0 863 +886 3 471 13 0 1584 0 0 1004 +887 418 251 21 1207 1217 10 0 831 +888 153 362 -20 0 1767 10 234 0 +889 323 77 36 0 1728 10 0 360 +890 143 158 12 148 158 10 0 948 +891 351 148 -18 471 481 10 911 0 +892 426 38 23 619 629 10 0 271 +893 226 316 21 70 80 10 0 451 +894 347 192 -14 1498 1508 10 978 0 +895 102 6 -21 1468 1478 10 113 0 +896 41 120 22 706 716 10 0 985 +897 247 443 -15 340 350 10 700 0 +898 218 271 -23 1584 1594 10 834 0 +899 376 385 12 184 194 10 0 216 +900 241 402 -28 0 1763 10 432 0 +901 213 399 18 244 254 10 0 425 +902 32 191 5 596 606 10 0 151 +903 441 374 10 233 243 10 0 405 +904 376 113 8 0 1729 10 0 778 +905 215 434 -5 0 1728 10 919 0 +906 499 316 -29 0 1658 10 764 0 +907 318 497 -20 0 1659 10 662 0 +908 256 441 -30 0 1724 10 641 0 +909 174 397 -11 1255 1265 10 479 0 +910 468 360 16 284 294 10 0 188 +911 287 256 18 37 47 10 0 891 +912 448 397 33 876 886 10 0 594 +913 352 487 -17 912 922 10 972 0 +914 253 118 -12 557 567 10 165 0 +915 159 299 12 1026 1036 10 0 264 +916 351 233 -18 1433 1443 10 745 0 +917 268 113 21 0 1777 10 0 277 +918 164 332 19 1290 1300 0 0 1021 +919 88 484 5 0 1631 10 0 905 +920 360 488 -18 0 1653 10 7 0 +921 343 166 -30 886 896 10 876 0 +922 497 266 25 758 768 10 0 43 +923 138 406 -18 1226 1236 10 171 0 +924 420 224 10 439 449 10 0 357 +925 231 410 14 0 1754 10 0 293 +926 199 438 3 0 1721 10 0 183 +927 219 215 -20 0 1869 10 854 0 +928 365 274 14 117 127 10 0 725 +929 481 454 -23 0 1607 10 969 0 +930 187 61 -6 555 565 10 846 0 +931 372 97 13 224 234 10 0 720 +932 187 263 35 64 74 10 0 753 +933 371 427 23 0 1701 10 0 5 +934 74 215 -1 239 249 10 1000 0 +935 375 145 12 939 949 10 0 782 +936 365 28 9 278 288 10 0 642 +937 118 314 -22 348 358 10 423 0 +938 60 29 -3 1373 1383 10 252 0 +939 478 300 12 0 1682 10 0 215 +940 33 152 -16 1330 1340 10 715 0 +941 347 184 -21 1089 1099 10 590 0 +942 94 40 24 1078 1088 0 0 1034 +943 290 328 7 154 164 10 0 879 +944 96 346 26 0 1734 10 0 664 +945 97 288 -12 1294 1304 10 325 0 +946 176 470 14 557 567 10 0 353 +947 206 97 -28 0 1756 10 103 0 +948 210 133 -12 699 709 10 890 0 +949 489 457 13 0 1599 10 0 825 +950 418 399 20 448 458 10 0 996 +951 392 491 10 0 1636 10 0 783 +952 437 19 -3 1024 1034 10 154 0 +953 495 83 -17 0 1619 10 268 0 +954 468 352 -23 778 788 10 180 0 +955 390 120 -5 1014 1024 10 286 0 +956 80 357 -7 540 550 10 544 0 +957 394 310 -5 0 1759 10 622 0 +958 61 441 -23 554 564 10 708 0 +959 52 303 25 451 461 10 0 160 +960 391 202 14 0 1767 0 0 1040 +961 36 451 -34 0 1622 10 23 0 +962 276 84 -17 0 1747 10 709 0 +963 130 140 17 204 214 10 0 111 +964 16 287 -16 0 1679 10 836 0 +965 292 136 28 791 801 10 0 13 +966 53 204 8 1065 1075 10 0 386 +967 359 287 24 0 1800 10 0 741 +968 309 29 -40 1304 1314 10 660 0 +969 473 491 23 0 1587 10 0 929 +970 273 255 -29 1502 1512 10 93 0 +971 263 153 12 0 1818 10 0 339 +972 328 458 17 778 788 10 0 913 +973 401 164 13 0 1742 10 0 406 +974 480 119 7 638 648 10 0 169 +975 488 96 22 1076 1086 0 0 1027 +976 149 98 4 1175 1185 10 0 865 +977 49 437 7 437 447 10 0 768 +978 440 77 14 0 1659 10 0 894 +979 43 135 31 236 246 10 0 428 +980 188 151 -26 1307 1317 10 702 0 +981 175 422 -25 1456 1466 10 333 0 +982 48 437 4 814 824 10 0 284 +983 334 403 26 174 184 10 0 644 +984 372 115 13 374 384 10 0 508 +985 111 192 -22 1209 1219 10 896 0 +986 357 290 24 114 124 10 0 789 +987 331 134 -27 1134 1144 10 112 0 +988 495 199 -9 347 357 10 54 0 +989 441 60 21 1469 1479 10 0 193 +990 51 89 19 1218 1228 10 0 603 +991 452 206 31 502 512 10 0 100 +992 195 386 13 146 156 10 0 99 +993 172 24 -14 1462 1472 10 107 0 +994 408 318 15 0 1743 10 0 319 +995 410 399 -30 244 254 10 28 0 +996 413 345 -20 1228 1238 10 950 0 +997 215 129 -10 1129 1139 10 617 0 +998 380 350 15 876 886 10 0 355 +999 19 38 15 857 867 10 0 30 +1000 166 247 1 84 94 10 0 934 +1001 295 247 -12 1313 1323 10 257 0 +1002 87 3 -13 0 1620 10 385 0 +1003 447 184 -27 434 444 10 575 0 +1004 3 471 -13 0 1584 10 886 0 +1005 317 45 -8 0 1700 10 184 0 +1006 303 186 -10 1364 1374 10 105 0 +1007 460 328 -13 229 239 10 536 0 +1008 79 80 -19 1392 1402 10 855 0 +1009 214 274 -24 0 1872 10 721 0 +1010 20 480 -25 0 1590 10 167 0 +1011 341 59 -27 800 810 10 576 0 +1012 147 30 -26 1119 1129 10 162 0 +1013 244 277 -18 1311 1321 10 527 0 +1014 402 277 -5 1448 1458 10 810 0 +1015 208 445 -22 1342 1352 10 238 0 +1016 158 179 -37 0 1799 10 655 0 +1017 330 308 -24 1180 1190 10 635 0 +1018 376 92 -10 0 1713 10 494 0 +1019 130 247 -17 120 130 10 746 0 +1020 237 420 -15 1344 1354 10 851 0 +1021 164 332 -19 1290 1300 10 918 0 +1022 142 14 -18 845 855 10 483 0 +1023 215 293 -13 55 65 10 235 0 +1024 124 111 -15 0 1728 10 246 0 +1025 24 259 -19 0 1689 10 493 0 +1026 384 149 -18 1207 1217 10 163 0 +1027 488 96 -22 1076 1086 10 975 0 +1028 421 387 -15 811 821 10 475 0 +1029 186 135 -24 0 1784 10 189 0 +1030 439 222 -22 990 1000 10 826 0 +1031 269 112 -19 1273 1283 10 318 0 +1032 346 354 -8 0 1774 10 852 0 +1033 389 156 -27 726 736 10 170 0 +1034 94 40 -24 1078 1088 10 942 0 +1035 9 233 -31 316 326 10 657 0 +1036 173 65 -12 458 468 10 403 0 +1037 320 211 -16 1003 1013 10 537 0 +1038 44 440 -24 0 1635 10 574 0 +1039 126 391 -19 283 293 10 199 0 +1040 391 202 -14 0 1767 10 960 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1103.txt b/jsprit-instances/instances/lilim/1000/LR1103.txt new file mode 100644 index 00000000..78ea548b --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1103.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 21 1153 1163 10 0 815 +2 67 190 -15 1183 1193 10 337 0 +3 80 400 -6 0 1689 10 481 0 +4 439 237 -29 949 959 10 67 0 +5 377 385 -23 876 886 10 310 0 +6 449 428 -12 1257 1267 10 228 0 +7 342 481 -35 1450 1460 10 631 0 +8 466 149 16 1196 1206 10 0 153 +9 83 290 -5 0 1744 10 289 0 +10 251 63 -19 997 1007 10 930 0 +11 328 491 -3 0 1662 10 457 0 +12 260 472 -5 0 1693 10 413 0 +13 290 145 -15 1292 1302 10 309 0 +14 266 221 9 0 1882 10 0 406 +15 164 320 -6 1105 1115 10 373 0 +16 52 412 22 0 1660 10 0 504 +17 485 104 21 804 814 10 0 378 +18 144 331 -13 0 1782 10 117 0 +19 387 394 8 0 1717 10 0 825 +20 472 57 -14 0 1621 10 818 0 +21 343 276 -29 0 1819 10 93 0 +22 104 349 20 0 1739 10 0 166 +23 28 467 -22 1353 1363 10 243 0 +24 91 427 -46 893 903 10 496 0 +25 429 476 23 0 1627 10 0 34 +26 210 276 -20 0 1868 10 312 0 +27 58 39 -35 0 1630 10 488 0 +28 273 300 30 55 65 10 0 790 +29 41 232 16 0 1706 10 0 315 +30 25 53 23 1030 1040 10 0 246 +31 52 18 -32 867 877 10 534 0 +32 27 444 -4 1090 1100 10 982 0 +33 178 72 23 767 777 10 0 980 +34 406 460 -23 729 739 10 25 0 +35 250 328 24 259 269 10 0 704 +36 492 34 -8 0 1591 10 839 0 +37 412 100 -13 0 1695 10 204 0 +38 233 87 18 0 1752 10 0 513 +39 60 5 18 1054 1064 10 0 385 +40 406 408 15 0 1693 10 0 381 +41 245 42 24 557 567 10 0 821 +42 166 345 -22 1140 1150 10 489 0 +43 440 294 -12 970 980 10 732 0 +44 370 382 11 894 904 10 0 862 +45 32 319 -13 411 421 10 335 0 +46 480 136 22 0 1659 10 0 131 +47 371 163 -30 838 848 10 876 0 +48 0 188 26 0 1658 10 0 231 +49 438 5 -26 0 1607 10 326 0 +50 132 477 -11 337 347 10 80 0 +51 203 211 20 0 1854 10 0 449 +52 2 264 40 0 1667 10 0 836 +53 231 167 15 0 1830 10 0 106 +54 423 221 9 0 1740 10 0 831 +55 459 53 20 0 1628 10 0 778 +56 386 154 -16 1111 1121 10 181 0 +57 130 494 6 0 1644 10 0 779 +58 31 175 -10 0 1684 10 616 0 +59 69 423 -27 812 822 10 958 0 +60 352 241 5 802 812 10 0 735 +61 261 201 -12 1524 1534 10 165 0 +62 59 276 11 902 912 10 0 687 +63 146 188 -19 1245 1255 10 528 0 +64 451 62 5 0 1640 10 0 668 +65 299 285 -23 1264 1274 10 142 0 +66 142 372 18 0 1753 10 0 549 +67 440 201 29 903 913 10 0 4 +68 219 210 14 50 60 10 0 144 +69 64 198 -18 0 1722 10 140 0 +70 390 249 21 592 602 10 0 787 +71 9 101 16 676 686 10 0 552 +72 424 288 -10 1067 1077 10 924 0 +73 77 372 19 211 221 10 0 843 +74 298 264 36 50 60 10 0 712 +75 405 454 -23 0 1659 10 118 0 +76 407 35 -2 0 1649 10 169 0 +77 225 369 38 0 1794 10 0 253 +78 347 459 25 489 499 10 0 907 +79 117 178 28 0 1764 10 0 788 +80 132 479 11 257 267 10 0 50 +81 201 66 -22 0 1725 10 798 0 +82 245 176 20 0 1841 10 0 785 +83 470 138 -13 1399 1409 10 756 0 +84 115 296 -28 1539 1549 10 430 0 +85 348 476 -17 1207 1217 10 522 0 +86 43 210 20 210 220 10 0 416 +87 327 139 -10 1267 1277 10 271 0 +88 49 353 -12 1456 1466 10 205 0 +89 356 256 19 106 116 10 0 678 +90 335 99 25 0 1742 10 0 221 +91 363 34 19 282 292 10 0 624 +92 33 278 -5 0 1697 10 305 0 +93 366 288 29 694 704 10 0 21 +94 452 172 9 0 1699 10 0 676 +95 86 189 -23 237 247 10 731 0 +96 262 369 -6 0 1796 10 776 0 +97 218 403 15 0 1759 10 0 900 +98 218 12 3 0 1675 0 0 1022 +99 228 399 14 0 1765 10 0 501 +100 492 188 33 0 1666 10 0 168 +101 267 174 -23 1628 1638 10 773 0 +102 274 441 12 0 1723 10 0 237 +103 210 113 -33 700 710 10 947 0 +104 370 262 -19 1109 1119 10 139 0 +105 303 186 -13 1364 1374 10 505 0 +106 241 180 -15 1705 1715 10 53 0 +107 100 85 -2 0 1693 10 556 0 +108 350 199 21 0 1803 10 0 297 +109 500 228 8 0 1665 10 0 922 +110 251 238 -26 0 1903 10 407 0 +111 114 102 -19 0 1715 10 855 0 +112 345 146 -20 0 1775 10 854 0 +113 21 146 -6 497 507 10 296 0 +114 330 147 -15 858 868 10 218 0 +115 476 61 -2 0 1621 10 711 0 +116 386 245 -15 0 1779 10 322 0 +117 201 278 13 0 1859 10 0 18 +118 421 499 23 0 1613 10 0 75 +119 426 231 -14 1038 1048 10 928 0 +120 105 137 -22 462 472 10 515 0 +121 64 437 11 928 938 10 0 284 +122 181 260 -27 0 1846 10 264 0 +123 413 391 -23 0 1700 10 969 0 +124 370 493 -10 581 591 10 391 0 +125 447 267 19 990 1000 10 0 554 +126 232 101 -19 0 1765 10 610 0 +127 371 332 14 540 550 10 0 771 +128 447 383 -17 0 1678 10 806 0 +129 325 147 14 0 1788 10 0 767 +130 489 437 29 717 727 10 0 233 +131 415 95 -22 1187 1197 10 46 0 +132 331 356 -16 0 1782 10 760 0 +133 374 346 27 0 1759 10 0 649 +134 108 37 -28 559 569 10 279 0 +135 5 224 -29 0 1669 10 882 0 +136 93 413 17 226 236 10 0 738 +137 210 29 -23 0 1691 10 795 0 +138 136 265 -12 0 1801 10 426 0 +139 409 155 19 0 1730 10 0 104 +140 111 178 18 156 166 10 0 69 +141 291 251 20 41 51 10 0 319 +142 322 290 23 0 1833 10 0 65 +143 57 183 -17 0 1711 10 940 0 +144 181 185 -14 0 1821 10 68 0 +145 7 382 -26 780 790 10 858 0 +146 425 448 9 804 814 10 0 912 +147 174 41 -26 0 1693 10 702 0 +148 161 276 8 143 153 10 0 585 +149 398 49 21 0 1666 10 0 314 +150 210 379 -15 719 729 10 851 0 +151 60 231 32 0 1725 10 0 748 +152 453 360 13 230 240 10 0 750 +153 367 97 -16 0 1723 10 8 0 +154 488 3 -32 0 1572 10 953 0 +155 44 115 24 246 256 10 0 338 +156 48 293 -18 0 1709 10 719 0 +157 64 135 11 0 1697 10 0 492 +158 65 62 15 0 1652 10 0 472 +159 404 207 6 0 1756 10 0 357 +160 68 303 -7 0 1726 10 544 0 +161 263 418 25 288 298 10 0 425 +162 147 30 -18 1119 1129 10 483 0 +163 384 149 18 0 1748 10 0 935 +164 340 416 36 0 1727 10 0 682 +165 271 128 12 0 1792 10 0 61 +166 89 358 -20 0 1722 10 22 0 +167 20 480 25 0 1590 0 0 1005 +168 488 173 -33 0 1665 10 100 0 +169 439 156 2 0 1704 10 0 76 +170 389 156 27 726 736 10 0 658 +171 111 392 -9 0 1717 10 308 0 +172 267 162 -19 1459 1469 10 318 0 +173 248 176 32 0 1841 10 0 761 +174 413 476 -10 1189 1199 10 951 0 +175 352 481 -22 1295 1305 10 749 0 +176 264 135 1 0 1800 10 0 987 +177 29 462 17 1320 1330 10 0 282 +178 148 462 -23 737 747 10 476 0 +179 44 140 -26 878 888 10 588 0 +180 414 378 23 505 515 10 0 485 +181 392 95 16 776 786 10 0 56 +182 216 341 -26 664 674 10 607 0 +183 211 411 -31 0 1750 10 203 0 +184 317 45 8 0 1700 10 0 660 +185 178 150 -26 642 652 10 516 0 +186 428 302 -24 1026 1036 10 343 0 +187 450 45 -14 0 1629 10 372 0 +188 453 318 30 0 1701 10 0 219 +189 186 135 -37 0 1784 10 655 0 +190 11 403 18 353 363 10 0 717 +191 433 447 -7 804 814 10 207 0 +192 272 420 7 1396 1406 10 0 671 +193 429 59 -21 0 1654 10 989 0 +194 200 27 22 535 545 10 0 864 +195 498 171 -14 0 1655 10 648 0 +196 487 320 21 868 878 10 0 565 +197 45 166 -15 1023 1033 10 446 0 +198 490 276 -21 0 1674 10 590 0 +199 126 391 19 0 1728 10 0 909 +200 92 18 8 0 1635 10 0 976 +201 293 228 19 0 1867 10 0 267 +202 343 205 26 0 1812 10 0 679 +203 182 480 31 0 1676 10 0 183 +204 385 285 13 878 888 10 0 37 +205 44 344 12 1089 1099 10 0 88 +206 170 347 15 0 1790 10 0 384 +207 457 492 7 0 1597 10 0 191 +208 124 448 6 379 389 10 0 251 +209 398 210 -13 0 1762 10 827 0 +210 75 118 21 419 429 10 0 275 +211 105 474 -19 481 491 10 768 0 +212 134 211 -23 130 140 10 606 0 +213 211 248 26 39 49 10 0 547 +214 212 186 11 1732 1742 0 0 1020 +215 492 335 -13 0 1659 10 872 0 +216 497 483 12 363 373 10 0 822 +217 440 436 -18 0 1650 10 814 0 +218 311 203 15 733 743 10 0 114 +219 491 369 -30 0 1647 10 188 0 +220 67 378 -13 480 490 10 235 0 +221 383 17 -25 950 960 10 90 0 +222 7 82 25 422 432 10 0 857 +223 342 319 -20 0 1800 10 996 0 +224 78 406 -15 970 980 10 961 0 +225 103 123 8 500 510 10 0 428 +226 241 38 -30 0 1703 10 780 0 +227 224 3 -27 700 710 10 691 0 +228 436 467 12 746 756 10 0 6 +229 438 488 -25 0 1612 10 550 0 +230 351 60 -18 0 1700 10 842 0 +231 13 214 -26 1364 1374 10 48 0 +232 429 67 -11 742 752 10 793 0 +233 498 456 -29 0 1593 10 130 0 +234 135 400 20 0 1726 10 0 479 +235 215 293 13 55 65 10 0 220 +236 354 416 10 0 1720 10 0 852 +237 294 421 -12 1585 1595 10 102 0 +238 208 445 22 0 1716 10 0 484 +239 230 320 -25 1202 1212 10 878 0 +240 157 38 -24 0 1684 10 942 0 +241 441 100 31 0 1673 10 0 720 +242 61 170 20 1016 1026 10 0 807 +243 79 467 22 361 371 10 0 23 +244 365 190 -14 1487 1497 10 605 0 +245 282 1 18 0 1664 10 0 366 +246 124 111 -23 0 1728 10 30 0 +247 247 219 17 0 1884 0 0 1011 +248 28 180 -18 0 1683 10 884 0 +249 167 488 17 260 270 10 0 436 +250 442 289 25 0 1720 10 0 810 +251 136 430 -6 0 1702 10 208 0 +252 38 15 3 0 1599 10 0 354 +253 246 314 -38 1455 1465 10 77 0 +254 176 200 17 578 588 10 0 796 +255 337 232 -12 1581 1591 10 510 0 +256 257 133 -13 0 1798 10 580 0 +257 295 247 12 1313 1323 0 0 1015 +258 39 162 18 575 585 10 0 867 +259 79 257 -26 963 973 10 495 0 +260 236 126 -24 0 1791 10 499 0 +261 259 498 -14 1085 1095 10 412 0 +262 180 162 -13 0 1803 10 307 0 +263 53 466 9 345 355 10 0 574 +264 167 291 27 1644 1654 10 0 122 +265 89 185 16 610 620 10 0 386 +266 487 446 -10 0 1608 10 903 0 +267 308 199 -19 0 1838 10 201 0 +268 481 84 -24 516 526 10 376 0 +269 495 227 -7 0 1669 10 725 0 +270 397 57 -12 0 1673 10 692 0 +271 372 39 10 0 1672 10 0 87 +272 278 450 29 1385 1395 0 0 1029 +273 292 32 -1 239 249 10 847 0 +274 90 496 13 0 1622 10 0 693 +275 68 53 -21 749 759 10 210 0 +276 371 423 10 0 1704 0 0 1030 +277 273 149 14 0 1812 10 0 360 +278 297 283 28 0 1858 0 0 1037 +279 120 37 28 0 1666 10 0 134 +280 371 488 -10 0 1649 10 879 0 +281 206 174 -32 0 1828 10 781 0 +282 174 347 -17 0 1792 10 177 0 +283 330 281 -3 1340 1350 10 301 0 +284 67 451 -11 1226 1236 10 121 0 +285 27 464 -31 0 1606 10 520 0 +286 361 178 -30 0 1783 10 891 0 +287 463 406 -13 867 877 10 949 0 +288 456 157 -30 0 1689 10 508 0 +289 153 244 5 118 128 10 0 9 +290 153 192 -27 0 1802 10 433 0 +291 352 63 -21 1188 1198 10 434 0 +292 371 71 21 0 1699 10 0 311 +293 163 472 9 663 673 10 0 432 +294 448 495 -4 394 404 10 881 0 +295 282 10 30 0 1673 10 0 784 +296 66 163 6 405 415 10 0 113 +297 314 205 -21 1537 1547 10 108 0 +298 83 169 21 0 1730 10 0 393 +299 221 291 -11 0 1865 10 880 0 +300 374 116 9 597 607 10 0 351 +301 418 269 3 0 1746 10 0 283 +302 178 302 -8 897 907 10 411 0 +303 250 57 26 0 1722 10 0 805 +304 475 352 33 0 1668 10 0 555 +305 1 252 5 0 1666 10 0 92 +306 286 356 30 0 1804 10 0 355 +307 65 82 13 750 760 10 0 262 +308 154 392 9 171 181 10 0 171 +309 196 56 15 0 1714 10 0 13 +310 366 390 23 0 1734 10 0 5 +311 436 25 -21 1292 1302 10 292 0 +312 67 352 20 0 1706 10 0 26 +313 173 182 25 102 112 10 0 829 +314 390 34 -21 1070 1080 10 149 0 +315 18 225 -16 0 1682 10 29 0 +316 57 43 -14 0 1632 10 521 0 +317 388 44 22 1141 1151 10 0 984 +318 269 112 19 1273 1283 10 0 172 +319 374 260 -20 0 1791 10 141 0 +320 291 213 -16 1268 1278 10 537 0 +321 178 420 -29 1081 1091 10 453 0 +322 389 255 15 795 805 10 0 116 +323 134 194 -1 1662 1672 10 638 0 +324 93 490 -18 389 399 10 582 0 +325 64 294 -25 0 1724 10 959 0 +326 493 111 26 551 561 10 0 49 +327 150 484 16 0 1661 10 0 352 +328 235 316 2 666 676 0 0 1003 +329 239 15 2 0 1680 10 0 542 +330 193 138 30 0 1790 10 0 643 +331 40 278 10 0 1704 10 0 964 +332 307 52 23 0 1709 10 0 689 +333 161 416 -7 0 1727 10 977 0 +334 381 457 -7 481 491 10 943 0 +335 55 318 13 322 332 10 0 45 +336 80 279 -28 0 1743 10 525 0 +337 48 162 15 227 237 10 0 2 +338 91 27 -24 1192 1202 10 155 0 +339 288 70 24 189 199 10 0 674 +340 177 404 17 0 1745 10 0 408 +341 10 237 19 626 636 10 0 392 +342 493 493 20 866 876 0 0 1041 +343 440 292 24 950 960 10 0 186 +344 349 76 -28 1041 1051 10 965 0 +345 47 208 30 236 246 10 0 409 +346 283 454 -32 0 1709 10 533 0 +347 486 324 -14 0 1668 10 438 0 +348 392 87 -30 0 1699 10 359 0 +349 122 422 -13 1467 1477 10 886 0 +350 37 281 -27 503 513 10 442 0 +351 413 127 -9 841 851 10 300 0 +352 222 499 -16 855 865 10 327 0 +353 211 446 15 0 1716 10 0 460 +354 30 7 -3 1199 1209 10 252 0 +355 398 341 -30 949 959 10 306 0 +356 26 67 15 1327 1337 0 0 1001 +357 461 186 -6 0 1695 10 159 0 +358 313 391 5 0 1761 10 0 920 +359 471 94 30 0 1645 10 0 348 +360 341 72 -14 815 825 10 277 0 +361 130 186 -17 141 151 10 673 0 +362 257 57 18 0 1722 10 0 396 +363 94 344 -26 0 1733 10 944 0 +364 6 53 -11 0 1602 10 786 0 +365 146 376 -36 244 254 10 690 0 +366 244 13 -18 1023 1033 10 245 0 +367 29 336 -13 0 1678 10 698 0 +368 306 42 11 0 1700 10 0 962 +369 177 486 -14 0 1668 10 837 0 +370 489 338 -19 1407 1417 10 861 0 +371 179 318 -32 1131 1141 10 418 0 +372 344 203 14 177 187 10 0 187 +373 149 341 6 414 424 10 0 15 +374 307 412 -29 0 1744 10 615 0 +375 68 450 18 643 653 10 0 769 +376 420 80 24 0 1675 10 0 268 +377 144 220 -16 0 1805 10 394 0 +378 497 54 -21 988 998 10 17 0 +379 80 458 -23 381 391 10 597 0 +380 84 377 -22 0 1706 10 517 0 +381 332 382 -15 1020 1030 10 40 0 +382 6 196 20 1213 1223 0 0 1046 +383 104 28 8 0 1650 10 0 740 +384 224 320 -15 1294 1304 10 206 0 +385 87 3 -18 0 1620 10 39 0 +386 149 214 -16 0 1808 10 265 0 +387 98 29 -22 0 1647 10 896 0 +388 135 30 -18 0 1667 10 577 0 +389 287 397 12 574 584 10 0 526 +390 107 374 -20 924 934 10 681 0 +391 355 485 10 0 1658 10 0 124 +392 51 286 -19 1469 1479 10 341 0 +393 49 118 -21 0 1675 10 298 0 +394 159 226 16 94 104 10 0 377 +395 185 431 -16 0 1723 10 840 0 +396 262 92 -18 0 1757 10 362 0 +397 475 198 -33 0 1685 10 463 0 +398 142 30 32 0 1670 10 0 993 +399 481 207 34 0 1681 10 0 506 +400 174 122 14 603 613 10 0 502 +401 35 263 27 280 290 10 0 593 +402 24 71 11 356 366 10 0 990 +403 173 65 12 458 468 10 0 429 +404 91 326 4 0 1739 10 0 596 +405 470 417 -8 747 757 10 420 0 +406 397 153 -9 892 902 10 14 0 +407 295 283 26 0 1860 10 0 110 +408 174 376 -17 0 1768 10 340 0 +409 38 190 -30 0 1695 10 345 0 +410 16 68 -10 0 1619 10 503 0 +411 179 286 8 0 1836 10 0 302 +412 244 422 14 548 558 10 0 261 +413 250 441 5 0 1724 10 0 12 +414 497 18 -22 0 1577 10 975 0 +415 195 111 -7 1008 1018 10 667 0 +416 26 221 -20 1006 1016 10 86 0 +417 442 5 -31 330 340 10 650 0 +418 44 496 32 0 1595 10 0 371 +419 448 404 -25 0 1665 10 579 0 +420 471 427 8 0 1632 10 0 405 +421 460 424 11 1465 1475 10 0 594 +422 461 195 -25 0 1697 10 988 0 +423 146 313 22 0 1794 10 0 937 +424 19 273 25 1027 1037 0 0 1032 +425 245 461 -25 659 669 10 161 0 +426 69 266 12 0 1734 10 0 138 +427 191 84 -13 877 887 10 724 0 +428 68 160 -8 0 1712 10 225 0 +429 212 47 -12 811 821 10 403 0 +430 80 337 28 0 1725 10 0 84 +431 412 478 -21 0 1636 10 835 0 +432 225 488 -9 0 1676 10 293 0 +433 105 140 27 0 1733 10 0 290 +434 389 43 21 0 1666 10 0 291 +435 177 156 -32 0 1796 10 927 0 +436 179 497 -17 1421 1431 10 249 0 +437 377 432 -26 841 851 10 983 0 +438 497 296 14 623 633 10 0 347 +439 152 476 45 533 543 10 0 545 +440 277 428 -9 500 510 10 799 0 +441 64 5 -25 1139 1149 10 604 0 +442 44 311 27 0 1701 10 0 350 +443 165 59 27 953 963 10 0 747 +444 261 138 1 0 1803 0 0 1035 +445 268 351 -15 0 1813 10 474 0 +446 48 150 15 0 1690 10 0 197 +447 215 79 5 0 1741 0 0 1036 +448 109 56 27 239 249 10 0 701 +449 171 188 -20 631 641 10 51 0 +450 284 457 -20 0 1706 10 626 0 +451 274 442 17 0 1722 10 0 656 +452 33 286 -25 0 1696 10 885 0 +453 112 433 29 0 1686 10 0 321 +454 423 170 -9 523 533 10 486 0 +455 213 283 -21 0 1866 10 461 0 +456 240 34 28 0 1699 0 0 1024 +457 283 438 3 241 251 10 0 11 +458 324 99 -18 0 1747 10 473 0 +459 259 301 25 0 1864 10 0 751 +460 189 402 -15 0 1752 10 353 0 +461 215 282 21 1450 1460 10 0 455 +462 166 440 -13 0 1708 10 670 0 +463 374 232 33 125 135 10 0 397 +464 339 113 14 0 1752 0 0 1027 +465 335 46 -2 0 1694 10 599 0 +466 313 493 -17 1203 1213 10 972 0 +467 432 66 -14 0 1657 10 978 0 +468 76 462 -23 966 976 10 708 0 +469 397 477 13 0 1645 10 0 511 +470 196 489 -14 1040 1050 10 946 0 +471 354 156 20 0 1775 10 0 706 +472 171 24 -15 1393 1403 10 158 0 +473 187 73 18 302 312 10 0 458 +474 243 408 15 0 1757 10 0 445 +475 421 387 -26 0 1696 10 696 0 +476 141 426 23 541 551 10 0 178 +477 415 118 -25 0 1704 10 695 0 +478 240 255 -14 1621 1631 10 844 0 +479 162 388 -20 1136 1146 10 234 0 +480 413 493 26 0 1623 10 0 705 +481 69 414 6 1273 1283 10 0 3 +482 273 70 -27 629 639 10 675 0 +483 142 14 18 845 855 10 0 162 +484 185 434 -22 0 1720 10 238 0 +485 360 294 -23 0 1797 10 180 0 +486 265 240 9 18 28 10 0 454 +487 280 245 21 30 40 10 0 530 +488 87 51 35 0 1658 10 0 27 +489 195 273 22 59 69 10 0 42 +490 422 498 -26 702 712 10 727 0 +491 95 64 -33 776 786 10 758 0 +492 63 155 -11 0 1706 10 157 0 +493 24 259 -23 0 1689 10 755 0 +494 376 92 10 0 1713 0 0 1007 +495 83 300 26 510 520 10 0 259 +496 72 477 46 288 298 10 0 24 +497 380 194 3 0 1774 0 0 1023 +498 72 227 25 0 1736 10 0 824 +499 238 123 24 791 801 10 0 260 +500 188 119 -17 985 995 10 627 0 +501 229 322 -14 0 1840 10 99 0 +502 150 68 -14 0 1708 10 400 0 +503 67 24 10 0 1625 10 0 410 +504 63 420 -22 0 1663 10 16 0 +505 339 144 13 1109 1119 10 0 105 +506 454 201 -34 0 1706 10 399 0 +507 158 24 18 0 1671 10 0 846 +508 365 119 30 392 402 10 0 288 +509 440 284 25 862 872 10 0 714 +510 417 212 12 920 930 10 0 255 +511 404 439 -13 0 1672 10 469 0 +512 472 248 -23 0 1693 10 883 0 +513 235 108 -18 0 1773 10 38 0 +514 174 67 -10 0 1717 10 617 0 +515 132 151 22 154 164 10 0 120 +516 217 207 26 0 1861 10 0 185 +517 162 306 22 129 139 10 0 380 +518 48 366 29 0 1683 10 0 551 +519 209 68 27 0 1729 0 0 1028 +520 94 497 31 0 1623 10 0 285 +521 110 122 14 0 1726 10 0 316 +522 274 403 17 0 1761 10 0 85 +523 421 386 29 834 844 10 0 957 +524 399 175 13 757 767 10 0 921 +525 56 268 28 1074 1084 10 0 336 +526 322 406 -12 0 1744 10 389 0 +527 244 277 -30 1311 1321 10 641 0 +528 105 181 19 0 1755 10 0 63 +529 30 97 -9 1220 1230 10 832 0 +530 359 246 -21 0 1806 10 487 0 +531 498 457 -12 0 1592 10 899 0 +532 190 267 36 0 1853 10 0 770 +533 334 481 32 0 1670 10 0 346 +534 18 24 32 638 648 10 0 31 +535 482 104 -2 0 1641 10 560 0 +536 460 328 13 0 1691 10 0 716 +537 320 211 16 1003 1013 10 0 320 +538 494 165 19 0 1657 10 0 602 +539 167 445 7 0 1704 10 0 619 +540 340 291 22 480 490 10 0 741 +541 272 234 26 1600 1610 0 0 1043 +542 325 56 -2 806 816 10 329 0 +543 71 304 19 699 709 10 0 586 +544 87 311 7 0 1741 10 0 160 +545 207 487 -45 0 1675 10 439 0 +546 332 5 -7 1043 1053 10 564 0 +547 161 275 -26 0 1823 10 213 0 +548 268 458 24 533 543 10 0 834 +549 175 352 -18 0 1789 10 66 0 +550 398 476 25 0 1645 10 0 229 +551 51 360 -29 1155 1165 10 518 0 +552 21 70 -16 781 791 10 71 0 +553 80 251 14 314 324 10 0 723 +554 457 280 -19 1010 1020 10 125 0 +555 423 315 -33 0 1731 10 304 0 +556 66 88 2 0 1670 10 0 107 +557 479 387 13 0 1649 0 0 1006 +558 436 123 40 0 1690 10 0 868 +559 286 244 -13 1294 1304 10 743 0 +560 449 190 2 1150 1160 10 0 535 +561 456 113 -13 1237 1247 10 973 0 +562 480 152 26 0 1665 10 0 592 +563 100 266 5 480 490 0 0 1042 +564 343 34 7 0 1680 10 0 546 +565 374 306 -21 1004 1014 10 196 0 +566 13 465 -5 784 794 10 919 0 +567 230 487 20 1140 1150 0 0 1013 +568 442 153 29 0 1700 10 0 575 +569 240 362 -21 0 1803 10 893 0 +570 433 319 -29 0 1720 10 764 0 +571 0 422 8 831 841 0 0 1016 +572 297 131 25 0 1788 10 0 645 +573 71 12 2 303 313 10 0 999 +574 44 440 -9 0 1635 10 263 0 +575 447 184 -29 0 1708 10 568 0 +576 341 59 -36 800 810 10 889 0 +577 132 32 18 794 804 10 0 388 +578 411 396 -20 0 1698 10 950 0 +579 450 416 25 0 1656 10 0 419 +580 323 34 13 0 1687 10 0 256 +581 244 368 25 424 434 10 0 630 +582 90 477 18 277 287 10 0 324 +583 34 169 11 494 504 10 0 902 +584 351 128 15 0 1757 10 0 598 +585 71 282 -8 0 1734 10 148 0 +586 157 269 -19 1586 1596 10 543 0 +587 392 1 11 615 625 10 0 620 +588 39 153 26 808 818 10 0 179 +589 306 229 -32 1330 1340 10 613 0 +590 415 253 21 377 387 10 0 198 +591 92 76 4 1149 1159 10 0 683 +592 437 98 -26 1124 1134 10 562 0 +593 12 367 -27 0 1650 10 401 0 +594 448 414 -11 0 1658 10 421 0 +595 128 113 -12 373 383 10 890 0 +596 43 360 -4 0 1681 10 404 0 +597 102 422 23 236 246 10 0 379 +598 480 131 -15 698 708 10 584 0 +599 210 81 2 0 1742 10 0 465 +600 432 2 -7 0 1608 10 974 0 +601 396 83 -22 1596 1606 10 809 0 +602 489 159 -19 0 1660 10 538 0 +603 56 75 24 0 1654 10 0 801 +604 66 31 25 0 1629 10 0 441 +605 460 117 14 530 540 10 0 244 +606 175 239 23 75 85 10 0 212 +607 217 333 26 0 1826 10 0 182 +608 62 375 16 359 369 10 0 956 +609 82 183 -24 1112 1122 10 666 0 +610 248 214 19 0 1879 10 0 126 +611 385 239 -31 796 806 10 802 0 +612 371 315 18 0 1778 10 0 722 +613 333 163 32 0 1795 10 0 589 +614 100 66 -8 0 1678 10 726 0 +615 311 422 29 0 1733 10 0 374 +616 153 235 10 98 108 10 0 58 +617 168 109 10 0 1752 10 0 514 +618 284 319 17 0 1839 10 0 783 +619 195 464 -7 0 1695 10 539 0 +620 382 9 -11 0 1641 10 587 0 +621 325 210 -15 0 1830 10 941 0 +622 366 334 5 420 430 10 0 803 +623 200 78 31 0 1736 10 0 632 +624 351 5 -19 506 516 10 91 0 +625 197 202 29 1214 1224 0 0 1021 +626 270 337 20 0 1826 10 0 450 +627 125 65 17 798 808 10 0 500 +628 120 17 -21 289 299 10 699 0 +629 84 255 -10 0 1749 10 934 0 +630 222 331 -25 550 560 10 581 0 +631 332 459 35 379 389 10 0 7 +632 226 175 -31 1704 1714 10 623 0 +633 404 140 -7 1269 1279 10 870 0 +634 223 178 -29 1146 1156 10 800 0 +635 330 308 -18 1180 1190 10 911 0 +636 140 108 -17 0 1736 10 963 0 +637 34 239 -9 0 1699 10 647 0 +638 94 192 1 1090 1100 10 0 323 +639 458 213 22 1138 1148 10 0 661 +640 13 314 14 0 1670 10 0 739 +641 202 391 30 0 1767 10 0 527 +642 339 41 6 466 476 10 0 914 +643 224 56 -30 1196 1206 10 330 0 +644 345 431 12 355 365 10 0 933 +645 292 104 -25 314 324 10 572 0 +646 318 99 -21 1223 1233 10 917 0 +647 46 248 9 824 834 10 0 637 +648 482 184 14 0 1674 10 0 195 +649 411 379 -27 0 1709 10 133 0 +650 293 174 31 87 97 10 0 417 +651 169 305 -18 172 182 10 762 0 +652 394 47 5 323 333 10 0 709 +653 323 29 -26 1147 1157 10 752 0 +654 65 343 38 217 227 10 0 759 +655 158 179 37 0 1799 10 0 189 +656 299 353 -17 0 1801 10 451 0 +657 9 233 31 0 1674 10 0 765 +658 330 138 -27 0 1778 10 170 0 +659 48 412 7 1042 1052 10 0 888 +660 385 17 -8 819 829 10 184 0 +661 382 110 -22 0 1723 10 639 0 +662 336 493 -16 0 1658 10 669 0 +663 181 441 -3 552 562 10 850 0 +664 162 301 -23 1623 1633 10 742 0 +665 1 101 -16 1267 1277 10 715 0 +666 80 117 24 834 844 10 0 609 +667 210 219 7 50 60 10 0 415 +668 404 59 -5 923 933 10 64 0 +669 288 439 16 0 1723 10 0 662 +670 149 458 13 0 1684 10 0 462 +671 257 391 -7 1643 1653 10 192 0 +672 405 349 15 532 542 10 0 998 +673 191 215 17 68 78 10 0 361 +674 231 29 -24 1236 1246 10 339 0 +675 253 50 27 236 246 10 0 482 +676 441 177 -9 1011 1021 10 94 0 +677 5 445 -11 0 1602 10 808 0 +678 463 253 -19 0 1702 10 89 0 +679 435 180 -26 235 245 10 202 0 +680 198 85 28 273 283 10 0 997 +681 59 388 20 673 683 10 0 390 +682 373 418 -36 1269 1279 10 164 0 +683 142 80 -4 0 1714 10 591 0 +684 441 7 20 402 412 10 0 766 +685 33 268 -21 706 716 10 838 0 +686 355 174 33 0 1786 0 0 1031 +687 228 260 -11 1616 1626 10 62 0 +688 114 460 14 0 1665 10 0 923 +689 337 41 -23 1012 1022 10 332 0 +690 154 374 36 0 1759 10 0 365 +691 235 13 27 369 379 10 0 227 +692 303 78 12 179 189 10 0 270 +693 103 464 -13 0 1656 10 274 0 +694 325 311 -27 0 1819 10 713 0 +695 306 235 25 57 67 10 0 477 +696 382 360 26 188 198 10 0 475 +697 235 288 18 0 1875 0 0 1002 +698 0 356 13 0 1644 10 0 367 +699 178 135 21 0 1780 10 0 628 +700 226 423 15 207 217 10 0 897 +701 15 11 -27 962 972 10 448 0 +702 144 35 26 239 249 10 0 147 +703 176 199 28 0 1826 10 0 729 +704 247 306 -24 0 1859 10 35 0 +705 396 417 -26 0 1694 10 480 0 +706 289 220 -20 0 1866 10 471 0 +707 23 235 43 1033 1043 10 0 733 +708 137 377 23 169 179 10 0 468 +709 400 71 -5 0 1682 10 652 0 +710 261 359 10 0 1806 0 0 1034 +711 438 127 2 951 961 10 0 115 +712 318 280 -36 0 1841 10 74 0 +713 333 293 27 627 637 10 0 694 +714 436 295 -25 0 1724 10 509 0 +715 62 94 16 0 1671 10 0 665 +716 495 355 -13 1253 1263 10 536 0 +717 13 394 -18 383 393 10 190 0 +718 172 292 17 0 1827 0 0 1038 +719 14 232 18 0 1679 10 0 156 +720 437 90 -31 0 1669 10 241 0 +721 214 274 -21 0 1872 10 775 0 +722 420 383 -18 0 1700 10 612 0 +723 120 261 -14 803 813 10 553 0 +724 179 75 13 750 760 10 0 427 +725 484 224 7 310 320 10 0 269 +726 214 245 8 36 46 10 0 614 +727 395 474 26 397 407 10 0 490 +728 368 311 14 0 1783 10 0 833 +729 199 203 -28 1467 1477 10 703 0 +730 485 428 -14 1500 1510 10 929 0 +731 86 199 23 0 1744 10 0 95 +732 447 272 12 394 404 10 0 43 +733 40 304 -43 1155 1165 10 707 0 +734 475 267 -22 790 800 10 826 0 +735 482 141 -5 1021 1031 10 60 0 +736 489 274 31 544 554 10 0 939 +737 26 342 12 331 341 10 0 841 +738 139 438 -17 0 1697 10 136 0 +739 12 358 -14 1234 1244 10 640 0 +740 125 61 -8 0 1689 10 383 0 +741 360 284 -22 0 1800 10 540 0 +742 29 358 23 621 631 10 0 664 +743 285 247 13 0 1880 10 0 559 +744 248 386 -18 0 1779 10 901 0 +745 415 207 18 910 920 10 0 782 +746 130 247 17 0 1795 10 0 1000 +747 172 66 -27 1313 1323 10 443 0 +748 92 259 -32 409 419 10 151 0 +749 379 486 22 682 692 10 0 175 +750 452 484 -13 0 1606 10 152 0 +751 268 288 -25 0 1873 10 459 0 +752 349 43 26 229 239 10 0 653 +753 225 269 -16 0 1884 10 898 0 +754 50 383 20 270 280 10 0 859 +755 110 251 23 508 518 10 0 493 +756 461 182 13 0 1694 10 0 83 +757 255 487 19 0 1678 10 0 981 +758 133 202 33 471 481 10 0 491 +759 34 329 -38 1053 1063 10 654 0 +760 368 452 16 680 690 10 0 132 +761 242 106 -32 1278 1288 10 173 0 +762 171 303 18 0 1820 10 0 651 +763 329 456 -27 0 1695 10 913 0 +764 490 286 29 0 1673 10 0 570 +765 61 214 -31 0 1723 10 657 0 +766 365 74 -20 0 1705 10 684 0 +767 321 149 -14 0 1792 10 129 0 +768 84 453 19 0 1653 10 0 211 +769 26 442 -18 0 1620 10 375 0 +770 180 283 -36 754 764 10 532 0 +771 394 322 -14 1035 1045 10 127 0 +772 348 348 -9 945 955 10 848 0 +773 309 161 23 0 1809 10 0 101 +774 385 58 -9 0 1681 10 936 0 +775 228 287 21 43 53 10 0 721 +776 312 453 6 560 570 10 0 96 +777 35 344 21 873 883 0 0 1004 +778 393 98 -20 0 1707 10 55 0 +779 208 488 -6 0 1674 10 57 0 +780 235 33 30 1347 1357 10 0 226 +781 140 137 32 580 590 10 0 281 +782 405 187 -18 1261 1271 10 745 0 +783 330 371 -17 0 1770 10 618 0 +784 265 0 -30 0 1665 10 295 0 +785 295 89 -20 752 762 10 82 0 +786 3 23 11 0 1580 10 0 364 +787 363 225 -21 866 876 10 70 0 +788 148 208 -28 0 1805 10 79 0 +789 466 362 -14 0 1672 10 874 0 +790 267 290 -30 0 1872 10 28 0 +791 98 2 -31 0 1625 10 979 0 +792 131 246 -29 842 852 10 863 0 +793 418 75 11 0 1673 10 0 232 +794 366 260 -17 1530 1540 10 797 0 +795 138 28 23 1107 1117 10 0 137 +796 209 212 -17 0 1860 10 254 0 +797 443 167 17 553 563 10 0 794 +798 156 65 22 1047 1057 10 0 81 +799 279 355 9 176 186 10 0 440 +800 206 172 29 798 808 10 0 634 +801 32 94 -24 940 950 10 603 0 +802 301 239 31 52 62 10 0 611 +803 471 368 -5 0 1665 10 622 0 +804 133 273 20 0 1796 0 0 1044 +805 253 74 -26 0 1739 10 303 0 +806 470 405 17 0 1646 10 0 128 +807 77 172 -20 0 1726 10 242 0 +808 77 465 11 275 285 10 0 677 +809 466 96 22 1393 1403 10 0 601 +810 402 277 -25 0 1761 10 250 0 +811 267 374 -12 611 621 10 817 0 +812 450 194 27 635 645 0 0 1040 +813 89 65 16 0 1670 10 0 865 +814 429 389 18 434 444 10 0 217 +815 202 28 -21 0 1688 10 1 0 +816 46 389 22 0 1669 10 0 860 +817 246 407 12 0 1758 10 0 811 +818 452 110 14 0 1670 10 0 20 +819 213 185 21 74 84 10 0 948 +820 134 276 15 0 1797 0 0 1010 +821 262 97 -24 957 967 10 41 0 +822 469 489 -12 565 575 10 216 0 +823 364 71 5 0 1703 0 0 1009 +824 68 240 -25 804 814 10 498 0 +825 494 468 -8 362 372 10 19 0 +826 439 222 22 0 1724 10 0 734 +827 386 225 13 929 939 10 0 209 +828 434 359 -25 1402 1412 10 995 0 +829 103 177 -25 636 646 10 313 0 +830 89 322 21 1031 1041 10 0 945 +831 307 249 -9 1387 1397 10 54 0 +832 30 155 9 0 1676 10 0 529 +833 401 314 -14 986 996 10 728 0 +834 217 357 -24 1430 1440 10 548 0 +835 373 421 21 247 257 10 0 431 +836 5 281 -40 1382 1392 10 52 0 +837 173 474 14 0 1679 10 0 369 +838 36 301 21 219 229 10 0 685 +839 429 169 8 0 1719 10 0 36 +840 195 450 16 0 1708 10 0 395 +841 95 382 -12 0 1712 10 737 0 +842 225 121 18 0 1784 10 0 230 +843 10 407 -19 444 454 10 73 0 +844 221 269 14 0 1881 10 0 478 +845 264 180 33 1691 1701 0 0 1018 +846 168 59 -18 0 1708 10 507 0 +847 281 96 1 0 1758 10 0 273 +848 387 349 9 0 1746 10 0 772 +849 398 329 -16 0 1748 10 910 0 +850 239 486 3 0 1679 10 0 663 +851 237 420 15 0 1745 10 0 150 +852 346 354 -10 0 1774 10 236 0 +853 172 314 9 555 565 10 0 918 +854 233 230 20 26 36 10 0 112 +855 79 80 19 1392 1402 10 0 111 +856 243 402 -13 0 1763 10 992 0 +857 117 110 -25 0 1722 10 222 0 +858 66 314 26 194 204 10 0 145 +859 58 391 -20 0 1677 10 754 0 +860 142 360 -22 1542 1552 10 816 0 +861 492 326 19 1214 1224 10 0 370 +862 381 328 -11 0 1763 10 44 0 +863 62 236 29 0 1727 10 0 792 +864 344 70 -22 0 1712 10 194 0 +865 151 81 -16 1568 1578 10 813 0 +866 240 240 35 1710 1720 0 0 1026 +867 46 163 -18 0 1694 10 258 0 +868 455 168 -40 877 887 10 558 0 +869 428 202 -14 914 924 10 960 0 +870 432 199 7 0 1726 10 0 633 +871 391 112 -24 1010 1020 10 955 0 +872 451 305 13 208 218 10 0 215 +873 214 311 14 70 80 10 0 908 +874 465 367 14 0 1671 10 0 789 +875 164 473 26 306 316 10 0 905 +876 364 173 30 190 200 10 0 47 +877 274 261 20 1717 1727 0 0 1008 +878 133 455 25 818 828 10 0 239 +879 351 481 10 332 342 10 0 280 +880 115 395 11 825 835 10 0 299 +881 297 304 4 0 1844 10 0 294 +882 7 194 29 0 1666 10 0 135 +883 409 255 23 0 1756 10 0 512 +884 87 213 18 0 1748 10 0 248 +885 60 246 25 0 1725 10 0 452 +886 3 471 13 0 1584 10 0 349 +887 418 251 21 0 1747 10 0 904 +888 153 362 -7 0 1767 10 659 0 +889 323 77 36 0 1728 10 0 576 +890 143 158 12 0 1774 10 0 595 +891 351 148 30 471 481 10 0 286 +892 426 38 23 619 629 10 0 952 +893 226 316 21 70 80 10 0 569 +894 347 192 -21 1498 1508 10 916 0 +895 102 6 -32 1468 1478 10 938 0 +896 41 120 22 706 716 10 0 387 +897 247 443 -15 340 350 10 700 0 +898 218 271 16 0 1877 10 0 753 +899 376 385 12 184 194 10 0 531 +900 241 402 -15 0 1763 10 97 0 +901 213 399 18 244 254 10 0 744 +902 32 191 -11 596 606 10 583 0 +903 441 374 10 233 243 10 0 266 +904 376 113 -21 0 1729 10 887 0 +905 215 434 -26 0 1728 10 875 0 +906 499 316 18 0 1658 10 0 954 +907 318 497 -25 0 1659 10 78 0 +908 256 441 -14 0 1724 10 873 0 +909 174 397 -19 1255 1265 10 199 0 +910 468 360 16 0 1671 10 0 849 +911 287 256 18 37 47 10 0 635 +912 448 397 -9 876 886 10 146 0 +913 352 487 27 912 922 10 0 763 +914 253 118 -6 0 1783 10 642 0 +915 159 299 12 0 1812 0 0 1025 +916 351 233 21 0 1813 10 0 894 +917 268 113 21 0 1777 10 0 646 +918 164 332 -9 0 1797 10 853 0 +919 88 484 5 0 1631 10 0 566 +920 360 488 -5 0 1653 10 358 0 +921 343 166 -13 886 896 10 524 0 +922 497 266 -8 758 768 10 109 0 +923 138 406 -14 1226 1236 10 688 0 +924 420 224 10 0 1744 10 0 72 +925 231 410 14 0 1754 0 0 1039 +926 199 438 3 0 1721 0 0 1017 +927 219 215 32 0 1869 10 0 435 +928 365 274 14 117 127 10 0 119 +929 481 454 14 0 1607 10 0 730 +930 187 61 19 555 565 10 0 10 +931 372 97 13 224 234 0 0 1033 +932 187 263 35 64 74 0 0 1045 +933 371 427 -12 0 1701 10 644 0 +934 74 215 10 239 249 10 0 629 +935 375 145 -18 939 949 10 163 0 +936 365 28 9 278 288 10 0 774 +937 118 314 -22 348 358 10 423 0 +938 60 29 32 1373 1383 10 0 895 +939 478 300 -31 0 1682 10 736 0 +940 33 152 17 0 1677 10 0 143 +941 347 184 15 1089 1099 10 0 621 +942 94 40 24 1078 1088 10 0 240 +943 290 328 7 154 164 10 0 334 +944 96 346 26 0 1734 10 0 363 +945 97 288 -21 0 1758 10 830 0 +946 176 470 14 557 567 10 0 470 +947 206 97 33 0 1756 10 0 103 +948 210 133 -21 0 1792 10 819 0 +949 489 457 13 0 1599 10 0 287 +950 418 399 20 448 458 10 0 578 +951 392 491 10 0 1636 10 0 174 +952 437 19 -23 1024 1034 10 892 0 +953 495 83 32 0 1619 10 0 154 +954 468 352 -18 0 1675 10 906 0 +955 390 120 24 0 1724 10 0 871 +956 80 357 -16 0 1715 10 608 0 +957 394 310 -29 0 1759 10 523 0 +958 61 441 27 554 564 10 0 59 +959 52 303 25 0 1711 10 0 325 +960 391 202 14 0 1767 10 0 869 +961 36 451 15 0 1622 10 0 224 +962 276 84 -11 0 1747 10 368 0 +963 130 140 17 204 214 10 0 636 +964 16 287 -10 0 1679 10 331 0 +965 292 136 28 0 1794 10 0 344 +966 53 204 8 0 1713 0 0 1012 +967 359 287 24 0 1800 10 0 970 +968 309 29 11 1304 1314 10 0 971 +969 473 491 23 0 1587 10 0 123 +970 273 255 -24 0 1892 10 967 0 +971 263 153 -11 0 1818 10 968 0 +972 328 458 17 778 788 10 0 466 +973 401 164 13 0 1742 10 0 561 +974 480 119 7 0 1651 10 0 600 +975 488 96 22 0 1632 10 0 414 +976 149 98 -8 0 1733 10 200 0 +977 49 437 7 437 447 10 0 333 +978 440 77 14 0 1659 10 0 467 +979 43 135 31 236 246 10 0 791 +980 188 151 -23 1307 1317 10 33 0 +981 175 422 -19 1456 1466 10 757 0 +982 48 437 4 814 824 10 0 32 +983 334 403 26 0 1741 10 0 437 +984 372 115 -22 0 1734 10 317 0 +985 111 192 11 1209 1219 0 0 1014 +986 357 290 24 114 124 10 0 994 +987 331 134 -1 0 1774 10 176 0 +988 495 199 25 347 357 10 0 422 +989 441 60 21 1469 1479 10 0 193 +990 51 89 -11 1218 1228 10 402 0 +991 452 206 31 502 512 0 0 1019 +992 195 386 13 146 156 10 0 856 +993 172 24 -32 1462 1472 10 398 0 +994 408 318 -24 0 1743 10 986 0 +995 410 399 25 244 254 10 0 828 +996 413 345 20 1228 1238 10 0 223 +997 215 129 -28 0 1790 10 680 0 +998 380 350 -15 876 886 10 672 0 +999 19 38 -2 0 1602 10 573 0 +1000 166 247 -17 0 1831 10 746 0 +1001 26 67 -15 1327 1337 10 356 0 +1002 235 288 -18 0 1875 10 697 0 +1003 235 316 -2 666 676 10 328 0 +1004 35 344 -21 873 883 10 777 0 +1005 20 480 -25 0 1590 10 167 0 +1006 479 387 -13 0 1649 10 557 0 +1007 376 92 -10 0 1713 10 494 0 +1008 274 261 -20 1717 1727 10 877 0 +1009 364 71 -5 0 1703 10 823 0 +1010 134 276 -15 0 1797 10 820 0 +1011 247 219 -17 0 1884 10 247 0 +1012 53 204 -8 0 1713 10 966 0 +1013 230 487 -20 1140 1150 10 567 0 +1014 111 192 -11 1209 1219 10 985 0 +1015 295 247 -12 1313 1323 10 257 0 +1016 0 422 -8 831 841 10 571 0 +1017 199 438 -3 0 1721 10 926 0 +1018 264 180 -33 1691 1701 10 845 0 +1019 452 206 -31 502 512 10 991 0 +1020 212 186 -11 1732 1742 10 214 0 +1021 197 202 -29 1214 1224 10 625 0 +1022 218 12 -3 0 1675 10 98 0 +1023 380 194 -3 0 1774 10 497 0 +1024 240 34 -28 0 1699 10 456 0 +1025 159 299 -12 0 1812 10 915 0 +1026 240 240 -35 1710 1720 10 866 0 +1027 339 113 -14 0 1752 10 464 0 +1028 209 68 -27 0 1729 10 519 0 +1029 278 450 -29 1385 1395 10 272 0 +1030 371 423 -10 0 1704 10 276 0 +1031 355 174 -33 0 1786 10 686 0 +1032 19 273 -25 1027 1037 10 424 0 +1033 372 97 -13 224 234 10 931 0 +1034 261 359 -10 0 1806 10 710 0 +1035 261 138 -1 0 1803 10 444 0 +1036 215 79 -5 0 1741 10 447 0 +1037 297 283 -28 0 1858 10 278 0 +1038 172 292 -17 0 1827 10 718 0 +1039 231 410 -14 0 1754 10 925 0 +1040 450 194 -27 635 645 10 812 0 +1041 493 493 -20 866 876 10 342 0 +1042 100 266 -5 480 490 10 563 0 +1043 272 234 -26 1600 1610 10 541 0 +1044 133 273 -20 0 1796 10 804 0 +1045 187 263 -35 64 74 10 932 0 +1046 6 196 -20 1213 1223 10 382 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1104.txt b/jsprit-instances/instances/lilim/1000/LR1104.txt new file mode 100644 index 00000000..e0b9ba55 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1104.txt @@ -0,0 +1,1040 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 21 0 1686 10 0 519 +2 67 190 25 0 1723 10 0 242 +3 80 400 -20 0 1689 10 681 0 +4 439 237 11 949 959 10 0 119 +5 377 385 -20 0 1730 10 950 0 +6 449 428 25 1257 1267 10 0 421 +7 342 481 18 0 1667 10 0 85 +8 466 149 -22 1196 1206 10 46 0 +9 83 290 -5 0 1744 10 563 0 +10 251 63 14 997 1007 10 0 165 +11 328 491 -33 0 1662 10 261 0 +12 260 472 33 0 1693 10 0 466 +13 290 145 -18 0 1803 10 767 0 +14 266 221 -15 0 1882 10 344 0 +15 164 320 -29 0 1805 10 518 0 +16 52 412 22 0 1660 10 0 224 +17 485 104 21 804 814 10 0 598 +18 144 331 -22 0 1782 10 517 0 +19 387 394 8 0 1717 10 0 75 +20 472 57 17 0 1621 10 0 378 +21 343 276 -16 0 1819 10 43 0 +22 104 349 -22 0 1739 10 423 0 +23 28 467 -23 1353 1363 10 769 0 +24 91 427 14 893 903 10 0 121 +25 429 476 -23 0 1627 10 772 0 +26 210 276 5 0 1868 10 0 608 +27 58 39 -15 0 1630 10 316 0 +28 273 300 30 0 1860 10 0 389 +29 41 232 16 0 1706 10 0 401 +30 25 53 -33 0 1616 10 758 0 +31 52 18 28 0 1610 10 0 666 +32 27 444 -17 0 1620 10 136 0 +33 178 72 -15 0 1723 10 948 0 +34 406 460 2 0 1654 10 0 146 +35 250 328 -23 0 1837 10 569 0 +36 492 34 -1 0 1591 10 37 0 +37 412 100 1 0 1695 10 0 36 +38 233 87 -44 0 1752 10 500 0 +39 60 5 -21 1054 1064 10 210 0 +40 406 408 -23 0 1693 10 933 0 +41 245 42 -28 0 1707 10 456 0 +42 166 345 14 0 1789 10 0 66 +43 440 294 16 0 1720 10 0 21 +44 370 382 -25 894 904 10 995 0 +45 32 319 21 0 1687 10 0 737 +46 480 136 22 0 1659 10 0 8 +47 371 163 -31 838 848 10 56 0 +48 0 188 -10 0 1658 10 69 0 +49 438 5 18 0 1607 10 0 311 +50 132 477 -26 337 347 10 875 0 +51 203 211 -20 0 1854 10 729 0 +52 2 264 -30 0 1667 10 345 0 +53 231 167 -23 0 1830 10 632 0 +54 423 221 9 0 1740 0 0 1002 +55 459 53 -9 0 1628 10 936 0 +56 386 154 31 0 1749 10 0 47 +57 130 494 6 0 1644 10 0 327 +58 31 175 24 0 1684 10 0 71 +59 69 423 -23 0 1665 10 597 0 +60 352 241 5 802 812 10 0 422 +61 261 201 15 1524 1534 0 0 1032 +62 59 276 -22 902 912 10 160 0 +63 146 188 -16 1245 1255 10 265 0 +64 451 62 5 0 1640 10 0 154 +65 299 285 -24 1264 1274 10 635 0 +66 142 372 -14 0 1753 10 42 0 +67 440 201 29 903 913 10 0 924 +68 219 210 14 50 60 10 0 516 +69 64 198 10 0 1722 10 0 48 +70 390 249 21 592 602 10 0 301 +71 9 101 -24 676 686 10 58 0 +72 424 288 13 0 1737 10 0 872 +73 77 372 19 0 1704 10 0 220 +74 298 264 36 50 60 10 0 722 +75 405 454 -8 0 1659 10 19 0 +76 407 35 -7 0 1649 10 564 0 +77 225 369 -23 0 1794 10 834 0 +78 347 459 25 0 1685 10 0 972 +79 117 178 -17 0 1764 10 609 0 +80 132 479 11 257 267 10 0 436 +81 201 66 -31 0 1725 10 623 0 +82 245 176 20 0 1841 10 0 110 +83 470 138 16 0 1669 0 0 1025 +84 115 296 24 0 1773 10 0 156 +85 348 476 -18 0 1669 10 7 0 +86 43 210 20 210 220 10 0 719 +87 327 139 -30 0 1780 10 891 0 +88 49 353 15 0 1690 10 0 697 +89 356 256 -23 0 1809 10 794 0 +90 335 99 -5 0 1742 10 823 0 +91 363 34 19 282 292 10 0 580 +92 33 278 -12 0 1697 10 964 0 +93 366 288 29 0 1793 10 0 540 +94 452 172 9 0 1699 10 0 960 +95 86 189 21 0 1741 10 0 829 +96 262 369 -23 0 1796 10 811 0 +97 218 403 -14 0 1759 10 99 0 +98 218 12 -1 0 1675 10 847 0 +99 228 399 14 0 1765 10 0 97 +100 492 188 33 0 1666 10 0 397 +101 267 174 -25 1628 1638 10 572 0 +102 274 441 12 0 1723 10 0 451 +103 210 113 28 0 1773 10 0 842 +104 370 262 15 0 1795 10 0 906 +105 303 186 -24 1364 1374 10 661 0 +106 241 180 -12 1705 1715 10 971 0 +107 100 85 -22 0 1693 10 595 0 +108 350 199 21 0 1803 10 0 297 +109 500 228 8 0 1665 10 0 512 +110 251 238 -20 0 1903 10 82 0 +111 114 102 -13 0 1715 10 857 0 +112 345 146 -20 0 1775 10 471 0 +113 21 146 -11 497 507 10 179 0 +114 330 147 28 858 868 0 0 1029 +115 476 61 36 0 1621 10 0 417 +116 386 245 -18 0 1779 10 745 0 +117 201 278 -26 0 1859 10 937 0 +118 421 499 -10 0 1613 10 391 0 +119 426 231 -11 1038 1048 10 4 0 +120 105 137 -27 0 1732 10 433 0 +121 64 437 -14 0 1652 10 24 0 +122 181 260 23 0 1846 10 0 498 +123 413 391 -13 0 1700 10 132 0 +124 370 493 22 0 1644 10 0 550 +125 447 267 -23 990 1000 10 678 0 +126 232 101 -33 0 1765 10 947 0 +127 371 332 14 540 550 10 0 407 +128 447 383 -18 0 1678 10 814 0 +129 325 147 -9 0 1788 10 486 0 +130 489 437 -26 717 727 10 696 0 +131 415 95 15 0 1689 10 0 978 +132 331 356 13 0 1782 10 0 123 +133 374 346 27 0 1759 10 0 355 +134 108 37 -8 0 1660 10 200 0 +135 5 224 19 0 1669 10 0 765 +136 93 413 17 226 236 10 0 32 +137 210 29 -22 0 1691 10 194 0 +138 136 265 12 0 1801 10 0 350 +139 409 155 -18 0 1730 10 163 0 +140 111 178 -19 0 1759 10 528 0 +141 291 251 20 41 51 10 0 196 +142 322 290 23 0 1833 10 0 278 +143 57 183 15 0 1711 10 0 807 +144 181 185 -33 0 1821 10 185 0 +145 7 382 27 0 1639 10 0 190 +146 425 448 -2 0 1651 10 34 0 +147 174 41 15 0 1693 10 0 309 +148 161 276 8 143 153 10 0 264 +149 398 49 -7 0 1666 10 314 0 +150 210 379 12 0 1780 10 0 663 +151 60 231 -29 0 1725 10 863 0 +152 453 360 -10 0 1685 10 957 0 +153 367 97 17 0 1723 10 0 774 +154 488 3 -5 0 1572 10 64 0 +155 44 115 24 246 256 10 0 715 +156 48 293 -24 0 1709 10 84 0 +157 64 135 -8 0 1697 10 665 0 +158 65 62 -16 0 1652 10 361 0 +159 404 207 6 0 1756 10 0 679 +160 68 303 22 0 1726 10 0 62 +161 263 418 25 288 298 10 0 522 +162 147 30 26 0 1673 10 0 483 +163 384 149 18 0 1748 10 0 139 +164 340 416 -9 0 1727 10 799 0 +165 271 128 -14 0 1792 10 10 0 +166 89 358 23 0 1722 10 0 859 +167 20 480 25 0 1590 10 0 371 +168 488 173 25 0 1665 10 0 868 +169 439 156 2 0 1704 10 0 839 +170 389 156 27 726 736 10 0 941 +171 111 392 18 0 1717 0 0 1037 +172 267 162 6 0 1826 10 0 295 +173 248 176 -21 0 1841 10 819 0 +174 413 476 -10 0 1637 10 280 0 +175 352 481 15 0 1663 10 0 783 +176 264 135 1 0 1800 10 0 962 +177 29 462 -5 1320 1330 10 284 0 +178 148 462 10 737 747 10 0 545 +179 44 140 11 0 1682 10 0 113 +180 414 378 23 505 515 10 0 983 +181 392 95 16 0 1705 0 0 1008 +182 216 341 -3 0 1818 10 926 0 +183 211 411 -15 0 1750 10 395 0 +184 317 45 8 0 1700 10 0 368 +185 178 150 33 0 1792 10 0 144 +186 428 302 -11 1026 1036 10 714 0 +187 450 45 -23 0 1629 10 892 0 +188 453 318 30 0 1701 10 0 536 +189 186 135 24 0 1784 10 0 435 +190 11 403 -27 353 363 10 145 0 +191 433 447 -5 804 814 10 490 0 +192 272 420 -24 1396 1406 10 548 0 +193 429 59 -16 0 1654 10 232 0 +194 200 27 22 0 1687 10 0 137 +195 498 171 -27 0 1655 10 812 0 +196 487 320 -20 868 878 10 141 0 +197 45 166 -18 1023 1033 10 884 0 +198 490 276 -5 0 1674 10 810 0 +199 126 391 19 0 1728 10 0 390 +200 92 18 8 0 1635 10 0 134 +201 293 228 19 0 1867 10 0 454 +202 343 205 26 0 1812 10 0 372 +203 182 480 -9 0 1676 10 293 0 +204 385 285 -12 0 1776 10 939 0 +205 44 344 12 0 1689 10 0 367 +206 170 347 -23 0 1790 10 476 0 +207 457 492 7 0 1597 10 0 929 +208 124 448 -24 0 1681 10 738 0 +209 398 210 31 0 1762 10 0 831 +210 75 118 21 419 429 10 0 39 +211 105 474 -8 0 1649 10 408 0 +212 134 211 35 130 140 10 0 515 +213 211 248 26 39 49 10 0 616 +214 212 186 11 0 1841 10 0 634 +215 492 335 10 0 1659 10 0 994 +216 497 483 12 363 373 10 0 405 +217 440 436 18 0 1650 10 0 594 +218 311 203 15 0 1838 10 0 706 +219 491 369 28 0 1647 10 0 716 +220 67 378 -19 0 1692 10 73 0 +221 383 17 15 0 1647 10 0 620 +222 7 82 -7 422 432 10 492 0 +223 342 319 -18 0 1800 10 612 0 +224 78 406 -22 970 980 10 16 0 +225 103 123 -9 0 1721 10 262 0 +226 241 38 16 0 1703 10 0 675 +227 224 3 -27 700 710 10 691 0 +228 436 467 12 0 1630 10 0 912 +229 438 488 18 0 1612 10 0 294 +230 351 60 15 0 1700 10 0 642 +231 13 214 -29 1364 1374 10 882 0 +232 429 67 16 742 752 10 0 193 +233 498 456 27 0 1593 10 0 579 +234 135 400 -25 0 1726 10 878 0 +235 215 293 13 0 1860 10 0 721 +236 354 416 -16 0 1720 10 760 0 +237 294 421 -16 1585 1595 10 669 0 +238 208 445 -15 0 1716 10 353 0 +239 230 320 -11 1202 1212 10 501 0 +240 157 38 3 0 1684 10 0 942 +241 441 100 -21 0 1673 10 989 0 +242 61 170 -25 0 1710 10 2 0 +243 79 467 -46 361 371 10 496 0 +244 365 190 -2 1487 1497 10 560 0 +245 282 1 18 0 1664 10 0 674 +246 124 111 15 0 1728 10 0 813 +247 247 219 -23 0 1884 10 260 0 +248 28 180 34 0 1683 10 0 832 +249 167 488 17 260 270 10 0 462 +250 442 289 25 0 1720 10 0 343 +251 136 430 -14 0 1702 10 873 0 +252 38 15 3 0 1599 10 0 556 +253 246 314 -33 1455 1465 10 704 0 +254 176 200 17 578 588 10 0 703 +255 337 232 2 0 1827 10 0 538 +256 257 133 19 0 1798 10 0 499 +257 295 247 -16 1313 1323 10 506 0 +258 39 162 18 575 585 10 0 337 +259 79 257 -26 0 1744 10 495 0 +260 236 126 23 0 1791 10 0 247 +261 259 498 33 1085 1095 10 0 11 +262 180 162 9 0 1803 10 0 225 +263 53 466 -11 0 1623 10 880 0 +264 167 291 -8 0 1823 10 148 0 +265 89 185 16 610 620 10 0 63 +266 487 446 -4 0 1608 10 822 0 +267 308 199 -13 0 1838 10 505 0 +268 481 84 17 0 1631 10 0 975 +269 495 227 20 0 1669 0 0 1003 +270 397 57 -5 0 1673 10 652 0 +271 372 39 -14 0 1672 10 464 0 +272 278 450 -3 0 1714 10 457 0 +273 292 32 14 239 249 10 0 784 +274 90 496 13 0 1622 10 0 582 +275 68 53 16 749 759 10 0 786 +276 371 423 10 0 1704 10 0 705 +277 273 149 -23 0 1812 10 332 0 +278 297 283 -23 0 1858 10 142 0 +279 120 37 28 0 1666 10 0 976 +280 371 488 10 0 1649 10 0 174 +281 206 174 14 0 1828 10 0 800 +282 174 347 -22 0 1792 10 693 0 +283 330 281 -9 1340 1350 10 485 0 +284 67 451 5 0 1644 10 0 177 +285 27 464 -18 0 1606 10 375 0 +286 361 178 -11 0 1783 10 587 0 +287 463 406 23 867 877 10 0 419 +288 456 157 -14 0 1689 10 735 0 +289 153 244 5 0 1818 10 0 755 +290 153 192 -12 0 1802 10 890 0 +291 352 63 -9 0 1702 10 360 0 +292 371 71 -13 0 1699 10 931 0 +293 163 472 9 0 1677 10 0 203 +294 448 495 -18 0 1600 10 229 0 +295 282 10 -6 0 1673 10 172 0 +296 66 163 6 0 1712 10 0 638 +297 314 205 -21 0 1837 10 108 0 +298 83 169 21 0 1730 10 0 323 +299 221 291 -21 0 1865 10 775 0 +300 374 116 -31 597 607 10 650 0 +301 418 269 -21 0 1746 10 70 0 +302 178 302 -22 0 1827 10 489 0 +303 250 57 26 0 1722 10 0 362 +304 475 352 -17 0 1668 10 806 0 +305 1 252 -19 0 1666 10 341 0 +306 286 356 -34 0 1804 10 656 0 +307 65 82 -19 0 1666 10 990 0 +308 154 392 -3 0 1744 10 349 0 +309 196 56 -15 0 1714 10 147 0 +310 366 390 -29 0 1734 10 523 0 +311 436 25 -18 1292 1302 10 49 0 +312 67 352 20 0 1706 10 0 915 +313 173 182 -37 0 1813 10 655 0 +314 390 34 7 1070 1080 10 0 149 +315 18 225 -28 0 1682 10 416 0 +316 57 43 15 0 1632 10 0 27 +317 388 44 22 0 1668 10 0 668 +318 269 112 19 1273 1283 10 0 914 +319 374 260 -7 0 1791 10 725 0 +320 291 213 -18 1268 1278 10 911 0 +321 178 420 -9 1081 1091 10 484 0 +322 389 255 -34 0 1776 10 399 0 +323 134 194 -21 1662 1672 10 298 0 +324 93 490 -19 0 1629 10 768 0 +325 64 294 12 0 1724 10 0 1000 +326 493 111 -14 0 1636 10 605 0 +327 150 484 -6 0 1661 10 57 0 +328 235 316 2 666 676 10 0 909 +329 239 15 2 0 1680 10 0 643 +330 193 138 30 0 1790 10 0 699 +331 40 278 10 0 1704 10 0 586 +332 307 52 23 0 1709 10 0 277 +333 161 416 -24 0 1727 10 981 0 +334 381 457 -10 0 1671 10 951 0 +335 55 318 13 322 332 10 0 336 +336 80 279 -13 0 1743 10 335 0 +337 48 162 -18 0 1695 10 258 0 +338 91 27 14 1192 1202 10 0 387 +339 288 70 -17 0 1732 10 821 0 +340 177 404 -30 0 1745 10 641 0 +341 10 237 19 0 1675 10 0 305 +342 493 493 -26 866 876 10 750 0 +343 440 292 -25 950 960 10 250 0 +344 349 76 15 1041 1051 10 0 14 +345 47 208 30 0 1708 10 0 52 +346 283 454 -13 0 1709 10 856 0 +347 486 324 15 0 1668 10 0 861 +348 392 87 23 0 1699 10 0 709 +349 122 422 3 0 1701 10 0 308 +350 37 281 -12 0 1700 10 138 0 +351 413 127 28 0 1711 10 0 359 +352 222 499 7 0 1665 10 0 850 +353 211 446 15 0 1716 10 0 238 +354 30 7 23 1199 1209 10 0 999 +355 398 341 -27 0 1742 10 133 0 +356 26 67 15 0 1626 10 0 410 +357 461 186 16 0 1695 10 0 648 +358 313 391 -17 0 1761 10 526 0 +359 471 94 -28 0 1645 10 351 0 +360 341 72 9 0 1716 10 0 291 +361 130 186 16 141 151 10 0 158 +362 257 57 -26 0 1722 10 303 0 +363 94 344 26 0 1733 10 0 654 +364 6 53 -11 0 1602 10 402 0 +365 146 376 -7 244 254 10 888 0 +366 244 13 24 0 1678 10 0 761 +367 29 336 -12 0 1678 10 205 0 +368 306 42 -8 0 1700 10 184 0 +369 177 486 20 0 1668 10 0 946 +370 489 338 17 1407 1417 10 0 903 +371 179 318 -25 0 1817 10 167 0 +372 344 203 -26 0 1810 10 202 0 +373 149 341 6 414 424 10 0 418 +374 307 412 8 0 1744 0 0 1014 +375 68 450 18 0 1645 10 0 285 +376 420 80 24 0 1675 10 0 720 +377 144 220 35 0 1805 10 0 963 +378 497 54 -17 988 998 10 20 0 +379 80 458 30 381 391 10 0 958 +380 84 377 10 0 1706 10 0 596 +381 332 382 -32 1020 1030 10 533 0 +382 6 196 -10 0 1666 10 934 0 +383 104 28 8 0 1650 0 0 1026 +384 224 320 36 1294 1304 10 0 607 +385 87 3 13 0 1620 10 0 895 +386 149 214 7 0 1808 10 0 409 +387 98 29 -14 0 1647 10 338 0 +388 135 30 12 0 1667 10 0 577 +389 287 397 -30 574 584 10 28 0 +390 107 374 -19 924 934 10 199 0 +391 355 485 10 0 1658 10 0 118 +392 51 286 14 1469 1479 10 0 585 +393 49 118 3 0 1675 10 0 552 +394 159 226 16 94 104 10 0 657 +395 185 431 15 0 1723 10 0 183 +396 262 92 -36 0 1757 10 482 0 +397 475 198 -33 0 1685 10 100 0 +398 142 30 32 0 1670 0 0 1021 +399 481 207 34 0 1681 10 0 322 +400 174 122 -27 0 1767 10 443 0 +401 35 263 -16 0 1700 10 29 0 +402 24 71 11 356 366 10 0 364 +403 173 65 12 458 468 10 0 599 +404 91 326 -2 0 1739 10 759 0 +405 470 417 -12 0 1639 10 216 0 +406 397 153 -40 0 1739 10 558 0 +407 295 283 -14 0 1860 10 127 0 +408 174 376 8 0 1768 10 0 211 +409 38 190 -7 0 1695 10 386 0 +410 16 68 -15 0 1619 10 356 0 +411 179 286 8 0 1836 10 0 687 +412 244 422 -18 0 1743 10 901 0 +413 250 441 -11 0 1724 10 900 0 +414 497 18 10 0 1577 10 0 684 +415 195 111 -7 1008 1018 10 980 0 +416 26 221 28 1006 1016 10 0 315 +417 442 5 -36 0 1604 10 115 0 +418 44 496 -6 0 1595 10 373 0 +419 448 404 -23 0 1665 10 287 0 +420 471 427 8 0 1632 0 0 1011 +421 460 424 -25 1465 1475 10 6 0 +422 461 195 -5 0 1697 10 60 0 +423 146 313 22 0 1794 10 0 22 +424 19 273 25 0 1683 10 0 792 +425 245 461 8 659 669 10 0 907 +426 69 266 12 0 1734 10 0 452 +427 191 84 13 877 887 10 0 683 +428 68 160 21 0 1712 10 0 867 +429 212 47 20 811 821 10 0 780 +430 80 337 28 0 1725 0 0 1027 +431 412 478 -26 0 1636 10 480 0 +432 225 488 -13 0 1676 10 670 0 +433 105 140 27 0 1733 10 0 120 +434 389 43 21 0 1666 10 0 793 +435 177 156 -24 0 1796 10 189 0 +436 179 497 -11 0 1658 10 80 0 +437 377 432 20 841 851 10 0 682 +438 497 296 14 0 1664 0 0 1028 +439 152 476 45 0 1669 10 0 837 +440 277 428 -34 500 510 10 908 0 +441 64 5 -10 0 1608 10 503 0 +442 44 311 27 0 1701 10 0 945 +443 165 59 27 0 1706 10 0 400 +444 261 138 1 0 1803 10 0 917 +445 268 351 -17 0 1813 10 897 0 +446 48 150 15 0 1690 10 0 588 +447 215 79 -19 0 1741 10 930 0 +448 109 56 -32 0 1676 10 781 0 +449 171 188 30 631 641 10 0 667 +450 284 457 17 0 1706 0 0 1016 +451 274 442 -12 0 1722 10 102 0 +452 33 286 -12 0 1696 10 426 0 +453 112 433 -7 0 1686 10 977 0 +454 423 170 -19 0 1725 10 201 0 +455 213 283 14 0 1866 0 0 1020 +456 240 34 28 0 1699 10 0 41 +457 283 438 3 241 251 10 0 272 +458 324 99 10 0 1747 10 0 576 +459 259 301 25 0 1864 10 0 790 +460 189 402 10 0 1752 10 0 779 +461 215 282 -16 0 1868 10 664 0 +462 166 440 -17 0 1708 10 249 0 +463 374 232 33 125 135 10 0 611 +464 339 113 14 0 1752 10 0 271 +465 335 46 18 0 1694 10 0 542 +466 313 493 -33 0 1664 10 12 0 +467 432 66 -28 0 1657 10 921 0 +468 76 462 18 966 976 10 0 808 +469 397 477 13 0 1645 10 0 727 +470 196 489 23 0 1670 10 0 567 +471 354 156 20 0 1775 10 0 112 +472 171 24 -23 1393 1403 10 795 0 +473 187 73 18 302 312 10 0 514 +474 243 408 -15 0 1757 10 851 0 +475 421 387 -21 0 1696 10 835 0 +476 141 426 23 541 551 10 0 206 +477 415 118 19 0 1704 10 0 974 +478 240 255 33 0 1904 10 0 479 +479 162 388 -33 1136 1146 10 478 0 +480 413 493 26 0 1623 10 0 431 +481 69 414 6 1273 1283 10 0 841 +482 273 70 36 629 639 10 0 396 +483 142 14 -26 0 1656 10 162 0 +484 185 434 9 0 1720 10 0 321 +485 360 294 9 0 1797 10 0 283 +486 265 240 9 18 28 10 0 129 +487 280 245 21 30 40 10 0 741 +488 87 51 -4 0 1658 10 591 0 +489 195 273 22 59 69 10 0 302 +490 422 498 5 702 712 10 0 191 +491 95 64 -32 0 1673 10 938 0 +492 63 155 7 0 1706 10 0 222 +493 24 259 19 0 1689 10 0 647 +494 376 92 10 0 1713 10 0 601 +495 83 300 26 510 520 10 0 259 +496 72 477 46 288 298 10 0 243 +497 380 194 3 0 1774 0 0 1024 +498 72 227 -23 0 1736 10 122 0 +499 238 123 -19 0 1788 10 256 0 +500 188 119 44 0 1771 10 0 38 +501 229 322 11 0 1840 10 0 239 +502 150 68 23 0 1708 10 0 617 +503 67 24 10 0 1625 10 0 441 +504 63 420 -4 0 1663 10 982 0 +505 339 144 13 1109 1119 10 0 267 +506 454 201 16 0 1706 10 0 257 +507 158 24 18 0 1671 10 0 993 +508 365 119 30 392 402 10 0 904 +509 440 284 -23 862 872 10 883 0 +510 417 212 12 920 930 10 0 743 +511 404 439 -12 0 1672 10 899 0 +512 472 248 -8 0 1693 10 109 0 +513 235 108 12 0 1773 0 0 1006 +514 174 67 -18 0 1717 10 473 0 +515 132 151 -35 0 1761 10 212 0 +516 217 207 -14 0 1861 10 68 0 +517 162 306 22 0 1811 10 0 18 +518 48 366 29 0 1683 10 0 15 +519 209 68 -21 0 1729 10 1 0 +520 94 497 31 0 1623 10 0 919 +521 110 122 14 0 1726 0 0 1035 +522 274 403 -25 0 1761 10 161 0 +523 421 386 29 834 844 10 0 310 +524 399 175 -15 757 767 10 621 0 +525 56 268 28 1074 1084 10 0 629 +526 322 406 17 0 1744 10 0 358 +527 244 277 18 0 1888 10 0 877 +528 105 181 19 0 1755 10 0 140 +529 30 97 -11 0 1648 10 985 0 +530 359 246 18 0 1806 10 0 916 +531 498 457 15 0 1592 0 0 1019 +532 190 267 -21 0 1853 10 547 0 +533 334 481 32 0 1670 10 0 381 +534 18 24 -15 0 1592 10 701 0 +535 482 104 -22 0 1641 10 809 0 +536 460 328 -30 0 1691 10 188 0 +537 320 211 16 1003 1013 10 0 541 +538 494 165 -2 0 1657 10 255 0 +539 167 445 -13 0 1704 10 992 0 +540 340 291 -29 480 490 10 93 0 +541 272 234 -16 0 1888 10 537 0 +542 325 56 -18 0 1708 10 465 0 +543 71 304 -15 0 1729 10 820 0 +544 87 311 7 0 1741 10 0 858 +545 207 487 -10 0 1675 10 178 0 +546 332 5 14 1043 1053 10 0 653 +547 161 275 21 0 1823 10 0 532 +548 268 458 24 0 1707 10 0 192 +549 175 352 12 0 1789 0 0 1036 +550 398 476 -22 0 1645 10 124 0 +551 51 360 -23 0 1688 10 708 0 +552 21 70 -3 781 791 10 393 0 +553 80 251 14 0 1745 10 0 788 +554 457 280 17 0 1706 10 0 764 +555 423 315 -25 0 1731 10 833 0 +556 66 88 -3 0 1670 10 252 0 +557 479 387 13 0 1649 10 0 954 +558 436 123 40 0 1690 10 0 406 +559 286 244 31 0 1879 10 0 695 +560 449 190 2 1150 1160 10 0 244 +561 456 113 -14 1237 1247 10 818 0 +562 480 152 -13 0 1665 10 756 0 +563 100 266 5 0 1765 10 0 9 +564 343 34 7 0 1680 10 0 76 +565 374 306 -11 1004 1014 10 570 0 +566 13 465 31 784 794 0 0 1010 +567 230 487 -23 0 1678 10 470 0 +568 442 153 -13 0 1700 10 973 0 +569 240 362 23 0 1803 10 0 35 +570 433 319 11 0 1720 10 0 565 +571 0 422 -36 831 841 10 843 0 +572 297 131 25 0 1788 10 0 101 +573 71 12 -19 0 1618 10 855 0 +574 44 440 -15 0 1635 10 961 0 +575 447 184 27 0 1708 0 0 1001 +576 341 59 -10 800 810 10 458 0 +577 132 32 -12 794 804 10 388 0 +578 411 396 -4 0 1698 10 881 0 +579 450 416 -27 0 1656 10 233 0 +580 323 34 -19 0 1687 10 91 0 +581 244 368 25 424 434 10 0 817 +582 90 477 -13 0 1638 10 274 0 +583 34 169 11 494 504 10 0 940 +584 351 128 15 0 1757 10 0 984 +585 71 282 -14 0 1734 10 392 0 +586 157 269 -10 0 1821 10 331 0 +587 392 1 11 615 625 10 0 286 +588 39 153 -15 0 1683 10 446 0 +589 306 229 -7 0 1856 10 870 0 +590 415 253 -14 377 387 10 928 0 +591 92 76 4 0 1680 10 0 488 +592 437 98 -12 0 1675 10 935 0 +593 12 367 27 0 1650 10 0 742 +594 448 414 -18 0 1658 10 217 0 +595 128 113 22 373 383 10 0 107 +596 43 360 -10 0 1681 10 380 0 +597 102 422 23 236 246 10 0 59 +598 480 131 -21 0 1657 10 17 0 +599 210 81 -12 0 1742 10 403 0 +600 432 2 20 0 1608 10 0 952 +601 396 83 -10 0 1694 10 494 0 +602 489 159 29 0 1660 0 0 1005 +603 56 75 24 0 1654 10 0 604 +604 66 31 -24 0 1629 10 603 0 +605 460 117 14 530 540 10 0 326 +606 175 239 23 75 85 10 0 731 +607 217 333 -36 0 1826 10 384 0 +608 62 375 -5 0 1690 10 26 0 +609 82 183 17 0 1735 10 0 79 +610 248 214 19 0 1879 0 0 1033 +611 385 239 -33 796 806 10 463 0 +612 371 315 18 0 1778 10 0 223 +613 333 163 32 0 1795 0 0 1034 +614 100 66 15 0 1678 0 0 1007 +615 311 422 29 0 1733 0 0 1013 +616 153 235 -26 0 1817 10 213 0 +617 168 109 -23 0 1752 10 502 0 +618 284 319 17 0 1839 10 0 943 +619 195 464 20 0 1695 10 0 840 +620 382 9 -15 0 1641 10 221 0 +621 325 210 15 0 1830 10 0 524 +622 366 334 5 420 430 10 0 849 +623 200 78 31 0 1736 10 0 81 +624 351 5 -12 506 516 10 692 0 +625 197 202 29 1214 1224 10 0 796 +626 270 337 -10 0 1826 10 710 0 +627 125 65 17 798 808 10 0 740 +628 120 17 30 0 1649 10 0 846 +629 84 255 -28 0 1749 10 525 0 +630 222 331 -9 0 1830 10 905 0 +631 332 459 -19 379 389 10 763 0 +632 226 175 23 0 1837 10 0 53 +633 404 140 -2 1269 1279 10 711 0 +634 223 178 -11 1146 1156 10 214 0 +635 330 308 24 1180 1190 10 0 65 +636 140 108 29 0 1736 10 0 702 +637 34 239 16 0 1699 10 0 707 +638 94 192 -6 0 1749 10 296 0 +639 458 213 -25 1138 1148 10 988 0 +640 13 314 14 0 1670 10 0 698 +641 202 391 30 0 1767 10 0 340 +642 339 41 -15 466 476 10 230 0 +643 224 56 -2 0 1720 10 329 0 +644 345 431 12 355 365 10 0 749 +645 292 104 -36 0 1764 10 889 0 +646 318 99 35 1223 1233 0 0 1030 +647 46 248 -19 0 1711 10 493 0 +648 482 184 -16 0 1674 10 357 0 +649 411 379 25 0 1709 0 0 1018 +650 293 174 31 87 97 10 0 300 +651 169 305 21 172 182 10 0 844 +652 394 47 5 0 1667 10 0 270 +653 323 29 -14 1147 1157 10 546 0 +654 65 343 -26 0 1708 10 363 0 +655 158 179 37 0 1799 10 0 313 +656 299 353 34 0 1801 10 0 306 +657 9 233 -16 0 1674 10 394 0 +658 330 138 -33 0 1778 10 686 0 +659 48 412 7 1042 1052 10 0 860 +660 385 17 40 0 1646 10 0 968 +661 382 110 24 0 1723 10 0 105 +662 336 493 -19 0 1658 10 757 0 +663 181 441 -12 0 1712 10 150 0 +664 162 301 16 1623 1633 10 0 461 +665 1 101 8 1267 1277 10 0 157 +666 80 117 -28 0 1700 10 31 0 +667 210 219 -30 0 1865 10 449 0 +668 404 59 -22 0 1670 10 317 0 +669 288 439 16 0 1723 10 0 237 +670 149 458 13 0 1684 10 0 432 +671 257 391 -14 1643 1653 10 925 0 +672 405 349 15 532 542 10 0 712 +673 191 215 17 68 78 10 0 866 +674 231 29 -18 1236 1246 10 245 0 +675 253 50 -16 0 1715 10 226 0 +676 441 177 -17 1011 1021 10 797 0 +677 5 445 30 0 1602 10 0 886 +678 463 253 23 0 1702 10 0 125 +679 435 180 -6 0 1718 10 159 0 +680 198 85 -17 273 283 10 997 0 +681 59 388 20 673 683 10 0 3 +682 373 418 -20 1269 1279 10 437 0 +683 142 80 -13 0 1714 10 427 0 +684 441 7 -10 0 1606 10 414 0 +685 33 268 -16 706 716 10 836 0 +686 355 174 33 0 1786 10 0 658 +687 228 260 -8 0 1891 10 411 0 +688 114 460 14 0 1665 10 0 923 +689 337 41 8 0 1689 10 0 953 +690 154 374 -19 0 1759 10 918 0 +691 235 13 27 0 1678 10 0 227 +692 303 78 12 179 189 10 0 624 +693 103 464 22 0 1656 10 0 282 +694 325 311 22 0 1819 10 0 986 +695 306 235 -31 0 1858 10 559 0 +696 382 360 26 188 198 10 0 130 +697 235 288 -15 0 1875 10 88 0 +698 0 356 -14 0 1644 10 640 0 +699 178 135 -30 0 1780 10 330 0 +700 226 423 -21 207 217 10 893 0 +701 15 11 15 0 1580 10 0 534 +702 144 35 -29 0 1676 10 636 0 +703 176 199 -17 0 1826 10 254 0 +704 247 306 33 0 1859 10 0 253 +705 396 417 -10 0 1694 10 276 0 +706 289 220 -15 0 1866 10 218 0 +707 23 235 -16 0 1688 10 637 0 +708 137 377 23 169 179 10 0 551 +709 400 71 -23 0 1682 10 348 0 +710 261 359 10 0 1806 10 0 626 +711 438 127 2 0 1691 10 0 633 +712 318 280 -15 0 1841 10 672 0 +713 333 293 -24 0 1822 10 967 0 +714 436 295 11 0 1724 10 0 186 +715 62 94 -24 0 1671 10 155 0 +716 495 355 -28 1253 1263 10 219 0 +717 13 394 15 0 1638 0 0 1004 +718 172 292 17 0 1827 10 0 770 +719 14 232 -20 0 1679 10 86 0 +720 437 90 -24 0 1669 10 376 0 +721 214 274 -13 0 1872 10 235 0 +722 420 383 -36 0 1700 10 74 0 +723 120 261 5 0 1785 10 0 824 +724 179 75 13 0 1727 10 0 798 +725 484 224 7 0 1680 10 0 319 +726 214 245 -17 0 1879 10 746 0 +727 395 474 -13 0 1649 10 469 0 +728 368 311 14 0 1783 10 0 862 +729 199 203 20 0 1846 10 0 51 +730 485 428 -31 1500 1510 10 825 0 +731 86 199 -23 0 1744 10 606 0 +732 447 272 12 0 1717 10 0 736 +733 40 304 -21 1155 1165 10 838 0 +734 475 267 7 0 1690 10 0 922 +735 482 141 14 1021 1031 10 0 288 +736 489 274 -12 544 554 10 732 0 +737 26 342 -21 0 1673 10 45 0 +738 139 438 24 0 1697 10 0 208 +739 12 358 7 1234 1244 0 0 1015 +740 125 61 -17 0 1689 10 627 0 +741 360 284 -21 0 1800 10 487 0 +742 29 358 -27 0 1670 10 593 0 +743 285 247 -12 0 1880 10 510 0 +744 248 386 22 0 1779 0 0 1023 +745 415 207 18 0 1745 10 0 116 +746 130 247 17 0 1795 10 0 726 +747 172 66 -14 1313 1323 10 791 0 +748 92 259 4 409 419 10 0 885 +749 379 486 -12 0 1647 10 644 0 +750 452 484 26 0 1606 10 0 342 +751 268 288 26 0 1873 10 0 970 +752 349 43 -23 0 1686 10 773 0 +753 225 269 30 0 1884 10 0 853 +754 50 383 -1 270 280 10 956 0 +755 110 251 -5 508 518 10 289 0 +756 461 182 13 0 1694 10 0 562 +757 255 487 19 0 1678 10 0 662 +758 133 202 33 0 1789 10 0 30 +759 34 329 2 1053 1063 10 0 404 +760 368 452 16 0 1682 10 0 236 +761 242 106 -24 0 1771 10 366 0 +762 171 303 18 0 1820 10 0 898 +763 329 456 19 0 1695 10 0 631 +764 490 286 -17 0 1673 10 554 0 +765 61 214 -19 0 1723 10 135 0 +766 365 74 24 0 1705 10 0 778 +767 321 149 18 0 1792 10 0 13 +768 84 453 19 0 1653 10 0 324 +769 26 442 23 0 1620 10 0 23 +770 180 283 -17 0 1838 10 718 0 +771 394 322 12 1035 1045 0 0 1012 +772 348 348 23 0 1777 10 0 25 +773 309 161 23 0 1809 10 0 752 +774 385 58 -17 0 1681 10 153 0 +775 228 287 21 43 53 10 0 299 +776 312 453 6 560 570 10 0 913 +777 35 344 -21 873 883 10 830 0 +778 393 98 -24 0 1707 10 766 0 +779 208 488 -10 0 1674 10 460 0 +780 235 33 -20 0 1698 10 429 0 +781 140 137 32 0 1758 10 0 448 +782 405 187 -18 1261 1271 10 894 0 +783 330 371 -15 0 1770 10 175 0 +784 265 0 -14 0 1665 10 273 0 +785 295 89 -24 0 1748 10 864 0 +786 3 23 -16 0 1580 10 275 0 +787 363 225 -31 0 1800 10 802 0 +788 148 208 -14 0 1805 10 553 0 +789 466 362 15 0 1672 10 0 996 +790 267 290 -25 0 1872 10 459 0 +791 98 2 14 0 1625 10 0 747 +792 131 246 -25 842 852 10 424 0 +793 418 75 -21 0 1673 10 434 0 +794 366 260 23 0 1799 10 0 89 +795 138 28 23 1107 1117 10 0 472 +796 209 212 -29 0 1860 10 625 0 +797 443 167 17 553 563 10 0 676 +798 156 65 -13 1047 1057 10 724 0 +799 279 355 9 0 1807 10 0 164 +800 206 172 -14 798 808 10 281 0 +801 32 94 14 940 950 0 0 1009 +802 301 239 31 52 62 10 0 787 +803 471 368 -16 0 1665 10 910 0 +804 133 273 -25 0 1796 10 959 0 +805 253 74 -22 0 1739 10 815 0 +806 470 405 17 0 1646 10 0 304 +807 77 172 -15 0 1726 10 143 0 +808 77 465 -18 0 1640 10 468 0 +809 466 96 22 1393 1403 10 0 535 +810 402 277 5 0 1761 10 0 198 +811 267 374 23 611 621 10 0 96 +812 450 194 27 635 645 10 0 195 +813 89 65 -15 0 1670 10 246 0 +814 429 389 18 434 444 10 0 128 +815 202 28 22 0 1688 10 0 805 +816 46 389 -26 0 1669 10 944 0 +817 246 407 -25 0 1758 10 581 0 +818 452 110 14 0 1670 10 0 561 +819 213 185 21 0 1841 10 0 173 +820 134 276 15 0 1797 10 0 543 +821 262 97 17 957 967 10 0 339 +822 469 489 4 0 1591 10 0 266 +823 364 71 5 0 1703 10 0 90 +824 68 240 -5 804 814 10 723 0 +825 494 468 31 0 1588 10 0 730 +826 439 222 -21 0 1724 10 887 0 +827 386 225 -31 0 1777 10 991 0 +828 434 359 -14 0 1702 10 874 0 +829 103 177 -21 0 1751 10 95 0 +830 89 322 21 0 1739 10 0 777 +831 307 249 -31 1387 1397 10 209 0 +832 30 155 -34 0 1676 10 248 0 +833 401 314 25 986 996 10 0 555 +834 217 357 23 1430 1440 10 0 77 +835 373 421 21 0 1705 10 0 475 +836 5 281 16 0 1669 10 0 685 +837 173 474 -45 0 1679 10 439 0 +838 36 301 21 0 1696 10 0 733 +839 429 169 -2 0 1719 10 169 0 +840 195 450 -20 0 1708 10 619 0 +841 95 382 -6 0 1712 10 481 0 +842 225 121 -28 0 1784 10 103 0 +843 10 407 36 444 454 10 0 571 +844 221 269 -21 0 1881 10 651 0 +845 264 180 -28 0 1844 10 965 0 +846 168 59 -30 0 1708 10 628 0 +847 281 96 1 0 1758 10 0 98 +848 387 349 -15 0 1746 10 998 0 +849 398 329 -5 0 1748 10 622 0 +850 239 486 -7 0 1679 10 352 0 +851 237 420 15 0 1745 10 0 474 +852 346 354 8 0 1774 0 0 1022 +853 172 314 -30 0 1815 10 753 0 +854 233 230 -32 0 1889 10 927 0 +855 79 80 19 0 1674 10 0 573 +856 243 402 13 0 1763 10 0 346 +857 117 110 13 0 1722 10 0 111 +858 66 314 -7 0 1721 10 544 0 +859 58 391 -23 0 1677 10 166 0 +860 142 360 -7 0 1761 10 659 0 +861 492 326 -15 0 1662 10 347 0 +862 381 328 -14 0 1763 10 728 0 +863 62 236 29 0 1727 10 0 151 +864 344 70 24 0 1712 10 0 785 +865 151 81 28 0 1720 0 0 1017 +866 240 240 -17 0 1901 10 673 0 +867 46 163 -21 0 1694 10 428 0 +868 455 168 -25 877 887 10 168 0 +869 428 202 -30 914 924 10 876 0 +870 432 199 7 0 1726 10 0 589 +871 391 112 -11 1010 1020 10 987 0 +872 451 305 -13 0 1707 10 72 0 +873 214 311 14 70 80 10 0 251 +874 465 367 14 0 1671 10 0 828 +875 164 473 26 0 1676 10 0 50 +876 364 173 30 0 1778 10 0 869 +877 274 261 -18 1717 1727 10 527 0 +878 133 455 25 0 1679 10 0 234 +879 351 481 10 332 342 10 0 920 +880 115 395 11 825 835 10 0 263 +881 297 304 4 0 1844 10 0 578 +882 7 194 29 0 1666 10 0 231 +883 409 255 23 0 1756 10 0 509 +884 87 213 18 0 1748 10 0 197 +885 60 246 -4 0 1725 10 748 0 +886 3 471 -30 0 1584 10 677 0 +887 418 251 21 0 1747 10 0 826 +888 153 362 7 0 1767 10 0 365 +889 323 77 36 0 1728 10 0 645 +890 143 158 12 0 1774 10 0 290 +891 351 148 30 471 481 10 0 87 +892 426 38 23 0 1640 10 0 187 +893 226 316 21 70 80 10 0 700 +894 347 192 18 0 1802 10 0 782 +895 102 6 -13 0 1630 10 385 0 +896 41 120 -31 0 1669 10 979 0 +897 247 443 17 340 350 10 0 445 +898 218 271 -18 0 1877 10 762 0 +899 376 385 12 184 194 10 0 511 +900 241 402 11 0 1763 10 0 413 +901 213 399 18 0 1762 10 0 412 +902 32 191 -8 596 606 10 966 0 +903 441 374 -17 0 1688 10 370 0 +904 376 113 -30 0 1729 10 508 0 +905 215 434 9 0 1728 10 0 630 +906 499 316 -15 0 1658 10 104 0 +907 318 497 -8 0 1659 10 425 0 +908 256 441 34 0 1724 10 0 440 +909 174 397 -2 1255 1265 10 328 0 +910 468 360 16 0 1671 10 0 803 +911 287 256 18 0 1878 10 0 320 +912 448 397 -12 0 1669 10 228 0 +913 352 487 -6 0 1657 10 776 0 +914 253 118 -19 0 1783 10 318 0 +915 159 299 -20 0 1812 10 312 0 +916 351 233 -18 0 1813 10 530 0 +917 268 113 -1 0 1777 10 444 0 +918 164 332 19 0 1797 10 0 690 +919 88 484 -31 0 1631 10 520 0 +920 360 488 -10 0 1653 10 879 0 +921 343 166 28 0 1790 10 0 467 +922 497 266 -7 758 768 10 734 0 +923 138 406 -14 1226 1236 10 688 0 +924 420 224 -29 0 1744 10 67 0 +925 231 410 14 0 1754 10 0 671 +926 199 438 3 0 1721 10 0 182 +927 219 215 32 0 1869 10 0 854 +928 365 274 14 117 127 10 0 590 +929 481 454 -7 0 1607 10 207 0 +930 187 61 19 0 1716 10 0 447 +931 372 97 13 0 1720 10 0 292 +932 187 263 35 64 74 0 0 1031 +933 371 427 23 0 1701 10 0 40 +934 74 215 10 239 249 10 0 382 +935 375 145 12 939 949 10 0 592 +936 365 28 9 278 288 10 0 55 +937 118 314 26 0 1769 10 0 117 +938 60 29 32 1373 1383 10 0 491 +939 478 300 12 0 1682 10 0 204 +940 33 152 -11 0 1677 10 583 0 +941 347 184 -27 1089 1099 10 170 0 +942 94 40 -3 1078 1088 10 240 0 +943 290 328 -17 154 164 10 618 0 +944 96 346 26 0 1734 10 0 816 +945 97 288 -27 0 1758 10 442 0 +946 176 470 -20 557 567 10 369 0 +947 206 97 33 0 1756 10 0 126 +948 210 133 15 0 1792 10 0 33 +949 489 457 -23 0 1599 10 969 0 +950 418 399 20 0 1691 10 0 5 +951 392 491 10 0 1636 10 0 334 +952 437 19 -20 0 1618 10 600 0 +953 495 83 -8 0 1619 10 689 0 +954 468 352 -13 0 1675 10 557 0 +955 390 120 24 0 1724 0 0 1038 +956 80 357 1 0 1715 10 0 754 +957 394 310 10 0 1759 10 0 152 +958 61 441 -30 554 564 10 379 0 +959 52 303 25 0 1711 10 0 804 +960 391 202 -9 0 1767 10 94 0 +961 36 451 15 0 1622 10 0 574 +962 276 84 -1 0 1747 10 176 0 +963 130 140 -35 0 1753 10 377 0 +964 16 287 12 0 1679 10 0 92 +965 292 136 28 0 1794 10 0 845 +966 53 204 8 0 1713 10 0 902 +967 359 287 24 0 1800 10 0 713 +968 309 29 -40 1304 1314 10 660 0 +969 473 491 23 0 1587 10 0 949 +970 273 255 -26 0 1892 10 751 0 +971 263 153 12 0 1818 10 0 106 +972 328 458 -25 778 788 10 78 0 +973 401 164 13 0 1742 10 0 568 +974 480 119 -19 0 1651 10 477 0 +975 488 96 -17 0 1632 10 268 0 +976 149 98 -28 0 1733 10 279 0 +977 49 437 7 0 1641 10 0 453 +978 440 77 -15 0 1659 10 131 0 +979 43 135 31 0 1679 10 0 896 +980 188 151 7 0 1799 10 0 415 +981 175 422 24 0 1728 10 0 333 +982 48 437 4 814 824 10 0 504 +983 334 403 -23 0 1741 10 180 0 +984 372 115 -15 0 1734 10 584 0 +985 111 192 11 0 1765 10 0 529 +986 357 290 -22 0 1801 10 694 0 +987 331 134 11 0 1774 10 0 871 +988 495 199 25 0 1665 10 0 639 +989 441 60 21 1469 1479 10 0 241 +990 51 89 19 1218 1228 10 0 307 +991 452 206 31 502 512 10 0 827 +992 195 386 13 146 156 10 0 539 +993 172 24 -18 1462 1472 10 507 0 +994 408 318 -10 0 1743 10 215 0 +995 410 399 25 244 254 10 0 44 +996 413 345 -15 0 1727 10 789 0 +997 215 129 17 0 1790 10 0 680 +998 380 350 15 0 1751 10 0 848 +999 19 38 -23 0 1602 10 354 0 +1000 166 247 -12 0 1831 10 325 0 +1001 447 184 -27 0 1708 10 575 0 +1002 423 221 -9 0 1740 10 54 0 +1003 495 227 -20 0 1669 10 269 0 +1004 13 394 -15 0 1638 10 717 0 +1005 489 159 -29 0 1660 10 602 0 +1006 235 108 -12 0 1773 10 513 0 +1007 100 66 -15 0 1678 10 614 0 +1008 392 95 -16 0 1705 10 181 0 +1009 32 94 -14 940 950 10 801 0 +1010 13 465 -31 784 794 10 566 0 +1011 471 427 -8 0 1632 10 420 0 +1012 394 322 -12 1035 1045 10 771 0 +1013 311 422 -29 0 1733 10 615 0 +1014 307 412 -8 0 1744 10 374 0 +1015 12 358 -7 1234 1244 10 739 0 +1016 284 457 -17 0 1706 10 450 0 +1017 151 81 -28 0 1720 10 865 0 +1018 411 379 -25 0 1709 10 649 0 +1019 498 457 -15 0 1592 10 531 0 +1020 213 283 -14 0 1866 10 455 0 +1021 142 30 -32 0 1670 10 398 0 +1022 346 354 -8 0 1774 10 852 0 +1023 248 386 -22 0 1779 10 744 0 +1024 380 194 -3 0 1774 10 497 0 +1025 470 138 -16 0 1669 10 83 0 +1026 104 28 -8 0 1650 10 383 0 +1027 80 337 -28 0 1725 10 430 0 +1028 497 296 -14 0 1664 10 438 0 +1029 330 147 -28 858 868 10 114 0 +1030 318 99 -35 1223 1233 10 646 0 +1031 187 263 -35 64 74 10 932 0 +1032 261 201 -15 1524 1534 10 61 0 +1033 248 214 -19 0 1879 10 610 0 +1034 333 163 -32 0 1795 10 613 0 +1035 110 122 -14 0 1726 10 521 0 +1036 175 352 -12 0 1789 10 549 0 +1037 111 392 -18 0 1717 10 171 0 +1038 390 120 -24 0 1724 10 955 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1105.txt b/jsprit-instances/instances/lilim/1000/LR1105.txt new file mode 100644 index 00000000..c8f20a8f --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1105.txt @@ -0,0 +1,1050 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 21 1143 1173 10 0 519 +2 67 190 25 1173 1203 0 0 1030 +3 80 400 -15 1446 1476 10 224 0 +4 439 237 -27 939 969 10 713 0 +5 377 385 6 866 896 10 0 261 +6 449 428 -17 1247 1277 10 806 0 +7 342 481 -15 1440 1470 10 175 0 +8 466 149 16 1186 1216 10 0 602 +9 83 290 14 608 638 10 0 543 +10 251 63 -26 987 1017 10 303 0 +11 328 491 21 678 708 10 0 450 +12 260 472 -19 1036 1066 10 757 0 +13 290 145 -24 1282 1312 10 864 0 +14 266 221 9 33 63 10 0 240 +15 164 320 -15 1095 1125 10 820 0 +16 52 412 22 1406 1436 0 0 1008 +17 485 104 -30 794 824 10 620 0 +18 144 331 13 931 961 10 0 282 +19 387 394 -15 1098 1128 10 475 0 +20 472 57 -10 1295 1325 10 414 0 +21 343 276 15 96 126 10 0 986 +22 104 349 -1 1009 1039 10 956 0 +23 28 467 34 1343 1373 10 0 919 +24 91 427 -19 883 913 10 73 0 +25 429 476 23 573 603 10 0 228 +26 210 276 5 47 77 10 0 167 +27 58 39 12 1163 1193 10 0 832 +28 273 300 30 55 85 10 0 306 +29 41 232 16 209 239 10 0 382 +30 25 53 -28 1020 1050 10 829 0 +31 52 18 28 857 887 10 0 503 +32 27 444 -6 1080 1110 10 208 0 +33 178 72 -12 757 787 10 403 0 +34 406 460 -4 719 749 10 822 0 +35 250 328 24 249 279 10 0 132 +36 492 34 -7 811 841 10 974 0 +37 412 100 -5 513 543 10 652 0 +38 233 87 18 253 283 10 0 396 +39 60 5 -15 1044 1074 10 316 0 +40 406 408 -7 1456 1486 10 943 0 +41 245 42 24 547 577 0 0 1005 +42 166 345 -21 1130 1160 10 45 0 +43 440 294 -12 960 990 10 732 0 +44 370 382 -25 884 914 10 550 0 +45 32 319 21 401 431 10 0 42 +46 480 136 22 256 286 10 0 809 +47 371 163 21 828 858 0 0 1039 +48 0 188 26 932 962 10 0 882 +49 438 5 -20 549 579 10 600 0 +50 132 477 25 327 357 10 0 327 +51 203 211 20 1306 1336 10 0 729 +52 2 264 40 655 685 10 0 424 +53 231 167 15 85 115 10 0 962 +54 423 221 9 258 288 10 0 870 +55 459 53 -21 1122 1152 10 434 0 +56 386 154 -13 1101 1131 10 973 0 +57 130 494 6 759 789 10 0 369 +58 31 175 24 247 277 10 0 69 +59 69 423 32 802 832 10 0 481 +60 352 241 -21 792 822 10 712 0 +61 261 201 -28 1514 1544 10 103 0 +62 59 276 11 892 922 10 0 84 +63 146 188 6 1235 1265 0 0 1003 +64 451 62 5 282 312 10 0 149 +65 299 285 -13 1254 1284 10 72 0 +66 142 372 18 162 192 10 0 234 +67 440 201 -27 893 923 10 812 0 +68 219 210 14 50 80 10 0 610 +69 64 198 -24 1088 1118 10 58 0 +70 390 249 21 582 612 10 0 935 +71 9 101 16 666 696 10 0 895 +72 424 288 13 1057 1087 10 0 65 +73 77 372 19 211 241 10 0 24 +74 298 264 36 50 80 10 0 671 +75 405 454 -20 1303 1333 10 437 0 +76 407 35 -16 1288 1318 10 417 0 +77 225 369 38 121 151 10 0 817 +78 347 459 25 479 509 10 0 760 +79 117 178 28 1117 1147 10 0 144 +80 132 479 -21 257 287 10 893 0 +81 201 66 -21 1167 1197 10 819 0 +82 245 176 -20 1235 1265 10 634 0 +83 470 138 16 1389 1419 10 0 288 +84 115 296 -11 1529 1559 10 62 0 +85 348 476 19 1197 1227 10 0 391 +86 43 210 -17 210 240 10 673 0 +87 327 139 13 1257 1287 10 0 267 +88 49 353 -26 1446 1476 10 944 0 +89 356 256 19 106 136 10 0 406 +90 335 99 25 1218 1248 10 0 767 +91 363 34 19 272 302 10 0 271 +92 33 278 -16 1487 1517 10 836 0 +93 366 288 29 684 714 10 0 204 +94 452 172 9 608 638 10 0 589 +95 86 189 21 227 257 10 0 210 +96 262 369 15 129 159 10 0 413 +97 218 403 -14 1319 1349 10 925 0 +98 218 12 -2 544 574 10 599 0 +99 228 399 14 586 616 10 0 690 +100 492 188 33 715 745 10 0 195 +101 267 174 -35 1618 1648 10 646 0 +102 274 441 -10 695 725 10 710 0 +103 210 113 28 690 720 10 0 61 +104 370 262 15 1099 1129 0 0 1036 +105 303 186 -24 1354 1384 10 955 0 +106 241 180 13 1695 1725 0 0 1023 +107 100 85 -22 351 381 10 515 0 +108 350 199 -15 1201 1231 10 941 0 +109 500 228 8 782 812 10 0 512 +110 251 238 27 12 42 10 0 172 +111 114 102 21 507 537 0 0 1021 +112 345 146 -16 1439 1469 10 592 0 +113 21 146 -18 487 517 10 140 0 +114 330 147 28 848 878 10 0 987 +115 476 61 36 449 479 10 0 181 +116 386 245 16 479 509 10 0 497 +117 201 278 13 56 86 10 0 518 +118 421 499 -23 1345 1375 10 933 0 +119 426 231 24 1028 1058 10 0 887 +120 105 137 -7 452 482 10 667 0 +121 64 437 -18 918 948 10 375 0 +122 181 260 23 69 99 10 0 553 +123 413 391 -36 217 247 10 223 0 +124 370 493 22 571 601 10 0 662 +125 447 267 -25 980 1010 10 250 0 +126 232 101 24 346 376 10 0 482 +127 371 332 14 530 560 10 0 994 +128 447 383 17 237 267 10 0 828 +129 325 147 -31 1187 1217 10 802 0 +130 489 437 -23 707 737 10 969 0 +131 415 95 -20 1177 1207 10 471 0 +132 331 356 -24 712 742 10 35 0 +133 374 346 27 421 451 10 0 355 +134 108 37 -12 549 579 10 890 0 +135 5 224 -43 1055 1085 10 707 0 +136 93 413 17 226 256 10 0 808 +137 210 29 -23 1051 1081 10 502 0 +138 136 265 12 114 144 10 0 918 +139 409 155 19 185 215 10 0 778 +140 111 178 18 156 186 10 0 113 +141 291 251 20 41 71 10 0 378 +142 322 290 -18 1479 1509 10 814 0 +143 57 183 15 1100 1130 10 0 985 +144 181 185 -28 1614 1644 10 79 0 +145 7 382 -22 770 800 10 816 0 +146 425 448 -3 794 824 10 511 0 +147 174 41 15 1303 1333 10 0 993 +148 161 276 8 133 163 10 0 937 +149 398 49 -5 792 822 10 64 0 +150 210 379 12 709 739 10 0 408 +151 60 231 32 1026 1056 0 0 1029 +152 453 360 13 230 260 10 0 862 +153 367 97 -3 988 1018 10 154 0 +154 488 3 3 401 431 10 0 153 +155 44 115 24 246 276 10 0 252 +156 48 293 22 276 306 10 0 853 +157 64 135 -17 868 898 10 254 0 +158 65 62 -17 976 1006 10 627 0 +159 404 207 -40 911 941 10 558 0 +160 68 303 22 221 251 10 0 844 +161 263 418 25 278 308 10 0 451 +162 147 30 -24 1109 1139 10 189 0 +163 384 149 -21 1197 1227 10 590 0 +164 340 416 36 321 351 10 0 334 +165 271 128 12 346 376 10 0 917 +166 89 358 -16 1247 1277 10 608 0 +167 20 480 -5 570 600 10 26 0 +168 488 173 -31 1210 1240 10 209 0 +169 439 156 2 526 556 10 0 735 +170 389 156 27 716 746 10 0 613 +171 111 392 -19 1169 1199 10 199 0 +172 267 162 -27 1449 1479 10 110 0 +173 248 176 -14 1401 1431 10 281 0 +174 413 476 -7 1179 1209 10 431 0 +175 352 481 15 1285 1315 10 0 7 +176 264 135 -24 879 909 10 499 0 +177 29 462 17 1310 1340 0 0 1038 +178 148 462 10 727 757 10 0 762 +179 44 140 -31 868 898 10 979 0 +180 414 378 -26 495 525 10 696 0 +181 392 95 -36 766 796 10 115 0 +182 216 341 -9 654 684 10 905 0 +183 211 411 15 1147 1177 10 0 851 +184 317 45 8 658 688 10 0 564 +185 178 150 33 632 662 10 0 500 +186 428 302 -12 1016 1046 10 939 0 +187 450 45 24 504 534 10 0 766 +188 453 318 30 374 404 10 0 370 +189 186 135 24 718 748 10 0 162 +190 11 403 18 343 373 10 0 843 +191 433 447 20 794 824 0 0 1015 +192 272 420 -8 1386 1416 10 425 0 +193 429 59 9 459 489 10 0 232 +194 200 27 22 525 555 10 0 366 +195 498 171 -33 1256 1286 10 100 0 +196 487 320 -17 858 888 10 849 0 +197 45 166 -16 1013 1043 10 361 0 +198 490 276 33 241 271 10 0 244 +199 126 391 19 273 303 10 0 171 +200 92 18 8 1124 1154 10 0 383 +201 293 228 19 48 78 10 0 372 +202 343 205 -15 767 797 10 218 0 +203 182 480 31 365 395 10 0 539 +204 385 285 -29 868 898 10 93 0 +205 44 344 -2 1079 1109 10 759 0 +206 170 347 -21 436 466 10 651 0 +207 457 492 7 508 538 10 0 996 +208 124 448 6 369 399 10 0 32 +209 398 210 31 153 183 10 0 168 +210 75 118 -21 409 439 10 95 0 +211 105 474 -2 471 501 10 324 0 +212 134 211 35 122 152 10 0 740 +213 211 248 26 39 69 10 0 337 +214 212 186 -31 1722 1752 10 623 0 +215 492 335 -19 828 858 10 803 0 +216 497 483 12 353 383 10 0 490 +217 440 436 -31 892 922 10 825 0 +218 311 203 15 723 753 10 0 202 +219 491 369 -13 730 760 10 557 0 +220 67 378 -19 470 500 10 841 0 +221 383 17 15 940 970 10 0 317 +222 7 82 25 412 442 10 0 354 +223 342 319 36 115 145 10 0 123 +224 78 406 15 960 990 10 0 3 +225 103 123 -37 490 520 10 655 0 +226 241 38 -27 532 562 10 691 0 +227 224 3 -5 690 720 10 447 0 +228 436 467 -23 736 766 10 25 0 +229 438 488 -12 327 357 10 899 0 +230 351 60 15 215 245 10 0 823 +231 13 214 -11 1354 1384 10 824 0 +232 429 67 -9 732 762 10 193 0 +233 498 456 27 1406 1436 10 0 730 +234 135 400 -18 299 329 10 66 0 +235 215 293 13 55 85 10 0 878 +236 354 416 10 679 709 10 0 705 +237 294 421 -21 1575 1605 10 907 0 +238 208 445 22 1332 1362 10 0 926 +239 230 320 -10 1192 1222 10 630 0 +240 157 38 -9 1048 1078 10 14 0 +241 441 100 -21 873 903 10 292 0 +242 61 170 20 1006 1036 10 0 638 +243 79 467 22 351 381 10 0 574 +244 365 190 -33 1477 1507 10 198 0 +245 282 1 18 1042 1072 10 0 295 +246 124 111 15 789 819 10 0 636 +247 247 219 17 31 61 10 0 914 +248 28 180 -23 386 416 10 409 0 +249 167 488 -13 252 282 10 992 0 +250 442 289 25 195 225 10 0 125 +251 136 430 14 710 740 10 0 321 +252 38 15 -24 1091 1121 10 155 0 +253 246 314 -36 1445 1475 10 384 0 +254 176 200 17 568 598 10 0 157 +255 337 232 -14 1571 1601 10 648 0 +256 257 133 -18 862 892 10 842 0 +257 295 247 -26 1303 1333 10 983 0 +258 39 162 18 565 595 0 0 1010 +259 79 257 -18 953 983 10 884 0 +260 236 126 23 124 154 10 0 675 +261 259 498 -6 1075 1105 10 5 0 +262 180 162 9 173 203 10 0 435 +263 53 466 9 335 365 10 0 688 +264 167 291 27 1634 1664 10 0 532 +265 89 185 -35 600 630 10 377 0 +266 487 446 -9 1340 1370 10 954 0 +267 308 199 -13 1508 1538 10 87 0 +268 481 84 17 506 536 10 0 598 +269 495 227 -7 344 374 10 725 0 +270 397 57 -24 1476 1506 10 774 0 +271 372 39 -19 724 754 10 91 0 +272 278 450 -24 1375 1405 10 548 0 +273 292 32 14 229 259 10 0 576 +274 90 496 -18 1395 1425 10 468 0 +275 68 53 16 739 769 10 0 491 +276 371 423 10 211 241 10 0 743 +277 273 149 -18 1503 1533 10 362 0 +278 297 283 -17 1349 1379 10 618 0 +279 120 37 28 775 805 10 0 865 +280 371 488 10 583 613 10 0 913 +281 206 174 14 800 830 10 0 173 +282 174 347 -13 1015 1045 10 18 0 +283 330 281 14 1330 1360 10 0 916 +284 67 451 5 1216 1246 10 0 349 +285 27 464 -24 1291 1321 10 738 0 +286 361 178 -27 972 1002 10 575 0 +287 463 406 -14 857 887 10 929 0 +288 456 157 -16 1455 1485 10 83 0 +289 153 244 5 108 138 10 0 493 +290 153 192 -30 866 896 10 449 0 +291 352 63 6 1178 1208 10 0 845 +292 371 71 21 287 317 10 0 241 +293 163 472 -14 653 683 10 946 0 +294 448 495 -4 384 414 10 881 0 +295 282 10 -18 1262 1292 10 245 0 +296 66 163 6 395 425 10 0 393 +297 314 205 -18 1527 1557 10 894 0 +298 83 169 -28 777 807 10 703 0 +299 221 291 9 50 80 10 0 770 +300 374 116 9 587 617 10 0 464 +301 418 269 3 1205 1235 0 0 1004 +302 178 302 19 887 917 10 0 664 +303 250 57 26 748 778 10 0 10 +304 475 352 -16 310 340 10 910 0 +305 1 252 5 275 305 10 0 315 +306 286 356 -30 111 141 10 28 0 +307 65 82 13 740 770 10 0 666 +308 154 392 9 171 201 10 0 582 +309 196 56 -22 609 639 10 595 0 +310 366 390 23 1318 1348 0 0 1034 +311 436 25 19 1282 1312 10 0 989 +312 67 352 20 373 403 10 0 859 +313 173 182 -20 102 132 10 854 0 +314 390 34 -40 1060 1090 10 660 0 +315 18 225 -5 691 721 10 305 0 +316 57 43 15 1023 1053 10 0 39 +317 388 44 -15 1131 1161 10 221 0 +318 269 112 -1 1263 1293 10 847 0 +319 374 260 -16 1761 1791 10 357 0 +320 291 213 -25 1258 1288 10 572 0 +321 178 420 -14 1071 1101 10 251 0 +322 389 255 15 785 815 10 0 510 +323 134 194 -11 1652 1682 10 583 0 +324 93 490 2 379 409 10 0 211 +325 64 294 12 1101 1131 10 0 945 +326 493 111 -32 541 571 10 953 0 +327 150 484 -25 625 655 10 50 0 +328 235 316 2 656 686 10 0 478 +329 239 15 2 604 634 10 0 780 +330 193 138 30 661 691 10 0 415 +331 40 278 -14 1104 1134 10 640 0 +332 307 52 -13 920 950 10 542 0 +333 161 416 -23 1011 1041 10 708 0 +334 381 457 -36 471 501 10 164 0 +335 55 318 13 312 342 10 0 423 +336 80 279 -26 1158 1188 10 495 0 +337 48 162 -26 220 250 10 213 0 +338 91 27 14 1182 1212 0 0 1007 +339 288 70 -12 183 213 10 692 0 +340 177 404 17 1262 1292 10 0 549 +341 10 237 -27 616 646 10 401 0 +342 493 493 20 856 886 10 0 649 +343 440 292 24 940 970 10 0 570 +344 349 76 -26 1031 1061 10 645 0 +345 47 208 30 226 256 10 0 525 +346 283 454 14 1265 1295 10 0 626 +347 486 324 -29 770 800 10 764 0 +348 392 87 23 1183 1213 10 0 584 +349 122 422 -5 1457 1487 10 284 0 +350 37 281 -21 493 523 10 838 0 +351 413 127 -27 831 861 10 454 0 +352 222 499 7 845 875 10 0 353 +353 211 446 -7 1123 1153 10 352 0 +354 30 7 -25 1189 1219 10 222 0 +355 398 341 -27 939 969 10 133 0 +356 26 67 -8 1317 1347 10 665 0 +357 461 186 16 1512 1542 10 0 319 +358 313 391 5 154 184 10 0 749 +359 471 94 -19 999 1029 10 535 0 +360 341 72 -10 805 835 10 458 0 +361 130 186 16 136 166 10 0 197 +362 257 57 18 1226 1256 10 0 277 +363 94 344 -12 682 712 10 737 0 +364 6 53 8 587 617 10 0 591 +365 146 376 8 234 264 10 0 981 +366 244 13 -22 1013 1043 10 194 0 +367 29 336 -38 332 362 10 654 0 +368 306 42 11 477 507 10 0 546 +369 177 486 -6 1597 1627 10 57 0 +370 489 338 -30 1397 1427 10 188 0 +371 179 318 2 1121 1151 10 0 527 +372 344 203 -19 167 197 10 201 0 +373 149 341 6 404 434 10 0 479 +374 307 412 8 404 434 10 0 615 +375 68 450 18 633 663 10 0 121 +376 420 80 -19 1097 1127 10 706 0 +377 144 220 35 110 140 10 0 265 +378 497 54 -20 978 1008 10 141 0 +379 80 458 30 371 401 10 0 769 +380 84 377 10 926 956 10 0 830 +381 332 382 -17 1010 1040 10 526 0 +382 6 196 -16 1203 1233 10 29 0 +383 104 28 -8 1473 1503 10 200 0 +384 224 320 36 1284 1314 10 0 253 +385 87 3 -15 1433 1463 10 552 0 +386 149 214 7 482 512 10 0 796 +387 98 29 -18 1047 1077 10 577 0 +388 135 30 -30 474 504 10 628 0 +389 287 397 12 564 594 10 0 850 +390 107 374 8 914 944 10 0 430 +391 355 485 -19 1479 1509 10 85 0 +392 51 286 -12 1459 1489 10 426 0 +393 49 118 -6 1071 1101 10 296 0 +394 159 226 16 94 124 10 0 758 +395 185 431 -18 387 417 10 901 0 +396 262 92 -18 630 660 10 38 0 +397 475 198 20 835 865 10 0 868 +398 142 30 -23 1246 1276 10 795 0 +399 481 207 -33 856 886 10 463 0 +400 174 122 14 593 623 10 0 514 +401 35 263 27 270 300 10 0 341 +402 24 71 11 346 376 10 0 614 +403 173 65 12 448 478 10 0 33 +404 91 326 -11 963 993 10 880 0 +405 470 417 11 737 767 10 0 420 +406 397 153 -19 882 912 10 89 0 +407 295 283 -13 893 923 10 856 0 +408 174 376 -12 1419 1449 10 150 0 +409 38 190 23 285 315 10 0 248 +410 16 68 11 296 326 10 0 855 +411 179 286 -21 341 371 10 775 0 +412 244 422 14 538 568 10 0 569 +413 250 441 -15 756 786 10 96 0 +414 497 18 10 1130 1160 10 0 20 +415 195 111 -30 998 1028 10 330 0 +416 26 221 -1 996 1026 10 1000 0 +417 442 5 16 320 350 10 0 76 +418 44 496 32 402 432 10 0 693 +419 448 404 15 599 629 10 0 523 +420 471 427 -11 816 846 10 405 0 +421 460 424 11 1455 1485 0 0 1019 +422 461 195 -19 1395 1425 10 538 0 +423 146 313 -13 1195 1225 10 335 0 +424 19 273 -40 1017 1047 10 52 0 +425 245 461 8 649 679 10 0 192 +426 69 266 12 758 788 10 0 392 +427 191 84 13 867 897 10 0 747 +428 68 160 -35 1136 1166 10 488 0 +429 212 47 -19 801 831 10 930 0 +430 80 337 -8 1119 1149 10 390 0 +431 412 478 7 960 990 10 0 174 +432 225 488 -9 636 666 10 484 0 +433 105 140 27 182 212 10 0 857 +434 389 43 21 396 426 10 0 55 +435 177 156 -9 167 197 10 262 0 +436 179 497 -14 1411 1441 10 837 0 +437 377 432 20 831 861 10 0 75 +438 497 296 -13 613 643 10 536 0 +439 152 476 -12 523 553 10 462 0 +440 277 428 -3 490 520 10 457 0 +441 64 5 -15 1129 1159 10 999 0 +442 44 311 27 407 437 10 0 959 +443 165 59 27 943 973 10 0 980 +444 261 138 -12 618 648 10 971 0 +445 268 351 7 1675 1705 0 0 1044 +446 48 150 15 655 685 10 0 529 +447 215 79 5 224 254 10 0 227 +448 109 56 27 239 269 10 0 791 +449 171 188 30 621 651 10 0 290 +450 284 457 -21 1499 1529 10 11 0 +451 274 442 -25 1066 1096 10 161 0 +452 33 286 -17 1546 1576 10 746 0 +453 112 433 -23 235 265 10 597 0 +454 423 170 27 513 543 10 0 351 +455 213 283 14 1471 1501 0 0 1020 +456 240 34 -14 1560 1590 10 674 0 +457 283 438 3 231 261 10 0 440 +458 324 99 10 338 368 10 0 360 +459 259 301 25 99 129 10 0 581 +460 189 402 10 536 566 10 0 641 +461 215 282 21 1440 1470 0 0 1025 +462 166 440 12 207 237 10 0 439 +463 374 232 33 125 155 10 0 399 +464 339 113 -9 761 791 10 300 0 +465 335 46 -8 1342 1372 10 689 0 +466 313 493 -1 1193 1223 10 783 0 +467 432 66 -12 1071 1101 10 720 0 +468 76 462 18 956 986 10 0 274 +469 397 477 13 1216 1246 0 0 1024 +470 196 489 23 1030 1060 10 0 501 +471 354 156 20 832 862 10 0 131 +472 171 24 -15 1383 1413 10 948 0 +473 187 73 -32 292 322 10 927 0 +474 243 408 -23 1434 1464 10 476 0 +475 421 387 15 801 831 10 0 19 +476 141 426 23 531 561 10 0 474 +477 415 118 19 217 247 10 0 892 +478 240 255 -2 1611 1641 10 328 0 +479 162 388 -6 1126 1156 10 373 0 +480 413 493 26 1218 1248 10 0 750 +481 69 414 -32 1263 1293 10 59 0 +482 273 70 -24 619 649 10 126 0 +483 142 14 18 835 865 0 0 1017 +484 185 434 9 574 604 10 0 432 +485 360 294 -25 1418 1448 10 995 0 +486 265 240 9 18 48 10 0 494 +487 280 245 21 30 60 10 0 876 +488 87 51 35 514 544 10 0 428 +489 195 273 22 59 89 10 0 504 +490 422 498 -12 692 722 10 216 0 +491 95 64 -16 766 796 10 275 0 +492 63 155 -23 965 995 10 807 0 +493 24 259 -5 370 400 10 289 0 +494 376 92 -9 991 1021 10 486 0 +495 83 300 26 500 530 10 0 336 +496 72 477 46 288 318 0 0 1042 +497 380 194 -16 714 744 10 116 0 +498 72 227 -4 564 594 10 765 0 +499 238 123 24 781 811 10 0 176 +500 188 119 -33 975 1005 10 185 0 +501 229 322 -23 1660 1690 10 470 0 +502 150 68 23 423 453 10 0 137 +503 67 24 -28 1018 1048 10 31 0 +504 63 420 -22 520 550 10 489 0 +505 339 144 -28 1099 1129 10 965 0 +506 454 201 16 1305 1335 0 0 1012 +507 158 24 18 611 641 10 0 805 +508 365 119 -13 382 412 10 984 0 +509 440 284 -7 852 882 10 734 0 +510 417 212 -15 910 940 10 322 0 +511 404 439 3 243 273 10 0 146 +512 472 248 -8 834 864 10 109 0 +513 235 108 12 1080 1110 10 0 761 +514 174 67 -14 1260 1290 10 400 0 +515 132 151 22 154 184 10 0 107 +516 217 207 -4 1382 1412 10 976 0 +517 162 306 22 119 149 10 0 596 +518 48 366 -13 743 773 10 117 0 +519 209 68 -21 1568 1598 10 1 0 +520 94 497 31 782 812 10 0 768 +521 110 122 -24 1509 1539 10 603 0 +522 274 403 17 887 917 10 0 900 +523 421 386 -15 824 854 10 419 0 +524 399 175 13 747 777 10 0 568 +525 56 268 -30 1064 1094 10 345 0 +526 322 406 17 829 859 10 0 381 +527 244 277 -2 1301 1331 10 371 0 +528 105 181 19 1531 1561 0 0 1035 +529 30 97 -15 1210 1240 10 446 0 +530 359 246 -23 1423 1453 10 811 0 +531 498 457 15 913 943 0 0 1026 +532 190 267 -27 1754 1784 10 264 0 +533 334 481 -34 330 360 10 656 0 +534 18 24 -11 628 658 10 786 0 +535 482 104 19 807 837 10 0 359 +536 460 328 13 224 254 10 0 438 +537 320 211 -15 993 1023 10 621 0 +538 494 165 19 604 634 10 0 422 +539 167 445 -31 1412 1442 10 203 0 +540 340 291 22 470 500 10 0 541 +541 272 234 -22 1590 1620 10 540 0 +542 325 56 13 796 826 10 0 332 +543 71 304 -14 689 719 10 9 0 +544 87 311 7 174 204 10 0 721 +545 207 487 -25 689 719 10 663 0 +546 332 5 -11 1033 1063 10 368 0 +547 161 275 -29 1347 1377 10 585 0 +548 268 458 24 523 553 10 0 272 +549 175 352 -17 1665 1695 10 340 0 +550 398 476 25 418 448 10 0 44 +551 51 360 -21 1145 1175 10 777 0 +552 21 70 15 771 801 10 0 385 +553 80 251 -23 304 334 10 122 0 +554 457 280 -13 1000 1030 10 872 0 +555 423 315 12 184 214 10 0 906 +556 66 88 2 830 860 10 0 715 +557 479 387 13 397 427 10 0 219 +558 436 123 40 225 255 10 0 159 +559 286 244 -15 1284 1314 10 790 0 +560 449 190 -31 1140 1170 10 736 0 +561 456 113 -8 1227 1257 10 839 0 +562 480 152 -2 1022 1052 10 711 0 +563 100 266 5 470 500 10 0 888 +564 343 34 -8 725 755 10 184 0 +565 374 306 -20 994 1024 10 950 0 +566 13 465 31 774 804 10 0 659 +567 230 487 -34 1130 1160 10 908 0 +568 442 153 -13 1189 1219 10 524 0 +569 240 362 -14 1414 1444 10 412 0 +570 433 319 -24 1376 1406 10 343 0 +571 0 422 -15 821 851 10 717 0 +572 297 131 25 1165 1195 10 0 320 +573 71 12 2 297 327 10 0 813 +574 44 440 -22 789 819 10 243 0 +575 447 184 27 424 454 10 0 286 +576 341 59 -14 790 820 10 273 0 +577 132 32 18 784 814 10 0 387 +578 411 396 23 920 950 10 0 682 +579 450 416 -9 577 607 10 848 0 +580 323 34 -7 1315 1345 10 653 0 +581 244 368 -25 414 444 10 459 0 +582 90 477 -9 277 307 10 308 0 +583 34 169 11 484 514 10 0 323 +584 351 128 -23 1253 1283 10 348 0 +585 71 282 29 642 672 10 0 547 +586 157 269 -16 1576 1606 10 733 0 +587 392 1 -20 605 635 10 684 0 +588 39 153 26 798 828 10 0 867 +589 306 229 -9 1320 1350 10 94 0 +590 415 253 21 367 397 10 0 163 +591 92 76 -8 1139 1169 10 364 0 +592 437 98 16 1114 1144 10 0 112 +593 12 367 27 326 356 10 0 698 +594 448 414 -15 1223 1253 10 789 0 +595 128 113 22 363 393 10 0 309 +596 43 360 -22 835 865 10 517 0 +597 102 422 23 226 256 10 0 453 +598 480 131 -17 688 718 10 268 0 +599 210 81 2 399 429 10 0 98 +600 432 2 20 467 497 10 0 49 +601 396 83 -13 1586 1616 10 668 0 +602 489 159 -16 1428 1458 10 8 0 +603 56 75 24 1438 1468 10 0 521 +604 66 31 25 1048 1078 10 0 942 +605 460 117 14 520 550 10 0 827 +606 175 239 23 75 105 10 0 788 +607 217 333 -33 411 441 10 704 0 +608 62 375 16 349 379 10 0 166 +609 82 183 -16 1102 1132 10 637 0 +610 248 214 -14 1479 1509 10 68 0 +611 385 239 21 786 816 10 0 745 +612 371 315 -15 1166 1196 10 998 0 +613 333 163 -27 1240 1270 10 170 0 +614 100 66 -11 1400 1430 10 402 0 +615 311 422 -8 988 1018 10 374 0 +616 153 235 10 98 128 0 0 1032 +617 168 109 10 204 234 10 0 846 +618 284 319 17 817 847 10 0 278 +619 195 464 20 1541 1571 0 0 1006 +620 382 9 30 274 304 10 0 17 +621 325 210 15 933 963 10 0 537 +622 366 334 5 410 440 10 0 833 +623 200 78 31 993 1023 10 0 214 +624 351 5 -6 496 526 10 642 0 +625 197 202 -8 1204 1234 10 726 0 +626 270 337 -14 1783 1813 10 346 0 +627 125 65 17 788 818 10 0 158 +628 120 17 30 279 309 10 0 388 +629 84 255 13 282 312 10 0 755 +630 222 331 10 540 570 10 0 239 +631 332 459 -19 369 399 10 763 0 +632 226 175 -17 1694 1724 10 997 0 +633 404 140 -22 1259 1289 10 975 0 +634 223 178 20 1136 1166 10 0 82 +635 330 308 24 1170 1200 0 0 1011 +636 140 108 -15 1071 1101 10 246 0 +637 34 239 16 219 249 10 0 609 +638 94 192 -20 1080 1110 10 242 0 +639 458 213 -18 1128 1158 10 911 0 +640 13 314 14 245 275 10 0 331 +641 202 391 -10 624 654 10 460 0 +642 339 41 6 456 486 10 0 624 +643 224 56 13 1186 1216 10 0 889 +644 345 431 12 345 375 10 0 951 +645 292 104 26 304 334 10 0 344 +646 318 99 35 1213 1243 10 0 101 +647 46 248 9 814 844 0 0 1027 +648 482 184 14 1107 1137 10 0 255 +649 411 379 -20 1193 1223 10 342 0 +650 293 174 31 87 117 10 0 936 +651 169 305 21 162 192 10 0 206 +652 394 47 5 313 343 10 0 37 +653 323 29 7 1137 1167 10 0 580 +654 65 343 38 207 237 10 0 367 +655 158 179 37 116 146 10 0 225 +656 299 353 34 114 144 10 0 533 +657 9 233 31 306 336 10 0 719 +658 330 138 18 1110 1140 0 0 1014 +659 48 412 -31 1032 1062 10 566 0 +660 385 17 40 809 839 10 0 314 +661 382 110 -24 1112 1142 10 871 0 +662 336 493 -22 1493 1523 10 124 0 +663 181 441 25 542 572 10 0 545 +664 162 301 -19 1613 1643 10 302 0 +665 1 101 8 1257 1287 10 0 356 +666 80 117 -13 824 854 10 307 0 +667 210 219 7 50 80 10 0 120 +668 404 59 13 913 943 10 0 601 +669 288 439 16 273 303 10 0 727 +670 149 458 -26 1164 1194 10 875 0 +671 257 391 -36 1633 1663 10 74 0 +672 405 349 -21 522 552 10 835 0 +673 191 215 17 68 98 10 0 86 +674 231 29 14 1226 1256 10 0 456 +675 253 50 -23 226 256 10 260 0 +676 441 177 -23 1001 1031 10 773 0 +677 5 445 30 313 343 10 0 977 +678 463 253 -25 1047 1077 10 922 0 +679 435 180 37 225 255 10 0 756 +680 198 85 28 263 293 10 0 947 +681 59 388 -26 663 693 10 858 0 +682 373 418 -23 1259 1289 10 578 0 +683 142 80 -17 492 522 10 963 0 +684 441 7 20 392 422 10 0 587 +685 33 268 -12 696 726 10 964 0 +686 355 174 33 715 745 10 0 921 +687 228 260 12 1606 1636 0 0 1041 +688 114 460 -9 1086 1116 10 263 0 +689 337 41 8 1002 1032 10 0 465 +690 154 374 -14 937 967 10 99 0 +691 235 13 27 359 389 10 0 226 +692 303 78 12 179 209 10 0 339 +693 103 464 -32 1273 1303 10 418 0 +694 325 311 -14 1322 1352 10 728 0 +695 306 235 25 57 87 10 0 904 +696 382 360 26 178 208 10 0 180 +697 235 288 18 40 70 10 0 915 +698 0 356 -27 1086 1116 10 593 0 +699 178 135 -32 1514 1544 10 781 0 +700 226 423 15 197 227 10 0 877 +701 15 11 15 952 982 10 0 938 +702 144 35 26 239 269 10 0 815 +703 176 199 28 89 119 10 0 298 +704 247 306 33 56 86 10 0 607 +705 396 417 -10 810 840 10 236 0 +706 289 220 19 49 79 10 0 376 +707 23 235 43 1023 1053 10 0 135 +708 137 377 23 169 199 10 0 333 +709 400 71 -13 1372 1402 10 931 0 +710 261 359 10 109 139 10 0 102 +711 438 127 2 941 971 10 0 562 +712 318 280 21 74 104 10 0 60 +713 333 293 27 617 647 10 0 4 +714 436 295 11 528 558 10 0 810 +715 62 94 -2 951 981 10 556 0 +716 495 355 -19 1243 1273 10 861 0 +717 13 394 15 373 403 10 0 571 +718 172 292 17 92 122 10 0 754 +719 14 232 -31 305 335 10 657 0 +720 437 90 12 585 615 10 0 467 +721 214 274 -7 1369 1399 10 544 0 +722 420 383 27 982 1012 0 0 1022 +723 120 261 -4 793 823 10 748 0 +724 179 75 13 740 770 10 0 798 +725 484 224 7 300 330 10 0 269 +726 214 245 8 36 66 10 0 625 +727 395 474 -16 387 417 10 669 0 +728 368 311 14 926 956 10 0 694 +729 199 203 -20 1457 1487 10 51 0 +730 485 428 -27 1490 1520 10 233 0 +731 86 199 23 278 308 0 0 1013 +732 447 272 12 384 414 10 0 43 +733 40 304 16 1145 1175 10 0 586 +734 475 267 7 780 810 10 0 509 +735 482 141 -2 1011 1041 10 169 0 +736 489 274 31 534 564 10 0 560 +737 26 342 12 321 351 10 0 363 +738 139 438 24 218 248 10 0 285 +739 12 358 -23 1224 1254 10 742 0 +740 125 61 -35 612 642 10 212 0 +741 360 284 19 667 697 10 0 787 +742 29 358 23 611 641 10 0 739 +743 285 247 -10 1275 1305 10 276 0 +744 248 386 22 378 408 10 0 834 +745 415 207 -21 900 930 10 611 0 +746 130 247 17 120 150 10 0 452 +747 172 66 -13 1303 1333 10 427 0 +748 92 259 4 399 429 10 0 723 +749 379 486 -5 672 702 10 358 0 +750 452 484 -26 1278 1308 10 480 0 +751 268 288 26 1267 1297 0 0 1018 +752 349 43 26 229 259 10 0 952 +753 225 269 30 1271 1301 0 0 1009 +754 50 383 -17 260 290 10 718 0 +755 110 251 -13 498 528 10 629 0 +756 461 182 -37 629 659 10 679 0 +757 255 487 19 398 428 10 0 12 +758 133 202 -16 461 491 10 394 0 +759 34 329 2 1043 1073 10 0 205 +760 368 452 -25 670 700 10 78 0 +761 242 106 -12 1268 1298 10 513 0 +762 171 303 -10 1589 1619 10 178 0 +763 329 456 19 249 279 10 0 631 +764 490 286 29 522 552 10 0 347 +765 61 214 4 342 372 10 0 498 +766 365 74 -24 848 878 10 187 0 +767 321 149 -25 1425 1455 10 90 0 +768 84 453 -31 1223 1253 10 520 0 +769 26 442 -30 1344 1374 10 379 0 +770 180 283 -9 744 774 10 299 0 +771 394 322 12 1025 1055 10 0 957 +772 348 348 -8 935 965 10 852 0 +773 309 161 23 583 613 10 0 676 +774 385 58 24 405 435 10 0 270 +775 228 287 21 43 73 10 0 411 +776 312 453 6 550 580 10 0 972 +777 35 344 21 863 893 10 0 551 +778 393 98 -19 753 783 10 139 0 +779 208 488 -14 478 508 10 873 0 +780 235 33 -2 1337 1367 10 329 0 +781 140 137 32 570 600 10 0 699 +782 405 187 34 1251 1281 10 0 794 +783 330 371 1 559 589 10 0 466 +784 265 0 10 896 926 0 0 1002 +785 295 89 23 742 772 10 0 821 +786 3 23 11 391 421 10 0 534 +787 363 225 -19 856 886 10 741 0 +788 148 208 -23 526 556 10 606 0 +789 466 362 15 1152 1182 10 0 594 +790 267 290 15 43 73 10 0 559 +791 98 2 -27 592 622 10 448 0 +792 131 246 17 832 862 10 0 898 +793 418 75 11 448 478 10 0 978 +794 366 260 -34 1520 1550 10 782 0 +795 138 28 23 1097 1127 10 0 398 +796 209 212 -7 1528 1558 10 386 0 +797 443 167 -25 543 573 10 988 0 +798 156 65 -13 1037 1067 10 724 0 +799 279 355 9 166 196 10 0 897 +800 206 172 29 788 818 10 0 866 +801 32 94 14 930 960 10 0 990 +802 301 239 31 52 82 10 0 129 +803 471 368 19 428 458 10 0 215 +804 133 273 -35 119 149 10 932 0 +805 253 74 -18 1350 1380 10 507 0 +806 470 405 17 926 956 10 0 6 +807 77 172 23 786 816 10 0 492 +808 77 465 -17 275 305 10 136 0 +809 466 96 -22 1383 1413 10 46 0 +810 402 277 -11 1438 1468 10 714 0 +811 267 374 23 601 631 10 0 530 +812 450 194 27 625 655 10 0 67 +813 89 65 -2 720 750 10 573 0 +814 429 389 18 424 454 10 0 142 +815 202 28 -26 934 964 10 702 0 +816 46 389 22 257 287 10 0 145 +817 246 407 -38 312 342 10 77 0 +818 452 110 14 340 370 10 0 831 +819 213 185 21 74 104 10 0 81 +820 134 276 15 133 163 10 0 15 +821 262 97 -23 947 977 10 785 0 +822 469 489 4 555 585 10 0 34 +823 364 71 -15 1348 1378 10 230 0 +824 68 240 11 794 824 10 0 231 +825 494 468 31 352 382 10 0 217 +826 439 222 22 980 1010 10 0 883 +827 386 225 -14 919 949 10 605 0 +828 434 359 -17 1392 1422 10 128 0 +829 103 177 28 626 656 10 0 30 +830 89 322 -10 1021 1051 10 380 0 +831 307 249 -14 1377 1407 10 818 0 +832 30 155 -12 1280 1310 10 27 0 +833 401 314 -5 976 1006 10 622 0 +834 217 357 -22 1420 1450 10 744 0 +835 373 421 21 237 267 10 0 672 +836 5 281 16 1372 1402 10 0 92 +837 173 474 14 1285 1315 10 0 436 +838 36 301 21 219 249 10 0 350 +839 429 169 8 903 933 10 0 561 +840 195 450 16 1486 1516 0 0 1047 +841 95 382 19 231 261 10 0 220 +842 225 121 18 733 763 10 0 256 +843 10 407 -18 434 464 10 190 0 +844 221 269 -22 1265 1295 10 160 0 +845 264 180 -6 1681 1711 10 291 0 +846 168 59 -10 366 396 10 617 0 +847 281 96 1 1126 1156 10 0 318 +848 387 349 9 169 199 10 0 579 +849 398 329 17 167 197 10 0 196 +850 239 486 -12 1482 1512 10 389 0 +851 237 420 -15 1334 1364 10 183 0 +852 346 354 8 817 847 10 0 772 +853 172 314 -22 545 575 10 156 0 +854 233 230 20 26 56 10 0 313 +855 79 80 -11 1382 1412 10 410 0 +856 243 402 13 405 435 10 0 407 +857 117 110 -27 979 1009 10 433 0 +858 66 314 26 194 224 10 0 681 +859 58 391 -20 882 912 10 312 0 +860 142 360 20 1532 1562 0 0 1016 +861 492 326 19 1204 1234 10 0 716 +862 381 328 -13 717 747 10 152 0 +863 62 236 -25 558 588 10 885 0 +864 344 70 24 1146 1176 10 0 13 +865 151 81 -28 1558 1588 10 279 0 +866 240 240 -29 1700 1730 10 800 0 +867 46 163 -26 926 956 10 588 0 +868 455 168 -20 867 897 10 397 0 +869 428 202 -31 904 934 10 991 0 +870 432 199 -9 639 669 10 54 0 +871 391 112 24 1000 1030 10 0 661 +872 451 305 13 208 238 10 0 554 +873 214 311 14 70 100 10 0 779 +874 465 367 -33 1027 1057 10 912 0 +875 164 473 26 296 326 10 0 670 +876 364 173 -21 180 210 10 487 0 +877 274 261 -15 1707 1737 10 700 0 +878 133 455 -13 808 838 10 235 0 +879 351 481 10 322 352 10 0 920 +880 115 395 11 815 845 10 0 404 +881 297 304 4 71 101 10 0 294 +882 7 194 -26 951 981 10 48 0 +883 409 255 -22 1522 1552 10 826 0 +884 87 213 18 626 656 10 0 259 +885 60 246 25 190 220 10 0 863 +886 3 471 13 711 741 10 0 961 +887 418 251 -24 1197 1227 10 119 0 +888 153 362 -5 1161 1191 10 563 0 +889 323 77 -13 1405 1435 10 643 0 +890 143 158 12 141 171 10 0 134 +891 351 148 30 461 491 0 0 1048 +892 426 38 -19 609 639 10 477 0 +893 226 316 21 70 100 10 0 80 +894 347 192 18 1488 1518 10 0 297 +895 102 6 -16 1458 1488 10 71 0 +896 41 120 -10 696 726 10 934 0 +897 247 443 -9 330 360 10 799 0 +898 218 271 -17 1574 1604 10 792 0 +899 376 385 12 184 214 10 0 229 +900 241 402 -17 1025 1055 10 522 0 +901 213 399 18 234 264 10 0 395 +902 32 191 5 586 616 10 0 966 +903 441 374 10 227 257 10 0 949 +904 376 113 -25 514 544 10 695 0 +905 215 434 9 193 223 10 0 182 +906 499 316 -12 622 652 10 555 0 +907 318 497 21 854 884 10 0 237 +908 256 441 34 191 221 10 0 567 +909 174 397 32 1245 1275 0 0 1031 +910 468 360 16 274 304 10 0 304 +911 287 256 18 37 67 10 0 639 +912 448 397 33 866 896 10 0 874 +913 352 487 -10 902 932 10 280 0 +914 253 118 -17 547 577 10 247 0 +915 159 299 -18 1016 1046 10 697 0 +916 351 233 -14 1423 1453 10 283 0 +917 268 113 -12 680 710 10 165 0 +918 164 332 -12 1280 1310 10 138 0 +919 88 484 -34 1491 1521 10 23 0 +920 360 488 -10 316 346 10 879 0 +921 343 166 -33 876 906 10 686 0 +922 497 266 25 748 778 10 0 678 +923 138 406 8 1216 1246 0 0 1046 +924 420 224 10 429 459 0 0 1037 +925 231 410 14 1236 1266 10 0 97 +926 199 438 -22 1360 1390 10 238 0 +927 219 215 32 46 76 10 0 473 +928 365 274 14 117 147 0 0 1033 +929 481 454 14 320 350 10 0 287 +930 187 61 19 545 575 10 0 429 +931 372 97 13 214 244 10 0 709 +932 187 263 35 64 94 10 0 804 +933 371 427 23 958 988 10 0 118 +934 74 215 10 229 259 10 0 896 +935 375 145 -21 929 959 10 70 0 +936 365 28 -31 268 298 10 650 0 +937 118 314 -8 338 368 10 148 0 +938 60 29 -15 1363 1393 10 701 0 +939 478 300 12 890 920 10 0 186 +940 33 152 17 1320 1350 0 0 1045 +941 347 184 15 1079 1109 10 0 108 +942 94 40 -25 1068 1098 10 604 0 +943 290 328 7 144 174 10 0 40 +944 96 346 26 185 215 10 0 88 +945 97 288 -12 1284 1314 10 325 0 +946 176 470 14 547 577 10 0 293 +947 206 97 -28 448 478 10 680 0 +948 210 133 15 689 719 10 0 472 +949 489 457 -10 316 346 10 903 0 +950 418 399 20 438 468 10 0 565 +951 392 491 -12 1133 1163 10 644 0 +952 437 19 -26 1014 1044 10 752 0 +953 495 83 32 441 471 10 0 326 +954 468 352 9 768 798 10 0 266 +955 390 120 24 1004 1034 10 0 105 +956 80 357 1 530 560 10 0 22 +957 394 310 -12 1099 1129 10 771 0 +958 61 441 27 544 574 10 0 982 +959 52 303 -27 441 471 10 442 0 +960 391 202 14 148 178 0 0 1043 +961 36 451 -13 889 919 10 886 0 +962 276 84 -15 681 711 10 53 0 +963 130 140 17 194 224 10 0 683 +964 16 287 12 271 301 10 0 685 +965 292 136 28 781 811 10 0 505 +966 53 204 -5 1055 1085 10 902 0 +967 359 287 24 115 145 0 0 1028 +968 309 29 11 1294 1324 0 0 1001 +969 473 491 23 413 443 10 0 130 +970 273 255 18 1492 1522 0 0 1040 +971 263 153 12 412 442 10 0 444 +972 328 458 -6 768 798 10 776 0 +973 401 164 13 621 651 10 0 56 +974 480 119 7 628 658 10 0 36 +975 488 96 22 1066 1096 10 0 633 +976 149 98 4 1165 1195 10 0 516 +977 49 437 -30 427 457 10 677 0 +978 440 77 -11 913 943 10 793 0 +979 43 135 31 236 266 10 0 179 +980 188 151 -27 1297 1327 10 443 0 +981 175 422 -8 1446 1476 10 365 0 +982 48 437 -27 804 834 10 958 0 +983 334 403 26 174 204 10 0 257 +984 372 115 13 364 394 10 0 508 +985 111 192 -15 1199 1229 10 143 0 +986 357 290 -15 114 144 10 21 0 +987 331 134 -28 1124 1154 10 114 0 +988 495 199 25 337 367 10 0 797 +989 441 60 -19 1459 1489 10 311 0 +990 51 89 -14 1208 1238 10 801 0 +991 452 206 31 492 522 10 0 869 +992 195 386 13 146 176 10 0 249 +993 172 24 -15 1452 1482 10 147 0 +994 408 318 -14 643 673 10 127 0 +995 410 399 25 234 264 10 0 485 +996 413 345 -7 1218 1248 10 207 0 +997 215 129 17 1119 1149 10 0 632 +998 380 350 15 866 896 10 0 612 +999 19 38 15 847 877 10 0 441 +1000 166 247 1 84 114 10 0 416 +1001 309 29 -11 1294 1324 10 968 0 +1002 265 0 -10 896 926 10 784 0 +1003 146 188 -6 1235 1265 10 63 0 +1004 418 269 -3 1205 1235 10 301 0 +1005 245 42 -24 547 577 10 41 0 +1006 195 464 -20 1541 1571 10 619 0 +1007 91 27 -14 1182 1212 10 338 0 +1008 52 412 -22 1406 1436 10 16 0 +1009 225 269 -30 1271 1301 10 753 0 +1010 39 162 -18 565 595 10 258 0 +1011 330 308 -24 1170 1200 10 635 0 +1012 454 201 -16 1305 1335 10 506 0 +1013 86 199 -23 278 308 10 731 0 +1014 330 138 -18 1110 1140 10 658 0 +1015 433 447 -20 794 824 10 191 0 +1016 142 360 -20 1532 1562 10 860 0 +1017 142 14 -18 835 865 10 483 0 +1018 268 288 -26 1267 1297 10 751 0 +1019 460 424 -11 1455 1485 10 421 0 +1020 213 283 -14 1471 1501 10 455 0 +1021 114 102 -21 507 537 10 111 0 +1022 420 383 -27 982 1012 10 722 0 +1023 241 180 -13 1695 1725 10 106 0 +1024 397 477 -13 1216 1246 10 469 0 +1025 215 282 -21 1440 1470 10 461 0 +1026 498 457 -15 913 943 10 531 0 +1027 46 248 -9 814 844 10 647 0 +1028 359 287 -24 115 145 10 967 0 +1029 60 231 -32 1026 1056 10 151 0 +1030 67 190 -25 1173 1203 10 2 0 +1031 174 397 -32 1245 1275 10 909 0 +1032 153 235 -10 98 128 10 616 0 +1033 365 274 -14 117 147 10 928 0 +1034 366 390 -23 1318 1348 10 310 0 +1035 105 181 -19 1531 1561 10 528 0 +1036 370 262 -15 1099 1129 10 104 0 +1037 420 224 -10 429 459 10 924 0 +1038 29 462 -17 1310 1340 10 177 0 +1039 371 163 -21 828 858 10 47 0 +1040 273 255 -18 1492 1522 10 970 0 +1041 228 260 -12 1606 1636 10 687 0 +1042 72 477 -46 288 318 10 496 0 +1043 391 202 -14 148 178 10 960 0 +1044 268 351 -7 1675 1705 10 445 0 +1045 33 152 -17 1320 1350 10 940 0 +1046 138 406 -8 1216 1246 10 923 0 +1047 195 450 -16 1486 1516 10 840 0 +1048 351 148 -30 461 491 10 891 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1106.txt b/jsprit-instances/instances/lilim/1000/LR1106.txt new file mode 100644 index 00000000..31e54a52 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1106.txt @@ -0,0 +1,1050 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 -3 1143 1173 10 240 0 +2 67 190 -10 1173 1203 10 69 0 +3 80 400 -6 1446 1476 10 481 0 +4 439 237 11 939 969 10 0 826 +5 377 385 -15 866 896 10 672 0 +6 449 428 -18 1247 1277 10 217 0 +7 342 481 -15 1440 1470 10 175 0 +8 466 149 16 1186 1216 10 0 288 +9 83 290 14 0 1744 10 0 84 +10 251 63 14 987 1017 10 0 761 +11 328 491 21 0 1662 10 0 920 +12 260 472 33 0 1693 10 0 192 +13 290 145 -35 1282 1312 10 646 0 +14 266 221 9 33 63 10 0 458 +15 164 320 -12 1095 1125 10 915 0 +16 52 412 -22 0 1660 10 32 0 +17 485 104 -9 794 824 10 193 0 +18 144 331 -22 931 961 10 423 0 +19 387 394 -23 1098 1128 10 578 0 +20 472 57 -11 1295 1325 10 76 0 +21 343 276 15 96 126 10 0 127 +22 104 349 -15 1009 1039 10 206 0 +23 28 467 34 1343 1373 10 0 961 +24 91 427 14 883 913 10 0 166 +25 429 476 23 0 1627 10 0 431 +26 210 276 5 47 77 10 0 544 +27 58 39 -7 0 1630 10 667 0 +28 273 300 30 55 85 10 0 943 +29 41 232 16 209 239 10 0 885 +30 25 53 -11 1020 1050 10 410 0 +31 52 18 -30 857 887 10 628 0 +32 27 444 22 1080 1110 10 0 16 +33 178 72 -15 757 787 10 53 0 +34 406 460 2 719 749 10 0 191 +35 250 328 24 249 279 10 0 527 +36 492 34 5 811 841 10 0 904 +37 412 100 1 513 543 10 0 541 +38 233 87 18 253 283 10 0 691 +39 60 5 18 1044 1074 10 0 441 +40 406 408 -1 1456 1486 10 783 0 +41 245 42 24 547 577 10 0 362 +42 166 345 14 1130 1160 10 0 918 +43 440 294 -11 960 990 10 714 0 +44 370 382 -26 884 914 10 696 0 +45 32 319 -13 401 431 10 335 0 +46 480 136 22 0 1659 10 0 648 +47 371 163 -9 828 858 10 486 0 +48 0 188 -7 932 962 10 386 0 +49 438 5 18 549 579 10 0 270 +50 132 477 25 327 357 10 0 238 +51 203 211 -15 1306 1336 10 948 0 +52 2 264 -18 0 1667 10 685 0 +53 231 167 15 0 1830 10 0 33 +54 423 221 9 258 288 10 0 991 +55 459 53 -3 0 1628 10 154 0 +56 386 154 -16 1101 1131 10 116 0 +57 130 494 -23 759 789 10 476 0 +58 31 175 24 0 1684 10 0 307 +59 69 423 -18 802 832 10 171 0 +60 352 241 -31 792 822 10 802 0 +61 261 201 -6 1514 1544 10 172 0 +62 59 276 11 892 922 0 0 1024 +63 146 188 -23 1235 1265 10 731 0 +64 451 62 5 282 312 10 0 975 +65 299 285 -22 1254 1284 10 540 0 +66 142 372 18 162 192 10 0 264 +67 440 201 -12 893 923 10 939 0 +68 219 210 14 50 80 10 0 573 +69 64 198 10 1088 1118 10 0 2 +70 390 249 21 582 612 10 0 322 +71 9 101 -11 666 696 10 402 0 +72 424 288 13 1057 1087 10 0 257 +73 77 372 19 211 241 10 0 681 +74 298 264 36 50 80 10 0 713 +75 405 454 11 0 1659 10 0 174 +76 407 35 11 0 1649 10 0 20 +77 225 369 38 121 151 10 0 413 +78 347 459 25 479 509 10 0 682 +79 117 178 -20 1117 1147 10 242 0 +80 132 479 11 257 287 10 0 208 +81 201 66 -31 1167 1197 10 623 0 +82 245 176 20 0 1841 0 0 1036 +83 470 138 -2 1389 1419 10 711 0 +84 115 296 -14 1529 1559 10 9 0 +85 348 476 -3 1197 1227 10 511 0 +86 43 210 -4 210 240 10 765 0 +87 327 139 -23 1257 1287 10 332 0 +88 49 353 -27 1446 1476 10 593 0 +89 356 256 19 106 136 10 0 463 +90 335 99 25 1218 1248 10 0 105 +91 363 34 19 272 302 10 0 477 +92 33 278 -27 1487 1517 10 401 0 +93 366 288 29 684 714 10 0 967 +94 452 172 9 608 638 10 0 869 +95 86 189 21 227 257 10 0 829 +96 262 369 -15 0 1796 10 97 0 +97 218 403 15 0 1759 10 0 96 +98 218 12 3 544 574 10 0 366 +99 228 399 14 0 1765 10 0 897 +100 492 188 33 715 745 10 0 168 +101 267 174 -28 1618 1648 10 965 0 +102 274 441 -22 695 725 10 744 0 +103 210 113 28 690 720 10 0 427 +104 370 262 15 1099 1129 0 0 1033 +105 303 186 -25 1354 1384 10 90 0 +106 241 180 13 1695 1725 0 0 1039 +107 100 85 14 351 381 10 0 200 +108 350 199 -18 1201 1231 10 745 0 +109 500 228 8 0 1665 0 0 1035 +110 251 238 27 12 42 10 0 798 +111 114 102 -32 507 537 10 120 0 +112 345 146 -24 0 1775 10 766 0 +113 21 146 -15 487 517 10 337 0 +114 330 147 -13 848 878 10 984 0 +115 476 61 -20 449 479 10 600 0 +116 386 245 16 479 509 10 0 56 +117 201 278 13 56 86 10 0 350 +118 421 499 23 1345 1375 10 0 550 +119 426 231 24 1028 1058 10 0 810 +120 105 137 32 452 482 10 0 111 +121 64 437 -23 918 948 10 597 0 +122 181 260 23 0 1846 10 0 820 +123 413 391 8 0 1700 10 0 180 +124 370 493 -13 571 601 10 705 0 +125 447 267 19 980 1010 10 0 861 +126 232 101 -2 346 376 10 599 0 +127 371 332 -15 530 560 10 21 0 +128 447 383 -13 0 1678 10 557 0 +129 325 147 14 1187 1217 0 0 1042 +130 489 437 29 707 737 10 0 266 +131 415 95 15 1177 1207 10 0 286 +132 331 356 13 712 742 10 0 594 +133 374 346 27 0 1759 10 0 833 +134 108 37 23 549 579 10 0 385 +135 5 224 -21 0 1669 10 231 0 +136 93 413 17 226 256 10 0 944 +137 210 29 -30 0 1691 10 295 0 +138 136 265 12 114 144 10 0 426 +139 409 155 19 0 1730 10 0 244 +140 111 178 18 156 186 10 0 393 +141 291 251 -18 41 71 10 911 0 +142 322 290 23 0 1833 10 0 848 +143 57 183 15 0 1711 0 0 1037 +144 181 185 -19 1614 1644 10 930 0 +145 7 382 27 770 800 10 0 404 +146 425 448 -10 794 824 10 280 0 +147 174 41 -10 0 1693 10 617 0 +148 161 276 -22 133 163 10 489 0 +149 398 49 21 792 822 10 0 376 +150 210 379 -30 709 739 10 306 0 +151 60 231 -30 1026 1056 10 345 0 +152 453 360 -17 230 260 10 849 0 +153 367 97 17 988 1018 10 0 584 +154 488 3 3 401 431 10 0 55 +155 44 115 24 246 276 10 0 999 +156 48 293 22 276 306 10 0 733 +157 64 135 -14 0 1697 10 801 0 +158 65 62 -16 0 1652 10 715 0 +159 404 207 6 0 1756 10 0 924 +160 68 303 22 0 1726 10 0 585 +161 263 418 -21 278 308 10 893 0 +162 147 30 -23 1109 1139 10 795 0 +163 384 149 -16 1197 1227 10 181 0 +164 340 416 36 321 351 10 0 236 +165 271 128 -12 346 376 10 971 0 +166 89 358 -14 1247 1277 10 24 0 +167 20 480 -30 0 1590 10 677 0 +168 488 173 -33 1210 1240 10 100 0 +169 439 156 -27 0 1704 10 812 0 +170 389 156 -30 716 746 10 891 0 +171 111 392 18 0 1717 10 0 59 +172 267 162 6 1449 1479 10 0 61 +173 248 176 -19 1401 1431 10 318 0 +174 413 476 -11 1179 1209 10 75 0 +175 352 481 15 1285 1315 10 0 7 +176 264 135 -19 879 909 10 256 0 +177 29 462 -21 1310 1340 10 285 0 +178 148 462 10 727 757 10 0 670 +179 44 140 11 868 898 10 0 985 +180 414 378 -8 495 525 10 123 0 +181 392 95 16 766 796 10 0 163 +182 216 341 -29 654 684 10 615 0 +183 211 411 15 0 1750 0 0 1016 +184 317 45 -24 0 1700 10 339 0 +185 178 150 33 632 662 10 0 634 +186 428 302 -24 1016 1046 10 343 0 +187 450 45 24 504 534 10 0 592 +188 453 318 30 374 404 10 0 509 +189 186 135 24 0 1784 10 0 214 +190 11 403 18 343 373 10 0 843 +191 433 447 -2 794 824 10 34 0 +192 272 420 -33 1386 1416 10 12 0 +193 429 59 9 0 1654 10 0 17 +194 200 27 22 525 555 0 0 1018 +195 498 171 -20 1256 1286 10 269 0 +196 487 320 21 858 888 10 0 570 +197 45 166 -11 1013 1043 10 583 0 +198 490 276 33 241 271 10 0 678 +199 126 391 19 273 303 10 0 830 +200 92 18 -14 1124 1154 10 107 0 +201 293 228 19 48 78 10 0 320 +202 343 205 26 767 797 10 0 970 +203 182 480 31 0 1676 10 0 671 +204 385 285 13 868 898 10 0 728 +205 44 344 -2 1079 1109 10 759 0 +206 170 347 15 0 1790 10 0 22 +207 457 492 7 0 1597 0 0 1001 +208 124 448 -11 369 399 10 80 0 +209 398 210 31 153 183 10 0 973 +210 75 118 21 409 439 10 0 521 +211 105 474 27 471 501 10 0 293 +212 134 211 -16 122 152 10 394 0 +213 211 248 26 39 69 10 0 673 +214 212 186 -24 1722 1752 10 189 0 +215 492 335 -25 0 1659 10 250 0 +216 497 483 12 353 383 10 0 822 +217 440 436 18 892 922 10 0 6 +218 311 203 15 723 753 10 0 743 +219 491 369 -3 0 1647 10 716 0 +220 67 378 -20 470 500 10 312 0 +221 383 17 15 940 970 10 0 314 +222 7 82 25 412 442 10 0 364 +223 342 319 36 115 145 10 0 772 +224 78 406 -19 960 990 10 504 0 +225 103 123 -18 490 520 10 796 0 +226 241 38 -12 0 1703 10 513 0 +227 224 3 -17 690 720 10 247 0 +228 436 467 -10 736 766 10 879 0 +229 438 488 18 327 357 10 0 294 +230 351 60 15 0 1700 10 0 955 +231 13 214 21 1354 1384 10 0 135 +232 429 67 16 732 762 10 0 241 +233 498 456 -10 1406 1436 10 903 0 +234 135 400 -14 0 1726 10 251 0 +235 215 293 13 55 85 10 0 566 +236 354 416 -36 0 1720 10 164 0 +237 294 421 -13 1575 1605 10 856 0 +238 208 445 -25 1332 1362 10 50 0 +239 230 320 -14 1192 1222 10 412 0 +240 157 38 3 1048 1078 10 0 1 +241 441 100 -16 0 1673 10 232 0 +242 61 170 20 1006 1036 10 0 79 +243 79 467 -11 351 381 10 808 0 +244 365 190 -19 1477 1507 10 139 0 +245 282 1 18 0 1664 10 0 815 +246 124 111 15 0 1728 10 0 603 +247 247 219 17 0 1884 10 0 227 +248 28 180 34 386 416 10 0 382 +249 167 488 17 252 282 10 0 460 +250 442 289 25 195 225 10 0 215 +251 136 430 14 710 740 10 0 234 +252 38 15 -10 0 1599 10 503 0 +253 246 314 -35 1445 1475 10 932 0 +254 176 200 17 568 598 10 0 927 +255 337 232 -16 1571 1601 10 357 0 +256 257 133 19 862 892 10 0 176 +257 295 247 -13 1303 1333 10 72 0 +258 39 162 -10 565 595 10 934 0 +259 79 257 -14 953 983 10 553 0 +260 236 126 23 0 1791 10 0 680 +261 259 498 -11 1075 1105 10 900 0 +262 180 162 9 0 1803 10 0 435 +263 53 466 9 335 365 0 0 1004 +264 167 291 -18 1634 1664 10 66 0 +265 89 185 16 600 630 10 0 832 +266 487 446 -29 1340 1370 10 130 0 +267 308 199 -32 1508 1538 10 613 0 +268 481 84 17 506 536 10 0 974 +269 495 227 20 0 1669 10 0 195 +270 397 57 -18 1476 1506 10 49 0 +271 372 39 10 724 754 10 0 668 +272 278 450 -20 1375 1405 10 466 0 +273 292 32 14 229 259 10 0 329 +274 90 496 13 1395 1425 10 0 688 +275 68 53 16 739 769 0 0 1011 +276 371 423 10 211 241 10 0 287 +277 273 149 14 1503 1533 10 0 845 +278 297 283 28 0 1858 0 0 1032 +279 120 37 28 0 1666 10 0 791 +280 371 488 10 0 1649 10 0 146 +281 206 174 14 800 830 10 0 516 +282 174 347 -19 1015 1045 10 302 0 +283 330 281 14 1330 1360 10 0 831 +284 67 451 5 1216 1246 10 0 664 +285 27 464 21 1291 1321 10 0 177 +286 361 178 -15 0 1783 10 131 0 +287 463 406 -10 857 887 10 276 0 +288 456 157 -16 1455 1485 10 8 0 +289 153 244 5 108 138 10 0 657 +290 153 192 -30 866 896 10 449 0 +291 352 63 -22 1178 1208 10 317 0 +292 371 71 -13 287 317 10 931 0 +293 163 472 -27 653 683 10 211 0 +294 448 495 -18 384 414 10 229 0 +295 282 10 30 0 1673 10 0 137 +296 66 163 6 395 425 10 0 588 +297 314 205 -20 1527 1557 10 471 0 +298 83 169 21 0 1730 10 0 529 +299 221 291 9 50 80 10 0 762 +300 374 116 -30 587 617 10 876 0 +301 418 269 3 0 1746 0 0 1023 +302 178 302 19 887 917 10 0 282 +303 250 57 -20 748 778 10 805 0 +304 475 352 33 0 1668 0 0 1014 +305 1 252 -12 0 1666 10 964 0 +306 286 356 30 0 1804 10 0 150 +307 65 82 -24 740 770 10 58 0 +308 154 392 9 171 201 10 0 738 +309 196 56 15 0 1714 10 0 636 +310 366 390 -23 0 1734 10 933 0 +311 436 25 -15 1282 1312 10 952 0 +312 67 352 20 373 403 10 0 220 +313 173 182 25 102 132 10 0 433 +314 390 34 -15 1060 1090 10 221 0 +315 18 225 8 691 721 10 0 707 +316 57 43 -22 0 1632 10 595 0 +317 388 44 22 1131 1161 10 0 291 +318 269 112 19 1263 1293 10 0 173 +319 374 260 -7 1761 1791 10 734 0 +320 291 213 -19 1258 1288 10 201 0 +321 178 420 -9 1071 1101 10 484 0 +322 389 255 -21 785 815 10 70 0 +323 134 194 -8 1652 1682 10 665 0 +324 93 490 -5 379 409 10 919 0 +325 64 294 -29 1101 1131 10 863 0 +326 493 111 26 541 571 10 0 598 +327 150 484 16 625 655 10 0 878 +328 235 316 -10 656 686 10 630 0 +329 239 15 -14 0 1680 10 273 0 +330 193 138 30 661 691 0 0 1006 +331 40 278 10 1104 1134 10 0 392 +332 307 52 23 920 950 10 0 87 +333 161 416 25 0 1727 10 0 981 +334 381 457 28 471 501 10 0 913 +335 55 318 13 312 342 10 0 45 +336 80 279 -27 0 1743 10 442 0 +337 48 162 15 220 250 10 0 113 +338 91 27 14 1182 1212 10 0 383 +339 288 70 24 183 213 10 0 184 +340 177 404 17 1262 1292 0 0 1045 +341 10 237 19 616 646 10 0 416 +342 493 493 20 856 886 10 0 750 +343 440 292 24 940 970 10 0 186 +344 349 76 15 1031 1061 10 0 864 +345 47 208 30 226 256 10 0 151 +346 283 454 14 0 1709 10 0 450 +347 486 324 -19 0 1668 10 803 0 +348 392 87 23 0 1699 10 0 406 +349 122 422 -18 1457 1487 10 468 0 +350 37 281 -13 493 523 10 117 0 +351 413 127 28 831 861 10 0 935 +352 222 499 7 845 875 10 0 470 +353 211 446 -15 1123 1153 10 700 0 +354 30 7 -15 1189 1219 10 701 0 +355 398 341 -15 939 969 10 998 0 +356 26 67 -11 1317 1347 10 786 0 +357 461 186 16 0 1695 10 0 255 +358 313 391 5 0 1761 10 0 727 +359 471 94 30 999 1029 10 0 562 +360 341 72 -27 805 835 10 576 0 +361 130 186 16 136 166 10 0 492 +362 257 57 -24 1226 1256 10 41 0 +363 94 344 26 0 1733 10 0 659 +364 6 53 -25 0 1602 10 222 0 +365 146 376 8 234 264 10 0 390 +366 244 13 -3 1013 1043 10 98 0 +367 29 336 -26 332 362 10 858 0 +368 306 42 -6 0 1700 10 642 0 +369 177 486 -3 0 1668 10 926 0 +370 489 338 -9 1397 1427 10 954 0 +371 179 318 2 1121 1151 10 0 384 +372 344 203 14 167 197 10 0 921 +373 149 341 6 404 434 10 0 479 +374 307 412 8 404 434 10 0 389 +375 68 450 18 633 663 10 0 816 +376 420 80 -21 0 1675 10 149 0 +377 144 220 35 110 140 10 0 729 +378 497 54 14 978 1008 10 0 414 +379 80 458 30 371 401 10 0 574 +380 84 377 10 0 1706 10 0 754 +381 332 382 -35 1010 1040 10 631 0 +382 6 196 -34 1203 1233 10 248 0 +383 104 28 -14 1473 1503 10 338 0 +384 224 320 -2 1284 1314 10 371 0 +385 87 3 -23 0 1620 10 134 0 +386 149 214 7 0 1808 10 0 48 +387 98 29 -4 0 1647 10 491 0 +388 135 30 12 474 504 10 0 483 +389 287 397 -8 564 594 10 374 0 +390 107 374 -8 914 944 10 365 0 +391 355 485 -20 1479 1509 10 662 0 +392 51 286 -10 1459 1489 10 331 0 +393 49 118 -18 1071 1101 10 140 0 +394 159 226 16 94 124 10 0 212 +395 185 431 -7 387 417 10 539 0 +396 262 92 25 630 660 10 0 821 +397 475 198 -29 0 1685 10 602 0 +398 142 30 32 1246 1276 0 0 1040 +399 481 207 -21 856 886 10 590 0 +400 174 122 14 593 623 10 0 500 +401 35 263 27 270 300 10 0 92 +402 24 71 11 346 376 10 0 71 +403 173 65 -15 448 478 10 514 0 +404 91 326 -27 0 1739 10 145 0 +405 470 417 11 737 767 10 0 421 +406 397 153 -23 882 912 10 348 0 +407 295 283 26 0 1860 10 0 877 +408 174 376 8 0 1768 10 0 693 +409 38 190 23 285 315 10 0 902 +410 16 68 11 0 1619 10 0 30 +411 179 286 -36 341 371 10 532 0 +412 244 422 14 538 568 10 0 239 +413 250 441 -38 756 786 10 77 0 +414 497 18 -14 1130 1160 10 378 0 +415 195 111 -27 998 1028 10 443 0 +416 26 221 -19 996 1026 10 341 0 +417 442 5 16 320 350 10 0 978 +418 44 496 -18 402 432 10 582 0 +419 448 404 15 0 1665 10 0 579 +420 471 427 -12 816 846 10 862 0 +421 460 424 -11 1455 1485 10 405 0 +422 461 195 -11 1395 1425 10 512 0 +423 146 313 22 0 1794 10 0 18 +424 19 273 25 1017 1047 10 0 836 +425 245 461 -24 649 679 10 548 0 +426 69 266 -12 758 788 10 138 0 +427 191 84 -28 867 897 10 103 0 +428 68 160 -24 0 1712 10 666 0 +429 212 47 -18 801 831 10 473 0 +430 80 337 28 0 1725 0 0 1038 +431 412 478 -23 0 1636 10 25 0 +432 225 488 -18 636 666 10 901 0 +433 105 140 -25 0 1733 10 313 0 +434 389 43 21 0 1666 10 0 823 +435 177 156 -9 167 197 10 262 0 +436 179 497 1 1411 1441 10 0 451 +437 377 432 -16 831 861 10 760 0 +438 497 296 14 613 643 10 0 922 +439 152 476 -13 523 553 10 992 0 +440 277 428 7 490 520 0 0 1034 +441 64 5 -18 1129 1159 10 39 0 +442 44 311 27 0 1701 10 0 336 +443 165 59 27 943 973 10 0 415 +444 261 138 -21 0 1803 10 917 0 +445 268 351 -20 0 1813 10 626 0 +446 48 150 15 0 1690 10 0 966 +447 215 79 -13 0 1741 10 724 0 +448 109 56 27 239 269 10 0 534 +449 171 188 30 621 651 10 0 290 +450 284 457 -14 0 1706 10 346 0 +451 274 442 -1 0 1722 10 436 0 +452 33 286 -19 1546 1576 10 493 0 +453 112 433 29 0 1686 10 0 860 +454 423 170 27 513 543 10 0 568 +455 213 283 -19 0 1866 10 841 0 +456 240 34 -30 1560 1590 10 780 0 +457 283 438 3 231 261 10 0 763 +458 324 99 -9 338 368 10 14 0 +459 259 301 25 99 129 10 0 972 +460 189 402 -17 0 1752 10 249 0 +461 215 282 21 1440 1470 10 0 721 +462 166 440 12 207 237 10 0 619 +463 374 232 -19 125 155 10 89 0 +464 339 113 14 761 791 10 0 767 +465 335 46 18 0 1694 10 0 542 +466 313 493 20 1193 1223 10 0 272 +467 432 66 -12 1071 1101 10 720 0 +468 76 462 18 956 986 10 0 349 +469 397 477 13 0 1645 0 0 1017 +470 196 489 -7 1030 1060 10 352 0 +471 354 156 20 832 862 10 0 297 +472 171 24 11 1383 1413 10 0 993 +473 187 73 18 292 322 10 0 429 +474 243 408 -15 1434 1464 10 851 0 +475 421 387 -4 801 831 10 881 0 +476 141 426 23 531 561 10 0 57 +477 415 118 -19 0 1704 10 91 0 +478 240 255 -23 1611 1641 10 770 0 +479 162 388 -6 1126 1156 10 373 0 +480 413 493 26 1218 1248 10 0 951 +481 69 414 6 1263 1293 10 0 3 +482 273 70 -27 619 649 10 675 0 +483 142 14 -12 835 865 10 388 0 +484 185 434 9 0 1720 10 0 321 +485 360 294 -29 0 1797 10 523 0 +486 265 240 9 18 48 10 0 47 +487 280 245 21 30 60 10 0 530 +488 87 51 -15 514 544 10 614 0 +489 195 273 22 59 89 10 0 148 +490 422 498 -31 692 722 10 825 0 +491 95 64 4 766 796 10 0 387 +492 63 155 -16 0 1706 10 361 0 +493 24 259 19 0 1689 10 0 452 +494 376 92 -30 0 1713 10 620 0 +495 83 300 -38 500 530 10 654 0 +496 72 477 46 288 318 10 0 520 +497 380 194 -40 0 1774 10 558 0 +498 72 227 25 564 594 10 0 525 +499 238 123 -20 781 811 10 854 0 +500 188 119 -14 975 1005 10 400 0 +501 229 322 11 0 1840 10 0 790 +502 150 68 23 0 1708 10 0 577 +503 67 24 10 0 1625 10 0 252 +504 63 420 19 0 1663 10 0 224 +505 339 144 13 1099 1129 10 0 658 +506 454 201 -25 0 1706 10 988 0 +507 158 24 -10 611 641 10 784 0 +508 365 119 30 382 412 10 0 987 +509 440 284 -30 852 882 10 188 0 +510 417 212 12 910 940 10 0 589 +511 404 439 3 243 273 10 0 85 +512 472 248 11 0 1693 10 0 422 +513 235 108 12 0 1773 10 0 226 +514 174 67 15 0 1717 10 0 403 +515 132 151 22 154 184 10 0 740 +516 217 207 -14 1382 1412 10 281 0 +517 162 306 22 119 149 10 0 651 +518 48 366 29 743 773 10 0 777 +519 209 68 -13 1568 1598 10 643 0 +520 94 497 -46 782 812 10 496 0 +521 110 122 -21 1509 1539 10 210 0 +522 274 403 -30 887 917 10 641 0 +523 421 386 29 824 854 10 0 485 +524 399 175 13 747 777 10 0 941 +525 56 268 -25 1064 1094 10 498 0 +526 322 406 17 829 859 10 0 656 +527 244 277 -24 1301 1331 10 35 0 +528 105 181 -17 1531 1561 10 940 0 +529 30 97 -21 1210 1240 10 298 0 +530 359 246 -21 0 1806 10 487 0 +531 498 457 15 0 1592 10 0 969 +532 190 267 36 0 1853 10 0 411 +533 334 481 32 330 360 10 0 776 +534 18 24 -27 628 658 10 448 0 +535 482 104 19 807 837 10 0 809 +536 460 328 -13 224 254 10 872 0 +537 320 211 -15 993 1023 10 621 0 +538 494 165 -14 0 1657 10 605 0 +539 167 445 7 0 1704 10 0 395 +540 340 291 22 470 500 10 0 65 +541 272 234 -1 1590 1620 10 37 0 +542 325 56 -18 796 826 10 465 0 +543 71 304 -25 689 719 10 959 0 +544 87 311 -5 0 1741 10 26 0 +545 207 487 -22 689 719 10 779 0 +546 332 5 14 1033 1063 10 0 580 +547 161 275 21 0 1823 10 0 844 +548 268 458 24 523 553 10 0 425 +549 175 352 -19 0 1789 10 768 0 +550 398 476 -23 0 1645 10 118 0 +551 51 360 -21 1145 1175 10 838 0 +552 21 70 -31 771 801 10 979 0 +553 80 251 14 304 334 10 0 259 +554 457 280 17 1000 1030 10 0 906 +555 423 315 -12 0 1731 10 771 0 +556 66 88 -22 830 860 10 896 0 +557 479 387 13 397 427 10 0 128 +558 436 123 40 0 1690 10 0 497 +559 286 244 -19 1284 1314 10 706 0 +560 449 190 -22 1140 1170 10 639 0 +561 456 113 -11 1227 1257 10 793 0 +562 480 152 -30 0 1665 10 359 0 +563 100 266 -20 470 500 10 804 0 +564 343 34 -12 725 755 10 692 0 +565 374 306 4 994 1024 10 0 612 +566 13 465 -13 774 804 10 235 0 +567 230 487 20 1130 1160 10 0 908 +568 442 153 -27 1189 1219 10 454 0 +569 240 362 -14 0 1803 10 925 0 +570 433 319 -21 0 1720 10 196 0 +571 0 422 8 821 851 10 0 739 +572 297 131 -23 1165 1195 10 773 0 +573 71 12 -14 297 327 10 68 0 +574 44 440 -30 0 1635 10 379 0 +575 447 184 -14 424 454 10 960 0 +576 341 59 27 790 820 10 0 360 +577 132 32 -23 784 814 10 502 0 +578 411 396 23 920 950 10 0 19 +579 450 416 -15 577 607 10 419 0 +580 323 34 -14 0 1687 10 546 0 +581 244 368 -10 414 444 10 710 0 +582 90 477 18 277 307 10 0 418 +583 34 169 11 484 514 10 0 197 +584 351 128 -17 1253 1283 10 153 0 +585 71 282 -22 0 1734 10 160 0 +586 157 269 -22 1576 1606 10 945 0 +587 392 1 11 605 635 0 0 1007 +588 39 153 -6 798 828 10 296 0 +589 306 229 -12 1320 1350 10 510 0 +590 415 253 21 367 397 10 0 399 +591 92 76 4 1139 1169 10 0 857 +592 437 98 -24 1114 1144 10 187 0 +593 12 367 27 326 356 10 0 88 +594 448 414 -13 1223 1253 10 132 0 +595 128 113 22 363 393 10 0 316 +596 43 360 -23 0 1681 10 742 0 +597 102 422 23 226 256 10 0 121 +598 480 131 -26 688 718 10 326 0 +599 210 81 2 0 1742 10 0 126 +600 432 2 20 0 1608 10 0 115 +601 396 83 -17 1586 1616 10 709 0 +602 489 159 29 0 1660 10 0 397 +603 56 75 -15 0 1654 10 246 0 +604 66 31 25 0 1629 10 0 855 +605 460 117 14 520 550 10 0 538 +606 175 239 23 75 105 10 0 884 +607 217 333 -18 411 441 10 697 0 +608 62 375 16 349 379 10 0 859 +609 82 183 -8 1102 1132 10 867 0 +610 248 214 -20 1479 1509 10 962 0 +611 385 239 21 786 816 10 0 686 +612 371 315 -4 1166 1196 10 565 0 +613 333 163 32 0 1795 10 0 267 +614 100 66 15 0 1678 10 0 488 +615 311 422 29 0 1733 10 0 182 +616 153 235 10 98 128 10 0 807 +617 168 109 10 204 234 10 0 147 +618 284 319 -16 0 1839 10 669 0 +619 195 464 -12 0 1695 10 462 0 +620 382 9 30 274 304 10 0 494 +621 325 210 15 933 963 10 0 537 +622 366 334 5 410 440 10 0 635 +623 200 78 31 993 1023 10 0 81 +624 351 5 12 496 526 10 0 660 +625 197 202 -22 1204 1234 10 788 0 +626 270 337 20 0 1826 10 0 445 +627 125 65 17 788 818 10 0 976 +628 120 17 30 279 309 10 0 31 +629 84 255 13 282 312 10 0 748 +630 222 331 10 540 570 10 0 328 +631 332 459 35 369 399 10 0 381 +632 226 175 -37 1694 1724 10 655 0 +633 404 140 -24 1259 1289 10 871 0 +634 223 178 -33 1136 1166 10 185 0 +635 330 308 -5 1170 1200 10 622 0 +636 140 108 -15 1071 1101 10 309 0 +637 34 239 -29 0 1699 10 882 0 +638 94 192 -33 1080 1110 10 758 0 +639 458 213 22 1128 1158 10 0 560 +640 13 314 14 245 275 10 0 737 +641 202 391 30 0 1767 10 0 522 +642 339 41 6 456 486 10 0 368 +643 224 56 13 1186 1216 10 0 519 +644 345 431 -26 345 375 10 983 0 +645 292 104 26 304 334 0 0 1027 +646 318 99 35 1213 1243 10 0 13 +647 46 248 -11 814 844 10 824 0 +648 482 184 -22 0 1674 10 46 0 +649 411 379 25 0 1709 10 0 828 +650 293 174 31 87 117 10 0 661 +651 169 305 -22 162 192 10 517 0 +652 394 47 -24 313 343 10 774 0 +653 323 29 7 1137 1167 0 0 1015 +654 65 343 38 207 237 10 0 495 +655 158 179 37 0 1799 10 0 632 +656 299 353 -17 0 1801 10 526 0 +657 9 233 -5 306 336 10 289 0 +658 330 138 -13 0 1778 10 505 0 +659 48 412 -26 1032 1062 10 363 0 +660 385 17 -12 809 839 10 624 0 +661 382 110 -31 1112 1142 10 650 0 +662 336 493 20 0 1658 10 0 391 +663 181 441 -16 542 572 10 840 0 +664 162 301 -5 1613 1643 10 284 0 +665 1 101 8 1257 1287 10 0 323 +666 80 117 24 824 854 10 0 428 +667 210 219 7 50 80 10 0 27 +668 404 59 -10 913 943 10 271 0 +669 288 439 16 0 1723 10 0 618 +670 149 458 -10 0 1684 10 178 0 +671 257 391 -31 1633 1663 10 203 0 +672 405 349 15 522 552 10 0 5 +673 191 215 -26 68 98 10 213 0 +674 231 29 14 1226 1256 0 0 1025 +675 253 50 27 226 256 10 0 482 +676 441 177 23 1001 1031 0 0 1030 +677 5 445 30 313 343 10 0 167 +678 463 253 -33 1047 1077 10 198 0 +679 435 180 37 225 255 10 0 782 +680 198 85 -23 263 293 10 260 0 +681 59 388 -19 663 693 10 73 0 +682 373 418 -25 1259 1289 10 78 0 +683 142 80 -3 0 1714 10 895 0 +684 441 7 -26 392 422 10 752 0 +685 33 268 18 696 726 10 0 52 +686 355 174 -21 0 1786 10 611 0 +687 228 260 -36 1606 1636 10 690 0 +688 114 460 -13 0 1665 10 274 0 +689 337 41 8 1002 1032 10 0 968 +690 154 374 36 0 1759 10 0 687 +691 235 13 -18 359 389 10 38 0 +692 303 78 12 179 209 10 0 564 +693 103 464 -8 1273 1303 10 408 0 +694 325 311 22 1322 1352 0 0 1005 +695 306 235 25 57 87 10 0 827 +696 382 360 26 178 208 10 0 44 +697 235 288 18 40 70 10 0 607 +698 0 356 -15 0 1644 10 717 0 +699 178 135 -28 0 1780 10 865 0 +700 226 423 15 197 227 10 0 353 +701 15 11 15 952 982 10 0 354 +702 144 35 26 239 269 10 0 747 +703 176 199 28 89 119 10 0 781 +704 247 306 33 56 86 10 0 751 +705 396 417 13 0 1694 10 0 124 +706 289 220 19 49 79 10 0 559 +707 23 235 -8 1023 1053 10 315 0 +708 137 377 23 169 199 10 0 880 +709 400 71 17 1372 1402 10 0 601 +710 261 359 10 109 139 10 0 581 +711 438 127 2 941 971 10 0 83 +712 318 280 21 0 1841 0 0 1009 +713 333 293 -36 617 647 10 74 0 +714 436 295 11 528 558 10 0 43 +715 62 94 16 0 1671 10 0 158 +716 495 355 3 1243 1273 10 0 219 +717 13 394 15 373 403 10 0 698 +718 172 292 17 0 1827 10 0 937 +719 14 232 18 0 1679 0 0 1020 +720 437 90 12 585 615 10 0 467 +721 214 274 -21 0 1872 10 461 0 +722 420 383 27 982 1012 10 0 996 +723 120 261 -23 793 823 10 755 0 +724 179 75 13 740 770 10 0 447 +725 484 224 7 300 330 10 0 870 +726 214 245 8 36 66 10 0 1000 +727 395 474 -5 387 417 10 358 0 +728 368 311 -13 926 956 10 204 0 +729 199 203 -35 1457 1487 10 377 0 +730 485 428 22 1490 1520 0 0 1003 +731 86 199 23 0 1744 10 0 63 +732 447 272 -14 384 414 10 928 0 +733 40 304 -22 1145 1175 10 156 0 +734 475 267 7 780 810 10 0 319 +735 482 141 -21 1011 1041 10 868 0 +736 489 274 31 534 564 10 0 883 +737 26 342 -14 321 351 10 640 0 +738 139 438 -9 0 1697 10 308 0 +739 12 358 -8 1224 1254 10 571 0 +740 125 61 -22 612 642 10 515 0 +741 360 284 -24 0 1800 10 986 0 +742 29 358 23 611 641 10 0 596 +743 285 247 -15 0 1880 10 218 0 +744 248 386 22 378 408 10 0 102 +745 415 207 18 900 930 10 0 108 +746 130 247 17 120 150 10 0 792 +747 172 66 -26 1303 1333 10 702 0 +748 92 259 -13 399 429 10 629 0 +749 379 486 22 672 702 0 0 1013 +750 452 484 -20 0 1606 10 342 0 +751 268 288 -33 1267 1297 10 704 0 +752 349 43 26 229 259 10 0 684 +753 225 269 30 0 1884 0 0 1031 +754 50 383 -10 260 290 10 380 0 +755 110 251 23 498 528 10 0 723 +756 461 182 -17 629 659 10 797 0 +757 255 487 -12 398 428 10 817 0 +758 133 202 33 461 491 10 0 638 +759 34 329 2 1043 1073 10 0 205 +760 368 452 16 670 700 10 0 437 +761 242 106 -14 1268 1298 10 10 0 +762 171 303 -9 0 1820 10 299 0 +763 329 456 -3 0 1695 10 457 0 +764 490 286 29 0 1673 10 0 887 +765 61 214 4 0 1723 10 0 86 +766 365 74 24 848 878 10 0 112 +767 321 149 -14 0 1792 10 464 0 +768 84 453 19 0 1653 10 0 549 +769 26 442 -4 1344 1374 10 982 0 +770 180 283 23 744 774 10 0 478 +771 394 322 12 1025 1055 10 0 555 +772 348 348 -36 935 965 10 223 0 +773 309 161 23 583 613 10 0 572 +774 385 58 24 0 1681 10 0 652 +775 228 287 21 43 73 10 0 853 +776 312 453 -32 550 580 10 533 0 +777 35 344 -29 863 893 10 518 0 +778 393 98 13 753 783 0 0 1028 +779 208 488 22 478 508 10 0 545 +780 235 33 30 1337 1367 10 0 456 +781 140 137 -28 570 600 10 703 0 +782 405 187 -37 1251 1281 10 679 0 +783 330 371 1 0 1770 10 0 40 +784 265 0 10 0 1665 10 0 507 +785 295 89 23 742 772 10 0 889 +786 3 23 11 0 1580 10 0 356 +787 363 225 35 856 886 10 0 916 +788 148 208 22 0 1805 10 0 625 +789 466 362 15 0 1672 10 0 910 +790 267 290 -11 0 1872 10 501 0 +791 98 2 -28 592 622 10 279 0 +792 131 246 -17 832 862 10 746 0 +793 418 75 11 448 478 10 0 561 +794 366 260 23 1520 1550 0 0 1048 +795 138 28 23 1097 1127 10 0 162 +796 209 212 18 0 1860 10 0 225 +797 443 167 17 543 573 10 0 756 +798 156 65 -27 1037 1067 10 110 0 +799 279 355 9 166 196 0 0 1041 +800 206 172 29 788 818 10 0 866 +801 32 94 14 930 960 10 0 157 +802 301 239 31 52 82 10 0 60 +803 471 368 19 0 1665 10 0 347 +804 133 273 20 119 149 10 0 563 +805 253 74 20 0 1739 10 0 303 +806 470 405 -14 0 1646 10 874 0 +807 77 172 -10 786 816 10 616 0 +808 77 465 11 275 305 10 0 243 +809 466 96 -19 1383 1413 10 535 0 +810 402 277 -24 1438 1468 10 119 0 +811 267 374 23 601 631 10 0 834 +812 450 194 27 625 655 10 0 169 +813 89 65 16 720 750 10 0 942 +814 429 389 -21 424 454 10 835 0 +815 202 28 -18 0 1688 10 245 0 +816 46 389 -18 0 1669 10 375 0 +817 246 407 12 312 342 10 0 757 +818 452 110 -32 0 1670 10 953 0 +819 213 185 21 74 104 10 0 846 +820 134 276 -23 133 163 10 122 0 +821 262 97 -25 947 977 10 396 0 +822 469 489 -12 555 585 10 216 0 +823 364 71 -21 1348 1378 10 434 0 +824 68 240 11 794 824 10 0 647 +825 494 468 31 352 382 10 0 490 +826 439 222 -11 980 1010 10 4 0 +827 386 225 -25 919 949 10 695 0 +828 434 359 -25 1392 1422 10 649 0 +829 103 177 -21 626 656 10 95 0 +830 89 322 -19 1021 1051 10 199 0 +831 307 249 -14 1377 1407 10 283 0 +832 30 155 -16 1280 1310 10 265 0 +833 401 314 -27 976 1006 10 133 0 +834 217 357 -23 1420 1450 10 811 0 +835 373 421 21 237 267 10 0 814 +836 5 281 -25 1372 1402 10 424 0 +837 173 474 -14 1285 1315 10 946 0 +838 36 301 21 219 249 10 0 551 +839 429 169 8 903 933 10 0 894 +840 195 450 16 0 1708 10 0 663 +841 95 382 19 0 1712 10 0 455 +842 225 121 18 0 1784 0 0 1010 +843 10 407 -18 434 464 10 190 0 +844 221 269 -21 1265 1295 10 547 0 +845 264 180 -14 1681 1711 10 277 0 +846 168 59 -21 366 396 10 819 0 +847 281 96 1 0 1758 10 0 980 +848 387 349 -23 0 1746 10 142 0 +849 398 329 17 167 197 10 0 152 +850 239 486 3 1482 1512 0 0 1047 +851 237 420 15 1334 1364 10 0 474 +852 346 354 8 0 1774 10 0 899 +853 172 314 -21 545 575 10 775 0 +854 233 230 20 26 56 10 0 499 +855 79 80 -25 1382 1412 10 604 0 +856 243 402 13 405 435 10 0 237 +857 117 110 -4 0 1722 10 591 0 +858 66 314 26 194 224 10 0 367 +859 58 391 -16 882 912 10 608 0 +860 142 360 -29 1532 1562 10 453 0 +861 492 326 -19 1204 1234 10 125 0 +862 381 328 12 0 1763 10 0 420 +863 62 236 29 558 588 10 0 325 +864 344 70 -15 1146 1176 10 344 0 +865 151 81 28 1558 1588 10 0 699 +866 240 240 -29 1700 1730 10 800 0 +867 46 163 8 926 956 10 0 609 +868 455 168 21 867 897 10 0 735 +869 428 202 -9 904 934 10 94 0 +870 432 199 -7 0 1726 10 725 0 +871 391 112 24 1000 1030 10 0 633 +872 451 305 13 208 238 10 0 536 +873 214 311 14 70 100 0 0 1022 +874 465 367 14 0 1671 10 0 806 +875 164 473 26 296 326 0 0 1019 +876 364 173 30 180 210 10 0 300 +877 274 261 -26 1707 1737 10 407 0 +878 133 455 -16 808 838 10 327 0 +879 351 481 10 322 352 10 0 228 +880 115 395 -23 815 845 10 708 0 +881 297 304 4 71 101 10 0 475 +882 7 194 29 0 1666 10 0 637 +883 409 255 -31 0 1756 10 736 0 +884 87 213 -23 626 656 10 606 0 +885 60 246 -16 0 1725 10 29 0 +886 3 471 13 0 1584 0 0 1012 +887 418 251 -29 1197 1227 10 764 0 +888 153 362 7 0 1767 10 0 909 +889 323 77 -23 0 1728 10 785 0 +890 143 158 12 141 171 10 0 963 +891 351 148 30 461 491 10 0 170 +892 426 38 -9 609 639 10 936 0 +893 226 316 21 70 100 10 0 161 +894 347 192 -8 1488 1518 10 839 0 +895 102 6 3 1458 1488 10 0 683 +896 41 120 22 696 726 10 0 556 +897 247 443 -14 330 360 10 99 0 +898 218 271 -8 1574 1604 10 923 0 +899 376 385 -8 184 214 10 852 0 +900 241 402 11 0 1763 10 0 261 +901 213 399 18 234 264 10 0 432 +902 32 191 -23 586 616 10 409 0 +903 441 374 10 227 257 10 0 233 +904 376 113 -5 0 1729 10 36 0 +905 215 434 9 0 1728 0 0 1043 +906 499 316 -17 0 1658 10 554 0 +907 318 497 21 0 1659 0 0 1044 +908 256 441 -20 0 1724 10 567 0 +909 174 397 -7 1245 1275 10 888 0 +910 468 360 -15 274 304 10 789 0 +911 287 256 18 37 67 10 0 141 +912 448 397 33 866 896 0 0 1026 +913 352 487 -28 902 932 10 334 0 +914 253 118 -33 547 577 10 947 0 +915 159 299 12 1016 1046 10 0 15 +916 351 233 -35 1423 1453 10 787 0 +917 268 113 21 0 1777 10 0 444 +918 164 332 -14 1280 1310 10 42 0 +919 88 484 5 0 1631 10 0 324 +920 360 488 -21 0 1653 10 11 0 +921 343 166 -14 876 906 10 372 0 +922 497 266 -14 748 778 10 438 0 +923 138 406 8 1216 1246 10 0 898 +924 420 224 -6 429 459 10 159 0 +925 231 410 14 0 1754 10 0 569 +926 199 438 3 0 1721 10 0 369 +927 219 215 -17 0 1869 10 254 0 +928 365 274 14 117 147 10 0 732 +929 481 454 -13 0 1607 10 949 0 +930 187 61 19 545 575 10 0 144 +931 372 97 13 214 244 10 0 292 +932 187 263 35 64 94 10 0 253 +933 371 427 23 0 1701 10 0 310 +934 74 215 10 229 259 10 0 258 +935 375 145 -28 929 959 10 351 0 +936 365 28 9 268 298 10 0 892 +937 118 314 -17 338 368 10 718 0 +938 60 29 32 1363 1393 0 0 1046 +939 478 300 12 0 1682 10 0 67 +940 33 152 17 1320 1350 10 0 528 +941 347 184 -13 1079 1109 10 524 0 +942 94 40 -16 1068 1098 10 813 0 +943 290 328 -30 144 174 10 28 0 +944 96 346 -17 0 1734 10 136 0 +945 97 288 22 1284 1314 10 0 586 +946 176 470 14 547 577 10 0 837 +947 206 97 33 0 1756 10 0 914 +948 210 133 15 689 719 10 0 51 +949 489 457 13 0 1599 10 0 929 +950 418 399 -25 438 468 10 995 0 +951 392 491 -26 0 1636 10 480 0 +952 437 19 15 1014 1044 10 0 311 +953 495 83 32 0 1619 10 0 818 +954 468 352 9 768 798 10 0 370 +955 390 120 -15 1004 1034 10 230 0 +956 80 357 1 530 560 0 0 1021 +957 394 310 -15 0 1759 10 994 0 +958 61 441 -7 544 574 10 977 0 +959 52 303 25 441 471 10 0 543 +960 391 202 14 0 1767 10 0 575 +961 36 451 -34 0 1622 10 23 0 +962 276 84 20 0 1747 10 0 610 +963 130 140 -12 194 224 10 890 0 +964 16 287 12 0 1679 10 0 305 +965 292 136 28 781 811 10 0 101 +966 53 204 -15 1055 1085 10 446 0 +967 359 287 -29 0 1800 10 93 0 +968 309 29 -8 1294 1324 10 689 0 +969 473 491 -15 0 1587 10 531 0 +970 273 255 -26 1492 1522 10 202 0 +971 263 153 12 0 1818 10 0 165 +972 328 458 -25 768 798 10 459 0 +973 401 164 -31 0 1742 10 209 0 +974 480 119 -17 628 658 10 268 0 +975 488 96 -5 1066 1096 10 64 0 +976 149 98 -17 1165 1195 10 627 0 +977 49 437 7 427 457 10 0 958 +978 440 77 -16 0 1659 10 417 0 +979 43 135 31 236 266 10 0 552 +980 188 151 -1 1297 1327 10 847 0 +981 175 422 -25 1446 1476 10 333 0 +982 48 437 4 804 834 10 0 769 +983 334 403 26 174 204 10 0 644 +984 372 115 13 364 394 10 0 114 +985 111 192 -11 1199 1229 10 179 0 +986 357 290 24 114 144 10 0 741 +987 331 134 -30 1124 1154 10 508 0 +988 495 199 25 337 367 10 0 506 +989 441 60 21 1459 1489 0 0 1002 +990 51 89 19 1208 1238 0 0 1008 +991 452 206 -9 492 522 10 54 0 +992 195 386 13 146 176 10 0 439 +993 172 24 -11 1452 1482 10 472 0 +994 408 318 15 0 1743 10 0 957 +995 410 399 25 234 264 10 0 950 +996 413 345 -27 1218 1248 10 722 0 +997 215 129 17 1119 1149 0 0 1029 +998 380 350 15 866 896 10 0 355 +999 19 38 -24 847 877 10 155 0 +1000 166 247 -8 84 114 10 726 0 +1001 457 492 -7 0 1597 10 207 0 +1002 441 60 -21 1459 1489 10 989 0 +1003 485 428 -22 1490 1520 10 730 0 +1004 53 466 -9 335 365 10 263 0 +1005 325 311 -22 1322 1352 10 694 0 +1006 193 138 -30 661 691 10 330 0 +1007 392 1 -11 605 635 10 587 0 +1008 51 89 -19 1208 1238 10 990 0 +1009 318 280 -21 0 1841 10 712 0 +1010 225 121 -18 0 1784 10 842 0 +1011 68 53 -16 739 769 10 275 0 +1012 3 471 -13 0 1584 10 886 0 +1013 379 486 -22 672 702 10 749 0 +1014 475 352 -33 0 1668 10 304 0 +1015 323 29 -7 1137 1167 10 653 0 +1016 211 411 -15 0 1750 10 183 0 +1017 397 477 -13 0 1645 10 469 0 +1018 200 27 -22 525 555 10 194 0 +1019 164 473 -26 296 326 10 875 0 +1020 14 232 -18 0 1679 10 719 0 +1021 80 357 -1 530 560 10 956 0 +1022 214 311 -14 70 100 10 873 0 +1023 418 269 -3 0 1746 10 301 0 +1024 59 276 -11 892 922 10 62 0 +1025 231 29 -14 1226 1256 10 674 0 +1026 448 397 -33 866 896 10 912 0 +1027 292 104 -26 304 334 10 645 0 +1028 393 98 -13 753 783 10 778 0 +1029 215 129 -17 1119 1149 10 997 0 +1030 441 177 -23 1001 1031 10 676 0 +1031 225 269 -30 0 1884 10 753 0 +1032 297 283 -28 0 1858 10 278 0 +1033 370 262 -15 1099 1129 10 104 0 +1034 277 428 -7 490 520 10 440 0 +1035 500 228 -8 0 1665 10 109 0 +1036 245 176 -20 0 1841 10 82 0 +1037 57 183 -15 0 1711 10 143 0 +1038 80 337 -28 0 1725 10 430 0 +1039 241 180 -13 1695 1725 10 106 0 +1040 142 30 -32 1246 1276 10 398 0 +1041 279 355 -9 166 196 10 799 0 +1042 325 147 -14 1187 1217 10 129 0 +1043 215 434 -9 0 1728 10 905 0 +1044 318 497 -21 0 1659 10 907 0 +1045 177 404 -17 1262 1292 10 340 0 +1046 60 29 -32 1363 1393 10 938 0 +1047 239 486 -3 1482 1512 10 850 0 +1048 366 260 -23 1520 1550 10 794 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1107.txt b/jsprit-instances/instances/lilim/1000/LR1107.txt new file mode 100644 index 00000000..ea0ea9b2 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1107.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 21 1143 1173 10 0 456 +2 67 190 -21 1173 1203 10 428 0 +3 80 400 10 0 1689 10 0 42 +4 439 237 -14 939 969 10 928 0 +5 377 385 -23 866 896 10 310 0 +6 449 428 -18 1247 1277 10 217 0 +7 342 481 18 1440 1470 10 0 358 +8 466 149 -8 1186 1216 10 839 0 +9 83 290 14 0 1744 10 0 325 +10 251 63 -18 987 1017 10 362 0 +11 328 491 -12 0 1662 10 817 0 +12 260 472 -33 0 1693 10 261 0 +13 290 145 -25 1282 1312 10 90 0 +14 266 221 9 0 1882 10 0 181 +15 164 320 12 1095 1125 10 0 527 +16 52 412 -17 0 1660 10 136 0 +17 485 104 21 794 824 10 0 46 +18 144 331 13 0 1782 10 0 302 +19 387 394 8 0 1717 10 0 852 +20 472 57 -14 0 1621 10 378 0 +21 343 276 15 0 1819 10 0 621 +22 104 349 20 0 1739 10 0 234 +23 28 467 -17 1343 1373 10 177 0 +24 91 427 -13 883 913 10 274 0 +25 429 476 -7 0 1627 10 207 0 +26 210 276 -36 0 1868 10 532 0 +27 58 39 12 0 1630 10 0 999 +28 273 300 30 55 85 10 0 253 +29 41 232 -19 0 1706 10 135 0 +30 25 53 -11 1020 1050 10 402 0 +31 52 18 28 857 887 10 0 938 +32 27 444 -36 1080 1110 10 843 0 +33 178 72 -28 757 787 10 680 0 +34 406 460 2 719 749 10 0 191 +35 250 328 24 249 279 10 0 851 +36 492 34 -18 0 1591 10 49 0 +37 412 100 -21 0 1695 10 149 0 +38 233 87 18 0 1752 10 0 427 +39 60 5 -8 1044 1074 10 225 0 +40 406 408 15 0 1693 10 0 881 +41 245 42 24 547 577 10 0 106 +42 166 345 -10 1130 1160 10 3 0 +43 440 294 -15 960 990 10 322 0 +44 370 382 11 884 914 10 0 772 +45 32 319 21 401 431 10 0 739 +46 480 136 -21 0 1659 10 17 0 +47 371 163 21 828 858 10 0 139 +48 0 188 26 0 1658 10 0 382 +49 438 5 18 0 1607 10 0 36 +50 132 477 25 327 357 10 0 878 +51 203 211 -22 0 1854 10 788 0 +52 2 264 -19 0 1667 10 493 0 +53 231 167 -44 0 1830 10 500 0 +54 423 221 -21 0 1740 10 590 0 +55 459 53 20 0 1628 10 0 64 +56 386 154 31 1101 1131 10 0 633 +57 130 494 -14 0 1644 10 873 0 +58 31 175 24 0 1684 10 0 583 +59 69 423 32 802 832 10 0 224 +60 352 241 -18 792 822 10 530 0 +61 261 201 -28 1514 1544 10 965 0 +62 59 276 11 892 922 10 0 442 +63 146 188 -25 1235 1265 10 498 0 +64 451 62 -20 0 1640 10 55 0 +65 299 285 -24 1254 1284 10 635 0 +66 142 372 -31 0 1753 10 520 0 +67 440 201 29 893 923 10 0 869 +68 219 210 14 50 80 10 0 997 +69 64 198 10 0 1722 10 0 966 +70 390 249 -20 582 612 10 141 0 +71 9 101 -3 666 696 10 393 0 +72 424 288 -14 1057 1087 10 438 0 +73 77 372 19 211 241 10 0 841 +74 298 264 36 50 80 10 0 994 +75 405 454 11 0 1659 10 0 132 +76 407 35 11 0 1649 10 0 417 +77 225 369 38 0 1794 10 0 522 +78 347 459 -12 479 509 10 644 0 +79 117 178 28 0 1764 10 0 528 +80 132 479 -13 257 287 10 670 0 +81 201 66 14 0 1725 10 0 147 +82 245 176 -26 0 1841 10 516 0 +83 470 138 16 1389 1419 10 0 168 +84 115 296 -22 1529 1559 10 945 0 +85 348 476 -7 1197 1227 10 445 0 +86 43 210 20 210 240 10 0 345 +87 327 139 -18 1257 1287 10 658 0 +88 49 353 15 1446 1476 10 0 312 +89 356 256 19 106 136 10 0 883 +90 335 99 25 0 1742 10 0 13 +91 363 34 19 272 302 10 0 936 +92 33 278 -25 0 1697 10 424 0 +93 366 288 -24 684 714 10 986 0 +94 452 172 9 0 1699 10 0 568 +95 86 189 21 227 257 10 0 731 +96 262 369 15 0 1796 0 0 1036 +97 218 403 -20 0 1759 10 619 0 +98 218 12 3 0 1675 10 0 303 +99 228 399 -21 0 1765 10 893 0 +100 492 188 33 0 1666 0 0 1012 +101 267 174 -25 1618 1648 10 396 0 +102 274 441 -29 0 1723 10 272 0 +103 210 113 -24 690 720 10 339 0 +104 370 262 -13 1099 1129 10 204 0 +105 303 186 -32 1354 1384 10 613 0 +106 241 180 -24 1695 1725 10 41 0 +107 100 85 14 0 1693 10 0 857 +108 350 199 21 0 1803 0 0 1046 +109 500 228 -12 0 1665 10 732 0 +110 251 238 27 0 1903 0 0 1016 +111 114 102 -19 0 1715 10 990 0 +112 345 146 27 0 1775 0 0 1040 +113 21 146 21 487 517 10 0 446 +114 330 147 -23 848 878 10 773 0 +115 476 61 36 0 1621 10 0 720 +116 386 245 16 0 1779 10 0 278 +117 201 278 -23 0 1859 10 770 0 +118 421 499 -18 0 1613 10 229 0 +119 426 231 24 1028 1058 10 0 826 +120 105 137 32 452 482 10 0 980 +121 64 437 11 918 948 10 0 659 +122 181 260 -23 0 1846 10 606 0 +123 413 391 8 0 1700 10 0 405 +124 370 493 -32 571 601 10 533 0 +125 447 267 19 980 1010 10 0 554 +126 232 101 -19 0 1765 10 256 0 +127 371 332 -17 530 560 10 618 0 +128 447 383 -5 0 1678 10 622 0 +129 325 147 14 0 1788 10 0 267 +130 489 437 -9 707 737 10 266 0 +131 415 95 -9 1177 1207 10 300 0 +132 331 356 -11 0 1782 10 75 0 +133 374 346 27 0 1759 10 0 833 +134 108 37 23 549 579 10 0 279 +135 5 224 19 0 1669 10 0 29 +136 93 413 17 226 256 10 0 16 +137 210 29 -22 0 1691 10 194 0 +138 136 265 -5 0 1801 10 289 0 +139 409 155 -21 0 1730 10 47 0 +140 111 178 18 156 186 10 0 748 +141 291 251 20 41 71 10 0 70 +142 322 290 -18 0 1833 10 814 0 +143 57 183 -15 0 1711 10 337 0 +144 181 185 19 0 1821 10 0 800 +145 7 382 -14 770 800 10 640 0 +146 425 448 -23 794 824 10 578 0 +147 174 41 -14 0 1693 10 81 0 +148 161 276 8 133 163 0 0 1008 +149 398 49 21 0 1666 10 0 37 +150 210 379 12 709 739 10 0 641 +151 60 231 -23 0 1725 10 409 0 +152 453 360 13 230 260 10 0 954 +153 367 97 17 0 1723 10 0 931 +154 488 3 -20 0 1572 10 684 0 +155 44 115 24 246 276 10 0 603 +156 48 293 22 0 1709 10 0 336 +157 64 135 11 0 1697 10 0 867 +158 65 62 15 0 1652 10 0 275 +159 404 207 -12 0 1756 10 510 0 +160 68 303 -35 0 1726 10 932 0 +161 263 418 25 278 308 10 0 776 +162 147 30 26 1109 1139 10 0 993 +163 384 149 18 0 1748 0 0 1020 +164 340 416 36 0 1727 10 0 972 +165 271 128 12 0 1792 10 0 172 +166 89 358 23 0 1722 10 0 681 +167 20 480 -6 0 1590 10 208 0 +168 488 173 -16 0 1665 10 83 0 +169 439 156 2 0 1704 10 0 195 +170 389 156 -26 716 746 10 202 0 +171 111 392 18 0 1717 10 0 888 +172 267 162 -12 1449 1479 10 165 0 +173 248 176 32 0 1841 10 0 845 +174 413 476 34 1179 1209 10 0 682 +175 352 481 -10 1285 1315 10 391 0 +176 264 135 -1 0 1800 10 444 0 +177 29 462 17 1310 1340 10 0 23 +178 148 462 10 727 757 0 0 1014 +179 44 140 11 868 898 10 0 638 +180 414 378 23 495 525 10 0 806 +181 392 95 -9 766 796 10 14 0 +182 216 341 19 654 684 10 0 340 +183 211 411 15 0 1750 10 0 905 +184 317 45 -11 0 1700 10 368 0 +185 178 150 33 632 662 10 0 634 +186 428 302 27 1016 1046 10 0 485 +187 450 45 -17 0 1629 10 709 0 +188 453 318 30 0 1701 10 0 370 +189 186 135 24 0 1784 0 0 1002 +190 11 403 -7 343 373 10 544 0 +191 433 447 -2 794 824 10 34 0 +192 272 420 -3 1386 1416 10 850 0 +193 429 59 -8 0 1654 10 904 0 +194 200 27 22 525 555 10 0 137 +195 498 171 -2 0 1655 10 169 0 +196 487 320 21 858 888 10 0 219 +197 45 166 -18 1013 1043 10 258 0 +198 490 276 33 0 1674 10 0 512 +199 126 391 -26 0 1728 10 937 0 +200 92 18 8 0 1635 0 0 1013 +201 293 228 19 0 1867 10 0 257 +202 343 205 26 0 1812 10 0 170 +203 182 480 -12 0 1676 10 462 0 +204 385 285 13 868 898 10 0 104 +205 44 344 12 1079 1109 10 0 664 +206 170 347 -8 0 1790 10 923 0 +207 457 492 7 0 1597 10 0 25 +208 124 448 6 369 399 10 0 167 +209 398 210 31 0 1762 10 0 812 +210 75 118 21 409 439 10 0 556 +211 105 474 -5 471 501 10 919 0 +212 134 211 35 122 152 10 0 323 +213 211 248 26 39 69 10 0 721 +214 212 186 -27 1722 1752 10 448 0 +215 492 335 -19 0 1659 10 861 0 +216 497 483 -31 353 383 10 825 0 +217 440 436 18 0 1650 10 0 6 +218 311 203 15 723 753 10 0 970 +219 491 369 -21 0 1647 10 196 0 +220 67 378 26 470 500 10 0 380 +221 383 17 -30 940 970 10 620 0 +222 7 82 25 412 442 10 0 552 +223 342 319 36 0 1800 10 0 283 +224 78 406 -32 960 990 10 59 0 +225 103 123 8 490 520 10 0 39 +226 241 38 -14 0 1703 10 674 0 +227 224 3 -18 690 720 10 245 0 +228 436 467 -25 736 766 10 995 0 +229 438 488 18 0 1612 10 0 118 +230 351 60 -12 0 1700 10 624 0 +231 13 214 -10 1354 1384 10 616 0 +232 429 67 16 732 762 10 0 592 +233 498 456 27 0 1593 10 0 822 +234 135 400 -20 0 1726 10 22 0 +235 215 293 13 55 85 10 0 504 +236 354 416 -25 0 1720 10 550 0 +237 294 421 -19 1575 1605 10 763 0 +238 208 445 22 0 1716 10 0 840 +239 230 320 8 1192 1222 10 0 704 +240 157 38 3 0 1684 10 0 702 +241 441 100 -14 0 1673 10 978 0 +242 61 170 -23 1006 1036 10 807 0 +243 79 467 22 351 381 10 0 379 +244 365 190 -13 1477 1507 10 524 0 +245 282 1 18 0 1664 10 0 227 +246 124 111 15 0 1728 10 0 521 +247 247 219 -19 0 1884 10 610 0 +248 28 180 -21 0 1683 10 298 0 +249 167 488 -20 252 282 10 369 0 +250 442 289 -7 0 1720 10 734 0 +251 136 430 -22 0 1702 10 517 0 +252 38 15 3 0 1599 10 0 410 +253 246 314 -30 1445 1475 10 28 0 +254 176 200 -17 568 598 10 673 0 +255 337 232 -10 1571 1601 10 924 0 +256 257 133 19 0 1798 10 0 126 +257 295 247 -19 1303 1333 10 201 0 +258 39 162 18 565 595 10 0 197 +259 79 257 -11 953 983 10 824 0 +260 236 126 23 0 1791 10 0 914 +261 259 498 33 1075 1105 10 0 12 +262 180 162 9 0 1803 10 0 435 +263 53 466 9 335 365 10 0 418 +264 167 291 -12 1634 1664 10 737 0 +265 89 185 -6 600 630 10 296 0 +266 487 446 9 0 1608 10 0 130 +267 308 199 -14 0 1838 10 129 0 +268 481 84 17 506 536 10 0 974 +269 495 227 20 0 1669 10 0 922 +270 397 57 17 0 1673 10 0 414 +271 372 39 10 0 1672 10 0 564 +272 278 450 29 1375 1405 10 0 102 +273 292 32 14 229 259 10 0 691 +274 90 496 13 0 1622 10 0 24 +275 68 53 -15 739 769 10 158 0 +276 371 423 10 0 1704 10 0 783 +277 273 149 -12 0 1812 10 971 0 +278 297 283 -16 0 1858 10 116 0 +279 120 37 -23 0 1666 10 134 0 +280 371 488 -22 0 1649 10 749 0 +281 206 174 -27 0 1828 10 433 0 +282 174 347 3 0 1792 10 0 808 +283 330 281 -36 1330 1360 10 223 0 +284 67 451 -18 1216 1246 10 375 0 +285 27 464 -8 0 1606 10 365 0 +286 361 178 -9 0 1783 10 486 0 +287 463 406 -9 857 887 10 848 0 +288 456 157 -17 0 1689 10 797 0 +289 153 244 5 108 138 10 0 138 +290 153 192 -28 0 1802 10 829 0 +291 352 63 6 1178 1208 10 0 465 +292 371 71 -23 0 1699 10 348 0 +293 163 472 9 653 683 10 0 545 +294 448 495 40 384 414 10 0 490 +295 282 10 30 0 1673 10 0 780 +296 66 163 6 395 425 10 0 265 +297 314 205 -14 1527 1557 10 372 0 +298 83 169 21 0 1730 10 0 248 +299 221 291 -2 0 1865 10 371 0 +300 374 116 9 587 617 10 0 131 +301 418 269 3 0 1746 10 0 736 +302 178 302 -13 887 917 10 18 0 +303 250 57 -3 0 1722 10 98 0 +304 475 352 33 0 1668 10 0 347 +305 1 252 -27 0 1666 10 401 0 +306 286 356 -9 0 1804 10 799 0 +307 65 82 13 740 770 10 0 492 +308 154 392 9 171 201 10 0 582 +309 196 56 15 0 1714 10 0 815 +310 366 390 23 0 1734 10 0 5 +311 436 25 -15 1282 1312 10 952 0 +312 67 352 -15 0 1706 10 88 0 +313 173 182 -7 102 132 10 667 0 +314 390 34 7 1060 1090 10 0 317 +315 18 225 8 0 1682 10 0 1000 +316 57 43 15 0 1632 10 0 701 +317 388 44 -7 1131 1161 10 314 0 +318 269 112 -24 1263 1293 10 499 0 +319 374 260 27 0 1791 0 0 1004 +320 291 213 -15 1258 1288 10 941 0 +321 178 420 18 1071 1101 10 0 460 +322 389 255 15 785 815 10 0 43 +323 134 194 -35 1652 1682 10 212 0 +324 93 490 -14 379 409 10 688 0 +325 64 294 -14 0 1724 10 9 0 +326 493 111 26 541 571 10 0 975 +327 150 484 16 0 1661 10 0 479 +328 235 316 -26 656 686 10 751 0 +329 239 15 2 0 1680 10 0 366 +330 193 138 -21 0 1790 10 819 0 +331 40 278 -18 0 1704 10 685 0 +332 307 52 -11 0 1709 10 968 0 +333 161 416 25 0 1727 10 0 946 +334 381 457 -21 471 501 10 835 0 +335 55 318 13 312 342 10 0 363 +336 80 279 -22 0 1743 10 156 0 +337 48 162 15 220 250 10 0 143 +338 91 27 -4 1182 1212 10 491 0 +339 288 70 24 183 213 10 0 103 +340 177 404 -19 0 1745 10 182 0 +341 10 237 19 616 646 10 0 637 +342 493 493 20 856 886 10 0 750 +343 440 292 -25 940 970 10 509 0 +344 349 76 15 1031 1061 10 0 823 +345 47 208 -20 226 256 10 86 0 +346 283 454 -8 0 1709 10 425 0 +347 486 324 -33 0 1668 10 304 0 +348 392 87 23 0 1699 10 0 292 +349 122 422 -23 1457 1487 10 597 0 +350 37 281 17 493 523 10 0 585 +351 413 127 28 831 861 10 0 584 +352 222 499 7 845 875 10 0 432 +353 211 446 -18 0 1716 10 901 0 +354 30 7 -10 1189 1219 10 503 0 +355 398 341 33 939 969 10 0 771 +356 26 67 -8 1317 1347 10 364 0 +357 461 186 16 0 1695 10 0 756 +358 313 391 -18 0 1761 10 7 0 +359 471 94 30 0 1645 10 0 535 +360 341 72 9 805 835 10 0 458 +361 130 186 16 136 166 10 0 553 +362 257 57 18 0 1722 10 0 10 +363 94 344 -13 0 1733 10 335 0 +364 6 53 8 0 1602 10 0 356 +365 146 376 8 234 264 10 0 285 +366 244 13 -2 1013 1043 10 329 0 +367 29 336 22 0 1678 10 0 518 +368 306 42 11 0 1700 10 0 184 +369 177 486 20 0 1668 10 0 249 +370 489 338 -30 1397 1427 10 188 0 +371 179 318 2 1121 1151 10 0 299 +372 344 203 14 167 197 10 0 297 +373 149 341 -21 404 434 10 651 0 +374 307 412 -15 0 1744 10 790 0 +375 68 450 18 633 663 10 0 284 +376 420 80 -30 0 1675 10 467 0 +377 144 220 35 0 1805 0 0 1030 +378 497 54 14 978 1008 10 0 20 +379 80 458 -22 371 401 10 243 0 +380 84 377 -26 0 1706 10 220 0 +381 332 382 -13 1010 1040 10 469 0 +382 6 196 -26 1203 1233 10 48 0 +383 104 28 -14 0 1650 10 387 0 +384 224 320 -25 1284 1314 10 459 0 +385 87 3 13 0 1620 0 0 1003 +386 149 214 7 0 1808 10 0 609 +387 98 29 14 0 1647 10 0 383 +388 135 30 12 0 1667 10 0 628 +389 287 397 -20 564 594 10 626 0 +390 107 374 -16 914 944 10 608 0 +391 355 485 10 0 1658 10 0 175 +392 51 286 -28 1459 1489 10 525 0 +393 49 118 3 0 1675 10 0 71 +394 159 226 16 94 124 0 0 1042 +395 185 431 15 0 1723 10 0 981 +396 262 92 25 0 1757 10 0 101 +397 475 198 -7 0 1685 10 725 0 +398 142 30 -6 0 1670 10 846 0 +399 481 207 34 0 1681 10 0 422 +400 174 122 -21 593 623 10 699 0 +401 35 263 27 270 300 10 0 305 +402 24 71 11 346 376 10 0 30 +403 173 65 12 448 478 0 0 1034 +404 91 326 -21 0 1739 10 777 0 +405 470 417 -8 737 767 10 123 0 +406 397 153 -30 882 912 10 876 0 +407 295 283 -14 0 1860 10 728 0 +408 174 376 8 0 1768 0 0 1006 +409 38 190 23 0 1695 10 0 151 +410 16 68 -3 0 1619 10 252 0 +411 179 286 8 0 1836 10 0 762 +412 244 422 -14 538 568 10 925 0 +413 250 441 -15 0 1724 10 700 0 +414 497 18 -17 0 1577 10 270 0 +415 195 111 -13 998 1028 10 724 0 +416 26 221 28 996 1026 10 0 882 +417 442 5 -11 320 350 10 76 0 +418 44 496 -9 0 1595 10 263 0 +419 448 404 15 0 1665 10 0 849 +420 471 427 -10 0 1632 10 903 0 +421 460 424 -20 1455 1485 10 950 0 +422 461 195 -34 0 1697 10 399 0 +423 146 313 22 0 1794 10 0 859 +424 19 273 25 1017 1047 10 0 92 +425 245 461 8 649 679 10 0 346 +426 69 266 -25 0 1734 10 885 0 +427 191 84 -18 867 897 10 38 0 +428 68 160 21 0 1712 10 0 2 +429 212 47 -18 801 831 10 473 0 +430 80 337 28 0 1725 10 0 596 +431 412 478 -26 0 1636 10 480 0 +432 225 488 -7 0 1676 10 352 0 +433 105 140 27 0 1733 10 0 281 +434 389 43 -26 0 1666 10 752 0 +435 177 156 -9 0 1796 10 262 0 +436 179 497 -7 1411 1441 10 539 0 +437 377 432 -10 831 861 10 951 0 +438 497 296 14 613 643 10 0 72 +439 152 476 45 523 553 10 0 738 +440 277 428 7 490 520 10 0 669 +441 64 5 14 1129 1159 10 0 976 +442 44 311 -11 0 1701 10 62 0 +443 165 59 -12 943 973 10 683 0 +444 261 138 1 0 1803 10 0 176 +445 268 351 7 0 1813 10 0 85 +446 48 150 -21 0 1690 10 113 0 +447 215 79 5 0 1741 10 0 599 +448 109 56 27 239 269 10 0 214 +449 171 188 -37 621 651 10 655 0 +450 284 457 17 0 1706 10 0 451 +451 274 442 -17 0 1722 10 450 0 +452 33 286 11 0 1696 10 0 742 +453 112 433 -23 0 1686 10 708 0 +454 423 170 27 513 543 10 0 973 +455 213 283 14 0 1866 10 0 461 +456 240 34 -21 0 1699 10 1 0 +457 283 438 3 231 261 10 0 920 +458 324 99 -9 0 1747 10 360 0 +459 259 301 25 0 1864 10 0 384 +460 189 402 -18 0 1752 10 321 0 +461 215 282 -14 1440 1470 10 455 0 +462 166 440 12 0 1708 10 0 203 +463 374 232 -21 125 155 10 916 0 +464 339 113 -24 0 1752 10 766 0 +465 335 46 -6 0 1694 10 291 0 +466 313 493 -22 1193 1223 10 744 0 +467 432 66 30 0 1657 10 0 376 +468 76 462 -19 956 986 10 768 0 +469 397 477 13 0 1645 10 0 381 +470 196 489 23 1030 1060 10 0 926 +471 354 156 20 0 1775 10 0 505 +472 171 24 -18 1383 1413 10 577 0 +473 187 73 18 292 322 10 0 429 +474 243 408 15 0 1757 10 0 900 +475 421 387 15 0 1696 10 0 862 +476 141 426 23 531 561 10 0 860 +477 415 118 -11 0 1704 10 987 0 +478 240 255 -14 1611 1641 10 844 0 +479 162 388 -16 1126 1156 10 327 0 +480 413 493 26 0 1623 10 0 431 +481 69 414 6 1263 1293 0 0 1005 +482 273 70 -20 619 649 10 962 0 +483 142 14 18 835 865 10 0 795 +484 185 434 -25 0 1720 10 663 0 +485 360 294 -27 0 1797 10 186 0 +486 265 240 9 18 48 10 0 286 +487 280 245 21 30 60 10 0 743 +488 87 51 35 0 1658 10 0 942 +489 195 273 22 59 89 10 0 718 +490 422 498 -40 692 722 10 294 0 +491 95 64 4 766 796 10 0 338 +492 63 155 -13 0 1706 10 307 0 +493 24 259 19 0 1689 10 0 52 +494 376 92 10 0 1713 10 0 871 +495 83 300 26 500 530 10 0 543 +496 72 477 46 288 318 10 0 958 +497 380 194 3 0 1774 0 0 1031 +498 72 227 25 0 1736 10 0 63 +499 238 123 24 781 811 10 0 318 +500 188 119 44 975 1005 10 0 53 +501 229 322 -23 0 1840 10 834 0 +502 150 68 23 0 1708 10 0 514 +503 67 24 10 0 1625 10 0 354 +504 63 420 -13 0 1663 10 235 0 +505 339 144 -20 1099 1129 10 471 0 +506 454 201 -31 0 1706 10 991 0 +507 158 24 18 0 1671 0 0 1035 +508 365 119 30 382 412 10 0 778 +509 440 284 25 852 882 10 0 343 +510 417 212 12 910 940 10 0 159 +511 404 439 -13 0 1672 10 705 0 +512 472 248 -33 0 1693 10 198 0 +513 235 108 12 0 1773 10 0 930 +514 174 67 -23 0 1717 10 502 0 +515 132 151 22 154 184 10 0 666 +516 217 207 26 0 1861 10 0 82 +517 162 306 22 119 149 10 0 251 +518 48 366 -22 0 1683 10 367 0 +519 209 68 27 0 1729 10 0 947 +520 94 497 31 0 1623 10 0 66 +521 110 122 -15 0 1726 10 246 0 +522 274 403 -38 0 1761 10 77 0 +523 421 386 -25 824 854 10 649 0 +524 399 175 13 747 777 10 0 244 +525 56 268 28 1064 1094 10 0 392 +526 322 406 17 0 1744 10 0 983 +527 244 277 -12 1301 1331 10 15 0 +528 105 181 -28 0 1755 10 79 0 +529 30 97 23 1210 1240 0 0 1007 +530 359 246 18 0 1806 10 0 60 +531 498 457 15 0 1592 10 0 969 +532 190 267 36 0 1853 10 0 26 +533 334 481 32 0 1670 10 0 124 +534 18 24 32 628 658 10 0 786 +535 482 104 -30 0 1641 10 359 0 +536 460 328 -11 0 1691 10 570 0 +537 320 211 16 993 1023 10 0 541 +538 494 165 -14 0 1657 10 735 0 +539 167 445 7 0 1704 10 0 436 +540 340 291 22 470 500 10 0 713 +541 272 234 -16 1590 1620 10 537 0 +542 325 56 13 796 826 0 0 1037 +543 71 304 -26 689 719 10 495 0 +544 87 311 7 0 1741 10 0 190 +545 207 487 -9 0 1675 10 293 0 +546 332 5 -24 1033 1063 10 774 0 +547 161 275 21 0 1823 0 0 1044 +548 268 458 -34 523 553 10 908 0 +549 175 352 12 0 1789 10 0 690 +550 398 476 25 0 1645 10 0 236 +551 51 360 13 1145 1175 10 0 944 +552 21 70 -25 771 801 10 222 0 +553 80 251 -16 304 334 10 361 0 +554 457 280 -19 1000 1030 10 125 0 +555 423 315 -11 0 1731 10 714 0 +556 66 88 -21 0 1670 10 210 0 +557 479 387 -22 0 1649 10 730 0 +558 436 123 40 0 1690 10 0 818 +559 286 244 -31 1284 1314 10 802 0 +560 449 190 2 1140 1170 0 0 1017 +561 456 113 -14 1227 1257 10 605 0 +562 480 152 -5 0 1665 10 598 0 +563 100 266 5 470 500 10 0 723 +564 343 34 -10 0 1680 10 271 0 +565 374 306 -15 994 1024 10 998 0 +566 13 465 31 774 804 10 0 886 +567 230 487 -22 1130 1160 10 779 0 +568 442 153 -9 0 1700 10 94 0 +569 240 362 23 0 1803 10 0 671 +570 433 319 11 0 1720 10 0 536 +571 0 422 -13 821 851 10 698 0 +572 297 131 -35 0 1788 10 646 0 +573 71 12 2 297 327 10 0 604 +574 44 440 -23 0 1635 10 769 0 +575 447 184 -23 0 1708 10 676 0 +576 341 59 -36 790 820 10 889 0 +577 132 32 18 784 814 10 0 472 +578 411 396 23 0 1698 10 0 146 +579 450 416 25 0 1656 10 0 929 +580 323 34 13 0 1687 0 0 1011 +581 244 368 25 414 444 10 0 856 +582 90 477 -9 277 307 10 308 0 +583 34 169 -24 484 514 10 58 0 +584 351 128 -28 0 1757 10 351 0 +585 71 282 -17 0 1734 10 350 0 +586 157 269 -8 1576 1606 10 726 0 +587 392 1 11 605 635 10 0 660 +588 39 153 26 798 828 0 0 1022 +589 306 229 -14 1320 1350 10 960 0 +590 415 253 21 367 397 10 0 54 +591 92 76 4 1139 1169 10 0 617 +592 437 98 -16 1114 1144 10 232 0 +593 12 367 27 0 1650 10 0 717 +594 448 414 23 0 1658 10 0 949 +595 128 113 -29 363 393 10 636 0 +596 43 360 -28 0 1681 10 430 0 +597 102 422 23 226 256 10 0 349 +598 480 131 5 688 718 10 0 562 +599 210 81 -5 0 1742 10 447 0 +600 432 2 20 0 1608 10 0 892 +601 396 83 -24 1586 1616 10 661 0 +602 489 159 29 0 1660 10 0 648 +603 56 75 -24 0 1654 10 155 0 +604 66 31 -2 0 1629 10 573 0 +605 460 117 14 520 550 10 0 561 +606 175 239 23 75 105 10 0 122 +607 217 333 -10 0 1826 10 630 0 +608 62 375 16 349 379 10 0 390 +609 82 183 -7 1102 1132 10 386 0 +610 248 214 19 0 1879 10 0 247 +611 385 239 21 786 816 10 0 712 +612 371 315 -34 0 1778 10 656 0 +613 333 163 32 0 1795 10 0 105 +614 100 66 15 0 1678 10 0 813 +615 311 422 -35 0 1733 10 631 0 +616 153 235 10 98 128 10 0 231 +617 168 109 -4 0 1752 10 591 0 +618 284 319 17 0 1839 10 0 127 +619 195 464 20 0 1695 10 0 97 +620 382 9 30 0 1641 10 0 221 +621 325 210 -15 0 1830 10 21 0 +622 366 334 5 410 440 10 0 128 +623 200 78 -13 0 1736 10 643 0 +624 351 5 12 496 526 10 0 230 +625 197 202 -28 1204 1234 10 703 0 +626 270 337 20 0 1826 10 0 389 +627 125 65 -26 788 818 10 740 0 +628 120 17 -12 279 309 10 388 0 +629 84 255 -10 0 1749 10 934 0 +630 222 331 10 540 570 10 0 607 +631 332 459 35 369 399 10 0 615 +632 226 175 23 1694 1724 0 0 1009 +633 404 140 -31 1259 1289 10 56 0 +634 223 178 -33 1136 1166 10 185 0 +635 330 308 24 1170 1200 10 0 65 +636 140 108 29 0 1736 10 0 595 +637 34 239 -19 0 1699 10 341 0 +638 94 192 -11 1080 1110 10 179 0 +639 458 213 -21 1128 1158 10 887 0 +640 13 314 14 0 1670 10 0 145 +641 202 391 -12 0 1767 10 150 0 +642 339 41 6 456 486 10 0 689 +643 224 56 13 1186 1216 10 0 623 +644 345 431 12 345 375 10 0 78 +645 292 104 26 304 334 10 0 785 +646 318 99 35 1213 1243 10 0 572 +647 46 248 9 814 844 10 0 959 +648 482 184 -29 0 1674 10 602 0 +649 411 379 25 0 1709 10 0 523 +650 293 174 31 87 117 0 0 1023 +651 169 305 21 162 192 10 0 373 +652 394 47 5 313 343 10 0 653 +653 323 29 -5 1137 1167 10 652 0 +654 65 343 38 207 237 0 0 1021 +655 158 179 37 0 1799 10 0 449 +656 299 353 34 0 1801 10 0 612 +657 9 233 31 0 1674 10 0 707 +658 330 138 18 0 1778 10 0 87 +659 48 412 -11 1032 1062 10 121 0 +660 385 17 -11 809 839 10 587 0 +661 382 110 24 0 1723 10 0 601 +662 336 493 -21 0 1658 10 907 0 +663 181 441 25 542 572 10 0 484 +664 162 301 -12 1613 1643 10 205 0 +665 1 101 8 1257 1287 10 0 940 +666 80 117 -22 824 854 10 515 0 +667 210 219 7 50 80 10 0 313 +668 404 59 13 913 943 10 0 793 +669 288 439 -7 0 1723 10 440 0 +670 149 458 13 0 1684 10 0 80 +671 257 391 -23 1633 1663 10 569 0 +672 405 349 15 522 552 0 0 1028 +673 191 215 17 68 98 10 0 254 +674 231 29 14 1226 1256 10 0 226 +675 253 50 27 226 256 0 0 1039 +676 441 177 23 1001 1031 10 0 575 +677 5 445 -15 0 1602 10 961 0 +678 463 253 -13 0 1702 10 872 0 +679 435 180 37 225 255 10 0 868 +680 198 85 28 263 293 10 0 33 +681 59 388 -23 663 693 10 166 0 +682 373 418 -34 1259 1289 10 174 0 +683 142 80 12 0 1714 10 0 443 +684 441 7 20 392 422 10 0 154 +685 33 268 18 696 726 10 0 331 +686 355 174 33 0 1786 10 0 891 +687 228 260 12 1606 1636 10 0 866 +688 114 460 14 0 1665 10 0 324 +689 337 41 -6 1002 1032 10 642 0 +690 154 374 -12 0 1759 10 549 0 +691 235 13 -14 359 389 10 273 0 +692 303 78 12 179 209 10 0 864 +693 103 464 22 0 1656 0 0 1027 +694 325 311 22 0 1819 10 0 899 +695 306 235 25 57 87 0 0 1024 +696 382 360 26 178 208 10 0 831 +697 235 288 18 0 1875 10 0 909 +698 0 356 13 0 1644 10 0 571 +699 178 135 21 0 1780 10 0 400 +700 226 423 15 197 227 10 0 413 +701 15 11 -15 952 982 10 316 0 +702 144 35 -3 239 269 10 240 0 +703 176 199 28 0 1826 10 0 625 +704 247 306 -8 0 1859 10 239 0 +705 396 417 13 0 1694 10 0 511 +706 289 220 -35 0 1866 10 787 0 +707 23 235 -31 1023 1053 10 657 0 +708 137 377 23 169 199 10 0 453 +709 400 71 17 0 1682 10 0 187 +710 261 359 -26 0 1806 10 875 0 +711 438 127 -32 941 971 10 953 0 +712 318 280 -21 0 1841 10 611 0 +713 333 293 -22 617 647 10 540 0 +714 436 295 11 0 1724 10 0 555 +715 62 94 16 0 1671 10 0 855 +716 495 355 -16 1243 1273 10 910 0 +717 13 394 -27 373 403 10 593 0 +718 172 292 -22 0 1827 10 489 0 +719 14 232 -4 0 1679 10 765 0 +720 437 90 -36 0 1669 10 115 0 +721 214 274 -26 0 1872 10 213 0 +722 420 383 27 0 1700 10 0 828 +723 120 261 -5 793 823 10 563 0 +724 179 75 13 740 770 10 0 415 +725 484 224 7 300 330 10 0 397 +726 214 245 8 36 66 10 0 586 +727 395 474 26 387 417 10 0 760 +728 368 311 14 0 1783 10 0 407 +729 199 203 20 1457 1487 10 0 796 +730 485 428 22 1490 1520 10 0 557 +731 86 199 -21 0 1744 10 95 0 +732 447 272 12 384 414 10 0 109 +733 40 304 -23 1145 1175 10 755 0 +734 475 267 7 780 810 10 0 250 +735 482 141 14 1011 1041 10 0 538 +736 489 274 -3 534 564 10 301 0 +737 26 342 12 321 351 10 0 264 +738 139 438 -45 0 1697 10 439 0 +739 12 358 -21 1224 1254 10 45 0 +740 125 61 26 0 1689 10 0 627 +741 360 284 -24 0 1800 10 967 0 +742 29 358 -11 611 641 10 452 0 +743 285 247 -21 0 1880 10 487 0 +744 248 386 22 0 1779 10 0 466 +745 415 207 18 900 930 10 0 782 +746 130 247 17 0 1795 10 0 804 +747 172 66 -22 1303 1333 10 798 0 +748 92 259 -18 399 429 10 140 0 +749 379 486 22 672 702 10 0 280 +750 452 484 -20 0 1606 10 342 0 +751 268 288 26 0 1873 10 0 328 +752 349 43 26 229 259 10 0 434 +753 225 269 -21 0 1884 10 775 0 +754 50 383 20 260 290 0 0 1015 +755 110 251 23 498 528 10 0 733 +756 461 182 -16 0 1694 10 357 0 +757 255 487 -17 0 1678 10 897 0 +758 133 202 33 461 491 10 0 985 +759 34 329 -12 1043 1073 10 915 0 +760 368 452 -26 670 700 10 727 0 +761 242 106 -18 1268 1298 10 842 0 +762 171 303 -8 0 1820 10 411 0 +763 329 456 19 0 1695 10 0 237 +764 490 286 -12 0 1673 10 939 0 +765 61 214 4 0 1723 10 0 719 +766 365 74 24 0 1705 10 0 464 +767 321 149 18 0 1792 10 0 921 +768 84 453 19 0 1653 10 0 468 +769 26 442 23 0 1620 10 0 574 +770 180 283 23 744 774 10 0 117 +771 394 322 -33 1025 1055 10 355 0 +772 348 348 -11 935 965 10 44 0 +773 309 161 23 0 1809 10 0 114 +774 385 58 24 0 1681 10 0 546 +775 228 287 21 43 73 10 0 753 +776 312 453 -25 550 580 10 161 0 +777 35 344 21 863 893 10 0 404 +778 393 98 -30 0 1707 10 508 0 +779 208 488 22 0 1674 10 0 567 +780 235 33 -30 1337 1367 10 295 0 +781 140 137 32 570 600 0 0 1019 +782 405 187 -18 1251 1281 10 745 0 +783 330 371 -10 0 1770 10 276 0 +784 265 0 -1 0 1665 10 847 0 +785 295 89 -26 742 772 10 645 0 +786 3 23 -32 0 1580 10 534 0 +787 363 225 35 856 886 10 0 706 +788 148 208 22 0 1805 10 0 51 +789 466 362 15 0 1672 10 0 906 +790 267 290 15 0 1872 10 0 374 +791 98 2 14 0 1625 10 0 895 +792 131 246 17 832 862 10 0 820 +793 418 75 -13 0 1673 10 668 0 +794 366 260 -18 1520 1550 10 911 0 +795 138 28 -18 1097 1127 10 483 0 +796 209 212 -20 0 1860 10 729 0 +797 443 167 17 543 573 10 0 288 +798 156 65 22 1037 1067 10 0 747 +799 279 355 9 166 196 10 0 306 +800 206 172 -19 788 818 10 144 0 +801 32 94 -31 930 960 10 979 0 +802 301 239 31 52 82 10 0 559 +803 471 368 19 0 1665 10 0 874 +804 133 273 -17 0 1796 10 746 0 +805 253 74 20 0 1739 0 0 1041 +806 470 405 -23 0 1646 10 180 0 +807 77 172 23 0 1726 10 0 242 +808 77 465 -3 275 305 10 282 0 +809 466 96 22 1383 1413 0 0 1010 +810 402 277 5 0 1761 0 0 1045 +811 267 374 23 601 631 0 0 1026 +812 450 194 -31 625 655 10 209 0 +813 89 65 -15 0 1670 10 614 0 +814 429 389 18 424 454 10 0 142 +815 202 28 -15 0 1688 10 309 0 +816 46 389 -7 0 1669 10 977 0 +817 246 407 12 0 1758 10 0 11 +818 452 110 -40 0 1670 10 558 0 +819 213 185 21 74 104 10 0 330 +820 134 276 -17 0 1797 10 792 0 +821 262 97 17 947 977 10 0 917 +822 469 489 -27 555 585 10 233 0 +823 364 71 -15 0 1703 10 344 0 +824 68 240 11 794 824 10 0 259 +825 494 468 31 352 382 10 0 216 +826 439 222 -24 0 1724 10 119 0 +827 386 225 13 919 949 0 0 1033 +828 434 359 -27 1392 1422 10 722 0 +829 103 177 28 626 656 10 0 290 +830 89 322 -26 1021 1051 10 858 0 +831 307 249 -26 1377 1407 10 696 0 +832 30 155 -22 0 1676 10 896 0 +833 401 314 -27 976 1006 10 133 0 +834 217 357 23 1420 1450 10 0 501 +835 373 421 21 237 267 10 0 334 +836 5 281 16 1372 1402 0 0 1018 +837 173 474 -13 0 1679 10 992 0 +838 36 301 21 219 249 10 0 964 +839 429 169 8 0 1719 10 0 8 +840 195 450 -22 0 1708 10 238 0 +841 95 382 -19 0 1712 10 73 0 +842 225 121 18 0 1784 10 0 761 +843 10 407 36 434 464 10 0 32 +844 221 269 14 0 1881 10 0 478 +845 264 180 -32 1681 1711 10 173 0 +846 168 59 6 0 1708 10 0 398 +847 281 96 1 0 1758 10 0 784 +848 387 349 9 0 1746 10 0 287 +849 398 329 -15 0 1748 10 419 0 +850 239 486 3 0 1679 10 0 192 +851 237 420 -24 0 1745 10 35 0 +852 346 354 -8 0 1774 10 19 0 +853 172 314 -19 545 575 10 918 0 +854 233 230 20 26 56 10 0 927 +855 79 80 -16 1382 1412 10 715 0 +856 243 402 -25 0 1763 10 581 0 +857 117 110 -14 0 1722 10 107 0 +858 66 314 26 194 224 10 0 830 +859 58 391 -22 0 1677 10 423 0 +860 142 360 -23 1532 1562 10 476 0 +861 492 326 19 1204 1234 10 0 215 +862 381 328 -15 0 1763 10 475 0 +863 62 236 -5 0 1727 10 902 0 +864 344 70 -12 0 1712 10 692 0 +865 151 81 28 1558 1588 10 0 948 +866 240 240 -12 1700 1730 10 687 0 +867 46 163 -11 0 1694 10 157 0 +868 455 168 -37 867 897 10 679 0 +869 428 202 -29 904 934 10 67 0 +870 432 199 -25 0 1726 10 988 0 +871 391 112 -10 1000 1030 10 494 0 +872 451 305 13 208 238 10 0 678 +873 214 311 14 70 100 10 0 57 +874 465 367 -19 0 1671 10 803 0 +875 164 473 26 296 326 10 0 710 +876 364 173 30 180 210 10 0 406 +877 274 261 -7 1707 1737 10 943 0 +878 133 455 -25 808 838 10 50 0 +879 351 481 10 322 352 10 0 913 +880 115 395 11 815 845 0 0 1043 +881 297 304 -15 0 1844 10 40 0 +882 7 194 -28 0 1666 10 416 0 +883 409 255 -19 0 1756 10 89 0 +884 87 213 18 0 1748 0 0 1029 +885 60 246 25 0 1725 10 0 426 +886 3 471 -31 0 1584 10 566 0 +887 418 251 21 0 1747 10 0 639 +888 153 362 -18 0 1767 10 171 0 +889 323 77 36 0 1728 10 0 576 +890 143 158 12 0 1774 10 0 963 +891 351 148 -33 461 491 10 686 0 +892 426 38 -20 609 639 10 600 0 +893 226 316 21 70 100 10 0 99 +894 347 192 -12 1488 1518 10 935 0 +895 102 6 -14 1458 1488 10 791 0 +896 41 120 22 696 726 10 0 832 +897 247 443 17 330 360 10 0 757 +898 218 271 16 0 1877 0 0 1025 +899 376 385 -22 184 214 10 694 0 +900 241 402 -15 0 1763 10 474 0 +901 213 399 18 234 264 10 0 353 +902 32 191 5 586 616 10 0 863 +903 441 374 10 227 257 10 0 420 +904 376 113 8 0 1729 10 0 193 +905 215 434 -15 0 1728 10 183 0 +906 499 316 -15 0 1658 10 789 0 +907 318 497 21 0 1659 10 0 662 +908 256 441 34 0 1724 10 0 548 +909 174 397 -18 1245 1275 10 697 0 +910 468 360 16 0 1671 10 0 716 +911 287 256 18 37 67 10 0 794 +912 448 397 33 866 896 10 0 996 +913 352 487 -10 902 932 10 879 0 +914 253 118 -23 0 1783 10 260 0 +915 159 299 12 0 1812 10 0 759 +916 351 233 21 0 1813 10 0 463 +917 268 113 -17 0 1777 10 821 0 +918 164 332 19 0 1797 10 0 853 +919 88 484 5 0 1631 10 0 211 +920 360 488 -3 0 1653 10 457 0 +921 343 166 -18 876 906 10 767 0 +922 497 266 -20 748 778 10 269 0 +923 138 406 8 1216 1246 10 0 206 +924 420 224 10 0 1744 10 0 255 +925 231 410 14 0 1754 10 0 412 +926 199 438 -23 0 1721 10 470 0 +927 219 215 -20 0 1869 10 854 0 +928 365 274 14 117 147 10 0 4 +929 481 454 -25 0 1607 10 579 0 +930 187 61 -12 545 575 10 513 0 +931 372 97 -17 214 244 10 153 0 +932 187 263 35 64 94 10 0 160 +933 371 427 23 0 1701 0 0 1038 +934 74 215 10 229 259 10 0 629 +935 375 145 12 929 959 10 0 894 +936 365 28 -19 268 298 10 91 0 +937 118 314 26 338 368 10 0 199 +938 60 29 -28 1363 1393 10 31 0 +939 478 300 12 0 1682 10 0 764 +940 33 152 -8 0 1677 10 665 0 +941 347 184 15 1079 1109 10 0 320 +942 94 40 -35 1068 1098 10 488 0 +943 290 328 7 144 174 10 0 877 +944 96 346 -13 0 1734 10 551 0 +945 97 288 22 0 1758 10 0 84 +946 176 470 -25 547 577 10 333 0 +947 206 97 -27 0 1756 10 519 0 +948 210 133 -28 0 1792 10 865 0 +949 489 457 -23 0 1599 10 594 0 +950 418 399 20 438 468 10 0 421 +951 392 491 10 0 1636 10 0 437 +952 437 19 15 1014 1044 10 0 311 +953 495 83 32 0 1619 10 0 711 +954 468 352 -13 0 1675 10 152 0 +955 390 120 24 0 1724 10 0 984 +956 80 357 -4 0 1715 10 982 0 +957 394 310 10 0 1759 0 0 1032 +958 61 441 -46 544 574 10 496 0 +959 52 303 -9 0 1711 10 647 0 +960 391 202 14 0 1767 10 0 589 +961 36 451 15 0 1622 10 0 677 +962 276 84 20 0 1747 10 0 482 +963 130 140 -12 194 224 10 890 0 +964 16 287 -21 0 1679 10 838 0 +965 292 136 28 0 1794 10 0 61 +966 53 204 -10 0 1713 10 69 0 +967 359 287 24 0 1800 10 0 741 +968 309 29 11 1294 1324 10 0 332 +969 473 491 -15 0 1587 10 531 0 +970 273 255 -15 0 1892 10 218 0 +971 263 153 12 0 1818 10 0 277 +972 328 458 -36 768 798 10 164 0 +973 401 164 -27 0 1742 10 454 0 +974 480 119 -17 0 1651 10 268 0 +975 488 96 -26 0 1632 10 326 0 +976 149 98 -14 0 1733 10 441 0 +977 49 437 7 427 457 10 0 816 +978 440 77 14 0 1659 10 0 241 +979 43 135 31 236 266 10 0 801 +980 188 151 -32 1297 1327 10 120 0 +981 175 422 -15 1446 1476 10 395 0 +982 48 437 4 804 834 10 0 956 +983 334 403 -17 0 1741 10 526 0 +984 372 115 -24 0 1734 10 955 0 +985 111 192 -33 1199 1229 10 758 0 +986 357 290 24 114 144 10 0 93 +987 331 134 11 0 1774 10 0 477 +988 495 199 25 337 367 10 0 870 +989 441 60 21 1459 1489 0 0 1001 +990 51 89 19 1208 1238 10 0 111 +991 452 206 31 492 522 10 0 506 +992 195 386 13 146 176 10 0 837 +993 172 24 -26 1452 1482 10 162 0 +994 408 318 -36 0 1743 10 74 0 +995 410 399 25 234 264 10 0 228 +996 413 345 -33 1218 1248 10 912 0 +997 215 129 -14 0 1790 10 68 0 +998 380 350 15 866 896 10 0 565 +999 19 38 -12 0 1602 10 27 0 +1000 166 247 -8 0 1831 10 315 0 +1001 441 60 -21 1459 1489 10 989 0 +1002 186 135 -24 0 1784 10 189 0 +1003 87 3 -13 0 1620 10 385 0 +1004 374 260 -27 0 1791 10 319 0 +1005 69 414 -6 1263 1293 10 481 0 +1006 174 376 -8 0 1768 10 408 0 +1007 30 97 -23 1210 1240 10 529 0 +1008 161 276 -8 133 163 10 148 0 +1009 226 175 -23 1694 1724 10 632 0 +1010 466 96 -22 1383 1413 10 809 0 +1011 323 34 -13 0 1687 10 580 0 +1012 492 188 -33 0 1666 10 100 0 +1013 92 18 -8 0 1635 10 200 0 +1014 148 462 -10 727 757 10 178 0 +1015 50 383 -20 260 290 10 754 0 +1016 251 238 -27 0 1903 10 110 0 +1017 449 190 -2 1140 1170 10 560 0 +1018 5 281 -16 1372 1402 10 836 0 +1019 140 137 -32 570 600 10 781 0 +1020 384 149 -18 0 1748 10 163 0 +1021 65 343 -38 207 237 10 654 0 +1022 39 153 -26 798 828 10 588 0 +1023 293 174 -31 87 117 10 650 0 +1024 306 235 -25 57 87 10 695 0 +1025 218 271 -16 0 1877 10 898 0 +1026 267 374 -23 601 631 10 811 0 +1027 103 464 -22 0 1656 10 693 0 +1028 405 349 -15 522 552 10 672 0 +1029 87 213 -18 0 1748 10 884 0 +1030 144 220 -35 0 1805 10 377 0 +1031 380 194 -3 0 1774 10 497 0 +1032 394 310 -10 0 1759 10 957 0 +1033 386 225 -13 919 949 10 827 0 +1034 173 65 -12 448 478 10 403 0 +1035 158 24 -18 0 1671 10 507 0 +1036 262 369 -15 0 1796 10 96 0 +1037 325 56 -13 796 826 10 542 0 +1038 371 427 -23 0 1701 10 933 0 +1039 253 50 -27 226 256 10 675 0 +1040 345 146 -27 0 1775 10 112 0 +1041 253 74 -20 0 1739 10 805 0 +1042 159 226 -16 94 124 10 394 0 +1043 115 395 -11 815 845 10 880 0 +1044 161 275 -21 0 1823 10 547 0 +1045 402 277 -5 0 1761 10 810 0 +1046 350 199 -21 0 1803 10 108 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1108.txt b/jsprit-instances/instances/lilim/1000/LR1108.txt new file mode 100644 index 00000000..63ecf58d --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1108.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 -3 0 1686 10 240 0 +2 67 190 -3 0 1723 10 393 0 +3 80 400 10 0 1689 10 0 841 +4 439 237 11 939 969 10 0 530 +5 377 385 6 0 1730 10 0 828 +6 449 428 25 1247 1277 10 0 996 +7 342 481 18 0 1667 10 0 11 +8 466 149 16 1186 1216 0 0 1016 +9 83 290 -26 0 1744 10 363 0 +10 251 63 -19 987 1017 10 256 0 +11 328 491 -18 0 1662 10 7 0 +12 260 472 33 0 1693 10 0 466 +13 290 145 5 0 1803 0 0 1025 +14 266 221 -28 0 1882 10 278 0 +15 164 320 12 0 1805 10 0 853 +16 52 412 22 0 1660 0 0 1039 +17 485 104 21 794 824 10 0 735 +18 144 331 -29 0 1782 10 518 0 +19 387 394 8 0 1717 10 0 903 +20 472 57 -7 0 1621 10 314 0 +21 343 276 -14 0 1819 10 127 0 +22 104 349 20 0 1739 10 0 543 +23 28 467 -21 1343 1373 10 285 0 +24 91 427 -12 883 913 10 737 0 +25 429 476 23 0 1627 10 0 196 +26 210 276 -35 0 1868 10 932 0 +27 58 39 -26 0 1630 10 588 0 +28 273 300 30 0 1860 10 0 527 +29 41 232 -18 0 1706 10 719 0 +30 25 53 23 0 1616 10 0 31 +31 52 18 -23 0 1610 10 30 0 +32 27 444 22 0 1620 0 0 1012 +33 178 72 -18 0 1723 10 473 0 +34 406 460 -7 0 1654 10 943 0 +35 250 328 24 0 1837 10 0 384 +36 492 34 5 0 1591 10 0 154 +37 412 100 1 0 1695 10 0 467 +38 233 87 18 0 1752 10 0 623 +39 60 5 18 1044 1074 10 0 354 +40 406 408 15 0 1693 10 0 998 +41 245 42 24 0 1707 10 0 226 +42 166 345 14 0 1789 10 0 206 +43 440 294 -9 0 1720 10 848 0 +44 370 382 -18 884 914 10 814 0 +45 32 319 -8 0 1687 10 148 0 +46 480 136 -40 0 1659 10 558 0 +47 371 163 -33 828 858 10 686 0 +48 0 188 26 0 1658 10 0 882 +49 438 5 18 0 1607 0 0 1015 +50 132 477 25 327 357 10 0 208 +51 203 211 20 0 1854 10 0 729 +52 2 264 -8 0 1667 10 315 0 +53 231 167 -19 0 1830 10 914 0 +54 423 221 9 0 1740 10 0 991 +55 459 53 -21 0 1628 10 989 0 +56 386 154 31 0 1749 10 0 505 +57 130 494 6 0 1644 10 0 375 +58 31 175 24 0 1684 0 0 1041 +59 69 423 32 0 1665 0 0 1018 +60 352 241 5 792 822 10 0 414 +61 261 201 -26 1514 1544 10 541 0 +62 59 276 11 892 922 10 0 525 +63 146 188 -13 1235 1265 10 290 0 +64 451 62 -6 0 1640 10 291 0 +65 299 285 -27 1254 1284 10 133 0 +66 142 372 -18 0 1753 10 762 0 +67 440 201 29 893 923 0 0 1020 +68 219 210 14 50 80 10 0 400 +69 64 198 10 0 1722 10 0 583 +70 390 249 21 582 612 10 0 787 +71 9 101 -11 666 696 10 402 0 +72 424 288 13 0 1737 10 0 116 +73 77 372 -16 0 1704 10 608 0 +74 298 264 36 50 80 10 0 297 +75 405 454 11 0 1659 10 0 174 +76 407 35 11 0 1649 10 0 434 +77 225 369 -24 0 1794 10 981 0 +78 347 459 -6 0 1685 10 776 0 +79 117 178 -32 0 1764 10 781 0 +80 132 479 -25 257 287 10 333 0 +81 201 66 -27 0 1725 10 691 0 +82 245 176 20 0 1841 10 0 106 +83 470 138 -2 0 1669 10 560 0 +84 115 296 -15 0 1773 10 820 0 +85 348 476 19 0 1669 10 0 175 +86 43 210 -8 210 240 10 966 0 +87 327 139 -18 0 1780 10 658 0 +88 49 353 15 0 1690 10 0 551 +89 356 256 -7 0 1809 10 725 0 +90 335 99 25 0 1742 10 0 348 +91 363 34 19 272 302 10 0 524 +92 33 278 18 0 1697 10 0 452 +93 366 288 -23 0 1793 10 142 0 +94 452 172 9 0 1699 10 0 406 +95 86 189 -17 0 1741 10 673 0 +96 262 369 15 0 1796 10 0 851 +97 218 403 15 0 1759 10 0 925 +98 218 12 3 0 1675 10 0 429 +99 228 399 14 0 1765 0 0 1027 +100 492 188 -25 0 1666 10 988 0 +101 267 174 -28 1618 1648 10 921 0 +102 274 441 12 0 1723 10 0 374 +103 210 113 28 0 1773 10 0 948 +104 370 262 -23 0 1795 10 794 0 +105 303 186 -21 1354 1384 10 712 0 +106 241 180 -20 1695 1725 10 82 0 +107 100 85 14 0 1693 10 0 614 +108 350 199 21 0 1803 10 0 172 +109 500 228 -16 0 1665 10 506 0 +110 251 238 -12 0 1903 10 257 0 +111 114 102 -15 0 1715 10 246 0 +112 345 146 -18 0 1775 10 970 0 +113 21 146 -31 487 517 10 979 0 +114 330 147 -14 848 878 10 129 0 +115 476 61 36 0 1621 10 0 378 +116 386 245 -13 0 1779 10 72 0 +117 201 278 -36 0 1859 10 532 0 +118 421 499 23 0 1613 10 0 490 +119 426 231 -22 1028 1058 10 826 0 +120 105 137 32 0 1732 10 0 298 +121 64 437 -2 0 1652 10 324 0 +122 181 260 -18 0 1846 10 140 0 +123 413 391 -10 0 1700 10 276 0 +124 370 493 22 0 1644 0 0 1021 +125 447 267 -12 980 1010 10 732 0 +126 232 101 24 0 1765 10 0 680 +127 371 332 14 530 560 10 0 21 +128 447 383 -4 0 1678 10 881 0 +129 325 147 14 0 1788 10 0 114 +130 489 437 29 707 737 10 0 730 +131 415 95 -13 0 1689 10 931 0 +132 331 356 -8 0 1782 10 852 0 +133 374 346 27 0 1759 10 0 65 +134 108 37 -13 0 1660 10 857 0 +135 5 224 -20 0 1669 10 382 0 +136 93 413 17 226 256 10 0 224 +137 210 29 -17 0 1691 10 821 0 +138 136 265 12 0 1801 10 0 804 +139 409 155 -18 0 1730 10 767 0 +140 111 178 18 0 1759 10 0 122 +141 291 251 20 41 71 10 0 471 +142 322 290 23 0 1833 10 0 93 +143 57 183 -16 0 1711 10 715 0 +144 181 185 19 0 1821 10 0 800 +145 7 382 -12 0 1639 10 915 0 +146 425 448 9 0 1651 10 0 217 +147 174 41 -17 0 1693 10 993 0 +148 161 276 8 133 163 10 0 45 +149 398 49 21 0 1666 10 0 193 +150 210 379 -12 0 1780 10 549 0 +151 60 231 -10 0 1725 10 616 0 +152 453 360 -14 0 1685 10 874 0 +153 367 97 -14 0 1723 10 464 0 +154 488 3 -5 0 1572 10 36 0 +155 44 115 24 246 276 10 0 990 +156 48 293 -5 0 1709 10 289 0 +157 64 135 11 0 1697 0 0 1008 +158 65 62 15 0 1652 10 0 275 +159 404 207 -33 0 1756 10 463 0 +160 68 303 22 0 1726 10 0 367 +161 263 418 25 278 308 10 0 413 +162 147 30 -10 0 1673 10 617 0 +163 384 149 -30 0 1748 10 876 0 +164 340 416 36 0 1727 10 0 280 +165 271 128 12 0 1792 10 0 889 +166 89 358 -16 0 1722 10 859 0 +167 20 480 -46 0 1590 10 496 0 +168 488 173 25 0 1665 10 0 195 +169 439 156 -26 0 1704 10 562 0 +170 389 156 27 716 746 0 0 1011 +171 111 392 -20 0 1717 10 754 0 +172 267 162 -21 0 1826 10 108 0 +173 248 176 -33 0 1841 10 845 0 +174 413 476 -11 0 1637 10 75 0 +175 352 481 -19 0 1663 10 85 0 +176 264 135 -8 0 1800 10 184 0 +177 29 462 17 1310 1340 10 0 371 +178 148 462 10 727 757 10 0 840 +179 44 140 -7 0 1682 10 386 0 +180 414 378 -25 495 525 10 649 0 +181 392 95 16 0 1705 10 0 592 +182 216 341 -23 0 1818 10 569 0 +183 211 411 -30 0 1750 10 641 0 +184 317 45 8 0 1700 10 0 176 +185 178 150 -30 0 1792 10 330 0 +186 428 302 27 1016 1046 0 0 1002 +187 450 45 -25 0 1629 10 572 0 +188 453 318 30 0 1701 10 0 714 +189 186 135 24 0 1784 10 0 435 +190 11 403 18 343 373 10 0 769 +191 433 447 20 794 824 10 0 912 +192 272 420 -8 1386 1416 10 425 0 +193 429 59 -21 0 1654 10 149 0 +194 200 27 22 0 1687 10 0 865 +195 498 171 -25 0 1655 10 168 0 +196 487 320 -23 858 888 10 25 0 +197 45 166 22 1013 1043 10 0 337 +198 490 276 33 0 1674 10 0 301 +199 126 391 -7 0 1728 10 888 0 +200 92 18 -27 0 1635 10 448 0 +201 293 228 -31 0 1867 10 559 0 +202 343 205 -10 0 1812 10 589 0 +203 182 480 -7 0 1676 10 539 0 +204 385 285 13 0 1776 10 0 887 +205 44 344 -2 0 1689 10 759 0 +206 170 347 -14 0 1790 10 42 0 +207 457 492 -10 0 1597 10 951 0 +208 124 448 -25 0 1681 10 50 0 +209 398 210 31 0 1762 10 0 397 +210 75 118 -14 409 439 10 521 0 +211 105 474 27 0 1649 10 0 379 +212 134 211 35 122 152 10 0 625 +213 211 248 26 39 69 10 0 640 +214 212 186 11 0 1841 10 0 573 +215 492 335 10 0 1659 10 0 906 +216 497 483 -14 353 383 10 929 0 +217 440 436 -9 0 1650 10 146 0 +218 311 203 15 0 1838 10 0 935 +219 491 369 -12 0 1647 10 228 0 +220 67 378 -25 0 1692 10 878 0 +221 383 17 15 0 1647 10 0 624 +222 7 82 25 412 442 10 0 665 +223 342 319 36 0 1800 10 0 862 +224 78 406 -17 960 990 10 136 0 +225 103 123 -16 0 1721 10 361 0 +226 241 38 -24 0 1703 10 41 0 +227 224 3 -30 690 720 10 295 0 +228 436 467 12 0 1630 10 0 219 +229 438 488 18 0 1612 10 0 861 +230 351 60 15 0 1700 10 0 652 +231 13 214 -5 1354 1384 10 902 0 +232 429 67 -13 732 762 10 984 0 +233 498 456 27 0 1593 10 0 722 +234 135 400 -8 0 1726 10 365 0 +235 215 293 13 0 1860 10 0 336 +236 354 416 -19 0 1720 10 920 0 +237 294 421 -24 1575 1605 10 548 0 +238 208 445 -14 0 1716 10 251 0 +239 230 320 8 1192 1222 10 0 630 +240 157 38 3 0 1684 10 0 1 +241 441 100 31 0 1673 10 0 809 +242 61 170 -13 0 1710 10 307 0 +243 79 467 -23 351 381 10 708 0 +244 365 190 -28 1477 1507 10 351 0 +245 282 1 -11 0 1664 10 968 0 +246 124 111 15 0 1728 10 0 111 +247 247 219 -13 0 1884 10 743 0 +248 28 180 34 0 1683 10 0 258 +249 167 488 17 252 282 10 0 439 +250 442 289 25 0 1720 10 0 343 +251 136 430 14 0 1702 10 0 238 +252 38 15 3 0 1599 10 0 999 +253 246 314 -15 1445 1475 10 790 0 +254 176 200 -35 568 598 10 377 0 +255 337 232 -31 0 1827 10 802 0 +256 257 133 19 0 1798 10 0 10 +257 295 247 12 1303 1333 10 0 110 +258 39 162 -34 565 595 10 248 0 +259 79 257 -12 0 1744 10 426 0 +260 236 126 -24 0 1791 10 499 0 +261 259 498 -14 1075 1105 10 946 0 +262 180 162 -22 0 1803 10 815 0 +263 53 466 -11 0 1623 10 808 0 +264 167 291 27 0 1823 10 0 770 +265 89 185 16 600 630 10 0 895 +266 487 446 -31 0 1608 10 825 0 +267 308 199 -18 0 1838 10 911 0 +268 481 84 -22 0 1631 10 975 0 +269 495 227 -26 0 1669 10 422 0 +270 397 57 17 0 1673 10 0 668 +271 372 39 10 0 1672 0 0 1033 +272 278 450 29 0 1714 10 0 760 +273 292 32 14 229 259 10 0 427 +274 90 496 -31 0 1622 10 520 0 +275 68 53 -15 739 769 10 158 0 +276 371 423 10 0 1704 10 0 123 +277 273 149 -5 0 1812 10 286 0 +278 297 283 28 0 1858 10 0 14 +279 120 37 28 0 1666 10 0 388 +280 371 488 -36 0 1649 10 164 0 +281 206 174 14 0 1828 0 0 1038 +282 174 347 3 0 1792 10 0 474 +283 330 281 -30 1330 1360 10 306 0 +284 67 451 -31 0 1644 10 566 0 +285 27 464 21 0 1606 10 0 23 +286 361 178 5 0 1783 10 0 277 +287 463 406 23 857 887 10 0 806 +288 456 157 -19 0 1689 10 477 0 +289 153 244 5 0 1818 10 0 156 +290 153 192 13 0 1802 10 0 63 +291 352 63 6 0 1702 10 0 64 +292 371 71 21 0 1699 10 0 778 +293 163 472 -8 0 1677 10 923 0 +294 448 495 40 0 1600 10 0 511 +295 282 10 30 0 1673 10 0 227 +296 66 163 -23 0 1712 10 606 0 +297 314 205 -36 0 1837 10 74 0 +298 83 169 -32 0 1730 10 120 0 +299 221 291 -21 0 1865 10 461 0 +300 374 116 9 587 617 10 0 793 +301 418 269 -33 0 1746 10 198 0 +302 178 302 19 0 1827 10 0 373 +303 250 57 26 0 1722 10 0 675 +304 475 352 -3 0 1668 10 716 0 +305 1 252 5 0 1666 10 0 964 +306 286 356 30 0 1804 10 0 283 +307 65 82 13 0 1666 10 0 242 +308 154 392 9 0 1744 10 0 875 +309 196 56 -24 0 1714 10 366 0 +310 366 390 -15 0 1734 10 475 0 +311 436 25 -11 1282 1312 10 587 0 +312 67 352 -38 0 1706 10 654 0 +313 173 182 -7 0 1813 10 667 0 +314 390 34 7 1060 1090 10 0 20 +315 18 225 8 0 1682 10 0 52 +316 57 43 15 0 1632 10 0 791 +317 388 44 -9 0 1668 10 360 0 +318 269 112 19 1263 1293 10 0 917 +319 374 260 27 0 1791 10 0 611 +320 291 213 -9 1258 1288 10 486 0 +321 178 420 18 1071 1101 10 0 834 +322 389 255 15 0 1776 0 0 1032 +323 134 194 19 1652 1682 0 0 1013 +324 93 490 2 0 1629 10 0 121 +325 64 294 -28 0 1724 10 430 0 +326 493 111 26 0 1636 0 0 1028 +327 150 484 -21 0 1661 10 893 0 +328 235 316 -25 656 686 10 581 0 +329 239 15 2 0 1680 10 0 842 +330 193 138 30 0 1790 10 0 185 +331 40 278 -25 0 1704 10 498 0 +332 307 52 23 0 1709 10 0 642 +333 161 416 25 0 1727 10 0 80 +334 381 457 28 0 1671 10 0 391 +335 55 318 13 312 342 10 0 858 +336 80 279 -13 0 1743 10 235 0 +337 48 162 -22 0 1695 10 197 0 +338 91 27 -24 1182 1212 10 942 0 +339 288 70 -12 0 1732 10 971 0 +340 177 404 17 0 1745 10 0 408 +341 10 237 -28 0 1675 10 416 0 +342 493 493 -5 856 886 10 358 0 +343 440 292 -25 940 970 10 250 0 +344 349 76 -11 1031 1061 10 368 0 +345 47 208 30 0 1708 10 0 401 +346 283 454 14 0 1709 10 0 983 +347 486 324 -12 0 1668 10 771 0 +348 392 87 -25 0 1699 10 90 0 +349 122 422 -22 0 1701 10 693 0 +350 37 281 17 0 1700 10 0 959 +351 413 127 28 0 1711 10 0 244 +352 222 499 -22 0 1665 10 779 0 +353 211 446 -12 0 1716 10 462 0 +354 30 7 -18 1189 1219 10 39 0 +355 398 341 33 0 1742 10 0 523 +356 26 67 -22 0 1626 10 896 0 +357 461 186 -13 0 1695 10 827 0 +358 313 391 5 0 1761 10 0 342 +359 471 94 30 0 1645 10 0 818 +360 341 72 9 0 1716 10 0 317 +361 130 186 16 136 166 10 0 225 +362 257 57 -25 0 1722 10 396 0 +363 94 344 26 0 1733 10 0 9 +364 6 53 -15 0 1602 10 701 0 +365 146 376 8 234 264 10 0 234 +366 244 13 24 0 1678 10 0 309 +367 29 336 -22 0 1678 10 160 0 +368 306 42 11 0 1700 10 0 344 +369 177 486 20 0 1668 10 0 436 +370 489 338 17 1397 1427 10 0 954 +371 179 318 -17 0 1817 10 177 0 +372 344 203 14 0 1810 10 0 894 +373 149 341 -19 404 434 10 302 0 +374 307 412 -12 0 1744 10 102 0 +375 68 450 -6 0 1645 10 57 0 +376 420 80 24 0 1675 10 0 720 +377 144 220 35 0 1805 10 0 254 +378 497 54 -36 978 1008 10 115 0 +379 80 458 -27 371 401 10 211 0 +380 84 377 -19 0 1706 10 768 0 +381 332 382 2 1010 1040 10 0 407 +382 6 196 20 0 1666 10 0 135 +383 104 28 8 0 1650 10 0 683 +384 224 320 -24 1284 1314 10 35 0 +385 87 3 13 0 1620 10 0 628 +386 149 214 7 0 1808 10 0 179 +387 98 29 -19 0 1647 10 855 0 +388 135 30 -28 0 1667 10 279 0 +389 287 397 -10 564 594 10 710 0 +390 107 374 8 914 944 0 0 1045 +391 355 485 -28 0 1658 10 334 0 +392 51 286 14 1459 1489 10 0 585 +393 49 118 3 0 1675 10 0 2 +394 159 226 16 94 124 10 0 788 +395 185 431 -23 0 1723 10 811 0 +396 262 92 25 0 1757 10 0 362 +397 475 198 -31 0 1685 10 209 0 +398 142 30 32 0 1670 10 0 483 +399 481 207 34 0 1681 10 0 648 +400 174 122 -14 0 1767 10 68 0 +401 35 263 -30 0 1700 10 345 0 +402 24 71 11 346 376 10 0 71 +403 173 65 -13 448 478 10 724 0 +404 91 326 4 0 1739 10 0 553 +405 470 417 11 0 1639 10 0 420 +406 397 153 -9 0 1739 10 94 0 +407 295 283 -2 0 1860 10 381 0 +408 174 376 -17 0 1768 10 340 0 +409 38 190 23 0 1695 10 0 985 +410 16 68 11 0 1619 10 0 556 +411 179 286 -22 0 1836 10 489 0 +412 244 422 -12 0 1743 10 817 0 +413 250 441 -25 0 1724 10 161 0 +414 497 18 -5 0 1577 10 60 0 +415 195 111 -44 998 1028 10 500 0 +416 26 221 28 996 1026 10 0 341 +417 442 5 -32 0 1604 10 953 0 +418 44 496 -5 0 1595 10 919 0 +419 448 404 -23 0 1665 10 772 0 +420 471 427 -11 0 1632 10 405 0 +421 460 424 11 1455 1485 10 0 594 +422 461 195 26 0 1697 10 0 269 +423 146 313 -22 0 1794 10 945 0 +424 19 273 25 0 1683 0 0 1010 +425 245 461 8 649 679 10 0 192 +426 69 266 12 0 1734 10 0 259 +427 191 84 -14 867 897 10 273 0 +428 68 160 21 0 1712 10 0 884 +429 212 47 -3 801 831 10 98 0 +430 80 337 28 0 1725 10 0 325 +431 412 478 -26 0 1636 10 696 0 +432 225 488 -4 0 1676 10 545 0 +433 105 140 -22 0 1733 10 515 0 +434 389 43 -11 0 1666 10 76 0 +435 177 156 -24 0 1796 10 189 0 +436 179 497 -20 0 1658 10 369 0 +437 377 432 -23 831 861 10 933 0 +438 497 296 14 0 1664 10 0 831 +439 152 476 -17 0 1669 10 249 0 +440 277 428 7 490 520 10 0 850 +441 64 5 14 0 1608 0 0 1004 +442 44 311 27 0 1701 10 0 777 +443 165 59 27 0 1706 10 0 930 +444 261 138 1 0 1803 0 0 1023 +445 268 351 7 0 1813 10 0 908 +446 48 150 15 0 1690 10 0 832 +447 215 79 -14 0 1741 10 674 0 +448 109 56 27 0 1676 10 0 200 +449 171 188 30 621 651 10 0 927 +450 284 457 -29 0 1706 10 615 0 +451 274 442 -17 0 1722 10 897 0 +452 33 286 -18 0 1696 10 92 0 +453 112 433 29 0 1686 10 0 481 +454 423 170 -37 0 1725 10 679 0 +455 213 283 14 0 1866 0 0 1036 +456 240 34 28 0 1699 10 0 997 +457 283 438 3 231 261 10 0 972 +458 324 99 -23 0 1747 10 785 0 +459 259 301 25 0 1864 0 0 1034 +460 189 402 10 0 1752 10 0 688 +461 215 282 21 0 1868 10 0 299 +462 166 440 12 0 1708 10 0 353 +463 374 232 33 125 155 10 0 159 +464 339 113 14 0 1752 10 0 153 +465 335 46 18 0 1694 10 0 752 +466 313 493 -33 0 1664 10 12 0 +467 432 66 -1 0 1657 10 37 0 +468 76 462 -14 956 986 10 873 0 +469 397 477 -26 0 1645 10 480 0 +470 196 489 23 0 1670 10 0 567 +471 354 156 -20 0 1775 10 141 0 +472 171 24 11 1383 1413 10 0 599 +473 187 73 18 292 322 10 0 33 +474 243 408 -3 0 1757 10 282 0 +475 421 387 15 0 1696 10 0 310 +476 141 426 23 531 561 10 0 670 +477 415 118 19 0 1704 10 0 288 +478 240 255 -33 0 1904 10 704 0 +479 162 388 -19 1126 1156 10 918 0 +480 413 493 26 0 1623 10 0 469 +481 69 414 -29 1263 1293 10 453 0 +482 273 70 -12 619 649 10 513 0 +483 142 14 -32 0 1656 10 398 0 +484 185 434 -9 0 1720 10 905 0 +485 360 294 9 0 1797 10 0 509 +486 265 240 9 18 48 10 0 320 +487 280 245 21 30 60 10 0 610 +488 87 51 35 0 1658 10 0 976 +489 195 273 22 59 89 10 0 411 +490 422 498 -23 692 722 10 118 0 +491 95 64 4 0 1673 10 0 591 +492 63 155 7 0 1706 10 0 638 +493 24 259 -16 0 1689 10 836 0 +494 376 92 10 0 1713 10 0 601 +495 83 300 -31 500 530 10 586 0 +496 72 477 46 288 318 10 0 167 +497 380 194 -2 0 1774 10 711 0 +498 72 227 25 0 1736 10 0 331 +499 238 123 24 0 1788 10 0 260 +500 188 119 44 0 1771 10 0 415 +501 229 322 11 0 1840 10 0 697 +502 150 68 23 0 1708 10 0 636 +503 67 24 10 0 1625 10 0 813 +504 63 420 19 0 1663 10 0 681 +505 339 144 -31 1099 1129 10 56 0 +506 454 201 16 0 1706 10 0 109 +507 158 24 -18 0 1671 10 577 0 +508 365 119 30 382 412 10 0 973 +509 440 284 -9 852 882 10 485 0 +510 417 212 12 910 940 10 0 639 +511 404 439 -40 0 1672 10 294 0 +512 472 248 11 0 1693 10 0 939 +513 235 108 12 0 1773 10 0 482 +514 174 67 15 0 1717 10 0 798 +515 132 151 22 0 1761 10 0 433 +516 217 207 26 0 1861 0 0 1005 +517 162 306 22 0 1811 10 0 718 +518 48 366 29 0 1683 10 0 18 +519 209 68 -28 0 1729 10 761 0 +520 94 497 31 0 1623 10 0 274 +521 110 122 14 0 1726 10 0 210 +522 274 403 17 0 1761 10 0 926 +523 421 386 -33 824 854 10 355 0 +524 399 175 -19 747 777 10 91 0 +525 56 268 -11 1064 1094 10 62 0 +526 322 406 -19 0 1744 10 757 0 +527 244 277 -30 0 1888 10 28 0 +528 105 181 -28 0 1755 10 829 0 +529 30 97 23 0 1648 10 0 604 +530 359 246 -11 0 1806 10 4 0 +531 498 457 -13 0 1592 10 949 0 +532 190 267 36 0 1853 10 0 117 +533 334 481 32 0 1670 10 0 907 +534 18 24 -11 0 1592 10 786 0 +535 482 104 19 0 1641 10 0 974 +536 460 328 -15 0 1691 10 994 0 +537 320 211 -25 993 1023 10 695 0 +538 494 165 19 0 1657 10 0 602 +539 167 445 7 0 1704 10 0 203 +540 340 291 22 470 500 0 0 1043 +541 272 234 26 0 1888 10 0 61 +542 325 56 13 0 1708 10 0 689 +543 71 304 -20 0 1729 10 22 0 +544 87 311 7 0 1741 10 0 629 +545 207 487 4 0 1675 10 0 432 +546 332 5 14 1033 1063 10 0 580 +547 161 275 21 0 1823 10 0 664 +548 268 458 24 0 1707 10 0 237 +549 175 352 12 0 1789 10 0 150 +550 398 476 25 0 1645 10 0 727 +551 51 360 -15 0 1688 10 88 0 +552 21 70 15 771 801 10 0 938 +553 80 251 -4 0 1745 10 404 0 +554 457 280 -23 0 1706 10 678 0 +555 423 315 -5 0 1731 10 622 0 +556 66 88 -11 0 1670 10 410 0 +557 479 387 -1 0 1649 10 783 0 +558 436 123 40 0 1690 10 0 46 +559 286 244 31 0 1879 10 0 201 +560 449 190 2 1140 1170 10 0 83 +561 456 113 17 1227 1257 10 0 600 +562 480 152 26 0 1665 10 0 169 +563 100 266 5 0 1765 10 0 956 +564 343 34 7 0 1680 10 0 660 +565 374 306 4 994 1024 10 0 789 +566 13 465 31 774 804 10 0 284 +567 230 487 -23 0 1678 10 470 0 +568 442 153 -14 0 1700 10 605 0 +569 240 362 23 0 1803 10 0 182 +570 433 319 -15 0 1720 10 672 0 +571 0 422 -18 821 851 10 582 0 +572 297 131 25 0 1788 10 0 187 +573 71 12 -11 0 1618 10 214 0 +574 44 440 24 0 1635 10 0 977 +575 447 184 -27 0 1708 10 812 0 +576 341 59 27 790 820 0 0 1022 +577 132 32 18 784 814 10 0 507 +578 411 396 -13 0 1698 10 705 0 +579 450 416 -12 0 1656 10 899 0 +580 323 34 -14 0 1687 10 546 0 +581 244 368 25 414 444 10 0 328 +582 90 477 18 0 1638 10 0 571 +583 34 169 -10 484 514 10 69 0 +584 351 128 15 0 1757 10 0 955 +585 71 282 -14 0 1734 10 392 0 +586 157 269 31 0 1821 10 0 495 +587 392 1 11 605 635 10 0 311 +588 39 153 26 0 1683 10 0 27 +589 306 229 10 0 1856 10 0 202 +590 415 253 21 367 397 10 0 764 +591 92 76 -4 0 1680 10 491 0 +592 437 98 -16 0 1675 10 181 0 +593 12 367 -21 0 1650 10 838 0 +594 448 414 -11 0 1658 10 421 0 +595 128 113 22 363 393 10 0 740 +596 43 360 -7 0 1681 10 739 0 +597 102 422 23 226 256 10 0 958 +598 480 131 5 0 1657 0 0 1046 +599 210 81 -11 0 1742 10 472 0 +600 432 2 -17 0 1608 10 561 0 +601 396 83 -10 0 1694 10 494 0 +602 489 159 -19 0 1660 10 538 0 +603 56 75 -14 0 1654 10 801 0 +604 66 31 -23 0 1629 10 529 0 +605 460 117 14 520 550 10 0 568 +606 175 239 23 75 105 10 0 296 +607 217 333 -17 0 1826 10 618 0 +608 62 375 16 0 1690 10 0 73 +609 82 183 17 0 1735 10 0 731 +610 248 214 -21 0 1879 10 487 0 +611 385 239 -27 786 816 10 319 0 +612 371 315 18 0 1778 10 0 833 +613 333 163 32 0 1795 0 0 1006 +614 100 66 -14 0 1678 10 107 0 +615 311 422 29 0 1733 10 0 450 +616 153 235 10 0 1817 10 0 151 +617 168 109 10 0 1752 10 0 162 +618 284 319 17 0 1839 10 0 607 +619 195 464 -15 0 1695 10 700 0 +620 382 9 -12 0 1641 10 692 0 +621 325 210 15 0 1830 10 0 941 +622 366 334 5 410 440 10 0 555 +623 200 78 -18 0 1736 10 38 0 +624 351 5 -15 496 526 10 221 0 +625 197 202 -35 1204 1234 10 212 0 +626 270 337 20 0 1826 10 0 799 +627 125 65 17 788 818 0 0 1009 +628 120 17 -13 0 1649 10 385 0 +629 84 255 -7 0 1749 10 544 0 +630 222 331 -8 0 1830 10 239 0 +631 332 459 -19 369 399 10 763 0 +632 226 175 23 0 1837 10 0 819 +633 404 140 -23 1259 1289 10 773 0 +634 223 178 20 1136 1166 10 0 963 +635 330 308 24 1170 1200 10 0 713 +636 140 108 -23 0 1736 10 502 0 +637 34 239 16 0 1699 10 0 685 +638 94 192 -7 0 1749 10 492 0 +639 458 213 -12 1128 1158 10 510 0 +640 13 314 -26 0 1670 10 213 0 +641 202 391 30 0 1767 10 0 183 +642 339 41 -23 456 486 10 332 0 +643 224 56 -30 0 1720 10 780 0 +644 345 431 12 345 375 0 0 1003 +645 292 104 -11 0 1764 10 987 0 +646 318 99 -20 1213 1243 10 805 0 +647 46 248 -43 0 1711 10 707 0 +648 482 184 -34 0 1674 10 399 0 +649 411 379 25 0 1709 10 0 180 +650 293 174 31 87 117 10 0 766 +651 169 305 21 162 192 10 0 909 +652 394 47 -15 0 1667 10 230 0 +653 323 29 -9 1137 1167 10 936 0 +654 65 343 38 0 1708 10 0 312 +655 158 179 37 0 1799 10 0 890 +656 299 353 34 0 1801 0 0 1031 +657 9 233 31 0 1674 10 0 1000 +658 330 138 18 0 1778 10 0 87 +659 48 412 -13 1032 1062 10 886 0 +660 385 17 -7 0 1646 10 564 0 +661 382 110 -5 0 1723 10 823 0 +662 336 493 20 0 1658 0 0 1017 +663 181 441 25 0 1712 10 0 880 +664 162 301 -21 1613 1643 10 547 0 +665 1 101 -25 1257 1287 10 222 0 +666 80 117 24 0 1700 0 0 1030 +667 210 219 7 0 1865 10 0 313 +668 404 59 -17 0 1670 10 270 0 +669 288 439 16 0 1723 0 0 1044 +670 149 458 -23 0 1684 10 476 0 +671 257 391 -24 1633 1663 10 738 0 +672 405 349 15 522 552 10 0 570 +673 191 215 17 68 98 10 0 95 +674 231 29 14 1226 1256 10 0 447 +675 253 50 -26 0 1715 10 303 0 +676 441 177 -21 1001 1031 10 868 0 +677 5 445 -22 0 1602 10 816 0 +678 463 253 23 0 1702 10 0 554 +679 435 180 37 0 1718 10 0 454 +680 198 85 -24 263 293 10 126 0 +681 59 388 -19 663 693 10 504 0 +682 373 418 -25 1259 1289 10 995 0 +683 142 80 -8 0 1714 10 383 0 +684 441 7 20 0 1606 10 0 952 +685 33 268 -16 696 726 10 637 0 +686 355 174 33 0 1786 10 0 47 +687 228 260 -24 0 1891 10 721 0 +688 114 460 -10 0 1665 10 460 0 +689 337 41 -13 0 1689 10 542 0 +690 154 374 -20 0 1759 10 860 0 +691 235 13 27 0 1678 10 0 81 +692 303 78 12 179 209 10 0 620 +693 103 464 22 0 1656 10 0 349 +694 325 311 22 0 1819 10 0 877 +695 306 235 25 0 1858 10 0 537 +696 382 360 26 178 208 10 0 431 +697 235 288 -11 0 1875 10 501 0 +698 0 356 13 0 1644 10 0 742 +699 178 135 21 0 1780 10 0 758 +700 226 423 15 197 227 10 0 619 +701 15 11 15 0 1580 10 0 364 +702 144 35 -7 0 1676 10 980 0 +703 176 199 28 0 1826 10 0 796 +704 247 306 33 0 1859 10 0 478 +705 396 417 13 0 1694 10 0 578 +706 289 220 19 0 1866 10 0 854 +707 23 235 43 0 1688 10 0 647 +708 137 377 23 169 199 10 0 243 +709 400 71 17 0 1682 10 0 839 +710 261 359 10 0 1806 10 0 389 +711 438 127 2 0 1691 10 0 497 +712 318 280 21 0 1841 10 0 105 +713 333 293 -24 0 1822 10 635 0 +714 436 295 -30 0 1724 10 188 0 +715 62 94 16 0 1671 10 0 143 +716 495 355 3 1243 1273 10 0 304 +717 13 394 15 0 1638 10 0 843 +718 172 292 -22 0 1827 10 517 0 +719 14 232 18 0 1679 10 0 29 +720 437 90 -24 0 1669 10 376 0 +721 214 274 24 0 1872 10 0 687 +722 420 383 -27 0 1700 10 233 0 +723 120 261 -23 0 1785 10 755 0 +724 179 75 13 0 1727 10 0 403 +725 484 224 7 0 1680 10 0 89 +726 214 245 8 0 1879 0 0 1024 +727 395 474 -25 0 1649 10 550 0 +728 368 311 14 0 1783 0 0 1007 +729 199 203 -20 0 1846 10 51 0 +730 485 428 -29 1490 1520 10 130 0 +731 86 199 -17 0 1744 10 609 0 +732 447 272 12 0 1717 10 0 125 +733 40 304 -25 1145 1175 10 885 0 +734 475 267 -31 0 1690 10 736 0 +735 482 141 -21 1011 1041 10 17 0 +736 489 274 31 534 564 10 0 734 +737 26 342 12 0 1673 10 0 24 +738 139 438 24 0 1697 10 0 671 +739 12 358 7 1224 1254 10 0 596 +740 125 61 -22 0 1689 10 595 0 +741 360 284 -14 0 1800 10 928 0 +742 29 358 -13 0 1670 10 698 0 +743 285 247 13 0 1880 10 0 247 +744 248 386 -18 0 1779 10 901 0 +745 415 207 -21 0 1745 10 916 0 +746 130 247 -17 0 1795 10 792 0 +747 172 66 18 1303 1333 10 0 947 +748 92 259 4 399 429 0 0 1026 +749 379 486 22 0 1647 10 0 822 +750 452 484 -23 0 1606 10 969 0 +751 268 288 26 0 1873 10 0 753 +752 349 43 -18 0 1686 10 465 0 +753 225 269 -26 0 1884 10 751 0 +754 50 383 20 260 290 10 0 171 +755 110 251 23 498 528 10 0 723 +756 461 182 13 0 1694 10 0 960 +757 255 487 19 0 1678 10 0 526 +758 133 202 -21 0 1789 10 699 0 +759 34 329 2 1043 1073 10 0 205 +760 368 452 -29 0 1682 10 272 0 +761 242 106 28 0 1771 10 0 519 +762 171 303 18 0 1820 10 0 66 +763 329 456 19 0 1695 10 0 631 +764 490 286 -21 0 1673 10 590 0 +765 61 214 -10 0 1723 10 934 0 +766 365 74 -31 0 1705 10 650 0 +767 321 149 18 0 1792 10 0 139 +768 84 453 19 0 1653 10 0 380 +769 26 442 -18 0 1620 10 190 0 +770 180 283 -27 0 1838 10 264 0 +771 394 322 12 1025 1055 10 0 347 +772 348 348 23 0 1777 10 0 419 +773 309 161 23 0 1809 10 0 633 +774 385 58 24 0 1681 10 0 797 +775 228 287 21 43 73 10 0 992 +776 312 453 6 550 580 10 0 78 +777 35 344 -27 863 893 10 442 0 +778 393 98 -21 0 1707 10 292 0 +779 208 488 22 0 1674 10 0 352 +780 235 33 30 0 1698 10 0 643 +781 140 137 32 0 1758 10 0 79 +782 405 187 -24 1251 1281 10 869 0 +783 330 371 1 0 1770 10 0 557 +784 265 0 10 0 1665 0 0 1037 +785 295 89 23 0 1748 10 0 458 +786 3 23 11 0 1580 10 0 534 +787 363 225 -21 0 1800 10 70 0 +788 148 208 -16 0 1805 10 394 0 +789 466 362 -4 0 1672 10 565 0 +790 267 290 15 0 1872 10 0 253 +791 98 2 -15 0 1625 10 316 0 +792 131 246 17 832 862 10 0 746 +793 418 75 -9 0 1673 10 300 0 +794 366 260 23 0 1799 10 0 104 +795 138 28 23 1097 1127 10 0 846 +796 209 212 -28 0 1860 10 703 0 +797 443 167 -24 543 573 10 774 0 +798 156 65 -15 1037 1067 10 514 0 +799 279 355 -20 0 1807 10 626 0 +800 206 172 -19 788 818 10 144 0 +801 32 94 14 930 960 10 0 603 +802 301 239 31 52 82 10 0 255 +803 471 368 -16 0 1665 10 910 0 +804 133 273 -12 0 1796 10 138 0 +805 253 74 20 0 1739 10 0 646 +806 470 405 -23 0 1646 10 287 0 +807 77 172 -8 0 1726 10 867 0 +808 77 465 11 0 1640 10 0 263 +809 466 96 -31 1383 1413 10 241 0 +810 402 277 -24 0 1761 10 986 0 +811 267 374 23 601 631 10 0 395 +812 450 194 27 625 655 10 0 575 +813 89 65 -10 0 1670 10 503 0 +814 429 389 18 424 454 10 0 44 +815 202 28 22 0 1688 10 0 262 +816 46 389 22 0 1669 10 0 677 +817 246 407 12 0 1758 10 0 412 +818 452 110 -30 0 1670 10 359 0 +819 213 185 -23 0 1841 10 632 0 +820 134 276 15 0 1797 10 0 84 +821 262 97 17 947 977 10 0 137 +822 469 489 -22 0 1591 10 749 0 +823 364 71 5 0 1703 10 0 661 +824 68 240 -29 794 824 10 863 0 +825 494 468 31 0 1588 10 0 266 +826 439 222 22 0 1724 10 0 119 +827 386 225 13 0 1777 10 0 357 +828 434 359 -6 0 1702 10 5 0 +829 103 177 28 0 1751 10 0 528 +830 89 322 -26 0 1739 10 944 0 +831 307 249 -14 1377 1407 10 438 0 +832 30 155 -15 0 1676 10 446 0 +833 401 314 -18 976 1006 10 612 0 +834 217 357 -18 1420 1450 10 321 0 +835 373 421 21 0 1705 10 0 950 +836 5 281 16 0 1669 10 0 493 +837 173 474 14 0 1679 0 0 1001 +838 36 301 21 0 1696 10 0 593 +839 429 169 -17 0 1719 10 709 0 +840 195 450 -10 0 1708 10 178 0 +841 95 382 -10 0 1712 10 3 0 +842 225 121 -2 0 1784 10 329 0 +843 10 407 -15 434 464 10 717 0 +844 221 269 -35 0 1881 10 866 0 +845 264 180 33 0 1844 10 0 173 +846 168 59 -23 0 1708 10 795 0 +847 281 96 1 0 1758 10 0 965 +848 387 349 9 0 1746 10 0 43 +849 398 329 17 0 1748 10 0 957 +850 239 486 -7 0 1679 10 440 0 +851 237 420 -15 0 1745 10 96 0 +852 346 354 8 0 1774 10 0 132 +853 172 314 -12 0 1815 10 15 0 +854 233 230 -19 0 1889 10 706 0 +855 79 80 19 0 1674 10 0 387 +856 243 402 -11 0 1763 10 900 0 +857 117 110 13 0 1722 10 0 134 +858 66 314 -13 0 1721 10 335 0 +859 58 391 16 0 1677 10 0 166 +860 142 360 20 0 1761 10 0 690 +861 492 326 -18 0 1662 10 229 0 +862 381 328 -36 0 1763 10 223 0 +863 62 236 29 0 1727 10 0 824 +864 344 70 24 0 1712 10 0 892 +865 151 81 -22 0 1720 10 194 0 +866 240 240 35 0 1901 10 0 844 +867 46 163 8 0 1694 10 0 807 +868 455 168 21 867 897 10 0 676 +869 428 202 24 904 934 10 0 782 +870 432 199 7 0 1726 10 0 924 +871 391 112 24 1000 1030 10 0 904 +872 451 305 13 0 1707 0 0 1019 +873 214 311 14 70 100 10 0 468 +874 465 367 14 0 1671 10 0 152 +875 164 473 -9 0 1676 10 308 0 +876 364 173 30 0 1778 10 0 163 +877 274 261 -22 1707 1737 10 694 0 +878 133 455 25 0 1679 10 0 220 +879 351 481 10 322 352 10 0 913 +880 115 395 -25 815 845 10 663 0 +881 297 304 4 0 1844 10 0 128 +882 7 194 -26 0 1666 10 48 0 +883 409 255 -24 0 1756 10 967 0 +884 87 213 -21 0 1748 10 428 0 +885 60 246 25 0 1725 10 0 733 +886 3 471 13 0 1584 10 0 659 +887 418 251 -13 0 1747 10 204 0 +888 153 362 7 0 1767 10 0 199 +889 323 77 -12 0 1728 10 165 0 +890 143 158 -37 0 1774 10 655 0 +891 351 148 30 461 491 10 0 978 +892 426 38 -24 0 1640 10 864 0 +893 226 316 21 70 100 10 0 327 +894 347 192 -14 0 1802 10 372 0 +895 102 6 -16 0 1630 10 265 0 +896 41 120 22 0 1669 10 0 356 +897 247 443 17 330 360 10 0 451 +898 218 271 16 0 1877 0 0 1014 +899 376 385 12 184 214 10 0 579 +900 241 402 11 0 1763 10 0 856 +901 213 399 18 0 1762 10 0 744 +902 32 191 5 586 616 10 0 231 +903 441 374 -8 0 1688 10 19 0 +904 376 113 -24 0 1729 10 871 0 +905 215 434 9 0 1728 10 0 484 +906 499 316 -10 0 1658 10 215 0 +907 318 497 -32 0 1659 10 533 0 +908 256 441 -7 0 1724 10 445 0 +909 174 397 -21 1245 1275 10 651 0 +910 468 360 16 0 1671 10 0 803 +911 287 256 18 0 1878 10 0 267 +912 448 397 -20 0 1669 10 191 0 +913 352 487 -10 0 1657 10 879 0 +914 253 118 19 0 1783 10 0 53 +915 159 299 12 0 1812 10 0 145 +916 351 233 21 0 1813 10 0 745 +917 268 113 -19 0 1777 10 318 0 +918 164 332 19 0 1797 10 0 479 +919 88 484 5 0 1631 10 0 418 +920 360 488 19 0 1653 10 0 236 +921 343 166 28 0 1790 10 0 101 +922 497 266 25 748 778 0 0 1035 +923 138 406 8 1216 1246 10 0 293 +924 420 224 -7 0 1744 10 870 0 +925 231 410 -15 0 1754 10 97 0 +926 199 438 -17 0 1721 10 522 0 +927 219 215 -30 0 1869 10 449 0 +928 365 274 14 117 147 10 0 741 +929 481 454 14 0 1607 10 0 216 +930 187 61 -27 0 1716 10 443 0 +931 372 97 13 0 1720 10 0 131 +932 187 263 35 64 94 10 0 26 +933 371 427 23 0 1701 10 0 437 +934 74 215 10 229 259 10 0 765 +935 375 145 -15 929 959 10 218 0 +936 365 28 9 268 298 10 0 653 +937 118 314 26 0 1769 0 0 1029 +938 60 29 -15 1363 1393 10 552 0 +939 478 300 -11 0 1682 10 512 0 +940 33 152 17 0 1677 0 0 1042 +941 347 184 -15 1079 1109 10 621 0 +942 94 40 24 1068 1098 10 0 338 +943 290 328 7 144 174 10 0 34 +944 96 346 26 0 1734 10 0 830 +945 97 288 22 0 1758 10 0 423 +946 176 470 14 547 577 10 0 261 +947 206 97 -18 0 1756 10 747 0 +948 210 133 -28 0 1792 10 103 0 +949 489 457 13 0 1599 10 0 531 +950 418 399 -21 0 1691 10 835 0 +951 392 491 10 0 1636 10 0 207 +952 437 19 -20 0 1618 10 684 0 +953 495 83 32 0 1619 10 0 417 +954 468 352 -17 0 1675 10 370 0 +955 390 120 -15 0 1724 10 584 0 +956 80 357 -5 0 1715 10 563 0 +957 394 310 -17 0 1759 10 849 0 +958 61 441 -23 544 574 10 597 0 +959 52 303 -17 0 1711 10 350 0 +960 391 202 -13 0 1767 10 756 0 +961 36 451 15 0 1622 10 0 982 +962 276 84 20 0 1747 0 0 1040 +963 130 140 -20 0 1753 10 634 0 +964 16 287 -5 0 1679 10 305 0 +965 292 136 -1 0 1794 10 847 0 +966 53 204 8 0 1713 10 0 86 +967 359 287 24 0 1800 10 0 883 +968 309 29 11 1294 1324 10 0 245 +969 473 491 23 0 1587 10 0 750 +970 273 255 18 0 1892 10 0 112 +971 263 153 12 0 1818 10 0 339 +972 328 458 -3 768 798 10 457 0 +973 401 164 -30 0 1742 10 508 0 +974 480 119 -19 0 1651 10 535 0 +975 488 96 22 0 1632 10 0 268 +976 149 98 -35 0 1733 10 488 0 +977 49 437 -24 0 1641 10 574 0 +978 440 77 -30 0 1659 10 891 0 +979 43 135 31 0 1679 10 0 113 +980 188 151 7 0 1799 10 0 702 +981 175 422 24 0 1728 10 0 77 +982 48 437 -15 804 834 10 961 0 +983 334 403 -14 0 1741 10 346 0 +984 372 115 13 0 1734 10 0 232 +985 111 192 -23 0 1765 10 409 0 +986 357 290 24 0 1801 10 0 810 +987 331 134 11 0 1774 10 0 645 +988 495 199 25 0 1665 10 0 100 +989 441 60 21 1459 1489 10 0 55 +990 51 89 -24 1208 1238 10 155 0 +991 452 206 -9 492 522 10 54 0 +992 195 386 -21 146 176 10 775 0 +993 172 24 17 1452 1482 10 0 147 +994 408 318 15 0 1743 10 0 536 +995 410 399 25 234 264 10 0 682 +996 413 345 -25 0 1727 10 6 0 +997 215 129 -28 0 1790 10 456 0 +998 380 350 -15 0 1751 10 40 0 +999 19 38 -3 0 1602 10 252 0 +1000 166 247 -31 0 1831 10 657 0 +1001 173 474 -14 0 1679 10 837 0 +1002 428 302 -27 1016 1046 10 186 0 +1003 345 431 -12 345 375 10 644 0 +1004 64 5 -14 0 1608 10 441 0 +1005 217 207 -26 0 1861 10 516 0 +1006 333 163 -32 0 1795 10 613 0 +1007 368 311 -14 0 1783 10 728 0 +1008 64 135 -11 0 1697 10 157 0 +1009 125 65 -17 788 818 10 627 0 +1010 19 273 -25 0 1683 10 424 0 +1011 389 156 -27 716 746 10 170 0 +1012 27 444 -22 0 1620 10 32 0 +1013 134 194 -19 1652 1682 10 323 0 +1014 218 271 -16 0 1877 10 898 0 +1015 438 5 -18 0 1607 10 49 0 +1016 466 149 -16 1186 1216 10 8 0 +1017 336 493 -20 0 1658 10 662 0 +1018 69 423 -32 0 1665 10 59 0 +1019 451 305 -13 0 1707 10 872 0 +1020 440 201 -29 893 923 10 67 0 +1021 370 493 -22 0 1644 10 124 0 +1022 341 59 -27 790 820 10 576 0 +1023 261 138 -1 0 1803 10 444 0 +1024 214 245 -8 0 1879 10 726 0 +1025 290 145 -5 0 1803 10 13 0 +1026 92 259 -4 399 429 10 748 0 +1027 228 399 -14 0 1765 10 99 0 +1028 493 111 -26 0 1636 10 326 0 +1029 118 314 -26 0 1769 10 937 0 +1030 80 117 -24 0 1700 10 666 0 +1031 299 353 -34 0 1801 10 656 0 +1032 389 255 -15 0 1776 10 322 0 +1033 372 39 -10 0 1672 10 271 0 +1034 259 301 -25 0 1864 10 459 0 +1035 497 266 -25 748 778 10 922 0 +1036 213 283 -14 0 1866 10 455 0 +1037 265 0 -10 0 1665 10 784 0 +1038 206 174 -14 0 1828 10 281 0 +1039 52 412 -22 0 1660 10 16 0 +1040 276 84 -20 0 1747 10 962 0 +1041 31 175 -24 0 1684 10 58 0 +1042 33 152 -17 0 1677 10 940 0 +1043 340 291 -22 470 500 10 540 0 +1044 288 439 -16 0 1723 10 669 0 +1045 107 374 -8 914 944 10 390 0 +1046 480 131 -5 0 1657 10 598 0 diff --git a/jsprit-instances/instances/lilim/1000/LR1109.txt b/jsprit-instances/instances/lilim/1000/LR1109.txt new file mode 100644 index 00000000..feed3129 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR1109.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1925 0 0 0 +1 171 34 -18 1092 1224 10 507 0 +2 67 190 -15 1158 1219 10 143 0 +3 80 400 -18 1440 1483 10 190 0 +4 439 237 -7 935 973 10 870 0 +5 377 385 6 838 924 10 0 772 +6 449 428 25 1246 1277 10 0 421 +7 342 481 18 1421 1489 10 0 662 +8 466 149 -26 1196 1206 10 562 0 +9 83 290 -27 576 670 10 442 0 +10 251 63 -15 980 1024 10 309 0 +11 328 491 21 673 714 0 0 1016 +12 260 472 -8 1027 1074 10 425 0 +13 290 145 5 1273 1321 10 0 173 +14 266 221 9 33 107 10 0 892 +15 164 320 12 1084 1136 10 0 371 +16 52 412 -15 1388 1453 10 961 0 +17 485 104 -36 765 854 10 115 0 +18 144 331 -15 915 977 10 206 0 +19 387 394 -25 1069 1157 10 579 0 +20 472 57 -3 1290 1330 10 154 0 +21 343 276 15 96 172 10 0 741 +22 104 349 20 988 1061 10 0 430 +23 28 467 34 1316 1399 10 0 285 +24 91 427 -19 855 940 10 504 0 +25 429 476 23 559 618 10 0 118 +26 210 276 5 47 126 10 0 199 +27 58 39 -25 1152 1203 10 604 0 +28 273 300 30 55 110 10 0 783 +29 41 232 16 209 282 10 0 135 +30 25 53 23 996 1074 10 0 338 +31 52 18 28 859 885 10 0 603 +32 27 444 22 1058 1132 10 0 769 +33 178 72 -33 744 799 10 947 0 +34 406 460 -19 700 768 10 920 0 +35 250 328 24 232 296 10 0 384 +36 492 34 -16 805 847 10 232 0 +37 412 100 1 510 546 10 0 131 +38 233 87 18 261 275 10 0 172 +39 60 5 -16 1023 1094 10 275 0 +40 406 408 -16 1439 1503 10 760 0 +41 245 42 -28 534 590 10 680 0 +42 166 345 14 1120 1169 10 0 586 +43 440 294 16 945 1006 10 0 186 +44 370 382 -12 859 938 10 862 0 +45 32 319 -12 386 446 10 964 0 +46 480 136 22 256 358 0 0 1011 +47 371 163 21 822 863 0 0 1010 +48 0 188 -29 915 980 10 882 0 +49 438 5 -20 521 608 10 684 0 +50 132 477 -12 315 369 10 462 0 +51 203 211 -17 1278 1364 10 792 0 +52 2 264 -27 633 706 10 401 0 +53 231 167 15 85 162 10 0 260 +54 423 221 9 239 308 10 0 575 +55 459 53 -16 1105 1169 10 417 0 +56 386 154 31 1078 1153 10 0 163 +57 130 494 6 730 817 10 0 539 +58 31 175 24 238 286 10 0 296 +59 69 423 -16 786 848 10 608 0 +60 352 241 5 790 824 10 0 787 +61 261 201 -32 1500 1558 10 613 0 +62 59 276 -13 865 950 10 335 0 +63 146 188 6 1225 1274 0 0 1037 +64 451 62 5 275 323 10 0 467 +65 299 285 -30 1256 1282 10 306 0 +66 142 372 18 162 245 10 0 777 +67 440 201 29 890 926 10 0 119 +68 219 210 14 50 144 10 0 645 +69 64 198 -20 1073 1134 10 804 0 +70 390 249 21 572 621 10 0 827 +71 9 101 16 642 721 10 0 529 +72 424 288 -25 1049 1095 10 250 0 +73 77 372 19 211 270 10 0 518 +74 298 264 -20 50 84 10 141 0 +75 405 454 -20 1276 1359 10 191 0 +76 407 35 -19 1278 1329 10 311 0 +77 225 369 38 121 217 10 0 992 +78 347 459 -12 470 519 10 644 0 +79 117 178 28 1096 1168 10 0 516 +80 132 479 11 257 302 10 0 496 +81 201 66 14 1167 1197 10 0 643 +82 245 176 -25 1214 1285 10 435 0 +83 470 138 -14 1380 1428 10 605 0 +84 115 296 -4 1509 1578 10 404 0 +85 348 476 -28 1178 1246 10 334 0 +86 43 210 -1 210 274 10 1000 0 +87 327 139 -18 1237 1307 10 658 0 +88 49 353 -23 1416 1507 10 742 0 +89 356 256 19 106 183 10 0 530 +90 335 99 -6 1207 1260 10 291 0 +91 363 34 19 266 309 10 0 936 +92 33 278 -16 1471 1533 10 836 0 +93 366 288 -21 675 722 10 712 0 +94 452 172 9 594 653 10 0 735 +95 86 189 21 209 275 10 0 609 +96 262 369 15 120 168 10 0 457 +97 218 403 -15 1320 1349 10 790 0 +98 218 12 3 514 604 10 0 144 +99 228 399 -25 553 649 10 581 0 +100 492 188 -19 706 754 10 538 0 +101 267 174 -12 1580 1687 10 971 0 +102 274 441 12 682 738 10 0 900 +103 210 113 -6 677 733 10 846 0 +104 370 262 -13 1069 1159 10 204 0 +105 303 186 10 1333 1406 0 0 1039 +106 241 180 13 1688 1731 10 0 632 +107 100 85 14 338 394 10 0 865 +108 350 199 21 1203 1230 10 0 894 +109 500 228 -25 758 836 10 988 0 +110 251 238 27 12 72 10 0 129 +111 114 102 21 499 546 10 0 747 +112 345 146 -9 1422 1485 10 360 0 +113 21 146 21 478 526 10 0 867 +114 330 147 -23 850 876 10 773 0 +115 476 61 36 433 495 10 0 17 +116 386 245 16 487 501 10 0 322 +117 201 278 13 56 137 10 0 479 +118 421 499 -23 1321 1400 10 25 0 +119 426 231 -29 1020 1066 10 67 0 +120 105 137 32 434 500 10 0 715 +121 64 437 11 914 953 0 0 1008 +122 181 260 -26 69 127 10 213 0 +123 413 391 8 215 280 10 0 355 +124 370 493 22 563 610 10 0 391 +125 447 267 19 961 1029 0 0 1019 +126 232 101 24 333 389 10 0 303 +127 371 332 -5 487 602 10 622 0 +128 447 383 17 237 319 10 0 814 +129 325 147 -27 1177 1226 10 110 0 +130 489 437 29 690 753 10 0 682 +131 415 95 -1 1184 1199 10 37 0 +132 331 356 13 696 757 10 0 834 +133 374 346 -36 403 469 10 223 0 +134 108 37 23 521 608 10 0 162 +135 5 224 -16 1038 1102 10 29 0 +136 93 413 -23 226 283 10 597 0 +137 210 29 -18 1032 1100 10 483 0 +138 136 265 12 114 177 10 0 748 +139 409 155 -9 185 218 10 486 0 +140 111 178 -16 156 205 10 361 0 +141 291 251 20 41 138 10 0 74 +142 322 290 -14 1447 1541 10 283 0 +143 57 183 15 1088 1143 10 0 2 +144 181 185 -3 1584 1674 10 98 0 +145 7 382 -21 741 829 10 838 0 +146 425 448 -10 792 827 10 280 0 +147 174 41 -26 1292 1345 10 702 0 +148 161 276 8 123 173 10 0 820 +149 398 49 21 778 835 0 0 1028 +150 210 379 -22 693 755 10 744 0 +151 60 231 32 1001 1080 10 0 966 +152 453 360 13 230 327 10 0 304 +153 367 97 -10 977 1029 10 458 0 +154 488 3 3 385 447 10 0 20 +155 44 115 24 246 338 10 0 222 +156 48 293 -26 264 318 10 858 0 +157 64 135 11 850 917 10 0 492 +158 65 62 15 961 1021 10 0 316 +159 404 207 -31 886 966 10 209 0 +160 68 303 22 200 272 10 0 350 +161 263 418 25 261 326 10 0 484 +162 147 30 -23 1095 1153 10 134 0 +163 384 149 -31 1187 1238 10 56 0 +164 340 416 -5 315 357 10 358 0 +165 271 128 12 331 391 10 0 842 +166 89 358 -19 1230 1295 10 841 0 +167 20 480 -11 551 620 10 808 0 +168 488 173 -34 1202 1248 10 399 0 +169 439 156 2 512 570 10 0 711 +170 389 156 27 700 762 10 0 955 +171 111 392 -8 1146 1222 10 390 0 +172 267 162 -18 1441 1488 10 38 0 +173 248 176 -5 1372 1461 10 13 0 +174 413 476 -26 1167 1222 10 727 0 +175 352 481 -27 1280 1319 10 913 0 +176 264 135 -19 866 922 10 256 0 +177 29 462 17 1293 1357 10 0 919 +178 148 462 10 718 766 10 0 923 +179 44 140 -15 843 923 10 446 0 +180 414 378 -17 490 530 10 849 0 +181 392 95 -19 747 816 10 477 0 +182 216 341 19 639 699 10 0 328 +183 211 411 -17 1135 1189 10 897 0 +184 317 45 8 624 722 10 0 576 +185 178 150 33 621 673 10 0 800 +186 428 302 -16 993 1069 10 43 0 +187 450 45 24 503 535 10 0 709 +188 453 318 30 347 431 10 0 833 +189 186 135 24 709 756 10 0 634 +190 11 403 18 334 382 10 0 3 +191 433 447 20 785 834 10 0 75 +192 272 420 -35 1377 1425 10 631 0 +193 429 59 -11 441 507 10 793 0 +194 200 27 22 477 602 0 0 1002 +195 498 171 12 1265 1278 10 0 357 +196 487 320 21 854 892 10 0 861 +197 45 166 22 999 1057 10 0 832 +198 490 276 33 241 269 10 0 906 +199 126 391 -5 257 319 10 26 0 +200 92 18 -15 1122 1156 10 999 0 +201 293 228 19 48 85 10 0 686 +202 343 205 -21 748 817 10 487 0 +203 182 480 31 328 431 10 0 779 +204 385 285 13 863 903 10 0 104 +205 44 344 12 1073 1116 10 0 551 +206 170 347 15 414 487 10 0 18 +207 457 492 7 512 535 10 0 730 +208 124 448 6 377 391 10 0 321 +209 398 210 31 153 204 10 0 159 +210 75 118 21 399 449 10 0 636 +211 105 474 -18 449 523 10 582 0 +212 134 211 -17 122 180 10 673 0 +213 211 248 26 39 108 10 0 122 +214 212 186 -27 1718 1756 10 448 0 +215 492 335 -15 812 875 10 347 0 +216 497 483 -14 340 397 10 929 0 +217 440 436 18 876 937 10 0 310 +218 311 203 15 691 785 10 0 537 +219 491 369 -16 718 771 10 910 0 +220 67 378 -20 461 509 10 312 0 +221 383 17 -26 925 986 10 752 0 +222 7 82 -24 407 446 10 155 0 +223 342 319 36 115 198 10 0 133 +224 78 406 -29 959 992 10 453 0 +225 103 123 8 453 556 10 0 556 +226 241 38 16 518 576 10 0 227 +227 224 3 -16 670 740 10 226 0 +228 436 467 -25 711 792 10 550 0 +229 438 488 18 326 358 10 0 294 +230 351 60 15 215 275 10 0 314 +231 13 214 -8 1359 1379 10 315 0 +232 429 67 16 712 782 10 0 36 +233 498 456 -15 1384 1458 10 531 0 +234 135 400 20 257 371 10 0 664 +235 215 293 13 55 114 10 0 607 +236 354 416 10 655 733 10 0 578 +237 294 421 -29 1545 1635 10 272 0 +238 208 445 22 1290 1404 10 0 840 +239 230 320 -10 1192 1223 10 630 0 +240 157 38 -2 1046 1080 10 573 0 +241 441 100 31 861 915 10 0 348 +242 61 170 -23 983 1058 10 731 0 +243 79 467 22 351 382 10 0 274 +244 365 190 -3 1467 1517 10 497 0 +245 282 1 -12 1034 1080 10 692 0 +246 124 111 15 775 834 10 0 443 +247 247 219 17 31 65 0 0 1046 +248 28 180 34 360 441 10 0 902 +249 167 488 17 252 306 10 0 837 +250 442 289 25 195 280 10 0 72 +251 136 430 -24 679 771 10 738 0 +252 38 15 3 1076 1136 10 0 354 +253 246 314 36 1441 1480 10 0 478 +254 176 200 17 544 621 10 0 449 +255 337 232 2 1549 1622 0 0 1023 +256 257 133 19 847 908 10 0 176 +257 295 247 12 1293 1343 10 0 743 +258 39 162 18 544 616 0 0 1015 +259 79 257 -29 943 994 10 863 0 +260 236 126 -15 124 187 10 53 0 +261 259 498 -34 1060 1120 10 908 0 +262 180 162 -37 164 213 10 655 0 +263 53 466 9 322 379 10 0 566 +264 167 291 -6 1605 1694 10 373 0 +265 89 185 16 582 648 10 0 298 +266 487 446 -4 1314 1396 10 822 0 +267 308 199 -13 1498 1549 10 778 0 +268 481 84 17 492 549 10 0 326 +269 495 227 20 321 397 10 0 939 +270 397 57 -14 1469 1512 10 378 0 +271 372 39 10 709 768 10 0 661 +272 278 450 29 1358 1421 10 0 237 +273 292 32 14 230 259 10 0 542 +274 90 496 -22 1361 1459 10 243 0 +275 68 53 16 750 757 10 0 39 +276 371 423 10 211 265 10 0 594 +277 273 149 -1 1500 1536 10 444 0 +278 297 283 -26 1311 1418 10 407 0 +279 120 37 -14 755 825 10 791 0 +280 371 488 10 570 625 10 0 146 +281 206 174 -30 765 864 10 330 0 +282 174 347 -22 986 1073 10 517 0 +283 330 281 14 1315 1375 10 0 142 +284 67 451 -18 1214 1247 10 468 0 +285 27 464 -34 1272 1340 10 23 0 +286 361 178 -12 974 1000 10 935 0 +287 463 406 23 839 905 10 0 420 +288 456 157 -40 1434 1507 10 558 0 +289 153 244 5 103 143 0 0 1022 +290 153 192 13 860 902 10 0 898 +291 352 63 6 1174 1212 10 0 90 +292 371 71 21 287 317 10 0 564 +293 163 472 9 649 688 10 0 670 +294 448 495 -18 396 402 10 229 0 +295 282 10 -11 1250 1304 10 368 0 +296 66 163 -24 383 438 10 58 0 +297 314 205 -6 1508 1576 10 642 0 +298 83 169 -16 767 816 10 265 0 +299 221 291 9 50 111 0 0 1044 +300 374 116 9 563 642 10 0 864 +301 418 269 -11 1208 1231 10 714 0 +302 178 302 -8 858 945 10 411 0 +303 250 57 -24 718 809 10 126 0 +304 475 352 -13 294 355 10 152 0 +305 1 252 5 250 331 10 0 409 +306 286 356 30 111 148 10 0 65 +307 65 82 13 742 768 10 0 938 +308 154 392 9 171 230 10 0 333 +309 196 56 15 581 668 10 0 10 +310 366 390 -18 1291 1375 10 217 0 +311 436 25 19 1257 1338 10 0 76 +312 67 352 20 373 403 10 0 220 +313 173 182 25 102 206 10 0 997 +314 390 34 -15 1040 1110 10 230 0 +315 18 225 8 683 730 10 0 231 +316 57 43 -15 1007 1070 10 158 0 +317 388 44 -40 1094 1198 10 660 0 +318 269 112 -18 1239 1317 10 362 0 +319 374 260 -12 1727 1791 10 510 0 +320 291 213 -21 1252 1294 10 917 0 +321 178 420 -6 1042 1130 10 208 0 +322 389 255 -16 780 821 10 116 0 +323 134 194 -19 1658 1675 10 528 0 +324 93 490 2 360 429 10 0 520 +325 64 294 -25 1096 1137 10 959 0 +326 493 111 -17 521 591 10 268 0 +327 150 484 -26 592 689 10 875 0 +328 235 316 -19 642 699 10 182 0 +329 239 15 2 587 650 10 0 674 +330 193 138 30 640 712 10 0 281 +331 40 278 -28 1084 1154 10 416 0 +332 307 52 -24 908 962 10 339 0 +333 161 416 -9 993 1059 10 308 0 +334 381 457 28 445 526 10 0 85 +335 55 318 13 283 370 10 0 62 +336 80 279 -16 1137 1209 10 733 0 +337 48 162 15 220 300 0 0 1017 +338 91 27 -23 1167 1226 10 30 0 +339 288 70 24 183 254 10 0 332 +340 177 404 -10 1240 1315 10 380 0 +341 10 237 -19 596 667 10 493 0 +342 493 493 -13 841 902 10 949 0 +343 440 292 -12 926 985 10 555 0 +344 349 76 15 1018 1073 10 0 584 +345 47 208 30 220 263 10 0 765 +346 283 454 -32 1244 1317 10 533 0 +347 486 324 15 748 821 10 0 215 +348 392 87 -31 1166 1230 10 241 0 +349 122 422 -4 1445 1498 10 982 0 +350 37 281 -22 458 559 10 160 0 +351 413 127 28 824 867 10 0 871 +352 222 499 7 838 882 10 0 850 +353 211 446 15 1114 1162 0 0 1034 +354 30 7 -3 1181 1226 10 252 0 +355 398 341 -8 925 984 10 123 0 +356 26 67 -10 1311 1352 10 503 0 +357 461 186 -12 1497 1557 10 195 0 +358 313 391 5 154 212 10 0 164 +359 471 94 -12 999 1029 10 720 0 +360 341 72 9 815 825 10 0 112 +361 130 186 16 136 199 10 0 140 +362 257 57 18 1222 1259 10 0 318 +363 94 344 -26 675 720 10 937 0 +364 6 53 8 566 638 0 0 1001 +365 146 376 8 220 279 10 0 690 +366 244 13 24 991 1066 10 0 780 +367 29 336 22 305 389 10 0 737 +368 306 42 11 487 497 10 0 295 +369 177 486 -4 1590 1634 10 545 0 +370 489 338 -15 1387 1437 10 789 0 +371 179 318 -12 1117 1155 10 15 0 +372 344 203 14 156 208 10 0 891 +373 149 341 6 377 461 10 0 264 +374 307 412 8 406 432 10 0 389 +375 68 450 18 620 676 10 0 574 +376 420 80 -13 1088 1135 10 668 0 +377 144 220 35 110 158 10 0 934 +378 497 54 14 962 1025 10 0 270 +379 80 458 30 349 422 0 0 1006 +380 84 377 10 911 972 10 0 340 +381 332 382 -7 1001 1049 10 943 0 +382 6 196 -11 1168 1269 10 583 0 +383 104 28 -13 1463 1513 10 385 0 +384 224 320 -24 1265 1333 10 35 0 +385 87 3 13 1424 1473 10 0 383 +386 149 214 7 452 542 10 0 625 +387 98 29 14 1021 1102 10 0 441 +388 135 30 12 469 510 10 0 591 +389 287 397 -8 557 601 10 374 0 +390 107 374 8 896 962 10 0 171 +391 355 485 -22 1463 1525 10 124 0 +392 51 286 -43 1455 1493 10 707 0 +393 49 118 -14 1070 1102 10 801 0 +394 159 226 -32 94 168 10 927 0 +395 185 431 -9 356 448 10 905 0 +396 262 92 25 624 666 10 0 482 +397 475 198 20 813 887 10 0 648 +398 142 30 -18 1234 1287 10 577 0 +399 481 207 34 843 899 10 0 168 +400 174 122 14 578 639 10 0 500 +401 35 263 27 245 326 10 0 52 +402 24 71 11 341 381 10 0 534 +403 173 65 -5 431 495 10 447 0 +404 91 326 4 942 1014 10 0 84 +405 470 417 11 725 778 10 0 933 +406 397 153 29 879 916 10 0 941 +407 295 283 26 893 924 10 0 278 +408 174 376 -14 1417 1452 10 946 0 +409 38 190 -5 261 339 10 305 0 +410 16 68 11 296 380 10 0 942 +411 179 286 8 330 382 10 0 302 +412 244 422 14 534 571 10 0 641 +413 250 441 5 741 801 10 0 925 +414 497 18 -13 1124 1166 10 931 0 +415 195 111 15 982 1045 0 0 1033 +416 26 221 28 980 1042 10 0 331 +417 442 5 16 311 364 10 0 55 +418 44 496 32 376 458 10 0 886 +419 448 404 -9 566 661 10 848 0 +420 471 427 -23 789 874 10 287 0 +421 460 424 -25 1433 1506 10 6 0 +422 461 195 -23 1380 1440 10 678 0 +423 146 313 22 1164 1256 10 0 762 +424 19 273 -9 1012 1052 10 647 0 +425 245 461 8 614 714 10 0 12 +426 69 266 12 742 805 10 0 428 +427 191 84 -19 863 902 10 930 0 +428 68 160 -12 1132 1169 10 426 0 +429 212 47 20 781 851 10 0 513 +430 80 337 -20 1126 1142 10 22 0 +431 412 478 7 943 1006 10 0 750 +432 225 488 28 638 664 10 0 567 +433 105 140 27 182 225 10 0 521 +434 389 43 -5 392 430 10 652 0 +435 177 156 25 140 225 10 0 82 +436 179 497 -23 1405 1447 10 470 0 +437 377 432 20 815 877 10 0 705 +438 497 296 14 593 662 10 0 810 +439 152 476 45 513 563 10 0 878 +440 277 428 7 473 537 10 0 474 +441 64 5 -14 1116 1171 10 387 0 +442 44 311 27 404 440 10 0 9 +443 165 59 -15 910 1006 10 246 0 +444 261 138 1 599 667 10 0 277 +445 268 351 -10 1646 1735 10 710 0 +446 48 150 15 631 710 10 0 179 +447 215 79 5 218 259 10 0 403 +448 109 56 27 239 286 10 0 214 +449 171 188 -17 585 687 10 254 0 +450 284 457 -20 1473 1555 10 466 0 +451 274 442 -26 1064 1098 10 983 0 +452 33 286 -16 1535 1587 10 637 0 +453 112 433 29 229 285 10 0 224 +454 423 170 27 490 566 10 0 973 +455 213 283 14 1477 1495 10 0 532 +456 240 34 28 1554 1595 0 0 1018 +457 283 438 -15 218 275 10 96 0 +458 324 99 10 318 388 10 0 153 +459 259 301 -21 98 129 10 775 0 +460 189 402 10 508 595 10 0 926 +461 215 282 21 1417 1494 0 0 1043 +462 166 440 12 207 267 10 0 50 +463 374 232 33 125 167 10 0 782 +464 339 113 -8 752 800 10 904 0 +465 335 46 -12 1322 1391 10 624 0 +466 313 493 20 1190 1227 10 0 450 +467 432 66 -5 1059 1114 10 64 0 +468 76 462 18 930 1011 10 0 284 +469 397 477 -10 1195 1266 10 951 0 +470 196 489 23 1037 1053 10 0 436 +471 354 156 -30 820 875 10 876 0 +472 171 24 11 1384 1412 10 0 519 +473 187 73 18 268 346 10 0 683 +474 243 408 -7 1406 1492 10 440 0 +475 421 387 15 806 827 10 0 649 +476 141 426 23 529 563 10 0 860 +477 415 118 19 211 271 10 0 181 +478 240 255 -36 1607 1644 10 253 0 +479 162 388 -13 1119 1164 10 117 0 +480 413 493 -3 1210 1256 10 511 0 +481 69 414 6 1242 1314 0 0 1013 +482 273 70 -25 606 662 10 396 0 +483 142 14 18 827 873 10 0 137 +484 185 434 -25 563 615 10 161 0 +485 360 294 -4 1398 1468 10 565 0 +486 265 240 9 18 59 10 0 139 +487 280 245 21 30 69 10 0 202 +488 87 51 -12 506 552 10 890 0 +489 195 273 22 59 105 10 0 721 +490 422 498 -4 680 735 10 881 0 +491 95 64 4 761 800 10 0 855 +492 63 155 -11 945 1014 10 157 0 +493 24 259 19 356 415 10 0 341 +494 376 92 -24 981 1030 10 766 0 +495 83 300 26 487 542 10 0 945 +496 72 477 -11 288 368 10 80 0 +497 380 194 3 692 765 10 0 244 +498 72 227 -23 565 593 10 606 0 +499 238 123 24 779 813 10 0 559 +500 188 119 -14 950 1029 10 400 0 +501 229 322 -34 1628 1722 10 656 0 +502 150 68 23 402 474 10 0 699 +503 67 24 10 999 1067 10 0 356 +504 63 420 19 501 569 10 0 24 +505 339 144 13 1079 1148 10 0 767 +506 454 201 -11 1306 1334 10 512 0 +507 158 24 18 593 660 10 0 1 +508 365 119 30 376 417 10 0 984 +509 440 284 -25 812 921 10 922 0 +510 417 212 12 908 943 10 0 319 +511 404 439 3 247 261 10 0 480 +512 472 248 11 818 881 10 0 506 +513 235 108 -20 1066 1124 10 429 0 +514 174 67 -22 1248 1301 10 515 0 +515 132 151 22 154 182 10 0 514 +516 217 207 -28 1361 1433 10 79 0 +517 162 306 22 104 165 10 0 282 +518 48 366 -19 731 786 10 73 0 +519 209 68 -11 1572 1595 10 472 0 +520 94 497 -2 765 829 10 324 0 +521 110 122 -27 1490 1558 10 433 0 +522 274 403 17 885 919 10 0 851 +523 421 386 -26 807 872 10 696 0 +524 399 175 -37 753 770 10 679 0 +525 56 268 28 1058 1100 0 0 1042 +526 322 406 -18 799 890 10 911 0 +527 244 277 18 1291 1341 0 0 1045 +528 105 181 19 1527 1565 10 0 323 +529 30 97 -16 1214 1237 10 71 0 +530 359 246 -19 1404 1472 10 89 0 +531 498 457 15 891 965 10 0 233 +532 190 267 -14 1743 1794 10 455 0 +533 334 481 32 311 379 10 0 346 +534 18 24 -11 621 666 10 402 0 +535 482 104 19 790 854 10 0 975 +536 460 328 -24 224 302 10 986 0 +537 320 211 -15 977 1038 10 218 0 +538 494 165 19 587 651 10 0 100 +539 167 445 -6 1393 1461 10 57 0 +540 340 291 22 475 496 10 0 713 +541 272 234 26 1570 1640 0 0 1035 +542 325 56 -14 783 840 10 273 0 +543 71 304 19 680 729 10 0 759 +544 87 311 7 174 209 10 0 685 +545 207 487 4 655 753 10 0 369 +546 332 5 14 1021 1075 10 0 968 +547 161 275 -9 1343 1380 10 853 0 +548 268 458 -19 501 575 10 757 0 +549 175 352 12 1643 1717 0 0 1020 +550 398 476 25 399 468 10 0 228 +551 51 360 -12 1135 1184 10 205 0 +552 21 70 15 760 813 10 0 990 +553 80 251 14 283 355 10 0 729 +554 457 280 17 1002 1027 10 0 639 +555 423 315 12 184 216 10 0 343 +556 66 88 -8 818 872 10 225 0 +557 479 387 13 378 447 10 0 716 +558 436 123 40 225 295 10 0 288 +559 286 244 -24 1287 1311 10 499 0 +560 449 190 -18 1130 1179 10 745 0 +561 456 113 17 1213 1272 10 0 602 +562 480 152 26 1006 1067 10 0 8 +563 100 266 5 445 525 10 0 585 +564 343 34 -21 706 773 10 292 0 +565 374 306 4 987 1031 10 0 485 +566 13 465 -9 755 823 10 263 0 +567 230 487 -28 1114 1176 10 432 0 +568 442 153 29 1176 1231 10 0 633 +569 240 362 -8 1397 1461 10 852 0 +570 433 319 -20 1354 1428 10 996 0 +571 0 422 -30 808 864 10 677 0 +572 297 131 -17 1160 1201 10 821 0 +573 71 12 2 297 351 10 0 240 +574 44 440 -18 766 841 10 375 0 +575 447 184 -9 413 465 10 54 0 +576 341 59 -8 775 835 10 184 0 +577 132 32 18 771 827 10 0 398 +578 411 396 -10 917 953 10 236 0 +579 450 416 25 562 621 10 0 19 +580 323 34 -24 1296 1363 10 774 0 +581 244 368 25 395 463 10 0 99 +582 90 477 18 277 347 10 0 211 +583 34 169 11 460 538 10 0 382 +584 351 128 -15 1231 1305 10 344 0 +585 71 282 -5 614 700 10 563 0 +586 157 269 -14 1573 1610 10 42 0 +587 392 1 11 579 661 10 0 823 +588 39 153 -22 775 850 10 896 0 +589 306 229 -31 1314 1357 10 802 0 +590 415 253 21 342 422 10 0 611 +591 92 76 -12 1138 1170 10 388 0 +592 437 98 -14 1106 1152 10 978 0 +593 12 367 27 302 380 10 0 596 +594 448 414 -10 1198 1278 10 276 0 +595 128 113 -17 343 413 10 963 0 +596 43 360 -27 826 874 10 593 0 +597 102 422 23 226 307 10 0 136 +598 480 131 -32 647 758 10 953 0 +599 210 81 2 381 447 10 0 784 +600 432 2 20 452 512 10 0 601 +601 396 83 -20 1585 1617 10 600 0 +602 489 159 -17 1420 1466 10 561 0 +603 56 75 -28 1436 1469 10 31 0 +604 66 31 25 1018 1108 10 0 27 +605 460 117 14 501 569 10 0 83 +606 175 239 23 75 134 10 0 498 +607 217 333 -13 398 454 10 235 0 +608 62 375 16 335 392 10 0 59 +609 82 183 -21 1080 1153 10 95 0 +610 248 214 -28 1465 1523 10 703 0 +611 385 239 -21 783 818 10 590 0 +612 371 315 -10 1141 1220 10 957 0 +613 333 163 32 1225 1286 10 0 61 +614 100 66 -16 1389 1441 10 813 0 +615 311 422 29 964 1041 10 0 671 +616 153 235 -35 98 164 10 932 0 +617 168 109 10 194 244 10 0 993 +618 284 319 17 785 878 0 0 1036 +619 195 464 -18 1514 1598 10 901 0 +620 382 9 30 274 329 0 0 1007 +621 325 210 -25 901 996 10 695 0 +622 366 334 5 389 461 10 0 127 +623 200 78 -13 978 1038 10 724 0 +624 351 5 12 488 534 10 0 465 +625 197 202 -7 1172 1265 10 386 0 +626 270 337 -16 1777 1818 10 669 0 +627 125 65 17 757 849 10 0 798 +628 120 17 30 284 305 10 0 795 +629 84 255 -17 255 339 10 746 0 +630 222 331 10 518 592 10 0 239 +631 332 459 35 349 419 10 0 192 +632 226 175 -13 1669 1748 10 106 0 +633 404 140 -29 1224 1323 10 568 0 +634 223 178 -24 1145 1157 10 189 0 +635 330 308 24 1150 1220 10 0 694 +636 140 108 -21 1057 1116 10 210 0 +637 34 239 16 216 257 10 0 452 +638 94 192 -28 1052 1138 10 829 0 +639 458 213 -17 1114 1173 10 554 0 +640 13 314 14 245 313 10 0 698 +641 202 391 -14 612 665 10 412 0 +642 339 41 6 445 496 10 0 297 +643 224 56 -14 1167 1235 10 81 0 +644 345 431 12 310 410 10 0 78 +645 292 104 -14 280 357 10 68 0 +646 318 99 -28 1184 1271 10 965 0 +647 46 248 9 812 846 10 0 424 +648 482 184 -20 1082 1161 10 397 0 +649 411 379 -15 1185 1232 10 475 0 +650 293 174 31 87 134 10 0 987 +651 169 305 21 149 204 10 0 888 +652 394 47 5 298 357 10 0 434 +653 323 29 -8 1139 1165 10 689 0 +654 65 343 -26 207 262 10 944 0 +655 158 179 37 116 201 10 0 262 +656 299 353 34 114 179 10 0 501 +657 9 233 -18 298 344 10 719 0 +658 330 138 18 1093 1156 10 0 87 +659 48 412 -20 1024 1071 10 681 0 +660 385 17 40 810 838 10 0 317 +661 382 110 -10 1089 1165 10 271 0 +662 336 493 -18 1470 1545 10 7 0 +663 181 441 -15 530 584 10 700 0 +664 162 301 -20 1587 1669 10 234 0 +665 1 101 8 1246 1299 0 0 1004 +666 80 117 24 824 855 10 0 857 +667 210 219 7 50 92 10 0 758 +668 404 59 13 905 951 10 0 376 +669 288 439 16 270 307 10 0 626 +670 149 458 -9 1153 1204 10 293 0 +671 257 391 -29 1637 1659 10 615 0 +672 405 349 -20 492 582 10 950 0 +673 191 215 17 68 160 10 0 212 +674 231 29 -2 1215 1268 10 329 0 +675 253 50 27 216 266 10 0 761 +676 441 177 23 996 1037 10 0 883 +677 5 445 30 313 359 10 0 571 +678 463 253 23 1024 1101 10 0 422 +679 435 180 37 219 260 10 0 524 +680 198 85 28 266 290 10 0 41 +681 59 388 20 645 710 10 0 659 +682 373 418 -29 1236 1312 10 130 0 +683 142 80 -18 462 552 10 473 0 +684 441 7 20 380 433 10 0 49 +685 33 268 -7 681 740 10 544 0 +686 355 174 -19 720 741 10 201 0 +687 228 260 12 1587 1654 10 0 866 +688 114 460 14 1079 1123 0 0 1009 +689 337 41 8 978 1056 10 0 653 +690 154 374 -8 930 973 10 365 0 +691 235 13 27 349 399 10 0 980 +692 303 78 12 179 194 10 0 245 +693 103 464 -27 1263 1312 10 958 0 +694 325 311 -24 1312 1363 10 635 0 +695 306 235 25 57 101 10 0 621 +696 382 360 26 171 224 10 0 523 +697 235 288 18 40 114 10 0 751 +698 0 356 -14 1090 1112 10 640 0 +699 178 135 -23 1509 1548 10 502 0 +700 226 423 15 174 279 10 0 663 +701 15 11 -11 942 992 10 786 0 +702 144 35 26 239 324 10 0 147 +703 176 199 28 89 131 10 0 610 +704 247 306 33 56 97 10 0 753 +705 396 417 -20 801 850 10 437 0 +706 289 220 19 49 91 10 0 921 +707 23 235 43 999 1078 10 0 392 +708 137 377 23 169 214 10 0 981 +709 400 71 -24 1337 1437 10 187 0 +710 261 359 10 109 162 10 0 445 +711 438 127 -2 939 973 10 169 0 +712 318 280 21 74 95 10 0 93 +713 333 293 -22 596 668 10 540 0 +714 436 295 11 518 568 10 0 301 +715 62 94 -32 944 988 10 120 0 +716 495 355 -13 1238 1278 10 557 0 +717 13 394 15 352 423 10 0 843 +718 172 292 17 89 124 10 0 918 +719 14 232 18 278 363 10 0 657 +720 437 90 12 573 626 10 0 359 +721 214 274 -22 1361 1407 10 489 0 +722 420 383 27 976 1018 0 0 1021 +723 120 261 5 786 831 0 0 1031 +724 179 75 13 731 779 10 0 623 +725 484 224 7 274 355 10 0 734 +726 214 245 8 36 108 10 0 796 +727 395 474 26 367 436 10 0 174 +728 368 311 -14 903 980 10 928 0 +729 199 203 -14 1440 1505 10 553 0 +730 485 428 -7 1476 1534 10 207 0 +731 86 199 23 260 325 10 0 242 +732 447 272 -24 384 414 10 967 0 +733 40 304 16 1134 1186 10 0 336 +734 475 267 -7 762 828 10 725 0 +735 482 141 -9 992 1060 10 94 0 +736 489 274 31 512 585 10 0 764 +737 26 342 -22 293 378 10 367 0 +738 139 438 24 218 290 10 0 251 +739 12 358 -16 1228 1250 10 859 0 +740 125 61 -32 589 665 10 781 0 +741 360 284 -15 650 714 10 21 0 +742 29 358 23 600 652 10 0 88 +743 285 247 -12 1245 1335 10 257 0 +744 248 386 22 353 433 10 0 150 +745 415 207 18 892 938 10 0 560 +746 130 247 17 120 173 10 0 629 +747 172 66 -21 1291 1344 10 111 0 +748 92 259 -12 376 452 10 138 0 +749 379 486 -10 660 713 10 879 0 +750 452 484 -7 1283 1304 10 431 0 +751 268 288 -18 1244 1319 10 697 0 +752 349 43 26 229 289 10 0 221 +753 225 269 -33 1266 1305 10 704 0 +754 50 383 20 241 309 10 0 977 +755 110 251 -25 482 544 10 885 0 +756 461 182 -17 598 689 10 797 0 +757 255 487 19 384 441 10 0 548 +758 133 202 -7 448 503 10 667 0 +759 34 329 -19 1032 1085 10 543 0 +760 368 452 16 653 716 10 0 40 +761 242 106 -27 1270 1297 10 675 0 +762 171 303 -22 1581 1627 10 423 0 +763 329 456 19 224 305 10 0 907 +764 490 286 -31 510 565 10 736 0 +765 61 214 -30 321 392 10 345 0 +766 365 74 24 836 890 10 0 494 +767 321 149 -13 1421 1459 10 505 0 +768 84 453 -22 1199 1277 10 816 0 +769 26 442 -22 1330 1388 10 32 0 +770 180 283 23 734 784 10 0 915 +771 394 322 12 1009 1071 10 0 828 +772 348 348 -6 920 980 10 5 0 +773 309 161 23 578 619 10 0 114 +774 385 58 24 390 450 10 0 580 +775 228 287 21 43 103 10 0 459 +776 312 453 6 543 586 10 0 972 +777 35 344 -18 857 900 10 66 0 +778 393 98 13 757 778 10 0 267 +779 208 488 -31 446 539 10 203 0 +780 235 33 -24 1327 1377 10 366 0 +781 140 137 32 547 622 10 0 740 +782 405 187 -33 1226 1306 10 463 0 +783 330 371 -30 545 603 10 28 0 +784 265 0 -2 876 947 10 599 0 +785 295 89 -21 710 804 10 819 0 +786 3 23 11 380 432 10 0 701 +787 363 225 -5 840 901 10 60 0 +788 148 208 22 527 556 10 0 844 +789 466 362 15 1150 1185 10 0 370 +790 267 290 15 43 112 10 0 97 +791 98 2 14 566 647 10 0 279 +792 131 246 17 828 866 10 0 51 +793 418 75 11 432 494 10 0 193 +794 366 260 23 1511 1559 0 0 1030 +795 138 28 -30 1069 1154 10 628 0 +796 209 212 -8 1523 1563 10 726 0 +797 443 167 17 525 591 10 0 756 +798 156 65 -17 1035 1069 10 627 0 +799 279 355 9 141 221 10 0 811 +800 206 172 -33 781 825 10 185 0 +801 32 94 14 924 966 10 0 393 +802 301 239 31 52 93 10 0 589 +803 471 368 19 425 461 10 0 954 +804 133 273 20 119 203 10 0 69 +805 253 74 20 1342 1389 0 0 1027 +806 470 405 17 908 973 10 0 874 +807 77 172 -18 793 808 10 884 0 +808 77 465 11 275 334 10 0 167 +809 466 96 22 1367 1430 0 0 1005 +810 402 277 -14 1438 1468 10 438 0 +811 267 374 -9 585 646 10 799 0 +812 450 194 27 617 662 10 0 869 +813 89 65 16 688 782 10 0 614 +814 429 389 -17 414 464 10 128 0 +815 202 28 22 926 973 0 0 1012 +816 46 389 22 246 296 10 0 768 +817 246 407 12 291 363 10 0 856 +818 452 110 14 314 396 10 0 974 +819 213 185 21 74 185 10 0 785 +820 134 276 -8 118 211 10 148 0 +821 262 97 17 933 992 10 0 572 +822 469 489 4 528 613 10 0 266 +823 364 71 -11 1321 1405 10 587 0 +824 68 240 11 789 829 0 0 1041 +825 494 468 31 327 418 10 0 969 +826 439 222 -14 962 1028 10 960 0 +827 386 225 -21 905 962 10 70 0 +828 434 359 -12 1369 1445 10 771 0 +829 103 177 28 601 682 10 0 638 +830 89 322 -1 999 1072 10 956 0 +831 307 249 10 1360 1423 10 0 877 +832 30 155 -22 1265 1326 10 197 0 +833 401 314 -30 972 1011 10 188 0 +834 217 357 -13 1410 1459 10 132 0 +835 373 421 -12 226 278 10 899 0 +836 5 281 16 1379 1394 10 0 92 +837 173 474 -17 1254 1345 10 249 0 +838 36 301 21 219 276 10 0 145 +839 429 169 -21 888 947 10 868 0 +840 195 450 -22 1469 1533 10 238 0 +841 95 382 19 211 282 10 0 166 +842 225 121 -12 726 770 10 165 0 +843 10 407 -15 421 477 10 717 0 +844 221 269 -22 1248 1313 10 788 0 +845 264 180 33 1675 1716 0 0 1025 +846 168 59 6 375 387 10 0 103 +847 281 96 -19 1109 1172 10 914 0 +848 387 349 9 169 243 10 0 419 +849 398 329 17 167 239 10 0 180 +850 239 486 -7 1449 1545 10 352 0 +851 237 420 -17 1299 1400 10 522 0 +852 346 354 8 794 871 10 0 569 +853 172 314 9 535 585 10 0 547 +854 233 230 20 26 100 10 0 962 +855 79 80 -4 1370 1424 10 491 0 +856 243 402 -12 393 448 10 817 0 +857 117 110 -24 956 1031 10 666 0 +858 66 314 26 194 235 10 0 156 +859 58 391 16 860 935 10 0 739 +860 142 360 -23 1504 1590 10 476 0 +861 492 326 -21 1189 1250 10 196 0 +862 381 328 12 713 752 10 0 44 +863 62 236 29 540 605 10 0 259 +864 344 70 -9 1113 1209 10 300 0 +865 151 81 -14 1538 1607 10 107 0 +866 240 240 -12 1688 1741 10 687 0 +867 46 163 -21 922 961 10 113 0 +868 455 168 21 854 909 10 0 839 +869 428 202 -27 894 944 10 812 0 +870 432 199 7 638 669 10 0 4 +871 391 112 -28 996 1035 10 351 0 +872 451 305 13 208 287 10 0 994 +873 214 311 14 70 96 10 0 893 +874 465 367 -17 994 1089 10 806 0 +875 164 473 26 286 337 10 0 327 +876 364 173 30 160 231 10 0 471 +877 274 261 -10 1700 1743 10 831 0 +878 133 455 -45 790 856 10 439 0 +879 351 481 10 317 357 10 0 749 +880 115 395 11 788 872 10 0 909 +881 297 304 4 71 163 10 0 490 +882 7 194 29 928 1004 10 0 48 +883 409 255 -23 1489 1586 10 676 0 +884 87 213 18 614 667 10 0 807 +885 60 246 25 190 268 10 0 755 +886 3 471 -32 716 736 10 418 0 +887 418 251 21 1190 1234 0 0 1038 +888 153 362 -21 1136 1217 10 651 0 +889 323 77 36 1404 1437 0 0 1014 +890 143 158 12 141 171 10 0 488 +891 351 148 -14 445 508 10 372 0 +892 426 38 -9 611 636 10 14 0 +893 226 316 -14 70 171 10 873 0 +894 347 192 -21 1480 1527 10 108 0 +895 102 6 3 1437 1510 0 0 1003 +896 41 120 22 684 737 10 0 588 +897 247 443 17 319 372 10 0 183 +898 218 271 -13 1556 1621 10 290 0 +899 376 385 12 184 250 10 0 835 +900 241 402 -12 998 1081 10 102 0 +901 213 399 18 210 287 10 0 619 +902 32 191 -34 592 611 10 248 0 +903 441 374 10 227 259 10 0 912 +904 376 113 8 498 561 10 0 464 +905 215 434 9 187 246 10 0 395 +906 499 316 -33 613 660 10 198 0 +907 318 497 -19 847 890 10 763 0 +908 256 441 34 191 260 10 0 261 +909 174 397 -11 1222 1297 10 880 0 +910 468 360 16 267 311 10 0 219 +911 287 256 18 37 135 10 0 526 +912 448 397 -10 850 912 10 903 0 +913 352 487 27 876 958 10 0 175 +914 253 118 19 541 584 10 0 847 +915 159 299 -23 1002 1060 10 770 0 +916 351 233 21 1409 1466 10 0 970 +917 268 113 21 666 723 10 0 320 +918 164 332 -17 1264 1325 10 718 0 +919 88 484 -17 1475 1536 10 177 0 +920 360 488 19 325 336 10 0 34 +921 343 166 -19 874 908 10 706 0 +922 497 266 25 750 776 10 0 509 +923 138 406 -10 1195 1267 10 178 0 +924 420 224 10 405 483 10 0 991 +925 231 410 -5 1224 1278 10 413 0 +926 199 438 -10 1344 1406 10 460 0 +927 219 215 32 46 120 10 0 394 +928 365 274 14 117 201 10 0 728 +929 481 454 14 308 377 10 0 216 +930 187 61 19 526 593 10 0 427 +931 372 97 13 197 261 10 0 414 +932 187 263 35 64 79 10 0 616 +933 371 427 -11 948 999 10 405 0 +934 74 215 -35 218 269 10 377 0 +935 375 145 12 912 977 10 0 286 +936 365 28 -19 256 310 10 91 0 +937 118 314 26 333 373 10 0 363 +938 60 29 -13 1340 1416 10 307 0 +939 478 300 -20 865 944 10 269 0 +940 33 152 -31 1299 1371 10 979 0 +941 347 184 -29 1064 1124 10 406 0 +942 94 40 -11 1032 1134 10 410 0 +943 290 328 7 135 182 10 0 381 +944 96 346 26 181 266 10 0 654 +945 97 288 -26 1274 1325 10 495 0 +946 176 470 14 523 600 10 0 408 +947 206 97 33 428 499 10 0 33 +948 210 133 15 673 734 0 0 1040 +949 489 457 13 316 352 10 0 342 +950 418 399 20 431 475 10 0 672 +951 392 491 10 1116 1180 10 0 469 +952 437 19 15 999 1059 10 0 989 +953 495 83 32 424 488 10 0 598 +954 468 352 -19 763 804 10 803 0 +955 390 120 -27 992 1046 10 170 0 +956 80 357 1 529 562 10 0 830 +957 394 310 10 1092 1136 10 0 612 +958 61 441 27 553 564 10 0 693 +959 52 303 25 444 469 10 0 325 +960 391 202 14 148 191 10 0 826 +961 36 451 15 874 933 10 0 16 +962 276 84 -20 668 725 10 854 0 +963 130 140 17 177 241 10 0 595 +964 16 287 12 258 314 10 0 45 +965 292 136 28 777 814 10 0 646 +966 53 204 -32 1032 1108 10 151 0 +967 359 287 24 115 174 10 0 732 +968 309 29 -14 1275 1342 10 546 0 +969 473 491 -31 389 467 10 825 0 +970 273 255 -21 1462 1553 10 916 0 +971 263 153 12 402 453 10 0 101 +972 328 458 -6 762 804 10 776 0 +973 401 164 -27 610 662 10 454 0 +974 480 119 -14 608 678 10 818 0 +975 488 96 -19 1035 1127 10 535 0 +976 149 98 4 1147 1213 0 0 1026 +977 49 437 -20 427 457 10 754 0 +978 440 77 14 895 961 10 0 592 +979 43 135 31 236 315 10 0 940 +980 188 151 -27 1270 1353 10 691 0 +981 175 422 -23 1434 1489 10 708 0 +982 48 437 4 782 855 10 0 349 +983 334 403 26 174 217 10 0 451 +984 372 115 -30 359 399 10 508 0 +985 111 192 11 1176 1253 0 0 1029 +986 357 290 24 114 194 10 0 536 +987 331 134 -31 1107 1170 10 650 0 +988 495 199 25 317 386 10 0 109 +989 441 60 -15 1439 1508 10 952 0 +990 51 89 -15 1189 1257 10 552 0 +991 452 206 -10 488 526 10 924 0 +992 195 386 -38 146 198 10 77 0 +993 172 24 -10 1445 1490 10 617 0 +994 408 318 -13 613 703 10 872 0 +995 410 399 25 218 279 0 0 1024 +996 413 345 20 1196 1270 10 0 570 +997 215 129 -25 1081 1186 10 313 0 +998 380 350 15 854 908 0 0 1032 +999 19 38 15 824 901 10 0 200 +1000 166 247 1 84 129 10 0 86 +1001 6 53 -8 566 638 10 364 0 +1002 200 27 -22 477 602 10 194 0 +1003 102 6 -3 1437 1510 10 895 0 +1004 1 101 -8 1246 1299 10 665 0 +1005 466 96 -22 1367 1430 10 809 0 +1006 80 458 -30 349 422 10 379 0 +1007 382 9 -30 274 329 10 620 0 +1008 64 437 -11 914 953 10 121 0 +1009 114 460 -14 1079 1123 10 688 0 +1010 371 163 -21 822 863 10 47 0 +1011 480 136 -22 256 358 10 46 0 +1012 202 28 -22 926 973 10 815 0 +1013 69 414 -6 1242 1314 10 481 0 +1014 323 77 -36 1404 1437 10 889 0 +1015 39 162 -18 544 616 10 258 0 +1016 328 491 -21 673 714 10 11 0 +1017 48 162 -15 220 300 10 337 0 +1018 240 34 -28 1554 1595 10 456 0 +1019 447 267 -19 961 1029 10 125 0 +1020 175 352 -12 1643 1717 10 549 0 +1021 420 383 -27 976 1018 10 722 0 +1022 153 244 -5 103 143 10 289 0 +1023 337 232 -2 1549 1622 10 255 0 +1024 410 399 -25 218 279 10 995 0 +1025 264 180 -33 1675 1716 10 845 0 +1026 149 98 -4 1147 1213 10 976 0 +1027 253 74 -20 1342 1389 10 805 0 +1028 398 49 -21 778 835 10 149 0 +1029 111 192 -11 1176 1253 10 985 0 +1030 366 260 -23 1511 1559 10 794 0 +1031 120 261 -5 786 831 10 723 0 +1032 380 350 -15 854 908 10 998 0 +1033 195 111 -15 982 1045 10 415 0 +1034 211 446 -15 1114 1162 10 353 0 +1035 272 234 -26 1570 1640 10 541 0 +1036 284 319 -17 785 878 10 618 0 +1037 146 188 -6 1225 1274 10 63 0 +1038 418 251 -21 1190 1234 10 887 0 +1039 303 186 -10 1333 1406 10 105 0 +1040 210 133 -15 673 734 10 948 0 +1041 68 240 -11 789 829 10 824 0 +1042 56 268 -28 1058 1100 10 525 0 +1043 215 282 -21 1417 1494 10 461 0 +1044 221 291 -9 50 111 10 299 0 +1045 244 277 -18 1291 1341 10 527 0 +1046 247 219 -17 31 65 10 247 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2101.txt b/jsprit-instances/instances/lilim/1000/LR2101.txt new file mode 100644 index 00000000..400d839d --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2101.txt @@ -0,0 +1,1008 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 -6 2329 2482 10 766 0 +2 325 56 13 3181 3311 10 0 582 +3 290 145 5 5130 5242 10 0 415 +4 340 291 22 1893 1991 10 0 839 +5 370 382 11 3538 3653 10 0 372 +6 273 255 -9 5968 6088 10 287 0 +7 36 301 21 811 949 10 0 668 +8 117 178 28 4484 4574 10 0 302 +9 295 283 26 3538 3728 10 0 66 +10 57 43 -25 4088 4219 10 932 0 +11 436 123 -33 835 966 10 809 0 +12 48 162 15 825 1033 10 0 524 +13 222 499 7 3400 3483 10 0 560 +14 376 92 -17 3959 4086 10 534 0 +15 437 90 12 2364 2435 10 0 885 +16 3 23 -27 1550 1702 10 970 0 +17 94 40 -11 4278 4387 10 62 0 +18 398 476 -17 1676 1789 10 33 0 +19 307 249 10 5511 5622 0 0 1003 +20 179 286 8 1380 1469 10 0 224 +21 0 356 13 4346 4464 10 0 822 +22 143 158 12 562 659 10 0 696 +23 413 476 34 4729 4823 10 0 580 +24 371 488 -10 2285 2497 10 760 0 +25 415 118 19 886 966 10 0 188 +26 440 77 -26 3649 3775 10 877 0 +27 261 201 -27 6060 6172 10 597 0 +28 490 286 29 2073 2224 10 0 529 +29 309 161 23 2287 2499 10 0 32 +30 39 162 -20 2269 2373 10 469 0 +31 361 178 5 3903 3996 10 0 299 +32 261 138 -23 2491 2575 10 29 0 +33 447 383 17 889 1013 10 0 18 +34 346 354 8 3260 3399 10 0 664 +35 461 195 -15 5597 5683 10 690 0 +36 187 263 35 191 324 10 0 39 +37 130 247 17 423 538 10 0 562 +38 328 491 -13 2702 2845 10 61 0 +39 161 276 -35 476 711 10 36 0 +40 365 74 24 3379 3529 10 0 557 +41 168 109 -9 810 944 10 986 0 +42 111 192 11 4809 4907 10 0 414 +43 87 213 18 2483 2642 10 0 845 +44 45 166 -16 4063 4164 10 611 0 +45 62 94 16 3822 3903 10 0 595 +46 348 476 19 4762 4932 10 0 87 +47 64 437 -29 3686 3779 10 492 0 +48 56 75 -21 5711 5910 10 966 0 +49 24 259 19 1490 1591 10 0 180 +50 295 247 -27 5212 5335 10 929 0 +51 6 53 8 2355 2460 10 0 504 +52 15 11 15 3796 3938 10 0 634 +53 179 497 -20 5633 5775 10 640 0 +54 67 352 20 1514 1592 10 0 699 +55 317 45 -16 2629 2757 10 985 0 +56 40 278 10 4466 4490 10 0 506 +57 33 278 -26 5910 6108 10 417 0 +58 322 290 -6 5920 6031 10 999 0 +59 159 226 16 314 439 10 0 279 +60 208 445 -15 5314 5465 10 858 0 +61 453 360 13 858 990 10 0 38 +62 34 169 11 1948 2048 10 0 17 +63 436 25 -12 5113 5266 10 631 0 +64 393 98 13 3013 3127 10 0 720 +65 466 96 -30 5547 5639 10 948 0 +66 366 390 -26 5266 5400 10 9 0 +67 303 78 12 656 784 10 0 74 +68 374 116 9 2357 2461 10 0 586 +69 424 288 -31 4261 4318 10 584 0 +70 191 84 -6 3472 3584 10 473 0 +71 59 276 -27 3548 3711 10 811 0 +72 215 293 13 128 315 10 0 569 +73 343 276 15 321 451 10 0 893 +74 488 173 -12 4836 4966 10 67 0 +75 452 110 14 1339 1504 10 0 215 +76 153 244 5 460 523 10 0 108 +77 176 200 17 2266 2394 10 0 711 +78 498 171 -20 5048 5123 10 538 0 +79 492 188 -9 2904 2939 10 871 0 +80 177 156 25 639 818 10 0 114 +81 398 49 21 3167 3288 10 0 324 +82 497 296 14 2495 2525 10 0 555 +83 276 84 -22 2696 2874 10 84 0 +84 128 113 22 1424 1597 10 0 83 +85 422 498 5 2801 2856 10 0 821 +86 460 424 -15 5786 5970 10 897 0 +87 246 314 -19 5773 5910 10 46 0 +88 0 422 8 3300 3388 10 0 465 +89 166 247 1 291 382 10 0 788 +90 311 422 -34 3970 4053 10 250 0 +91 392 95 -13 3060 3189 10 792 0 +92 460 117 -3 2083 2196 10 274 0 +93 28 467 -22 5381 5480 10 916 0 +94 375 145 -3 3719 3836 10 152 0 +95 240 255 -30 6404 6604 10 452 0 +96 440 436 -4 3549 3706 10 493 0 +97 454 201 -34 5218 5342 10 969 0 +98 407 35 -29 5177 5250 10 379 0 +99 420 383 27 3932 4044 10 0 945 +100 264 180 -16 6720 6845 10 886 0 +101 440 294 -15 3836 3966 10 621 0 +102 500 228 8 3137 3237 10 0 998 +103 144 331 -14 3709 3860 10 890 0 +104 98 2 -21 2361 2493 10 805 0 +105 461 186 -8 6054 6165 10 862 0 +106 68 450 18 2505 2675 10 0 729 +107 153 192 13 3457 3588 10 0 544 +108 34 239 -5 896 975 10 76 0 +109 465 367 -15 4087 4248 10 927 0 +110 208 488 -23 1934 2007 10 377 0 +111 93 413 -19 849 961 10 456 0 +112 371 332 14 2144 2213 10 0 753 +113 231 167 15 246 435 10 0 374 +114 179 75 -25 2982 3057 10 80 0 +115 196 489 -12 4135 4226 10 936 0 +116 280 245 21 85 158 10 0 739 +117 108 37 -14 2192 2323 10 381 0 +118 1 101 -15 5021 5158 10 883 0 +119 420 80 -22 4372 4522 10 496 0 +120 38 190 23 1138 1261 10 0 143 +121 470 405 17 3694 3832 10 0 819 +122 448 397 -20 3482 3563 10 791 0 +123 471 427 -15 3256 3395 10 509 0 +124 146 376 8 928 1066 10 0 687 +125 12 358 -29 4891 5024 10 955 0 +126 175 422 -21 5771 5920 10 996 0 +127 297 131 25 4640 4803 10 0 230 +128 457 492 7 2041 2143 10 0 982 +129 69 423 32 3236 3304 10 0 979 +130 97 288 -4 5142 5251 10 799 0 +131 172 314 -6 2169 2314 10 244 0 +132 170 347 15 1764 1842 10 0 606 +133 103 123 8 1966 2072 10 0 485 +134 154 374 36 3746 3870 10 0 671 +135 318 497 -15 3428 3522 10 879 0 +136 330 147 28 3383 3525 10 0 990 +137 241 180 -14 6789 6887 10 366 0 +138 174 67 -31 5018 5180 10 915 0 +139 235 288 18 83 244 10 0 764 +140 94 192 1 4319 4444 10 0 394 +141 232 101 -18 1405 1483 10 446 0 +142 28 180 -18 1551 1653 10 345 0 +143 64 135 -23 3495 3571 10 120 0 +144 174 376 -21 5671 5804 10 593 0 +145 293 174 31 279 420 10 0 685 +146 218 12 -24 2204 2268 10 457 0 +147 110 122 -14 6000 6190 10 407 0 +148 459 53 20 4505 4592 10 0 444 +149 173 474 14 5150 5250 10 0 848 +150 135 400 20 1189 1319 10 0 498 +151 497 266 25 2996 3104 10 0 773 +152 380 194 3 2872 2956 10 0 94 +153 495 227 20 1389 1482 10 0 680 +154 268 351 -20 6698 6822 10 954 0 +155 213 399 18 941 1051 10 0 183 +156 448 414 -4 4924 4978 10 725 0 +157 327 139 -20 5021 5158 10 971 0 +158 151 81 -17 6262 6321 10 507 0 +159 425 448 9 3152 3324 10 0 956 +160 92 259 4 1585 1731 10 0 992 +161 59 388 -10 2650 2772 10 203 0 +162 468 360 16 1104 1208 10 0 434 +163 332 459 35 1479 1591 10 0 281 +164 469 489 -23 2211 2353 10 817 0 +165 248 176 -36 5579 5753 10 695 0 +166 174 41 -4 5216 5331 10 841 0 +167 343 205 -13 3081 3178 10 761 0 +168 154 392 9 635 737 10 0 194 +169 92 18 8 4466 4648 10 0 461 +170 250 328 24 1001 1108 10 0 795 +171 88 484 -19 5963 6082 10 495 0 +172 360 488 19 1252 1393 10 0 752 +173 156 65 -23 4143 4275 10 824 0 +174 18 225 8 2757 2893 10 0 721 +175 152 476 -27 2112 2188 10 771 0 +176 176 470 -36 2181 2312 10 635 0 +177 195 450 -7 5946 6061 10 997 0 +178 466 149 -15 4761 4848 10 256 0 +179 221 269 -3 5064 5179 10 716 0 +180 105 137 -19 1799 1940 10 49 0 +181 284 319 -13 3270 3384 10 567 0 +182 41 120 22 2791 2897 10 0 911 +183 263 418 -18 1117 1230 10 155 0 +184 218 271 16 6280 6429 10 0 411 +185 365 119 30 1482 1692 10 0 369 +186 89 322 -5 4099 4186 10 556 0 +187 180 283 -25 2963 3107 10 813 0 +188 385 17 -19 3186 3404 10 25 0 +189 401 314 -16 3875 4057 10 694 0 +190 245 176 -21 4943 5055 10 926 0 +191 251 238 27 12 119 10 0 207 +192 139 438 24 865 966 10 0 246 +193 236 126 23 400 598 10 0 718 +194 61 441 -9 2201 2268 10 168 0 +195 405 454 -13 5178 5365 10 359 0 +196 111 392 -6 4693 4780 10 638 0 +197 373 421 21 939 1080 10 0 392 +198 247 443 -9 1302 1461 10 849 0 +199 322 406 -19 3294 3460 10 517 0 +200 412 478 7 3851 3946 10 0 247 +201 374 346 -30 1700 1788 10 251 0 +202 122 422 -23 5871 5904 10 566 0 +203 261 359 10 401 476 10 0 161 +204 173 182 25 383 438 10 0 789 +205 398 341 -23 3775 3858 10 707 0 +206 413 127 -2 3326 3439 10 253 0 +207 325 311 -27 5290 5409 10 191 0 +208 80 357 1 2093 2271 10 0 790 +209 67 378 26 1875 2008 10 0 804 +210 216 341 -26 2613 2738 10 337 0 +211 498 457 15 3692 3733 10 0 213 +212 44 344 12 4325 4431 10 0 290 +213 352 481 -15 5136 5261 10 211 0 +214 237 420 -32 5311 5483 10 271 0 +215 389 43 -14 1564 1721 10 75 0 +216 292 136 28 3126 3239 10 0 679 +217 426 38 -24 2439 2551 10 432 0 +218 245 461 8 2635 2680 10 0 226 +219 415 253 21 1457 1595 10 0 248 +220 298 264 36 147 253 10 0 825 +221 307 412 8 1635 1714 10 0 874 +222 53 204 -26 4206 4354 10 278 0 +223 480 152 26 4028 4265 10 0 245 +224 262 97 -8 3785 3912 10 20 0 +225 83 169 -18 3115 3218 10 629 0 +226 377 432 -8 3343 3429 10 218 0 +227 390 249 21 2323 2451 10 0 952 +228 132 479 11 997 1063 10 0 914 +229 359 246 -25 5725 5777 10 380 0 +230 314 205 -25 6086 6249 10 127 0 +231 124 448 6 1430 1638 10 0 660 +232 0 188 -16 3709 3867 10 561 0 +233 343 166 -13 3512 3616 10 975 0 +234 482 141 14 4028 4178 10 0 478 +235 162 306 22 494 580 10 0 282 +236 24 71 -30 1394 1494 10 601 0 +237 188 119 -18 3903 4016 10 901 0 +238 100 85 14 1422 1506 10 0 528 +239 103 177 28 2494 2637 10 0 814 +240 26 67 15 5274 5380 10 0 981 +241 164 332 -5 5107 5250 10 317 0 +242 385 285 13 3478 3586 10 0 961 +243 209 68 -15 6266 6398 10 922 0 +244 149 341 6 1599 1753 10 0 131 +245 415 95 -26 4708 4825 10 223 0 +246 167 488 -24 972 1148 10 192 0 +247 413 493 -7 4894 4971 10 200 0 +248 439 222 -21 3929 4028 10 219 0 +249 150 484 16 2498 2623 10 0 260 +250 299 353 34 393 519 10 0 90 +251 273 300 30 153 288 10 0 201 +252 402 277 5 5771 5856 10 0 950 +253 239 15 2 2416 2534 10 0 206 +254 363 225 35 3426 3541 10 0 727 +255 65 343 -21 802 976 10 284 0 +256 351 60 15 850 952 10 0 178 +257 60 246 25 704 816 10 0 815 +258 144 35 26 891 1027 10 0 939 +259 463 253 -22 4171 4325 10 908 0 +260 332 382 -16 4037 4167 10 249 0 +261 408 318 15 2558 2707 10 0 520 +262 452 206 31 1958 2099 10 0 600 +263 471 368 19 1718 1827 10 0 270 +264 93 490 2 1527 1626 10 0 646 +265 241 402 11 4090 4229 10 0 572 +266 60 231 -13 4124 4203 10 703 0 +267 172 66 18 5225 5318 10 0 746 +268 404 207 -25 3634 3771 10 420 0 +269 286 356 30 354 542 10 0 355 +270 489 338 -19 5551 5746 10 263 0 +271 334 481 32 1323 1440 10 0 214 +272 26 442 23 5402 5470 10 0 426 +273 226 175 -23 6798 6871 10 326 0 +274 488 3 3 1625 1700 10 0 92 +275 178 150 33 2548 2625 10 0 526 +276 371 423 10 810 878 10 0 780 +277 5 224 19 4242 4316 10 0 689 +278 94 344 26 2746 2832 10 0 222 +279 153 235 -16 324 462 10 59 0 +280 12 367 27 1282 1444 10 0 575 +281 217 357 -35 5671 5808 10 163 0 +282 255 487 -22 1556 1747 10 235 0 +283 149 214 7 1911 2066 10 0 656 +284 169 305 21 663 752 10 0 255 +285 487 446 -33 5360 5482 10 837 0 +286 267 374 23 2425 2501 10 0 869 +287 360 294 9 5669 5793 10 0 6 +288 185 431 -29 1561 1656 10 833 0 +289 325 210 -18 3717 3870 10 536 0 +290 175 352 -12 6652 6789 10 212 0 +291 76 462 18 3813 3955 10 0 735 +292 19 273 -7 4035 4218 10 649 0 +293 72 227 25 2258 2373 10 0 748 +294 213 283 -24 5885 6002 10 320 0 +295 130 140 17 783 889 10 0 706 +296 274 442 17 4301 4350 10 0 333 +297 337 41 -7 4018 4121 10 977 0 +298 372 39 10 2886 3022 10 0 684 +299 269 112 -5 5041 5180 10 31 0 +300 224 56 13 4747 4865 10 0 723 +301 340 416 -5 1293 1396 10 872 0 +302 13 214 -28 5428 5520 10 8 0 +303 230 320 -19 4770 4887 10 530 0 +304 6 196 -19 4772 4973 10 698 0 +305 87 3 13 5728 5856 10 0 581 +306 133 202 -21 1827 1978 10 666 0 +307 235 316 -13 2616 2751 10 946 0 +308 435 180 -14 896 1020 10 639 0 +309 173 65 -27 1768 1940 10 831 0 +310 245 42 24 2203 2295 10 0 669 +311 384 149 -1 4777 4920 10 373 0 +312 51 286 14 5831 5960 10 0 329 +313 267 290 15 111 236 10 0 747 +314 453 318 30 1489 1621 10 0 836 +315 189 402 10 2149 2259 10 0 882 +316 210 276 5 138 243 10 0 865 +317 120 261 5 3154 3312 10 0 241 +318 35 263 27 1087 1194 10 0 387 +319 429 59 9 1827 1964 10 0 923 +320 330 308 24 4687 4797 10 0 294 +321 58 391 -23 3528 3651 10 867 0 +322 260 472 -28 4143 4265 10 758 0 +323 217 333 26 1633 1776 10 0 437 +324 335 46 -21 5400 5453 10 81 0 +325 198 85 28 1032 1189 10 0 860 +326 138 28 23 4362 4530 10 0 273 +327 29 336 22 1319 1454 10 0 875 +328 200 27 22 2109 2209 10 0 643 +329 157 269 -14 6317 6414 10 312 0 +330 177 404 17 5074 5143 10 0 787 +331 202 28 22 3733 3860 10 0 683 +332 366 334 -3 1650 1751 10 489 0 +333 149 458 -17 4634 4796 10 296 0 +334 481 454 -9 1278 1406 10 677 0 +335 377 385 -13 3486 3564 10 484 0 +336 217 207 -29 5538 5642 10 775 0 +337 96 346 26 765 836 10 0 210 +338 224 320 -14 5187 5202 10 596 0 +339 206 97 -20 1785 1920 10 350 0 +340 438 127 2 3785 3862 10 0 590 +341 494 468 -25 1417 1523 10 968 0 +342 494 165 19 2401 2553 10 0 642 +343 5 281 -17 5478 5615 10 463 0 +344 441 60 21 5835 5954 10 0 430 +345 14 232 18 1187 1374 10 0 142 +346 288 439 16 1121 1187 10 0 442 +347 420 224 10 1704 1848 10 0 749 +348 267 162 6 5800 5913 10 0 743 +349 195 273 22 156 320 0 0 1006 +350 233 230 20 26 199 10 0 339 +351 382 360 -36 696 849 10 436 0 +352 406 460 2 2868 3006 10 0 715 +353 499 316 18 2472 2623 10 0 479 +354 246 407 12 1235 1377 10 0 949 +355 283 454 -30 5107 5134 10 269 0 +356 426 231 24 4102 4245 10 0 730 +357 432 2 -19 1848 2004 10 412 0 +358 404 439 -25 964 1067 10 880 0 +359 397 477 13 4853 4993 10 0 195 +360 44 140 -2 3464 3602 10 579 0 +361 330 138 -13 4493 4504 10 675 0 +362 39 153 -6 3203 3299 10 433 0 +363 397 153 29 3507 3673 10 0 622 +364 226 316 21 234 328 10 0 892 +365 354 156 20 3322 3458 10 0 712 +366 201 66 14 4671 4784 10 0 137 +367 389 156 -10 2851 2993 10 598 0 +368 134 211 35 458 626 10 0 912 +369 386 154 -30 4415 4513 10 185 0 +370 335 99 25 4913 4955 10 0 390 +371 356 256 19 337 513 10 0 829 +372 240 362 -11 5665 5765 10 5 0 +373 412 100 1 2066 2161 10 0 311 +374 394 322 -15 4111 4207 10 113 0 +375 48 150 15 2642 2718 10 0 626 +376 225 121 18 2924 3063 10 0 422 +377 102 422 23 892 1038 10 0 110 +378 339 41 -14 1793 1973 10 793 0 +379 440 201 29 3603 3658 10 0 98 +380 411 379 25 4781 4886 10 0 229 +381 219 210 14 152 252 10 0 117 +382 250 441 5 3026 3140 10 0 468 +383 210 29 -24 4213 4314 10 763 0 +384 178 302 19 3553 3659 10 0 702 +385 148 208 -28 2095 2237 10 782 0 +386 225 369 38 432 541 10 0 393 +387 16 287 -27 1102 1185 10 318 0 +388 450 416 -20 2281 2453 10 904 0 +389 287 397 -17 2262 2373 10 806 0 +390 285 247 -25 5063 5256 10 370 0 +391 351 481 10 1284 1410 10 0 785 +392 243 408 -21 5720 5870 10 197 0 +393 137 377 -38 619 740 10 386 0 +394 33 152 -1 5278 5403 10 140 0 +395 68 303 22 904 987 10 0 740 +396 456 113 -25 4922 5015 10 704 0 +397 134 276 -12 538 648 10 983 0 +398 26 221 -31 4016 4076 10 440 0 +399 79 257 26 3803 3942 10 0 980 +400 181 185 -7 6436 6594 10 963 0 +401 104 349 20 4058 4135 10 0 734 +402 267 174 -29 6470 6596 10 441 0 +403 475 267 7 3124 3232 10 0 751 +404 385 239 21 3130 3274 10 0 797 +405 95 382 -18 929 1041 10 678 0 +406 67 190 -26 4722 4785 10 705 0 +407 32 94 14 3707 3854 10 0 147 +408 401 164 13 2523 2568 10 0 508 +409 376 113 -26 2083 2150 10 828 0 +410 409 255 23 6084 6215 10 0 519 +411 228 260 -16 6450 6514 10 184 0 +412 363 34 19 1097 1202 10 0 357 +413 274 441 12 2762 2915 10 0 959 +414 146 188 -11 4960 5039 10 42 0 +415 212 186 -5 6893 6999 10 3 0 +416 432 66 -5 4270 4419 10 676 0 +417 83 300 26 1987 2131 10 0 57 +418 51 89 -16 4833 4953 10 628 0 +419 379 486 -23 2679 2815 10 592 0 +420 440 284 25 3394 3540 10 0 268 +421 175 239 23 256 351 10 0 609 +422 282 1 -18 4184 4276 10 376 0 +423 268 113 21 2734 2823 10 0 937 +424 480 131 5 2740 2881 10 0 856 +425 429 67 16 2938 3040 10 0 888 +426 162 301 -23 6423 6601 10 272 0 +427 281 96 1 4532 4594 10 0 589 +428 495 199 -25 1363 1451 10 513 0 +429 372 115 -9 1463 1567 10 898 0 +430 396 83 -21 6362 6449 10 344 0 +431 239 486 3 5949 6028 10 0 801 +432 288 70 24 724 829 10 0 217 +433 66 163 6 1566 1718 10 0 362 +434 470 417 -16 2961 3053 10 162 0 +435 226 423 15 832 863 10 0 603 +436 342 319 36 419 502 10 0 351 +437 174 122 -26 2376 2491 10 323 0 +438 49 353 15 5810 5879 10 0 973 +439 448 495 -12 1519 1669 10 554 0 +440 13 465 31 3116 3193 10 0 398 +441 489 159 29 5723 5818 10 0 402 +442 311 203 -16 2892 3008 10 346 0 +443 480 119 -32 2515 2632 10 708 0 +444 442 153 -20 4765 4865 10 148 0 +445 148 462 -23 2906 3028 10 732 0 +446 233 87 18 966 1174 10 0 141 +447 323 34 -20 5244 5394 10 559 0 +448 84 377 -5 3699 3831 10 466 0 +449 292 32 14 888 1066 10 0 632 +450 418 75 11 1807 1896 10 0 894 +451 451 305 -14 779 889 10 594 0 +452 225 269 30 5082 5205 10 0 95 +453 272 420 -17 5515 5691 10 681 0 +454 318 280 21 254 340 10 0 840 +455 250 57 26 2995 3110 10 0 574 +456 77 372 19 788 905 10 0 111 +457 385 58 24 1661 1697 10 0 146 +458 44 496 -9 1594 1740 10 924 0 +459 460 328 -17 872 1001 10 846 0 +460 67 24 -21 4083 4184 10 925 0 +461 91 27 -8 4699 4874 10 169 0 +462 360 284 19 2660 2792 10 0 965 +463 82 183 17 4444 4490 10 0 343 +464 153 362 -26 4647 4762 10 616 0 +465 52 412 -8 5608 5758 10 88 0 +466 32 191 5 2344 2465 10 0 448 +467 325 147 -22 4777 4836 10 957 0 +468 328 458 -5 3099 3164 10 382 0 +469 133 273 20 419 535 10 0 30 +470 147 30 -18 4424 4565 10 672 0 +471 131 246 17 3348 3429 10 0 607 +472 433 319 -24 5509 5621 10 852 0 +473 168 59 6 1482 1566 10 0 70 +474 218 403 -15 5305 5368 10 989 0 +475 295 89 -35 2983 3072 10 816 0 +476 118 314 -33 1315 1505 10 984 0 +477 251 63 -14 3981 4039 10 943 0 +478 388 44 -14 4519 4647 10 234 0 +479 381 328 -18 2868 2990 10 353 0 +480 132 32 18 3138 3257 10 0 518 +481 334 403 26 620 776 10 0 494 +482 83 290 -15 2421 2560 10 653 0 +483 411 396 23 3667 3814 10 0 974 +484 243 402 13 1632 1729 10 0 335 +485 52 18 -8 3438 3537 10 133 0 +486 265 0 -24 3570 3718 10 608 0 +487 268 288 -4 5075 5181 10 709 0 +488 476 61 -5 1780 1930 10 673 0 +489 283 438 3 939 1032 10 0 332 +490 191 215 17 211 338 10 0 497 +491 253 50 27 921 1005 10 0 738 +492 71 282 29 2583 2670 10 0 47 +493 297 304 4 227 345 10 0 96 +494 244 368 -26 1648 1785 10 481 0 +495 80 279 19 4586 4795 10 0 171 +496 488 96 22 4264 4386 10 0 119 +497 142 30 -17 5002 5085 10 490 0 +498 68 240 -20 3176 3300 10 150 0 +499 193 138 30 2639 2768 10 0 525 +500 451 62 5 1139 1240 10 0 878 +501 138 406 -14 4892 4956 10 827 0 +502 306 42 -30 1944 1989 10 512 0 +503 247 219 17 81 169 10 0 873 +504 98 29 -8 4209 4284 10 51 0 +505 102 6 -3 5820 5968 10 918 0 +506 142 360 -10 6124 6252 10 56 0 +507 172 24 17 5814 5924 10 0 158 +508 352 241 -13 3178 3280 10 408 0 +509 486 324 15 3109 3168 10 0 123 +510 133 455 -4 3222 3362 10 657 0 +511 440 292 24 3776 3864 10 0 577 +512 364 173 30 700 862 10 0 502 +513 442 289 25 744 903 10 0 428 +514 48 412 7 4156 4220 10 0 762 +515 344 70 24 4542 4743 10 0 844 +516 78 406 -21 3818 3986 10 807 0 +517 329 456 19 1008 1104 10 0 199 +518 157 38 -18 4186 4316 10 480 0 +519 374 260 -23 7081 7238 10 410 0 +520 297 283 -15 5386 5529 10 261 0 +521 210 113 28 2778 2864 10 0 781 +522 215 434 -14 752 909 10 583 0 +523 262 92 -10 2507 2657 10 778 0 +524 140 108 -15 4280 4409 10 12 0 +525 235 108 -30 4307 4449 10 499 0 +526 210 133 -33 2767 2862 10 275 0 +527 25 53 -15 4088 4193 10 868 0 +528 339 113 -14 3050 3154 10 238 0 +529 394 310 -29 4410 4498 10 28 0 +530 126 391 19 1099 1203 10 0 303 +531 343 34 7 2882 3036 10 0 552 +532 354 416 -28 2719 2836 10 641 0 +533 202 391 -24 2497 2611 10 843 0 +534 367 97 17 3968 4055 10 0 14 +535 188 151 -1 5223 5270 10 605 0 +536 111 178 18 593 659 10 0 289 +537 456 157 -21 5788 5972 10 742 0 +538 441 7 20 1563 1690 10 0 78 +539 270 337 -10 7160 7222 10 759 0 +540 323 29 7 4533 4687 10 0 838 +541 200 78 -15 3981 4080 10 842 0 +542 330 281 14 5336 5427 10 0 881 +543 438 488 -13 1304 1433 10 573 0 +544 161 416 -13 4036 4173 10 107 0 +545 30 97 23 4851 4951 10 0 995 +546 273 70 36 2458 2617 10 0 942 +547 214 245 8 97 193 10 0 851 +548 221 291 9 184 305 10 0 876 +549 79 467 22 1400 1531 10 0 633 +550 423 315 12 706 855 10 0 615 +551 395 474 -12 1545 1670 10 564 0 +552 481 207 -7 3447 3521 10 531 0 +553 199 203 -20 5851 5928 10 994 0 +554 497 483 12 1407 1541 10 0 439 +555 449 428 -14 4966 5129 10 82 0 +556 100 266 5 1897 1981 10 0 186 +557 214 274 -24 5490 5583 10 40 0 +558 16 68 11 1105 1267 10 0 697 +559 475 198 20 3335 3466 10 0 447 +560 371 427 -7 3811 3974 10 13 0 +561 62 375 16 1410 1500 10 0 232 +562 163 472 -17 2611 2736 10 37 0 +563 13 314 14 985 1086 10 0 859 +564 376 385 12 640 837 10 0 551 +565 231 29 -18 4896 5035 10 701 0 +566 89 358 23 4950 5147 10 0 202 +567 331 356 13 2859 2956 10 0 181 +568 365 190 22 5897 6043 10 0 779 +569 256 441 -13 722 807 10 72 0 +570 120 37 -10 3087 3236 10 619 0 +571 349 43 26 855 980 10 0 717 +572 230 487 -11 4552 4605 10 265 0 +573 489 457 13 1264 1386 10 0 543 +574 341 72 -26 3243 3315 10 455 0 +575 181 441 -27 2177 2278 10 280 0 +576 306 229 10 5287 5396 10 0 830 +577 492 326 -24 4863 4890 10 511 0 +578 347 459 25 1931 2024 10 0 714 +579 66 88 2 3302 3455 10 0 360 +580 272 234 -34 6353 6489 10 23 0 +581 134 194 -13 6631 6703 10 305 0 +582 320 211 -13 3985 4076 10 2 0 +583 214 311 14 225 341 10 0 522 +584 489 274 31 2132 2258 10 0 69 +585 231 410 -30 4917 5095 10 754 0 +586 432 199 -9 2551 2678 10 68 0 +587 29 358 23 2425 2581 10 0 655 +588 62 236 -17 2238 2345 10 835 0 +589 333 163 -1 4973 5068 10 427 0 +590 364 71 -2 5374 5533 10 340 0 +591 125 65 -2 3170 3257 10 648 0 +592 429 476 23 2314 2392 10 0 419 +593 161 275 21 5370 5524 10 0 144 +594 365 274 14 395 545 10 0 451 +595 117 110 -16 3898 4052 10 45 0 +596 166 345 14 4517 4642 10 0 338 +597 345 146 27 5727 5905 10 0 27 +598 324 99 10 1368 1455 10 0 367 +599 72 477 -12 1061 1246 10 832 0 +600 487 320 -31 3448 3534 10 262 0 +601 120 17 30 1117 1235 10 0 236 +602 1 252 5 1103 1218 10 0 1000 +603 303 186 -15 5422 5531 10 435 0 +604 428 302 -11 4064 4183 10 726 0 +605 264 135 1 3525 3630 10 0 535 +606 223 178 -15 4566 4645 10 132 0 +607 174 347 -17 4047 4191 10 471 0 +608 238 123 24 3144 3225 10 0 486 +609 187 61 -23 2155 2325 10 421 0 +610 52 303 25 1750 1899 10 0 941 +611 89 185 16 2401 2517 10 0 44 +612 341 59 -23 3156 3282 10 991 0 +613 89 65 16 2863 3019 10 0 774 +614 495 355 -23 4981 5084 10 958 0 +615 368 452 -12 2673 2806 10 550 0 +616 164 473 26 1149 1340 10 0 464 +617 171 34 -26 4579 4685 10 663 0 +618 114 460 14 4371 4437 10 0 895 +619 224 3 10 2774 2869 10 0 570 +620 472 57 -24 5178 5301 10 630 0 +621 448 404 15 2407 2505 10 0 101 +622 390 120 -29 4036 4117 10 363 0 +623 386 225 13 3654 3815 10 0 733 +624 301 239 31 169 248 10 0 803 +625 115 296 -10 6112 6239 10 665 0 +626 69 266 -15 2997 3190 10 375 0 +627 115 395 -22 3274 3368 10 910 0 +628 68 53 16 2941 3088 10 0 418 +629 33 268 18 2751 2936 10 0 225 +630 450 45 24 2005 2144 10 0 620 +631 351 5 12 1997 2091 10 0 63 +632 351 148 -14 1838 1971 10 449 0 +633 80 458 -22 1515 1569 10 549 0 +634 60 5 -15 4166 4304 10 52 0 +635 10 407 36 1758 1838 10 0 176 +636 497 18 -14 4520 4641 10 659 0 +637 437 98 -21 4480 4549 10 769 0 +638 130 494 6 3036 3154 10 0 196 +639 391 202 14 517 674 10 0 308 +640 43 210 20 805 881 10 0 53 +641 381 457 28 1895 1991 10 0 532 +642 449 190 -19 4533 4707 10 342 0 +643 429 169 -22 3607 3735 10 328 0 +644 105 140 27 678 779 10 0 866 +645 282 10 30 5031 5181 10 0 962 +646 20 480 -2 2297 2385 10 264 0 +647 61 170 -23 4010 4156 10 938 0 +648 210 81 2 1566 1746 10 0 591 +649 87 311 7 609 784 10 0 292 +650 309 29 11 5161 5310 0 0 1002 +651 397 57 -7 5876 6052 10 724 0 +652 337 232 -23 6266 6418 10 935 0 +653 262 369 15 513 641 10 0 482 +654 41 232 16 846 917 10 0 736 +655 69 414 -23 5007 5220 10 587 0 +656 149 98 -7 4664 4777 10 283 0 +657 207 487 4 2767 2868 10 0 510 +658 366 260 -9 6048 6234 10 940 0 +659 497 54 14 3918 4027 10 0 636 +660 210 379 -6 2834 2957 10 231 0 +661 437 19 -19 4047 4185 10 853 0 +662 181 260 23 219 338 10 0 767 +663 125 61 26 2460 2554 10 0 617 +664 368 311 -8 3709 3820 10 34 0 +665 80 400 10 5772 5918 10 0 625 +666 75 118 21 1629 1763 10 0 306 +667 171 303 -5 6334 6501 10 768 0 +668 80 251 -21 1215 1334 10 7 0 +669 455 168 -24 3501 3554 10 310 0 +670 215 129 -19 4479 4589 10 913 0 +671 179 318 -36 4519 4567 10 134 0 +672 187 73 18 1154 1303 10 0 470 +673 394 47 5 1223 1401 10 0 488 +674 31 175 -37 1021 1071 10 934 0 +675 339 144 13 4424 4487 10 0 361 +676 492 34 5 3242 3362 10 0 416 +677 387 349 9 627 726 10 0 334 +678 142 372 18 605 699 10 0 405 +679 291 213 -28 5018 5163 10 216 0 +680 421 387 -20 3211 3318 10 153 0 +681 274 403 17 3526 3693 10 0 453 +682 434 359 -29 5585 5673 10 864 0 +683 257 57 -22 4913 5015 10 331 0 +684 428 202 -10 3627 3723 10 298 0 +685 355 174 -31 2847 2996 10 145 0 +686 46 389 22 1034 1140 10 0 889 +687 44 440 -8 3131 3298 10 124 0 +688 491 369 -29 2891 3065 10 755 0 +689 33 286 -19 6225 6263 10 277 0 +690 351 128 15 5010 5136 10 0 35 +691 485 428 -10 5977 6062 10 713 0 +692 273 149 -15 5987 6154 10 744 0 +693 447 184 -31 1699 1816 10 798 0 +694 386 245 16 1954 1998 10 0 189 +695 323 77 36 5590 5771 10 0 165 +696 21 70 -12 3065 3224 10 22 0 +697 9 101 -11 2678 2771 10 558 0 +698 71 304 19 2745 2888 10 0 304 +699 43 360 -20 3339 3463 10 54 0 +700 396 417 -13 3261 3340 10 972 0 +701 158 24 18 2419 2590 10 0 565 +702 164 320 -19 4355 4523 10 384 0 +703 195 386 13 508 666 10 0 266 +704 306 235 25 172 291 10 0 396 +705 66 314 26 723 835 10 0 406 +706 95 64 -17 3083 3164 10 295 0 +707 348 348 23 3705 3893 10 0 205 +708 495 83 32 1734 1912 10 0 443 +709 61 214 4 1309 1545 10 0 487 +710 240 240 -29 6820 6897 10 947 0 +711 140 137 -17 2276 2401 10 77 0 +712 242 106 -20 5097 5171 10 365 0 +713 392 491 10 4542 4641 10 0 691 +714 342 481 -25 5769 5871 10 578 0 +715 478 300 -2 3589 3648 10 352 0 +716 299 285 3 4991 5160 10 0 179 +717 481 84 -26 2011 2154 10 571 0 +718 271 128 -23 1378 1507 10 193 0 +719 484 224 -24 1204 1312 10 917 0 +720 441 177 -13 4022 4107 10 64 0 +721 46 163 -8 3734 3795 10 174 0 +722 493 493 -8 3457 3515 10 988 0 +723 253 74 -13 5375 5546 10 300 0 +724 390 34 7 4201 4401 10 0 651 +725 374 306 4 3992 4081 10 0 156 +726 436 295 11 2136 2211 10 0 604 +727 371 315 -35 4679 4767 10 254 0 +728 27 464 21 5135 5313 10 0 907 +729 3 471 -18 2828 2979 10 106 0 +730 418 269 -24 4835 4924 10 356 0 +731 90 477 18 1086 1136 10 0 920 +732 141 426 23 2110 2261 10 0 445 +733 418 251 -13 4770 4925 10 623 0 +734 57 183 -20 4375 4548 10 401 0 +735 29 462 -18 5256 5340 10 291 0 +736 55 318 -16 1250 1365 10 654 0 +737 18 24 32 2551 2596 10 0 909 +738 263 153 -27 1628 1791 10 491 0 +739 289 220 -21 145 248 10 116 0 +740 84 255 -22 1096 1280 10 395 0 +741 159 299 12 4067 4178 10 0 896 +742 485 104 21 3162 3314 10 0 537 +743 178 135 -6 6044 6187 10 348 0 +744 389 255 15 3143 3259 10 0 692 +745 457 280 -2 4013 4105 10 770 0 +746 171 24 -18 5575 5612 10 267 0 +747 330 371 -15 2213 2375 10 313 0 +748 10 237 -25 2463 2588 10 293 0 +749 458 213 -10 4509 4637 10 347 0 +750 257 391 -12 6547 6637 10 863 0 +751 482 184 -7 4437 4538 10 403 0 +752 222 331 -19 2158 2279 10 172 0 +753 332 5 -14 4110 4272 10 112 0 +754 47 208 30 924 1007 10 0 585 +755 489 437 29 2809 2965 10 0 688 +756 165 59 -32 3762 3901 10 951 0 +757 211 446 -27 4460 4647 10 902 0 +758 225 488 28 2540 2664 10 0 322 +759 355 485 10 5887 6066 10 0 539 +760 441 374 10 873 1034 10 0 24 +761 399 175 13 3020 3076 10 0 167 +762 103 464 -7 5092 5211 10 514 0 +763 244 13 24 4068 4156 10 0 383 +764 51 360 -18 4565 4712 10 139 0 +765 44 115 -22 944 1027 10 826 0 +766 312 453 6 2180 2337 10 0 1 +767 64 198 -23 4346 4482 10 662 0 +768 67 451 5 4875 4969 10 0 667 +769 371 71 21 1116 1298 10 0 637 +770 439 156 2 2101 2225 10 0 745 +771 105 474 27 1883 2003 10 0 175 +772 366 288 29 2747 2843 10 0 903 +773 415 207 -25 3588 3731 10 151 0 +774 58 39 -16 4615 4808 10 613 0 +775 197 202 29 4784 4966 10 0 336 +776 442 5 16 1262 1421 10 0 800 +777 71 12 -7 1177 1286 10 818 0 +778 74 215 10 871 1080 10 0 523 +779 347 192 -22 5930 6096 10 568 0 +780 178 420 -10 4290 4401 10 276 0 +781 186 135 -28 2849 3012 10 521 0 +782 176 199 28 302 416 10 0 385 +783 438 5 -30 2201 2311 10 847 0 +784 150 68 -16 1710 1793 10 899 0 +785 185 434 -10 2326 2383 10 391 0 +786 215 79 5 860 1048 10 0 808 +787 177 486 -17 6397 6501 10 330 0 +788 49 437 -1 1698 1842 10 89 0 +789 100 66 -25 5543 5775 10 204 0 +790 35 344 -1 3418 3607 10 208 0 +791 433 447 20 3179 3294 10 0 122 +792 372 97 13 838 992 10 0 91 +793 344 203 14 708 751 10 0 378 +794 423 170 -12 2022 2203 10 812 0 +795 171 188 -24 2481 2604 10 170 0 +796 64 5 14 4493 4658 10 0 891 +797 371 163 -21 3328 3414 10 404 0 +798 398 210 31 606 621 10 0 693 +799 48 437 4 3166 3384 10 0 130 +800 392 1 -16 2419 2543 10 776 0 +801 195 464 -3 6160 6291 10 431 0 +802 211 248 26 69 243 10 0 930 +803 293 228 -31 133 253 10 624 0 +804 23 235 -26 4086 4220 10 209 0 +805 213 185 21 233 366 10 0 104 +806 172 292 17 370 485 10 0 389 +807 228 287 21 97 248 10 0 516 +808 387 394 -5 4357 4544 10 786 0 +809 374 232 33 457 546 10 0 11 +810 48 366 29 2966 3098 10 0 933 +811 44 311 27 1631 1749 10 0 71 +812 447 272 12 1559 1631 10 0 794 +813 132 477 25 1310 1429 10 0 187 +814 80 117 -28 3328 3385 10 239 0 +815 11 403 -25 1416 1448 10 257 0 +816 144 220 35 365 517 10 0 475 +817 473 491 23 1654 1772 10 0 164 +818 210 219 7 134 271 10 0 777 +819 452 484 -17 5136 5212 10 121 0 +820 365 28 -9 1100 1165 10 850 0 +821 498 456 -5 5611 5757 10 85 0 +822 84 453 -13 4911 4993 10 21 0 +823 91 427 14 3548 3633 10 0 857 +824 178 72 23 3035 3139 10 0 173 +825 409 155 -36 675 807 10 220 0 +826 132 151 22 516 716 10 0 765 +827 136 430 14 2828 2973 10 0 501 +828 292 104 26 1227 1324 10 0 409 +829 443 167 -19 2211 2254 10 371 0 +830 321 149 -10 5683 5834 10 576 0 +831 235 13 27 1412 1578 10 0 309 +832 166 440 12 772 890 10 0 599 +833 112 433 29 946 1055 10 0 288 +834 452 172 -18 2443 2542 10 993 0 +835 37 281 17 1940 2125 10 0 588 +836 414 378 -30 1961 2117 10 314 0 +837 475 352 33 1231 1367 10 0 285 +838 400 71 -7 5522 5574 10 540 0 +839 286 244 -22 5150 5242 10 4 0 +840 429 389 -21 1700 1812 10 454 0 +841 92 76 4 4598 4634 10 0 166 +842 124 111 15 3160 3275 10 0 541 +843 268 458 24 2100 2204 10 0 533 +844 352 63 -24 4718 4827 10 515 0 +845 49 118 -18 4297 4394 10 43 0 +846 398 329 17 646 697 10 0 459 +847 382 9 30 1118 1176 10 0 783 +848 229 322 -14 6635 6767 10 149 0 +849 279 355 9 695 756 10 0 198 +850 266 221 9 80 185 10 0 820 +851 142 80 -8 1980 2076 10 547 0 +852 359 287 24 396 524 10 0 472 +853 482 104 19 3240 3339 10 0 661 +854 284 457 17 6018 6090 10 0 964 +855 64 294 12 4402 4528 10 0 919 +856 404 59 -5 3656 3768 10 424 0 +857 68 160 -14 4579 4628 10 823 0 +858 211 411 15 4631 4662 10 0 60 +859 30 155 -14 5129 5235 10 563 0 +860 240 34 -28 6247 6349 10 325 0 +861 107 374 -40 3642 3792 10 931 0 +862 404 140 8 5063 5126 10 0 105 +863 436 467 12 2950 3059 10 0 750 +864 421 386 29 3310 3404 10 0 682 +865 182 480 -5 1457 1581 10 316 0 +866 9 233 -27 1227 1343 10 644 0 +867 110 251 23 2007 2095 10 0 321 +868 19 38 15 3376 3521 10 0 527 +869 46 248 -23 3237 3394 10 286 0 +870 308 199 14 5986 6201 0 0 1005 +871 423 221 9 1022 1164 10 0 79 +872 313 391 5 600 716 10 0 301 +873 413 345 -17 4872 4993 10 503 0 +874 278 450 -8 5504 5615 10 221 0 +875 94 497 -22 3132 3246 10 327 0 +876 7 382 -9 3053 3231 10 548 0 +877 493 111 26 2162 2286 10 0 26 +878 392 87 -5 4730 4851 10 500 0 +879 13 394 15 1470 1630 10 0 135 +880 259 301 25 383 528 10 0 358 +881 351 233 -14 5692 5811 10 542 0 +882 313 493 -10 4784 4880 10 315 0 +883 65 62 15 3883 4048 10 0 118 +884 417 212 -11 3665 3736 10 928 0 +885 450 194 -12 2495 2623 10 15 0 +886 470 138 16 5531 5704 10 0 100 +887 190 267 36 7024 7126 0 0 1004 +888 248 214 -16 5955 5999 10 425 0 +889 50 383 -22 1056 1145 10 686 0 +890 244 422 14 2134 2288 10 0 103 +891 60 29 -14 5461 5560 10 796 0 +892 5 445 -21 1230 1377 10 364 0 +893 490 276 -15 961 1061 10 73 0 +894 441 100 -11 3496 3611 10 450 0 +895 162 388 -14 4545 4584 10 618 0 +896 244 277 -12 5204 5326 10 741 0 +897 406 408 15 5799 5971 10 0 86 +898 265 240 9 21 123 10 0 429 +899 130 186 16 513 656 10 0 784 +900 382 110 -20 4427 4592 10 921 0 +901 142 14 18 3349 3452 10 0 237 +902 352 487 27 3600 3735 10 0 757 +903 307 52 -29 3703 3781 10 772 0 +904 418 399 20 1739 1882 10 0 388 +905 196 56 -12 2398 2597 10 960 0 +906 66 31 25 4214 4293 10 0 967 +907 90 496 -21 5617 5665 10 728 0 +908 480 136 22 937 1116 10 0 259 +909 65 82 -32 2966 3071 10 737 0 +910 48 293 22 1120 1208 10 0 627 +911 105 181 -22 6144 6225 10 182 0 +912 215 282 -35 5764 5879 10 368 0 +913 257 133 19 3418 3600 10 0 670 +914 77 465 -11 1029 1179 10 228 0 +915 43 135 31 882 1013 10 0 138 +916 27 444 22 4290 4472 10 0 93 +917 357 290 24 359 554 10 0 719 +918 38 15 3 4314 4535 10 0 505 +919 80 337 -12 4483 4590 10 855 0 +920 36 451 -18 3538 3692 10 731 0 +921 291 251 20 129 200 10 0 900 +922 195 111 15 3991 4114 10 0 243 +923 383 17 -9 3765 3879 10 319 0 +924 53 466 9 1332 1468 10 0 458 +925 114 102 21 2058 2121 10 0 460 +926 350 199 21 4787 4945 10 0 190 +927 405 349 15 2084 2215 10 0 109 +928 472 248 11 3363 3432 10 0 884 +929 333 293 27 2494 2563 10 0 50 +930 174 397 -26 4978 5099 10 802 0 +931 2 264 40 2617 2739 10 0 861 +932 7 82 25 1643 1770 10 0 10 +933 34 329 -29 4172 4292 10 810 0 +934 158 179 37 373 557 10 0 674 +935 421 499 23 5363 5519 10 0 652 +936 345 431 12 1372 1507 10 0 115 +937 370 262 -21 4371 4545 10 423 0 +938 77 172 23 3160 3244 10 0 647 +939 87 51 -26 2052 2181 10 258 0 +940 468 352 9 3031 3235 10 0 658 +941 63 420 -25 2071 2206 10 610 0 +942 347 184 -36 4316 4433 10 546 0 +943 206 174 14 3201 3318 10 0 477 +944 209 212 18 6142 6200 0 0 1001 +945 466 362 -27 4595 4744 10 99 0 +946 201 278 13 170 282 10 0 307 +947 206 172 29 3131 3293 10 0 710 +948 471 94 30 3994 4117 10 0 65 +949 331 134 -12 4479 4631 10 354 0 +950 274 261 -5 6817 6959 10 252 0 +951 219 215 32 116 259 10 0 756 +952 349 76 -21 4121 4244 10 227 0 +953 86 189 21 906 1028 10 0 987 +954 336 493 20 5960 6103 10 0 154 +955 7 194 29 3784 3947 10 0 125 +956 492 335 -9 3316 3430 10 159 0 +957 248 386 22 1510 1636 10 0 467 +958 463 406 23 3439 3540 10 0 614 +959 199 438 -12 5429 5575 10 413 0 +960 135 30 12 1883 2032 10 0 905 +961 447 267 -13 3910 4046 10 242 0 +962 235 33 -30 5315 5501 10 645 0 +963 63 155 7 3856 3981 10 0 400 +964 294 421 -17 6292 6431 10 854 0 +965 318 99 -19 4854 4969 10 462 0 +966 21 146 21 1941 2073 10 0 48 +967 30 7 -25 4734 4895 10 906 0 +968 410 399 25 983 1007 10 0 341 +969 405 187 34 4994 5131 10 0 97 +970 109 56 27 905 1013 10 0 16 +971 212 47 20 3234 3295 10 0 157 +972 479 387 13 1620 1680 10 0 700 +973 167 291 -15 6546 6649 10 438 0 +974 259 498 -23 4294 4425 10 483 0 +975 461 182 13 2540 2612 10 0 233 +976 277 428 7 1931 2112 10 0 978 +977 290 328 7 555 714 10 0 297 +978 146 313 -7 4793 4890 10 976 0 +979 40 304 -32 4559 4718 10 129 0 +980 56 268 -26 4268 4364 10 399 0 +981 104 28 -15 5877 6027 10 240 0 +982 370 493 -7 2283 2407 10 128 0 +983 136 265 12 390 530 10 0 397 +984 247 306 33 182 266 10 0 476 +985 241 38 16 2127 2246 10 0 55 +986 180 162 9 653 855 10 0 41 +987 253 118 -21 2191 2307 10 953 0 +988 413 391 8 876 981 10 0 722 +989 380 350 15 3462 3589 10 0 474 +990 391 112 -28 4039 4084 10 136 0 +991 86 199 23 1114 1228 10 0 612 +992 91 326 -4 3868 3958 10 160 0 +993 287 256 18 61 239 10 0 834 +994 203 211 20 5241 5330 10 0 553 +995 79 80 -23 5527 5650 10 545 0 +996 32 319 21 1621 1703 10 0 126 +997 167 445 7 5656 5761 10 0 177 +998 439 237 -8 3811 3817 10 102 0 +999 373 418 6 5034 5161 10 0 58 +1000 26 342 -5 1298 1390 10 602 0 +1001 209 212 -18 6142 6200 10 944 0 +1002 309 29 -11 5161 5310 10 650 0 +1003 307 249 -10 5511 5622 10 19 0 +1004 190 267 -36 7024 7126 10 887 0 +1005 308 199 -14 5986 6201 10 870 0 +1006 195 273 -22 156 320 10 349 0 diff --git a/jsprit-instances/instances/lilim/1000/LR21010.txt b/jsprit-instances/instances/lilim/1000/LR21010.txt new file mode 100644 index 00000000..c2c8d11b --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR21010.txt @@ -0,0 +1,1006 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 14 2152 2659 10 0 747 +2 325 56 13 3028 3463 10 0 948 +3 290 145 -24 4953 5419 10 781 0 +4 340 291 -13 1697 2187 10 61 0 +5 370 382 -21 3388 3802 10 364 0 +6 273 255 -27 5782 6275 10 693 0 +7 36 301 21 652 1108 10 0 938 +8 117 178 -21 4282 4776 10 225 0 +9 295 283 -17 3373 3894 10 33 0 +10 57 43 -15 3926 4381 10 883 0 +11 436 123 40 665 1136 10 0 702 +12 48 162 15 690 1168 10 0 789 +13 222 499 -45 3163 3720 10 175 0 +14 376 92 -24 3794 4251 10 990 0 +15 437 90 -9 2115 2684 10 68 0 +16 3 23 11 1432 1819 10 0 147 +17 94 40 24 4124 4541 10 0 463 +18 398 476 -23 1470 1994 10 817 0 +19 307 249 -3 5329 5803 10 730 0 +20 179 286 8 1144 1705 10 0 476 +21 0 356 13 4168 4642 10 0 426 +22 143 158 12 387 833 10 0 644 +23 413 476 -19 4578 4975 10 517 0 +24 371 488 -22 2138 2643 10 982 0 +25 415 118 19 650 1202 10 0 253 +26 440 77 14 3453 3971 10 0 724 +27 261 201 15 5895 6337 0 0 1003 +28 490 286 29 1912 2385 10 0 353 +29 309 161 23 2160 2627 10 0 520 +30 39 162 -11 2052 2589 10 62 0 +31 361 178 -12 3733 4167 10 309 0 +32 261 138 1 2279 2788 10 0 922 +33 447 383 17 696 1206 10 0 9 +34 346 354 8 3075 3584 10 0 664 +35 461 195 -23 5408 5873 10 720 0 +36 187 263 35 70 445 10 0 610 +37 130 247 17 264 697 10 0 754 +38 328 491 21 2544 3002 10 0 322 +39 161 276 8 375 813 10 0 910 +40 365 74 -9 3230 3677 10 574 0 +41 168 109 10 589 1166 10 0 473 +42 111 192 11 4624 5091 10 0 414 +43 87 213 -12 2338 2787 10 983 0 +44 45 166 22 3837 4389 10 0 859 +45 62 94 16 3641 4084 10 0 918 +46 348 476 19 4583 5110 10 0 854 +47 64 437 -2 3540 3925 10 307 0 +48 56 75 -15 5580 6041 10 696 0 +49 24 259 -18 1294 1786 10 345 0 +50 295 247 -31 5070 5478 10 541 0 +51 6 53 8 2183 2633 10 0 407 +52 15 11 -31 3649 4084 10 915 0 +53 179 497 -10 5493 5916 10 203 0 +54 67 352 -15 1310 1795 10 879 0 +55 317 45 -11 2484 2902 10 502 0 +56 40 278 10 4260 4695 10 0 667 +57 33 278 -26 5812 6205 10 209 0 +58 322 290 -18 5735 6216 10 229 0 +59 159 226 16 164 589 10 0 953 +60 208 445 22 5169 5610 10 0 907 +61 453 360 13 696 1152 10 0 4 +62 34 169 11 1703 2293 10 0 30 +63 436 25 -5 4963 5415 10 500 0 +64 393 98 13 2801 3339 10 0 695 +65 466 96 -9 5385 5800 10 871 0 +66 366 390 23 5102 5563 10 0 390 +67 303 78 12 488 951 10 0 432 +68 374 116 9 2124 2694 10 0 15 +69 424 288 13 4049 4530 10 0 577 +70 191 84 13 3278 3778 10 0 605 +71 59 276 -32 3378 3881 10 180 0 +72 215 293 13 55 517 10 0 90 +73 343 276 15 96 690 10 0 513 +74 488 173 -7 4623 5178 10 403 0 +75 452 110 14 1187 1656 10 0 659 +76 153 244 5 277 705 10 0 257 +77 176 200 -22 2005 2656 10 385 0 +78 498 171 12 4856 5316 10 0 568 +79 492 188 33 2660 3183 10 0 102 +80 177 156 25 478 979 10 0 289 +81 398 49 21 2953 3501 10 0 636 +82 497 296 14 2294 2726 10 0 242 +83 276 84 -23 2540 3030 10 193 0 +84 128 113 22 1261 1761 10 0 591 +85 422 498 -10 2546 3110 10 276 0 +86 460 424 -27 5618 6139 10 821 0 +87 246 314 -23 5596 6086 10 115 0 +88 0 422 -6 3106 3583 10 231 0 +89 166 247 1 139 533 10 0 765 +90 311 422 -13 3774 4249 10 72 0 +91 392 95 16 2866 3384 10 0 223 +92 460 117 -13 1928 2351 10 429 0 +93 28 467 -29 5161 5699 10 833 0 +94 375 145 -14 3489 4066 10 528 0 +95 240 255 -11 6294 6713 10 689 0 +96 440 436 -21 3405 3850 10 197 0 +97 454 201 16 5063 5497 10 0 652 +98 407 35 11 4968 5459 10 0 838 +99 420 383 -8 3750 4226 10 123 0 +100 264 180 -32 6521 7044 10 165 0 +101 440 294 -15 3660 4142 10 680 0 +102 500 228 -33 2948 3427 10 79 0 +103 144 331 -14 3539 4031 10 827 0 +104 98 2 -2 2175 2678 10 777 0 +105 461 186 -24 5874 6344 10 356 0 +106 68 450 18 2355 2826 10 0 762 +107 153 192 -24 3205 3840 10 457 0 +108 34 239 16 721 1150 10 0 236 +109 465 367 -17 3893 4441 10 121 0 +110 208 488 22 1700 2240 10 0 135 +111 93 413 -19 650 1160 10 405 0 +112 371 332 14 1906 2450 10 0 937 +113 231 167 15 97 584 10 0 339 +114 179 75 -27 2798 3241 10 831 0 +115 196 489 23 3918 4443 10 0 87 +116 280 245 21 30 420 10 0 856 +117 108 37 23 2020 2495 10 0 746 +118 1 101 8 4885 5293 10 0 240 +119 420 80 -10 4205 4689 10 298 0 +120 38 190 -26 978 1421 10 802 0 +121 470 405 17 3528 3998 10 0 109 +122 448 397 -29 3296 3748 10 755 0 +123 471 427 8 3059 3592 10 0 99 +124 146 376 8 782 1213 10 0 530 +125 12 358 -25 4692 5222 10 292 0 +126 175 422 -33 5612 6079 10 984 0 +127 297 131 25 4494 4949 10 0 743 +128 457 492 7 1933 2251 10 0 958 +129 69 423 -22 3006 3534 10 957 0 +130 97 288 -3 4940 5453 10 607 0 +131 172 314 9 2036 2447 10 0 780 +132 170 347 15 1526 2081 10 0 210 +133 103 123 8 1783 2255 10 0 869 +134 154 374 -10 3520 4095 10 445 0 +135 318 497 -22 3245 3706 10 110 0 +136 330 147 28 3250 3658 10 0 234 +137 241 180 -23 6611 7066 10 273 0 +138 174 67 -18 4935 5262 10 361 0 +139 235 288 18 40 437 10 0 766 +140 94 192 -15 4112 4650 10 397 0 +141 232 101 24 1237 1652 10 0 179 +142 28 180 34 1329 1876 10 0 174 +143 64 135 -12 3224 3841 10 387 0 +144 174 376 -11 5536 5939 10 895 0 +145 293 174 -9 165 534 10 850 0 +146 218 12 -14 1961 2511 10 793 0 +147 110 122 -11 5900 6290 10 16 0 +148 459 53 -20 4296 4801 10 357 0 +149 173 474 -33 4921 5479 10 974 0 +150 135 400 20 962 1546 10 0 757 +151 497 266 -2 2832 3268 10 770 0 +152 380 194 3 2684 3145 10 0 926 +153 495 227 20 1212 1660 10 0 441 +154 268 351 -26 6516 7004 10 964 0 +155 213 399 -34 725 1267 10 250 0 +156 448 414 23 4731 5170 10 0 935 +157 327 139 13 4858 5320 10 0 324 +158 151 81 -32 6039 6544 10 951 0 +159 425 448 9 2992 3484 10 0 819 +160 92 259 -35 1449 1866 10 368 0 +161 59 388 -18 2428 2995 10 815 0 +162 468 360 16 919 1394 10 0 707 +163 332 459 -16 1306 1764 10 346 0 +164 469 489 -26 2096 2468 10 481 0 +165 248 176 32 5414 5918 10 0 100 +166 174 41 -23 4993 5555 10 867 0 +167 343 205 26 2847 3412 10 0 969 +168 154 392 9 445 926 10 0 771 +169 92 18 -2 4307 4806 10 579 0 +170 250 328 -14 837 1272 10 583 0 +171 88 484 -15 5794 6251 10 474 0 +172 360 488 19 1084 1560 10 0 221 +173 156 65 22 3979 4439 10 0 326 +174 18 225 -34 2612 3039 10 142 0 +175 152 476 45 1854 2447 10 0 13 +176 176 470 -9 1976 2518 10 562 0 +177 195 450 16 5766 6242 10 0 801 +178 466 149 -2 4575 5033 10 642 0 +179 221 269 -24 4883 5361 10 141 0 +180 105 137 32 1551 2187 10 0 71 +181 284 319 17 3165 3489 10 0 189 +182 41 120 -20 2615 3073 10 640 0 +183 263 418 25 999 1348 10 0 301 +184 218 271 -18 6117 6593 10 672 0 +185 365 119 30 1342 1832 10 0 443 +186 89 322 21 3889 4396 10 0 338 +187 180 283 -10 2765 3305 10 752 0 +188 385 17 -36 3089 3501 10 488 0 +189 401 314 -17 3711 4221 10 181 0 +190 245 176 20 4737 5261 10 0 896 +191 251 238 27 12 486 10 0 828 +192 139 438 -18 706 1125 10 678 0 +193 236 126 23 239 759 10 0 83 +194 61 441 -26 1971 2498 10 616 0 +195 405 454 -23 5099 5445 10 483 0 +196 111 392 18 4467 5005 10 0 566 +197 373 421 21 761 1258 10 0 96 +198 247 443 17 1121 1642 10 0 282 +199 322 406 17 3194 3560 10 0 260 +200 412 478 -12 3680 4118 10 389 0 +201 374 346 -8 1474 2015 10 988 0 +202 122 422 -16 5614 6160 10 249 0 +203 261 359 10 231 645 10 0 53 +204 173 182 25 170 652 10 0 492 +205 398 341 33 3584 4050 10 0 207 +206 413 127 28 3136 3630 10 0 952 +207 325 311 -33 5147 5552 10 205 0 +208 80 357 -26 1914 2450 10 337 0 +209 67 378 26 1713 2171 10 0 57 +210 216 341 -15 2473 2879 10 132 0 +211 498 457 -23 3497 3928 10 592 0 +212 44 344 -22 4131 4625 10 327 0 +213 352 481 15 4983 5415 10 0 355 +214 237 420 -13 5142 5652 10 567 0 +215 389 43 -19 1398 1887 10 803 0 +216 292 136 28 2926 3438 10 0 422 +217 426 38 -24 2236 2753 10 630 0 +218 245 461 8 2394 2920 10 0 468 +219 415 253 -12 1280 1773 10 550 0 +220 298 264 36 50 490 10 0 846 +221 307 412 -19 1435 1914 10 172 0 +222 53 204 8 3964 4595 10 0 400 +223 480 152 -16 3902 4390 10 91 0 +224 262 97 17 3651 4046 10 0 617 +225 83 169 21 2898 3435 10 0 8 +226 377 432 20 3160 3611 10 0 681 +227 390 249 -33 2161 2613 10 893 0 +228 132 479 11 834 1227 10 0 549 +229 359 246 18 5517 5986 10 0 58 +230 314 205 -14 5894 6440 10 870 0 +231 124 448 6 1267 1801 10 0 88 +232 0 188 -40 3537 4040 10 931 0 +233 343 166 28 3282 3845 10 0 534 +234 482 141 -28 3907 4299 10 136 0 +235 162 306 22 356 717 10 0 811 +236 24 71 -16 1203 1685 10 108 0 +237 188 119 44 3762 4157 10 0 487 +238 100 85 14 1276 1652 10 0 582 +239 103 177 -22 2292 2840 10 395 0 +240 26 67 -8 5078 5576 10 118 0 +241 164 332 -20 4960 5397 10 572 0 +242 385 285 -14 3263 3801 10 82 0 +243 209 68 -17 6100 6565 10 507 0 +244 149 341 6 1451 1901 10 0 516 +245 415 95 -16 4488 5046 10 637 0 +246 167 488 -13 854 1266 10 703 0 +247 413 493 -20 4693 5172 10 791 0 +248 439 222 22 3765 4192 10 0 779 +249 150 484 16 2365 2756 10 0 202 +250 299 353 34 251 661 10 0 155 +251 273 300 30 55 479 10 0 872 +252 402 277 -19 5595 6033 10 961 0 +253 239 15 -19 2233 2718 10 25 0 +254 363 225 35 3249 3718 10 0 745 +255 65 343 38 608 1171 10 0 979 +256 351 60 15 582 1220 10 0 985 +257 60 246 -5 454 1066 10 76 0 +258 144 35 26 750 1167 10 0 427 +259 463 253 23 4006 4491 10 0 945 +260 332 382 -17 3942 4262 10 199 0 +261 408 318 15 2342 2922 10 0 388 +262 452 206 31 1774 2283 10 0 715 +263 471 368 19 1556 1989 10 0 927 +264 93 490 2 1350 1803 10 0 799 +265 241 402 11 3930 4389 10 0 997 +266 60 231 -5 3944 4383 10 466 0 +267 172 66 -13 4990 5552 10 300 0 +268 404 207 -29 3452 3952 10 864 0 +269 286 356 30 211 685 10 0 575 +270 489 338 -13 5372 5926 10 451 0 +271 334 481 32 1131 1633 10 0 615 +272 26 442 -7 5253 5619 10 788 0 +273 226 175 23 6612 7057 10 0 137 +274 488 3 -37 1395 1929 10 308 0 +275 178 150 33 2329 2844 10 0 499 +276 371 423 10 550 1138 10 0 85 +277 5 224 -19 4022 4535 10 698 0 +278 94 344 26 2548 3030 10 0 764 +279 153 235 10 144 641 10 0 697 +280 12 367 27 1161 1564 10 0 561 +281 217 357 -8 5488 5991 10 303 0 +282 255 487 -17 1377 1926 10 198 0 +283 149 214 7 1785 2191 10 0 608 +284 169 305 21 479 935 10 0 889 +285 487 446 -12 5194 5648 10 554 0 +286 267 374 23 2274 2652 10 0 713 +287 360 294 -18 5511 5950 10 311 0 +288 185 431 15 1389 1827 10 0 544 +289 325 210 -25 3542 4045 10 80 0 +290 175 352 -14 6500 6941 10 618 0 +291 76 462 -13 3652 4116 10 484 0 +292 19 273 25 3877 4376 10 0 125 +293 72 227 -20 2114 2516 10 469 0 +294 213 283 14 5692 6196 10 0 912 +295 130 140 -28 563 1109 10 782 0 +296 274 442 17 4079 4572 10 0 959 +297 337 41 -27 3816 4322 10 367 0 +298 372 39 10 2714 3194 10 0 119 +299 269 112 -16 4812 5409 10 899 0 +300 224 56 13 4542 5069 10 0 267 +301 340 416 -25 1095 1594 10 183 0 +302 13 214 21 5242 5707 10 0 394 +303 230 320 8 4538 5118 10 0 281 +304 6 196 -21 4641 5104 10 666 0 +305 87 3 13 5572 6012 10 0 995 +306 133 202 -4 1634 2170 10 709 0 +307 235 316 2 2417 2950 10 0 47 +308 435 180 37 660 1256 10 0 274 +309 173 65 12 1592 2116 10 0 31 +310 245 42 -21 2067 2432 10 769 0 +311 384 149 18 4544 5153 10 0 287 +312 51 286 14 5653 6138 10 0 625 +313 267 290 15 43 482 10 0 555 +314 453 318 30 1307 1802 10 0 904 +315 189 402 10 1967 2441 10 0 359 +316 210 276 5 47 405 10 0 1000 +317 120 261 5 3038 3429 10 0 329 +318 35 263 -23 878 1404 10 991 0 +319 429 59 9 1681 2109 10 0 651 +320 330 308 24 4508 4976 10 0 733 +321 58 391 -21 3313 3866 10 996 0 +322 260 472 -21 3981 4427 10 38 0 +323 217 333 26 1459 1950 10 0 501 +324 335 46 -13 5203 5651 10 157 0 +325 198 85 28 906 1315 10 0 987 +326 138 28 -22 4208 4684 10 173 0 +327 29 336 22 1199 1574 10 0 212 +328 200 27 22 1935 2383 10 0 521 +329 157 269 -5 6139 6591 10 317 0 +330 177 404 17 4873 5345 10 0 930 +331 202 28 22 3523 4071 10 0 348 +332 366 334 5 1453 1949 10 0 529 +333 149 458 13 4488 4943 10 0 372 +334 481 454 14 1077 1607 10 0 863 +335 377 385 -13 3309 3740 10 700 0 +336 217 207 -29 5382 5797 10 775 0 +337 96 346 26 566 1036 10 0 208 +338 224 320 -21 4951 5439 10 186 0 +339 206 97 -15 1567 2137 10 113 0 +340 438 127 -31 3617 4031 10 894 0 +341 494 468 31 1270 1669 10 0 551 +342 494 165 19 2277 2678 10 0 486 +343 5 281 -21 5384 5709 10 790 0 +344 441 60 -15 5629 6161 10 923 0 +345 14 232 18 1046 1515 10 0 49 +346 288 439 16 937 1370 10 0 163 +347 420 224 10 1509 2042 10 0 614 +348 267 162 -22 5682 6031 10 331 0 +349 195 273 22 59 470 10 0 660 +350 233 230 20 26 513 10 0 609 +351 382 360 -36 562 982 10 436 0 +352 406 460 2 2662 3211 10 0 380 +353 499 316 -29 2255 2840 10 28 0 +354 246 407 12 1077 1536 10 0 954 +355 283 454 -15 4878 5363 10 213 0 +356 426 231 24 3992 4356 10 0 105 +357 432 2 20 1656 2197 10 0 148 +358 404 439 3 745 1286 10 0 543 +359 397 477 -10 4693 5153 10 315 0 +360 44 140 11 3242 3825 10 0 470 +361 330 138 18 4241 4756 10 0 138 +362 39 153 26 3022 3480 10 0 814 +363 397 153 29 3379 3800 10 0 622 +364 226 316 21 70 560 10 0 5 +365 354 156 -10 3152 3627 10 598 0 +366 201 66 -27 4480 4974 10 756 0 +367 389 156 27 2704 3141 10 0 297 +368 134 211 35 335 748 10 0 160 +369 386 154 -14 4221 4706 10 753 0 +370 335 99 -24 4699 5168 10 515 0 +371 356 256 19 214 635 10 0 834 +372 240 362 -13 5513 5917 10 333 0 +373 412 100 1 1944 2283 10 0 478 +374 394 322 -15 3878 4441 10 989 0 +375 48 150 15 2427 2934 10 0 498 +376 225 121 -14 2734 3254 10 437 0 +377 102 422 23 729 1201 10 0 731 +378 339 41 6 1623 2142 10 0 526 +379 440 201 29 3386 3874 10 0 537 +380 411 379 -2 4573 5093 10 352 0 +381 219 210 14 50 591 10 0 601 +382 250 441 -31 2856 3310 10 865 0 +383 210 29 -30 4023 4503 10 795 0 +384 178 302 19 3417 3796 10 0 593 +385 148 208 22 1951 2381 10 0 77 +386 225 369 38 185 788 10 0 732 +387 16 287 12 922 1364 10 0 143 +388 450 416 -15 2115 2620 10 261 0 +389 287 397 12 2077 2558 10 0 200 +390 285 247 -23 4952 5367 10 66 0 +391 351 481 10 1083 1612 10 0 874 +392 243 408 15 5530 6060 10 0 539 +393 137 377 -12 412 948 10 832 0 +394 33 152 -21 5083 5597 10 302 0 +395 68 303 22 726 1165 10 0 239 +396 456 113 -24 4691 5246 10 684 0 +397 134 276 15 316 869 10 0 140 +398 26 221 -18 3787 4304 10 629 0 +399 79 257 26 3613 4132 10 0 767 +400 181 185 -8 6231 6799 10 222 0 +401 104 349 -25 3857 4336 10 510 0 +402 267 174 -5 6296 6770 10 602 0 +403 475 267 7 2958 3399 10 0 74 +404 385 239 21 2915 3489 10 0 511 +405 95 382 19 715 1254 10 0 111 +406 67 190 -14 4494 5012 10 504 0 +407 32 94 -8 3519 4043 10 51 0 +408 401 164 13 2334 2756 10 0 475 +409 376 113 -30 1895 2339 10 632 0 +410 409 255 -11 5871 6428 10 998 0 +411 228 260 -19 6253 6712 10 495 0 +412 363 34 -26 938 1361 10 571 0 +413 274 441 12 2593 3083 10 0 585 +414 146 188 -11 4814 5186 10 42 0 +415 212 186 -20 6721 7172 10 647 0 +416 432 66 -19 4113 4577 10 853 0 +417 83 300 26 1832 2285 10 0 857 +418 51 89 19 4652 5133 10 0 891 +419 379 486 -25 2578 2916 10 578 0 +420 440 284 -12 3170 3763 10 479 0 +421 175 239 23 82 524 10 0 556 +422 282 1 -28 4003 4457 10 216 0 +423 268 113 21 2580 2977 10 0 679 +424 480 131 5 2517 3104 10 0 975 +425 429 67 -11 2748 3229 10 450 0 +426 162 301 -13 6255 6770 10 21 0 +427 281 96 -26 4296 4831 10 258 0 +428 495 199 25 1231 1583 10 0 829 +429 372 115 13 1229 1801 10 0 92 +430 396 83 -22 6210 6602 10 908 0 +431 239 486 3 5694 6282 10 0 848 +432 288 70 -12 521 1032 10 67 0 +433 66 163 6 1429 1855 10 0 804 +434 470 417 11 2762 3253 10 0 722 +435 226 423 -25 608 1088 10 880 0 +436 342 319 36 274 647 10 0 351 +437 174 122 14 2231 2635 10 0 376 +438 49 353 -2 5554 6135 10 933 0 +439 448 495 40 1356 1833 10 0 808 +440 13 465 -9 2931 3377 10 924 0 +441 489 159 -20 5528 6013 10 153 0 +442 311 203 -26 2666 3235 10 877 0 +443 480 119 -30 2342 2806 10 185 0 +444 442 153 -11 4574 5055 10 928 0 +445 148 462 10 2759 3175 10 0 134 +446 233 87 18 852 1289 10 0 718 +447 323 34 13 5098 5540 10 0 597 +448 84 377 -11 3535 3996 10 627 0 +449 292 32 14 755 1199 10 0 619 +450 418 75 11 1545 2159 10 0 425 +451 451 305 13 607 1060 10 0 270 +452 225 269 30 4912 5374 10 0 557 +453 272 420 -9 5361 5846 10 548 0 +454 318 280 21 104 491 10 0 594 +455 250 57 26 2824 3281 10 0 525 +456 77 372 -17 670 1024 10 806 0 +457 385 58 24 1471 1888 10 0 107 +458 44 496 -11 1434 1901 10 914 0 +459 460 328 -4 701 1172 10 493 0 +460 67 24 -4 3945 4323 10 706 0 +461 91 27 -23 4508 5066 10 967 0 +462 360 284 19 2479 2973 10 0 929 +463 82 183 -24 4138 4796 10 17 0 +464 153 362 -14 4452 4958 10 596 0 +465 52 412 -21 5478 5889 10 728 0 +466 32 191 5 2154 2655 10 0 266 +467 325 147 -15 4576 5038 10 690 0 +468 328 458 -8 2856 3406 10 218 0 +469 133 273 20 215 739 10 0 293 +470 147 30 -11 4220 4770 10 360 0 +471 131 246 -29 3110 3667 10 947 0 +472 433 319 11 5359 5771 0 0 1002 +473 168 59 -10 1273 1775 10 41 0 +474 218 403 15 5086 5588 10 0 171 +475 295 89 -13 2786 3269 10 408 0 +476 118 314 -8 1209 1611 10 20 0 +477 251 63 -14 3744 4276 10 668 0 +478 388 44 -1 4374 4793 10 373 0 +479 381 328 12 2677 3181 10 0 420 +480 132 32 18 2931 3464 10 0 913 +481 334 403 26 468 929 10 0 164 +482 83 290 14 2248 2733 10 0 524 +483 411 396 23 3505 3976 10 0 195 +484 243 402 13 1430 1931 10 0 291 +485 52 18 -16 3264 3711 10 654 0 +486 265 0 -19 3410 3879 10 342 0 +487 268 288 -44 4880 5376 10 237 0 +488 476 61 36 1610 2099 10 0 188 +489 283 438 3 756 1215 10 0 843 +490 191 215 17 69 480 10 0 955 +491 253 50 27 739 1187 10 0 943 +492 71 282 -25 2378 2875 10 204 0 +493 297 304 4 71 591 10 0 459 +494 244 368 25 1517 1916 10 0 992 +495 80 279 19 4416 4966 10 0 411 +496 488 96 22 4112 4537 10 0 580 +497 142 30 -12 4826 5261 10 851 0 +498 68 240 -15 3017 3459 10 375 0 +499 193 138 -33 2439 2968 10 275 0 +500 451 62 5 975 1403 10 0 63 +501 138 406 -26 4720 5127 10 323 0 +502 306 42 11 1780 2153 10 0 55 +503 247 219 17 31 469 10 0 648 +504 98 29 14 4007 4486 10 0 406 +505 102 6 -15 5676 6111 10 868 0 +506 142 360 -25 5956 6420 10 646 0 +507 172 24 17 5638 6100 10 0 243 +508 352 241 5 2999 3459 10 0 884 +509 486 324 15 2911 3365 10 0 751 +510 133 455 25 3085 3499 10 0 401 +511 440 292 -21 3592 4049 10 404 0 +512 364 173 30 521 1040 10 0 671 +513 442 289 -15 611 1037 10 73 0 +514 48 412 -24 3933 4444 10 687 0 +515 344 70 24 4385 4901 10 0 370 +516 78 406 -6 3682 4122 10 244 0 +517 329 456 19 794 1318 10 0 23 +518 157 38 -7 4024 4478 10 649 0 +519 374 260 -18 6964 7355 10 773 0 +520 297 283 -23 5220 5696 10 29 0 +521 210 113 -22 2551 3091 10 328 0 +522 215 434 -9 594 1067 10 849 0 +523 262 92 -5 2359 2804 10 786 0 +524 140 108 -14 4120 4570 10 482 0 +525 235 108 -26 4155 4602 10 455 0 +526 210 133 -6 2607 3021 10 378 0 +527 25 53 23 3829 4452 10 0 774 +528 339 113 14 2795 3410 10 0 94 +529 394 310 -5 4217 4691 10 332 0 +530 126 391 -8 889 1412 10 124 0 +531 343 34 -12 2731 3187 10 631 0 +532 354 416 -7 2565 2990 10 976 0 +533 202 391 30 2309 2800 10 0 560 +534 367 97 -28 3786 4237 10 233 0 +535 188 151 7 4997 5497 10 0 710 +536 111 178 -8 358 894 10 547 0 +537 456 157 -29 5617 6143 10 379 0 +538 441 7 20 1364 1888 10 0 620 +539 270 337 -15 6954 7428 10 392 0 +540 323 29 -7 4347 4873 10 586 0 +541 200 78 31 3810 4252 10 0 50 +542 330 281 -9 5117 5647 10 677 0 +543 438 488 -3 1114 1624 10 358 0 +544 161 416 -15 3853 4357 10 288 0 +545 30 97 -24 4658 5144 10 674 0 +546 273 70 36 2304 2771 10 0 971 +547 214 245 8 36 515 10 0 536 +548 221 291 9 50 688 10 0 453 +549 79 467 -11 1231 1701 10 228 0 +550 423 315 12 523 1038 10 0 219 +551 395 474 -31 1341 1875 10 341 0 +552 481 207 -10 3142 3827 10 956 0 +553 199 203 20 5616 6163 10 0 944 +554 497 483 12 1238 1710 10 0 285 +555 449 428 -15 4843 5251 10 313 0 +556 100 266 -23 1695 2182 10 421 0 +557 214 274 -30 5335 5737 10 452 0 +558 16 68 11 940 1432 10 0 932 +559 475 198 -20 3113 3689 10 921 0 +560 371 427 -30 3661 4124 10 533 0 +561 62 375 -27 1185 1724 10 280 0 +562 163 472 9 2415 2933 10 0 176 +563 13 314 14 838 1233 10 0 611 +564 376 385 12 499 978 10 0 772 +565 231 29 -24 4762 5169 10 763 0 +566 89 358 -18 4794 5304 10 196 0 +567 331 356 13 2664 3150 10 0 214 +568 365 190 -12 5694 6245 10 78 0 +569 256 441 34 542 987 10 0 657 +570 120 37 28 2899 3424 10 0 949 +571 349 43 26 637 1199 10 0 412 +572 230 487 20 4351 4806 10 0 241 +573 489 457 13 1091 1559 10 0 641 +574 341 72 9 3042 3517 10 0 40 +575 181 441 -30 1901 2553 10 269 0 +576 306 229 10 5108 5575 10 0 716 +577 492 326 -13 4684 5069 10 69 0 +578 347 459 25 1760 2195 10 0 419 +579 66 88 2 3159 3598 10 0 169 +580 272 234 -22 6200 6643 10 496 0 +581 134 194 -19 6417 6916 10 911 0 +582 320 211 -14 3781 4279 10 238 0 +583 214 311 14 70 572 10 0 170 +584 489 274 -24 1923 2467 10 917 0 +585 231 410 -12 4742 5269 10 413 0 +586 432 199 7 2347 2881 10 0 540 +587 29 358 23 2241 2764 10 0 699 +588 62 236 -17 2020 2564 10 835 0 +589 333 163 -21 4774 5267 10 797 0 +590 364 71 -12 5190 5718 10 738 0 +591 125 65 -22 2989 3438 10 84 0 +592 429 476 23 2151 2556 10 0 211 +593 161 275 -19 5228 5666 10 384 0 +594 365 274 -21 193 747 10 454 0 +595 117 110 13 3762 4189 0 0 1004 +596 166 345 14 4338 4821 10 0 464 +597 345 146 -13 5598 6033 10 447 0 +598 324 99 10 1139 1684 10 0 365 +599 72 477 -25 965 1343 10 813 0 +600 487 320 21 3288 3694 10 0 669 +601 120 17 -14 947 1406 10 381 0 +602 1 252 5 869 1453 10 0 402 +603 303 186 -18 5177 5776 10 830 0 +604 428 302 27 3857 4391 10 0 682 +605 264 135 -13 3373 3782 10 70 0 +606 223 178 -17 4391 4820 10 670 0 +607 174 347 3 3896 4341 10 0 130 +608 238 123 -7 2966 3403 10 283 0 +609 187 61 -20 2028 2451 10 350 0 +610 52 303 -35 1567 2083 10 36 0 +611 89 185 -14 2200 2718 10 563 0 +612 341 59 27 3010 3429 10 0 844 +613 89 65 -32 2690 3193 10 737 0 +614 495 355 -10 4743 5322 10 347 0 +615 368 452 -32 2448 3032 10 271 0 +616 164 473 26 994 1495 10 0 194 +617 171 34 -17 4395 4870 10 224 0 +618 114 460 14 4076 4731 10 0 290 +619 224 3 -14 2627 3017 10 449 0 +620 472 57 -20 4984 5495 10 538 0 +621 448 404 -16 2200 2711 10 694 0 +622 390 120 -29 3822 4332 10 363 0 +623 386 225 -12 3484 3985 10 812 0 +624 301 239 31 52 582 10 0 798 +625 115 296 -14 5930 6421 10 312 0 +626 69 266 12 2828 3359 10 0 721 +627 115 395 11 3111 3530 10 0 448 +628 68 53 16 2830 3200 10 0 796 +629 33 268 18 2595 3091 10 0 398 +630 450 45 24 1850 2298 10 0 217 +631 351 5 12 1836 2252 10 0 531 +632 351 148 30 1626 2183 10 0 409 +633 80 458 30 1367 1717 10 0 665 +634 60 5 18 3992 4477 10 0 906 +635 10 407 36 1517 2079 10 0 810 +636 497 18 -21 4331 4830 10 81 0 +637 437 98 16 4224 4806 10 0 245 +638 130 494 6 2810 3381 10 0 861 +639 391 202 -25 385 806 10 704 0 +640 43 210 20 620 1066 10 0 182 +641 381 457 -13 1736 2149 10 573 0 +642 449 190 2 4432 4807 10 0 178 +643 429 169 8 3390 3952 10 0 749 +644 105 140 -12 490 966 10 22 0 +645 282 10 -11 4885 5328 10 650 0 +646 20 480 25 2087 2595 10 0 506 +647 61 170 20 3840 4326 10 0 415 +648 210 81 -17 1427 1885 10 503 0 +649 87 311 7 435 958 10 0 518 +650 309 29 11 4968 5504 10 0 645 +651 397 57 -9 5689 6238 10 319 0 +652 337 232 -16 6052 6632 10 97 0 +653 262 369 15 364 790 10 0 758 +654 41 232 16 639 1124 10 0 485 +655 69 414 -30 4903 5324 10 892 0 +656 149 98 4 4514 4927 10 0 860 +657 207 487 -34 2570 3064 10 569 0 +658 366 260 -24 5872 6409 10 900 0 +659 497 54 -14 3712 4233 10 75 0 +660 210 379 -22 2734 3056 10 349 0 +661 437 19 -11 3917 4314 10 800 0 +662 181 260 23 69 570 10 0 842 +663 125 61 26 2298 2717 10 0 901 +664 368 311 -8 3494 4034 10 34 0 +665 80 400 -30 5625 6066 10 633 0 +666 75 118 21 1439 1953 10 0 304 +667 171 303 -10 6171 6663 10 56 0 +668 80 251 14 1029 1519 10 0 477 +669 455 168 -21 3350 3705 10 600 0 +670 215 129 17 4252 4816 10 0 606 +671 179 318 -30 4276 4809 10 512 0 +672 187 73 18 967 1490 10 0 184 +673 394 47 -9 1089 1535 10 898 0 +674 31 175 24 795 1298 10 0 545 +675 339 144 -21 4247 4665 10 925 0 +676 492 34 -21 3026 3579 10 742 0 +677 387 349 9 434 918 10 0 542 +678 142 372 18 408 896 10 0 192 +679 291 213 -21 4815 5366 10 423 0 +680 421 387 15 3072 3457 10 0 101 +681 274 403 -20 3356 3863 10 226 0 +682 434 359 -27 5416 5842 10 604 0 +683 257 57 -15 4748 5179 10 942 0 +684 428 202 24 3458 3893 10 0 396 +685 355 174 33 2674 3169 10 0 903 +686 46 389 22 914 1260 10 0 736 +687 44 440 24 2974 3456 10 0 514 +688 491 369 -7 2753 3204 10 719 0 +689 33 286 11 6032 6456 10 0 95 +690 351 128 15 4837 5308 10 0 467 +691 485 428 -6 5730 6309 10 999 0 +692 273 149 -31 5728 6414 10 866 0 +693 447 184 27 1490 2025 10 0 6 +694 386 245 16 1718 2233 10 0 621 +695 323 77 -13 5451 5909 10 64 0 +696 21 70 15 2881 3409 10 0 48 +697 9 101 -10 2492 2957 10 279 0 +698 71 304 19 2548 3085 10 0 277 +699 43 360 -23 3173 3629 10 587 0 +700 396 417 13 3009 3592 10 0 335 +701 158 24 18 2236 2773 10 0 824 +702 164 320 -40 4201 4677 10 11 0 +703 195 386 13 310 863 10 0 246 +704 306 235 25 57 454 10 0 639 +705 66 314 26 605 953 10 0 845 +706 95 64 4 2886 3362 10 0 460 +707 348 348 -16 3521 4077 10 162 0 +708 495 83 32 1555 2091 10 0 783 +709 61 214 4 1195 1659 10 0 306 +710 240 240 -7 6641 7076 10 535 0 +711 140 137 -7 2048 2630 10 818 0 +712 242 106 -10 4922 5346 10 778 0 +713 392 491 -23 4364 4818 10 286 0 +714 342 481 -10 5599 6042 10 759 0 +715 478 300 -31 3393 3844 10 262 0 +716 299 285 -10 4829 5321 10 576 0 +717 481 84 -16 1875 2289 10 776 0 +718 271 128 -18 1193 1692 10 446 0 +719 484 224 7 1009 1507 10 0 688 +720 441 177 23 3808 4322 10 0 35 +721 46 163 -12 3514 4014 10 626 0 +722 493 493 -11 3219 3753 10 434 0 +723 253 74 -30 5222 5699 10 962 0 +724 390 34 -14 4015 4588 10 26 0 +725 374 306 4 3807 4266 10 0 873 +726 436 295 -18 1905 2442 10 993 0 +727 371 315 -25 4450 4997 10 968 0 +728 27 464 21 4997 5452 10 0 465 +729 3 471 13 2628 3178 10 0 768 +730 418 269 3 4705 5053 10 0 19 +731 90 477 -23 883 1338 10 377 0 +732 141 426 -38 1929 2442 10 386 0 +733 418 251 -24 4607 5087 10 320 0 +734 57 183 -7 4202 4721 10 963 0 +735 29 462 -19 5080 5516 10 941 0 +736 55 318 -22 1056 1559 10 686 0 +737 18 24 32 2330 2816 10 0 613 +738 263 153 12 1446 1973 10 0 590 +739 289 220 19 49 548 10 0 792 +740 84 255 -35 897 1478 10 816 0 +741 159 299 12 3860 4384 10 0 887 +742 485 104 21 2973 3503 10 0 676 +743 178 135 -25 5878 6353 10 127 0 +744 389 255 -24 2909 3492 10 852 0 +745 457 280 -35 3834 4284 10 254 0 +746 171 24 -23 5356 5831 10 117 0 +747 330 371 -14 2056 2532 10 1 0 +748 10 237 -37 2268 2784 10 934 0 +749 458 213 -8 4360 4786 10 643 0 +750 257 391 -20 6317 6867 10 787 0 +751 482 184 -15 4217 4758 10 509 0 +752 222 331 10 1983 2453 10 0 187 +753 332 5 14 3911 4472 10 0 369 +754 47 208 -17 708 1223 10 37 0 +755 489 437 29 2644 3131 10 0 122 +756 165 59 27 3560 4102 10 0 366 +757 211 446 -20 4310 4798 10 150 0 +758 225 488 -15 2340 2865 10 653 0 +759 355 485 10 5747 6206 10 0 714 +760 441 374 10 691 1216 10 0 837 +761 399 175 13 2775 3320 10 0 881 +762 103 464 -18 4958 5345 10 106 0 +763 244 13 24 3883 4342 10 0 565 +764 51 360 -26 4345 4932 10 278 0 +765 44 115 -1 720 1250 10 89 0 +766 312 453 -18 2044 2474 10 139 0 +767 64 198 -26 4208 4620 10 399 0 +768 67 451 -13 4690 5155 10 729 0 +769 371 71 21 974 1440 10 0 310 +770 439 156 2 1819 2507 10 0 151 +771 105 474 -9 1617 2268 10 168 0 +772 366 288 -12 2575 3015 10 564 0 +773 415 207 18 3423 3896 10 0 519 +774 58 39 -23 4430 4993 10 527 0 +775 197 202 29 4609 5141 10 0 336 +776 442 5 16 1122 1561 10 0 717 +777 71 12 2 1013 1451 10 0 104 +778 74 215 10 754 1197 10 0 712 +779 347 192 -22 5738 6287 10 248 0 +780 178 420 -9 4161 4530 10 131 0 +781 186 135 24 2695 3167 10 0 3 +782 176 199 28 89 691 10 0 295 +783 438 5 -32 1996 2517 10 708 0 +784 150 68 -21 1539 1963 10 805 0 +785 185 434 -7 2141 2568 10 977 0 +786 215 79 5 694 1214 10 0 523 +787 177 486 20 6192 6705 10 0 750 +788 49 437 7 1528 2012 10 0 272 +789 100 66 -15 5429 5888 10 12 0 +790 35 344 21 3297 3728 10 0 343 +791 433 447 20 3020 3453 10 0 247 +792 372 97 -19 625 1204 10 739 0 +793 344 203 14 475 984 10 0 146 +794 423 170 27 1907 2317 10 0 940 +795 171 188 30 2333 2751 10 0 383 +796 64 5 -16 4379 4772 10 628 0 +797 371 163 21 3122 3621 10 0 589 +798 398 210 -31 390 837 10 624 0 +799 48 437 -2 2975 3574 10 264 0 +800 392 1 11 2304 2657 10 0 661 +801 195 464 -16 6044 6406 10 177 0 +802 211 248 26 39 540 10 0 120 +803 293 228 19 48 559 10 0 215 +804 23 235 -6 3926 4380 10 433 0 +805 213 185 21 74 583 10 0 784 +806 172 292 17 190 665 10 0 456 +807 228 287 21 43 491 10 0 882 +808 387 394 -40 4212 4689 10 439 0 +809 374 232 33 241 762 10 0 886 +810 48 366 -36 2724 3341 10 635 0 +811 44 311 -22 1448 1932 10 235 0 +812 447 272 12 1312 1878 10 0 623 +813 132 477 25 1153 1586 10 0 599 +814 80 117 -26 3093 3620 10 362 0 +815 11 403 18 1207 1657 10 0 161 +816 144 220 35 166 716 10 0 740 +817 473 491 23 1476 1950 10 0 18 +818 210 219 7 50 539 10 0 711 +819 452 484 -9 4992 5356 10 159 0 +820 365 28 9 885 1381 10 0 905 +821 498 456 27 5494 5874 10 0 86 +822 84 453 -22 4745 5159 10 916 0 +823 91 427 -31 3360 3820 10 875 0 +824 178 72 -18 2829 3346 10 701 0 +825 409 155 19 438 1044 10 0 847 +826 132 151 22 433 800 10 0 966 +827 136 430 14 2696 3105 10 0 103 +828 292 104 -27 1033 1518 10 191 0 +829 443 167 -25 2015 2450 10 428 0 +830 321 149 18 5472 6045 10 0 603 +831 235 13 27 1215 1774 10 0 114 +832 166 440 12 634 1028 10 0 393 +833 112 433 29 712 1288 10 0 93 +834 452 172 -19 2262 2723 10 371 0 +835 37 281 17 1789 2276 10 0 588 +836 414 378 -18 1809 2270 10 840 0 +837 475 352 -10 1031 1568 10 760 0 +838 400 71 -11 5305 5792 10 98 0 +839 286 244 -13 4933 5459 10 972 0 +840 429 389 18 1522 1991 10 0 836 +841 92 76 4 4410 4822 10 0 994 +842 124 111 -23 2999 3436 10 662 0 +843 268 458 -3 1893 2411 10 489 0 +844 352 63 -27 4539 5007 10 612 0 +845 49 118 -26 4134 4557 10 705 0 +846 398 329 -36 406 937 10 220 0 +847 382 9 -19 884 1411 10 825 0 +848 229 322 -3 6448 6955 10 431 0 +849 279 355 9 528 922 10 0 522 +850 266 221 9 33 561 10 0 145 +851 142 80 12 1803 2253 10 0 497 +852 359 287 24 166 755 10 0 744 +853 482 104 19 3050 3529 10 0 416 +854 284 457 -19 5835 6274 10 46 0 +855 64 294 -28 4252 4677 10 980 0 +856 404 59 -21 3503 3920 10 116 0 +857 68 160 -26 4317 4889 10 417 0 +858 211 411 -27 4437 4856 10 902 0 +859 30 155 -22 4951 5413 10 44 0 +860 240 34 -4 6042 6555 10 656 0 +861 107 374 -6 3477 3958 10 638 0 +862 404 140 -23 4825 5364 10 878 0 +863 436 467 -14 2768 3240 10 334 0 +864 421 386 29 3082 3632 10 0 268 +865 182 480 31 1261 1778 10 0 382 +866 9 233 31 1041 1528 10 0 692 +867 110 251 23 1759 2342 10 0 166 +868 19 38 15 3195 3702 10 0 505 +869 46 248 -8 3060 3571 10 133 0 +870 308 199 14 5818 6368 10 0 230 +871 423 221 9 884 1303 10 0 65 +872 313 391 -30 416 901 10 251 0 +873 413 345 -4 4691 5173 10 725 0 +874 278 450 -10 5371 5749 10 391 0 +875 94 497 31 2921 3457 10 0 823 +876 7 382 27 2909 3374 10 0 920 +877 493 111 26 1977 2472 10 0 442 +878 392 87 23 4485 5096 10 0 862 +879 13 394 15 1277 1823 10 0 54 +880 259 301 25 178 732 10 0 435 +881 351 233 -13 5493 6010 10 761 0 +882 313 493 -21 4587 5077 10 807 0 +883 65 62 15 3728 4203 10 0 10 +884 417 212 -5 3553 3848 10 508 0 +885 450 194 27 2318 2799 10 0 950 +886 470 138 -33 5324 5912 10 809 0 +887 190 267 -12 6871 7278 10 741 0 +888 248 214 -35 5720 6234 10 965 0 +889 50 383 -21 861 1340 10 284 0 +890 244 422 -12 1985 2436 10 936 0 +891 60 29 -19 5272 5750 10 418 0 +892 5 445 30 1085 1522 10 0 655 +893 490 276 33 773 1249 10 0 227 +894 441 100 31 3312 3796 10 0 340 +895 162 388 11 4302 4826 10 0 144 +896 244 277 -20 5023 5507 10 190 0 +897 406 408 15 5609 6160 0 0 1001 +898 265 240 9 18 520 10 0 673 +899 130 186 16 353 817 10 0 299 +900 382 110 24 4260 4759 10 0 658 +901 142 14 -26 3212 3590 10 663 0 +902 352 487 27 3510 3824 10 0 858 +903 307 52 -33 3467 4017 10 685 0 +904 418 399 -30 1622 1999 10 314 0 +905 196 56 -9 2274 2722 10 820 0 +906 66 31 -18 4043 4464 10 634 0 +907 90 496 -22 5354 5929 10 60 0 +908 480 136 22 788 1266 10 0 430 +909 65 82 13 2847 3190 10 0 981 +910 48 293 -8 893 1435 10 39 0 +911 105 181 19 5947 6423 10 0 581 +912 215 282 -14 5568 6075 10 294 0 +913 257 133 -18 3306 3712 10 480 0 +914 77 465 11 874 1333 10 0 458 +915 43 135 31 693 1202 10 0 52 +916 27 444 22 4192 4571 10 0 822 +917 357 290 24 251 663 10 0 584 +918 38 15 -16 4148 4701 10 45 0 +919 80 337 28 4329 4745 10 0 978 +920 36 451 -27 3375 3856 10 876 0 +921 291 251 20 41 469 10 0 559 +922 195 111 -1 3820 4285 10 32 0 +923 383 17 15 3596 4047 10 0 344 +924 53 466 9 1135 1666 10 0 440 +925 114 102 21 1870 2309 10 0 675 +926 350 199 -3 4662 5070 10 152 0 +927 405 349 -19 1938 2360 10 263 0 +928 472 248 11 3159 3636 10 0 444 +929 333 293 -19 2335 2722 10 462 0 +930 174 397 -17 4786 5291 10 330 0 +931 2 264 40 2403 2954 10 0 232 +932 7 82 -11 1421 1991 10 558 0 +933 34 329 2 4010 4454 10 0 438 +934 158 179 37 225 705 10 0 748 +935 421 499 -23 5198 5684 10 156 0 +936 345 431 12 1208 1671 10 0 890 +937 370 262 -14 4227 4688 10 112 0 +938 77 172 -21 2962 3442 10 7 0 +939 87 51 -9 1873 2361 10 986 0 +940 468 352 -27 2880 3385 10 794 0 +941 63 420 19 1875 2401 10 0 735 +942 347 184 15 4132 4618 10 0 683 +943 206 174 -27 3033 3485 10 491 0 +944 209 212 -20 5932 6410 10 553 0 +945 466 362 -23 4456 4883 10 259 0 +946 201 278 13 56 624 10 0 973 +947 206 172 29 2978 3446 10 0 471 +948 471 94 -13 3841 4270 10 2 0 +949 331 134 -28 4317 4793 10 570 0 +950 274 261 -27 6653 7122 10 885 0 +951 219 215 32 46 466 10 0 158 +952 349 76 -28 3991 4374 10 206 0 +953 86 189 -16 713 1221 10 59 0 +954 336 493 -12 5753 6310 10 354 0 +955 7 194 -17 3625 4105 10 490 0 +956 492 335 10 3071 3675 10 0 552 +957 248 386 22 1390 1756 10 0 129 +958 463 406 -7 3259 3719 10 128 0 +959 199 438 -17 5261 5743 10 296 0 +960 135 30 -27 1709 2206 10 970 0 +961 447 267 19 3724 4233 10 0 252 +962 235 33 30 5194 5621 10 0 723 +963 63 155 7 3663 4174 10 0 734 +964 294 421 26 6127 6596 10 0 154 +965 318 99 35 4662 5161 10 0 888 +966 21 146 -22 1779 2235 10 826 0 +967 30 7 23 4570 5059 10 0 461 +968 410 399 25 787 1204 10 0 727 +969 405 187 -26 4851 5274 10 167 0 +970 109 56 27 733 1186 10 0 960 +971 212 47 -36 2994 3535 10 546 0 +972 479 387 13 1358 1942 10 0 839 +973 167 291 -13 6300 6894 10 946 0 +974 259 498 33 4121 4598 10 0 149 +975 461 182 -5 2291 2861 10 424 0 +976 277 428 7 1889 2154 10 0 532 +977 290 328 7 404 866 10 0 785 +978 146 313 -28 4627 5055 10 919 0 +979 40 304 -38 4372 4906 10 255 0 +980 56 268 28 4077 4555 10 0 855 +981 104 28 -13 5696 6207 10 909 0 +982 370 493 22 2110 2580 10 0 24 +983 136 265 12 232 688 10 0 43 +984 247 306 33 56 447 10 0 126 +985 241 38 -15 1984 2389 10 256 0 +986 180 162 9 498 1010 10 0 939 +987 253 118 -28 1994 2505 10 325 0 +988 413 391 8 639 1218 10 0 201 +989 380 350 15 3263 3789 10 0 374 +990 391 112 24 3837 4285 10 0 14 +991 86 199 23 906 1436 10 0 318 +992 91 326 -25 3695 4130 10 494 0 +993 287 256 18 37 474 10 0 726 +994 203 211 -4 5053 5518 10 841 0 +995 79 80 -13 5377 5799 10 305 0 +996 32 319 21 1469 1855 10 0 321 +997 167 445 -11 5437 5980 10 265 0 +998 439 237 11 3557 4071 10 0 410 +999 373 418 6 4845 5351 10 0 691 +1000 26 342 -5 1075 1613 10 316 0 +1001 406 408 -15 5609 6160 10 897 0 +1002 433 319 -11 5359 5771 10 472 0 +1003 261 201 -15 5895 6337 10 27 0 +1004 117 110 -13 3762 4189 10 595 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2102.txt b/jsprit-instances/instances/lilim/1000/LR2102.txt new file mode 100644 index 00000000..4cc5539d --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2102.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 14 2329 2482 10 0 681 +2 325 56 13 3181 3311 10 0 40 +3 290 145 -8 5130 5242 10 643 0 +4 340 291 -12 1893 1991 10 884 0 +5 370 382 -21 0 7509 10 38 0 +6 273 255 18 0 7664 10 0 760 +7 36 301 21 811 949 10 0 471 +8 117 178 28 4484 4574 10 0 656 +9 295 283 -23 3538 3728 10 286 0 +10 57 43 -15 4088 4219 10 883 0 +11 436 123 -9 835 966 10 898 0 +12 48 162 15 825 1033 10 0 628 +13 222 499 7 0 7437 0 0 1001 +14 376 92 10 3959 4086 10 0 324 +15 437 90 12 2364 2435 10 0 268 +16 3 23 -8 1550 1702 10 547 0 +17 94 40 -11 4278 4387 10 558 0 +18 398 476 25 1676 1789 10 0 641 +19 307 249 -2 0 7630 10 253 0 +20 179 286 8 1380 1469 10 0 572 +21 0 356 -38 4346 4464 10 255 0 +22 143 158 12 562 659 10 0 644 +23 413 476 -12 4729 4823 10 354 0 +24 371 488 10 2285 2497 10 0 413 +25 415 118 -11 0 7476 10 800 0 +26 440 77 -16 3649 3775 10 91 0 +27 261 201 -16 6060 6172 10 637 0 +28 490 286 29 2073 2224 10 0 725 +29 309 161 -11 2287 2499 10 71 0 +30 39 162 18 2269 2373 10 0 470 +31 361 178 -13 3903 3996 10 447 0 +32 261 138 1 0 7575 10 0 84 +33 447 383 17 889 1013 10 0 334 +34 346 354 8 3260 3399 10 0 205 +35 461 195 -21 5597 5683 10 926 0 +36 187 263 -21 0 7623 10 186 0 +37 130 247 -26 423 538 10 802 0 +38 328 491 21 2702 2845 10 0 5 +39 161 276 8 476 711 10 0 546 +40 365 74 -13 3379 3529 10 2 0 +41 168 109 10 810 944 10 0 672 +42 111 192 -9 0 7537 10 859 0 +43 87 213 -10 0 7520 10 279 0 +44 45 166 22 0 7466 10 0 925 +45 62 94 16 3822 3903 10 0 240 +46 348 476 -17 4762 4932 10 296 0 +47 64 437 11 0 7424 10 0 272 +48 56 75 -19 5711 5910 10 418 0 +49 24 259 19 1490 1591 10 0 375 +50 295 247 -25 5212 5335 10 370 0 +51 6 53 -25 2355 2460 10 932 0 +52 15 11 -14 0 7352 10 238 0 +53 179 497 -30 0 7430 10 269 0 +54 67 352 20 1514 1592 10 0 811 +55 317 45 -15 2629 2757 10 132 0 +56 40 278 -15 0 7476 10 438 0 +57 33 278 18 5910 6108 10 0 662 +58 322 290 -29 0 7605 10 755 0 +59 159 226 16 314 439 10 0 934 +60 208 445 -25 5314 5465 10 510 0 +61 453 360 -13 858 990 10 451 0 +62 34 169 11 1948 2048 10 0 473 +63 436 25 -14 5113 5266 10 659 0 +64 393 98 13 3013 3127 10 0 620 +65 466 96 22 5547 5639 10 0 870 +66 366 390 -25 5266 5400 10 380 0 +67 303 78 12 656 784 10 0 776 +68 374 116 -20 0 7505 10 469 0 +69 424 288 -23 4261 4318 10 259 0 +70 191 84 -23 3472 3584 10 120 0 +71 59 276 11 0 7495 10 0 29 +72 215 293 13 128 315 10 0 387 +73 343 276 15 321 451 10 0 594 +74 488 173 -29 4836 4966 10 363 0 +75 452 110 14 1339 1504 10 0 152 +76 153 244 5 460 523 10 0 754 +77 176 200 17 2266 2394 10 0 521 +78 498 171 12 5048 5123 10 0 886 +79 492 188 -23 2904 2939 10 475 0 +80 177 156 -9 639 818 10 986 0 +81 398 49 21 3167 3288 10 0 369 +82 497 296 -37 2495 2525 10 308 0 +83 276 84 -3 0 7519 10 146 0 +84 128 113 -1 0 7504 10 32 0 +85 422 498 5 2801 2856 10 0 226 +86 460 424 -9 5786 5970 10 285 0 +87 246 314 36 5773 5910 0 0 1007 +88 0 422 -11 3300 3388 10 914 0 +89 166 247 1 291 382 10 0 666 +90 311 422 29 3970 4053 10 0 95 +91 392 95 16 3060 3189 10 0 26 +92 460 117 -11 2083 2196 10 650 0 +93 28 467 34 0 7377 10 0 920 +94 375 145 12 3719 3836 10 0 441 +95 240 255 -29 6404 6604 10 90 0 +96 440 436 18 3549 3706 10 0 560 +97 454 201 -22 5218 5342 10 328 0 +98 407 35 -24 5177 5250 10 119 0 +99 420 383 27 3932 4044 10 0 207 +100 264 180 -11 6720 6845 10 450 0 +101 440 294 -18 3836 3966 10 353 0 +102 500 228 -5 3137 3237 10 673 0 +103 144 331 -23 3709 3860 10 587 0 +104 98 2 14 2361 2493 10 0 570 +105 461 186 16 0 7467 10 0 568 +106 68 450 -38 0 7417 10 386 0 +107 153 192 13 0 7574 10 0 710 +108 34 239 16 896 975 10 0 857 +109 465 367 14 4087 4248 10 0 229 +110 208 488 22 1934 2007 10 0 355 +111 93 413 17 849 961 10 0 228 +112 371 332 14 0 7541 10 0 442 +113 231 167 15 246 435 10 0 455 +114 179 75 13 2982 3057 10 0 922 +115 196 489 23 4135 4226 10 0 241 +116 280 245 21 85 158 10 0 783 +117 108 37 23 2192 2323 10 0 166 +118 1 101 -20 5021 5158 10 304 0 +119 420 80 24 0 7447 10 0 98 +120 38 190 23 1138 1261 10 0 70 +121 470 405 17 3694 3832 10 0 359 +122 448 397 33 0 7441 10 0 439 +123 471 427 8 3256 3395 10 0 722 +124 146 376 8 928 1066 10 0 318 +125 12 358 -26 4891 5024 10 278 0 +126 175 422 24 5771 5920 10 0 997 +127 297 131 25 4640 4803 10 0 730 +128 457 492 -23 2041 2143 10 156 0 +129 69 423 32 3236 3304 10 0 627 +130 97 288 -33 5142 5251 10 322 0 +131 172 314 9 0 7587 10 0 702 +132 170 347 15 1764 1842 10 0 55 +133 103 123 -6 1966 2072 10 433 0 +134 154 374 -31 3746 3870 10 865 0 +135 318 497 21 0 7431 10 0 691 +136 330 147 -21 3383 3525 10 215 0 +137 241 180 -23 6789 6887 10 273 0 +138 174 67 -30 5018 5180 10 645 0 +139 235 288 18 83 244 10 0 734 +140 94 192 -32 0 7521 10 711 0 +141 232 101 -24 1405 1483 10 608 0 +142 28 180 34 1551 1653 10 0 674 +143 64 135 -22 3495 3571 10 182 0 +144 174 376 -25 0 7540 10 575 0 +145 293 174 31 279 420 10 0 717 +146 218 12 3 2204 2268 10 0 83 +147 110 122 14 0 7498 10 0 860 +148 459 53 -7 4505 4592 10 531 0 +149 173 474 14 5150 5250 10 0 453 +150 135 400 -9 1189 1319 10 168 0 +151 497 266 -20 2996 3104 10 538 0 +152 380 194 -14 2872 2956 10 75 0 +153 495 227 20 1389 1482 10 0 590 +154 268 351 7 6698 6822 10 0 539 +155 213 399 18 941 1051 10 0 732 +156 448 414 23 0 7430 10 0 128 +157 327 139 -18 5021 5158 10 361 0 +158 151 81 28 0 7492 10 0 743 +159 425 448 -36 3152 3324 10 301 0 +160 92 259 4 1585 1731 10 0 933 +161 59 388 20 2650 2772 10 0 861 +162 468 360 16 0 7443 10 0 727 +163 332 459 35 1479 1591 10 0 863 +164 469 489 4 2211 2353 10 0 419 +165 248 176 -24 5579 5753 10 781 0 +166 174 41 -23 0 7465 10 117 0 +167 343 205 26 3081 3178 10 0 733 +168 154 392 9 0 7516 10 0 150 +169 92 18 8 4466 4648 10 0 967 +170 250 328 -24 0 7609 10 511 0 +171 88 484 -25 0 7403 10 646 0 +172 360 488 -12 1252 1393 10 564 0 +173 156 65 22 4143 4275 10 0 497 +174 18 225 8 2757 2893 10 0 317 +175 152 476 45 2112 2188 10 0 827 +176 176 470 -13 2181 2312 10 484 0 +177 195 450 -4 5946 6061 10 657 0 +178 466 149 -28 4761 4848 10 206 0 +179 221 269 14 5064 5179 10 0 338 +180 105 137 -5 1799 1940 10 786 0 +181 284 319 17 3270 3384 10 0 849 +182 41 120 22 2791 2897 10 0 143 +183 263 418 -6 1117 1230 10 766 0 +184 218 271 -24 6280 6429 10 557 0 +185 365 119 -21 0 7513 10 742 0 +186 89 322 21 4099 4186 10 0 36 +187 180 283 -22 2963 3107 10 549 0 +188 385 17 40 3186 3404 10 0 233 +189 401 314 -23 3875 4057 10 836 0 +190 245 176 -27 4943 5055 10 756 0 +191 251 238 27 12 119 10 0 503 +192 139 438 24 865 966 10 0 440 +193 236 126 23 400 598 10 0 987 +194 61 441 -23 2201 2268 10 377 0 +195 405 454 -20 0 7431 10 791 0 +196 111 392 18 4693 4780 10 0 757 +197 373 421 -10 939 1080 10 276 0 +198 247 443 17 0 7494 10 0 445 +199 322 406 -19 0 7516 10 517 0 +200 412 478 -23 3851 3946 10 958 0 +201 374 346 -15 0 7531 10 897 0 +202 122 422 -27 5871 5904 10 876 0 +203 261 359 10 401 476 10 0 569 +204 173 182 25 383 438 10 0 970 +205 398 341 -8 3775 3858 10 34 0 +206 413 127 28 3326 3439 10 0 178 +207 325 311 -27 5290 5409 10 99 0 +208 80 357 1 2093 2271 10 0 741 +209 67 378 -28 0 7464 10 919 0 +210 216 341 19 0 7590 10 0 372 +211 498 457 -26 0 7364 10 819 0 +212 44 344 -7 0 7461 10 283 0 +213 352 481 -23 5136 5261 10 817 0 +214 237 420 -25 0 7517 10 813 0 +215 389 43 21 1564 1721 10 0 136 +216 292 136 -21 3126 3239 10 805 0 +217 426 38 23 0 7412 10 0 675 +218 245 461 8 0 7476 10 0 875 +219 415 253 21 1457 1595 10 0 332 +220 298 264 36 147 253 10 0 513 +221 307 412 8 1635 1714 10 0 747 +222 53 204 -26 4206 4354 10 399 0 +223 480 152 -14 4028 4265 10 234 0 +224 262 97 17 3785 3912 10 0 412 +225 83 169 21 3115 3218 10 0 258 +226 377 432 -5 0 7466 10 85 0 +227 390 249 21 0 7547 10 0 577 +228 132 479 -17 997 1063 10 111 0 +229 359 246 -14 5725 5777 10 109 0 +230 314 205 -18 6086 6249 10 779 0 +231 124 448 6 1430 1638 10 0 735 +232 0 188 -19 0 7430 10 495 0 +233 343 166 -40 3512 3616 10 188 0 +234 482 141 14 4028 4178 10 0 223 +235 162 306 22 494 580 10 0 337 +236 24 71 11 1394 1494 10 0 613 +237 188 119 44 3903 4016 10 0 670 +238 100 85 14 1422 1506 10 0 52 +239 103 177 28 2494 2637 10 0 362 +240 26 67 -16 5274 5380 10 45 0 +241 164 332 -23 5107 5250 10 115 0 +242 385 285 -24 3478 3586 10 852 0 +243 209 68 -7 6266 6398 10 963 0 +244 149 341 6 1599 1753 10 0 894 +245 415 95 15 4708 4825 10 0 830 +246 167 488 -33 972 1148 10 974 0 +247 413 493 26 4894 4971 10 0 935 +248 439 222 -11 3929 4028 10 998 0 +249 150 484 16 2498 2623 10 0 265 +250 299 353 34 0 7573 10 0 596 +251 273 300 30 153 288 10 0 858 +252 402 277 5 5771 5856 10 0 519 +253 239 15 2 0 7452 10 0 19 +254 363 225 35 3426 3541 10 0 937 +255 65 343 38 802 976 10 0 21 +256 351 60 -17 0 7472 10 534 0 +257 60 246 25 704 816 10 0 905 +258 144 35 -21 0 7448 10 225 0 +259 463 253 23 4171 4325 10 0 69 +260 332 382 -5 4037 4167 10 872 0 +261 408 318 15 2558 2707 10 0 809 +262 452 206 31 1958 2099 10 0 829 +263 471 368 -4 1718 1827 10 493 0 +264 93 490 -25 1527 1626 10 880 0 +265 241 402 -16 4090 4229 10 249 0 +266 60 231 -28 4124 4203 10 398 0 +267 172 66 -29 5225 5318 10 588 0 +268 404 207 -12 3634 3771 10 15 0 +269 286 356 30 354 542 10 0 53 +270 489 338 17 5551 5746 10 0 472 +271 334 481 32 1323 1440 10 0 551 +272 26 442 -11 0 7392 10 47 0 +273 226 175 23 6798 6871 10 0 137 +274 488 3 -26 1625 1700 10 571 0 +275 178 150 33 0 7564 10 0 339 +276 371 423 10 810 878 10 0 197 +277 5 224 19 0 7441 10 0 955 +278 94 344 26 2746 2832 10 0 125 +279 153 235 10 324 462 10 0 43 +280 12 367 27 1282 1444 10 0 980 +281 217 357 23 0 7576 10 0 801 +282 255 487 -5 1556 1747 10 316 0 +283 149 214 7 0 7580 10 0 212 +284 169 305 21 0 7590 10 0 667 +285 487 446 9 5360 5482 10 0 86 +286 267 374 23 2425 2501 10 0 9 +287 360 294 9 0 7569 10 0 772 +288 185 431 15 1561 1656 10 0 464 +289 325 210 15 3717 3870 10 0 723 +290 175 352 -25 6652 6789 10 544 0 +291 76 462 -18 3813 3955 10 345 0 +292 19 273 25 0 7455 10 0 629 +293 72 227 -23 2258 2373 10 991 0 +294 213 283 14 5885 6002 10 0 411 +295 130 140 17 783 889 10 0 504 +296 274 442 17 4301 4350 10 0 46 +297 337 41 -18 4018 4121 10 446 0 +298 372 39 -24 2886 3022 10 432 0 +299 269 112 19 5041 5180 10 0 348 +300 224 56 -18 0 7492 10 683 0 +301 340 416 36 1293 1396 10 0 159 +302 13 214 21 5428 5520 10 0 640 +303 230 320 -31 4770 4887 10 584 0 +304 6 196 20 4772 4973 10 0 118 +305 87 3 -14 5728 5856 10 461 0 +306 133 202 33 1827 1978 10 0 851 +307 235 316 -30 2616 2751 10 533 0 +308 435 180 37 0 7490 10 0 82 +309 173 65 -20 1768 1940 10 971 0 +310 245 42 -23 2203 2295 10 784 0 +311 384 149 18 0 7520 10 0 751 +312 51 286 -15 5831 5960 10 435 0 +313 267 290 15 111 236 10 0 785 +314 453 318 -20 1489 1621 10 921 0 +315 189 402 -26 2149 2259 10 616 0 +316 210 276 5 138 243 10 0 282 +317 120 261 -8 3154 3312 10 174 0 +318 35 263 -8 0 7472 10 124 0 +319 429 59 9 1827 1964 10 0 403 +320 330 308 -21 4687 4797 10 600 0 +321 58 391 16 3528 3651 10 0 506 +322 260 472 33 4143 4265 10 0 130 +323 217 333 26 0 7598 10 0 603 +324 335 46 -10 5400 5453 10 14 0 +325 198 85 28 1032 1189 10 0 631 +326 138 28 -15 4362 4530 10 842 0 +327 29 336 22 1319 1454 10 0 804 +328 200 27 22 0 7459 10 0 97 +329 157 269 -19 6317 6414 10 698 0 +330 177 404 17 0 7517 10 0 397 +331 202 28 -21 3733 3860 10 966 0 +332 366 334 -21 1650 1751 10 219 0 +333 149 458 13 0 7456 10 0 474 +334 481 454 -17 1278 1406 10 33 0 +335 377 385 -18 3486 3564 10 543 0 +336 217 207 -10 5538 5642 10 767 0 +337 96 346 -22 765 836 10 235 0 +338 224 320 -14 5187 5202 10 179 0 +339 206 97 -33 1785 1920 10 275 0 +340 438 127 -24 3785 3862 10 457 0 +341 494 468 -13 1417 1523 10 459 0 +342 494 165 -9 2401 2553 10 820 0 +343 5 281 16 0 7441 10 0 437 +344 441 60 -36 0 7418 10 488 0 +345 14 232 18 1187 1374 10 0 291 +346 288 439 16 1121 1187 10 0 615 +347 420 224 10 1704 1848 10 0 724 +348 267 162 -19 0 7598 10 299 0 +349 195 273 22 156 320 10 0 752 +350 233 230 -26 0 7661 10 663 0 +351 382 360 26 696 849 10 0 988 +352 406 460 -7 2868 3006 10 976 0 +353 499 316 18 2472 2623 10 0 101 +354 246 407 12 1235 1377 10 0 23 +355 283 454 -22 5107 5134 10 110 0 +356 426 231 -17 4102 4245 10 745 0 +357 432 2 -26 1848 2004 10 828 0 +358 404 439 3 964 1067 10 0 509 +359 397 477 -17 4853 4993 10 121 0 +360 44 140 -5 3464 3602 10 466 0 +361 330 138 18 4493 4504 10 0 157 +362 39 153 -28 3203 3299 10 239 0 +363 397 153 29 3507 3673 10 0 74 +364 226 316 21 234 328 10 0 599 +365 354 156 20 3322 3458 10 0 444 +366 201 66 14 0 7497 10 0 379 +367 389 156 27 2851 2993 10 0 900 +368 134 211 35 458 626 10 0 814 +369 386 154 -21 0 7521 10 81 0 +370 335 99 25 4913 4955 10 0 50 +371 356 256 19 337 513 10 0 682 +372 240 362 -19 0 7575 10 210 0 +373 412 100 1 2066 2161 10 0 877 +374 394 322 12 4111 4207 10 0 664 +375 48 150 -19 2642 2718 10 49 0 +376 225 121 -31 0 7556 10 541 0 +377 102 422 23 0 7461 10 0 194 +378 339 41 6 0 7460 10 0 839 +379 440 201 -14 0 7491 10 366 0 +380 411 379 25 4781 4886 10 0 66 +381 219 210 14 152 252 10 0 586 +382 250 441 5 0 7496 10 0 465 +383 210 29 -10 4213 4314 10 486 0 +384 178 302 19 3553 3659 10 0 448 +385 148 208 22 0 7577 10 0 477 +386 225 369 38 432 541 10 0 106 +387 16 287 -13 0 7451 10 72 0 +388 450 416 -13 2281 2453 10 972 0 +389 287 397 -12 2262 2373 10 936 0 +390 285 247 -18 0 7652 10 422 0 +391 351 481 -36 1284 1410 10 436 0 +392 243 408 -12 5720 5870 10 660 0 +393 137 377 23 0 7518 0 0 1002 +394 33 152 -17 5278 5403 10 806 0 +395 68 303 22 904 987 10 0 416 +396 456 113 -19 4922 5015 10 803 0 +397 134 276 -17 0 7569 10 330 0 +398 26 221 28 4016 4076 10 0 266 +399 79 257 26 3803 3942 10 0 222 +400 181 185 -19 6436 6594 10 995 0 +401 104 349 20 4058 4135 10 0 992 +402 267 174 -14 6470 6596 10 692 0 +403 475 267 -9 3124 3232 10 319 0 +404 385 239 -5 3130 3274 10 508 0 +405 95 382 19 929 1041 10 0 417 +406 67 190 25 4722 4785 10 0 697 +407 32 94 -28 3707 3854 10 485 0 +408 401 164 13 0 7514 10 0 597 +409 376 113 -22 0 7501 10 910 0 +410 409 255 -16 0 7528 10 694 0 +411 228 260 -14 6450 6514 10 294 0 +412 363 34 -17 0 7444 10 224 0 +413 274 441 -10 2762 2915 10 24 0 +414 146 188 -19 0 7566 10 581 0 +415 212 186 -3 6893 6999 10 505 0 +416 432 66 -22 0 7429 10 395 0 +417 83 300 -19 1987 2131 10 405 0 +418 51 89 19 4833 4953 10 0 48 +419 379 486 -4 2679 2815 10 164 0 +420 440 284 -21 0 7494 10 454 0 +421 175 239 23 256 351 10 0 891 +422 282 1 18 4184 4276 10 0 390 +423 268 113 21 2734 2823 10 0 844 +424 480 131 -14 2740 2881 10 449 0 +425 429 67 16 2938 3040 10 0 430 +426 162 301 -15 6423 6601 10 879 0 +427 281 96 -24 4532 4594 10 763 0 +428 495 199 25 0 7437 10 0 834 +429 372 115 13 0 7506 10 0 632 +430 396 83 -16 6362 6449 10 425 0 +431 239 486 3 0 7451 10 0 758 +432 288 70 24 0 7504 10 0 298 +433 66 163 6 1566 1718 10 0 133 +434 470 417 -10 0 7411 10 713 0 +435 226 423 15 832 863 10 0 312 +436 342 319 36 419 502 10 0 391 +437 174 122 -16 2376 2491 10 343 0 +438 49 353 15 5810 5879 10 0 56 +439 448 495 -33 0 7372 10 122 0 +440 13 465 -24 3116 3193 10 192 0 +441 489 159 -12 5723 5818 10 94 0 +442 311 203 -14 2892 3008 10 112 0 +443 480 119 7 2515 2632 10 0 773 +444 442 153 -20 4765 4865 10 365 0 +445 148 462 -17 2906 3028 10 198 0 +446 233 87 18 966 1174 10 0 297 +447 323 34 13 0 7459 10 0 31 +448 84 377 -19 3699 3831 10 384 0 +449 292 32 14 888 1066 10 0 424 +450 418 75 11 1807 1896 10 0 100 +451 451 305 13 779 889 10 0 61 +452 225 269 -4 5082 5205 10 706 0 +453 272 420 -14 5515 5691 10 149 0 +454 318 280 21 254 340 10 0 420 +455 250 57 -15 0 7494 10 113 0 +456 77 372 19 0 7476 10 0 655 +457 385 58 24 1661 1697 10 0 340 +458 44 496 -13 1594 1740 10 703 0 +459 460 328 13 872 1001 10 0 341 +460 67 24 -23 4083 4184 10 527 0 +461 91 27 14 4699 4874 10 0 305 +462 360 284 -27 2660 2792 10 929 0 +463 82 183 17 4444 4490 10 0 841 +464 153 362 -15 4647 4762 10 288 0 +465 52 412 -5 5608 5758 10 382 0 +466 32 191 5 2344 2465 10 0 360 +467 325 147 14 0 7560 0 0 1006 +468 328 458 17 0 7465 10 0 821 +469 133 273 20 419 535 10 0 68 +470 147 30 -18 4424 4565 10 30 0 +471 131 246 -21 3348 3429 10 7 0 +472 433 319 -17 5509 5621 10 270 0 +473 168 59 -11 0 7480 10 62 0 +474 218 403 -13 5305 5368 10 333 0 +475 295 89 23 0 7520 10 0 79 +476 118 314 -13 1315 1505 10 740 0 +477 251 63 -22 3981 4039 10 385 0 +478 388 44 22 4519 4647 10 0 589 +479 381 328 12 0 7535 10 0 677 +480 132 32 -15 0 7440 10 789 0 +481 334 403 26 620 776 10 0 532 +482 83 290 14 2421 2560 0 0 1003 +483 411 396 -7 3667 3814 10 977 0 +484 243 402 13 0 7535 10 0 176 +485 52 18 28 3438 3537 10 0 407 +486 265 0 10 3570 3718 10 0 383 +487 268 288 -10 5075 5181 10 956 0 +488 476 61 36 1780 1930 10 0 344 +489 283 438 3 939 1032 10 0 978 +490 191 215 -32 211 338 10 951 0 +491 253 50 27 921 1005 10 0 753 +492 71 282 -18 2583 2670 10 815 0 +493 297 304 4 227 345 10 0 263 +494 244 368 25 0 7569 10 0 562 +495 80 279 19 4586 4795 10 0 232 +496 488 96 22 4264 4386 10 0 636 +497 142 30 -22 0 7442 10 173 0 +498 68 240 -5 3176 3300 10 556 0 +499 193 138 30 0 7562 10 0 545 +500 451 62 5 0 7412 10 0 798 +501 138 406 -13 4892 4956 10 946 0 +502 306 42 11 1944 1989 10 0 969 +503 247 219 -27 0 7656 10 191 0 +504 98 29 -17 4209 4284 10 295 0 +505 102 6 3 5820 5968 10 0 415 +506 142 360 -16 6124 6252 10 321 0 +507 172 24 -3 5814 5924 10 518 0 +508 352 241 5 3178 3280 10 0 404 +509 486 324 -3 3109 3168 10 358 0 +510 133 455 25 3222 3362 10 0 60 +511 440 292 24 3776 3864 10 0 170 +512 364 173 30 700 862 10 0 825 +513 442 289 -36 744 903 10 220 0 +514 48 412 7 0 7429 10 0 916 +515 344 70 24 4542 4743 10 0 690 +516 78 406 -19 3818 3986 10 748 0 +517 329 456 19 1008 1104 10 0 199 +518 157 38 3 4186 4316 10 0 507 +519 374 260 -5 0 7563 10 252 0 +520 297 283 -9 0 7630 10 940 0 +521 210 113 -17 2778 2864 10 77 0 +522 215 434 9 752 909 10 0 665 +523 262 92 25 2507 2657 10 0 853 +524 140 108 29 0 7508 10 0 525 +525 235 108 -29 4307 4449 10 524 0 +526 210 133 -23 2767 2862 10 867 0 +527 25 53 23 4088 4193 10 0 460 +528 339 113 14 3050 3154 10 0 695 +529 394 310 -27 4410 4498 10 604 0 +530 126 391 -22 0 7500 10 957 0 +531 343 34 7 2882 3036 10 0 148 +532 354 416 -26 2719 2836 10 481 0 +533 202 391 30 2497 2611 10 0 307 +534 367 97 17 0 7495 10 0 256 +535 188 151 7 5223 5270 10 0 553 +536 111 178 18 593 659 10 0 709 +537 456 157 -24 5788 5972 10 630 0 +538 441 7 20 1563 1690 10 0 151 +539 270 337 -7 7160 7222 10 154 0 +540 323 29 -28 4533 4687 10 712 0 +541 200 78 31 3981 4080 10 0 376 +542 330 281 14 5336 5427 10 0 881 +543 438 488 18 1304 1433 10 0 335 +544 161 416 25 0 7499 10 0 290 +545 30 97 -30 4851 4951 10 499 0 +546 273 70 -8 2458 2617 10 39 0 +547 214 245 8 0 7651 10 0 16 +548 221 291 -21 184 305 10 807 0 +549 79 467 22 1400 1531 10 0 187 +550 423 315 12 0 7503 10 0 837 +551 395 474 -32 1545 1670 10 271 0 +552 481 207 34 3447 3521 10 0 669 +553 199 203 -7 0 7618 10 535 0 +554 497 483 12 1407 1541 10 0 592 +555 449 428 25 4966 5129 10 0 999 +556 100 266 5 0 7537 10 0 498 +557 214 274 24 5490 5583 10 0 184 +558 16 68 11 0 7391 10 0 17 +559 475 198 20 3335 3466 10 0 949 +560 371 427 -18 3811 3974 10 96 0 +561 62 375 16 1410 1500 10 0 610 +562 163 472 -25 2611 2736 10 494 0 +563 13 314 14 985 1086 10 0 602 +564 376 385 12 640 837 10 0 172 +565 231 29 -31 4896 5035 10 915 0 +566 89 358 -27 4950 5147 10 973 0 +567 331 356 -25 0 7554 10 578 0 +568 365 190 -16 5897 6043 10 105 0 +569 256 441 -10 722 807 10 203 0 +570 120 37 -14 0 7438 10 104 0 +571 349 43 26 855 980 10 0 274 +572 230 487 -8 0 7450 10 20 0 +573 489 457 -18 0 7371 10 993 0 +574 341 72 9 3243 3315 10 0 944 +575 181 441 25 2177 2278 10 0 144 +576 306 229 -25 0 7628 10 704 0 +577 492 326 -21 4863 4890 10 227 0 +578 347 459 25 1931 2024 10 0 567 +579 66 88 -16 3302 3455 10 611 0 +580 272 234 -27 6353 6489 10 693 0 +581 134 194 19 6631 6703 10 0 414 +582 320 211 -19 0 7607 10 739 0 +583 214 311 14 225 341 10 0 736 +584 489 274 31 2132 2258 10 0 303 +585 231 410 -3 0 7526 10 607 0 +586 432 199 -14 0 7498 10 381 0 +587 29 358 23 2425 2581 10 0 103 +588 62 236 29 2238 2345 10 0 267 +589 333 163 -22 4973 5068 10 478 0 +590 364 71 -20 5374 5533 10 153 0 +591 125 65 -8 3170 3257 10 981 0 +592 429 476 -12 2314 2392 10 554 0 +593 161 275 -11 5370 5524 10 895 0 +594 365 274 -15 395 545 10 73 0 +595 117 110 -18 3898 4052 10 701 0 +596 166 345 -34 4517 4642 10 250 0 +597 345 146 -13 5727 5905 10 408 0 +598 324 99 -31 1368 1455 10 624 0 +599 72 477 -21 0 7399 10 364 0 +600 487 320 21 3448 3534 10 0 320 +601 120 17 -35 0 7421 10 939 0 +602 1 252 -14 1103 1218 10 563 0 +603 303 186 -26 0 7604 10 323 0 +604 428 302 27 0 7502 10 0 529 +605 264 135 1 3525 3630 0 0 1008 +606 223 178 20 0 7611 10 0 679 +607 174 347 3 4047 4191 10 0 585 +608 238 123 24 0 7560 10 0 141 +609 187 61 19 2155 2325 10 0 913 +610 52 303 -16 1750 1899 10 561 0 +611 89 185 16 2401 2517 10 0 579 +612 341 59 -2 3156 3282 10 770 0 +613 89 65 -11 2863 3019 10 236 0 +614 495 355 3 4981 5084 10 0 759 +615 368 452 -16 2673 2806 10 346 0 +616 164 473 26 1149 1340 10 0 315 +617 171 34 -23 4579 4685 10 938 0 +618 114 460 -3 4371 4437 10 959 0 +619 224 3 -16 2774 2869 10 985 0 +620 472 57 -13 0 7393 10 64 0 +621 448 404 -18 2407 2505 10 840 0 +622 390 120 -27 4036 4117 10 885 0 +623 386 225 -32 3654 3815 10 708 0 +624 301 239 31 169 248 10 0 598 +625 115 296 -16 6112 6239 10 979 0 +626 69 266 -21 2997 3190 10 996 0 +627 115 395 -32 3274 3368 10 129 0 +628 68 53 -15 0 7419 10 12 0 +629 33 268 -25 2751 2936 10 292 0 +630 450 45 24 2005 2144 10 0 537 +631 351 5 -28 1997 2091 10 325 0 +632 351 148 -13 0 7544 10 429 0 +633 80 458 -15 1515 1569 10 653 0 +634 60 5 18 4166 4304 10 0 796 +635 10 407 -7 1758 1838 10 788 0 +636 497 18 -22 4520 4641 10 496 0 +637 437 98 16 4480 4549 10 0 27 +638 130 494 6 3036 3154 10 0 930 +639 391 202 14 517 674 10 0 871 +640 43 210 -21 0 7477 10 302 0 +641 381 457 -25 1895 1991 10 18 0 +642 449 190 -23 4533 4707 10 720 0 +643 429 169 8 3607 3735 10 0 3 +644 105 140 -12 678 779 10 22 0 +645 282 10 30 5031 5181 10 0 138 +646 20 480 25 2297 2385 10 0 171 +647 61 170 20 4010 4156 10 0 962 +648 210 81 2 0 7514 10 0 965 +649 87 311 7 0 7513 10 0 799 +650 309 29 11 0 7459 10 0 92 +651 397 57 17 5876 6052 10 0 878 +652 337 232 -20 6266 6418 10 873 0 +653 262 369 15 513 641 10 0 633 +654 41 232 -11 0 7478 10 689 0 +655 69 414 -19 5007 5220 10 456 0 +656 149 98 -28 4664 4777 10 8 0 +657 207 487 4 0 7447 10 0 177 +658 366 260 -27 0 7571 10 831 0 +659 497 54 14 3918 4027 10 0 63 +660 210 379 12 0 7552 10 0 392 +661 437 19 -15 4047 4185 10 923 0 +662 181 260 -18 0 7618 10 57 0 +663 125 61 26 2460 2554 10 0 350 +664 368 311 -12 0 7555 10 374 0 +665 80 400 -9 5772 5918 10 522 0 +666 75 118 -1 1629 1763 10 89 0 +667 171 303 -21 6334 6501 10 284 0 +668 80 251 14 1215 1334 10 0 795 +669 455 168 -34 3501 3554 10 552 0 +670 215 129 -44 4479 4589 10 237 0 +671 179 318 2 0 7589 10 0 889 +672 187 73 -10 1154 1303 10 41 0 +673 394 47 5 1223 1401 10 0 102 +674 31 175 -34 0 7456 10 142 0 +675 339 144 -23 0 7549 10 217 0 +676 492 34 -26 3242 3362 10 705 0 +677 387 349 -12 0 7518 10 479 0 +678 142 372 -29 0 7525 10 833 0 +679 291 213 -20 5018 5163 10 606 0 +680 421 387 15 0 7468 10 0 854 +681 274 403 -14 3526 3693 10 1 0 +682 434 359 -19 5585 5673 10 371 0 +683 257 57 18 4913 5015 10 0 300 +684 428 202 -13 3627 3723 10 975 0 +685 355 174 33 2847 2996 10 0 761 +686 46 389 -12 0 7441 10 1000 0 +687 44 440 -18 0 7407 10 731 0 +688 491 369 28 2891 3065 10 0 715 +689 33 286 11 0 7468 10 0 654 +690 351 128 -24 5010 5136 10 515 0 +691 485 428 -21 5977 6062 10 135 0 +692 273 149 14 5987 6154 10 0 402 +693 447 184 27 0 7480 10 0 580 +694 386 245 16 0 7551 10 0 410 +695 323 77 -14 5590 5771 10 528 0 +696 21 70 15 3065 3224 10 0 868 +697 9 101 -25 0 7404 10 406 0 +698 71 304 19 2745 2888 10 0 329 +699 43 360 2 3339 3463 10 0 810 +700 396 417 13 0 7466 10 0 714 +701 158 24 18 2419 2590 10 0 595 +702 164 320 -9 0 7577 10 131 0 +703 195 386 13 508 666 10 0 458 +704 306 235 25 172 291 10 0 576 +705 66 314 26 723 835 10 0 676 +706 95 64 4 3083 3164 10 0 452 +707 348 348 -15 0 7549 10 989 0 +708 495 83 32 1734 1912 10 0 623 +709 61 214 -18 1309 1545 10 536 0 +710 240 240 -13 6820 6897 10 107 0 +711 140 137 32 2276 2401 10 0 140 +712 242 106 28 0 7543 10 0 540 +713 392 491 10 4542 4641 10 0 434 +714 342 481 -13 5769 5871 10 700 0 +715 478 300 -28 3589 3648 10 688 0 +716 299 285 -17 4991 5160 10 846 0 +717 481 84 -31 2011 2154 10 145 0 +718 271 128 12 1378 1507 10 0 952 +719 484 224 7 0 7452 10 0 928 +720 441 177 23 4022 4107 10 0 642 +721 46 163 8 3734 3795 10 0 746 +722 493 493 -8 3457 3515 10 123 0 +723 253 74 -15 5375 5546 10 289 0 +724 390 34 -10 4201 4401 10 347 0 +725 374 306 -29 3992 4081 10 28 0 +726 436 295 -20 2136 2211 10 904 0 +727 371 315 -16 4679 4767 10 162 0 +728 27 464 21 0 7378 10 0 907 +729 3 471 13 2828 2979 10 0 822 +730 418 269 -25 0 7518 10 127 0 +731 90 477 18 0 7410 10 0 687 +732 141 426 -18 2110 2261 10 155 0 +733 418 251 -26 4770 4925 10 167 0 +734 57 183 -18 4375 4548 10 139 0 +735 29 462 -6 5256 5340 10 231 0 +736 55 318 -14 1250 1365 10 583 0 +737 18 24 -25 2551 2596 10 906 0 +738 263 153 12 1628 1791 10 0 782 +739 289 220 19 145 248 10 0 582 +740 84 255 13 1096 1280 10 0 476 +741 159 299 -1 0 7584 10 208 0 +742 485 104 21 3162 3314 10 0 185 +743 178 135 -28 6044 6187 10 158 0 +744 389 255 -24 0 7548 10 917 0 +745 457 280 17 4013 4105 10 0 356 +746 171 24 -8 0 7448 10 721 0 +747 330 371 -8 2213 2375 10 221 0 +748 10 237 19 0 7447 10 0 516 +749 458 213 -27 0 7476 10 794 0 +750 257 391 22 6547 6637 0 0 1004 +751 482 184 -18 4437 4538 10 311 0 +752 222 331 -22 2158 2279 10 349 0 +753 332 5 -27 4110 4272 10 491 0 +754 47 208 -5 924 1007 10 76 0 +755 489 437 29 0 7384 10 0 58 +756 165 59 27 3762 3901 10 0 190 +757 211 446 -18 0 7488 10 196 0 +758 225 488 -3 0 7448 10 431 0 +759 355 485 -3 5887 6066 10 614 0 +760 441 374 -18 873 1034 10 6 0 +761 399 175 -33 3020 3076 10 685 0 +762 103 464 -9 0 7428 10 924 0 +763 244 13 24 4068 4156 10 0 427 +764 51 360 13 0 7460 10 0 855 +765 44 115 24 944 1027 10 0 909 +766 312 453 6 0 7475 10 0 183 +767 64 198 10 4346 4482 10 0 336 +768 67 451 -33 0 7416 10 984 0 +769 371 71 -14 0 7471 10 793 0 +770 439 156 2 2101 2225 10 0 612 +771 105 474 27 1883 2003 10 0 887 +772 366 288 -9 0 7565 10 287 0 +773 415 207 -7 3588 3731 10 443 0 +774 58 39 -3 4615 4808 10 918 0 +775 197 202 -23 4784 4966 10 824 0 +776 442 5 -12 1262 1421 10 67 0 +777 71 12 -22 1177 1286 10 826 0 +778 74 215 -21 0 7508 10 953 0 +779 347 192 18 5930 6096 10 0 230 +780 178 420 18 4290 4401 10 0 912 +781 186 135 24 0 7556 10 0 165 +782 176 199 -12 0 7598 10 738 0 +783 438 5 -21 2201 2311 10 116 0 +784 150 68 23 1710 1793 10 0 310 +785 185 434 -15 2326 2383 10 313 0 +786 215 79 5 860 1048 10 0 180 +787 177 486 -24 6397 6501 10 843 0 +788 49 437 7 1698 1842 10 0 635 +789 100 66 15 5543 5775 10 0 480 +790 35 344 -30 3418 3607 10 892 0 +791 433 447 20 3179 3294 10 0 195 +792 372 97 -24 0 7492 10 990 0 +793 344 203 14 708 751 10 0 769 +794 423 170 27 2022 2203 10 0 749 +795 171 188 -14 2481 2604 10 668 0 +796 64 5 -18 4493 4658 10 634 0 +797 371 163 21 3328 3414 0 0 1005 +798 398 210 -5 0 7534 10 500 0 +799 48 437 -7 0 7412 10 649 0 +800 392 1 11 2419 2543 10 0 25 +801 195 464 -23 0 7467 10 281 0 +802 211 248 26 69 243 10 0 37 +803 293 228 19 133 253 10 0 396 +804 23 235 -22 4086 4220 10 327 0 +805 213 185 21 0 7613 10 0 216 +806 172 292 17 370 485 10 0 394 +807 228 287 21 97 248 10 0 548 +808 387 394 8 0 7489 10 0 896 +809 374 232 -15 0 7562 10 261 0 +810 48 366 -2 0 7455 10 699 0 +811 44 311 -20 1631 1749 10 54 0 +812 447 272 12 0 7489 10 0 864 +813 132 477 25 0 7432 10 0 214 +814 80 117 -35 3328 3385 10 368 0 +815 11 403 18 1416 1448 10 0 492 +816 144 220 35 0 7577 10 0 823 +817 473 491 23 1654 1772 10 0 213 +818 210 219 -31 0 7637 10 866 0 +819 452 484 26 5136 5212 10 0 211 +820 365 28 9 0 7437 10 0 342 +821 498 456 -17 5611 5757 10 468 0 +822 84 453 -13 4911 4993 10 729 0 +823 91 427 -35 3548 3633 10 816 0 +824 178 72 23 3035 3139 10 0 775 +825 409 155 -30 675 807 10 512 0 +826 132 151 22 0 7533 10 0 777 +827 136 430 -45 2828 2973 10 175 0 +828 292 104 26 1227 1324 10 0 357 +829 443 167 -31 2211 2254 10 262 0 +830 321 149 -15 5683 5834 10 245 0 +831 235 13 27 1412 1578 10 0 658 +832 166 440 12 772 890 10 0 941 +833 112 433 29 946 1055 10 0 678 +834 452 172 -25 0 7471 10 428 0 +835 37 281 17 1940 2125 10 0 845 +836 414 378 23 1961 2117 10 0 189 +837 475 352 -12 0 7440 10 550 0 +838 400 71 -12 5522 5574 10 983 0 +839 286 244 -6 5150 5242 10 378 0 +840 429 389 18 1700 1812 10 0 621 +841 92 76 -17 4598 4634 10 463 0 +842 124 111 15 0 7500 10 0 326 +843 268 458 24 0 7479 10 0 787 +844 352 63 -21 4718 4827 10 423 0 +845 49 118 -17 0 7447 10 835 0 +846 398 329 17 646 697 10 0 716 +847 382 9 -9 1118 1176 10 850 0 +848 229 322 -29 6635 6767 10 874 0 +849 279 355 -17 0 7579 10 181 0 +850 266 221 9 80 185 10 0 847 +851 142 80 -33 1980 2076 10 306 0 +852 359 287 24 0 7572 10 0 242 +853 482 104 -25 0 7413 10 523 0 +854 284 457 -15 6018 6090 10 680 0 +855 64 294 -13 4402 4528 10 764 0 +856 404 59 -30 0 7442 10 948 0 +857 68 160 -16 0 7484 10 108 0 +858 211 411 -30 4631 4662 10 251 0 +859 30 155 9 5129 5235 10 0 42 +860 240 34 -14 6247 6349 10 147 0 +861 107 374 -20 3642 3792 10 161 0 +862 404 140 -23 5063 5126 10 903 0 +863 436 467 -35 2950 3059 10 163 0 +864 421 386 -12 0 7469 10 812 0 +865 182 480 31 0 7448 10 0 134 +866 9 233 31 1227 1343 10 0 818 +867 110 251 23 2007 2095 10 0 526 +868 19 38 -15 3376 3521 10 696 0 +869 46 248 -40 3237 3394 10 931 0 +870 308 199 -22 5986 6201 10 65 0 +871 423 221 -14 1022 1164 10 639 0 +872 313 391 5 600 716 10 0 260 +873 413 345 20 4872 4993 10 0 652 +874 278 450 29 5504 5615 10 0 848 +875 94 497 -8 3132 3246 10 218 0 +876 7 382 27 3053 3231 10 0 202 +877 493 111 -1 2162 2286 10 373 0 +878 392 87 -17 0 7471 10 651 0 +879 13 394 15 0 7410 10 0 426 +880 259 301 25 383 528 10 0 264 +881 351 233 -14 5692 5811 10 542 0 +882 313 493 20 0 7436 10 0 950 +883 65 62 15 3883 4048 10 0 10 +884 417 212 12 0 7516 10 0 4 +885 450 194 27 2495 2623 10 0 622 +886 470 138 -12 5531 5704 10 78 0 +887 190 267 -27 7024 7126 10 771 0 +888 248 214 -20 5955 5999 10 994 0 +889 50 383 -2 1056 1145 10 671 0 +890 244 422 14 2134 2288 10 0 982 +891 60 29 -23 0 7396 10 421 0 +892 5 445 30 1230 1377 10 0 790 +893 490 276 -25 0 7446 10 968 0 +894 441 100 -6 0 7445 10 244 0 +895 162 388 11 4545 4584 10 0 593 +896 244 277 -8 5204 5326 10 808 0 +897 406 408 15 5799 5971 10 0 201 +898 265 240 9 21 123 10 0 11 +899 130 186 16 513 656 10 0 911 +900 382 110 -27 4427 4592 10 367 0 +901 142 14 -12 3349 3452 10 960 0 +902 352 487 -19 0 7429 10 961 0 +903 307 52 23 3703 3781 10 0 862 +904 418 399 20 1739 1882 10 0 726 +905 196 56 -25 2398 2597 10 257 0 +906 66 31 25 0 7401 10 0 737 +907 90 496 -21 5617 5665 10 728 0 +908 480 136 22 0 7431 10 0 942 +909 65 82 -24 2966 3071 10 765 0 +910 48 293 22 1120 1208 10 0 409 +911 105 181 -16 0 7527 10 899 0 +912 215 282 -18 5764 5879 10 780 0 +913 257 133 -19 3418 3600 10 609 0 +914 77 465 11 1029 1179 10 0 88 +915 43 135 31 0 7451 10 0 565 +916 27 444 -7 4290 4472 10 514 0 +917 357 290 24 0 7573 10 0 744 +918 38 15 3 0 7371 10 0 774 +919 80 337 28 4483 4590 10 0 209 +920 36 451 -34 3538 3692 10 93 0 +921 291 251 20 129 200 10 0 314 +922 195 111 -13 3991 4114 10 114 0 +923 383 17 15 3765 3879 10 0 661 +924 53 466 9 1332 1468 10 0 762 +925 114 102 -22 2058 2121 10 44 0 +926 350 199 21 4787 4945 10 0 35 +927 405 349 15 0 7504 10 0 945 +928 472 248 -7 0 7465 10 719 0 +929 333 293 27 2494 2563 10 0 462 +930 174 397 -6 4978 5099 10 638 0 +931 2 264 40 2617 2739 10 0 869 +932 7 82 25 1643 1770 10 0 51 +933 34 329 -4 4172 4292 10 160 0 +934 158 179 -16 373 557 10 59 0 +935 421 499 -26 5363 5519 10 247 0 +936 345 431 12 0 7483 10 0 389 +937 370 262 -35 4371 4545 10 254 0 +938 77 172 23 0 7498 10 0 617 +939 87 51 35 0 7430 10 0 601 +940 468 352 9 3031 3235 10 0 520 +941 63 420 -12 2071 2206 10 832 0 +942 347 184 -22 4316 4433 10 908 0 +943 206 174 -29 3201 3318 10 947 0 +944 209 212 -9 6142 6200 10 574 0 +945 466 362 -15 4595 4744 10 927 0 +946 201 278 13 170 282 10 0 501 +947 206 172 29 3131 3293 10 0 943 +948 471 94 30 3994 4117 10 0 856 +949 331 134 -20 4479 4631 10 559 0 +950 274 261 -20 6817 6959 10 882 0 +951 219 215 32 116 259 10 0 490 +952 349 76 -12 4121 4244 10 718 0 +953 86 189 21 906 1028 10 0 778 +954 336 493 20 5960 6103 10 0 964 +955 7 194 -19 3784 3947 10 277 0 +956 492 335 10 3316 3430 10 0 487 +957 248 386 22 1510 1636 10 0 530 +958 463 406 23 0 7423 10 0 200 +959 199 438 3 0 7493 10 0 618 +960 135 30 12 0 7439 10 0 901 +961 447 267 19 3910 4046 10 0 902 +962 235 33 -20 0 7470 10 647 0 +963 63 155 7 3856 3981 10 0 243 +964 294 421 -20 6292 6431 10 954 0 +965 318 99 -2 4854 4969 10 648 0 +966 21 146 21 1941 2073 10 0 331 +967 30 7 -8 4734 4895 10 169 0 +968 410 399 25 983 1007 10 0 893 +969 405 187 -11 4994 5131 10 502 0 +970 109 56 -25 905 1013 10 204 0 +971 212 47 20 0 7481 10 0 309 +972 479 387 13 1620 1680 10 0 388 +973 167 291 27 0 7595 10 0 566 +974 259 498 33 0 7439 10 0 246 +975 461 182 13 2540 2612 10 0 684 +976 277 428 7 1931 2112 10 0 352 +977 290 328 7 555 714 10 0 483 +978 146 313 -3 4793 4890 10 489 0 +979 40 304 16 4559 4718 10 0 625 +980 56 268 -27 4268 4364 10 280 0 +981 104 28 8 0 7422 10 0 591 +982 370 493 -14 0 7416 10 890 0 +983 136 265 12 390 530 10 0 838 +984 247 306 33 182 266 10 0 768 +985 241 38 16 2127 2246 10 0 619 +986 180 162 9 653 855 10 0 80 +987 253 118 -23 2191 2307 10 193 0 +988 413 391 -26 876 981 10 351 0 +989 380 350 15 3462 3589 10 0 707 +990 391 112 24 4039 4084 10 0 792 +991 86 199 23 1114 1228 10 0 293 +992 91 326 -20 0 7511 10 401 0 +993 287 256 18 61 239 10 0 573 +994 203 211 20 5241 5330 10 0 888 +995 79 80 19 5527 5650 10 0 400 +996 32 319 21 1621 1703 10 0 626 +997 167 445 -24 0 7476 10 126 0 +998 439 237 11 3811 3817 10 0 248 +999 373 418 -25 5034 5161 10 555 0 +1000 26 342 12 1298 1390 10 0 686 +1001 222 499 -7 0 7437 10 13 0 +1002 137 377 -23 0 7518 10 393 0 +1003 83 290 -14 2421 2560 10 482 0 +1004 257 391 -22 6547 6637 10 750 0 +1005 371 163 -21 3328 3414 10 797 0 +1006 325 147 -14 0 7560 10 467 0 +1007 246 314 -36 5773 5910 10 87 0 +1008 264 135 -1 3525 3630 10 605 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2103.txt b/jsprit-instances/instances/lilim/1000/LR2103.txt new file mode 100644 index 00000000..86a2b627 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2103.txt @@ -0,0 +1,1012 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 14 2329 2482 10 0 144 +2 325 56 -31 0 7480 10 145 0 +3 290 145 5 5130 5242 10 0 191 +4 340 291 -14 1893 1991 10 542 0 +5 370 382 -26 0 7509 10 819 0 +6 273 255 18 0 7664 10 0 664 +7 36 301 21 0 7468 10 0 996 +8 117 178 -15 4484 4574 10 138 0 +9 295 283 26 3538 3728 10 0 895 +10 57 43 15 0 7404 10 0 909 +11 436 123 40 835 966 10 0 409 +12 48 162 15 0 7467 10 0 795 +13 222 499 7 0 7437 10 0 843 +14 376 92 -10 0 7485 10 636 0 +15 437 90 12 0 7441 10 0 344 +16 3 23 11 1550 1702 10 0 796 +17 94 40 -14 4278 4387 10 407 0 +18 398 476 -7 0 7417 10 128 0 +19 307 249 10 0 7630 10 0 452 +20 179 286 8 1380 1469 10 0 544 +21 0 356 13 0 7416 0 0 1010 +22 143 158 12 0 7546 10 0 497 +23 413 476 34 4729 4823 10 0 195 +24 371 488 10 2285 2497 10 0 352 +25 415 118 19 0 7476 10 0 429 +26 440 77 14 0 7431 10 0 620 +27 261 201 -20 6060 6172 10 537 0 +28 490 286 29 2073 2224 10 0 727 +29 309 161 23 2287 2499 10 0 761 +30 39 162 -10 0 7459 10 778 0 +31 361 178 -17 3903 3996 10 490 0 +32 261 138 1 0 7575 10 0 369 +33 447 383 17 889 1013 10 0 750 +34 346 354 -16 3260 3399 10 615 0 +35 461 195 -34 0 7469 10 969 0 +36 187 263 -15 0 7623 10 696 0 +37 130 247 17 0 7567 10 0 384 +38 328 491 -7 2702 2845 10 453 0 +39 161 276 -36 476 711 10 887 0 +40 365 74 24 3379 3529 10 0 763 +41 168 109 10 810 944 10 0 558 +42 111 192 -12 0 7537 10 774 0 +43 87 213 18 0 7520 10 0 647 +44 45 166 22 0 7466 10 0 990 +45 62 94 -15 0 7443 10 240 0 +46 348 476 19 0 7441 10 0 982 +47 64 437 11 0 7424 10 0 291 +48 56 75 24 0 7426 10 0 789 +49 24 259 -21 0 7461 10 857 0 +50 295 247 -24 5212 5335 10 141 0 +51 6 53 -32 0 7374 10 891 0 +52 15 11 -9 0 7352 10 986 0 +53 179 497 1 0 7430 10 0 474 +54 67 352 20 1514 1592 10 0 587 +55 317 45 8 0 7472 10 0 692 +56 40 278 -15 0 7476 10 734 0 +57 33 278 -7 5910 6108 10 963 0 +58 322 290 -22 0 7605 10 331 0 +59 159 226 16 314 439 10 0 466 +60 208 445 22 0 7488 10 0 187 +61 453 360 13 858 990 10 0 189 +62 34 169 -16 0 7457 10 611 0 +63 436 25 19 5113 5266 10 0 675 +64 393 98 -10 3013 3127 10 298 0 +65 466 96 -10 0 7422 10 576 0 +66 366 390 23 5266 5400 10 0 927 +67 303 78 -23 0 7508 10 475 0 +68 374 116 -21 0 7505 10 742 0 +69 424 288 -15 0 7509 10 214 0 +70 191 84 -23 0 7511 10 193 0 +71 59 276 11 0 7495 10 0 979 +72 215 293 13 128 315 10 0 192 +73 343 276 15 321 451 10 0 893 +74 488 173 -15 4836 4966 10 245 0 +75 452 110 14 0 7442 10 0 862 +76 153 244 -10 0 7590 10 767 0 +77 176 200 17 2266 2394 10 0 165 +78 498 171 12 0 7427 10 0 838 +79 492 188 -13 2904 2939 10 975 0 +80 177 156 -19 0 7568 10 913 0 +81 398 49 -16 3167 3288 10 91 0 +82 497 296 -11 0 7436 10 928 0 +83 276 84 20 0 7519 10 0 670 +84 128 113 -20 0 7504 10 553 0 +85 422 498 5 0 7386 10 0 358 +86 460 424 -25 5786 5970 10 555 0 +87 246 314 -13 5773 5910 10 484 0 +88 0 422 -16 3300 3388 10 108 0 +89 166 247 1 291 382 10 0 387 +90 311 422 29 0 7505 10 0 374 +91 392 95 16 3060 3189 10 0 81 +92 460 117 -34 0 7439 10 552 0 +93 28 467 -20 0 7377 10 469 0 +94 375 145 12 3719 3836 10 0 432 +95 240 255 33 6404 6604 0 0 1005 +96 440 436 -17 3549 3706 10 468 0 +97 454 201 -16 5218 5342 10 178 0 +98 407 35 -9 0 7421 10 898 0 +99 420 383 27 0 7472 10 0 749 +100 264 180 33 0 7616 10 0 215 +101 440 294 -24 3836 3966 10 852 0 +102 500 228 8 3137 3237 10 0 223 +103 144 331 13 3709 3860 10 0 294 +104 98 2 -18 2361 2493 10 901 0 +105 461 186 16 0 7467 10 0 669 +106 68 450 -15 0 7417 10 516 0 +107 153 192 13 0 7574 10 0 414 +108 34 239 16 896 975 10 0 88 +109 465 367 14 4087 4248 10 0 691 +110 208 488 22 1934 2007 10 0 896 +111 93 413 -5 849 961 10 316 0 +112 371 332 14 0 7541 10 0 410 +113 231 167 15 246 435 10 0 784 +114 179 75 13 2982 3057 10 0 295 +115 196 489 -11 4135 4226 10 914 0 +116 280 245 -44 0 7657 10 237 0 +117 108 37 23 0 7432 10 0 485 +118 1 101 -27 5021 5158 10 970 0 +119 420 80 -11 0 7447 10 650 0 +120 38 190 23 0 7467 10 0 239 +121 470 405 17 3694 3832 10 0 560 +122 448 397 -18 0 7441 10 840 0 +123 471 427 -13 0 7404 10 972 0 +124 146 376 8 928 1066 10 0 131 +125 12 358 7 4891 5024 10 0 329 +126 175 422 -17 5771 5920 10 330 0 +127 297 131 -18 4640 4803 10 345 0 +128 457 492 7 0 7369 10 0 18 +129 69 423 32 0 7437 10 0 209 +130 97 288 -13 5142 5251 10 736 0 +131 172 314 -8 0 7587 10 124 0 +132 170 347 15 1764 1842 10 0 150 +133 103 123 8 1966 2072 10 0 792 +134 154 374 36 0 7531 10 0 698 +135 318 497 21 0 7431 10 0 539 +136 330 147 28 3383 3525 10 0 534 +137 241 180 13 6789 6887 10 0 273 +138 174 67 15 0 7489 10 0 8 +139 235 288 -9 0 7647 10 522 0 +140 94 192 -33 0 7521 10 306 0 +141 232 101 24 1405 1483 10 0 50 +142 28 180 34 1551 1653 10 0 348 +143 64 135 11 3495 3571 10 0 628 +144 174 376 -14 0 7540 10 1 0 +145 293 174 31 279 420 10 0 2 +146 218 12 3 2204 2268 10 0 782 +147 110 122 -31 0 7498 10 866 0 +148 459 53 20 0 7400 10 0 274 +149 173 474 -14 0 7451 10 823 0 +150 135 400 -15 0 7498 10 132 0 +151 497 266 25 2996 3104 10 0 715 +152 380 194 3 0 7546 10 0 487 +153 495 227 -10 0 7441 10 347 0 +154 268 351 -10 6698 6822 10 759 0 +155 213 399 18 941 1051 10 0 572 +156 448 414 -15 0 7430 10 211 0 +157 327 139 -24 5021 5158 10 674 0 +158 151 81 28 0 7492 10 0 652 +159 425 448 9 3152 3324 10 0 200 +160 92 259 4 0 7529 10 0 689 +161 59 388 -19 2650 2772 10 495 0 +162 468 360 -14 0 7443 10 334 0 +163 332 459 -7 0 7463 10 977 0 +164 469 489 -15 2211 2353 10 313 0 +165 248 176 -17 5579 5753 10 77 0 +166 174 41 -13 0 7465 10 383 0 +167 343 205 26 3081 3178 10 0 744 +168 154 392 -7 0 7516 10 464 0 +169 92 18 8 0 7407 10 0 225 +170 250 328 -10 0 7609 10 315 0 +171 88 484 5 0 7403 10 0 627 +172 360 488 19 1252 1393 10 0 359 +173 156 65 22 4143 4275 10 0 581 +174 18 225 -28 2757 2893 10 398 0 +175 152 476 45 2112 2188 10 0 333 +176 176 470 -12 0 7455 10 702 0 +177 195 450 -13 5946 6061 10 946 0 +178 466 149 16 4761 4848 10 0 97 +179 221 269 -16 0 7653 10 184 0 +180 105 137 32 0 7504 10 0 504 +181 284 319 -21 3270 3384 10 284 0 +182 41 120 -3 2791 2897 10 845 0 +183 263 418 -22 0 7519 10 957 0 +184 218 271 16 6280 6429 10 0 179 +185 365 119 -19 0 7513 10 342 0 +186 89 322 -2 4099 4186 10 307 0 +187 180 283 -22 2963 3107 10 60 0 +188 385 17 40 3186 3404 10 0 571 +189 401 314 -13 3875 4057 10 61 0 +190 245 176 20 4943 5055 10 0 881 +191 251 238 -5 0 7675 10 3 0 +192 139 438 -13 865 966 10 72 0 +193 236 126 23 400 598 10 0 70 +194 61 441 27 2201 2268 10 0 764 +195 405 454 -34 0 7431 10 23 0 +196 111 392 -12 4693 4780 10 741 0 +197 373 421 -26 939 1080 10 481 0 +198 247 443 -8 0 7494 10 218 0 +199 322 406 17 0 7516 10 0 532 +200 412 478 -9 3851 3946 10 159 0 +201 374 346 -15 0 7531 10 680 0 +202 122 422 3 0 7473 10 0 833 +203 261 359 -14 0 7578 10 355 0 +204 173 182 25 383 438 10 0 934 +205 398 341 33 0 7514 10 0 459 +206 413 127 -18 0 7483 10 311 0 +207 325 311 -27 5290 5409 10 243 0 +208 80 357 -26 2093 2271 10 802 0 +209 67 378 -32 0 7464 10 129 0 +210 216 341 19 0 7590 10 0 660 +211 498 457 15 0 7364 10 0 156 +212 44 344 12 0 7461 10 0 980 +213 352 481 15 5136 5261 10 0 954 +214 237 420 15 0 7517 10 0 69 +215 389 43 -33 0 7438 10 100 0 +216 292 136 28 0 7566 10 0 299 +217 426 38 23 0 7412 10 0 800 +218 245 461 8 0 7476 10 0 198 +219 415 253 -8 0 7522 10 221 0 +220 298 264 36 147 253 10 0 254 +221 307 412 8 0 7516 10 0 219 +222 53 204 8 4206 4354 10 0 318 +223 480 152 -8 0 7437 10 102 0 +224 262 97 17 0 7534 10 0 546 +225 83 169 -8 0 7502 10 169 0 +226 377 432 20 0 7466 10 0 389 +227 390 249 -33 0 7547 10 809 0 +228 132 479 11 997 1063 10 0 827 +229 359 246 -33 5725 5777 10 339 0 +230 314 205 -15 6086 6249 10 289 0 +231 124 448 6 0 7453 10 0 974 +232 0 188 -29 0 7430 10 955 0 +233 343 166 28 3512 3616 10 0 949 +234 482 141 -19 4028 4178 10 853 0 +235 162 306 22 494 580 10 0 323 +236 24 71 11 1394 1494 10 0 868 +237 188 119 44 3903 4016 10 0 116 +238 100 85 14 0 7465 10 0 400 +239 103 177 -23 2494 2637 10 120 0 +240 26 67 15 0 7398 10 0 45 +241 164 332 -5 5107 5250 10 317 0 +242 385 285 -27 3478 3586 10 519 0 +243 209 68 27 0 7501 10 0 207 +244 149 341 6 0 7552 10 0 596 +245 415 95 15 4708 4825 10 0 74 +246 167 488 -9 972 1148 10 548 0 +247 413 493 -23 4894 4971 10 817 0 +248 439 222 -21 3929 4028 10 454 0 +249 150 484 -22 2498 2623 10 762 0 +250 299 353 -30 0 7573 10 251 0 +251 273 300 30 153 288 10 0 250 +252 402 277 5 5771 5856 10 0 658 +253 239 15 2 0 7452 10 0 366 +254 363 225 -36 3426 3541 10 220 0 +255 65 343 38 802 976 10 0 635 +256 351 60 15 0 7472 10 0 402 +257 60 246 25 704 816 10 0 699 +258 144 35 26 0 7448 10 0 595 +259 463 253 -10 4171 4325 10 956 0 +260 332 382 2 4037 4167 10 0 479 +261 408 318 15 2558 2707 10 0 582 +262 452 206 31 1958 2099 10 0 885 +263 471 368 19 1718 1827 10 0 621 +264 93 490 2 1527 1626 10 0 377 +265 241 402 11 0 7535 10 0 585 +266 60 231 -35 0 7497 10 368 0 +267 172 66 -2 0 7488 10 648 0 +268 404 207 -21 3634 3771 10 404 0 +269 286 356 30 354 542 10 0 529 +270 489 338 -23 5551 5746 10 707 0 +271 334 481 -3 1323 1440 10 489 0 +272 26 442 -31 0 7392 10 440 0 +273 226 175 -13 6798 6871 10 137 0 +274 488 3 -20 0 7344 10 148 0 +275 178 150 -24 0 7564 10 310 0 +276 371 423 10 810 878 10 0 551 +277 5 224 -9 0 7441 10 869 0 +278 94 344 -12 2746 2832 10 354 0 +279 153 235 10 324 462 10 0 740 +280 12 367 -40 1282 1444 10 931 0 +281 217 357 23 0 7576 10 0 616 +282 255 487 -33 0 7450 10 984 0 +283 149 214 -35 0 7580 10 816 0 +284 169 305 21 0 7590 10 0 181 +285 487 446 9 5360 5482 10 0 950 +286 267 374 -27 0 7562 10 902 0 +287 360 294 9 0 7569 10 0 604 +288 185 431 15 0 7495 10 0 865 +289 325 210 15 0 7602 10 0 230 +290 175 352 -17 6652 6789 10 806 0 +291 76 462 -11 3813 3955 10 47 0 +292 19 273 25 0 7455 10 0 686 +293 72 227 25 2258 2373 10 0 588 +294 213 283 -13 0 7638 10 103 0 +295 130 140 -13 0 7525 10 114 0 +296 274 442 -10 4301 4350 10 445 0 +297 337 41 -5 0 7461 10 590 0 +298 372 39 10 2886 3022 10 0 64 +299 269 112 -28 0 7548 10 216 0 +300 224 56 13 0 7492 10 0 499 +301 340 416 36 1293 1396 10 0 332 +302 13 214 -25 5428 5520 10 406 0 +303 230 320 -28 4770 4887 10 758 0 +304 6 196 -23 4772 4973 10 867 0 +305 87 3 13 0 7392 10 0 634 +306 133 202 33 1827 1978 10 0 140 +307 235 316 2 2616 2751 10 0 186 +308 435 180 37 0 7490 10 0 340 +309 173 65 12 1768 1940 10 0 922 +310 245 42 24 2203 2295 10 0 275 +311 384 149 18 0 7520 10 0 206 +312 51 286 14 0 7485 10 0 662 +313 267 290 15 111 236 10 0 164 +314 453 318 -14 1489 1621 10 594 0 +315 189 402 10 0 7524 10 0 170 +316 210 276 5 138 243 10 0 111 +317 120 261 5 3154 3312 10 0 241 +318 35 263 -8 0 7472 10 222 0 +319 429 59 9 1827 1964 10 0 425 +320 330 308 24 0 7589 0 0 1008 +321 58 391 -22 3528 3651 10 349 0 +322 260 472 -25 4143 4265 10 813 0 +323 217 333 -22 0 7598 10 235 0 +324 335 46 18 5400 5453 10 0 350 +325 198 85 28 1032 1189 10 0 805 +326 138 28 23 4362 4530 10 0 491 +327 29 336 22 0 7450 10 0 1000 +328 200 27 -19 0 7459 10 609 0 +329 157 269 -7 0 7593 10 125 0 +330 177 404 17 0 7517 10 0 126 +331 202 28 22 3733 3860 10 0 58 +332 366 334 -36 0 7544 10 301 0 +333 149 458 -45 0 7456 10 175 0 +334 481 454 14 1278 1406 10 0 162 +335 377 385 -6 3486 3564 10 766 0 +336 217 207 26 0 7633 10 0 381 +337 96 346 26 765 836 10 0 506 +338 224 320 -7 5187 5202 10 976 0 +339 206 97 33 1785 1920 10 0 229 +340 438 127 -37 0 7463 10 308 0 +341 494 468 -12 1417 1523 10 554 0 +342 494 165 19 2401 2553 10 0 185 +343 5 281 16 0 7441 10 0 910 +344 441 60 -12 0 7418 10 15 0 +345 14 232 18 0 7451 10 0 127 +346 288 439 16 1121 1187 10 0 730 +347 420 224 10 1704 1848 10 0 153 +348 267 162 -34 0 7598 10 142 0 +349 195 273 22 156 320 10 0 321 +350 233 230 -18 0 7661 10 324 0 +351 382 360 26 696 849 10 0 688 +352 406 460 -10 2868 3006 10 24 0 +353 499 316 18 0 7430 10 0 577 +354 246 407 12 1235 1377 10 0 278 +355 283 454 14 0 7481 10 0 203 +356 426 231 24 4102 4245 10 0 557 +357 432 2 20 1848 2004 10 0 515 +358 404 439 -5 0 7444 10 85 0 +359 397 477 -19 0 7417 10 172 0 +360 44 140 11 3464 3602 10 0 786 +361 330 138 18 0 7550 10 0 971 +362 39 153 -18 0 7455 10 480 0 +363 397 153 -16 3507 3673 10 899 0 +364 226 316 21 234 328 10 0 780 +365 354 156 -6 0 7547 10 433 0 +366 201 66 -2 0 7497 10 253 0 +367 389 156 27 2851 2993 10 0 528 +368 134 211 35 458 626 10 0 266 +369 386 154 -1 0 7521 10 32 0 +370 335 99 25 0 7514 10 0 415 +371 356 256 -21 0 7581 10 733 0 +372 240 362 23 0 7575 0 0 1006 +373 412 100 -13 0 7467 10 390 0 +374 394 322 -29 4111 4207 10 90 0 +375 48 150 -4 0 7462 10 706 0 +376 225 121 -30 0 7556 10 962 0 +377 102 422 -2 0 7461 10 264 0 +378 339 41 -11 0 7460 10 450 0 +379 440 201 -29 0 7491 10 444 0 +380 411 379 25 4781 4886 10 0 854 +381 219 210 -26 0 7637 10 336 0 +382 250 441 5 0 7496 10 0 757 +383 210 29 13 4213 4314 10 0 166 +384 178 302 -17 3553 3659 10 37 0 +385 148 208 22 0 7577 10 0 654 +386 225 369 38 432 541 10 0 533 +387 16 287 -1 0 7451 10 89 0 +388 450 416 -8 2281 2453 10 988 0 +389 287 397 -20 0 7536 10 226 0 +390 285 247 13 0 7652 10 0 373 +391 351 481 10 1284 1410 10 0 863 +392 243 408 -9 5720 5870 10 562 0 +393 137 377 23 0 7518 10 0 752 +394 33 152 17 5278 5403 0 0 1001 +395 68 303 22 904 987 10 0 889 +396 456 113 17 4922 5015 10 0 568 +397 134 276 -29 0 7569 10 492 0 +398 26 221 28 0 7462 10 0 174 +399 79 257 26 3803 3942 10 0 463 +400 181 185 -14 6436 6594 10 238 0 +401 104 349 -19 4058 4135 10 405 0 +402 267 174 -15 6470 6596 10 256 0 +403 475 267 -13 0 7462 10 573 0 +404 385 239 21 3130 3274 10 0 268 +405 95 382 19 929 1041 10 0 401 +406 67 190 25 0 7495 10 0 302 +407 32 94 14 3707 3854 10 0 17 +408 401 164 -27 0 7514 10 693 0 +409 376 113 -40 0 7501 10 11 0 +410 409 255 -14 0 7528 10 112 0 +411 228 260 -25 6450 6514 10 646 0 +412 363 34 19 0 7444 10 0 769 +413 274 441 -27 0 7495 10 771 0 +414 146 188 -13 0 7566 10 107 0 +415 212 186 -25 6893 6999 10 370 0 +416 432 66 30 0 7429 10 0 531 +417 83 300 26 1987 2131 10 0 876 +418 51 89 -16 0 7432 10 613 0 +419 379 486 22 2679 2815 10 0 935 +420 440 284 -25 0 7494 10 513 0 +421 175 239 23 0 7612 10 0 710 +422 282 1 -14 4184 4276 10 753 0 +423 268 113 21 2734 2823 10 0 574 +424 480 131 5 0 7429 10 0 430 +425 429 67 -9 2938 3040 10 319 0 +426 162 301 -31 6423 6601 10 875 0 +427 281 96 -21 4532 4594 10 953 0 +428 495 199 25 0 7437 10 0 779 +429 372 115 -19 0 7506 10 25 0 +430 396 83 -5 6362 6449 10 424 0 +431 239 486 3 0 7451 10 0 703 +432 288 70 -12 0 7504 10 94 0 +433 66 163 6 1566 1718 10 0 365 +434 470 417 11 0 7411 10 0 945 +435 226 423 15 832 863 10 0 550 +436 342 319 -27 0 7572 10 821 0 +437 174 122 -10 0 7539 10 619 0 +438 49 353 -32 5810 5879 10 458 0 +439 448 495 -12 0 7372 10 936 0 +440 13 465 31 0 7368 10 0 272 +441 489 159 -25 5723 5818 10 704 0 +442 311 203 -19 2892 3008 10 462 0 +443 480 119 -21 2515 2632 10 797 0 +444 442 153 29 4765 4865 10 0 379 +445 148 462 10 2906 3028 10 0 296 +446 233 87 18 966 1174 10 0 746 +447 323 34 -13 0 7459 10 856 0 +448 84 377 -11 3699 3831 10 848 0 +449 292 32 14 888 1066 10 0 597 +450 418 75 11 1807 1896 10 0 378 +451 451 305 -15 0 7479 10 653 0 +452 225 269 -10 5082 5205 10 19 0 +453 272 420 7 0 7516 10 0 38 +454 318 280 21 254 340 10 0 248 +455 250 57 26 0 7494 10 0 781 +456 77 372 -16 0 7476 10 561 0 +457 385 58 24 1661 1697 0 0 1003 +458 44 496 32 0 7367 10 0 438 +459 460 328 -33 872 1001 10 205 0 +460 67 24 10 0 7397 10 0 570 +461 91 27 -25 4699 4874 10 906 0 +462 360 284 19 2660 2792 10 0 442 +463 82 183 -26 4444 4490 10 399 0 +464 153 362 7 4647 4762 10 0 168 +465 52 412 -9 5608 5758 10 924 0 +466 32 191 -16 2344 2465 10 59 0 +467 325 147 -19 0 7560 10 803 0 +468 328 458 17 0 7465 10 0 96 +469 133 273 20 419 535 10 0 93 +470 147 30 26 4424 4565 10 0 905 +471 131 246 -9 3348 3429 10 785 0 +472 433 319 -15 5509 5621 10 937 0 +473 168 59 6 0 7480 10 0 524 +474 218 403 -1 5305 5368 10 53 0 +475 295 89 23 0 7520 10 0 67 +476 118 314 26 1315 1505 10 0 501 +477 251 63 14 3981 4039 10 0 521 +478 388 44 -1 4519 4647 10 605 0 +479 381 328 -2 0 7535 10 260 0 +480 132 32 18 0 7440 10 0 362 +481 334 403 26 620 776 10 0 197 +482 83 290 -5 0 7516 10 602 0 +483 411 396 23 3667 3814 10 0 713 +484 243 402 13 0 7535 10 0 87 +485 52 18 -23 0 7382 10 117 0 +486 265 0 -24 0 7437 10 765 0 +487 268 288 -3 5075 5181 10 152 0 +488 476 61 -5 1780 1930 10 500 0 +489 283 438 3 939 1032 10 0 271 +490 191 215 17 211 338 10 0 31 +491 253 50 -23 0 7487 10 326 0 +492 71 282 29 0 7506 10 0 397 +493 297 304 4 227 345 10 0 958 +494 244 368 -6 0 7569 10 638 0 +495 80 279 19 0 7515 10 0 161 +496 488 96 22 4264 4386 10 0 651 +497 142 30 -12 0 7442 10 22 0 +498 68 240 -43 3176 3300 10 804 0 +499 193 138 -13 0 7562 10 300 0 +500 451 62 5 0 7412 10 0 488 +501 138 406 -26 4892 4956 10 476 0 +502 306 42 11 1944 1989 10 0 985 +503 247 219 -32 0 7656 10 589 0 +504 98 29 -32 4209 4284 10 180 0 +505 102 6 -21 0 7402 10 743 0 +506 142 360 -26 0 7533 10 337 0 +507 172 24 -27 5814 5924 10 612 0 +508 352 241 5 3178 3280 10 0 745 +509 486 324 15 0 7440 10 0 739 +510 133 455 25 0 7451 10 0 732 +511 440 292 24 3776 3864 10 0 725 +512 364 173 30 700 862 10 0 948 +513 442 289 25 0 7492 10 0 420 +514 48 412 -18 0 7429 10 815 0 +515 344 70 -20 4542 4743 10 357 0 +516 78 406 15 3818 3986 10 0 106 +517 329 456 19 1008 1104 10 0 641 +518 157 38 -18 0 7456 10 701 0 +519 374 260 27 0 7563 10 0 242 +520 297 283 -29 0 7630 10 864 0 +521 210 113 -14 0 7545 10 477 0 +522 215 434 9 0 7500 10 0 139 +523 262 92 -10 2507 2657 10 598 0 +524 140 108 -6 0 7508 10 473 0 +525 235 108 -33 4307 4449 10 685 0 +526 210 133 -27 0 7564 10 831 0 +527 25 53 -8 4088 4193 10 981 0 +528 339 113 -27 3050 3154 10 367 0 +529 394 310 -30 4410 4498 10 269 0 +530 126 391 19 0 7500 10 0 787 +531 343 34 -30 2882 3036 10 416 0 +532 354 416 -17 2719 2836 10 199 0 +533 202 391 -38 2497 2611 10 386 0 +534 367 97 -28 0 7495 10 136 0 +535 188 151 -28 0 7571 10 860 0 +536 111 178 18 593 659 10 0 947 +537 456 157 20 5788 5972 10 0 27 +538 441 7 20 0 7378 10 0 632 +539 270 337 -21 0 7598 10 135 0 +540 323 29 7 4533 4687 10 0 695 +541 200 78 31 0 7508 10 0 775 +542 330 281 14 0 7602 10 0 4 +543 438 488 18 1304 1433 10 0 592 +544 161 416 -8 0 7499 10 20 0 +545 30 97 23 4851 4951 10 0 593 +546 273 70 -17 2458 2617 10 224 0 +547 214 245 8 0 7651 10 0 754 +548 221 291 9 184 305 10 0 246 +549 79 467 22 1400 1531 10 0 731 +550 423 315 -15 0 7503 10 435 0 +551 395 474 -10 0 7421 10 276 0 +552 481 207 34 3447 3521 10 0 92 +553 199 203 20 0 7618 10 0 84 +554 497 483 12 1407 1541 10 0 341 +555 449 428 25 4966 5129 10 0 86 +556 100 266 -12 0 7537 10 626 0 +557 214 274 -24 5490 5583 10 356 0 +558 16 68 -10 0 7391 10 41 0 +559 475 198 -2 3335 3466 10 642 0 +560 371 427 -17 3811 3974 10 121 0 +561 62 375 16 1410 1500 10 0 456 +562 163 472 9 2611 2736 10 0 392 +563 13 314 14 0 7442 10 0 625 +564 376 385 12 0 7503 10 0 682 +565 231 29 14 4896 5035 10 0 994 +566 89 358 -7 4950 5147 10 649 0 +567 331 356 -20 0 7554 10 791 0 +568 365 190 -17 5897 6043 10 396 0 +569 256 441 34 0 7496 10 0 959 +570 120 37 -10 0 7438 10 460 0 +571 349 43 -40 0 7458 10 188 0 +572 230 487 -18 0 7450 10 155 0 +573 489 457 13 0 7371 10 0 403 +574 341 72 -21 3243 3315 10 423 0 +575 181 441 -18 0 7484 10 678 0 +576 306 229 10 0 7628 10 0 65 +577 492 326 -18 4863 4890 10 353 0 +578 347 459 25 0 7457 10 0 747 +579 66 88 -30 0 7442 10 601 0 +580 272 234 -15 6353 6489 10 989 0 +581 134 194 -22 0 7559 10 173 0 +582 320 211 -15 0 7607 10 261 0 +583 214 311 14 0 7617 10 0 978 +584 489 274 31 2132 2258 10 0 677 +585 231 410 -11 0 7526 10 265 0 +586 432 199 -23 0 7498 10 720 0 +587 29 358 -20 2425 2581 10 54 0 +588 62 236 -25 2238 2345 10 293 0 +589 333 163 32 4973 5068 10 0 503 +590 364 71 5 0 7475 10 0 297 +591 125 65 17 0 7464 10 0 697 +592 429 476 -18 2314 2392 10 543 0 +593 161 275 -23 5370 5524 10 545 0 +594 365 274 14 395 545 10 0 314 +595 117 110 -26 0 7494 10 258 0 +596 166 345 -6 4517 4642 10 244 0 +597 345 146 -14 5727 5905 10 449 0 +598 324 99 10 1368 1455 10 0 523 +599 72 477 -21 0 7399 10 728 0 +600 487 320 21 0 7440 0 0 1002 +601 120 17 30 0 7421 10 0 579 +602 1 252 5 1103 1218 10 0 482 +603 303 186 -18 0 7604 10 830 0 +604 428 302 -9 0 7502 10 287 0 +605 264 135 1 0 7572 10 0 478 +606 223 178 -6 0 7611 10 844 0 +607 174 347 3 0 7564 10 0 919 +608 238 123 24 0 7560 10 0 663 +609 187 61 19 2155 2325 10 0 328 +610 52 303 -15 0 7483 10 879 0 +611 89 185 16 2401 2517 10 0 62 +612 341 59 27 3156 3282 10 0 507 +613 89 65 16 2863 3019 10 0 418 +614 495 355 -9 4981 5084 10 940 0 +615 368 452 16 2673 2806 10 0 34 +616 164 473 -23 1149 1340 10 281 0 +617 171 34 21 4579 4685 10 0 944 +618 114 460 14 0 7437 10 0 997 +619 224 3 10 0 7439 10 0 437 +620 472 57 -14 0 7393 10 26 0 +621 448 404 -19 2407 2505 10 263 0 +622 390 120 -8 0 7496 10 721 0 +623 386 225 13 0 7549 10 0 773 +624 301 239 31 169 248 10 0 794 +625 115 296 -14 6112 6239 10 563 0 +626 69 266 12 0 7506 10 0 556 +627 115 395 -5 3274 3368 10 171 0 +628 68 53 -11 0 7419 10 143 0 +629 33 268 -23 0 7470 10 938 0 +630 450 45 24 2005 2144 10 0 708 +631 351 5 -5 0 7422 10 673 0 +632 351 148 -20 0 7544 10 538 0 +633 80 458 30 1515 1569 10 0 858 +634 60 5 -13 4166 4304 10 305 0 +635 10 407 -38 1758 1838 10 255 0 +636 497 18 10 4520 4641 10 0 14 +637 437 98 -17 4480 4549 10 829 0 +638 130 494 6 3036 3154 10 0 494 +639 391 202 14 0 7539 10 0 912 +640 43 210 20 0 7477 10 0 748 +641 381 457 -19 0 7443 10 517 0 +642 449 190 2 0 7480 10 0 559 +643 429 169 8 3607 3735 10 0 886 +644 105 140 27 678 779 10 0 814 +645 282 10 -15 5031 5181 10 883 0 +646 20 480 25 2297 2385 10 0 411 +647 61 170 -18 0 7482 10 43 0 +648 210 81 2 0 7514 10 0 267 +649 87 311 7 0 7513 10 0 566 +650 309 29 11 0 7459 10 0 119 +651 397 57 -22 5876 6052 10 496 0 +652 337 232 -28 6266 6418 10 158 0 +653 262 369 15 513 641 10 0 451 +654 41 232 -22 0 7478 10 385 0 +655 69 414 -19 5007 5220 10 822 0 +656 149 98 -22 0 7505 10 826 0 +657 207 487 4 0 7447 10 0 890 +658 366 260 -5 0 7571 10 252 0 +659 497 54 14 0 7372 10 0 676 +660 210 379 -19 0 7552 10 210 0 +661 437 19 -16 0 7390 10 776 0 +662 181 260 -14 0 7618 10 312 0 +663 125 61 -24 2460 2554 10 608 0 +664 368 311 -18 0 7555 10 6 0 +665 80 400 -19 5772 5918 10 941 0 +666 75 118 21 0 7468 10 0 723 +667 171 303 18 0 7592 10 0 992 +668 80 251 14 1215 1334 10 0 943 +669 455 168 -16 3501 3554 10 105 0 +670 215 129 -20 4479 4589 10 83 0 +671 179 318 -27 0 7589 10 973 0 +672 187 73 -21 0 7500 10 925 0 +673 394 47 5 1223 1401 10 0 631 +674 31 175 24 0 7456 10 0 157 +675 339 144 -19 0 7549 10 63 0 +676 492 34 -14 0 7363 10 659 0 +677 387 349 -31 0 7518 10 584 0 +678 142 372 18 0 7525 10 0 575 +679 291 213 -12 5018 5163 10 851 0 +680 421 387 15 0 7468 10 0 201 +681 274 403 -29 0 7533 10 874 0 +682 434 359 -12 5585 5673 10 564 0 +683 257 57 -15 0 7494 10 842 0 +684 428 202 24 0 7503 10 0 870 +685 355 174 33 2847 2996 10 0 525 +686 46 389 -25 0 7441 10 292 0 +687 44 440 -26 0 7407 10 705 0 +688 491 369 -26 2891 3065 10 351 0 +689 33 286 -4 0 7468 10 160 0 +690 351 128 15 5010 5136 10 0 888 +691 485 428 -14 0 7393 10 109 0 +692 273 149 -8 0 7584 10 55 0 +693 447 184 27 0 7480 10 0 408 +694 386 245 16 0 7551 10 0 926 +695 323 77 -7 5590 5771 10 540 0 +696 21 70 15 3065 3224 10 0 36 +697 9 101 -17 0 7404 10 591 0 +698 71 304 -36 2745 2888 10 134 0 +699 43 360 -25 3339 3463 10 257 0 +700 396 417 -20 0 7466 10 722 0 +701 158 24 18 2419 2590 10 0 518 +702 164 320 12 0 7577 10 0 176 +703 195 386 -3 0 7541 10 431 0 +704 306 235 25 172 291 10 0 441 +705 66 314 26 723 835 10 0 687 +706 95 64 4 3083 3164 10 0 375 +707 348 348 23 0 7549 10 0 270 +708 495 83 -24 0 7391 10 630 0 +709 61 214 4 1309 1545 10 0 952 +710 240 240 -23 6820 6897 10 421 0 +711 140 137 -23 2276 2401 10 991 0 +712 242 106 28 0 7543 10 0 987 +713 392 491 -23 4542 4641 10 483 0 +714 342 481 18 5769 5871 10 0 882 +715 478 300 -25 3589 3648 10 151 0 +716 299 285 -12 4991 5160 10 812 0 +717 481 84 17 0 7403 10 0 877 +718 271 128 12 0 7564 10 0 923 +719 484 224 7 0 7452 10 0 751 +720 441 177 23 4022 4107 10 0 586 +721 46 163 8 0 7466 10 0 622 +722 493 493 20 3457 3515 10 0 700 +723 253 74 -21 5375 5546 10 666 0 +724 390 34 -23 4201 4401 10 878 0 +725 374 306 -24 3992 4081 10 511 0 +726 436 295 11 0 7496 10 0 880 +727 371 315 -29 4679 4767 10 28 0 +728 27 464 21 0 7378 10 0 599 +729 3 471 -7 0 7356 10 788 0 +730 418 269 -16 0 7518 10 346 0 +731 90 477 -22 0 7410 10 549 0 +732 141 426 -25 0 7480 10 510 0 +733 418 251 21 4770 4925 10 0 371 +734 57 183 15 4375 4548 10 0 56 +735 29 462 -12 0 7381 10 983 0 +736 55 318 13 1250 1365 10 0 130 +737 18 24 -12 2551 2596 10 960 0 +738 263 153 12 0 7590 10 0 847 +739 289 220 -15 0 7638 10 509 0 +740 84 255 -10 0 7521 10 279 0 +741 159 299 12 0 7584 10 0 196 +742 485 104 21 0 7411 10 0 68 +743 178 135 21 0 7552 10 0 505 +744 389 255 -26 0 7548 10 167 0 +745 457 280 -5 4013 4105 10 508 0 +746 171 24 -18 0 7448 10 446 0 +747 330 371 -25 0 7542 10 578 0 +748 10 237 -20 0 7447 10 640 0 +749 458 213 -27 0 7476 10 99 0 +750 257 391 -17 6547 6637 10 33 0 +751 482 184 -7 4437 4538 10 719 0 +752 222 331 -23 2158 2279 10 393 0 +753 332 5 14 4110 4272 10 0 422 +754 47 208 -8 0 7480 10 547 0 +755 489 437 -23 0 7384 10 836 0 +756 165 59 27 3762 3901 0 0 1004 +757 211 446 -5 0 7488 10 382 0 +758 225 488 28 0 7448 10 0 303 +759 355 485 10 5887 6066 10 0 154 +760 441 374 10 873 1034 10 0 999 +761 399 175 -23 3020 3076 10 29 0 +762 103 464 22 0 7428 10 0 249 +763 244 13 -24 4068 4156 10 40 0 +764 51 360 -27 0 7460 10 194 0 +765 44 115 24 944 1027 10 0 486 +766 312 453 6 0 7475 10 0 335 +767 64 198 10 4346 4482 10 0 76 +768 67 451 -22 0 7416 10 916 0 +769 371 71 -19 0 7471 10 412 0 +770 439 156 2 2101 2225 10 0 834 +771 105 474 27 0 7421 10 0 413 +772 366 288 29 0 7565 10 0 942 +773 415 207 -13 3588 3731 10 623 0 +774 58 39 12 4615 4808 10 0 42 +775 197 202 -31 4784 4966 10 541 0 +776 442 5 16 0 7376 10 0 661 +777 71 12 -32 1177 1286 10 951 0 +778 74 215 10 0 7508 10 0 30 +779 347 192 -25 5930 6096 10 428 0 +780 178 420 -21 0 7503 10 364 0 +781 186 135 -26 0 7556 10 455 0 +782 176 199 -3 0 7598 10 146 0 +783 438 5 -14 0 7379 10 793 0 +784 150 68 -15 0 7480 10 113 0 +785 185 434 9 2326 2383 10 0 471 +786 215 79 -11 0 7513 10 360 0 +787 177 486 -19 6397 6501 10 530 0 +788 49 437 7 1698 1842 10 0 729 +789 100 66 -24 0 7450 10 48 0 +790 35 344 -27 3418 3607 10 811 0 +791 433 447 20 3179 3294 10 0 567 +792 372 97 -8 0 7492 10 133 0 +793 344 203 14 708 751 10 0 783 +794 423 170 -31 2022 2203 10 624 0 +795 171 188 -15 2481 2604 10 12 0 +796 64 5 -11 0 7380 10 16 0 +797 371 163 21 0 7538 10 0 443 +798 398 210 -27 0 7534 10 929 0 +799 48 437 -30 0 7412 10 892 0 +800 392 1 -23 2419 2543 10 217 0 +801 195 464 20 0 7467 0 0 1009 +802 211 248 26 0 7648 10 0 208 +803 293 228 19 133 253 10 0 467 +804 23 235 43 0 7460 10 0 498 +805 213 185 -28 0 7613 10 325 0 +806 172 292 17 370 485 10 0 290 +807 228 287 21 97 248 10 0 832 +808 387 394 -15 0 7489 10 897 0 +809 374 232 33 0 7562 10 0 227 +810 48 366 -12 0 7455 10 855 0 +811 44 311 27 1631 1749 10 0 790 +812 447 272 12 0 7489 10 0 716 +813 132 477 25 0 7432 10 0 322 +814 80 117 -27 0 7472 10 644 0 +815 11 403 18 1416 1448 10 0 514 +816 144 220 35 0 7577 10 0 283 +817 473 491 23 0 7359 10 0 247 +818 210 219 -31 0 7637 10 915 0 +819 452 484 26 5136 5212 10 0 5 +820 365 28 -26 0 7437 10 828 0 +821 498 456 27 5611 5757 10 0 436 +822 84 453 19 4911 4993 10 0 655 +823 91 427 14 3548 3633 10 0 149 +824 178 72 23 3035 3139 10 0 839 +825 409 155 19 0 7502 10 0 900 +826 132 151 22 0 7533 10 0 656 +827 136 430 -11 2828 2973 10 228 0 +828 292 104 26 0 7536 10 0 820 +829 443 167 17 2211 2254 10 0 637 +830 321 149 18 0 7564 10 0 603 +831 235 13 27 0 7450 10 0 526 +832 166 440 -21 772 890 10 807 0 +833 112 433 -3 0 7458 10 202 0 +834 452 172 -2 0 7471 10 770 0 +835 37 281 -2 1940 2125 10 933 0 +836 414 378 23 1961 2117 10 0 755 +837 475 352 -25 0 7440 10 968 0 +838 400 71 -12 0 7454 10 78 0 +839 286 244 -23 5150 5242 10 824 0 +840 429 389 18 1700 1812 10 0 122 +841 92 76 -25 4598 4634 10 932 0 +842 124 111 15 0 7500 10 0 683 +843 268 458 -7 0 7479 10 13 0 +844 352 63 6 4718 4827 10 0 606 +845 49 118 3 0 7447 10 0 182 +846 398 329 17 646 697 10 0 964 +847 382 9 -12 1118 1176 10 738 0 +848 229 322 11 0 7612 10 0 448 +849 279 355 9 0 7579 10 0 873 +850 266 221 9 0 7654 10 0 903 +851 142 80 12 1980 2076 10 0 679 +852 359 287 24 0 7572 10 0 101 +853 482 104 19 0 7413 10 0 234 +854 284 457 -25 6018 6090 10 380 0 +855 64 294 12 4402 4528 10 0 810 +856 404 59 13 0 7442 10 0 447 +857 68 160 21 0 7484 10 0 49 +858 211 411 -30 4631 4662 10 633 0 +859 30 155 -19 5129 5235 10 995 0 +860 240 34 28 6247 6349 10 0 535 +861 107 374 8 3642 3792 10 0 930 +862 404 140 -14 5063 5126 10 75 0 +863 436 467 -10 0 7402 10 391 0 +864 421 386 29 0 7469 10 0 520 +865 182 480 -15 0 7448 10 288 0 +866 9 233 31 1227 1343 10 0 147 +867 110 251 23 2007 2095 10 0 304 +868 19 38 -11 3376 3521 10 236 0 +869 46 248 9 3237 3394 10 0 277 +870 308 199 -24 5986 6201 10 684 0 +871 423 221 9 1022 1164 0 0 1007 +872 313 391 5 600 716 10 0 904 +873 413 345 -9 4872 4993 10 849 0 +874 278 450 29 0 7486 10 0 681 +875 94 497 31 3132 3246 10 0 426 +876 7 382 -26 3053 3231 10 417 0 +877 493 111 -17 2162 2286 10 717 0 +878 392 87 23 0 7471 10 0 724 +879 13 394 15 0 7410 10 0 610 +880 259 301 -11 0 7636 10 726 0 +881 351 233 -20 5692 5811 10 190 0 +882 313 493 -18 0 7436 10 714 0 +883 65 62 15 3883 4048 10 0 645 +884 417 212 -18 0 7516 10 993 0 +885 450 194 -31 2495 2623 10 262 0 +886 470 138 -8 0 7441 10 643 0 +887 190 267 36 0 7625 10 0 39 +888 248 214 -15 5955 5999 10 690 0 +889 50 383 -22 1056 1145 10 395 0 +890 244 422 -4 2134 2288 10 657 0 +891 60 29 32 0 7396 10 0 51 +892 5 445 30 1230 1377 10 0 799 +893 490 276 -15 0 7446 10 73 0 +894 441 100 31 0 7445 10 0 908 +895 162 388 -26 0 7524 10 9 0 +896 244 277 -22 5204 5326 10 110 0 +897 406 408 15 5799 5971 10 0 808 +898 265 240 9 21 123 10 0 98 +899 130 186 16 513 656 10 0 363 +900 382 110 -19 4427 4592 10 825 0 +901 142 14 18 0 7428 10 0 104 +902 352 487 27 0 7429 10 0 286 +903 307 52 -9 3703 3781 10 850 0 +904 418 399 -5 0 7463 10 872 0 +905 196 56 -26 0 7486 10 470 0 +906 66 31 25 0 7401 10 0 461 +907 90 496 13 0 7394 10 0 920 +908 480 136 -31 0 7431 10 894 0 +909 65 82 -15 2966 3071 10 10 0 +910 48 293 -16 0 7481 10 343 0 +911 105 181 19 0 7527 10 0 965 +912 215 282 -14 5764 5879 10 639 0 +913 257 133 19 0 7570 10 0 80 +914 77 465 11 0 7412 10 0 115 +915 43 135 31 0 7451 10 0 818 +916 27 444 22 4290 4472 10 0 768 +917 357 290 -20 0 7573 10 921 0 +918 38 15 3 0 7371 10 0 966 +919 80 337 -3 4483 4590 10 607 0 +920 36 451 -13 3538 3692 10 907 0 +921 291 251 20 129 200 10 0 917 +922 195 111 -12 3991 4114 10 309 0 +923 383 17 -12 3765 3879 10 718 0 +924 53 466 9 0 7395 10 0 465 +925 114 102 21 0 7487 10 0 672 +926 350 199 -16 4787 4945 10 694 0 +927 405 349 -23 0 7504 10 66 0 +928 472 248 11 0 7465 10 0 82 +929 333 293 27 2494 2563 10 0 798 +930 174 397 -8 4978 5099 10 861 0 +931 2 264 40 0 7439 10 0 280 +932 7 82 25 1643 1770 10 0 841 +933 34 329 2 0 7458 10 0 835 +934 158 179 -25 0 7571 10 204 0 +935 421 499 -22 5363 5519 10 419 0 +936 345 431 12 0 7483 10 0 439 +937 370 262 15 4371 4545 10 0 472 +938 77 172 23 0 7498 10 0 629 +939 87 51 35 0 7430 10 0 967 +940 468 352 9 3031 3235 10 0 614 +941 63 420 19 2071 2206 10 0 665 +942 347 184 -29 4316 4433 10 772 0 +943 206 174 -14 3201 3318 10 668 0 +944 209 212 -21 6142 6200 10 617 0 +945 466 362 -11 0 7444 10 434 0 +946 201 278 13 170 282 10 0 177 +947 206 172 -18 3131 3293 10 536 0 +948 471 94 -30 0 7417 10 512 0 +949 331 134 -28 4479 4631 10 233 0 +950 274 261 -9 0 7661 10 285 0 +951 219 215 32 0 7641 10 0 777 +952 349 76 -4 4121 4244 10 709 0 +953 86 189 21 906 1028 10 0 427 +954 336 493 -15 5960 6103 10 213 0 +955 7 194 29 3784 3947 10 0 232 +956 492 335 10 3316 3430 10 0 259 +957 248 386 22 0 7551 10 0 183 +958 463 406 -4 0 7423 10 493 0 +959 199 438 -34 0 7493 10 569 0 +960 135 30 12 0 7439 10 0 737 +961 447 267 -11 0 7490 10 998 0 +962 235 33 30 0 7470 10 0 376 +963 63 155 7 0 7478 10 0 57 +964 294 421 -17 6292 6431 10 846 0 +965 318 99 -19 4854 4969 10 911 0 +966 21 146 -3 0 7436 10 918 0 +967 30 7 -35 4734 4895 10 939 0 +968 410 399 25 983 1007 10 0 837 +969 405 187 34 4994 5131 10 0 35 +970 109 56 27 0 7448 10 0 118 +971 212 47 -18 0 7481 10 361 0 +972 479 387 13 0 7421 10 0 123 +973 167 291 27 0 7595 10 0 671 +974 259 498 -6 0 7439 10 231 0 +975 461 182 13 2540 2612 10 0 79 +976 277 428 7 1931 2112 10 0 338 +977 290 328 7 555 714 10 0 163 +978 146 313 -14 4793 4890 10 583 0 +979 40 304 -11 4559 4718 10 71 0 +980 56 268 -12 4268 4364 10 212 0 +981 104 28 8 0 7422 10 0 527 +982 370 493 -19 0 7416 10 46 0 +983 136 265 12 390 530 10 0 735 +984 247 306 33 182 266 10 0 282 +985 241 38 -11 2127 2246 10 502 0 +986 180 162 9 653 855 10 0 52 +987 253 118 -28 2191 2307 10 712 0 +988 413 391 8 876 981 10 0 388 +989 380 350 15 3462 3589 10 0 580 +990 391 112 -22 4039 4084 10 44 0 +991 86 199 23 1114 1228 10 0 711 +992 91 326 -18 0 7511 10 667 0 +993 287 256 18 61 239 10 0 884 +994 203 211 -14 0 7626 10 565 0 +995 79 80 19 0 7446 10 0 859 +996 32 319 -21 1621 1703 10 7 0 +997 167 445 -14 0 7476 10 618 0 +998 439 237 11 3811 3817 10 0 961 +999 373 418 -10 5034 5161 10 760 0 +1000 26 342 -22 1298 1390 10 327 0 +1001 33 152 -17 5278 5403 10 394 0 +1002 487 320 -21 0 7440 10 600 0 +1003 385 58 -24 1661 1697 10 457 0 +1004 165 59 -27 3762 3901 10 756 0 +1005 240 255 -33 6404 6604 10 95 0 +1006 240 362 -23 0 7575 10 372 0 +1007 423 221 -9 1022 1164 10 871 0 +1008 330 308 -24 0 7589 10 320 0 +1009 195 464 -20 0 7467 10 801 0 +1010 0 356 -13 0 7416 10 21 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2104.txt b/jsprit-instances/instances/lilim/1000/LR2104.txt new file mode 100644 index 00000000..772db486 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2104.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 14 0 7537 10 0 420 +2 325 56 -9 0 7480 10 986 0 +3 290 145 5 0 7575 10 0 348 +4 340 291 22 1893 1991 10 0 725 +5 370 382 -23 0 7509 10 410 0 +6 273 255 18 0 7664 10 0 917 +7 36 301 -14 0 7468 10 563 0 +8 117 178 -11 4484 4574 10 360 0 +9 295 283 -27 3538 3728 10 929 0 +10 57 43 -14 0 7404 10 26 0 +11 436 123 40 0 7462 10 0 715 +12 48 162 -35 0 7467 10 368 0 +13 222 499 7 0 7437 10 0 231 +14 376 92 10 0 7485 10 0 838 +15 437 90 12 0 7441 10 0 253 +16 3 23 11 1550 1702 10 0 613 +17 94 40 -4 0 7426 10 706 0 +18 398 476 -14 0 7417 10 75 0 +19 307 249 -18 0 7630 10 229 0 +20 179 286 8 1380 1469 10 0 294 +21 0 356 13 0 7416 10 0 47 +22 143 158 12 0 7546 10 0 709 +23 413 476 -8 4729 4823 10 862 0 +24 371 488 10 2285 2497 10 0 791 +25 415 118 19 0 7476 10 0 850 +26 440 77 14 0 7431 10 0 10 +27 261 201 -25 6060 6172 10 370 0 +28 490 286 29 0 7445 10 0 592 +29 309 161 23 2287 2499 10 0 91 +30 39 162 18 0 7459 10 0 343 +31 361 178 -19 0 7555 10 530 0 +32 261 138 1 0 7575 10 0 845 +33 447 383 -14 889 1013 10 82 0 +34 346 354 -8 3260 3399 10 988 0 +35 461 195 26 0 7469 10 0 829 +36 187 263 35 0 7623 0 0 1004 +37 130 247 17 0 7567 10 0 767 +38 328 491 -12 2702 2845 10 94 0 +39 161 276 -21 0 7595 10 593 0 +40 365 74 -5 3379 3529 10 590 0 +41 168 109 10 0 7524 10 0 302 +42 111 192 -17 0 7537 10 591 0 +43 87 213 -23 0 7520 10 991 0 +44 45 166 22 0 7466 10 0 292 +45 62 94 -28 0 7443 10 860 0 +46 348 476 19 0 7441 10 0 164 +47 64 437 -13 0 7424 10 21 0 +48 56 75 24 0 7426 10 0 579 +49 24 259 19 0 7461 10 0 497 +50 295 247 -24 0 7642 10 852 0 +51 6 53 8 0 7374 10 0 939 +52 15 11 15 0 7352 10 0 868 +53 179 497 -28 0 7430 10 758 0 +54 67 352 -24 0 7478 10 814 0 +55 317 45 8 0 7472 10 0 297 +56 40 278 -9 0 7476 10 522 0 +57 33 278 18 0 7469 10 0 103 +58 322 290 23 0 7605 10 0 404 +59 159 226 16 314 439 10 0 932 +60 208 445 22 0 7488 10 0 610 +61 453 360 13 858 990 10 0 419 +62 34 169 11 0 7457 10 0 602 +63 436 25 19 0 7396 10 0 357 +64 393 98 13 3013 3127 10 0 127 +65 466 96 -22 0 7422 10 496 0 +66 366 390 -23 5266 5400 10 259 0 +67 303 78 -15 0 7508 10 922 0 +68 374 116 9 0 7505 10 0 830 +69 424 288 -13 0 7509 10 682 0 +70 191 84 -21 0 7511 10 617 0 +71 59 276 -9 0 7495 10 869 0 +72 215 293 13 128 315 10 0 405 +73 343 276 15 321 451 10 0 528 +74 488 173 -19 4836 4966 10 853 0 +75 452 110 14 0 7442 10 0 18 +76 153 244 -21 0 7590 10 805 0 +77 176 200 -20 2266 2394 10 553 0 +78 498 171 12 0 7427 10 0 79 +79 492 188 -12 2904 2939 10 78 0 +80 177 156 25 0 7568 10 0 903 +81 398 49 21 0 7438 10 0 488 +82 497 296 14 0 7436 10 0 33 +83 276 84 20 0 7519 10 0 995 +84 128 113 22 0 7504 10 0 394 +85 422 498 5 0 7386 10 0 621 +86 460 424 -29 0 7415 10 755 0 +87 246 314 -21 5773 5910 10 284 0 +88 0 422 -15 0 7384 10 879 0 +89 166 247 1 291 382 10 0 674 +90 311 422 29 0 7505 10 0 614 +91 392 95 -23 0 7477 10 29 0 +92 460 117 14 0 7439 10 0 247 +93 28 467 34 0 7377 10 0 290 +94 375 145 12 0 7524 10 0 38 +95 240 255 -12 0 7676 10 702 0 +96 440 436 18 3549 3706 10 0 881 +97 454 201 -22 0 7478 10 248 0 +98 407 35 11 0 7421 10 0 328 +99 420 383 27 0 7472 10 0 745 +100 264 180 -15 0 7616 10 952 0 +101 440 294 -15 0 7492 10 680 0 +102 500 228 -12 3137 3237 10 884 0 +103 144 331 -18 0 7554 10 57 0 +104 98 2 -8 2361 2493 10 169 0 +105 461 186 16 0 7467 10 0 245 +106 68 450 18 0 7417 10 0 548 +107 153 192 -33 0 7574 10 306 0 +108 34 239 16 896 975 10 0 521 +109 465 367 -15 0 7443 10 509 0 +110 208 488 -7 0 7446 10 976 0 +111 93 413 17 0 7461 10 0 132 +112 371 332 -7 0 7541 10 977 0 +113 231 167 -27 246 435 10 191 0 +114 179 75 13 2982 3057 10 0 981 +115 196 489 23 4135 4226 10 0 780 +116 280 245 21 0 7657 10 0 568 +117 108 37 23 0 7432 10 0 666 +118 1 101 8 0 7397 10 0 628 +119 420 80 24 0 7447 10 0 777 +120 38 190 -17 0 7467 10 490 0 +121 470 405 -25 3694 3832 10 968 0 +122 448 397 -10 0 7441 10 713 0 +123 471 427 -31 0 7404 10 341 0 +124 146 376 8 0 7524 10 0 627 +125 12 358 -12 0 7426 10 212 0 +126 175 422 24 0 7500 0 0 1002 +127 297 131 -13 4640 4803 10 64 0 +128 457 492 7 0 7369 10 0 817 +129 69 423 -12 0 7437 10 1000 0 +130 97 288 22 0 7530 10 0 273 +131 172 314 9 0 7587 10 0 557 +132 170 347 -17 0 7562 10 111 0 +133 103 123 8 0 7493 10 0 741 +134 154 374 36 0 7531 10 0 448 +135 318 497 -14 0 7431 10 355 0 +136 330 147 -14 3383 3525 10 542 0 +137 241 180 13 0 7617 10 0 710 +138 174 67 15 0 7489 10 0 158 +139 235 288 -2 0 7647 10 307 0 +140 94 192 -26 0 7521 10 362 0 +141 232 101 -28 0 7537 10 712 0 +142 28 180 -6 0 7455 10 433 0 +143 64 135 -23 3495 3571 10 784 0 +144 174 376 -22 0 7540 10 750 0 +145 293 174 -16 0 7600 10 178 0 +146 218 12 -6 0 7447 10 378 0 +147 110 122 -31 0 7498 10 541 0 +148 459 53 20 0 7400 10 0 751 +149 173 474 14 0 7451 10 0 177 +150 135 400 -38 0 7498 10 255 0 +151 497 266 25 0 7440 10 0 195 +152 380 194 3 0 7546 10 0 669 +153 495 227 20 0 7441 10 0 893 +154 268 351 7 0 7585 10 0 532 +155 213 399 -1 0 7534 10 208 0 +156 448 414 23 0 7430 10 0 956 +157 327 139 -20 5021 5158 10 365 0 +158 151 81 -15 0 7492 10 138 0 +159 425 448 -32 3152 3324 10 271 0 +160 92 259 4 0 7529 10 0 399 +161 59 388 20 2650 2772 10 0 278 +162 468 360 -17 0 7443 10 270 0 +163 332 459 35 0 7463 10 0 935 +164 469 489 -19 0 7363 10 46 0 +165 248 176 32 0 7613 10 0 446 +166 174 41 15 0 7465 10 0 764 +167 343 205 -15 0 7584 10 744 0 +168 154 392 -22 0 7516 10 957 0 +169 92 18 8 0 7407 10 0 104 +170 250 328 24 0 7609 10 0 895 +171 88 484 -17 0 7403 10 246 0 +172 360 488 -17 1252 1393 10 396 0 +173 156 65 -19 4143 4275 10 913 0 +174 18 225 -21 0 7454 10 225 0 +175 152 476 45 2112 2188 10 0 801 +176 176 470 14 0 7455 10 0 813 +177 195 450 -14 0 7480 10 149 0 +178 466 149 16 0 7449 10 0 145 +179 221 269 -11 0 7653 10 498 0 +180 105 137 -16 0 7504 10 899 0 +181 284 319 17 3270 3384 10 0 384 +182 41 120 -18 2791 2897 10 267 0 +183 263 418 25 0 7519 10 0 314 +184 218 271 -22 0 7649 10 978 0 +185 365 119 -27 0 7513 10 794 0 +186 89 322 -13 0 7511 10 736 0 +187 180 283 -14 0 7610 10 504 0 +188 385 17 40 3186 3404 10 0 418 +189 401 314 -29 3875 4057 10 864 0 +190 245 176 20 4943 5055 10 0 336 +191 251 238 27 0 7675 10 0 113 +192 139 438 24 0 7469 10 0 689 +193 236 126 23 0 7563 10 0 670 +194 61 441 27 2201 2268 10 0 646 +195 405 454 -25 0 7431 10 151 0 +196 111 392 -14 0 7489 10 823 0 +197 373 421 21 0 7477 10 0 999 +198 247 443 17 0 7494 10 0 322 +199 322 406 17 0 7516 10 0 550 +200 412 478 -11 3851 3946 10 434 0 +201 374 346 -25 0 7531 10 380 0 +202 122 422 -14 0 7473 10 827 0 +203 261 359 10 0 7578 10 0 757 +204 173 182 25 383 438 10 0 283 +205 398 341 -9 0 7514 10 677 0 +206 413 127 28 0 7483 10 0 467 +207 325 311 -17 5290 5409 10 846 0 +208 80 357 1 2093 2271 10 0 155 +209 67 378 26 0 7464 0 0 1006 +210 216 341 -13 0 7590 10 703 0 +211 498 457 15 0 7364 10 0 945 +212 44 344 12 0 7461 10 0 125 +213 352 481 15 5136 5261 10 0 766 +214 237 420 15 0 7517 10 0 954 +215 389 43 21 0 7438 10 0 344 +216 292 136 -24 0 7566 10 990 0 +217 426 38 -5 0 7412 10 673 0 +218 245 461 -15 0 7476 10 653 0 +219 415 253 21 0 7522 10 0 529 +220 298 264 36 147 253 10 0 462 +221 307 412 8 0 7516 10 0 351 +222 53 204 -25 0 7485 10 406 0 +223 480 152 26 0 7437 10 0 537 +224 262 97 17 0 7534 10 0 299 +225 83 169 21 0 7502 10 0 174 +226 377 432 -10 0 7466 10 760 0 +227 390 249 21 0 7547 10 0 442 +228 132 479 11 997 1063 10 0 501 +229 359 246 18 0 7578 10 0 19 +230 314 205 -13 6086 6249 10 408 0 +231 124 448 -7 0 7453 10 13 0 +232 0 188 26 0 7430 10 0 883 +233 343 166 -33 3512 3616 10 685 0 +234 482 141 14 4028 4178 10 0 429 +235 162 306 22 494 580 10 0 323 +236 24 71 -24 0 7399 10 457 0 +237 188 119 44 0 7543 10 0 648 +238 100 85 -15 0 7465 10 696 0 +239 103 177 -22 2494 2637 10 826 0 +240 26 67 -28 0 7398 10 485 0 +241 164 332 19 0 7569 0 0 1008 +242 385 285 -9 3478 3586 10 287 0 +243 209 68 27 0 7501 10 0 477 +244 149 341 -29 0 7552 10 833 0 +245 415 95 -16 0 7461 10 105 0 +246 167 488 17 972 1148 10 0 171 +247 413 493 -14 4894 4971 10 92 0 +248 439 222 22 0 7496 10 0 97 +249 150 484 -19 0 7433 10 282 0 +250 299 353 -30 0 7573 10 251 0 +251 273 300 30 0 7632 10 0 250 +252 402 277 -11 0 7533 10 726 0 +253 239 15 -12 0 7452 10 15 0 +254 363 225 -21 3426 3541 10 454 0 +255 65 343 38 0 7480 10 0 150 +256 351 60 15 0 7472 10 0 828 +257 60 246 -22 0 7497 10 395 0 +258 144 35 -19 0 7448 10 609 0 +259 463 253 23 4171 4325 10 0 66 +260 332 382 2 0 7532 10 0 261 +261 408 318 -2 0 7515 10 260 0 +262 452 206 31 0 7481 10 0 825 +263 471 368 19 0 7437 10 0 927 +264 93 490 2 1527 1626 10 0 638 +265 241 402 11 0 7535 10 0 451 +266 60 231 -20 0 7497 10 994 0 +267 172 66 18 0 7488 10 0 182 +268 404 207 -14 0 7528 10 639 0 +269 286 356 30 354 542 10 0 808 +270 489 338 17 5551 5746 10 0 162 +271 334 481 32 0 7442 10 0 159 +272 26 442 -9 0 7392 10 924 0 +273 226 175 -22 0 7609 10 130 0 +274 488 3 3 0 7344 10 0 948 +275 178 150 33 0 7564 10 0 515 +276 371 423 10 0 7476 10 0 511 +277 5 224 19 0 7441 10 0 304 +278 94 344 -20 2746 2832 10 161 0 +279 153 235 10 0 7589 10 0 983 +280 12 367 27 1282 1444 10 0 914 +281 217 357 23 0 7576 10 0 807 +282 255 487 19 0 7450 10 0 249 +283 149 214 -25 0 7580 10 204 0 +284 169 305 21 0 7590 10 0 87 +285 487 446 -40 0 7380 10 439 0 +286 267 374 23 0 7562 10 0 327 +287 360 294 9 0 7569 10 0 242 +288 185 431 -25 0 7495 10 494 0 +289 325 210 -16 0 7602 10 582 0 +290 175 352 -34 6652 6789 10 93 0 +291 76 462 18 0 7413 10 0 599 +292 19 273 -22 0 7455 10 44 0 +293 72 227 -37 0 7508 10 934 0 +294 213 283 -8 0 7638 10 20 0 +295 130 140 -6 0 7525 10 414 0 +296 274 442 17 0 7494 10 0 377 +297 337 41 -8 0 7461 10 55 0 +298 372 39 10 0 7444 10 0 416 +299 269 112 -17 0 7548 10 224 0 +300 224 56 13 0 7492 10 0 449 +301 340 416 36 1293 1396 10 0 604 +302 13 214 -10 5428 5520 10 41 0 +303 230 320 -14 4770 4887 10 583 0 +304 6 196 -19 0 7438 10 277 0 +305 87 3 -3 0 7392 10 505 0 +306 133 202 33 0 7561 10 0 107 +307 235 316 2 2616 2751 10 0 139 +308 435 180 37 0 7490 10 0 761 +309 173 65 -1 1768 1940 10 605 0 +310 245 42 24 2203 2295 10 0 324 +311 384 149 -23 0 7520 10 658 0 +312 51 286 -5 0 7485 10 317 0 +313 267 290 15 111 236 10 0 573 +314 453 318 -25 0 7473 10 183 0 +315 189 402 -16 0 7524 10 561 0 +316 210 276 5 0 7640 10 0 452 +317 120 261 5 3154 3312 10 0 312 +318 35 263 -22 0 7472 10 686 0 +319 429 59 9 1827 1964 10 0 571 +320 330 308 24 0 7589 10 0 950 +321 58 391 16 3528 3651 10 0 693 +322 260 472 -17 4143 4265 10 198 0 +323 217 333 -22 0 7598 10 235 0 +324 335 46 -24 0 7466 10 310 0 +325 198 85 -12 1032 1189 10 525 0 +326 138 28 23 4362 4530 10 0 470 +327 29 336 -23 0 7450 10 286 0 +328 200 27 -11 0 7459 10 98 0 +329 157 269 -21 0 7593 10 857 0 +330 177 404 17 0 7517 10 0 739 +331 202 28 22 0 7460 10 0 634 +332 366 334 5 0 7544 10 0 436 +333 149 458 -17 0 7456 10 854 0 +334 481 454 14 0 7379 10 0 691 +335 377 385 6 3486 3564 10 0 513 +336 217 207 -20 0 7633 10 190 0 +337 96 346 -12 0 7506 10 413 0 +338 224 320 36 5187 5202 10 0 364 +339 206 97 33 1785 1920 10 0 502 +340 438 127 2 0 7463 10 0 428 +341 494 468 31 1417 1523 10 0 123 +342 494 165 19 2401 2553 10 0 770 +343 5 281 -18 0 7441 10 30 0 +344 441 60 -21 0 7418 10 215 0 +345 14 232 18 0 7451 10 0 966 +346 288 439 -3 0 7495 10 489 0 +347 420 224 10 0 7516 10 0 444 +348 267 162 -5 0 7598 10 3 0 +349 195 273 22 156 320 10 0 660 +350 233 230 -14 0 7661 10 943 0 +351 382 360 -8 0 7516 10 221 0 +352 406 460 -10 2868 3006 10 391 0 +353 499 316 -22 0 7430 10 982 0 +354 246 407 12 0 7530 10 0 910 +355 283 454 14 0 7481 10 0 135 +356 426 231 -9 4102 4245 10 849 0 +357 432 2 -19 1848 2004 10 63 0 +358 404 439 -13 0 7444 10 700 0 +359 397 477 13 0 7417 10 0 615 +360 44 140 11 3464 3602 10 0 8 +361 330 138 -15 0 7550 10 937 0 +362 39 153 26 0 7455 10 0 140 +363 397 153 -19 3507 3673 10 803 0 +364 226 316 -36 0 7617 10 338 0 +365 354 156 20 0 7547 10 0 157 +366 201 66 -23 0 7497 10 824 0 +367 389 156 -30 2851 2993 10 512 0 +368 134 211 35 458 626 10 0 12 +369 386 154 -20 0 7521 10 921 0 +370 335 99 25 0 7514 10 0 27 +371 356 256 19 0 7581 10 0 694 +372 240 362 23 0 7575 10 0 843 +373 412 100 -16 0 7467 10 886 0 +374 394 322 -23 0 7527 10 483 0 +375 48 150 -4 0 7462 10 841 0 +376 225 121 18 0 7556 10 0 526 +377 102 422 -17 0 7461 10 296 0 +378 339 41 6 0 7460 10 0 146 +379 440 201 -9 0 7491 10 871 0 +380 411 379 25 0 7481 10 0 201 +381 219 210 -28 0 7637 10 782 0 +382 250 441 -20 0 7496 10 882 0 +383 210 29 13 0 7463 10 0 906 +384 178 302 -17 3553 3659 10 181 0 +385 148 208 -20 0 7577 10 469 0 +386 225 369 -26 0 7566 10 802 0 +387 16 287 12 0 7451 10 0 931 +388 450 416 -12 2281 2453 10 554 0 +389 287 397 12 0 7536 10 0 577 +390 285 247 13 0 7652 10 0 519 +391 351 481 10 1284 1410 10 0 352 +392 243 408 -32 5720 5870 10 930 0 +393 137 377 23 0 7518 10 0 566 +394 33 152 -22 5278 5403 10 84 0 +395 68 303 22 904 987 10 0 257 +396 456 113 17 0 7440 10 0 172 +397 134 276 15 0 7569 10 0 951 +398 26 221 28 0 7462 10 0 980 +399 79 257 -4 3803 3942 10 160 0 +400 181 185 -23 0 7593 10 421 0 +401 104 349 20 4058 4135 10 0 872 +402 267 174 -35 0 7610 10 965 0 +403 475 267 7 0 7462 10 0 873 +404 385 239 -23 3130 3274 10 58 0 +405 95 382 -13 929 1041 10 72 0 +406 67 190 25 0 7495 10 0 222 +407 32 94 -43 3707 3854 10 804 0 +408 401 164 13 0 7514 10 0 230 +409 376 113 -18 0 7501 10 773 0 +410 409 255 23 0 7528 10 0 5 +411 228 260 12 6450 6514 0 0 1005 +412 363 34 19 0 7444 10 0 447 +413 274 441 12 0 7495 10 0 337 +414 146 188 6 0 7566 10 0 295 +415 212 186 -17 0 7613 10 503 0 +416 432 66 -10 0 7429 10 298 0 +417 83 300 26 1987 2131 10 0 482 +418 51 89 -40 0 7432 10 188 0 +419 379 486 -13 0 7419 10 61 0 +420 440 284 -14 0 7494 10 1 0 +421 175 239 23 0 7612 10 0 400 +422 282 1 -10 4184 4276 10 486 0 +423 268 113 -26 0 7549 10 455 0 +424 480 131 -17 0 7429 10 717 0 +425 429 67 16 0 7432 10 0 901 +426 162 301 16 0 7586 10 0 533 +427 281 96 -7 0 7530 10 535 0 +428 495 199 -2 0 7437 10 340 0 +429 372 115 -14 0 7506 10 234 0 +430 396 83 -7 6362 6449 10 719 0 +431 239 486 3 0 7451 10 0 575 +432 288 70 24 0 7504 10 0 765 +433 66 163 6 0 7484 10 0 142 +434 470 417 11 0 7411 10 0 200 +435 226 423 15 0 7513 10 0 889 +436 342 319 -5 0 7572 10 332 0 +437 174 122 14 0 7539 10 0 723 +438 49 353 15 5810 5879 10 0 919 +439 448 495 40 0 7372 10 0 285 +440 13 465 -4 0 7368 10 992 0 +441 489 159 -20 5723 5818 10 538 0 +442 311 203 -21 0 7610 10 227 0 +443 480 119 -18 0 7423 10 783 0 +444 442 153 -10 4765 4865 10 347 0 +445 148 462 -12 2906 3028 10 832 0 +446 233 87 -32 966 1174 10 165 0 +447 323 34 -19 0 7459 10 412 0 +448 84 377 -36 3699 3831 10 134 0 +449 292 32 -13 0 7465 10 300 0 +450 418 75 -17 1807 1896 10 534 0 +451 451 305 -11 0 7479 10 265 0 +452 225 269 -5 0 7656 10 316 0 +453 272 420 7 0 7516 10 0 961 +454 318 280 21 254 340 10 0 254 +455 250 57 26 0 7494 10 0 423 +456 77 372 19 0 7476 10 0 474 +457 385 58 24 1661 1697 10 0 236 +458 44 496 -30 0 7367 10 892 0 +459 460 328 -31 0 7463 10 584 0 +460 67 24 10 0 7397 10 0 842 +461 91 27 14 0 7414 10 0 663 +462 360 284 -36 2660 2792 10 220 0 +463 82 183 -23 4444 4490 10 938 0 +464 153 362 -6 0 7539 10 655 0 +465 52 412 22 0 7432 10 0 876 +466 32 191 -27 2344 2465 10 644 0 +467 325 147 -28 0 7560 10 206 0 +468 328 458 -19 0 7465 10 517 0 +469 133 273 20 419 535 10 0 385 +470 147 30 -23 4424 4565 10 326 0 +471 131 246 17 0 7568 10 0 611 +472 433 319 -28 5509 5621 10 641 0 +473 168 59 6 0 7480 10 0 963 +474 218 403 -19 0 7531 10 456 0 +475 295 89 -16 0 7520 10 985 0 +476 118 314 -35 0 7541 10 816 0 +477 251 63 -27 3981 4039 10 243 0 +478 388 44 22 0 7440 10 0 661 +479 381 328 -15 0 7535 10 989 0 +480 132 32 18 0 7440 10 0 672 +481 334 403 26 620 776 10 0 840 +482 83 290 -26 0 7516 10 417 0 +483 411 396 23 0 7470 10 0 374 +484 243 402 13 0 7535 10 0 585 +485 52 18 28 0 7382 10 0 240 +486 265 0 10 0 7437 10 0 422 +487 268 288 26 0 7645 10 0 560 +488 476 61 -21 0 7393 10 81 0 +489 283 438 3 0 7497 10 0 346 +490 191 215 17 211 338 10 0 120 +491 253 50 27 0 7487 10 0 962 +492 71 282 29 0 7506 10 0 979 +493 297 304 -33 0 7616 10 837 0 +494 244 368 25 0 7569 10 0 288 +495 80 279 -27 0 7515 10 811 0 +496 488 96 22 0 7404 10 0 65 +497 142 30 -19 0 7442 10 49 0 +498 68 240 11 3176 3300 10 0 179 +499 193 138 30 0 7562 10 0 781 +500 451 62 5 0 7412 10 0 620 +501 138 406 -11 4892 4956 10 228 0 +502 306 42 -33 0 7472 10 339 0 +503 247 219 17 0 7656 10 0 415 +504 98 29 14 4209 4284 10 0 187 +505 102 6 3 0 7402 10 0 305 +506 142 360 -19 0 7533 10 822 0 +507 172 24 17 5814 5924 10 0 558 +508 352 241 5 3178 3280 10 0 520 +509 486 324 15 0 7440 10 0 109 +510 133 455 -20 0 7451 10 572 0 +511 440 292 -10 0 7493 10 276 0 +512 364 173 30 700 862 10 0 367 +513 442 289 -6 0 7492 10 335 0 +514 48 412 -36 0 7429 10 635 0 +515 344 70 -33 4542 4743 10 275 0 +516 78 406 -24 3818 3986 10 687 0 +517 329 456 19 0 7467 10 0 468 +518 157 38 -28 0 7456 10 570 0 +519 374 260 -13 0 7563 10 390 0 +520 297 283 -5 0 7630 10 508 0 +521 210 113 -16 0 7545 10 108 0 +522 215 434 9 0 7500 10 0 56 +523 262 92 -21 2507 2657 10 743 0 +524 140 108 29 0 7508 10 0 545 +525 235 108 12 0 7545 10 0 325 +526 210 133 -18 0 7564 10 376 0 +527 25 53 -32 4088 4193 10 737 0 +528 339 113 -15 0 7524 10 73 0 +529 394 310 -21 4410 4498 10 219 0 +530 126 391 19 0 7500 10 0 31 +531 343 34 7 0 7452 10 0 695 +532 354 416 -7 2719 2836 10 154 0 +533 202 391 -16 2497 2611 10 426 0 +534 367 97 17 0 7495 10 0 450 +535 188 151 7 0 7571 10 0 427 +536 111 178 -12 0 7531 10 851 0 +537 456 157 -26 5788 5972 10 223 0 +538 441 7 20 0 7378 10 0 441 +539 270 337 20 0 7598 10 0 928 +540 323 29 7 4533 4687 10 0 650 +541 200 78 31 0 7508 10 0 147 +542 330 281 14 0 7602 10 0 136 +543 438 488 18 1304 1433 10 0 972 +544 161 416 -9 0 7499 10 785 0 +545 30 97 -29 4851 4951 10 524 0 +546 273 70 36 0 7506 10 0 953 +547 214 245 8 0 7651 10 0 887 +548 221 291 -18 0 7637 10 106 0 +549 79 467 -29 1400 1531 10 874 0 +550 423 315 -17 0 7503 10 199 0 +551 395 474 26 0 7421 0 0 1001 +552 481 207 34 0 7453 10 0 586 +553 199 203 20 0 7618 10 0 77 +554 497 483 12 1407 1541 10 0 388 +555 449 428 25 4966 5129 10 0 730 +556 100 266 -15 0 7537 10 734 0 +557 214 274 -9 5490 5583 10 131 0 +558 16 68 -17 0 7391 10 507 0 +559 475 198 -22 3335 3466 10 749 0 +560 371 427 -26 0 7473 10 487 0 +561 62 375 16 1410 1500 10 0 315 +562 163 472 9 0 7449 10 0 618 +563 13 314 14 0 7442 10 0 7 +564 376 385 -12 0 7503 10 936 0 +565 231 29 14 4896 5035 10 0 701 +566 89 358 -23 4950 5147 10 393 0 +567 331 356 -1 0 7554 10 747 0 +568 365 190 -21 0 7558 10 116 0 +569 256 441 -18 0 7496 10 714 0 +570 120 37 28 0 7438 10 0 518 +571 349 43 -9 0 7458 10 319 0 +572 230 487 20 0 7450 10 0 510 +573 489 457 -15 0 7371 10 313 0 +574 341 72 9 3243 3315 10 0 598 +575 181 441 -3 0 7484 10 431 0 +576 306 229 10 0 7628 10 0 834 +577 492 326 -12 4863 4890 10 389 0 +578 347 459 25 0 7457 10 0 958 +579 66 88 -24 0 7442 10 48 0 +580 272 234 -9 0 7660 10 898 0 +581 134 194 19 0 7559 10 0 711 +582 320 211 16 0 7607 10 0 289 +583 214 311 14 0 7617 10 0 303 +584 489 274 31 0 7447 10 0 459 +585 231 410 -13 0 7526 10 484 0 +586 432 199 -34 0 7498 10 552 0 +587 29 358 -13 0 7442 10 946 0 +588 62 236 -20 2238 2345 10 606 0 +589 333 163 -11 4973 5068 10 949 0 +590 364 71 5 0 7475 10 0 40 +591 125 65 17 0 7464 10 0 42 +592 429 476 -29 2314 2392 10 28 0 +593 161 275 21 5370 5524 10 0 39 +594 365 274 -31 395 545 10 839 0 +595 117 110 -15 0 7494 10 923 0 +596 166 345 -26 0 7561 10 705 0 +597 345 146 -21 5727 5905 10 797 0 +598 324 99 -9 0 7519 10 574 0 +599 72 477 -18 0 7399 10 291 0 +600 487 320 -10 0 7440 10 759 0 +601 120 17 30 0 7421 10 0 925 +602 1 252 -11 0 7438 10 62 0 +603 303 186 10 0 7604 10 0 637 +604 428 302 -36 0 7502 10 301 0 +605 264 135 1 0 7572 10 0 309 +606 223 178 20 0 7611 10 0 588 +607 174 347 3 0 7564 10 0 720 +608 238 123 -19 0 7560 10 987 0 +609 187 61 19 2155 2325 10 0 258 +610 52 303 -22 0 7483 10 60 0 +611 89 185 -17 0 7514 10 471 0 +612 341 59 -24 0 7476 10 763 0 +613 89 65 -11 2863 3019 10 16 0 +614 495 355 -29 0 7421 10 90 0 +615 368 452 -13 2673 2806 10 359 0 +616 164 473 -17 1149 1340 10 681 0 +617 171 34 21 0 7458 10 0 70 +618 114 460 -9 0 7437 10 562 0 +619 224 3 10 0 7439 10 0 918 +620 472 57 -5 0 7393 10 500 0 +621 448 404 -5 2407 2505 10 85 0 +622 390 120 -13 0 7496 10 623 0 +623 386 225 13 0 7549 10 0 622 +624 301 239 -14 0 7635 10 664 0 +625 115 296 -4 6112 6239 10 656 0 +626 69 266 12 0 7506 10 0 944 +627 115 395 -8 3274 3368 10 124 0 +628 68 53 -8 0 7419 10 118 0 +629 33 268 18 0 7470 10 0 671 +630 450 45 -30 2005 2144 10 632 0 +631 351 5 -18 0 7422 10 683 0 +632 351 148 30 0 7544 10 0 630 +633 80 458 -18 0 7419 10 815 0 +634 60 5 -22 0 7377 10 331 0 +635 10 407 36 1758 1838 10 0 514 +636 497 18 -11 0 7349 10 800 0 +637 437 98 -10 0 7447 10 603 0 +638 130 494 -2 0 7416 10 264 0 +639 391 202 14 0 7539 10 0 268 +640 43 210 20 0 7477 10 0 668 +641 381 457 28 0 7443 10 0 472 +642 449 190 2 0 7480 10 0 942 +643 429 169 8 3607 3735 10 0 878 +644 105 140 27 0 7505 10 0 466 +645 282 10 -7 0 7445 10 724 0 +646 20 480 -27 0 7362 10 194 0 +647 61 170 -23 0 7482 10 867 0 +648 210 81 -44 0 7514 10 237 0 +649 87 311 -10 0 7513 10 778 0 +650 309 29 -7 0 7459 10 540 0 +651 397 57 -13 0 7445 10 792 0 +652 337 232 -12 6266 6418 10 863 0 +653 262 369 15 0 7568 10 0 218 +654 41 232 -5 0 7478 10 786 0 +655 69 414 6 5007 5220 10 0 464 +656 149 98 4 0 7505 10 0 625 +657 207 487 4 0 7447 10 0 731 +658 366 260 23 0 7571 10 0 311 +659 497 54 14 0 7372 10 0 708 +660 210 379 -22 0 7552 10 349 0 +661 437 19 -22 0 7390 10 478 0 +662 181 260 -27 0 7618 10 756 0 +663 125 61 -14 2460 2554 10 461 0 +664 368 311 14 0 7555 10 0 624 +665 80 400 -5 5772 5918 10 768 0 +666 75 118 -23 0 7468 10 117 0 +667 171 303 18 0 7592 10 0 752 +668 80 251 -20 0 7517 10 640 0 +669 455 168 -3 0 7467 10 152 0 +670 215 129 -23 0 7562 10 193 0 +671 179 318 -18 0 7589 10 629 0 +672 187 73 -18 0 7500 10 480 0 +673 394 47 5 0 7439 10 0 217 +674 31 175 -1 0 7456 10 89 0 +675 339 144 13 0 7549 10 0 746 +676 492 34 5 0 7363 10 0 742 +677 387 349 9 0 7518 10 0 205 +678 142 372 18 0 7525 10 0 698 +679 291 213 -21 5018 5163 10 926 0 +680 421 387 15 0 7468 10 0 101 +681 274 403 17 0 7533 10 0 616 +682 434 359 13 0 7474 10 0 69 +683 257 57 18 0 7494 10 0 631 +684 428 202 -25 0 7503 10 704 0 +685 355 174 33 0 7558 10 0 233 +686 46 389 22 0 7441 10 0 318 +687 44 440 24 0 7407 10 0 516 +688 491 369 28 2891 3065 10 0 940 +689 33 286 -24 0 7468 10 192 0 +690 351 128 15 0 7529 10 0 796 +691 485 428 -14 0 7393 10 334 0 +692 273 149 -21 0 7584 10 769 0 +693 447 184 -16 0 7480 10 321 0 +694 386 245 -19 0 7551 10 371 0 +695 323 77 -7 5590 5771 10 531 0 +696 21 70 15 0 7396 10 0 238 +697 9 101 -29 0 7404 10 955 0 +698 71 304 -18 2745 2888 10 678 0 +699 43 360 2 0 7453 10 0 835 +700 396 417 13 0 7466 10 0 358 +701 158 24 -14 0 7443 10 565 0 +702 164 320 12 0 7577 10 0 95 +703 195 386 13 0 7541 10 0 210 +704 306 235 25 172 291 10 0 684 +705 66 314 26 0 7493 10 0 596 +706 95 64 4 3083 3164 10 0 17 +707 348 348 -23 0 7549 10 836 0 +708 495 83 -14 0 7391 10 659 0 +709 61 214 -12 0 7495 10 22 0 +710 240 240 -13 6820 6897 10 137 0 +711 140 137 -19 2276 2401 10 581 0 +712 242 106 28 0 7543 10 0 141 +713 392 491 10 0 7408 10 0 122 +714 342 481 18 5769 5871 10 0 569 +715 478 300 -40 0 7454 10 11 0 +716 299 285 -33 4991 5160 10 809 0 +717 481 84 17 0 7403 10 0 424 +718 271 128 12 0 7564 10 0 971 +719 484 224 7 0 7452 10 0 430 +720 441 177 -3 0 7483 10 607 0 +721 46 163 8 0 7466 10 0 748 +722 493 493 -27 0 7344 10 902 0 +723 253 74 -14 0 7511 10 437 0 +724 390 34 7 0 7430 10 0 645 +725 374 306 -22 0 7551 10 4 0 +726 436 295 11 0 7496 10 0 252 +727 371 315 -29 0 7550 10 772 0 +728 27 464 -13 0 7378 10 729 0 +729 3 471 13 0 7356 10 0 728 +730 418 269 -25 0 7518 10 555 0 +731 90 477 -4 0 7410 10 657 0 +732 141 426 23 0 7480 10 0 933 +733 418 251 -11 0 7519 10 998 0 +734 57 183 15 0 7483 10 0 556 +735 29 462 -31 0 7381 10 875 0 +736 55 318 13 0 7481 10 0 186 +737 18 24 32 2551 2596 10 0 527 +738 263 153 12 0 7590 10 0 789 +739 289 220 -17 0 7638 10 330 0 +740 84 255 -30 0 7521 10 754 0 +741 159 299 -8 0 7584 10 133 0 +742 485 104 -5 0 7411 10 676 0 +743 178 135 21 0 7552 10 0 523 +744 389 255 15 0 7548 10 0 167 +745 457 280 -27 4013 4105 10 99 0 +746 171 24 -13 0 7448 10 675 0 +747 330 371 1 0 7542 10 0 567 +748 10 237 -8 0 7447 10 721 0 +749 458 213 22 0 7476 10 0 559 +750 257 391 22 0 7546 10 0 144 +751 482 184 -20 4437 4538 10 148 0 +752 222 331 -18 2158 2279 10 667 0 +753 332 5 14 4110 4272 0 0 1007 +754 47 208 30 0 7480 10 0 740 +755 489 437 29 0 7384 10 0 86 +756 165 59 27 0 7478 10 0 662 +757 211 446 -10 0 7488 10 203 0 +758 225 488 28 0 7448 10 0 53 +759 355 485 10 0 7430 10 0 600 +760 441 374 10 873 1034 10 0 226 +761 399 175 -37 0 7521 10 308 0 +762 103 464 22 0 7428 10 0 896 +763 244 13 24 4068 4156 10 0 612 +764 51 360 -15 0 7460 10 166 0 +765 44 115 -24 0 7441 10 432 0 +766 312 453 -15 0 7475 10 213 0 +767 64 198 -17 0 7494 10 37 0 +768 67 451 5 0 7416 10 0 665 +769 371 71 21 0 7471 10 0 692 +770 439 156 -19 0 7476 10 342 0 +771 105 474 27 0 7421 10 0 920 +772 366 288 29 0 7565 10 0 727 +773 415 207 18 3588 3731 10 0 409 +774 58 39 -31 0 7402 10 894 0 +775 197 202 29 0 7616 10 0 996 +776 442 5 -30 0 7376 10 847 0 +777 71 12 -24 0 7390 10 119 0 +778 74 215 10 0 7508 10 0 649 +779 347 192 -22 5930 6096 10 908 0 +780 178 420 -23 0 7503 10 115 0 +781 186 135 -30 0 7556 10 499 0 +782 176 199 28 0 7598 10 0 381 +783 438 5 18 0 7379 10 0 443 +784 150 68 23 0 7480 10 0 143 +785 185 434 9 0 7492 10 0 544 +786 215 79 5 0 7513 10 0 654 +787 177 486 -31 6397 6501 10 865 0 +788 49 437 7 1698 1842 10 0 799 +789 100 66 -12 0 7450 10 738 0 +790 35 344 21 0 7453 10 0 907 +791 433 447 -10 3179 3294 10 24 0 +792 372 97 13 0 7492 10 0 651 +793 344 203 -18 0 7582 10 993 0 +794 423 170 27 2022 2203 10 0 185 +795 171 188 30 2481 2604 10 0 947 +796 64 5 -15 0 7380 10 690 0 +797 371 163 21 0 7538 10 0 597 +798 398 210 31 0 7534 10 0 969 +799 48 437 -7 0 7412 10 788 0 +800 392 1 11 0 7401 10 0 636 +801 195 464 -45 0 7467 10 175 0 +802 211 248 26 0 7648 10 0 386 +803 293 228 19 133 253 10 0 363 +804 23 235 43 0 7460 10 0 407 +805 213 185 21 0 7613 10 0 76 +806 172 292 17 370 485 10 0 912 +807 228 287 -23 0 7644 10 281 0 +808 387 394 -30 0 7489 10 269 0 +809 374 232 33 0 7562 10 0 716 +810 48 366 29 0 7455 10 0 973 +811 44 311 27 1631 1749 10 0 495 +812 447 272 12 0 7489 10 0 885 +813 132 477 -14 0 7432 10 176 0 +814 80 117 24 0 7472 10 0 54 +815 11 403 18 1416 1448 10 0 633 +816 144 220 35 0 7577 10 0 476 +817 473 491 -7 0 7359 10 128 0 +818 210 219 7 0 7637 0 0 1003 +819 452 484 26 0 7378 10 0 821 +820 365 28 9 0 7437 10 0 831 +821 498 456 -26 0 7365 10 819 0 +822 84 453 19 4911 4993 10 0 506 +823 91 427 14 0 7450 10 0 196 +824 178 72 23 3035 3139 10 0 366 +825 409 155 -31 0 7502 10 262 0 +826 132 151 22 0 7533 10 0 239 +827 136 430 14 0 7474 10 0 202 +828 292 104 -15 0 7536 10 256 0 +829 443 167 -26 0 7477 10 35 0 +830 321 149 -9 0 7564 10 68 0 +831 235 13 -9 0 7450 10 820 0 +832 166 440 12 772 890 10 0 445 +833 112 433 29 0 7458 10 0 244 +834 452 172 -10 0 7471 10 576 0 +835 37 281 -2 0 7472 10 699 0 +836 414 378 23 1961 2117 10 0 707 +837 475 352 33 0 7440 10 0 493 +838 400 71 -10 0 7454 10 14 0 +839 286 244 31 0 7651 10 0 594 +840 429 389 -26 1700 1812 10 481 0 +841 92 76 4 0 7452 10 0 375 +842 124 111 -10 0 7500 10 460 0 +843 268 458 -23 0 7479 10 372 0 +844 352 63 6 4718 4827 10 0 888 +845 49 118 -1 0 7447 10 32 0 +846 398 329 17 0 7520 10 0 207 +847 382 9 30 1118 1176 10 0 776 +848 229 322 11 0 7612 10 0 880 +849 279 355 9 0 7579 10 0 356 +850 266 221 -19 0 7654 10 25 0 +851 142 80 12 0 7486 10 0 536 +852 359 287 24 0 7572 10 0 50 +853 482 104 19 0 7413 10 0 74 +854 284 457 17 6018 6090 10 0 333 +855 64 294 -9 0 7496 10 859 0 +856 404 59 13 0 7442 10 0 891 +857 68 160 21 0 7484 10 0 329 +858 211 411 -14 4631 4662 10 890 0 +859 30 155 9 5129 5235 10 0 855 +860 240 34 28 0 7471 10 0 45 +861 107 374 8 0 7498 10 0 964 +862 404 140 8 0 7498 10 0 23 +863 436 467 12 0 7402 10 0 652 +864 421 386 29 0 7469 10 0 189 +865 182 480 31 0 7448 10 0 787 +866 9 233 31 1227 1343 10 0 909 +867 110 251 23 2007 2095 10 0 647 +868 19 38 -15 0 7374 10 52 0 +869 46 248 9 0 7483 10 0 71 +870 308 199 14 0 7610 10 0 877 +871 423 221 9 0 7512 10 0 379 +872 313 391 -20 0 7533 10 401 0 +873 413 345 -7 4872 4993 10 403 0 +874 278 450 29 0 7486 10 0 549 +875 94 497 31 0 7395 10 0 735 +876 7 382 -22 3053 3231 10 465 0 +877 493 111 -14 2162 2286 10 870 0 +878 392 87 -8 0 7471 10 643 0 +879 13 394 15 0 7410 10 0 88 +880 259 301 -11 0 7636 10 848 0 +881 351 233 -18 5692 5811 10 96 0 +882 313 493 20 0 7436 10 0 382 +883 65 62 -26 0 7424 10 232 0 +884 417 212 12 0 7516 10 0 102 +885 450 194 -12 0 7480 10 812 0 +886 470 138 16 0 7441 10 0 373 +887 190 267 -8 0 7625 10 547 0 +888 248 214 -6 5955 5999 10 844 0 +889 50 383 -15 0 7447 10 435 0 +890 244 422 14 2134 2288 10 0 858 +891 60 29 -13 0 7396 10 856 0 +892 5 445 30 0 7374 10 0 458 +893 490 276 -20 0 7446 10 153 0 +894 441 100 31 0 7445 10 0 774 +895 162 388 -24 0 7524 10 170 0 +896 244 277 -22 5204 5326 10 762 0 +897 406 408 -20 0 7465 10 904 0 +898 265 240 9 21 123 10 0 580 +899 130 186 16 513 656 10 0 180 +900 382 110 -13 0 7495 10 975 0 +901 142 14 -16 0 7428 10 425 0 +902 352 487 27 0 7429 10 0 722 +903 307 52 -25 3703 3781 10 80 0 +904 418 399 20 0 7463 10 0 897 +905 196 56 15 0 7486 10 0 915 +906 66 31 -13 0 7401 10 383 0 +907 90 496 -21 0 7394 10 790 0 +908 480 136 22 0 7431 10 0 779 +909 65 82 -31 2966 3071 10 866 0 +910 48 293 -12 0 7481 10 354 0 +911 105 181 -27 0 7527 10 970 0 +912 215 282 -17 0 7640 10 806 0 +913 257 133 19 0 7570 10 0 173 +914 77 465 -27 0 7412 10 280 0 +915 43 135 -15 0 7451 10 905 0 +916 27 444 22 0 7392 10 0 941 +917 357 290 -18 0 7573 10 6 0 +918 38 15 -10 0 7371 10 619 0 +919 80 337 -15 0 7497 10 438 0 +920 36 451 -27 0 7394 10 771 0 +921 291 251 20 0 7646 10 0 369 +922 195 111 15 0 7538 10 0 67 +923 383 17 15 0 7419 10 0 595 +924 53 466 9 0 7395 10 0 272 +925 114 102 -30 0 7487 10 601 0 +926 350 199 21 4787 4945 10 0 679 +927 405 349 -19 0 7504 10 263 0 +928 472 248 -20 0 7465 10 539 0 +929 333 293 27 2494 2563 10 0 9 +930 174 397 32 4978 5099 10 0 392 +931 2 264 -12 0 7439 10 387 0 +932 7 82 -16 0 7392 10 59 0 +933 34 329 -23 0 7458 10 732 0 +934 158 179 37 0 7571 10 0 293 +935 421 499 -35 0 7385 10 163 0 +936 345 431 12 0 7483 10 0 564 +937 370 262 15 0 7567 10 0 361 +938 77 172 23 0 7498 10 0 463 +939 87 51 -8 0 7430 10 51 0 +940 468 352 -28 0 7447 10 688 0 +941 63 420 -22 0 7435 10 916 0 +942 347 184 -2 0 7570 10 642 0 +943 206 174 14 3201 3318 10 0 350 +944 209 212 -12 6142 6200 10 626 0 +945 466 362 -15 0 7444 10 211 0 +946 201 278 13 170 282 10 0 587 +947 206 172 -30 3131 3293 10 795 0 +948 471 94 -3 0 7417 10 274 0 +949 331 134 11 4479 4631 10 0 589 +950 274 261 -24 0 7661 10 320 0 +951 219 215 -15 0 7641 10 397 0 +952 349 76 15 0 7487 10 0 100 +953 86 189 -36 0 7513 10 546 0 +954 336 493 -15 0 7430 10 214 0 +955 7 194 29 0 7438 10 0 697 +956 492 335 -23 3316 3430 10 156 0 +957 248 386 22 0 7551 10 0 168 +958 463 406 -25 0 7423 10 578 0 +959 199 438 -33 0 7493 10 984 0 +960 135 30 -23 0 7439 10 967 0 +961 447 267 -7 0 7490 10 453 0 +962 235 33 -27 0 7470 10 491 0 +963 63 155 -6 0 7478 10 473 0 +964 294 421 -8 6292 6431 10 861 0 +965 318 99 35 0 7522 10 0 402 +966 21 146 -18 0 7436 10 345 0 +967 30 7 23 4734 4895 10 0 960 +968 410 399 25 983 1007 10 0 121 +969 405 187 -31 0 7520 10 798 0 +970 109 56 27 0 7448 10 0 911 +971 212 47 -12 0 7481 10 718 0 +972 479 387 -18 0 7421 10 543 0 +973 167 291 -29 0 7595 10 810 0 +974 259 498 33 0 7439 10 0 997 +975 461 182 13 2540 2612 10 0 900 +976 277 428 7 0 7507 10 0 110 +977 290 328 7 555 714 10 0 112 +978 146 313 22 4793 4890 10 0 184 +979 40 304 -29 4559 4718 10 492 0 +980 56 268 -28 0 7493 10 398 0 +981 104 28 -13 0 7422 10 114 0 +982 370 493 22 0 7416 10 0 353 +983 136 265 -10 390 530 10 279 0 +984 247 306 33 182 266 10 0 959 +985 241 38 16 2127 2246 10 0 475 +986 180 162 9 653 855 10 0 2 +987 253 118 19 0 7555 10 0 608 +988 413 391 8 0 7472 10 0 34 +989 380 350 15 3462 3589 10 0 479 +990 391 112 24 0 7490 10 0 216 +991 86 199 23 0 7516 10 0 43 +992 91 326 4 0 7511 10 0 440 +993 287 256 18 61 239 10 0 793 +994 203 211 20 0 7626 10 0 266 +995 79 80 -20 0 7446 10 83 0 +996 32 319 -29 1621 1703 10 775 0 +997 167 445 -33 0 7476 10 974 0 +998 439 237 11 0 7498 10 0 733 +999 373 418 -21 0 7479 10 197 0 +1000 26 342 12 0 7445 10 0 129 +1001 395 474 -26 0 7421 10 551 0 +1002 175 422 -24 0 7500 10 126 0 +1003 210 219 -7 0 7637 10 818 0 +1004 187 263 -35 0 7623 10 36 0 +1005 228 260 -12 6450 6514 10 411 0 +1006 67 378 -26 0 7464 10 209 0 +1007 332 5 -14 4110 4272 10 753 0 +1008 164 332 -19 0 7569 10 241 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2105.txt b/jsprit-instances/instances/lilim/1000/LR2105.txt new file mode 100644 index 00000000..6eaeb21f --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2105.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 -23 2285 2525 10 286 0 +2 325 56 13 3126 3366 10 0 515 +3 290 145 -12 5066 5306 10 22 0 +4 340 291 22 1822 2062 10 0 529 +5 370 382 -27 3475 3715 10 201 0 +6 273 255 -21 5908 6148 10 733 0 +7 36 301 -12 760 1000 10 983 0 +8 117 178 -24 4409 4649 10 608 0 +9 295 283 -12 3513 3753 10 550 0 +10 57 43 -11 4034 4274 10 16 0 +11 436 123 -19 781 1021 10 825 0 +12 48 162 -24 809 1049 10 674 0 +13 222 499 7 3321 3561 10 0 384 +14 376 92 10 3902 4142 10 0 534 +15 437 90 12 2280 2520 10 0 948 +16 3 23 11 1506 1746 10 0 10 +17 94 40 24 4212 4452 10 0 918 +18 398 476 25 1612 1852 10 0 24 +19 307 249 10 5446 5686 10 0 881 +20 179 286 8 1305 1545 10 0 521 +21 0 356 13 4285 4525 10 0 979 +22 143 158 12 490 730 10 0 3 +23 413 476 -3 4656 4896 10 358 0 +24 371 488 -25 2271 2511 10 18 0 +25 415 118 19 806 1046 10 0 693 +26 440 77 -18 3592 3832 10 446 0 +27 261 201 15 5996 6236 0 0 1005 +28 490 286 -20 2029 2269 10 904 0 +29 309 161 23 2273 2513 10 0 367 +30 39 162 18 2201 2441 10 0 174 +31 361 178 5 3830 4070 10 0 303 +32 261 138 1 2413 2653 10 0 761 +33 447 383 17 831 1071 10 0 101 +34 346 354 -9 3210 3450 10 677 0 +35 461 195 -33 5520 5760 10 79 0 +36 187 263 35 137 377 10 0 955 +37 130 247 17 360 600 10 0 257 +38 328 491 -12 2653 2893 10 936 0 +39 161 276 -23 474 714 10 662 0 +40 365 74 -18 3334 3574 10 672 0 +41 168 109 10 757 997 10 0 84 +42 111 192 11 4738 4978 10 0 679 +43 87 213 -17 2443 2683 10 295 0 +44 45 166 22 3993 4233 10 0 463 +45 62 94 16 3742 3982 10 0 460 +46 348 476 -8 4727 4967 10 221 0 +47 64 437 11 3613 3853 10 0 920 +48 56 75 24 5691 5931 0 0 1001 +49 24 259 19 1420 1660 10 0 557 +50 295 247 -8 5154 5394 10 808 0 +51 6 53 -25 2288 2528 10 932 0 +52 15 11 -10 3747 3987 10 279 0 +53 179 497 1 5584 5824 10 0 177 +54 67 352 20 1433 1673 10 0 980 +55 317 45 8 2573 2813 10 0 565 +56 40 278 -38 4358 4598 10 255 0 +57 33 278 -2 5889 6129 10 699 0 +58 322 290 -15 5856 6096 10 937 0 +59 159 226 16 256 496 10 0 899 +60 208 445 22 5270 5510 10 0 144 +61 453 360 13 804 1044 10 0 840 +62 34 169 -22 1878 2118 10 826 0 +63 436 25 -24 5069 5309 10 119 0 +64 393 98 -30 2950 3190 10 512 0 +65 466 96 -16 5473 5713 10 637 0 +66 366 390 -21 5213 5453 10 116 0 +67 303 78 12 600 840 10 0 841 +68 374 116 -8 2289 2529 10 409 0 +69 424 288 -6 4169 4409 10 335 0 +70 191 84 -23 3408 3648 10 117 0 +71 59 276 11 3510 3750 10 0 266 +72 215 293 13 102 342 10 0 549 +73 343 276 15 266 506 10 0 452 +74 488 173 -22 4781 5021 10 908 0 +75 452 110 14 1301 1541 10 0 742 +76 153 244 5 371 611 10 0 280 +77 176 200 17 2210 2450 10 0 525 +78 498 171 12 4966 5206 10 0 652 +79 492 188 33 2801 3041 10 0 35 +80 177 156 25 609 849 10 0 258 +81 398 49 -16 3107 3347 10 425 0 +82 497 296 -33 2390 2630 10 837 0 +83 276 84 20 2665 2905 10 0 528 +84 128 113 -10 1391 1631 10 41 0 +85 422 498 5 2708 2948 10 0 713 +86 460 424 -23 5758 5998 10 483 0 +87 246 314 -23 5721 5961 10 281 0 +88 0 422 8 3224 3464 10 0 438 +89 166 247 1 216 456 10 0 469 +90 311 422 -25 3892 4132 10 880 0 +91 392 95 16 3005 3245 10 0 216 +92 460 117 -16 2019 2259 10 776 0 +93 28 467 34 5310 5550 10 0 667 +94 375 145 12 3657 3897 10 0 675 +95 240 255 -24 6384 6624 10 192 0 +96 440 436 -13 3508 3748 10 700 0 +97 454 201 -20 5160 5400 10 559 0 +98 407 35 -13 5093 5333 10 792 0 +99 420 383 -9 3868 4108 10 159 0 +100 264 180 -1 6663 6903 10 427 0 +101 440 294 -17 3781 4021 10 33 0 +102 500 228 8 3067 3307 10 0 669 +103 144 331 13 3665 3905 10 0 762 +104 98 2 14 2307 2547 10 0 723 +105 461 186 -13 5989 6229 10 975 0 +106 68 450 -22 2470 2710 10 395 0 +107 153 192 -21 3403 3643 10 925 0 +108 34 239 16 816 1056 10 0 697 +109 465 367 14 4047 4287 10 0 577 +110 208 488 22 1850 2090 10 0 801 +111 93 413 17 785 1025 10 0 646 +112 371 332 -19 2058 2298 10 263 0 +113 231 167 15 221 461 10 0 598 +114 179 75 13 2900 3140 10 0 860 +115 196 489 23 4061 4301 10 0 171 +116 280 245 21 30 270 10 0 66 +117 108 37 23 2138 2378 10 0 70 +118 1 101 -8 4969 5209 10 169 0 +119 420 80 24 4327 4567 10 0 63 +120 38 190 -23 1079 1319 10 991 0 +121 470 405 17 3643 3883 10 0 247 +122 448 397 33 3402 3642 10 0 958 +123 471 427 8 3206 3446 10 0 897 +124 146 376 8 877 1117 10 0 150 +125 12 358 -7 4837 5077 10 649 0 +126 175 422 -6 5726 5966 10 638 0 +127 297 131 -11 4602 4842 10 949 0 +128 457 492 7 1972 2212 10 0 680 +129 69 423 -13 3150 3390 10 729 0 +130 97 288 -23 5076 5316 10 187 0 +131 172 314 9 2122 2362 10 0 947 +132 170 347 15 1683 1923 10 0 752 +133 103 123 -23 1899 2139 10 784 0 +134 154 374 -17 3688 3928 10 198 0 +135 318 497 -3 3355 3595 10 489 0 +136 330 147 28 3334 3574 10 0 467 +137 241 180 -3 6718 6958 10 518 0 +138 174 67 -17 4979 5219 10 471 0 +139 235 288 18 43 283 10 0 865 +140 94 192 -11 4261 4501 10 360 0 +141 232 101 24 1324 1564 10 0 595 +142 28 180 34 1482 1722 10 0 938 +143 64 135 -11 3413 3653 10 498 0 +144 174 376 -22 5617 5857 10 60 0 +145 293 174 -9 229 469 10 850 0 +146 218 12 3 2116 2356 10 0 253 +147 110 122 -23 5975 6215 10 545 0 +148 459 53 -7 4429 4669 10 724 0 +149 173 474 -10 5080 5320 10 445 0 +150 135 400 -8 1134 1374 10 124 0 +151 497 266 -9 2930 3170 10 940 0 +152 380 194 3 2794 3034 10 0 779 +153 495 227 20 1316 1556 10 0 719 +154 268 351 -36 6640 6880 10 301 0 +155 213 399 18 876 1116 10 0 413 +156 448 414 23 4831 5071 10 0 999 +157 327 139 13 4969 5209 10 0 165 +158 151 81 -21 6172 6412 10 617 0 +159 425 448 9 3118 3358 10 0 99 +160 92 259 4 1538 1778 10 0 283 +161 59 388 20 2591 2831 10 0 810 +162 468 360 16 1036 1276 10 0 945 +163 332 459 -34 1415 1655 10 569 0 +164 469 489 -12 2162 2402 10 554 0 +165 248 176 -13 5546 5786 10 157 0 +166 174 41 -14 5154 5394 10 238 0 +167 343 205 26 3009 3249 10 0 289 +168 154 392 9 566 806 10 0 941 +169 92 18 8 4437 4677 10 0 118 +170 250 328 24 935 1175 10 0 175 +171 88 484 -23 5903 6143 10 115 0 +172 360 488 -19 1202 1442 10 517 0 +173 156 65 22 4089 4329 10 0 326 +174 18 225 -18 2705 2945 10 30 0 +175 152 476 -24 2030 2270 10 170 0 +176 176 470 14 2127 2367 10 0 827 +177 195 450 -1 5884 6124 10 53 0 +178 466 149 -17 4684 4924 10 829 0 +179 221 269 -21 5002 5242 10 404 0 +180 105 137 32 1749 1989 10 0 588 +181 284 319 17 3207 3447 10 0 199 +182 41 120 22 2724 2964 10 0 967 +183 263 418 25 1054 1294 10 0 196 +184 218 271 -19 6235 6475 10 495 0 +185 365 119 -5 1467 1707 10 786 0 +186 89 322 -20 4023 4263 10 401 0 +187 180 283 23 2915 3155 10 0 130 +188 385 17 -26 3175 3415 10 877 0 +189 401 314 -26 3846 4086 10 351 0 +190 245 176 20 4879 5119 10 0 994 +191 251 238 27 12 252 10 0 922 +192 139 438 24 796 1036 10 0 95 +193 236 126 23 379 619 10 0 429 +194 61 441 -46 2115 2355 10 599 0 +195 405 454 -14 5152 5392 10 334 0 +196 111 392 -25 4616 4856 10 183 0 +197 373 421 21 890 1130 10 0 341 +198 247 443 17 1261 1501 10 0 134 +199 322 406 -17 3257 3497 10 181 0 +200 412 478 7 3779 4019 10 0 950 +201 374 346 27 1624 1864 10 0 5 +202 122 422 -15 5767 6007 10 757 0 +203 261 359 10 318 558 10 0 653 +204 173 182 25 291 531 10 0 709 +205 398 341 33 3697 3937 10 0 604 +206 413 127 -9 3263 3503 10 574 0 +207 325 311 22 5229 5469 10 0 270 +208 80 357 1 2062 2302 10 0 887 +209 67 378 -13 1822 2062 10 736 0 +210 216 341 -1 2556 2796 10 747 0 +211 498 457 -15 3592 3832 10 621 0 +212 44 344 12 4258 4498 10 0 625 +213 352 481 -20 5079 5319 10 572 0 +214 237 420 -10 5277 5517 10 448 0 +215 389 43 21 1522 1762 10 0 631 +216 292 136 -16 3062 3302 10 91 0 +217 426 38 -17 2375 2615 10 717 0 +218 245 461 8 2537 2777 10 0 848 +219 415 253 21 1406 1646 10 0 658 +220 298 264 36 80 320 10 0 730 +221 307 412 8 1555 1795 10 0 46 +222 53 204 -13 4160 4400 10 740 0 +223 480 152 -5 4026 4266 10 673 0 +224 262 97 -15 3728 3968 10 526 0 +225 83 169 21 3046 3286 10 0 243 +226 377 432 -12 3266 3506 10 479 0 +227 390 249 -24 2267 2507 10 852 0 +228 132 479 11 910 1150 10 0 382 +229 359 246 -14 5631 5871 10 664 0 +230 314 205 -20 6047 6287 10 365 0 +231 124 448 6 1414 1654 10 0 788 +232 0 188 -16 3668 3908 10 561 0 +233 343 166 28 3444 3684 10 0 900 +234 482 141 -18 3983 4223 10 783 0 +235 162 306 22 417 657 10 0 475 +236 24 71 11 1324 1564 10 0 634 +237 188 119 44 3839 4079 10 0 690 +238 100 85 14 1344 1584 10 0 166 +239 103 177 28 2446 2686 10 0 721 +240 26 67 -15 5207 5447 10 696 0 +241 164 332 -23 5059 5299 10 867 0 +242 385 285 13 3412 3652 10 0 884 +243 209 68 -21 6212 6452 10 225 0 +244 149 341 6 1556 1796 10 0 576 +245 415 95 -7 4647 4887 10 531 0 +246 167 488 17 940 1180 10 0 616 +247 413 493 -17 4813 5053 10 121 0 +248 439 222 -31 3858 4098 10 584 0 +249 150 484 -9 2441 2681 10 785 0 +250 299 353 34 336 576 10 0 760 +251 273 300 30 100 340 10 0 849 +252 402 277 -26 5694 5934 10 487 0 +253 239 15 -3 2355 2595 10 146 0 +254 363 225 -15 3363 3603 10 442 0 +255 65 343 38 769 1009 10 0 56 +256 351 60 15 781 1021 10 0 708 +257 60 246 -17 640 880 10 37 0 +258 144 35 -25 839 1079 10 80 0 +259 463 253 -10 4128 4368 10 956 0 +260 332 382 -16 3982 4222 10 346 0 +261 408 318 15 2512 2752 10 0 725 +262 452 206 31 1909 2149 10 0 356 +263 471 368 19 1652 1892 10 0 112 +264 93 490 2 1457 1697 10 0 799 +265 241 402 -23 4039 4279 10 560 0 +266 60 231 -11 4044 4284 10 71 0 +267 172 66 18 5151 5391 10 0 535 +268 404 207 -13 3582 3822 10 623 0 +269 286 356 30 328 568 10 0 481 +270 489 338 -22 5529 5769 10 207 0 +271 334 481 32 1262 1502 10 0 532 +272 26 442 -32 5316 5556 10 458 0 +273 226 175 -19 6715 6955 10 400 0 +274 488 3 -19 1542 1782 10 412 0 +275 178 150 33 2466 2706 10 0 423 +276 371 423 -15 724 964 10 313 0 +277 5 224 19 4159 4399 10 0 593 +278 94 344 26 2669 2909 10 0 399 +279 153 235 10 273 513 10 0 52 +280 12 367 -5 1243 1483 10 76 0 +281 217 357 23 5620 5860 10 0 87 +282 255 487 19 1532 1772 10 0 575 +283 149 214 -4 1868 2108 10 160 0 +284 169 305 -5 587 827 10 316 0 +285 487 446 -12 5301 5541 10 863 0 +286 267 374 23 2343 2583 10 0 1 +287 360 294 -24 5611 5851 10 320 0 +288 185 431 15 1488 1728 10 0 671 +289 325 210 -26 3674 3914 10 167 0 +290 175 352 -31 6600 6840 10 875 0 +291 76 462 18 3764 4004 10 0 465 +292 19 273 -26 4006 4246 10 417 0 +293 72 227 25 2195 2435 10 0 857 +294 213 283 14 5824 6064 10 0 912 +295 130 140 17 716 956 10 0 43 +296 274 442 -16 4205 4445 10 615 0 +297 337 41 -27 3949 4189 10 612 0 +298 372 39 10 2834 3074 10 0 659 +299 269 112 -18 4991 5231 10 480 0 +300 224 56 -35 4686 4926 10 368 0 +301 340 416 36 1224 1464 10 0 154 +302 13 214 21 5354 5594 10 0 581 +303 230 320 -5 4708 4948 10 31 0 +304 6 196 -10 4753 4993 10 778 0 +305 87 3 -15 5672 5912 10 789 0 +306 133 202 33 1782 2022 10 0 626 +307 235 316 2 2563 2803 10 0 930 +308 435 180 -14 838 1078 10 639 0 +309 173 65 12 1734 1974 10 0 939 +310 245 42 24 2129 2369 10 0 609 +311 384 149 -31 4729 4969 10 369 0 +312 51 286 -21 5776 6016 10 790 0 +313 267 290 15 54 294 10 0 276 +314 453 318 30 1435 1675 10 0 694 +315 189 402 10 2084 2324 10 0 681 +316 210 276 5 71 311 10 0 284 +317 120 261 5 3113 3353 10 0 804 +318 35 263 27 1021 1261 10 0 811 +319 429 59 9 1775 2015 10 0 361 +320 330 308 24 4622 4862 10 0 287 +321 58 391 -6 3469 3709 10 766 0 +322 260 472 33 4084 4324 10 0 759 +323 217 333 26 1584 1824 10 0 775 +324 335 46 -11 5307 5547 10 502 0 +325 198 85 28 990 1230 10 0 878 +326 138 28 -22 4326 4566 10 173 0 +327 29 336 22 1266 1506 10 0 835 +328 200 27 -17 2039 2279 10 503 0 +329 157 269 -11 6245 6485 10 689 0 +330 177 404 -7 4989 5229 10 464 0 +331 202 28 -35 3677 3917 10 816 0 +332 366 334 5 1581 1821 10 0 727 +333 149 458 13 4595 4835 10 0 501 +334 481 454 14 1222 1462 10 0 195 +335 377 385 6 3405 3645 10 0 69 +336 217 207 -19 5470 5710 10 530 0 +337 96 346 26 681 921 10 0 482 +338 224 320 -16 5075 5315 10 582 0 +339 206 97 -27 1732 1972 10 491 0 +340 438 127 2 3704 3944 10 0 540 +341 494 468 -21 1350 1590 10 197 0 +342 494 165 -21 2357 2597 10 769 0 +343 5 281 -12 5426 5666 10 855 0 +344 441 60 -9 5775 6015 10 820 0 +345 14 232 18 1160 1400 10 0 996 +346 288 439 16 1034 1274 10 0 260 +347 420 224 -25 1656 1896 10 513 0 +348 267 162 -31 5737 5977 10 894 0 +349 195 273 22 118 358 10 0 913 +350 233 230 20 26 266 10 0 536 +351 382 360 26 652 892 10 0 189 +352 406 460 2 2817 3057 10 0 691 +353 499 316 -25 2427 2667 10 968 0 +354 246 407 12 1186 1426 10 0 544 +355 283 454 14 5000 5240 10 0 453 +356 426 231 -31 4054 4294 10 262 0 +357 432 2 20 1806 2046 10 0 853 +358 404 439 3 895 1135 10 0 23 +359 397 477 -13 4803 5043 10 573 0 +360 44 140 11 3413 3653 10 0 140 +361 330 138 -9 4378 4618 10 319 0 +362 39 153 -19 3131 3371 10 748 0 +363 397 153 29 3470 3710 10 0 622 +364 226 316 21 161 401 10 0 843 +365 354 156 20 3270 3510 10 0 230 +366 201 66 -4 4607 4847 10 656 0 +367 389 156 -23 2802 3042 10 29 0 +368 134 211 35 422 662 10 0 300 +369 386 154 31 4344 4584 10 0 311 +370 335 99 -35 4814 5054 10 965 0 +371 356 256 19 305 545 10 0 885 +372 240 362 -25 5595 5835 10 555 0 +373 412 100 1 1993 2233 10 0 568 +374 394 322 -27 4039 4279 10 929 0 +375 48 150 15 2560 2800 10 0 628 +376 225 121 18 2874 3114 10 0 943 +377 102 422 23 845 1085 10 0 892 +378 339 41 -24 1763 2003 10 457 0 +379 440 201 -7 3510 3750 10 403 0 +380 411 379 -23 4713 4953 10 707 0 +381 219 210 14 82 322 10 0 738 +382 250 441 -11 2963 3203 10 228 0 +383 210 29 -26 4143 4383 10 455 0 +384 178 302 -7 3486 3726 10 13 0 +385 148 208 22 2046 2286 10 0 605 +386 225 369 38 366 606 10 0 660 +387 16 287 -8 1023 1263 10 547 0 +388 450 416 25 2247 2487 10 0 592 +389 287 397 -9 2197 2437 10 522 0 +390 285 247 -6 5039 5279 10 414 0 +391 351 481 10 1227 1467 10 0 882 +392 243 408 15 5675 5915 0 0 1006 +393 137 377 23 560 800 10 0 476 +394 33 152 17 5220 5460 0 0 1007 +395 68 303 22 825 1065 10 0 106 +396 456 113 -20 4849 5089 10 921 0 +397 134 276 15 473 713 10 0 815 +398 26 221 28 3926 4166 10 0 566 +399 79 257 -26 3752 3992 10 278 0 +400 181 185 19 6395 6635 10 0 273 +401 104 349 20 3977 4217 10 0 186 +402 267 174 -14 6413 6653 10 870 0 +403 475 267 7 3058 3298 10 0 379 +404 385 239 21 3082 3322 10 0 179 +405 95 382 -19 865 1105 10 456 0 +406 67 190 25 4633 4873 10 0 911 +407 32 94 -20 3661 3901 10 640 0 +408 401 164 13 2425 2665 10 0 642 +409 376 113 8 1997 2237 10 0 68 +410 409 255 -12 6030 6270 10 812 0 +411 228 260 12 6362 6602 0 0 1002 +412 363 34 19 1029 1269 10 0 274 +413 274 441 -18 2718 2958 10 155 0 +414 146 188 6 4880 5120 10 0 390 +415 212 186 -19 6826 7066 10 995 0 +416 432 66 -5 4225 4465 10 676 0 +417 83 300 26 1939 2179 10 0 292 +418 51 89 19 4773 5013 10 0 981 +419 379 486 22 2627 2867 10 0 964 +420 440 284 25 3347 3587 10 0 511 +421 175 239 23 183 423 10 0 610 +422 282 1 -15 4110 4350 10 923 0 +423 268 113 -33 2659 2899 10 275 0 +424 480 131 -5 2690 2930 10 500 0 +425 429 67 16 2869 3109 10 0 81 +426 162 301 -9 6392 6632 10 924 0 +427 281 96 1 4443 4683 10 0 100 +428 495 199 25 1287 1527 10 0 580 +429 372 115 -23 1395 1635 10 193 0 +430 396 83 -22 6286 6526 10 496 0 +431 239 486 -28 5868 6108 10 641 0 +432 288 70 24 656 896 10 0 570 +433 66 163 -21 1522 1762 10 953 0 +434 470 417 11 2887 3127 10 0 935 +435 226 423 15 728 968 10 0 861 +436 342 319 36 340 580 10 0 716 +437 174 122 -14 2313 2553 10 449 0 +438 49 353 -8 5724 5964 10 88 0 +439 448 495 -23 1474 1714 10 817 0 +440 13 465 31 3034 3274 10 0 973 +441 489 159 29 5651 5891 10 0 537 +442 311 203 15 2830 3070 10 0 254 +443 480 119 -20 2454 2694 10 538 0 +444 442 153 -11 4695 4935 10 928 0 +445 148 462 10 2847 3087 10 0 149 +446 233 87 18 950 1190 10 0 26 +447 323 34 -11 5199 5439 10 650 0 +448 84 377 10 3645 3885 10 0 214 +449 292 32 14 857 1097 10 0 437 +450 418 75 11 1732 1972 10 0 546 +451 451 305 13 714 954 10 0 896 +452 225 269 -15 5023 5263 10 73 0 +453 272 420 -14 5483 5723 10 355 0 +454 318 280 21 177 417 10 0 462 +455 250 57 26 2933 3173 10 0 383 +456 77 372 19 727 967 10 0 405 +457 385 58 24 1559 1799 10 0 378 +458 44 496 32 1547 1787 10 0 272 +459 460 328 13 816 1056 10 0 744 +460 67 24 -16 4014 4254 10 45 0 +461 91 27 -14 4667 4907 10 796 0 +462 360 284 -21 2606 2846 10 454 0 +463 82 183 -22 4347 4587 10 44 0 +464 153 362 7 4585 4825 10 0 330 +465 52 412 -18 5563 5803 10 291 0 +466 32 191 5 2285 2525 10 0 734 +467 325 147 -28 4687 4927 10 136 0 +468 328 458 -26 3011 3251 10 551 0 +469 133 273 -1 357 597 10 89 0 +470 147 30 -26 4375 4615 10 663 0 +471 131 246 17 3268 3508 10 0 138 +472 433 319 -14 5445 5685 10 542 0 +473 168 59 -30 1404 1644 10 601 0 +474 218 403 -12 5217 5457 10 741 0 +475 295 89 -22 2908 3148 10 235 0 +476 118 314 -23 1290 1530 10 393 0 +477 251 63 14 3890 4130 10 0 746 +478 388 44 -12 4463 4703 10 718 0 +479 381 328 12 2809 3049 10 0 226 +480 132 32 18 3078 3318 10 0 299 +481 334 403 -30 578 818 10 269 0 +482 83 290 -26 2370 2610 10 337 0 +483 411 396 23 3621 3861 10 0 86 +484 243 402 -22 1560 1800 10 957 0 +485 52 18 -2 3368 3608 10 579 0 +486 265 0 10 3524 3764 10 0 845 +487 268 288 26 5008 5248 10 0 252 +488 476 61 36 1735 1975 10 0 651 +489 283 438 3 866 1106 10 0 135 +490 191 215 17 154 394 10 0 648 +491 253 50 27 843 1083 10 0 339 +492 71 282 -20 2507 2747 10 889 0 +493 297 304 4 166 406 10 0 836 +494 244 368 25 1596 1836 10 0 823 +495 80 279 19 4571 4811 10 0 184 +496 488 96 22 4205 4445 10 0 430 +497 142 30 -27 4924 5164 10 970 0 +498 68 240 11 3118 3358 10 0 143 +499 193 138 -17 2583 2823 10 806 0 +500 451 62 5 1069 1309 10 0 424 +501 138 406 -13 4804 5044 10 333 0 +502 306 42 11 1847 2087 10 0 324 +503 247 219 17 31 271 10 0 328 +504 98 29 14 4126 4366 10 0 891 +505 102 6 -12 5774 6014 10 774 0 +506 142 360 -13 6068 6308 10 703 0 +507 172 24 -2 5749 5989 10 777 0 +508 352 241 5 3109 3349 10 0 926 +509 486 324 -8 3018 3258 10 988 0 +510 133 455 25 3172 3412 10 0 992 +511 440 292 -25 3700 3940 10 420 0 +512 364 173 30 661 901 10 0 64 +513 442 289 25 704 944 10 0 347 +514 48 412 -9 4068 4308 10 548 0 +515 344 70 -13 4523 4763 10 2 0 +516 78 406 -24 3782 4022 10 687 0 +517 329 456 19 936 1176 10 0 172 +518 157 38 3 4131 4371 10 0 137 +519 374 260 -13 7039 7279 10 682 0 +520 297 283 -15 5338 5578 10 989 0 +521 210 113 -8 2701 2941 10 20 0 +522 215 434 9 710 950 10 0 389 +523 262 92 -19 2462 2702 10 739 0 +524 140 108 -18 4225 4465 10 901 0 +525 235 108 -17 4258 4498 10 77 0 +526 210 133 15 2694 2934 10 0 224 +527 25 53 23 4020 4260 10 0 883 +528 339 113 -20 2982 3222 10 83 0 +529 394 310 -22 4334 4574 10 4 0 +530 126 391 19 1031 1271 10 0 336 +531 343 34 7 2839 3079 10 0 245 +532 354 416 -32 2657 2897 10 271 0 +533 202 391 30 2434 2674 10 0 895 +534 367 97 -10 3892 4132 10 14 0 +535 188 151 -18 5127 5367 10 267 0 +536 111 178 -20 506 746 10 350 0 +537 456 157 -29 5760 6000 10 441 0 +538 441 7 20 1506 1746 10 0 443 +539 270 337 20 7071 7311 0 0 1004 +540 323 29 -2 4490 4730 10 340 0 +541 200 78 -9 3911 4151 10 986 0 +542 330 281 14 5262 5502 10 0 472 +543 438 488 18 1249 1489 10 0 864 +544 161 416 -12 3985 4225 10 354 0 +545 30 97 23 4781 5021 10 0 147 +546 273 70 -11 2417 2657 10 450 0 +547 214 245 8 36 276 10 0 387 +548 221 291 9 124 364 10 0 514 +549 79 467 -13 1346 1586 10 72 0 +550 423 315 12 660 900 10 0 9 +551 395 474 26 1488 1728 10 0 468 +552 481 207 34 3364 3604 10 0 720 +553 199 203 20 5769 6009 0 0 1008 +554 497 483 12 1354 1594 10 0 164 +555 449 428 25 4927 5167 10 0 372 +556 100 266 5 1819 2059 10 0 978 +557 214 274 -19 5416 5656 10 49 0 +558 16 68 -31 1066 1306 10 915 0 +559 475 198 20 3281 3521 10 0 97 +560 371 427 23 3773 4013 10 0 265 +561 62 375 16 1335 1575 10 0 232 +562 163 472 9 2554 2794 10 0 780 +563 13 314 14 915 1155 10 0 876 +564 376 385 12 619 859 10 0 688 +565 231 29 -8 4845 5085 10 55 0 +566 89 358 -28 4929 5169 10 398 0 +567 331 356 -18 2787 3027 10 993 0 +568 365 190 -1 5850 6090 10 373 0 +569 256 441 34 644 884 10 0 163 +570 120 37 -24 3041 3281 10 432 0 +571 349 43 26 798 1038 10 0 847 +572 230 487 20 4458 4698 10 0 213 +573 489 457 13 1205 1445 10 0 359 +574 341 72 9 3159 3399 10 0 206 +575 181 441 -19 2107 2347 10 282 0 +576 306 229 -6 5221 5461 10 244 0 +577 492 326 -14 4756 4996 10 109 0 +578 347 459 25 1858 2098 10 0 982 +579 66 88 2 3259 3499 10 0 485 +580 272 234 -25 6301 6541 10 428 0 +581 134 194 -21 6547 6787 10 302 0 +582 320 211 16 3910 4150 10 0 338 +583 214 311 14 163 403 10 0 633 +584 489 274 31 2075 2315 10 0 248 +585 231 410 -7 4886 5126 10 976 0 +586 432 199 7 2494 2734 10 0 751 +587 29 358 23 2383 2623 10 0 933 +588 62 236 -32 2172 2412 10 180 0 +589 333 163 -9 4901 5141 10 898 0 +590 364 71 5 5334 5574 10 0 695 +591 125 65 -24 3094 3334 10 781 0 +592 429 476 -25 2233 2473 10 388 0 +593 161 275 -19 5327 5567 10 277 0 +594 365 274 -31 350 590 10 624 0 +595 117 110 -24 3855 4095 10 141 0 +596 166 345 -14 4459 4699 10 890 0 +597 345 146 -18 5696 5936 10 683 0 +598 324 99 -15 1292 1532 10 113 0 +599 72 477 46 1034 1274 10 0 194 +600 487 320 -15 3371 3611 10 927 0 +601 120 17 30 1056 1296 10 0 473 +602 1 252 5 1041 1281 10 0 910 +603 303 186 10 5357 5597 10 0 888 +604 428 302 -33 4004 4244 10 205 0 +605 264 135 -22 3458 3698 10 385 0 +606 223 178 -17 4485 4725 10 670 0 +607 174 347 3 3999 4239 10 0 959 +608 238 123 24 3064 3304 10 0 8 +609 187 61 -24 2120 2360 10 310 0 +610 52 303 -23 1705 1945 10 421 0 +611 89 185 -27 2339 2579 10 644 0 +612 341 59 27 3099 3339 10 0 297 +613 89 65 16 2821 3061 10 0 756 +614 495 355 -11 4913 5153 10 726 0 +615 368 452 16 2620 2860 10 0 296 +616 164 473 -17 1125 1365 10 246 0 +617 171 34 21 4512 4752 10 0 158 +618 114 460 14 4284 4524 10 0 907 +619 224 3 10 2702 2942 10 0 824 +620 472 57 -10 5119 5359 10 636 0 +621 448 404 15 2336 2576 10 0 211 +622 390 120 -29 3957 4197 10 363 0 +623 386 225 13 3614 3854 10 0 268 +624 301 239 31 89 329 10 0 594 +625 115 296 -12 6055 6295 10 212 0 +626 69 266 -33 2973 3213 10 306 0 +627 115 395 11 3201 3441 10 0 997 +628 68 53 -15 2895 3135 10 375 0 +629 33 268 -37 2723 2963 10 934 0 +630 450 45 24 1954 2194 10 0 661 +631 351 5 -21 1924 2164 10 215 0 +632 351 148 30 1785 2025 10 0 797 +633 80 458 -14 1422 1662 10 583 0 +634 60 5 -11 4115 4355 10 236 0 +635 10 407 36 1678 1918 10 0 919 +636 497 18 10 4460 4700 10 0 620 +637 437 98 16 4395 4635 10 0 65 +638 130 494 6 2975 3215 10 0 126 +639 391 202 14 476 716 10 0 308 +640 43 210 20 723 963 10 0 407 +641 381 457 28 1823 2063 10 0 431 +642 449 190 -13 4500 4740 10 408 0 +643 429 169 -9 3551 3791 10 834 0 +644 105 140 27 608 848 10 0 611 +645 282 10 -24 4986 5226 10 990 0 +646 20 480 -17 2221 2461 10 111 0 +647 61 170 -21 3963 4203 10 966 0 +648 210 81 -17 1536 1776 10 490 0 +649 87 311 7 576 816 10 0 125 +650 309 29 11 5116 5356 10 0 447 +651 397 57 -36 5844 6084 10 488 0 +652 337 232 -12 6222 6462 10 78 0 +653 262 369 -10 457 697 10 203 0 +654 41 232 16 761 1001 10 0 906 +655 69 414 -28 4993 5233 10 758 0 +656 149 98 4 4600 4840 10 0 366 +657 207 487 -33 2697 2937 10 984 0 +658 366 260 -21 6021 6261 10 219 0 +659 497 54 -10 3852 4092 10 298 0 +660 210 379 -38 2775 3015 10 386 0 +661 437 19 -24 3996 4236 10 630 0 +662 181 260 23 159 399 10 0 39 +663 125 61 26 2387 2627 10 0 470 +664 368 311 14 3644 3884 10 0 229 +665 80 400 -22 5725 5965 10 916 0 +666 75 118 -14 1576 1816 10 668 0 +667 171 303 -34 6297 6537 10 93 0 +668 80 251 14 1154 1394 10 0 666 +669 455 168 -8 3407 3647 10 102 0 +670 215 129 17 4414 4654 10 0 606 +671 179 318 -15 4423 4663 10 288 0 +672 187 73 18 1108 1348 10 0 40 +673 394 47 5 1192 1432 10 0 223 +674 31 175 24 926 1166 10 0 12 +675 339 144 -12 4336 4576 10 94 0 +676 492 34 5 3182 3422 10 0 416 +677 387 349 9 556 796 10 0 34 +678 142 372 18 532 772 10 0 839 +679 291 213 -11 4971 5211 10 42 0 +680 421 387 -7 3145 3385 10 128 0 +681 274 403 -10 3490 3730 10 315 0 +682 434 359 13 5509 5749 10 0 519 +683 257 57 18 4844 5084 10 0 597 +684 428 202 24 3555 3795 10 0 874 +685 355 174 -14 2801 3041 10 793 0 +686 46 389 22 967 1207 10 0 698 +687 44 440 24 3095 3335 10 0 516 +688 491 369 -12 2858 3098 10 564 0 +689 33 286 11 6124 6364 10 0 329 +690 351 128 -44 4953 5193 10 237 0 +691 485 428 -2 5900 6140 10 352 0 +692 273 149 -6 5951 6191 10 844 0 +693 447 184 -19 1638 1878 10 25 0 +694 386 245 -30 1856 2096 10 314 0 +695 323 77 -5 5560 5800 10 590 0 +696 21 70 15 3025 3265 10 0 240 +697 9 101 -16 2604 2844 10 108 0 +698 71 304 -22 2696 2936 10 686 0 +699 43 360 2 3281 3521 10 0 57 +700 396 417 13 3180 3420 10 0 96 +701 158 24 -12 2385 2625 10 851 0 +702 164 320 -25 4319 4559 10 813 0 +703 195 386 13 467 707 10 0 506 +704 306 235 -19 112 352 10 803 0 +705 66 314 26 659 899 10 0 1000 +706 95 64 4 3004 3244 10 0 903 +707 348 348 23 3679 3919 10 0 380 +708 495 83 -15 1703 1943 10 256 0 +709 61 214 -25 1307 1547 10 204 0 +710 240 240 -18 6738 6978 10 944 0 +711 140 137 -19 2219 2459 10 987 0 +712 242 106 -27 5014 5254 10 831 0 +713 392 491 -5 4471 4711 10 85 0 +714 342 481 18 5700 5940 10 0 954 +715 478 300 12 3498 3738 10 0 961 +716 299 285 -36 4955 5195 10 436 0 +717 481 84 17 1962 2202 10 0 217 +718 271 128 12 1322 1562 10 0 478 +719 484 224 -20 1138 1378 10 153 0 +720 441 177 -34 3945 4185 10 552 0 +721 46 163 -28 3644 3884 10 239 0 +722 493 493 -29 3366 3606 10 755 0 +723 253 74 -14 5340 5580 10 104 0 +724 390 34 7 4181 4421 10 0 148 +725 374 306 -15 3916 4156 10 261 0 +726 436 295 11 2053 2293 10 0 614 +727 371 315 -5 4603 4843 10 332 0 +728 27 464 -17 5104 5344 10 735 0 +729 3 471 13 2783 3023 10 0 129 +730 418 269 -36 4759 4999 10 220 0 +731 90 477 -11 991 1231 10 914 0 +732 141 426 23 2066 2306 10 0 768 +733 418 251 21 4727 4967 10 0 6 +734 57 183 -5 4341 4581 10 466 0 +735 29 462 17 5178 5418 10 0 728 +736 55 318 13 1188 1428 10 0 209 +737 18 24 -24 2453 2693 10 765 0 +738 263 153 -14 1590 1830 10 381 0 +739 289 220 19 77 317 10 0 523 +740 84 255 13 1068 1308 10 0 222 +741 159 299 12 4002 4242 10 0 474 +742 485 104 -14 3118 3358 10 75 0 +743 178 135 -30 5995 6235 10 754 0 +744 389 255 -13 3081 3321 10 459 0 +745 457 280 -7 3939 4179 10 977 0 +746 171 24 -14 5474 5714 10 477 0 +747 330 371 1 2174 2414 10 0 210 +748 10 237 19 2406 2646 10 0 362 +749 458 213 22 4453 4693 10 0 886 +750 257 391 -27 6472 6712 10 902 0 +751 482 184 -7 4367 4607 10 586 0 +752 222 331 -15 2098 2338 10 132 0 +753 332 5 14 4071 4311 10 0 830 +754 47 208 30 846 1086 10 0 743 +755 489 437 29 2767 3007 10 0 722 +756 165 59 -16 3711 3951 10 613 0 +757 211 446 15 4434 4674 10 0 202 +758 225 488 28 2482 2722 10 0 655 +759 355 485 -33 5856 6096 10 322 0 +760 441 374 -34 833 1073 10 250 0 +761 399 175 -1 2928 3168 10 32 0 +762 103 464 -13 5032 5272 10 103 0 +763 244 13 -15 3992 4232 10 842 0 +764 51 360 -15 4518 4758 10 879 0 +765 44 115 24 865 1105 10 0 737 +766 312 453 6 2139 2379 10 0 321 +767 64 198 10 4294 4534 10 0 859 +768 67 451 -23 4802 5042 10 732 0 +769 371 71 21 1087 1327 10 0 342 +770 439 156 -33 2043 2283 10 893 0 +771 105 474 -29 1823 2063 10 833 0 +772 366 288 29 2675 2915 10 0 873 +773 415 207 18 3540 3780 10 0 942 +774 58 39 12 4592 4832 10 0 505 +775 197 202 -26 4755 4995 10 323 0 +776 442 5 16 1221 1461 10 0 92 +777 71 12 2 1112 1352 10 0 507 +778 74 215 10 855 1095 10 0 304 +779 347 192 -3 5893 6133 10 152 0 +780 178 420 -9 4225 4465 10 562 0 +781 186 135 24 2811 3051 10 0 591 +782 176 199 -7 239 479 10 818 0 +783 438 5 18 2136 2376 10 0 234 +784 150 68 23 1631 1871 10 0 133 +785 185 434 9 2234 2474 10 0 249 +786 215 79 5 834 1074 10 0 185 +787 177 486 -15 6329 6569 10 858 0 +788 49 437 -6 1650 1890 10 231 0 +789 100 66 15 5539 5779 10 0 305 +790 35 344 21 3392 3632 10 0 312 +791 433 447 -5 3117 3357 10 872 0 +792 372 97 13 795 1035 10 0 98 +793 344 203 14 609 849 10 0 685 +794 423 170 -9 1992 2232 10 871 0 +795 171 188 -13 2422 2662 10 946 0 +796 64 5 14 4456 4696 10 0 461 +797 371 163 -30 3251 3491 10 632 0 +798 398 210 -33 493 733 10 809 0 +799 48 437 -2 3155 3395 10 264 0 +800 392 1 11 2361 2601 10 0 838 +801 195 464 -22 6105 6345 10 110 0 +802 211 248 26 39 279 10 0 866 +803 293 228 19 73 313 10 0 704 +804 23 235 -5 4033 4273 10 317 0 +805 213 185 21 179 419 10 0 960 +806 172 292 17 308 548 10 0 499 +807 228 287 21 52 292 10 0 832 +808 387 394 8 4330 4570 10 0 50 +809 374 232 33 381 621 10 0 798 +810 48 366 -20 2912 3152 10 161 0 +811 44 311 -27 1570 1810 10 318 0 +812 447 272 12 1475 1715 10 0 410 +813 132 477 25 1249 1489 10 0 702 +814 80 117 24 3237 3477 10 0 963 +815 11 403 -15 1312 1552 10 397 0 +816 144 220 35 321 561 10 0 331 +817 473 491 23 1593 1833 10 0 439 +818 210 219 7 82 322 10 0 782 +819 452 484 26 5054 5294 10 0 821 +820 365 28 9 1013 1253 10 0 344 +821 498 456 -26 5564 5804 10 819 0 +822 84 453 19 4832 5072 0 0 1003 +823 91 427 -25 3470 3710 10 494 0 +824 178 72 -10 2967 3207 10 619 0 +825 409 155 19 621 861 10 0 11 +826 132 151 22 496 736 10 0 62 +827 136 430 -14 2781 3021 10 176 0 +828 292 104 26 1156 1396 10 0 985 +829 443 167 17 2113 2353 10 0 178 +830 321 149 -14 5638 5878 10 753 0 +831 235 13 27 1375 1615 10 0 712 +832 166 440 -21 711 951 10 807 0 +833 112 433 29 880 1120 10 0 771 +834 452 172 9 2373 2613 10 0 643 +835 37 281 -22 1913 2153 10 327 0 +836 414 378 -4 1919 2159 10 493 0 +837 475 352 33 1179 1419 10 0 82 +838 400 71 -11 5428 5668 10 800 0 +839 286 244 -18 5076 5316 10 678 0 +840 429 389 -13 1636 1876 10 61 0 +841 92 76 -12 4496 4736 10 67 0 +842 124 111 15 3098 3338 10 0 763 +843 268 458 -21 2032 2272 10 364 0 +844 352 63 6 4653 4893 10 0 692 +845 49 118 -10 4226 4466 10 486 0 +846 398 329 -24 551 791 10 917 0 +847 382 9 -26 1027 1267 10 571 0 +848 229 322 -8 6581 6821 10 218 0 +849 279 355 -30 605 845 10 251 0 +850 266 221 9 33 273 10 0 145 +851 142 80 12 1908 2148 10 0 701 +852 359 287 24 340 580 10 0 227 +853 482 104 -20 3170 3410 10 357 0 +854 284 457 -33 5934 6174 10 974 0 +855 64 294 12 4345 4585 10 0 343 +856 404 59 13 3592 3832 10 0 952 +857 68 160 -25 4483 4723 10 293 0 +858 211 411 15 4526 4766 10 0 787 +859 30 155 -10 5062 5302 10 767 0 +860 240 34 -13 6178 6418 10 114 0 +861 107 374 -15 3597 3837 10 435 0 +862 404 140 8 4975 5215 10 0 969 +863 436 467 12 2884 3124 10 0 285 +864 421 386 -18 3237 3477 10 543 0 +865 182 480 -18 1399 1639 10 139 0 +866 9 233 -26 1165 1405 10 802 0 +867 110 251 23 1931 2171 10 0 241 +868 19 38 -13 3329 3569 10 909 0 +869 46 248 -40 3195 3435 10 931 0 +870 308 199 14 5973 6213 10 0 402 +871 423 221 9 973 1213 10 0 794 +872 313 391 5 538 778 10 0 791 +873 413 345 -29 4812 5052 10 772 0 +874 278 450 -24 5440 5680 10 684 0 +875 94 497 31 3069 3309 10 0 290 +876 7 382 -14 3022 3262 10 563 0 +877 493 111 26 2104 2344 10 0 188 +878 392 87 -28 4671 4911 10 325 0 +879 13 394 15 1430 1670 10 0 764 +880 259 301 25 335 575 10 0 90 +881 351 233 -10 5631 5871 10 19 0 +882 313 493 -10 4712 4952 10 391 0 +883 65 62 -23 3846 4086 10 527 0 +884 417 212 -13 3581 3821 10 242 0 +885 450 194 -19 2439 2679 10 371 0 +886 470 138 -22 5498 5738 10 749 0 +887 190 267 -1 6955 7195 10 208 0 +888 248 214 -10 5857 6097 10 603 0 +889 50 383 20 980 1220 10 0 492 +890 244 422 14 2091 2331 10 0 596 +891 60 29 -14 5391 5631 10 504 0 +892 5 445 -23 1184 1424 10 377 0 +893 490 276 33 891 1131 10 0 770 +894 441 100 31 3434 3674 10 0 348 +895 162 388 -30 4444 4684 10 533 0 +896 244 277 -13 5145 5385 10 451 0 +897 406 408 -8 5765 6005 10 123 0 +898 265 240 9 18 258 10 0 589 +899 130 186 -16 465 705 10 59 0 +900 382 110 -28 4390 4630 10 233 0 +901 142 14 18 3281 3521 10 0 524 +902 352 487 27 3547 3787 10 0 750 +903 307 52 -4 3622 3862 10 706 0 +904 418 399 20 1691 1931 10 0 28 +905 196 56 15 2378 2618 10 0 962 +906 66 31 -16 4134 4374 10 654 0 +907 90 496 -14 5521 5761 10 618 0 +908 480 136 22 907 1147 10 0 74 +909 65 82 13 2898 3138 10 0 868 +910 48 293 -5 1044 1284 10 602 0 +911 105 181 -25 6065 6305 10 406 0 +912 215 282 -14 5702 5942 10 294 0 +913 257 133 -22 3389 3629 10 349 0 +914 77 465 11 984 1224 10 0 731 +915 43 135 31 827 1067 10 0 558 +916 27 444 22 4261 4501 10 0 665 +917 357 290 24 337 577 10 0 846 +918 38 15 -24 4304 4544 10 17 0 +919 80 337 -36 4417 4657 10 635 0 +920 36 451 -11 3495 3735 10 47 0 +921 291 251 20 44 284 10 0 396 +922 195 111 -27 3932 4172 10 191 0 +923 383 17 15 3702 3942 10 0 422 +924 53 466 9 1280 1520 10 0 426 +925 114 102 21 1969 2209 10 0 107 +926 350 199 -5 4746 4986 10 508 0 +927 405 349 15 2029 2269 10 0 600 +928 472 248 11 3278 3518 10 0 444 +929 333 293 27 2408 2648 10 0 374 +930 174 397 -2 4919 5159 10 307 0 +931 2 264 40 2558 2798 10 0 869 +932 7 82 25 1586 1826 10 0 51 +933 34 329 -23 4112 4352 10 587 0 +934 158 179 37 345 585 10 0 629 +935 421 499 -11 5321 5561 10 434 0 +936 345 431 12 1320 1560 10 0 38 +937 370 262 15 4338 4578 10 0 58 +938 77 172 -34 3082 3322 10 142 0 +939 87 51 -12 1997 2237 10 309 0 +940 468 352 9 3013 3253 10 0 151 +941 63 420 -9 2018 2258 10 168 0 +942 347 184 -18 4255 4495 10 773 0 +943 206 174 -18 3139 3379 10 376 0 +944 209 212 18 6051 6291 10 0 710 +945 466 362 -16 4549 4789 10 162 0 +946 201 278 13 106 346 10 0 795 +947 206 172 -9 3092 3332 10 131 0 +948 471 94 -12 3935 4175 10 15 0 +949 331 134 11 4435 4675 10 0 127 +950 274 261 -7 6768 7008 10 200 0 +951 219 215 32 67 307 10 0 971 +952 349 76 -13 4063 4303 10 856 0 +953 86 189 21 847 1087 10 0 433 +954 336 493 -18 5912 6152 10 714 0 +955 7 194 -35 3745 3985 10 36 0 +956 492 335 10 3253 3493 10 0 259 +957 248 386 22 1453 1693 10 0 484 +958 463 406 -33 3369 3609 10 122 0 +959 199 438 -3 5382 5622 10 607 0 +960 135 30 -21 1838 2078 10 805 0 +961 447 267 -12 3858 4098 10 715 0 +962 235 33 -15 5288 5528 10 905 0 +963 63 155 -24 3799 4039 10 814 0 +964 294 421 -22 6242 6482 10 419 0 +965 318 99 35 4791 5031 10 0 370 +966 21 146 21 1887 2127 10 0 647 +967 30 7 -22 4694 4934 10 182 0 +968 410 399 25 875 1115 10 0 353 +969 405 187 -8 4942 5182 10 862 0 +970 109 56 27 839 1079 10 0 497 +971 212 47 -32 3144 3384 10 951 0 +972 479 387 13 1530 1770 10 0 998 +973 167 291 -31 6477 6717 10 440 0 +974 259 498 33 4240 4480 10 0 854 +975 461 182 13 2456 2696 10 0 105 +976 277 428 7 1901 2141 10 0 585 +977 290 328 7 515 755 10 0 745 +978 146 313 -5 4721 4961 10 556 0 +979 40 304 -13 4519 4759 10 21 0 +980 56 268 -20 4196 4436 10 54 0 +981 104 28 -19 5832 6072 10 418 0 +982 370 493 -25 2225 2465 10 578 0 +983 136 265 12 340 580 10 0 7 +984 247 306 33 104 344 10 0 657 +985 241 38 -26 2067 2307 10 828 0 +986 180 162 9 634 874 10 0 541 +987 253 118 19 2129 2369 10 0 711 +988 413 391 8 808 1048 10 0 509 +989 380 350 15 3406 3646 10 0 520 +990 391 112 24 3941 4181 10 0 645 +991 86 199 23 1051 1291 10 0 120 +992 91 326 -25 3793 4033 10 510 0 +993 287 256 18 37 277 10 0 567 +994 203 211 -20 5166 5406 10 190 0 +995 79 80 19 5468 5708 10 0 415 +996 32 319 -18 1542 1782 10 345 0 +997 167 445 -11 5588 5828 10 627 0 +998 439 237 -13 3694 3934 10 972 0 +999 373 418 -23 4978 5218 10 156 0 +1000 26 342 -26 1224 1464 10 705 0 +1001 56 75 -24 5691 5931 10 48 0 +1002 228 260 -12 6362 6602 10 411 0 +1003 84 453 -19 4832 5072 10 822 0 +1004 270 337 -20 7071 7311 10 539 0 +1005 261 201 -15 5996 6236 10 27 0 +1006 243 408 -15 5675 5915 10 392 0 +1007 33 152 -17 5220 5460 10 394 0 +1008 199 203 -20 5769 6009 10 553 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2106.txt b/jsprit-instances/instances/lilim/1000/LR2106.txt new file mode 100644 index 00000000..1940b5ba --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2106.txt @@ -0,0 +1,1014 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 -1 2285 2525 10 747 0 +2 325 56 -28 3126 3366 10 325 0 +3 290 145 -17 5066 5306 10 670 0 +4 340 291 22 1822 2062 10 0 134 +5 370 382 11 0 7509 10 0 250 +6 273 255 18 0 7664 10 0 61 +7 36 301 21 760 1000 10 0 345 +8 117 178 -28 4409 4649 10 398 0 +9 295 283 -23 3513 3753 10 286 0 +10 57 43 -32 4034 4274 10 737 0 +11 436 123 40 781 1021 10 0 450 +12 48 162 15 809 1049 10 0 925 +13 222 499 7 0 7437 10 0 849 +14 376 92 -31 3902 4142 10 798 0 +15 437 90 -18 2280 2520 10 311 0 +16 3 23 11 1506 1746 10 0 841 +17 94 40 -15 4212 4452 10 883 0 +18 398 476 25 1612 1852 10 0 641 +19 307 249 10 0 7630 10 0 82 +20 179 286 -5 1305 1545 10 316 0 +21 0 356 13 4285 4525 10 0 735 +22 143 158 -9 490 730 10 986 0 +23 413 476 34 4656 4896 10 0 897 +24 371 488 10 2271 2511 10 0 109 +25 415 118 -21 0 7476 10 215 0 +26 440 77 -14 3592 3832 10 449 0 +27 261 201 -18 5996 6236 10 324 0 +28 490 286 29 2029 2269 10 0 542 +29 309 161 23 2273 2513 10 0 167 +30 39 162 18 2201 2441 10 0 595 +31 361 178 -13 3830 4070 10 761 0 +32 261 138 1 0 7575 10 0 477 +33 447 383 17 831 1071 10 0 722 +34 346 354 -19 3210 3450 10 172 0 +35 461 195 -18 5520 5760 10 353 0 +36 187 263 -24 0 7623 10 625 0 +37 130 247 17 360 600 10 0 130 +38 328 491 -21 2653 2893 10 197 0 +39 161 276 8 474 714 10 0 277 +40 365 74 -14 3334 3574 10 366 0 +41 168 109 -17 757 997 10 295 0 +42 111 192 11 0 7537 0 0 1011 +43 87 213 -35 0 7520 10 368 0 +44 45 166 -15 0 7466 10 696 0 +45 62 94 16 3742 3982 10 0 318 +46 348 476 19 4727 4967 10 0 819 +47 64 437 -7 0 7424 10 514 0 +48 56 75 -14 5691 5931 10 461 0 +49 24 259 -31 1420 1660 10 866 0 +50 295 247 -12 5154 5394 10 374 0 +51 6 53 8 2288 2528 10 0 706 +52 15 11 15 0 7352 10 0 887 +53 179 497 1 0 7430 0 0 1004 +54 67 352 20 1433 1673 10 0 611 +55 317 45 -18 2573 2813 10 672 0 +56 40 278 10 0 7476 10 0 689 +57 33 278 -19 5889 6129 10 995 0 +58 322 290 -5 0 7605 10 382 0 +59 159 226 -8 256 496 10 547 0 +60 208 445 -11 5270 5510 10 895 0 +61 453 360 -18 804 1044 10 6 0 +62 34 169 11 1878 2118 10 0 147 +63 436 25 -28 5069 5309 10 158 0 +64 393 98 -20 2950 3190 10 538 0 +65 466 96 -21 5473 5713 10 344 0 +66 366 390 23 5213 5453 10 0 682 +67 303 78 12 600 840 10 0 217 +68 374 116 -35 0 7505 10 254 0 +69 424 288 13 4169 4409 10 0 207 +70 191 84 13 3408 3648 10 0 299 +71 59 276 -12 0 7495 10 855 0 +72 215 293 13 102 342 10 0 111 +73 343 276 15 266 506 10 0 864 +74 488 173 25 4781 5021 10 0 441 +75 452 110 -14 1301 1541 10 793 0 +76 153 244 5 371 611 10 0 255 +77 176 200 17 2210 2450 10 0 913 +78 498 171 -17 4966 5206 10 829 0 +79 492 188 -19 2801 3041 10 825 0 +80 177 156 25 609 849 10 0 460 +81 398 49 -20 3107 3347 10 357 0 +82 497 296 -10 2390 2630 10 19 0 +83 276 84 -12 0 7519 10 631 0 +84 128 113 -23 0 7504 10 938 0 +85 422 498 -23 2708 2948 10 592 0 +86 460 424 -13 5758 5998 10 359 0 +87 246 314 -18 5721 5961 10 896 0 +88 0 422 -30 3224 3464 10 633 0 +89 166 247 1 216 456 10 0 983 +90 311 422 -22 3892 4132 10 957 0 +91 392 95 16 3005 3245 10 0 775 +92 460 117 -5 2019 2259 10 673 0 +93 28 467 34 0 7377 10 0 687 +94 375 145 12 3657 3897 10 0 926 +95 240 255 -14 6384 6624 10 234 0 +96 440 436 -20 3508 3748 10 791 0 +97 454 201 -13 5160 5400 10 408 0 +98 407 35 -15 5093 5333 10 923 0 +99 420 383 -7 3868 4108 10 977 0 +100 264 180 -15 6663 6903 10 526 0 +101 440 294 16 3781 4021 10 0 772 +102 500 228 -25 3067 3307 10 704 0 +103 144 331 13 3665 3905 10 0 168 +104 98 2 14 2307 2547 10 0 651 +105 461 186 -16 0 7467 10 162 0 +106 68 450 -46 0 7417 10 599 0 +107 153 192 -17 0 7574 10 394 0 +108 34 239 -10 816 1056 10 279 0 +109 465 367 -10 4047 4287 10 24 0 +110 208 488 22 1850 2090 10 0 154 +111 93 413 -13 785 1025 10 72 0 +112 371 332 -18 0 7541 10 773 0 +113 231 167 15 221 461 10 0 661 +114 179 75 -19 2900 3140 10 609 0 +115 196 489 23 4061 4301 10 0 997 +116 280 245 21 30 270 10 0 261 +117 108 37 -33 2138 2378 10 339 0 +118 1 101 -17 4969 5209 10 591 0 +119 420 80 24 0 7447 10 0 430 +120 38 190 23 1079 1319 10 0 182 +121 470 405 -8 3643 3883 10 123 0 +122 448 397 33 0 7441 10 0 751 +123 471 427 8 3206 3446 10 0 121 +124 146 376 8 877 1117 10 0 306 +125 12 358 7 4837 5077 0 0 1003 +126 175 422 24 5726 5966 10 0 494 +127 297 131 25 4602 4842 10 0 606 +128 457 492 7 1972 2212 10 0 211 +129 69 423 -31 3150 3390 10 440 0 +130 97 288 -17 5076 5316 10 37 0 +131 172 314 -22 0 7587 10 978 0 +132 170 347 15 1683 1923 10 0 685 +133 103 123 8 1899 2139 10 0 795 +134 154 374 -22 3688 3928 10 4 0 +135 318 497 21 0 7431 0 0 1009 +136 330 147 -26 3334 3574 10 323 0 +137 241 180 13 6718 6958 10 0 503 +138 174 67 15 4979 5219 10 0 275 +139 235 288 18 43 283 10 0 377 +140 94 192 -26 0 7521 10 476 0 +141 232 101 24 1324 1564 10 0 981 +142 28 180 34 1482 1722 10 0 588 +143 64 135 -25 3413 3653 10 293 0 +144 174 376 8 0 7540 10 0 149 +145 293 174 31 229 469 10 0 776 +146 218 12 3 2116 2356 10 0 475 +147 110 122 -11 0 7498 10 62 0 +148 459 53 -14 4429 4669 10 659 0 +149 173 474 -8 5080 5320 10 144 0 +150 135 400 20 1134 1374 10 0 317 +151 497 266 25 2930 3170 10 0 552 +152 380 194 -12 2794 3034 10 741 0 +153 495 227 -21 1316 1556 10 219 0 +154 268 351 -22 6640 6880 10 110 0 +155 213 399 18 876 1116 10 0 332 +156 448 414 -21 0 7430 10 227 0 +157 327 139 -12 4969 5209 10 525 0 +158 151 81 28 0 7492 10 0 63 +159 425 448 -31 3118 3358 10 341 0 +160 92 259 4 1538 1778 10 0 174 +161 59 388 -26 2591 2831 10 417 0 +162 468 360 16 0 7443 10 0 105 +163 332 459 35 1415 1655 10 0 195 +164 469 489 -18 2162 2402 10 543 0 +165 248 176 -24 5546 5786 10 432 0 +166 174 41 -18 0 7465 10 446 0 +167 343 205 -23 3009 3249 10 29 0 +168 154 392 -13 0 7516 10 103 0 +169 92 18 -3 4437 4677 10 518 0 +170 250 328 24 0 7609 10 0 766 +171 88 484 5 0 7403 10 0 728 +172 360 488 19 1202 1442 10 0 34 +173 156 65 -32 4089 4329 10 497 0 +174 18 225 -4 2705 2945 10 160 0 +175 152 476 45 2030 2270 10 0 333 +176 176 470 14 2127 2367 10 0 516 +177 195 450 -10 5884 6124 10 315 0 +178 466 149 -15 4684 4924 10 245 0 +179 221 269 -21 5002 5242 10 805 0 +180 105 137 32 1749 1989 10 0 521 +181 284 319 -4 3207 3447 10 657 0 +182 41 120 -23 2724 2964 10 120 0 +183 263 418 25 1054 1294 10 0 954 +184 218 271 -11 6235 6475 10 949 0 +185 365 119 -28 0 7513 10 570 0 +186 89 322 -12 4023 4263 10 212 0 +187 180 283 23 2915 3155 10 0 284 +188 385 17 40 3175 3415 10 0 838 +189 401 314 25 3846 4086 10 0 380 +190 245 176 -10 4879 5119 10 298 0 +191 251 238 27 12 252 10 0 545 +192 139 438 24 796 1036 10 0 501 +193 236 126 23 379 619 10 0 309 +194 61 441 27 2115 2355 10 0 916 +195 405 454 -35 0 7431 10 163 0 +196 111 392 -31 4616 4856 10 875 0 +197 373 421 21 890 1130 10 0 38 +198 247 443 -19 0 7494 10 282 0 +199 322 406 17 0 7516 10 0 453 +200 412 478 7 3779 4019 10 0 935 +201 374 346 -33 0 7531 10 893 0 +202 122 422 3 5767 6007 10 0 484 +203 261 359 -25 318 558 10 880 0 +204 173 182 25 291 531 10 0 608 +205 398 341 -24 3697 3937 10 511 0 +206 413 127 28 3263 3503 10 0 727 +207 325 311 -13 5229 5469 10 69 0 +208 80 357 -25 2062 2302 10 610 0 +209 67 378 26 0 7464 10 0 955 +210 216 341 19 0 7590 10 0 852 +211 498 457 -7 0 7364 10 128 0 +212 44 344 12 0 7461 10 0 186 +213 352 481 15 5079 5319 10 0 550 +214 237 420 15 0 7517 10 0 662 +215 389 43 21 1522 1762 10 0 25 +216 292 136 -32 3062 3302 10 711 0 +217 426 38 -12 0 7412 10 67 0 +218 245 461 -15 0 7476 10 288 0 +219 415 253 21 1406 1646 10 0 153 +220 298 264 36 80 320 10 0 594 +221 307 412 8 1555 1795 10 0 660 +222 53 204 -17 4160 4400 10 471 0 +223 480 152 -30 4026 4266 10 847 0 +224 262 97 -28 3728 3968 10 712 0 +225 83 169 21 3046 3286 10 0 267 +226 377 432 -22 0 7466 10 982 0 +227 390 249 21 0 7547 10 0 156 +228 132 479 11 910 1150 10 0 762 +229 359 246 -23 5631 5871 10 836 0 +230 314 205 22 6047 6287 10 0 580 +231 124 448 -9 1414 1654 10 548 0 +232 0 188 26 0 7430 10 0 302 +233 343 166 -21 3444 3684 10 404 0 +234 482 141 14 3983 4223 10 0 95 +235 162 306 22 417 657 10 0 626 +236 24 71 -14 1324 1564 10 381 0 +237 188 119 -1 3839 4079 10 605 0 +238 100 85 -19 1344 1584 10 911 0 +239 103 177 28 2446 2686 10 0 804 +240 26 67 -3 5207 5447 10 918 0 +241 164 332 -38 5059 5299 10 386 0 +242 385 285 -19 3412 3652 10 517 0 +243 209 68 -13 6212 6452 10 300 0 +244 149 341 6 1556 1796 10 0 367 +245 415 95 15 4647 4887 10 0 178 +246 167 488 17 940 1180 10 0 618 +247 413 493 -25 4813 5053 10 968 0 +248 439 222 22 3858 4098 10 0 862 +249 150 484 -23 2441 2681 10 732 0 +250 299 353 -11 0 7573 10 5 0 +251 273 300 30 100 340 10 0 468 +252 402 277 -11 5694 5934 10 472 0 +253 239 15 2 0 7452 10 0 774 +254 363 225 35 3363 3603 10 0 68 +255 65 343 -5 769 1009 10 76 0 +256 351 60 -14 0 7472 10 753 0 +257 60 246 25 640 880 10 0 395 +258 144 35 26 0 7448 10 0 422 +259 463 253 -15 4128 4368 10 509 0 +260 332 382 2 3982 4222 10 0 714 +261 408 318 -21 2512 2752 10 116 0 +262 452 206 31 1909 2149 10 0 287 +263 471 368 -27 1652 1892 10 519 0 +264 93 490 -9 1457 1697 10 924 0 +265 241 402 -15 4039 4279 10 435 0 +266 60 231 -19 4044 4284 10 530 0 +267 172 66 -21 5151 5391 10 225 0 +268 404 207 -8 3582 3822 10 643 0 +269 286 356 30 328 568 10 0 959 +270 489 338 -6 5529 5769 10 999 0 +271 334 481 32 1262 1502 10 0 560 +272 26 442 -22 0 7392 10 549 0 +273 226 175 -13 6715 6955 10 305 0 +274 488 3 3 1542 1782 10 0 488 +275 178 150 -15 0 7564 10 138 0 +276 371 423 -12 724 964 10 564 0 +277 5 224 -8 0 7441 10 39 0 +278 94 344 -17 2669 2909 10 835 0 +279 153 235 10 273 513 10 0 108 +280 12 367 -22 1243 1483 10 327 0 +281 217 357 23 0 7576 10 0 596 +282 255 487 19 1532 1772 10 0 198 +283 149 214 7 0 7580 10 0 709 +284 169 305 -23 0 7590 10 187 0 +285 487 446 9 5301 5541 10 0 821 +286 267 374 23 2343 2583 10 0 9 +287 360 294 -31 0 7569 10 262 0 +288 185 431 15 1488 1728 10 0 218 +289 325 210 15 3674 3914 10 0 534 +290 175 352 -20 6600 6840 10 506 0 +291 76 462 -13 3764 4004 10 729 0 +292 19 273 -26 0 7455 10 705 0 +293 72 227 25 2195 2435 10 0 143 +294 213 283 -11 5824 6064 10 800 0 +295 130 140 17 716 956 10 0 41 +296 274 442 -14 4205 4445 10 585 0 +297 337 41 8 3949 4189 10 0 683 +298 372 39 10 2834 3074 10 0 190 +299 269 112 -13 4991 5231 10 70 0 +300 224 56 13 0 7492 10 0 243 +301 340 416 36 1224 1464 10 0 464 +302 13 214 -26 5354 5594 10 232 0 +303 230 320 8 4708 4948 10 0 671 +304 6 196 -15 4753 4993 10 734 0 +305 87 3 13 5672 5912 10 0 273 +306 133 202 -8 1782 2022 10 124 0 +307 235 316 2 2563 2803 10 0 858 +308 435 180 -7 0 7490 10 719 0 +309 173 65 -23 1734 1974 10 193 0 +310 245 42 -6 2129 2369 10 378 0 +311 384 149 18 0 7520 10 0 15 +312 51 286 14 5776 6016 10 0 397 +313 267 290 15 54 294 10 0 335 +314 453 318 -15 1435 1675 10 744 0 +315 189 402 10 2084 2324 10 0 177 +316 210 276 5 71 311 10 0 20 +317 120 261 -20 3113 3353 10 150 0 +318 35 263 -16 0 7472 10 45 0 +319 429 59 9 1775 2015 10 0 416 +320 330 308 -22 4622 4862 10 749 0 +321 58 391 16 3469 3709 10 0 699 +322 260 472 33 4084 4324 10 0 874 +323 217 333 26 0 7598 10 0 136 +324 335 46 18 5307 5547 10 0 27 +325 198 85 28 990 1230 10 0 2 +326 138 28 23 4326 4566 10 0 328 +327 29 336 22 1266 1506 10 0 280 +328 200 27 -23 0 7459 10 326 0 +329 157 269 31 6245 6485 0 0 1002 +330 177 404 17 0 7517 10 0 827 +331 202 28 -2 3677 3917 10 648 0 +332 366 334 -18 1581 1821 10 155 0 +333 149 458 -45 0 7456 10 175 0 +334 481 454 -25 1222 1462 10 513 0 +335 377 385 -15 3405 3645 10 313 0 +336 217 207 -27 5470 5710 10 929 0 +337 96 346 26 681 921 10 0 393 +338 224 320 -28 5075 5315 10 520 0 +339 206 97 33 1732 1972 10 0 117 +340 438 127 -26 3704 3944 10 571 0 +341 494 468 31 1350 1590 10 0 159 +342 494 165 -31 2357 2597 10 894 0 +343 5 281 16 0 7441 10 0 736 +344 441 60 21 0 7418 10 0 65 +345 14 232 -21 1160 1400 10 7 0 +346 288 439 16 1034 1274 10 0 780 +347 420 224 10 1656 1896 10 0 884 +348 267 162 6 0 7598 10 0 502 +349 195 273 22 118 358 10 0 767 +350 233 230 20 0 7661 10 0 666 +351 382 360 26 652 892 10 0 555 +352 406 460 -40 2817 3057 10 439 0 +353 499 316 18 2427 2667 10 0 35 +354 246 407 12 1186 1426 10 0 533 +355 283 454 -17 5000 5240 10 681 0 +356 426 231 -20 4054 4294 10 904 0 +357 432 2 20 1806 2046 10 0 81 +358 404 439 3 895 1135 10 0 808 +359 397 477 13 4803 5043 10 0 86 +360 44 140 11 3413 3653 10 0 781 +361 330 138 -15 4378 4618 10 942 0 +362 39 153 26 3131 3371 10 0 656 +363 397 153 29 3470 3710 10 0 998 +364 226 316 21 161 401 10 0 489 +365 354 156 -15 3270 3510 10 442 0 +366 201 66 14 0 7497 10 0 40 +367 389 156 -6 2802 3042 10 244 0 +368 134 211 35 422 662 10 0 43 +369 386 154 31 0 7521 10 0 508 +370 335 99 -23 4814 5054 10 903 0 +371 356 256 19 305 545 10 0 745 +372 240 362 23 0 7575 10 0 848 +373 412 100 1 1993 2233 10 0 396 +374 394 322 12 4039 4279 10 0 50 +375 48 150 -20 2560 2800 10 640 0 +376 225 121 -16 0 7556 10 899 0 +377 102 422 -18 0 7461 10 139 0 +378 339 41 6 0 7460 10 0 310 +379 440 201 -25 0 7491 10 428 0 +380 411 379 -25 4713 4953 10 189 0 +381 219 210 14 82 322 10 0 236 +382 250 441 5 0 7496 10 0 58 +383 210 29 13 4143 4383 10 0 860 +384 178 302 19 3486 3726 10 0 710 +385 148 208 22 0 7577 10 0 915 +386 225 369 38 366 606 10 0 241 +387 16 287 -30 0 7451 10 754 0 +388 450 416 25 2247 2487 10 0 688 +389 287 397 -7 2197 2437 10 976 0 +390 285 247 13 0 7652 0 0 1010 +391 351 481 10 1227 1467 0 0 1006 +392 243 408 -14 5675 5915 10 890 0 +393 137 377 -26 0 7518 10 337 0 +394 33 152 17 5220 5460 10 0 107 +395 68 303 -25 825 1065 10 257 0 +396 456 113 -1 4849 5089 10 373 0 +397 134 276 -14 0 7569 10 312 0 +398 26 221 28 3926 4166 10 0 8 +399 79 257 -40 3752 3992 10 931 0 +400 181 185 -8 6395 6635 10 721 0 +401 104 349 20 3977 4217 10 0 980 +402 267 174 -14 6413 6653 10 692 0 +403 475 267 -9 3058 3298 10 871 0 +404 385 239 21 3082 3322 10 0 233 +405 95 382 19 865 1105 10 0 654 +406 67 190 -5 4633 4873 10 556 0 +407 32 94 -2 3661 3901 10 777 0 +408 401 164 13 0 7514 10 0 97 +409 376 113 -13 0 7501 10 623 0 +410 409 255 23 0 7528 10 0 956 +411 228 260 -24 6362 6602 10 557 0 +412 363 34 19 0 7444 10 0 620 +413 274 441 -33 2718 2958 10 974 0 +414 146 188 6 0 7566 10 0 536 +415 212 186 -21 6826 7066 10 966 0 +416 432 66 -9 0 7429 10 319 0 +417 83 300 26 1939 2179 10 0 161 +418 51 89 19 4773 5013 10 0 505 +419 379 486 22 2627 2867 10 0 483 +420 440 284 25 0 7494 10 0 927 +421 175 239 23 183 423 10 0 587 +422 282 1 -26 4110 4350 10 258 0 +423 268 113 -15 2659 2899 10 842 0 +424 480 131 5 2690 2930 10 0 496 +425 429 67 -21 2869 3109 10 769 0 +426 162 301 -15 6392 6632 10 438 0 +427 281 96 -32 4443 4683 10 951 0 +428 495 199 25 0 7437 10 0 379 +429 372 115 -16 0 7506 10 694 0 +430 396 83 -24 6286 6526 10 119 0 +431 239 486 -26 0 7451 10 481 0 +432 288 70 24 0 7504 10 0 165 +433 66 163 6 1522 1762 10 0 743 +434 470 417 -3 0 7411 10 730 0 +435 226 423 15 728 968 10 0 265 +436 342 319 36 340 580 10 0 614 +437 174 122 14 2313 2553 10 0 922 +438 49 353 15 5724 5964 10 0 426 +439 448 495 40 0 7372 10 0 352 +440 13 465 31 3034 3274 10 0 129 +441 489 159 -25 5651 5891 10 74 0 +442 311 203 15 2830 3070 10 0 365 +443 480 119 7 2454 2694 10 0 885 +444 442 153 -10 4695 4935 10 636 0 +445 148 462 -11 2847 3087 10 914 0 +446 233 87 18 950 1190 10 0 166 +447 323 34 -11 0 7459 10 650 0 +448 84 377 10 3645 3885 10 0 750 +449 292 32 14 857 1097 10 0 26 +450 418 75 -40 1732 1972 10 11 0 +451 451 305 13 714 954 10 0 459 +452 225 269 -5 5023 5263 10 676 0 +453 272 420 -17 5483 5723 10 199 0 +454 318 280 21 177 417 10 0 713 +455 250 57 -7 0 7494 10 540 0 +456 77 372 19 0 7476 10 0 919 +457 385 58 24 1559 1799 10 0 537 +458 44 496 32 1547 1787 10 0 876 +459 460 328 -13 816 1056 10 451 0 +460 67 24 -25 4014 4254 10 80 0 +461 91 27 14 4667 4907 10 0 48 +462 360 284 -24 2606 2846 10 917 0 +463 82 183 -19 4347 4587 10 748 0 +464 153 362 -36 4585 4825 10 301 0 +465 52 412 22 5563 5803 10 0 665 +466 32 191 -23 2285 2525 10 991 0 +467 325 147 -31 0 7560 10 541 0 +468 328 458 -30 0 7465 10 251 0 +469 133 273 20 357 597 10 0 920 +470 147 30 26 4375 4615 10 0 796 +471 131 246 17 3268 3508 10 0 222 +472 433 319 11 5445 5685 10 0 252 +473 168 59 -18 0 7480 10 480 0 +474 218 403 15 5217 5457 10 0 944 +475 295 89 -3 0 7520 10 146 0 +476 118 314 26 1290 1530 10 0 140 +477 251 63 -1 3890 4130 10 32 0 +478 388 44 -36 4463 4703 10 546 0 +479 381 328 12 0 7535 10 0 837 +480 132 32 18 0 7440 10 0 473 +481 334 403 26 578 818 10 0 431 +482 83 290 14 2370 2610 10 0 667 +483 411 396 -22 3621 3861 10 419 0 +484 243 402 -3 0 7535 10 202 0 +485 52 18 -35 3368 3608 10 939 0 +486 265 0 -12 3524 3764 10 718 0 +487 268 288 -32 5008 5248 10 589 0 +488 476 61 -3 1735 1975 10 274 0 +489 283 438 -21 866 1106 10 364 0 +490 191 215 17 154 394 10 0 668 +491 253 50 -9 843 1083 10 850 0 +492 71 282 29 2507 2747 10 0 698 +493 297 304 4 166 406 10 0 578 +494 244 368 -24 0 7569 10 126 0 +495 80 279 -21 4571 4811 10 790 0 +496 488 96 -5 4205 4445 10 424 0 +497 142 30 32 0 7442 10 0 173 +498 68 240 -18 3118 3358 10 678 0 +499 193 138 30 0 7562 10 0 967 +500 451 62 -27 0 7412 10 794 0 +501 138 406 -24 4804 5044 10 192 0 +502 306 42 -6 1847 2087 10 348 0 +503 247 219 -13 0 7656 10 137 0 +504 98 29 14 4126 4366 10 0 789 +505 102 6 -19 5774 6014 10 418 0 +506 142 360 20 6068 6308 10 0 290 +507 172 24 -25 5749 5989 10 906 0 +508 352 241 -31 3109 3349 10 369 0 +509 486 324 15 3018 3258 10 0 259 +510 133 455 25 3172 3412 10 0 865 +511 440 292 24 3700 3940 10 0 205 +512 364 173 -16 661 901 10 582 0 +513 442 289 25 704 944 10 0 334 +514 48 412 7 0 7429 10 0 47 +515 344 70 24 4523 4763 10 0 965 +516 78 406 -14 3782 4022 10 176 0 +517 329 456 19 936 1176 10 0 242 +518 157 38 3 4131 4371 10 0 169 +519 374 260 27 0 7563 10 0 263 +520 297 283 28 0 7630 10 0 338 +521 210 113 -32 2701 2941 10 180 0 +522 215 434 -33 710 950 10 984 0 +523 262 92 25 2462 2702 10 0 724 +524 140 108 29 0 7508 10 0 535 +525 235 108 12 4258 4498 10 0 157 +526 210 133 15 2694 2934 10 0 100 +527 25 53 -13 4020 4260 10 909 0 +528 339 113 -26 2982 3222 10 663 0 +529 394 310 -7 4334 4574 10 586 0 +530 126 391 19 0 7500 10 0 266 +531 343 34 -12 2839 3079 10 851 0 +532 354 416 -9 2657 2897 10 677 0 +533 202 391 -12 2434 2674 10 354 0 +534 367 97 -15 0 7495 10 289 0 +535 188 151 -29 5127 5367 10 524 0 +536 111 178 -6 506 746 10 414 0 +537 456 157 -24 5760 6000 10 457 0 +538 441 7 20 1506 1746 10 0 64 +539 270 337 -10 7071 7311 10 759 0 +540 323 29 7 4490 4730 10 0 455 +541 200 78 31 3911 4151 10 0 467 +542 330 281 -29 5262 5502 10 28 0 +543 438 488 18 1249 1489 10 0 164 +544 161 416 -14 0 7499 10 583 0 +545 30 97 -27 4781 5021 10 191 0 +546 273 70 36 2417 2657 10 0 478 +547 214 245 8 0 7651 10 0 59 +548 221 291 9 124 364 10 0 231 +549 79 467 22 1346 1586 10 0 272 +550 423 315 -15 0 7503 10 213 0 +551 395 474 26 1488 1728 10 0 707 +552 481 207 -25 3364 3604 10 151 0 +553 199 203 20 0 7618 10 0 765 +554 497 483 -13 1354 1594 10 573 0 +555 449 428 -26 4927 5167 10 351 0 +556 100 266 5 0 7537 10 0 406 +557 214 274 24 5416 5656 10 0 411 +558 16 68 11 0 7391 10 0 628 +559 475 198 -11 3281 3521 10 928 0 +560 371 427 -32 3773 4013 10 271 0 +561 62 375 16 1335 1575 10 0 859 +562 163 472 9 2554 2794 10 0 655 +563 13 314 14 915 1155 10 0 811 +564 376 385 12 619 859 10 0 276 +565 231 29 14 4845 5085 10 0 888 +566 89 358 -16 4929 5169 10 979 0 +567 331 356 -23 0 7554 10 817 0 +568 365 190 -16 5850 6090 10 886 0 +569 256 441 34 644 884 10 0 902 +570 120 37 28 0 7438 10 0 185 +571 349 43 26 798 1038 10 0 340 +572 230 487 -28 0 7450 10 758 0 +573 489 457 13 0 7371 10 0 554 +574 341 72 -20 3159 3399 10 971 0 +575 181 441 -27 2107 2347 10 771 0 +576 306 229 10 0 7628 0 0 1007 +577 492 326 -17 4756 4996 10 846 0 +578 347 459 -4 1858 2098 10 493 0 +579 66 88 -15 3259 3499 10 868 0 +580 272 234 -22 6301 6541 10 230 0 +581 134 194 19 6547 6787 10 0 782 +582 320 211 16 0 7607 10 0 512 +583 214 311 14 163 403 10 0 544 +584 489 274 -14 2075 2315 10 639 0 +585 231 410 14 0 7526 10 0 296 +586 432 199 7 0 7498 10 0 529 +587 29 358 -23 2383 2623 10 421 0 +588 62 236 -34 2172 2412 10 142 0 +589 333 163 32 4901 5141 10 0 487 +590 364 71 5 5334 5574 10 0 695 +591 125 65 17 3094 3334 10 0 118 +592 429 476 23 2233 2473 10 0 85 +593 161 275 21 5327 5567 10 0 818 +594 365 274 -36 350 590 10 220 0 +595 117 110 -18 3855 4095 10 30 0 +596 166 345 -23 4459 4699 10 281 0 +597 345 146 -15 5696 5936 10 690 0 +598 324 99 10 1292 1532 10 0 844 +599 72 477 46 0 7399 10 0 106 +600 487 320 -20 3371 3611 10 921 0 +601 120 17 30 0 7421 10 0 962 +602 1 252 5 1041 1281 10 0 933 +603 303 186 -13 0 7604 10 675 0 +604 428 302 27 0 7502 10 0 937 +605 264 135 1 3458 3698 10 0 237 +606 223 178 -25 0 7611 10 127 0 +607 174 347 3 3999 4239 10 0 930 +608 238 123 -25 0 7560 10 204 0 +609 187 61 19 2120 2360 10 0 114 +610 52 303 25 1705 1945 10 0 208 +611 89 185 -20 2339 2579 10 54 0 +612 341 59 -15 3099 3339 10 905 0 +613 89 65 16 2821 3061 10 0 845 +614 495 355 -36 4913 5153 10 436 0 +615 368 452 16 2620 2860 10 0 700 +616 164 473 26 1125 1365 10 0 822 +617 171 34 21 4512 4752 10 0 697 +618 114 460 -17 4284 4524 10 246 0 +619 224 3 10 2702 2942 10 0 645 +620 472 57 -19 0 7393 10 412 0 +621 448 404 15 2336 2576 10 0 969 +622 390 120 -33 3957 4197 10 809 0 +623 386 225 13 3614 3854 10 0 409 +624 301 239 31 89 329 10 0 684 +625 115 296 24 6055 6295 10 0 36 +626 69 266 -22 2973 3213 10 235 0 +627 115 395 11 3201 3441 10 0 861 +628 68 53 -11 0 7419 10 558 0 +629 33 268 -17 2723 2963 10 806 0 +630 450 45 -17 1954 2194 10 717 0 +631 351 5 12 1924 2164 10 0 83 +632 351 148 -24 0 7544 10 900 0 +633 80 458 30 1422 1662 10 0 88 +634 60 5 -32 4115 4355 10 891 0 +635 10 407 -12 1678 1918 10 1000 0 +636 497 18 10 4460 4700 10 0 444 +637 437 98 -2 4395 4635 10 770 0 +638 130 494 -21 2975 3215 10 807 0 +639 391 202 14 476 716 10 0 584 +640 43 210 20 0 7477 10 0 375 +641 381 457 -25 1823 2063 10 18 0 +642 449 190 -12 4500 4740 10 812 0 +643 429 169 8 3551 3791 10 0 268 +644 105 140 -22 608 848 10 826 0 +645 282 10 -10 4986 5226 10 619 0 +646 20 480 25 2221 2461 10 0 879 +647 61 170 -10 3963 4203 10 778 0 +648 210 81 2 0 7514 10 0 331 +649 87 311 -22 0 7513 10 910 0 +650 309 29 11 0 7459 10 0 447 +651 397 57 -14 5844 6084 10 104 0 +652 337 232 -21 6222 6462 10 881 0 +653 262 369 15 457 697 10 0 872 +654 41 232 -19 0 7478 10 405 0 +655 69 414 -9 4993 5233 10 562 0 +656 149 98 -26 4600 4840 10 362 0 +657 207 487 4 0 7447 10 0 181 +658 366 260 23 0 7571 10 0 950 +659 497 54 14 3852 4092 10 0 148 +660 210 379 -8 0 7552 10 221 0 +661 437 19 -15 3996 4236 10 113 0 +662 181 260 -15 0 7618 10 214 0 +663 125 61 26 2387 2627 10 0 528 +664 368 311 14 0 7555 10 0 945 +665 80 400 -22 5725 5965 10 465 0 +666 75 118 -20 1576 1816 10 350 0 +667 171 303 -14 6297 6537 10 482 0 +668 80 251 -17 1154 1394 10 490 0 +669 455 168 -11 3407 3647 10 726 0 +670 215 129 17 4414 4654 10 0 3 +671 179 318 -8 0 7589 10 303 0 +672 187 73 18 1108 1348 10 0 55 +673 394 47 5 1192 1432 10 0 92 +674 31 175 24 0 7456 10 0 857 +675 339 144 13 0 7549 10 0 603 +676 492 34 5 3182 3422 10 0 452 +677 387 349 9 0 7518 10 0 532 +678 142 372 18 0 7525 10 0 498 +679 291 213 -21 4971 5211 10 797 0 +680 421 387 15 0 7468 10 0 693 +681 274 403 17 3490 3730 10 0 355 +682 434 359 -23 5509 5749 10 66 0 +683 257 57 -8 4844 5084 10 297 0 +684 428 202 -31 3555 3795 10 624 0 +685 355 174 -15 2801 3041 10 132 0 +686 46 389 22 0 7441 10 0 815 +687 44 440 -34 0 7407 10 93 0 +688 491 369 -25 2858 3098 10 388 0 +689 33 286 -10 0 7468 10 56 0 +690 351 128 15 4953 5193 10 0 597 +691 485 428 -29 5900 6140 10 755 0 +692 273 149 14 5951 6191 10 0 402 +693 447 184 -15 0 7480 10 680 0 +694 386 245 16 0 7551 10 0 429 +695 323 77 -5 5560 5800 10 590 0 +696 21 70 15 3025 3265 10 0 44 +697 9 101 -21 0 7404 10 617 0 +698 71 304 -29 2696 2936 10 492 0 +699 43 360 -16 3281 3521 10 321 0 +700 396 417 -16 0 7466 10 615 0 +701 158 24 -27 2385 2625 10 831 0 +702 164 320 12 0 7577 10 0 973 +703 195 386 13 467 707 10 0 785 +704 306 235 25 112 352 10 0 102 +705 66 314 26 659 899 10 0 292 +706 95 64 -8 3004 3244 10 51 0 +707 348 348 -26 0 7549 10 551 0 +708 495 83 32 1703 1943 10 0 877 +709 61 214 -7 1307 1547 10 283 0 +710 240 240 -19 6738 6978 10 384 0 +711 140 137 32 2219 2459 10 0 216 +712 242 106 28 0 7543 10 0 224 +713 392 491 -21 4471 4711 10 454 0 +714 342 481 -2 5700 5940 10 260 0 +715 478 300 -13 3498 3738 10 972 0 +716 299 285 -10 4955 5195 10 752 0 +717 481 84 17 1962 2202 10 0 630 +718 271 128 12 1322 1562 10 0 486 +719 484 224 7 0 7452 10 0 308 +720 441 177 -9 3945 4185 10 820 0 +721 46 163 8 3644 3884 10 0 400 +722 493 493 -17 3366 3606 10 33 0 +723 253 74 20 5340 5580 0 0 1008 +724 390 34 -25 4181 4421 10 523 0 +725 374 306 4 3916 4156 10 0 873 +726 436 295 11 2053 2293 10 0 669 +727 371 315 -28 4603 4843 10 206 0 +728 27 464 -5 0 7378 10 171 0 +729 3 471 13 2783 3023 10 0 291 +730 418 269 3 0 7518 10 0 434 +731 90 477 -25 0 7410 10 813 0 +732 141 426 23 2066 2306 10 0 249 +733 418 251 -19 4727 4967 10 961 0 +734 57 183 15 4341 4581 10 0 304 +735 29 462 -13 5178 5418 10 21 0 +736 55 318 -16 1188 1428 10 343 0 +737 18 24 32 2453 2693 10 0 10 +738 263 153 12 1590 1830 10 0 987 +739 289 220 19 77 317 10 0 856 +740 84 255 13 1068 1308 10 0 814 +741 159 299 12 0 7584 10 0 152 +742 485 104 21 3118 3358 0 0 1005 +743 178 135 -6 5995 6235 10 433 0 +744 389 255 15 0 7548 10 0 314 +745 457 280 -19 3939 4179 10 371 0 +746 171 24 -24 0 7448 10 763 0 +747 330 371 1 2174 2414 10 0 1 +748 10 237 19 0 7447 10 0 463 +749 458 213 22 0 7476 10 0 320 +750 257 391 -10 6472 6712 10 448 0 +751 482 184 -33 4367 4607 10 122 0 +752 222 331 10 2098 2338 10 0 716 +753 332 5 14 4071 4311 10 0 256 +754 47 208 30 846 1086 10 0 387 +755 489 437 29 0 7384 10 0 691 +756 165 59 -23 3711 3951 10 824 0 +757 211 446 -29 0 7488 10 833 0 +758 225 488 28 0 7448 10 0 572 +759 355 485 10 5856 6096 10 0 539 +760 441 374 10 833 1073 10 0 988 +761 399 175 13 2928 3168 10 0 31 +762 103 464 -11 0 7428 10 228 0 +763 244 13 24 3992 4232 10 0 746 +764 51 360 13 0 7460 10 0 889 +765 44 115 -20 865 1105 10 553 0 +766 312 453 -24 0 7475 10 170 0 +767 64 198 -22 4294 4534 10 349 0 +768 67 451 -30 0 7416 10 892 0 +769 371 71 21 0 7471 10 0 425 +770 439 156 2 2043 2283 10 0 637 +771 105 474 27 1823 2063 10 0 575 +772 366 288 -16 0 7565 10 101 0 +773 415 207 18 3540 3780 10 0 112 +774 58 39 -2 4592 4832 10 253 0 +775 197 202 -16 4755 4995 10 91 0 +776 442 5 -31 1221 1461 10 145 0 +777 71 12 2 1112 1352 10 0 407 +778 74 215 10 0 7508 10 0 647 +779 347 192 18 5893 6133 10 0 870 +780 178 420 -16 4225 4465 10 346 0 +781 186 135 -11 0 7556 10 360 0 +782 176 199 -19 0 7598 10 581 0 +783 438 5 18 2136 2376 10 0 834 +784 150 68 -5 1631 1871 10 786 0 +785 185 434 -13 2234 2474 10 703 0 +786 215 79 5 834 1074 10 0 784 +787 177 486 -13 6329 6569 10 907 0 +788 49 437 7 1650 1890 10 0 941 +789 100 66 -14 5539 5779 10 504 0 +790 35 344 21 3392 3632 10 0 495 +791 433 447 20 3117 3357 10 0 96 +792 372 97 -23 0 7492 10 878 0 +793 344 203 14 609 849 10 0 75 +794 423 170 27 1992 2232 10 0 500 +795 171 188 -8 2422 2662 10 133 0 +796 64 5 -26 4456 4696 10 470 0 +797 371 163 21 3251 3491 10 0 679 +798 398 210 31 0 7534 10 0 14 +799 48 437 4 0 7412 10 0 823 +800 392 1 11 2361 2601 10 0 294 +801 195 464 -12 0 7467 10 832 0 +802 211 248 26 39 279 10 0 810 +803 293 228 -9 73 313 10 898 0 +804 23 235 -28 4033 4273 10 239 0 +805 213 185 21 0 7613 10 0 179 +806 172 292 17 308 548 10 0 629 +807 228 287 21 52 292 10 0 638 +808 387 394 -3 0 7489 10 358 0 +809 374 232 33 0 7562 10 0 622 +810 48 366 -26 0 7455 10 802 0 +811 44 311 -14 1570 1810 10 563 0 +812 447 272 12 0 7489 10 0 642 +813 132 477 25 0 7432 10 0 731 +814 80 117 -13 3237 3477 10 740 0 +815 11 403 -22 1312 1552 10 686 0 +816 144 220 35 0 7577 10 0 963 +817 473 491 23 1593 1833 10 0 567 +818 210 219 -21 0 7637 10 593 0 +819 452 484 -19 5054 5294 10 46 0 +820 365 28 9 0 7437 10 0 720 +821 498 456 -9 5564 5804 10 285 0 +822 84 453 -26 4832 5072 10 616 0 +823 91 427 -4 3470 3710 10 799 0 +824 178 72 23 2967 3207 10 0 756 +825 409 155 19 621 861 10 0 79 +826 132 151 22 0 7533 10 0 644 +827 136 430 -17 2781 3021 10 330 0 +828 292 104 26 1156 1396 10 0 985 +829 443 167 17 2113 2353 10 0 78 +830 321 149 18 5638 5878 0 0 1012 +831 235 13 27 1375 1615 10 0 701 +832 166 440 12 711 951 10 0 801 +833 112 433 29 880 1120 10 0 757 +834 452 172 -18 0 7471 10 783 0 +835 37 281 17 1913 2153 10 0 278 +836 414 378 23 1919 2159 10 0 229 +837 475 352 -12 0 7440 10 479 0 +838 400 71 -40 5428 5668 10 188 0 +839 286 244 -15 5076 5316 10 952 0 +840 429 389 18 1636 1876 10 0 940 +841 92 76 -11 4496 4736 10 16 0 +842 124 111 15 0 7500 10 0 423 +843 268 458 24 0 7479 10 0 964 +844 352 63 -10 4653 4893 10 598 0 +845 49 118 -16 0 7447 10 613 0 +846 398 329 17 551 791 10 0 577 +847 382 9 30 1027 1267 10 0 223 +848 229 322 -23 6581 6821 10 372 0 +849 279 355 -7 0 7579 10 13 0 +850 266 221 9 33 273 10 0 491 +851 142 80 12 1908 2148 10 0 531 +852 359 287 -19 0 7572 10 210 0 +853 482 104 -13 0 7413 10 975 0 +854 284 457 -20 5934 6174 10 882 0 +855 64 294 12 4345 4585 10 0 71 +856 404 59 -19 0 7442 10 739 0 +857 68 160 -24 0 7484 10 674 0 +858 211 411 -2 4526 4766 10 307 0 +859 30 155 -16 5062 5302 10 561 0 +860 240 34 -13 6178 6418 10 383 0 +861 107 374 -11 3597 3837 10 627 0 +862 404 140 -22 4975 5215 10 248 0 +863 436 467 12 2884 3124 0 0 1001 +864 421 386 -15 0 7469 10 73 0 +865 182 480 -25 0 7448 10 510 0 +866 9 233 31 1165 1405 10 0 49 +867 110 251 23 1931 2171 10 0 869 +868 19 38 15 3329 3569 10 0 579 +869 46 248 -23 3195 3435 10 867 0 +870 308 199 -18 5973 6213 10 779 0 +871 423 221 9 973 1213 10 0 403 +872 313 391 -15 538 778 10 653 0 +873 413 345 -4 4812 5052 10 725 0 +874 278 450 -33 5440 5680 10 322 0 +875 94 497 31 3069 3309 10 0 196 +876 7 382 -32 3022 3262 10 458 0 +877 493 111 -32 2104 2344 10 708 0 +878 392 87 23 0 7471 10 0 792 +879 13 394 -25 0 7410 10 646 0 +880 259 301 25 335 575 10 0 203 +881 351 233 21 5631 5871 10 0 652 +882 313 493 20 0 7436 10 0 854 +883 65 62 15 3846 4086 10 0 17 +884 417 212 -10 0 7516 10 347 0 +885 450 194 -7 2439 2679 10 443 0 +886 470 138 16 5498 5738 10 0 568 +887 190 267 -15 6955 7195 10 52 0 +888 248 214 -14 5857 6097 10 565 0 +889 50 383 -13 980 1220 10 764 0 +890 244 422 14 2091 2331 10 0 392 +891 60 29 32 0 7396 10 0 634 +892 5 445 30 1184 1424 10 0 768 +893 490 276 33 0 7446 10 0 201 +894 441 100 31 0 7445 10 0 342 +895 162 388 11 4444 4684 10 0 60 +896 244 277 18 5145 5385 10 0 87 +897 406 408 -34 5765 6005 10 23 0 +898 265 240 9 18 258 10 0 803 +899 130 186 16 465 705 10 0 376 +900 382 110 24 4390 4630 10 0 632 +901 142 14 -29 3281 3521 10 947 0 +902 352 487 -34 0 7429 10 569 0 +903 307 52 23 3622 3862 10 0 370 +904 418 399 20 1691 1931 10 0 356 +905 196 56 15 2378 2618 10 0 612 +906 66 31 25 0 7401 10 0 507 +907 90 496 13 5521 5761 10 0 787 +908 480 136 22 0 7431 10 0 948 +909 65 82 13 2898 3138 10 0 527 +910 48 293 22 1044 1284 10 0 649 +911 105 181 19 0 7527 10 0 238 +912 215 282 -20 5702 5942 10 994 0 +913 257 133 -17 3389 3629 10 77 0 +914 77 465 11 984 1224 10 0 445 +915 43 135 -22 0 7451 10 385 0 +916 27 444 -27 4261 4501 10 194 0 +917 357 290 24 0 7573 10 0 462 +918 38 15 3 0 7371 10 0 240 +919 80 337 -19 4417 4657 10 456 0 +920 36 451 -20 3495 3735 10 469 0 +921 291 251 20 44 284 10 0 600 +922 195 111 -14 3932 4172 10 437 0 +923 383 17 15 3702 3942 10 0 98 +924 53 466 9 1280 1520 10 0 264 +925 114 102 -15 1969 2209 10 12 0 +926 350 199 -12 4746 4986 10 94 0 +927 405 349 -25 0 7504 10 420 0 +928 472 248 11 0 7465 10 0 559 +929 333 293 27 2408 2648 10 0 336 +930 174 397 -3 4919 5159 10 607 0 +931 2 264 40 2558 2798 10 0 399 +932 7 82 -27 1586 1826 10 970 0 +933 34 329 -5 4112 4352 10 602 0 +934 158 179 37 345 585 10 0 953 +935 421 499 -7 5321 5561 10 200 0 +936 345 431 12 0 7483 10 0 989 +937 370 262 -27 4338 4578 10 604 0 +938 77 172 23 0 7498 10 0 84 +939 87 51 35 0 7430 10 0 485 +940 468 352 -18 3013 3253 10 840 0 +941 63 420 -7 2018 2258 10 788 0 +942 347 184 15 4255 4495 10 0 361 +943 206 174 14 3139 3379 10 0 960 +944 209 212 -15 6051 6291 10 474 0 +945 466 362 -14 4549 4789 10 664 0 +946 201 278 13 106 346 10 0 990 +947 206 172 29 3092 3332 10 0 901 +948 471 94 -22 3935 4175 10 908 0 +949 331 134 11 4435 4675 10 0 184 +950 274 261 -23 6768 7008 10 658 0 +951 219 215 32 67 307 10 0 427 +952 349 76 15 4063 4303 10 0 839 +953 86 189 -37 847 1087 10 934 0 +954 336 493 -25 5912 6152 10 183 0 +955 7 194 -26 3745 3985 10 209 0 +956 492 335 -23 3253 3493 10 410 0 +957 248 386 22 1453 1693 10 0 90 +958 463 406 -18 0 7423 10 993 0 +959 199 438 -30 0 7493 10 269 0 +960 135 30 -14 0 7439 10 943 0 +961 447 267 19 3858 4098 10 0 733 +962 235 33 -30 0 7470 10 601 0 +963 63 155 -35 3799 4039 10 816 0 +964 294 421 -24 6242 6482 10 843 0 +965 318 99 -24 4791 5031 10 515 0 +966 21 146 21 1887 2127 10 0 415 +967 30 7 -30 4694 4934 10 499 0 +968 410 399 25 875 1115 10 0 247 +969 405 187 -15 4942 5182 10 621 0 +970 109 56 27 839 1079 10 0 932 +971 212 47 20 0 7481 10 0 574 +972 479 387 13 1530 1770 10 0 715 +973 167 291 -12 0 7595 10 702 0 +974 259 498 33 0 7439 10 0 413 +975 461 182 13 2456 2696 10 0 853 +976 277 428 7 1901 2141 10 0 389 +977 290 328 7 515 755 10 0 99 +978 146 313 22 4721 4961 10 0 131 +979 40 304 16 4519 4759 10 0 566 +980 56 268 -20 4196 4436 10 401 0 +981 104 28 -24 0 7422 10 141 0 +982 370 493 22 0 7416 10 0 226 +983 136 265 -1 340 580 10 89 0 +984 247 306 33 104 344 10 0 522 +985 241 38 -26 2067 2307 10 828 0 +986 180 162 9 634 874 10 0 22 +987 253 118 -12 2129 2369 10 738 0 +988 413 391 -10 808 1048 10 760 0 +989 380 350 -12 3406 3646 10 936 0 +990 391 112 -13 3941 4181 10 946 0 +991 86 199 23 1051 1291 10 0 466 +992 91 326 -21 0 7511 10 996 0 +993 287 256 18 37 277 10 0 958 +994 203 211 20 5166 5406 10 0 912 +995 79 80 19 5468 5708 10 0 57 +996 32 319 21 1542 1782 10 0 992 +997 167 445 -23 0 7476 10 115 0 +998 439 237 -29 3694 3934 10 363 0 +999 373 418 6 4978 5218 10 0 270 +1000 26 342 12 1224 1464 10 0 635 +1001 436 467 -12 2884 3124 10 863 0 +1002 157 269 -31 6245 6485 10 329 0 +1003 12 358 -7 4837 5077 10 125 0 +1004 179 497 -1 0 7430 10 53 0 +1005 485 104 -21 3118 3358 10 742 0 +1006 351 481 -10 1227 1467 10 391 0 +1007 306 229 -10 0 7628 10 576 0 +1008 253 74 -20 5340 5580 10 723 0 +1009 318 497 -21 0 7431 10 135 0 +1010 285 247 -13 0 7652 10 390 0 +1011 111 192 -11 0 7537 10 42 0 +1012 321 149 -18 5638 5878 10 830 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2107.txt b/jsprit-instances/instances/lilim/1000/LR2107.txt new file mode 100644 index 00000000..d214e27d --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2107.txt @@ -0,0 +1,1012 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 14 2285 2525 10 0 492 +2 325 56 -13 0 7480 10 595 0 +3 290 145 -1 5066 5306 10 32 0 +4 340 291 22 1822 2062 10 0 261 +5 370 382 -38 0 7509 10 255 0 +6 273 255 18 0 7664 10 0 993 +7 36 301 21 0 7468 0 0 1003 +8 117 178 -26 4409 4649 10 399 0 +9 295 283 26 3513 3753 10 0 896 +10 57 43 -15 0 7404 10 240 0 +11 436 123 40 781 1021 10 0 79 +12 48 162 -13 0 7467 10 909 0 +13 222 499 7 0 7437 10 0 758 +14 376 92 10 0 7485 10 0 229 +15 437 90 -15 0 7441 10 245 0 +16 3 23 11 1506 1746 10 0 48 +17 94 40 -32 4212 4452 10 737 0 +18 398 476 -15 0 7417 10 621 0 +19 307 249 -16 0 7630 10 162 0 +20 179 286 -5 1305 1545 10 316 0 +21 0 356 -2 0 7416 10 579 0 +22 143 158 -1 0 7546 10 140 0 +23 413 476 34 4656 4896 10 0 819 +24 371 488 -6 2271 2511 10 766 0 +25 415 118 -26 0 7476 10 223 0 +26 440 77 -9 0 7431 10 820 0 +27 261 201 -21 5996 6236 10 926 0 +28 490 286 -11 2029 2269 10 928 0 +29 309 161 23 2273 2513 10 0 908 +30 39 162 18 0 7459 10 0 465 +31 361 178 -34 3830 4070 10 552 0 +32 261 138 1 0 7575 10 0 3 +33 447 383 -29 831 1071 10 864 0 +34 346 354 8 3210 3450 10 0 873 +35 461 195 -17 0 7469 10 829 0 +36 187 263 -27 0 7623 10 973 0 +37 130 247 17 0 7567 10 0 734 +38 328 491 21 2653 2893 10 0 135 +39 161 276 -22 474 714 10 349 0 +40 365 74 24 3334 3574 10 0 361 +41 168 109 10 757 997 10 0 844 +42 111 192 11 0 7537 10 0 433 +43 87 213 -8 0 7520 10 547 0 +44 45 166 22 0 7466 10 0 421 +45 62 94 -7 0 7443 10 963 0 +46 348 476 -32 0 7441 10 271 0 +47 64 437 -30 0 7424 10 892 0 +48 56 75 -11 0 7426 10 16 0 +49 24 259 19 0 7461 10 0 77 +50 295 247 -20 5154 5394 10 190 0 +51 6 53 8 0 7374 10 0 628 +52 15 11 15 0 7352 10 0 796 +53 179 497 1 0 7430 10 0 997 +54 67 352 20 1433 1673 10 0 294 +55 317 45 8 0 7472 10 0 324 +56 40 278 -25 0 7476 10 293 0 +57 33 278 18 5889 6129 10 0 556 +58 322 290 23 0 7605 10 0 950 +59 159 226 16 256 496 10 0 160 +60 208 445 -7 0 7488 10 464 0 +61 453 360 13 804 1044 10 0 623 +62 34 169 -15 0 7457 10 696 0 +63 436 25 -14 5069 5309 10 659 0 +64 393 98 13 2950 3190 10 0 969 +65 466 96 -7 0 7422 10 531 0 +66 366 390 -6 5213 5453 10 335 0 +67 303 78 12 0 7508 10 0 619 +68 374 116 -30 0 7505 10 948 0 +69 424 288 -19 0 7509 10 961 0 +70 191 84 13 0 7511 10 0 477 +71 59 276 -13 0 7495 10 72 0 +72 215 293 13 102 342 10 0 71 +73 343 276 15 266 506 10 0 840 +74 488 173 25 4781 5021 10 0 152 +75 452 110 -14 0 7442 10 92 0 +76 153 244 5 0 7590 10 0 944 +77 176 200 -19 2210 2450 10 49 0 +78 498 171 12 0 7427 10 0 363 +79 492 188 -40 2801 3041 10 11 0 +80 177 156 25 0 7568 10 0 422 +81 398 49 21 3107 3347 10 0 769 +82 497 296 14 0 7436 10 0 451 +83 276 84 20 0 7519 10 0 234 +84 128 113 -33 0 7504 10 275 0 +85 422 498 5 0 7386 10 0 691 +86 460 424 -8 5758 5998 10 123 0 +87 246 314 -23 5721 5961 10 707 0 +88 0 422 -20 3224 3464 10 161 0 +89 166 247 1 216 456 10 0 108 +90 311 422 29 0 7505 10 0 372 +91 392 95 -17 3005 3245 10 534 0 +92 460 117 14 0 7439 10 0 75 +93 28 467 34 0 7377 10 0 106 +94 375 145 -20 3657 3897 10 153 0 +95 240 255 -20 6384 6624 10 401 0 +96 440 436 -16 3508 3748 10 615 0 +97 454 201 -13 5160 5400 10 856 0 +98 407 35 -22 0 7421 10 478 0 +99 420 383 27 0 7472 10 0 367 +100 264 180 33 0 7616 10 0 310 +101 440 294 -31 3781 4021 10 262 0 +102 500 228 -9 3067 3307 10 898 0 +103 144 331 -6 3665 3905 10 244 0 +104 98 2 -3 2307 2547 10 146 0 +105 461 186 -27 0 7467 10 794 0 +106 68 450 -34 0 7417 10 93 0 +107 153 192 13 0 7574 10 0 697 +108 34 239 -1 816 1056 10 89 0 +109 465 367 -31 4047 4287 10 584 0 +110 208 488 -18 1850 2090 10 155 0 +111 93 413 17 785 1025 10 0 835 +112 371 332 14 0 7541 10 0 846 +113 231 167 15 221 461 10 0 383 +114 179 75 -4 2900 3140 10 656 0 +115 196 489 23 4061 4301 10 0 431 +116 280 245 21 0 7657 0 0 1009 +117 108 37 -14 0 7432 10 449 0 +118 1 101 -26 4969 5209 10 232 0 +119 420 80 24 0 7447 10 0 243 +120 38 190 -15 0 7467 10 375 0 +121 470 405 -10 3643 3883 10 276 0 +122 448 397 33 0 7441 10 0 940 +123 471 427 8 0 7404 10 0 86 +124 146 376 8 877 1117 10 0 890 +125 12 358 7 4837 5077 10 0 184 +126 175 422 -29 5726 5966 10 874 0 +127 297 131 25 4602 4842 10 0 658 +128 457 492 -20 0 7369 10 722 0 +129 69 423 -18 0 7437 10 731 0 +130 97 288 22 5076 5316 10 0 426 +131 172 314 9 0 7587 10 0 296 +132 170 347 15 1683 1923 10 0 858 +133 103 123 8 1899 2139 10 0 763 +134 154 374 -12 0 7531 10 983 0 +135 318 497 -21 0 7431 10 38 0 +136 330 147 -21 3334 3574 10 227 0 +137 241 180 -6 6718 6958 10 378 0 +138 174 67 15 0 7489 10 0 695 +139 235 288 -15 0 7647 10 474 0 +140 94 192 1 0 7521 10 0 22 +141 232 101 24 1324 1564 10 0 962 +142 28 180 34 1482 1722 10 0 278 +143 64 135 11 3413 3653 10 0 721 +144 174 376 -18 0 7540 10 815 0 +145 293 174 31 229 469 10 0 800 +146 218 12 3 2116 2356 10 0 104 +147 110 122 14 0 7498 10 0 236 +148 459 53 20 0 7400 10 0 631 +149 173 474 -27 0 7451 10 194 0 +150 135 400 -20 0 7498 10 572 0 +151 497 266 25 2930 3170 10 0 614 +152 380 194 -25 0 7546 10 74 0 +153 495 227 20 0 7441 10 0 94 +154 268 351 7 6640 6880 10 0 880 +155 213 399 18 876 1116 10 0 110 +156 448 414 -25 0 7430 10 388 0 +157 327 139 13 4969 5209 10 0 408 +158 151 81 -18 0 7492 10 267 0 +159 425 448 -2 3118 3358 10 352 0 +160 92 259 -16 0 7529 10 59 0 +161 59 388 20 2591 2831 10 0 88 +162 468 360 16 0 7443 10 0 19 +163 332 459 -19 0 7463 10 172 0 +164 469 489 -12 2162 2402 10 554 0 +165 248 176 -14 5546 5786 10 381 0 +166 174 41 15 0 7465 10 0 541 +167 343 205 26 3009 3249 10 0 637 +168 154 392 9 0 7516 10 0 315 +169 92 18 -32 0 7407 10 891 0 +170 250 328 24 0 7609 10 0 790 +171 88 484 5 0 7403 10 0 788 +172 360 488 19 1202 1442 10 0 163 +173 156 65 22 4089 4329 10 0 470 +174 18 225 -19 2705 2945 10 495 0 +175 152 476 45 2030 2270 10 0 575 +176 176 470 -22 0 7455 10 235 0 +177 195 450 -9 5884 6124 10 522 0 +178 466 149 -19 4684 4924 10 853 0 +179 221 269 14 0 7653 10 0 671 +180 105 137 -20 0 7504 10 994 0 +181 284 319 -7 3207 3447 10 453 0 +182 41 120 -18 2724 2964 10 536 0 +183 263 418 25 0 7519 10 0 848 +184 218 271 -7 6235 6475 10 125 0 +185 365 119 -24 0 7513 10 457 0 +186 89 322 -10 4023 4263 10 448 0 +187 180 283 23 2915 3155 10 0 218 +188 385 17 40 3175 3415 10 0 708 +189 401 314 -4 3846 4086 10 725 0 +190 245 176 20 4879 5119 10 0 50 +191 251 238 27 0 7675 10 0 253 +192 139 438 24 796 1036 10 0 561 +193 236 126 23 379 619 10 0 252 +194 61 441 27 2115 2355 10 0 149 +195 405 454 -23 0 7431 10 592 0 +196 111 392 18 4616 4856 10 0 660 +197 373 421 21 890 1130 10 0 358 +198 247 443 17 0 7494 10 0 323 +199 322 406 -15 0 7516 10 397 0 +200 412 478 -10 3779 4019 10 391 0 +201 374 346 27 0 7531 10 0 487 +202 122 422 3 0 7473 10 0 327 +203 261 359 10 0 7578 10 0 585 +204 173 182 25 291 531 10 0 238 +205 398 341 -12 0 7514 10 374 0 +206 413 127 28 0 7483 10 0 770 +207 325 311 -23 5229 5469 10 410 0 +208 80 357 1 2062 2302 10 0 667 +209 67 378 -17 0 7464 10 490 0 +210 216 341 -17 0 7590 10 330 0 +211 498 457 -13 0 7364 10 972 0 +212 44 344 -12 0 7461 10 832 0 +213 352 481 15 5079 5319 10 0 954 +214 237 420 15 0 7517 10 0 757 +215 389 43 21 0 7438 10 0 538 +216 292 136 -30 0 7566 10 645 0 +217 426 38 -30 0 7412 10 416 0 +218 245 461 -23 0 7476 10 187 0 +219 415 253 -27 0 7522 10 519 0 +220 298 264 36 80 320 10 0 263 +221 307 412 8 0 7516 10 0 380 +222 53 204 8 4160 4400 10 0 670 +223 480 152 26 0 7437 10 0 25 +224 262 97 17 0 7534 10 0 598 +225 83 169 21 0 7502 10 0 955 +226 377 432 -27 0 7466 10 902 0 +227 390 249 21 0 7547 10 0 136 +228 132 479 11 910 1150 10 0 417 +229 359 246 -10 5631 5871 10 14 0 +230 314 205 22 6047 6287 10 0 580 +231 124 448 6 0 7453 10 0 686 +232 0 188 26 0 7430 10 0 118 +233 343 166 -9 3444 3684 10 677 0 +234 482 141 -20 3983 4223 10 83 0 +235 162 306 22 417 657 10 0 176 +236 24 71 -14 1324 1564 10 147 0 +237 188 119 -17 3839 4079 10 295 0 +238 100 85 -25 0 7465 10 204 0 +239 103 177 28 2446 2686 10 0 649 +240 26 67 15 0 7398 10 0 10 +241 164 332 -15 5059 5299 10 435 0 +242 385 285 -2 3412 3652 10 307 0 +243 209 68 -24 0 7501 10 119 0 +244 149 341 6 0 7552 10 0 103 +245 415 95 15 4647 4887 10 0 15 +246 167 488 17 940 1180 10 0 827 +247 413 493 -23 4813 5053 10 483 0 +248 439 222 22 3858 4098 10 0 444 +249 150 484 16 2441 2681 10 0 610 +250 299 353 34 0 7573 10 0 359 +251 273 300 30 100 340 10 0 849 +252 402 277 -23 5694 5934 10 193 0 +253 239 15 -27 0 7452 10 191 0 +254 363 225 35 3363 3603 10 0 268 +255 65 343 38 769 1009 10 0 5 +256 351 60 15 0 7472 10 0 923 +257 60 246 25 640 880 10 0 934 +258 144 35 -18 0 7448 10 901 0 +259 463 253 23 4128 4368 10 0 945 +260 332 382 -33 3982 4222 10 837 0 +261 408 318 -22 2512 2752 10 4 0 +262 452 206 31 1909 2149 10 0 101 +263 471 368 -36 1652 1892 10 220 0 +264 93 490 2 1457 1697 10 0 514 +265 241 402 -26 0 7535 10 337 0 +266 60 231 -30 0 7497 10 754 0 +267 172 66 18 0 7488 10 0 158 +268 404 207 -35 3582 3822 10 254 0 +269 286 356 -15 328 568 10 313 0 +270 489 338 -25 5529 5769 10 704 0 +271 334 481 32 1262 1502 10 0 46 +272 26 442 23 0 7392 10 0 583 +273 226 175 -16 6715 6955 10 613 0 +274 488 3 3 0 7344 10 0 603 +275 178 150 33 0 7564 10 0 84 +276 371 423 10 724 964 10 0 121 +277 5 224 -23 0 7441 10 545 0 +278 94 344 -34 2669 2909 10 142 0 +279 153 235 10 273 513 10 0 602 +280 12 367 -13 1243 1483 10 946 0 +281 217 357 -19 0 7576 10 282 0 +282 255 487 19 0 7450 10 0 281 +283 149 214 7 0 7580 10 0 385 +284 169 305 -14 0 7590 10 312 0 +285 487 446 -8 5301 5541 10 808 0 +286 267 374 -17 0 7562 10 854 0 +287 360 294 9 0 7569 10 0 761 +288 185 431 -33 0 7495 10 322 0 +289 325 210 15 0 7602 10 0 443 +290 175 352 -20 6600 6840 10 787 0 +291 76 462 -13 3764 4004 10 736 0 +292 19 273 25 0 7455 10 0 345 +293 72 227 25 2195 2435 10 0 56 +294 213 283 -20 0 7638 10 54 0 +295 130 140 17 0 7525 10 0 237 +296 274 442 -9 4205 4445 10 131 0 +297 337 41 -20 0 7461 10 350 0 +298 372 39 10 2834 3074 10 0 651 +299 269 112 19 0 7548 10 0 441 +300 224 56 13 0 7492 10 0 805 +301 340 416 36 1224 1464 10 0 989 +302 13 214 21 5354 5594 10 0 387 +303 230 320 8 4708 4948 10 0 912 +304 6 196 -19 4753 4993 10 418 0 +305 87 3 -2 0 7392 10 777 0 +306 133 202 -16 1782 2022 10 654 0 +307 235 316 2 2563 2803 10 0 242 +308 435 180 -12 0 7490 10 718 0 +309 173 65 12 1734 1974 10 0 842 +310 245 42 -33 2129 2369 10 100 0 +311 384 149 -27 0 7520 10 693 0 +312 51 286 14 0 7485 10 0 284 +313 267 290 15 54 294 10 0 269 +314 453 318 30 1435 1675 10 0 685 +315 189 402 -9 0 7524 10 168 0 +316 210 276 5 71 311 10 0 20 +317 120 261 -23 3113 3353 10 991 0 +318 35 263 27 0 7472 10 0 767 +319 429 59 9 1775 2015 10 0 724 +320 330 308 -24 0 7589 10 511 0 +321 58 391 16 3469 3709 10 0 593 +322 260 472 33 4084 4324 10 0 288 +323 217 333 -17 0 7598 10 198 0 +324 335 46 -8 5307 5547 10 55 0 +325 198 85 -21 990 1230 10 743 0 +326 138 28 23 4326 4566 10 0 723 +327 29 336 -3 0 7450 10 202 0 +328 200 27 -26 0 7459 10 663 0 +329 157 269 31 0 7593 10 0 976 +330 177 404 17 0 7517 10 0 210 +331 202 28 -25 3677 3917 10 370 0 +332 366 334 5 0 7544 10 0 436 +333 149 458 13 0 7456 10 0 823 +334 481 454 -13 1222 1462 10 700 0 +335 377 385 6 3405 3645 10 0 66 +336 217 207 26 0 7633 10 0 515 +337 96 346 26 681 921 10 0 265 +338 224 320 -2 5075 5315 10 699 0 +339 206 97 33 1732 1972 10 0 711 +340 438 127 -31 0 7463 10 369 0 +341 494 468 31 1350 1590 10 0 555 +342 494 165 -16 2357 2597 10 886 0 +343 5 281 16 0 7441 10 0 689 +344 441 60 -5 0 7418 10 673 0 +345 14 232 -25 0 7451 10 292 0 +346 288 439 16 1034 1274 10 0 517 +347 420 224 10 1656 1896 10 0 749 +348 267 162 6 0 7598 10 0 706 +349 195 273 22 118 358 10 0 39 +350 233 230 20 0 7661 10 0 297 +351 382 360 -14 652 892 10 542 0 +352 406 460 2 2817 3057 10 0 159 +353 499 316 -7 0 7430 10 403 0 +354 246 407 12 1186 1426 10 0 494 +355 283 454 14 0 7481 10 0 750 +356 426 231 -21 4054 4294 10 404 0 +357 432 2 20 1806 2046 10 0 571 +358 404 439 -21 0 7444 10 197 0 +359 397 477 -34 0 7417 10 250 0 +360 44 140 -16 3413 3653 10 899 0 +361 330 138 -24 0 7550 10 40 0 +362 39 153 -21 0 7455 10 857 0 +363 397 153 -12 3470 3710 10 78 0 +364 226 316 21 161 401 10 0 533 +365 354 156 -21 0 7547 10 454 0 +366 201 66 14 0 7497 10 0 535 +367 389 156 -27 2802 3042 10 99 0 +368 134 211 -35 422 662 10 816 0 +369 386 154 31 0 7521 10 0 340 +370 335 99 25 0 7514 10 0 331 +371 356 256 19 0 7581 10 0 600 +372 240 362 -29 0 7575 10 90 0 +373 412 100 1 0 7467 10 0 870 +374 394 322 12 4039 4279 10 0 205 +375 48 150 15 0 7462 10 0 120 +376 225 121 -21 0 7556 10 953 0 +377 102 422 23 0 7461 10 0 566 +378 339 41 6 0 7460 10 0 137 +379 440 201 29 0 7491 0 0 1010 +380 411 379 -8 4713 4953 10 221 0 +381 219 210 14 0 7637 10 0 165 +382 250 441 5 0 7496 10 0 780 +383 210 29 -15 4143 4383 10 113 0 +384 178 302 19 3486 3726 10 0 801 +385 148 208 -7 0 7577 10 283 0 +386 225 369 38 366 606 10 0 785 +387 16 287 -21 0 7451 10 302 0 +388 450 416 25 2247 2487 10 0 156 +389 287 397 12 0 7536 10 0 468 +390 285 247 -14 0 7652 10 668 0 +391 351 481 10 1227 1467 10 0 200 +392 243 408 -11 5675 5915 10 895 0 +393 137 377 -26 0 7518 10 476 0 +394 33 152 -3 5220 5460 10 845 0 +395 68 303 22 825 1065 10 0 703 +396 456 113 17 4849 5089 10 0 779 +397 134 276 15 0 7569 10 0 199 +398 26 221 28 0 7462 10 0 782 +399 79 257 26 3752 3992 10 0 8 +400 181 185 19 6395 6635 10 0 951 +401 104 349 20 3977 4217 10 0 95 +402 267 174 -19 6413 6653 10 911 0 +403 475 267 7 0 7462 10 0 353 +404 385 239 21 3082 3322 10 0 356 +405 95 382 -33 865 1105 10 984 0 +406 67 190 25 0 7495 10 0 499 +407 32 94 -15 3661 3901 10 868 0 +408 401 164 -13 0 7514 10 157 0 +409 376 113 8 0 7501 10 0 675 +410 409 255 23 0 7528 10 0 207 +411 228 260 -8 6362 6602 10 861 0 +412 363 34 19 0 7444 10 0 717 +413 274 441 12 0 7495 10 0 501 +414 146 188 -23 0 7566 10 867 0 +415 212 186 -8 6826 7066 10 981 0 +416 432 66 30 0 7429 10 0 217 +417 83 300 -11 1939 2179 10 228 0 +418 51 89 19 0 7432 10 0 304 +419 379 486 22 2627 2867 10 0 439 +420 440 284 -9 0 7494 10 574 0 +421 175 239 -22 0 7612 10 44 0 +422 282 1 -25 4110 4350 10 80 0 +423 268 113 -36 2659 2899 10 546 0 +424 480 131 -15 0 7429 10 442 0 +425 429 67 -24 2869 3109 10 608 0 +426 162 301 -22 6392 6632 10 130 0 +427 281 96 1 4443 4683 10 0 684 +428 495 199 -27 0 7437 10 885 0 +429 372 115 -10 0 7506 10 636 0 +430 396 83 -30 6286 6526 10 847 0 +431 239 486 -23 0 7451 10 115 0 +432 288 70 24 0 7504 10 0 683 +433 66 163 -11 1522 1762 10 42 0 +434 470 417 11 0 7411 10 0 863 +435 226 423 15 728 968 10 0 241 +436 342 319 -5 0 7572 10 332 0 +437 174 122 14 0 7539 10 0 672 +438 49 353 -21 5724 5964 10 966 0 +439 448 495 -22 0 7372 10 419 0 +440 13 465 -19 0 7368 10 941 0 +441 489 159 -19 5651 5891 10 299 0 +442 311 203 15 2830 3070 10 0 424 +443 480 119 -15 2454 2694 10 289 0 +444 442 153 -22 4695 4935 10 248 0 +445 148 462 -9 2847 3087 10 562 0 +446 233 87 18 950 1190 10 0 862 +447 323 34 -7 0 7459 10 540 0 +448 84 377 10 3645 3885 10 0 186 +449 292 32 14 857 1097 10 0 117 +450 418 75 11 1732 1972 10 0 500 +451 451 305 -14 0 7479 10 82 0 +452 225 269 -10 5023 5263 10 576 0 +453 272 420 7 0 7516 10 0 181 +454 318 280 21 177 417 10 0 365 +455 250 57 -29 0 7494 10 524 0 +456 77 372 -29 0 7476 10 833 0 +457 385 58 24 1559 1799 10 0 185 +458 44 496 32 0 7367 10 0 875 +459 460 328 13 816 1056 10 0 772 +460 67 24 -18 0 7397 10 634 0 +461 91 27 -22 4667 4907 10 826 0 +462 360 284 -24 2606 2846 10 917 0 +463 82 183 17 4347 4587 10 0 913 +464 153 362 7 4585 4825 10 0 60 +465 52 412 -18 5563 5803 10 30 0 +466 32 191 -20 2285 2525 10 647 0 +467 325 147 -21 0 7560 10 797 0 +468 328 458 -12 0 7465 10 389 0 +469 133 273 20 357 597 10 0 678 +470 147 30 -22 4375 4615 10 173 0 +471 131 246 -19 3268 3508 10 698 0 +472 433 319 -13 5445 5685 10 792 0 +473 168 59 -27 0 7480 10 756 0 +474 218 403 15 5217 5457 10 0 139 +475 295 89 23 0 7520 10 0 831 +476 118 314 26 1290 1530 10 0 393 +477 251 63 -13 3890 4130 10 70 0 +478 388 44 22 4463 4703 10 0 98 +479 381 328 12 0 7535 10 0 744 +480 132 32 18 0 7440 10 0 960 +481 334 403 26 578 818 10 0 573 +482 83 290 14 0 7516 10 0 869 +483 411 396 23 3621 3861 10 0 247 +484 243 402 13 0 7535 10 0 564 +485 52 18 -3 0 7382 10 918 0 +486 265 0 10 0 7437 10 0 952 +487 268 288 -27 5008 5248 10 201 0 +488 476 61 36 1735 1975 10 0 620 +489 283 438 3 866 1106 10 0 714 +490 191 215 17 154 394 10 0 209 +491 253 50 -14 0 7487 10 565 0 +492 71 282 -14 0 7506 10 1 0 +493 297 304 4 166 406 10 0 713 +494 244 368 -12 0 7569 10 354 0 +495 80 279 19 0 7515 10 0 174 +496 488 96 -11 4205 4445 10 998 0 +497 142 30 -27 0 7442 10 970 0 +498 68 240 11 3118 3358 0 0 1007 +499 193 138 -25 0 7562 10 406 0 +500 451 62 -11 0 7412 10 450 0 +501 138 406 -12 4804 5044 10 413 0 +502 306 42 11 1847 2087 10 0 789 +503 247 219 -19 0 7656 10 609 0 +504 98 29 14 4126 4366 10 0 905 +505 102 6 -30 0 7402 10 601 0 +506 142 360 20 0 7533 10 0 930 +507 172 24 17 5749 5989 10 0 553 +508 352 241 5 3109 3349 10 0 798 +509 486 324 -10 0 7440 10 956 0 +510 133 455 25 0 7451 10 0 919 +511 440 292 24 3700 3940 10 0 320 +512 364 173 -14 661 901 10 793 0 +513 442 289 25 0 7492 0 0 1001 +514 48 412 -2 0 7429 10 264 0 +515 344 70 -26 4523 4763 10 336 0 +516 78 406 -3 3782 4022 10 959 0 +517 329 456 -16 936 1176 10 346 0 +518 157 38 -18 0 7456 10 701 0 +519 374 260 27 0 7563 10 0 219 +520 297 283 -14 0 7630 10 528 0 +521 210 113 28 0 7545 10 0 606 +522 215 434 9 0 7500 10 0 177 +523 262 92 -1 2462 2702 10 605 0 +524 140 108 29 0 7508 10 0 455 +525 235 108 -5 4258 4498 10 786 0 +526 210 133 -13 0 7564 10 740 0 +527 25 53 23 4020 4260 10 0 883 +528 339 113 14 2982 3222 10 0 520 +529 394 310 -10 4334 4574 10 752 0 +530 126 391 -33 0 7500 10 974 0 +531 343 34 7 2839 3079 10 0 65 +532 354 416 10 2657 2897 10 0 641 +533 202 391 -21 2434 2674 10 364 0 +534 367 97 17 0 7495 10 0 91 +535 188 151 -14 0 7571 10 366 0 +536 111 178 18 506 746 10 0 182 +537 456 157 -12 5760 6000 10 884 0 +538 441 7 -21 0 7378 10 215 0 +539 270 337 20 0 7598 0 0 1006 +540 323 29 7 4490 4730 10 0 447 +541 200 78 -15 0 7508 10 166 0 +542 330 281 14 0 7602 10 0 351 +543 438 488 -15 1249 1489 10 680 0 +544 161 416 -12 0 7499 10 702 0 +545 30 97 23 4781 5021 10 0 277 +546 273 70 36 2417 2657 10 0 423 +547 214 245 8 0 7651 10 0 43 +548 221 291 9 124 364 10 0 865 +549 79 467 22 1346 1586 10 0 771 +550 423 315 -15 0 7503 10 690 0 +551 395 474 26 0 7421 10 0 578 +552 481 207 34 3364 3604 10 0 31 +553 199 203 -17 0 7618 10 507 0 +554 497 483 12 1354 1594 10 0 164 +555 449 428 -31 4927 5167 10 341 0 +556 100 266 -18 0 7537 10 57 0 +557 214 274 -22 5416 5656 10 978 0 +558 16 68 11 0 7391 10 0 906 +559 475 198 -13 3281 3521 10 975 0 +560 371 427 23 3773 4013 10 0 999 +561 62 375 -24 1335 1575 10 192 0 +562 163 472 9 2554 2794 10 0 445 +563 13 314 -24 0 7442 10 765 0 +564 376 385 -13 0 7503 10 484 0 +565 231 29 14 4845 5085 10 0 491 +566 89 358 -23 4929 5169 10 377 0 +567 331 356 -29 0 7554 10 755 0 +568 365 190 -24 5850 6090 10 900 0 +569 256 441 34 0 7496 10 0 607 +570 120 37 28 0 7438 10 0 746 +571 349 43 -20 0 7458 10 357 0 +572 230 487 20 0 7450 10 0 150 +573 489 457 -26 0 7371 10 481 0 +574 341 72 9 3159 3399 10 0 420 +575 181 441 -45 0 7484 10 175 0 +576 306 229 10 0 7628 10 0 452 +577 492 326 19 4756 4996 10 0 927 +578 347 459 -26 0 7457 10 551 0 +579 66 88 2 0 7442 10 0 21 +580 272 234 -22 6301 6541 10 230 0 +581 134 194 -4 0 7559 10 709 0 +582 320 211 16 0 7607 10 0 719 +583 214 311 -23 0 7617 10 272 0 +584 489 274 31 2075 2315 10 0 109 +585 231 410 -10 0 7526 10 203 0 +586 432 199 7 0 7498 10 0 726 +587 29 358 -20 2383 2623 10 889 0 +588 62 236 29 2172 2412 10 0 910 +589 333 163 -2 4901 5141 10 642 0 +590 364 71 5 0 7475 10 0 903 +591 125 65 -16 0 7464 10 985 0 +592 429 476 23 2233 2473 10 0 195 +593 161 275 -16 5327 5567 10 321 0 +594 365 274 14 350 590 0 0 1005 +595 117 110 13 0 7494 10 0 2 +596 166 345 -24 4459 4699 10 843 0 +597 345 146 27 5696 5936 10 0 830 +598 324 99 -17 1292 1532 10 224 0 +599 72 477 -17 0 7399 10 806 0 +600 487 320 -19 0 7440 10 371 0 +601 120 17 30 0 7421 10 0 505 +602 1 252 -10 1041 1281 10 279 0 +603 303 186 -3 0 7604 10 274 0 +604 428 302 -12 0 7502 10 812 0 +605 264 135 1 0 7572 10 0 523 +606 223 178 -28 0 7611 10 521 0 +607 174 347 -34 0 7564 10 569 0 +608 238 123 24 0 7560 10 0 425 +609 187 61 19 2120 2360 10 0 503 +610 52 303 -16 0 7483 10 249 0 +611 89 185 -10 2339 2579 10 778 0 +612 341 59 27 3099 3339 10 0 776 +613 89 65 16 2821 3061 10 0 273 +614 495 355 -25 4913 5153 10 151 0 +615 368 452 16 2620 2860 10 0 96 +616 164 473 26 1125 1365 10 0 741 +617 171 34 -23 4512 4752 10 784 0 +618 114 460 -12 0 7437 10 1000 0 +619 224 3 -12 0 7439 10 67 0 +620 472 57 -36 0 7393 10 488 0 +621 448 404 15 2336 2576 10 0 18 +622 390 120 -26 0 7496 10 877 0 +623 386 225 -13 0 7549 10 61 0 +624 301 239 31 89 329 10 0 871 +625 115 296 -2 6055 6295 10 933 0 +626 69 266 -24 0 7506 10 814 0 +627 115 395 -4 3201 3441 10 657 0 +628 68 53 -8 0 7419 10 51 0 +629 33 268 -23 0 7470 10 938 0 +630 450 45 24 1954 2194 10 0 661 +631 351 5 -20 0 7422 10 148 0 +632 351 148 -14 0 7544 10 664 0 +633 80 458 30 1422 1662 10 0 646 +634 60 5 18 4115 4355 10 0 460 +635 10 407 -15 1678 1918 10 879 0 +636 497 18 10 4460 4700 10 0 429 +637 437 98 -26 4395 4635 10 167 0 +638 130 494 -26 2975 3215 10 705 0 +639 391 202 -23 0 7539 10 836 0 +640 43 210 -26 0 7477 10 802 0 +641 381 457 -10 0 7443 10 532 0 +642 449 190 2 0 7480 10 0 589 +643 429 169 8 3551 3791 10 0 888 +644 105 140 -7 608 848 10 818 0 +645 282 10 30 4986 5226 10 0 216 +646 20 480 -30 2221 2461 10 633 0 +647 61 170 20 0 7482 10 0 466 +648 210 81 -28 0 7514 10 860 0 +649 87 311 -28 0 7513 10 239 0 +650 309 29 -15 0 7459 10 922 0 +651 397 57 -10 5844 6084 10 298 0 +652 337 232 -21 6222 6462 10 881 0 +653 262 369 15 457 697 10 0 813 +654 41 232 16 0 7478 10 0 306 +655 69 414 -22 4993 5233 10 916 0 +656 149 98 4 0 7505 10 0 114 +657 207 487 4 0 7447 10 0 627 +658 366 260 -25 0 7571 10 127 0 +659 497 54 14 0 7372 10 0 63 +660 210 379 -18 0 7552 10 196 0 +661 437 19 -24 0 7390 10 630 0 +662 181 260 -27 0 7618 10 876 0 +663 125 61 26 2387 2627 10 0 328 +664 368 311 14 0 7555 10 0 632 +665 80 400 -21 5725 5965 10 666 0 +666 75 118 21 0 7468 10 0 665 +667 171 303 -1 0 7592 10 208 0 +668 80 251 14 1154 1394 10 0 390 +669 455 168 21 3407 3647 10 0 990 +670 215 129 -8 4414 4654 10 222 0 +671 179 318 -14 0 7589 10 179 0 +672 187 73 -14 0 7500 10 437 0 +673 394 47 5 1192 1432 10 0 344 +674 31 175 -31 0 7456 10 915 0 +675 339 144 -8 0 7549 10 409 0 +676 492 34 5 0 7363 10 0 838 +677 387 349 9 0 7518 10 0 233 +678 142 372 -20 0 7525 10 469 0 +679 291 213 23 4971 5211 10 0 739 +680 421 387 15 0 7468 10 0 543 +681 274 403 -26 0 7533 10 964 0 +682 434 359 -33 5509 5749 10 893 0 +683 257 57 -24 0 7494 10 432 0 +684 428 202 -1 0 7503 10 427 0 +685 355 174 -30 2801 3041 10 314 0 +686 46 389 -6 0 7441 10 231 0 +687 44 440 -11 0 7407 10 914 0 +688 491 369 28 2858 3098 10 0 821 +689 33 286 -16 0 7468 10 343 0 +690 351 128 15 4953 5193 10 0 550 +691 485 428 -5 0 7393 10 85 0 +692 273 149 14 0 7584 10 0 828 +693 447 184 27 0 7480 10 0 311 +694 386 245 -24 0 7551 10 852 0 +695 323 77 -15 5560 5800 10 138 0 +696 21 70 15 3025 3265 10 0 62 +697 9 101 -13 0 7404 10 107 0 +698 71 304 19 2696 2936 10 0 471 +699 43 360 2 3281 3521 10 0 338 +700 396 417 13 0 7466 10 0 334 +701 158 24 18 2385 2625 10 0 518 +702 164 320 12 0 7577 10 0 544 +703 195 386 -22 0 7541 10 395 0 +704 306 235 25 112 352 10 0 270 +705 66 314 26 659 899 10 0 638 +706 95 64 -6 3004 3244 10 348 0 +707 348 348 23 0 7549 10 0 87 +708 495 83 -40 0 7391 10 188 0 +709 61 214 4 1307 1547 10 0 581 +710 240 240 35 6738 6978 0 0 1002 +711 140 137 -33 2219 2459 10 339 0 +712 242 106 -20 0 7543 10 971 0 +713 392 491 -4 4471 4711 10 493 0 +714 342 481 -3 5700 5940 10 489 0 +715 478 300 -33 3498 3738 10 809 0 +716 299 285 -27 4955 5195 10 929 0 +717 481 84 -19 0 7403 10 412 0 +718 271 128 12 0 7564 10 0 308 +719 484 224 -16 0 7452 10 582 0 +720 441 177 -19 3945 4185 10 987 0 +721 46 163 -11 0 7466 10 143 0 +722 493 493 20 3366 3606 10 0 128 +723 253 74 -23 5340 5580 10 326 0 +724 390 34 -9 4181 4421 10 319 0 +725 374 306 4 3916 4156 10 0 189 +726 436 295 -7 0 7496 10 586 0 +727 371 315 -3 4603 4843 10 730 0 +728 27 464 21 0 7378 10 0 907 +729 3 471 -17 0 7356 10 735 0 +730 418 269 3 0 7518 10 0 727 +731 90 477 18 0 7410 10 0 129 +732 141 426 23 0 7480 10 0 855 +733 418 251 -15 4727 4967 10 937 0 +734 57 183 -17 4341 4581 10 37 0 +735 29 462 17 0 7381 10 0 729 +736 55 318 13 1188 1428 10 0 291 +737 18 24 32 2453 2693 10 0 17 +738 263 153 -23 0 7590 10 824 0 +739 289 220 -23 0 7638 10 679 0 +740 84 255 13 0 7521 10 0 526 +741 159 299 -26 0 7584 10 616 0 +742 485 104 21 0 7411 10 0 894 +743 178 135 21 0 7552 10 0 325 +744 389 255 -12 0 7548 10 479 0 +745 457 280 -20 3939 4179 10 921 0 +746 171 24 -28 0 7448 10 570 0 +747 330 371 -15 0 7542 10 897 0 +748 10 237 19 0 7447 10 0 866 +749 458 213 -10 0 7476 10 347 0 +750 257 391 -14 6472 6712 10 355 0 +751 482 184 -18 4367 4607 10 773 0 +752 222 331 10 2098 2338 10 0 529 +753 332 5 14 4071 4311 10 0 783 +754 47 208 30 0 7480 10 0 266 +755 489 437 29 0 7384 10 0 567 +756 165 59 27 3711 3951 10 0 473 +757 211 446 -15 0 7488 10 214 0 +758 225 488 -7 0 7448 10 13 0 +759 355 485 10 5856 6096 10 0 882 +760 441 374 -8 833 1073 10 988 0 +761 399 175 -9 2928 3168 10 287 0 +762 103 464 -5 0 7428 10 768 0 +763 244 13 -8 3992 4232 10 133 0 +764 51 360 13 0 7460 0 0 1008 +765 44 115 24 865 1105 10 0 563 +766 312 453 6 0 7475 10 0 24 +767 64 198 -27 4294 4534 10 318 0 +768 67 451 5 0 7416 10 0 762 +769 371 71 -21 0 7471 10 81 0 +770 439 156 -28 2043 2283 10 206 0 +771 105 474 -22 0 7421 10 549 0 +772 366 288 -13 0 7565 10 459 0 +773 415 207 18 3540 3780 10 0 751 +774 58 39 12 4592 4832 10 0 781 +775 197 202 -43 4755 4995 10 804 0 +776 442 5 -27 0 7376 10 612 0 +777 71 12 2 1112 1352 10 0 305 +778 74 215 10 0 7508 10 0 611 +779 347 192 -17 5893 6133 10 396 0 +780 178 420 -5 0 7503 10 382 0 +781 186 135 -12 0 7556 10 774 0 +782 176 199 -28 0 7598 10 398 0 +783 438 5 -14 0 7379 10 753 0 +784 150 68 23 0 7480 10 0 617 +785 185 434 -38 2234 2474 10 386 0 +786 215 79 5 0 7513 10 0 525 +787 177 486 20 6329 6569 10 0 290 +788 49 437 -5 1650 1890 10 171 0 +789 100 66 -11 0 7450 10 502 0 +790 35 344 -24 3392 3632 10 170 0 +791 433 447 -12 3117 3357 10 936 0 +792 372 97 13 0 7492 10 0 472 +793 344 203 14 609 849 10 0 512 +794 423 170 27 1992 2232 10 0 105 +795 171 188 30 2422 2662 10 0 839 +796 64 5 -15 0 7380 10 52 0 +797 371 163 21 0 7538 10 0 467 +798 398 210 -5 0 7534 10 508 0 +799 48 437 -9 0 7412 10 924 0 +800 392 1 -31 2361 2601 10 145 0 +801 195 464 -19 0 7467 10 384 0 +802 211 248 26 0 7648 10 0 640 +803 293 228 19 73 313 10 0 825 +804 23 235 43 0 7460 10 0 775 +805 213 185 -13 0 7613 10 300 0 +806 172 292 17 308 548 10 0 599 +807 228 287 21 52 292 10 0 810 +808 387 394 8 0 7489 10 0 285 +809 374 232 33 0 7562 10 0 715 +810 48 366 -21 0 7455 10 807 0 +811 44 311 -22 1570 1810 10 957 0 +812 447 272 12 0 7489 10 0 604 +813 132 477 -15 0 7432 10 653 0 +814 80 117 24 0 7472 10 0 626 +815 11 403 18 1312 1552 10 0 144 +816 144 220 35 0 7577 10 0 368 +817 473 491 -22 0 7359 10 982 0 +818 210 219 7 0 7637 10 0 644 +819 452 484 -34 5054 5294 10 23 0 +820 365 28 9 0 7437 10 0 26 +821 498 456 -28 5564 5804 10 688 0 +822 84 453 -15 4832 5072 10 920 0 +823 91 427 -13 3470 3710 10 333 0 +824 178 72 23 2967 3207 10 0 738 +825 409 155 -19 0 7502 10 803 0 +826 132 151 22 0 7533 10 0 461 +827 136 430 -17 2781 3021 10 246 0 +828 292 104 -14 0 7536 10 692 0 +829 443 167 17 2113 2353 10 0 35 +830 321 149 -27 0 7564 10 597 0 +831 235 13 -23 0 7450 10 475 0 +832 166 440 12 711 951 10 0 212 +833 112 433 29 0 7458 10 0 456 +834 452 172 9 0 7471 10 0 942 +835 37 281 -17 1913 2153 10 111 0 +836 414 378 23 1919 2159 10 0 639 +837 475 352 33 0 7440 10 0 260 +838 400 71 -5 0 7454 10 676 0 +839 286 244 -30 5076 5316 10 795 0 +840 429 389 -15 1636 1876 10 73 0 +841 92 76 4 4496 4736 10 0 967 +842 124 111 -12 0 7500 10 309 0 +843 268 458 24 0 7479 10 0 596 +844 352 63 -10 4653 4893 10 41 0 +845 49 118 3 0 7447 10 0 394 +846 398 329 -14 551 791 10 112 0 +847 382 9 30 1027 1267 10 0 430 +848 229 322 -25 0 7612 10 183 0 +849 279 355 -30 0 7579 10 251 0 +850 266 221 9 0 7654 10 0 878 +851 142 80 -9 1908 2148 10 986 0 +852 359 287 24 0 7572 10 0 694 +853 482 104 19 0 7413 10 0 178 +854 284 457 17 5934 6174 10 0 286 +855 64 294 -23 4345 4585 10 732 0 +856 404 59 13 0 7442 10 0 97 +857 68 160 21 0 7484 10 0 362 +858 211 411 -15 4526 4766 10 132 0 +859 30 155 9 5062 5302 10 0 931 +860 240 34 28 6178 6418 10 0 648 +861 107 374 8 3597 3837 10 0 411 +862 404 140 -18 4975 5215 10 446 0 +863 436 467 -11 0 7402 10 434 0 +864 421 386 29 0 7469 10 0 33 +865 182 480 -9 0 7448 10 548 0 +866 9 233 -19 1165 1405 10 748 0 +867 110 251 23 1931 2171 10 0 414 +868 19 38 15 3329 3569 10 0 407 +869 46 248 -14 3195 3435 10 482 0 +870 308 199 -1 5973 6213 10 373 0 +871 423 221 -31 973 1213 10 624 0 +872 313 391 -7 538 778 10 977 0 +873 413 345 -8 4812 5052 10 34 0 +874 278 450 29 0 7486 10 0 126 +875 94 497 -32 3069 3309 10 458 0 +876 7 382 27 3022 3262 10 0 662 +877 493 111 26 2104 2344 10 0 622 +878 392 87 -9 0 7471 10 850 0 +879 13 394 15 0 7410 10 0 635 +880 259 301 -7 0 7636 10 154 0 +881 351 233 21 5631 5871 10 0 652 +882 313 493 -10 0 7436 10 759 0 +883 65 62 -23 3846 4086 10 527 0 +884 417 212 12 0 7516 10 0 537 +885 450 194 27 2439 2679 10 0 428 +886 470 138 16 0 7441 10 0 342 +887 190 267 -21 0 7625 10 996 0 +888 248 214 -8 5857 6097 10 643 0 +889 50 383 20 980 1220 10 0 587 +890 244 422 -8 2091 2331 10 124 0 +891 60 29 32 0 7396 10 0 169 +892 5 445 30 1184 1424 10 0 47 +893 490 276 33 0 7446 10 0 682 +894 441 100 -21 0 7445 10 742 0 +895 162 388 11 0 7524 10 0 392 +896 244 277 -26 5145 5385 10 9 0 +897 406 408 15 5765 6005 10 0 747 +898 265 240 9 18 258 10 0 102 +899 130 186 16 465 705 10 0 360 +900 382 110 24 4390 4630 10 0 568 +901 142 14 18 0 7428 10 0 258 +902 352 487 27 0 7429 10 0 226 +903 307 52 -5 3622 3862 10 590 0 +904 418 399 -23 0 7463 10 958 0 +905 196 56 -14 0 7486 10 504 0 +906 66 31 -11 0 7401 10 558 0 +907 90 496 -21 0 7394 10 728 0 +908 480 136 -23 0 7431 10 29 0 +909 65 82 13 2898 3138 10 0 12 +910 48 293 -29 0 7481 10 588 0 +911 105 181 19 0 7527 10 0 402 +912 215 282 -8 5702 5942 10 303 0 +913 257 133 -17 0 7570 10 463 0 +914 77 465 11 0 7412 10 0 687 +915 43 135 31 0 7451 10 0 674 +916 27 444 22 4261 4501 10 0 655 +917 357 290 24 0 7573 10 0 462 +918 38 15 3 0 7371 10 0 485 +919 80 337 -25 4417 4657 10 510 0 +920 36 451 15 3495 3735 10 0 822 +921 291 251 20 44 284 10 0 745 +922 195 111 15 3932 4172 10 0 650 +923 383 17 -15 3702 3942 10 256 0 +924 53 466 9 0 7395 10 0 799 +925 114 102 21 0 7487 10 0 995 +926 350 199 21 4746 4986 10 0 27 +927 405 349 -19 0 7504 10 577 0 +928 472 248 11 0 7465 10 0 28 +929 333 293 27 2408 2648 10 0 716 +930 174 397 -20 4919 5159 10 506 0 +931 2 264 -9 0 7439 10 859 0 +932 7 82 -35 1586 1826 10 939 0 +933 34 329 2 0 7458 10 0 625 +934 158 179 -25 0 7571 10 257 0 +935 421 499 -25 5321 5561 10 968 0 +936 345 431 12 0 7483 10 0 791 +937 370 262 15 4338 4578 10 0 733 +938 77 172 23 0 7498 10 0 629 +939 87 51 35 0 7430 10 0 932 +940 468 352 -33 3013 3253 10 122 0 +941 63 420 19 2018 2258 10 0 440 +942 347 184 -9 4255 4495 10 834 0 +943 206 174 -29 3139 3379 10 947 0 +944 209 212 -5 6051 6291 10 76 0 +945 466 362 -23 0 7444 10 259 0 +946 201 278 13 106 346 10 0 280 +947 206 172 29 3092 3332 10 0 943 +948 471 94 30 0 7417 10 0 68 +949 331 134 11 4435 4675 10 0 965 +950 274 261 -23 0 7661 10 58 0 +951 219 215 -19 0 7641 10 400 0 +952 349 76 -10 4063 4303 10 486 0 +953 86 189 21 847 1087 10 0 376 +954 336 493 -15 5912 6152 10 213 0 +955 7 194 -21 3745 3985 10 225 0 +956 492 335 10 3253 3493 10 0 509 +957 248 386 22 0 7551 10 0 811 +958 463 406 23 0 7423 10 0 904 +959 199 438 3 0 7493 10 0 516 +960 135 30 -18 0 7439 10 480 0 +961 447 267 19 0 7490 10 0 69 +962 235 33 -24 0 7470 10 141 0 +963 63 155 7 0 7478 10 0 45 +964 294 421 26 6242 6482 10 0 681 +965 318 99 -11 4791 5031 10 949 0 +966 21 146 21 0 7436 10 0 438 +967 30 7 -4 4694 4934 10 841 0 +968 410 399 25 875 1115 10 0 935 +969 405 187 -13 4942 5182 10 64 0 +970 109 56 27 0 7448 10 0 497 +971 212 47 20 0 7481 10 0 712 +972 479 387 13 0 7421 10 0 211 +973 167 291 27 0 7595 10 0 36 +974 259 498 33 0 7439 10 0 530 +975 461 182 13 2456 2696 10 0 559 +976 277 428 -31 1901 2141 10 329 0 +977 290 328 7 515 755 10 0 872 +978 146 313 22 4721 4961 10 0 557 +979 40 304 -4 4519 4759 10 992 0 +980 56 268 28 4196 4436 0 0 1004 +981 104 28 8 0 7422 10 0 415 +982 370 493 22 0 7416 10 0 817 +983 136 265 12 340 580 10 0 134 +984 247 306 33 104 344 10 0 405 +985 241 38 16 2067 2307 10 0 591 +986 180 162 9 634 874 10 0 851 +987 253 118 19 2129 2369 10 0 720 +988 413 391 8 808 1048 10 0 760 +989 380 350 -36 3406 3646 10 301 0 +990 391 112 -21 3941 4181 10 669 0 +991 86 199 23 1051 1291 10 0 317 +992 91 326 4 0 7511 10 0 979 +993 287 256 -18 37 277 10 6 0 +994 203 211 20 0 7626 10 0 180 +995 79 80 -21 0 7446 10 925 0 +996 32 319 21 1542 1782 10 0 887 +997 167 445 -1 0 7476 10 53 0 +998 439 237 11 3694 3934 10 0 496 +999 373 418 -23 4978 5218 10 560 0 +1000 26 342 12 1224 1464 10 0 618 +1001 442 289 -25 0 7492 10 513 0 +1002 240 240 -35 6738 6978 10 710 0 +1003 36 301 -21 0 7468 10 7 0 +1004 56 268 -28 4196 4436 10 980 0 +1005 365 274 -14 350 590 10 594 0 +1006 270 337 -20 0 7598 10 539 0 +1007 68 240 -11 3118 3358 10 498 0 +1008 51 360 -13 0 7460 10 764 0 +1009 280 245 -21 0 7657 10 116 0 +1010 440 201 -29 0 7491 10 379 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2108.txt b/jsprit-instances/instances/lilim/1000/LR2108.txt new file mode 100644 index 00000000..b83f9af7 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2108.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 -17 0 7537 10 199 0 +2 325 56 -13 0 7480 10 300 0 +3 290 145 5 0 7575 10 0 403 +4 340 291 22 1822 2062 10 0 9 +5 370 382 -22 0 7509 10 957 0 +6 273 255 18 0 7664 10 0 421 +7 36 301 -26 0 7468 10 399 0 +8 117 178 28 4409 4649 10 0 721 +9 295 283 -22 3513 3753 10 4 0 +10 57 43 -22 0 7404 10 84 0 +11 436 123 40 0 7462 10 0 926 +12 48 162 -20 0 7467 10 647 0 +13 222 499 -17 0 7437 10 246 0 +14 376 92 10 0 7485 10 0 800 +15 437 90 -1 0 7441 10 373 0 +16 3 23 11 1506 1746 10 0 17 +17 94 40 -11 0 7426 10 16 0 +18 398 476 -11 0 7417 10 195 0 +19 307 249 10 0 7630 10 0 390 +20 179 286 8 1305 1545 10 0 30 +21 0 356 13 0 7416 10 0 294 +22 143 158 12 0 7546 10 0 934 +23 413 476 -10 4656 4896 10 759 0 +24 371 488 10 2271 2511 10 0 453 +25 415 118 19 0 7476 10 0 770 +26 440 77 14 0 7431 10 0 620 +27 261 201 -10 5996 6236 10 636 0 +28 490 286 29 0 7445 10 0 652 +29 309 161 23 2273 2513 10 0 824 +30 39 162 -8 0 7459 10 20 0 +31 361 178 -10 0 7555 10 576 0 +32 261 138 -1 0 7575 10 605 0 +33 447 383 17 831 1071 10 0 355 +34 346 354 8 3210 3450 10 0 725 +35 461 195 26 0 7469 10 0 97 +36 187 263 -23 0 7623 10 187 0 +37 130 247 -33 0 7567 10 275 0 +38 328 491 -25 2653 2893 10 513 0 +39 161 276 -23 0 7595 10 115 0 +40 365 74 24 3334 3574 10 0 695 +41 168 109 10 0 7524 10 0 415 +42 111 192 11 0 7537 10 0 909 +43 87 213 -25 0 7520 10 293 0 +44 45 166 -23 0 7466 10 120 0 +45 62 94 16 0 7443 10 0 460 +46 348 476 19 0 7441 10 0 592 +47 64 437 11 0 7424 10 0 703 +48 56 75 24 0 7426 10 0 104 +49 24 259 19 0 7461 10 0 602 +50 295 247 -7 0 7642 10 586 0 +51 6 53 8 0 7374 10 0 845 +52 15 11 -26 0 7352 10 258 0 +53 179 497 -24 0 7430 10 843 0 +54 67 352 -16 0 7478 10 184 0 +55 317 45 8 0 7472 10 0 457 +56 40 278 -22 0 7476 10 130 0 +57 33 278 18 0 7469 10 0 678 +58 322 290 -12 0 7605 10 354 0 +59 159 226 16 256 496 10 0 383 +60 208 445 -16 0 7488 10 177 0 +61 453 360 13 804 1044 10 0 154 +62 34 169 -10 0 7457 10 767 0 +63 436 25 -30 0 7396 10 847 0 +64 393 98 13 2950 3190 10 0 650 +65 466 96 -14 0 7422 10 92 0 +66 366 390 -20 5213 5453 10 791 0 +67 303 78 -24 0 7508 10 515 0 +68 374 116 9 0 7505 10 0 894 +69 424 288 -21 0 7509 10 600 0 +70 191 84 13 0 7511 10 0 356 +71 59 276 11 0 7495 10 0 910 +72 215 293 13 102 342 10 0 520 +73 343 276 15 266 506 10 0 314 +74 488 173 25 4781 5021 10 0 537 +75 452 110 14 0 7442 10 0 853 +76 153 244 -8 0 7590 10 547 0 +77 176 200 17 2210 2450 10 0 476 +78 498 171 12 0 7427 10 0 428 +79 492 188 -5 2801 3041 10 424 0 +80 177 156 25 0 7568 10 0 283 +81 398 49 21 0 7438 10 0 297 +82 497 296 -31 0 7436 10 584 0 +83 276 84 -22 0 7519 10 331 0 +84 128 113 22 0 7504 10 0 10 +85 422 498 -7 0 7386 10 977 0 +86 460 424 -14 0 7415 10 109 0 +87 246 314 -15 5721 5961 10 392 0 +88 0 422 8 0 7384 10 0 920 +89 166 247 1 216 456 10 0 418 +90 311 422 -25 0 7505 10 578 0 +91 392 95 -14 0 7477 10 477 0 +92 460 117 14 0 7439 10 0 65 +93 28 467 -30 0 7377 10 892 0 +94 375 145 -18 0 7524 10 422 0 +95 240 255 -8 0 7676 10 218 0 +96 440 436 18 3508 3748 10 0 332 +97 454 201 -26 0 7478 10 35 0 +98 407 35 11 0 7421 10 0 216 +99 420 383 27 0 7472 10 0 615 +100 264 180 -9 0 7616 10 319 0 +101 440 294 16 0 7492 10 0 135 +102 500 228 -20 3067 3307 10 153 0 +103 144 331 13 0 7554 10 0 698 +104 98 2 -24 2307 2547 10 48 0 +105 461 186 16 0 7467 10 0 262 +106 68 450 -30 0 7417 10 633 0 +107 153 192 -6 0 7574 10 414 0 +108 34 239 16 816 1056 10 0 686 +109 465 367 14 0 7443 10 0 86 +110 208 488 -5 0 7446 10 382 0 +111 93 413 -10 0 7461 10 665 0 +112 371 332 -15 0 7541 10 211 0 +113 231 167 15 221 461 10 0 455 +114 179 75 13 2900 3140 10 0 922 +115 196 489 23 4061 4301 10 0 39 +116 280 245 -18 0 7657 10 229 0 +117 108 37 23 0 7432 10 0 901 +118 1 101 -17 0 7397 10 490 0 +119 420 80 -36 0 7447 10 546 0 +120 38 190 23 0 7467 10 0 44 +121 470 405 -23 3643 3883 10 707 0 +122 448 397 -13 0 7441 10 700 0 +123 471 427 8 0 7404 10 0 837 +124 146 376 8 0 7524 10 0 244 +125 12 358 7 0 7426 10 0 566 +126 175 422 -27 0 7500 10 973 0 +127 297 131 -3 4602 4842 10 274 0 +128 457 492 7 0 7369 10 0 821 +129 69 423 32 0 7437 10 0 762 +130 97 288 22 0 7530 10 0 56 +131 172 314 -12 0 7587 10 626 0 +132 170 347 15 0 7562 10 0 702 +133 103 123 8 0 7493 10 0 746 +134 154 374 36 0 7531 10 0 930 +135 318 497 -16 0 7431 10 101 0 +136 330 147 -23 3334 3574 10 273 0 +137 241 180 13 0 7617 10 0 608 +138 174 67 -15 0 7489 10 240 0 +139 235 288 -31 0 7647 10 865 0 +140 94 192 1 0 7521 10 0 222 +141 232 101 24 0 7537 10 0 324 +142 28 180 -35 0 7455 10 368 0 +143 64 135 -21 3413 3653 10 925 0 +144 174 376 8 0 7540 10 0 241 +145 293 174 31 0 7600 10 0 949 +146 218 12 -15 0 7447 10 789 0 +147 110 122 14 0 7498 10 0 737 +148 459 53 -16 0 7400 10 425 0 +149 173 474 14 0 7451 10 0 757 +150 135 400 -40 0 7498 10 931 0 +151 497 266 -22 0 7440 10 749 0 +152 380 194 -14 0 7546 10 639 0 +153 495 227 20 0 7441 10 0 102 +154 268 351 -13 0 7585 10 61 0 +155 213 399 18 0 7534 10 0 335 +156 448 414 23 0 7430 10 0 958 +157 327 139 13 4969 5209 10 0 589 +158 151 81 -27 0 7492 10 929 0 +159 425 448 9 3118 3358 10 0 276 +160 92 259 -20 0 7529 10 553 0 +161 59 388 -16 2591 2831 10 426 0 +162 468 360 16 0 7443 10 0 972 +163 332 459 -29 0 7463 10 864 0 +164 469 489 4 0 7363 10 0 341 +165 248 176 -14 0 7613 10 366 0 +166 174 41 15 0 7465 10 0 756 +167 343 205 -22 0 7584 10 568 0 +168 154 392 -13 0 7516 10 333 0 +169 92 18 8 0 7407 10 0 570 +170 250 328 24 0 7609 10 0 653 +171 88 484 -13 0 7403 10 729 0 +172 360 488 -12 1202 1442 10 936 0 +173 156 65 -29 4089 4329 10 524 0 +174 18 225 8 0 7454 10 0 640 +175 152 476 -9 2030 2270 10 522 0 +176 176 470 -14 0 7455 10 585 0 +177 195 450 16 0 7480 10 0 60 +178 466 149 -29 0 7449 10 363 0 +179 221 269 14 0 7653 10 0 417 +180 105 137 -13 0 7504 10 305 0 +181 284 319 -14 3207 3447 10 890 0 +182 41 120 -19 2724 2964 10 581 0 +183 263 418 -8 0 7519 10 221 0 +184 218 271 16 0 7649 10 0 54 +185 365 119 -9 0 7513 10 898 0 +186 89 322 21 0 7511 10 0 452 +187 180 283 23 0 7610 10 0 36 +188 385 17 -36 3175 3415 10 488 0 +189 401 314 -15 3846 4086 10 989 0 +190 245 176 20 4879 5119 10 0 888 +191 251 238 -27 0 7675 10 612 0 +192 139 438 -28 0 7469 10 758 0 +193 236 126 23 0 7563 10 0 886 +194 61 441 27 2115 2355 10 0 516 +195 405 454 11 0 7431 10 0 18 +196 111 392 18 0 7489 10 0 627 +197 373 421 -1 0 7477 10 747 0 +198 247 443 17 0 7494 10 0 501 +199 322 406 17 0 7516 10 0 1 +200 412 478 -30 3779 4019 10 251 0 +201 374 346 27 0 7531 10 0 727 +202 122 422 -27 0 7473 10 876 0 +203 261 359 10 0 7578 10 0 832 +204 173 182 25 291 531 10 0 579 +205 398 341 -20 0 7514 10 904 0 +206 413 127 28 0 7483 10 0 369 +207 325 311 -36 5229 5469 10 436 0 +208 80 357 -16 2062 2302 10 561 0 +209 67 378 26 0 7464 10 0 780 +210 216 341 -31 0 7590 10 875 0 +211 498 457 15 0 7364 10 0 112 +212 44 344 12 0 7461 10 0 811 +213 352 481 -20 5079 5319 10 921 0 +214 237 420 15 0 7517 10 0 950 +215 389 43 21 0 7438 10 0 500 +216 292 136 -11 0 7566 10 98 0 +217 426 38 -17 0 7412 10 838 0 +218 245 461 8 0 7476 10 0 95 +219 415 253 21 0 7522 10 0 733 +220 298 264 36 80 320 10 0 796 +221 307 412 8 0 7516 10 0 183 +222 53 204 -1 0 7485 10 140 0 +223 480 152 -34 0 7437 10 552 0 +224 262 97 17 0 7534 10 0 574 +225 83 169 -17 0 7502 10 591 0 +226 377 432 -23 0 7466 10 935 0 +227 390 249 21 0 7547 10 0 404 +228 132 479 11 910 1150 10 0 569 +229 359 246 18 0 7578 10 0 116 +230 314 205 -18 6047 6287 10 779 0 +231 124 448 -33 0 7453 10 974 0 +232 0 188 -23 0 7430 10 938 0 +233 343 166 28 3444 3684 10 0 812 +234 482 141 -11 3983 4223 10 450 0 +235 162 306 22 417 657 10 0 996 +236 24 71 -15 0 7399 10 868 0 +237 188 119 -6 0 7543 10 473 0 +238 100 85 14 0 7465 10 0 859 +239 103 177 -22 2446 2686 10 349 0 +240 26 67 15 0 7398 10 0 138 +241 164 332 -8 0 7569 10 144 0 +242 385 285 13 3412 3652 10 0 730 +243 209 68 -9 0 7501 10 850 0 +244 149 341 -8 0 7552 10 124 0 +245 415 95 -18 0 7461 10 446 0 +246 167 488 17 940 1180 10 0 13 +247 413 493 26 4813 5053 10 0 641 +248 439 222 22 0 7496 10 0 361 +249 150 484 16 0 7433 10 0 787 +250 299 353 34 0 7573 10 0 301 +251 273 300 30 0 7632 10 0 200 +252 402 277 -2 0 7533 10 648 0 +253 239 15 -3 0 7452 10 518 0 +254 363 225 -19 3363 3603 10 987 0 +255 65 343 -13 0 7480 10 946 0 +256 351 60 15 0 7472 10 0 402 +257 60 246 -11 0 7497 10 498 0 +258 144 35 26 0 7448 10 0 52 +259 463 253 -14 4128 4368 10 943 0 +260 332 382 -30 0 7532 10 269 0 +261 408 318 15 0 7515 10 0 664 +262 452 206 -16 0 7481 10 105 0 +263 471 368 -13 0 7437 10 573 0 +264 93 490 2 1457 1697 10 0 768 +265 241 402 11 0 7535 10 0 435 +266 60 231 32 0 7497 10 0 375 +267 172 66 -17 0 7488 10 507 0 +268 404 207 -17 0 7528 10 670 0 +269 286 356 30 328 568 10 0 260 +270 489 338 -19 5529 5769 10 577 0 +271 334 481 -13 0 7442 10 682 0 +272 26 442 -13 0 7392 10 764 0 +273 226 175 23 0 7609 10 0 136 +274 488 3 3 0 7344 10 0 127 +275 178 150 33 0 7564 10 0 37 +276 371 423 -9 0 7476 10 159 0 +277 5 224 -18 0 7441 10 536 0 +278 94 344 -28 2669 2909 10 919 0 +279 153 235 10 0 7589 10 0 497 +280 12 367 -25 1243 1483 10 292 0 +281 217 357 -30 0 7576 10 533 0 +282 255 487 19 0 7450 10 0 593 +283 149 214 -25 0 7580 10 80 0 +284 169 305 -2 0 7590 10 699 0 +285 487 446 -23 0 7380 10 817 0 +286 267 374 23 0 7562 10 0 539 +287 360 294 -11 0 7569 10 848 0 +288 185 431 -25 0 7495 10 813 0 +289 325 210 15 0 7602 10 0 679 +290 175 352 -7 6600 6840 10 464 0 +291 76 462 18 0 7413 10 0 315 +292 19 273 25 0 7455 10 0 280 +293 72 227 25 0 7508 10 0 43 +294 213 283 -13 0 7638 10 21 0 +295 130 140 -26 0 7525 10 487 0 +296 274 442 17 0 7494 10 0 346 +297 337 41 -21 0 7461 10 81 0 +298 372 39 10 0 7444 10 0 969 +299 269 112 19 0 7548 10 0 738 +300 224 56 13 0 7492 10 0 2 +301 340 416 -34 1224 1464 10 250 0 +302 13 214 -16 5354 5594 10 611 0 +303 230 320 -17 4708 4948 10 471 0 +304 6 196 20 0 7438 10 0 629 +305 87 3 13 0 7392 10 0 180 +306 133 202 33 0 7561 10 0 613 +307 235 316 -23 2563 2803 10 372 0 +308 435 180 37 0 7490 10 0 353 +309 173 65 12 1734 1974 10 0 447 +310 245 42 -18 2129 2369 10 376 0 +311 384 149 18 0 7520 10 0 408 +312 51 286 14 0 7485 10 0 438 +313 267 290 15 54 294 10 0 551 +314 453 318 -15 0 7473 10 73 0 +315 189 402 -18 0 7524 10 291 0 +316 210 276 -21 0 7640 10 790 0 +317 120 261 -19 3113 3353 10 400 0 +318 35 263 -9 0 7472 10 869 0 +319 429 59 9 1775 2015 10 0 100 +320 330 308 -12 0 7589 10 479 0 +321 58 391 16 3469 3709 10 0 377 +322 260 472 -26 4084 4324 10 616 0 +323 217 333 -21 0 7598 10 728 0 +324 335 46 -24 0 7466 10 141 0 +325 198 85 28 990 1230 10 0 769 +326 138 28 23 4326 4566 10 0 994 +327 29 336 22 0 7450 10 0 330 +328 200 27 -24 0 7459 10 765 0 +329 157 269 31 0 7593 10 0 469 +330 177 404 -22 0 7517 10 327 0 +331 202 28 22 0 7460 10 0 83 +332 366 334 -18 0 7544 10 96 0 +333 149 458 13 0 7456 10 0 168 +334 481 454 14 0 7379 10 0 434 +335 377 385 -18 3405 3645 10 155 0 +336 217 207 -25 0 7633 10 932 0 +337 96 346 26 0 7506 10 0 858 +338 224 320 36 5075 5315 10 0 896 +339 206 97 33 1732 1972 10 0 905 +340 438 127 -27 0 7463 10 367 0 +341 494 468 -4 1350 1590 10 164 0 +342 494 165 -22 2357 2597 10 908 0 +343 5 281 -43 0 7441 10 804 0 +344 441 60 -22 0 7418 10 478 0 +345 14 232 -17 0 7451 10 835 0 +346 288 439 -17 0 7495 10 296 0 +347 420 224 10 0 7516 10 0 871 +348 267 162 -6 0 7598 10 844 0 +349 195 273 22 118 358 10 0 239 +350 233 230 20 0 7661 10 0 610 +351 382 360 26 0 7516 10 0 846 +352 406 460 -22 2817 3057 10 982 0 +353 499 316 -37 0 7430 10 308 0 +354 246 407 12 0 7530 10 0 58 +355 283 454 -17 0 7481 10 33 0 +356 426 231 -13 4054 4294 10 70 0 +357 432 2 20 1806 2046 10 0 631 +358 404 439 3 0 7444 10 0 614 +359 397 477 13 0 7417 10 0 560 +360 44 140 -23 3413 3653 10 991 0 +361 330 138 -22 0 7550 10 248 0 +362 39 153 -25 0 7455 10 406 0 +363 397 153 29 3470 3710 10 0 178 +364 226 316 -30 0 7617 10 795 0 +365 354 156 20 0 7547 10 0 580 +366 201 66 14 0 7497 10 0 165 +367 389 156 27 2802 3042 10 0 340 +368 134 211 35 422 662 10 0 142 +369 386 154 -28 0 7521 10 206 0 +370 335 99 25 0 7514 10 0 590 +371 356 256 19 0 7581 10 0 624 +372 240 362 23 0 7575 10 0 307 +373 412 100 1 0 7467 10 0 15 +374 394 322 12 0 7527 10 0 716 +375 48 150 -32 0 7462 10 266 0 +376 225 121 18 0 7556 10 0 310 +377 102 422 -16 0 7461 10 321 0 +378 339 41 -14 0 7460 10 467 0 +379 440 201 -2 0 7491 10 642 0 +380 411 379 -11 0 7481 10 726 0 +381 219 210 -21 0 7637 10 617 0 +382 250 441 5 0 7496 10 0 110 +383 210 29 -16 0 7463 10 59 0 +384 178 302 -16 3486 3726 10 694 0 +385 148 208 -18 0 7577 10 993 0 +386 225 369 -7 0 7566 10 976 0 +387 16 287 -11 0 7451 10 689 0 +388 450 416 25 2247 2487 10 0 555 +389 287 397 -26 0 7536 10 964 0 +390 285 247 -10 0 7652 10 19 0 +391 351 481 -26 1227 1467 10 481 0 +392 243 408 15 5675 5915 10 0 87 +393 137 377 -12 0 7518 10 855 0 +394 33 152 17 5220 5460 10 0 709 +395 68 303 -14 825 1065 10 482 0 +396 456 113 17 0 7440 10 0 717 +397 134 276 -24 0 7569 10 625 0 +398 26 221 28 0 7462 10 0 754 +399 79 257 26 3752 3992 10 0 7 +400 181 185 19 0 7593 10 0 317 +401 104 349 -10 3977 4217 10 448 0 +402 267 174 -15 0 7610 10 256 0 +403 475 267 -5 0 7462 10 3 0 +404 385 239 -21 3082 3322 10 227 0 +405 95 382 -17 865 1105 10 806 0 +406 67 190 25 0 7495 10 0 362 +407 32 94 14 3661 3901 10 0 535 +408 401 164 -18 0 7514 10 311 0 +409 376 113 8 0 7501 10 0 637 +410 409 255 23 0 7528 0 0 1006 +411 228 260 -9 6362 6602 10 562 0 +412 363 34 19 0 7444 10 0 856 +413 274 441 -13 0 7495 10 451 0 +414 146 188 6 0 7566 10 0 107 +415 212 186 -10 0 7613 10 41 0 +416 432 66 -15 0 7429 10 661 0 +417 83 300 -14 1939 2179 10 179 0 +418 51 89 -1 0 7432 10 89 0 +419 379 486 22 0 7419 10 0 713 +420 440 284 25 0 7494 10 0 511 +421 175 239 -18 0 7612 10 6 0 +422 282 1 18 4110 4350 10 0 94 +423 268 113 -4 0 7549 10 706 0 +424 480 131 5 0 7429 10 0 79 +425 429 67 16 0 7432 10 0 148 +426 162 301 16 0 7586 10 0 161 +427 281 96 1 0 7530 10 0 540 +428 495 199 -12 0 7437 10 78 0 +429 372 115 -14 0 7506 10 870 0 +430 396 83 -19 6286 6526 10 609 0 +431 239 486 -33 0 7451 10 984 0 +432 288 70 24 0 7504 10 0 829 +433 66 163 6 0 7484 10 0 463 +434 470 417 -14 0 7411 10 334 0 +435 226 423 -11 0 7513 10 265 0 +436 342 319 36 0 7572 10 0 207 +437 174 122 -35 0 7539 10 939 0 +438 49 353 -14 5724 5964 10 312 0 +439 448 495 40 0 7372 10 0 927 +440 13 465 31 0 7368 10 0 924 +441 489 159 29 5651 5891 10 0 885 +442 311 203 15 0 7610 10 0 739 +443 480 119 7 0 7423 10 0 559 +444 442 153 29 4695 4935 10 0 825 +445 148 462 -3 2847 3087 10 959 0 +446 233 87 18 950 1190 10 0 245 +447 323 34 -12 0 7459 10 309 0 +448 84 377 10 3645 3885 10 0 401 +449 292 32 14 0 7465 10 0 685 +450 418 75 11 1732 1972 10 0 234 +451 451 305 13 0 7479 10 0 413 +452 225 269 -21 0 7656 10 186 0 +453 272 420 -10 0 7516 10 24 0 +454 318 280 21 177 417 10 0 744 +455 250 57 -15 0 7494 10 113 0 +456 77 372 -7 0 7476 10 649 0 +457 385 58 -8 1559 1799 10 55 0 +458 44 496 -4 0 7367 10 992 0 +459 460 328 13 0 7463 10 0 604 +460 67 24 -16 0 7397 10 45 0 +461 91 27 14 0 7414 10 0 883 +462 360 284 19 2606 2846 10 0 944 +463 82 183 -6 4347 4587 10 433 0 +464 153 362 7 0 7539 10 0 290 +465 52 412 -25 0 7432 10 646 0 +466 32 191 5 2285 2525 10 0 470 +467 325 147 14 0 7560 10 0 378 +468 328 458 17 0 7465 10 0 854 +469 133 273 -31 357 597 10 329 0 +470 147 30 -5 4375 4615 10 466 0 +471 131 246 17 0 7568 10 0 303 +472 433 319 -10 5445 5685 10 956 0 +473 168 59 6 0 7480 10 0 237 +474 218 403 15 0 7531 10 0 567 +475 295 89 -15 0 7520 10 690 0 +476 118 314 -17 0 7541 10 77 0 +477 251 63 14 3890 4130 10 0 91 +478 388 44 22 0 7440 10 0 344 +479 381 328 12 0 7535 10 0 320 +480 132 32 18 0 7440 10 0 960 +481 334 403 26 578 818 10 0 391 +482 83 290 14 0 7516 10 0 395 +483 411 396 23 0 7470 10 0 722 +484 243 402 13 0 7535 10 0 572 +485 52 18 -24 0 7382 10 852 0 +486 265 0 -27 0 7437 10 491 0 +487 268 288 26 0 7645 10 0 295 +488 476 61 36 0 7393 10 0 188 +489 283 438 -29 0 7497 10 874 0 +490 191 215 17 154 394 10 0 118 +491 253 50 27 0 7487 10 0 486 +492 71 282 -32 0 7506 10 711 0 +493 297 304 4 0 7616 10 0 554 +494 244 368 -10 0 7569 10 752 0 +495 80 279 19 0 7515 10 0 980 +496 488 96 -30 0 7404 10 632 0 +497 142 30 -10 0 7442 10 279 0 +498 68 240 11 3118 3358 10 0 257 +499 193 138 30 0 7562 10 0 743 +500 451 62 -21 0 7412 10 215 0 +501 138 406 -17 4804 5044 10 198 0 +502 306 42 11 0 7472 10 0 582 +503 247 219 17 0 7656 10 0 643 +504 98 29 14 4126 4366 10 0 710 +505 102 6 3 0 7402 10 0 814 +506 142 360 -14 0 7533 10 827 0 +507 172 24 17 5749 5989 10 0 267 +508 352 241 5 3109 3349 10 0 634 +509 486 324 -25 0 7440 10 704 0 +510 133 455 25 0 7451 10 0 887 +511 440 292 -25 0 7493 10 420 0 +512 364 173 30 661 901 10 0 794 +513 442 289 25 0 7492 10 0 38 +514 48 412 7 0 7429 10 0 801 +515 344 70 24 4523 4763 10 0 67 +516 78 406 -27 3782 4022 10 194 0 +517 329 456 -10 0 7467 10 760 0 +518 157 38 3 0 7456 10 0 253 +519 374 260 27 0 7563 10 0 884 +520 297 283 -13 0 7630 10 72 0 +521 210 113 28 0 7545 10 0 606 +522 215 434 9 0 7500 10 0 175 +523 262 92 25 2462 2702 10 0 792 +524 140 108 29 0 7508 10 0 173 +525 235 108 12 0 7545 10 0 773 +526 210 133 15 0 7564 10 0 675 +527 25 53 -12 4020 4260 10 774 0 +528 339 113 -31 0 7524 10 541 0 +529 394 310 10 4334 4574 10 0 772 +530 126 391 19 0 7500 10 0 544 +531 343 34 -20 0 7452 10 538 0 +532 354 416 10 2657 2897 10 0 766 +533 202 391 30 2434 2674 10 0 281 +534 367 97 17 0 7495 10 0 763 +535 188 151 -14 0 7571 10 407 0 +536 111 178 18 0 7531 10 0 277 +537 456 157 -25 5760 6000 10 74 0 +538 441 7 20 0 7378 10 0 531 +539 270 337 -23 0 7598 10 286 0 +540 323 29 -1 4490 4730 10 427 0 +541 200 78 31 0 7508 10 0 528 +542 330 281 14 0 7602 10 0 666 +543 438 488 18 1249 1489 10 0 819 +544 161 416 -19 0 7499 10 530 0 +545 30 97 -3 4781 5021 10 918 0 +546 273 70 36 0 7506 10 0 119 +547 214 245 8 0 7651 10 0 76 +548 221 291 9 0 7637 10 0 583 +549 79 467 22 1346 1586 10 0 655 +550 423 315 -7 0 7503 10 719 0 +551 395 474 -15 0 7421 10 313 0 +552 481 207 34 0 7453 10 0 223 +553 199 203 20 0 7618 10 0 160 +554 497 483 -4 1354 1594 10 493 0 +555 449 428 -25 4927 5167 10 388 0 +556 100 266 5 0 7537 10 0 671 +557 214 274 -14 5416 5656 10 596 0 +558 16 68 -23 0 7391 10 967 0 +559 475 198 -7 3281 3521 10 443 0 +560 371 427 -13 0 7473 10 359 0 +561 62 375 16 1335 1575 10 0 208 +562 163 472 9 0 7449 10 0 411 +563 13 314 14 0 7442 10 0 587 +564 376 385 -21 0 7503 10 807 0 +565 231 29 -26 4845 5085 10 802 0 +566 89 358 -7 4929 5169 10 125 0 +567 331 356 -15 0 7554 10 474 0 +568 365 190 22 0 7558 10 0 167 +569 256 441 -11 0 7496 10 228 0 +570 120 37 -8 0 7438 10 169 0 +571 349 43 26 0 7458 10 0 793 +572 230 487 -13 0 7450 10 484 0 +573 489 457 13 0 7371 10 0 263 +574 341 72 -17 3159 3399 10 224 0 +575 181 441 25 0 7484 10 0 997 +576 306 229 10 0 7628 10 0 31 +577 492 326 19 4756 4996 10 0 270 +578 347 459 25 0 7457 10 0 90 +579 66 88 -25 0 7442 10 204 0 +580 272 234 -20 0 7660 10 365 0 +581 134 194 19 0 7559 10 0 182 +582 320 211 -11 0 7607 10 502 0 +583 214 311 -9 0 7617 10 548 0 +584 489 274 31 0 7447 10 0 82 +585 231 410 14 0 7526 10 0 176 +586 432 199 7 0 7498 10 0 50 +587 29 358 -14 0 7442 10 563 0 +588 62 236 29 2172 2412 10 0 963 +589 333 163 -13 4901 5141 10 157 0 +590 364 71 -25 0 7475 10 370 0 +591 125 65 17 0 7464 10 0 225 +592 429 476 -19 2233 2473 10 46 0 +593 161 275 -19 5327 5567 10 282 0 +594 365 274 14 350 590 10 0 680 +595 117 110 13 0 7494 0 0 1002 +596 166 345 14 0 7561 10 0 557 +597 345 146 -11 5696 5936 10 998 0 +598 324 99 10 0 7519 10 0 645 +599 72 477 46 0 7399 10 0 618 +600 487 320 21 0 7440 10 0 69 +601 120 17 -23 0 7421 10 784 0 +602 1 252 -19 0 7438 10 49 0 +603 303 186 10 0 7604 10 0 673 +604 428 302 -13 0 7502 10 459 0 +605 264 135 1 0 7572 10 0 32 +606 223 178 -28 0 7611 10 521 0 +607 174 347 -20 0 7564 10 889 0 +608 238 123 -13 0 7560 10 137 0 +609 187 61 19 2120 2360 10 0 430 +610 52 303 -20 0 7483 10 350 0 +611 89 185 16 0 7514 10 0 302 +612 341 59 27 0 7476 10 0 191 +613 89 65 -33 2821 3061 10 306 0 +614 495 355 -3 0 7421 10 358 0 +615 368 452 -27 2620 2860 10 99 0 +616 164 473 26 1125 1365 10 0 322 +617 171 34 21 0 7458 10 0 381 +618 114 460 -46 0 7437 10 599 0 +619 224 3 -31 0 7439 10 915 0 +620 472 57 -14 0 7393 10 26 0 +621 448 404 15 2336 2576 10 0 688 +622 390 120 -16 0 7496 10 985 0 +623 386 225 -31 0 7549 10 798 0 +624 301 239 -19 0 7635 10 371 0 +625 115 296 24 6055 6295 10 0 397 +626 69 266 12 0 7506 10 0 131 +627 115 395 -18 3201 3441 10 196 0 +628 68 53 -32 0 7419 10 891 0 +629 33 268 -20 0 7470 10 304 0 +630 450 45 24 1954 2194 10 0 923 +631 351 5 -20 0 7422 10 357 0 +632 351 148 30 0 7544 10 0 496 +633 80 458 30 0 7419 10 0 106 +634 60 5 -5 0 7377 10 508 0 +635 10 407 -31 1678 1918 10 866 0 +636 497 18 10 0 7349 10 0 27 +637 437 98 -8 0 7447 10 409 0 +638 130 494 -22 0 7416 10 750 0 +639 391 202 14 0 7539 10 0 152 +640 43 210 -8 0 7477 10 174 0 +641 381 457 -26 0 7443 10 247 0 +642 449 190 2 0 7480 10 0 379 +643 429 169 -17 3551 3791 10 503 0 +644 105 140 -2 0 7505 10 777 0 +645 282 10 -10 0 7445 10 598 0 +646 20 480 25 0 7362 10 0 465 +647 61 170 20 0 7482 10 0 12 +648 210 81 2 0 7514 10 0 252 +649 87 311 7 0 7513 10 0 456 +650 309 29 -13 0 7459 10 64 0 +651 397 57 17 0 7445 10 0 676 +652 337 232 -29 6222 6462 10 28 0 +653 262 369 -24 0 7568 10 170 0 +654 41 232 -21 0 7478 10 966 0 +655 69 414 -22 4993 5233 10 549 0 +656 149 98 -22 0 7505 10 826 0 +657 207 487 4 0 7447 0 0 1007 +658 366 260 -15 0 7571 10 937 0 +659 497 54 -18 0 7372 10 783 0 +660 210 379 12 0 7552 10 0 677 +661 437 19 15 0 7390 10 0 416 +662 181 260 23 0 7618 10 0 815 +663 125 61 -10 2387 2627 10 778 0 +664 368 311 -15 0 7555 10 261 0 +665 80 400 10 5725 5965 10 0 111 +666 75 118 -14 0 7468 10 542 0 +667 171 303 -12 0 7592 10 1000 0 +668 80 251 -28 0 7517 10 782 0 +669 455 168 -14 0 7467 10 751 0 +670 215 129 17 0 7562 10 0 268 +671 179 318 -5 0 7589 10 556 0 +672 187 73 18 0 7500 0 0 1005 +673 394 47 -10 0 7439 10 603 0 +674 31 175 -15 0 7456 10 734 0 +675 339 144 -15 0 7549 10 526 0 +676 492 34 -17 0 7363 10 651 0 +677 387 349 -12 0 7518 10 660 0 +678 142 372 -18 0 7525 10 57 0 +679 291 213 -15 4971 5211 10 289 0 +680 421 387 -14 0 7468 10 594 0 +681 274 403 17 0 7533 10 0 880 +682 434 359 13 0 7474 10 0 271 +683 257 57 18 0 7494 10 0 718 +684 428 202 24 0 7503 10 0 809 +685 355 174 -14 0 7558 10 449 0 +686 46 389 -16 0 7441 10 108 0 +687 44 440 -17 0 7407 10 735 0 +688 491 369 -15 2858 3098 10 621 0 +689 33 286 11 0 7468 10 0 387 +690 351 128 15 0 7529 10 0 475 +691 485 428 -25 0 7393 10 968 0 +692 273 149 -14 0 7584 10 753 0 +693 447 184 -9 0 7480 10 834 0 +694 386 245 16 0 7551 10 0 384 +695 323 77 -24 5560 5800 10 40 0 +696 21 70 -16 0 7396 10 697 0 +697 9 101 16 0 7404 10 0 696 +698 71 304 -13 2696 2936 10 103 0 +699 43 360 2 0 7453 10 0 284 +700 396 417 13 0 7466 10 0 122 +701 158 24 -15 0 7443 10 842 0 +702 164 320 -15 0 7577 10 132 0 +703 195 386 -11 0 7541 10 47 0 +704 306 235 25 112 352 10 0 509 +705 66 314 -16 0 7493 10 979 0 +706 95 64 4 3004 3244 10 0 423 +707 348 348 23 0 7549 10 0 121 +708 495 83 32 0 7391 10 0 877 +709 61 214 -17 0 7495 10 394 0 +710 240 240 -14 6738 6978 10 504 0 +711 140 137 32 2219 2459 10 0 492 +712 242 106 28 0 7543 10 0 830 +713 392 491 -22 0 7408 10 419 0 +714 342 481 -20 5700 5940 10 882 0 +715 478 300 12 0 7454 0 0 1004 +716 299 285 -12 4955 5195 10 374 0 +717 481 84 -17 0 7403 10 396 0 +718 271 128 -18 0 7564 10 683 0 +719 484 224 7 0 7452 10 0 550 +720 441 177 -13 0 7483 10 761 0 +721 46 163 -28 0 7466 10 8 0 +722 493 493 -23 0 7344 10 483 0 +723 253 74 20 0 7511 10 0 903 +724 390 34 7 0 7430 10 0 776 +725 374 306 -8 0 7551 10 34 0 +726 436 295 11 0 7496 10 0 380 +727 371 315 -27 0 7550 10 201 0 +728 27 464 21 0 7378 10 0 323 +729 3 471 13 0 7356 10 0 171 +730 418 269 -13 0 7518 10 242 0 +731 90 477 -13 0 7410 10 907 0 +732 141 426 23 0 7480 10 0 741 +733 418 251 -21 0 7519 10 219 0 +734 57 183 15 0 7483 10 0 674 +735 29 462 17 0 7381 10 0 687 +736 55 318 -24 0 7481 10 781 0 +737 18 24 -14 2453 2693 10 147 0 +738 263 153 -19 0 7590 10 299 0 +739 289 220 -15 0 7638 10 442 0 +740 84 255 13 0 7521 10 0 978 +741 159 299 -23 0 7584 10 732 0 +742 485 104 -19 0 7411 10 803 0 +743 178 135 -30 0 7552 10 499 0 +744 389 255 -21 0 7548 10 454 0 +745 457 280 -19 3939 4179 10 913 0 +746 171 24 -8 0 7448 10 133 0 +747 330 371 1 0 7542 10 0 197 +748 10 237 19 0 7447 10 0 823 +749 458 213 22 0 7476 10 0 151 +750 257 391 22 0 7546 10 0 638 +751 482 184 14 4367 4607 10 0 669 +752 222 331 10 2098 2338 10 0 494 +753 332 5 14 4071 4311 10 0 692 +754 47 208 -28 0 7480 10 398 0 +755 489 437 29 0 7384 10 0 873 +756 165 59 -15 0 7478 10 166 0 +757 211 446 -14 0 7488 10 149 0 +758 225 488 28 0 7448 10 0 192 +759 355 485 10 0 7430 10 0 23 +760 441 374 10 833 1073 10 0 517 +761 399 175 13 0 7521 10 0 720 +762 103 464 -32 0 7428 10 129 0 +763 244 13 -17 3992 4232 10 534 0 +764 51 360 13 0 7460 10 0 272 +765 44 115 24 0 7441 10 0 328 +766 312 453 -10 0 7475 10 532 0 +767 64 198 10 0 7494 10 0 62 +768 67 451 -2 0 7416 10 264 0 +769 371 71 -28 0 7471 10 325 0 +770 439 156 -19 0 7476 10 25 0 +771 105 474 -19 0 7421 10 941 0 +772 366 288 -10 0 7565 10 529 0 +773 415 207 -12 3540 3780 10 525 0 +774 58 39 12 0 7402 10 0 527 +775 197 202 29 0 7616 10 0 986 +776 442 5 -7 0 7376 10 724 0 +777 71 12 2 0 7390 10 0 644 +778 74 215 10 0 7508 10 0 663 +779 347 192 18 5893 6133 10 0 230 +780 178 420 -26 0 7503 10 209 0 +781 186 135 24 0 7556 10 0 736 +782 176 199 28 0 7598 10 0 668 +783 438 5 18 0 7379 10 0 659 +784 150 68 23 0 7480 10 0 601 +785 185 434 -4 0 7492 10 799 0 +786 215 79 5 0 7513 10 0 928 +787 177 486 -16 6329 6569 10 249 0 +788 49 437 7 1650 1890 10 0 822 +789 100 66 15 0 7450 10 0 146 +790 35 344 21 0 7453 10 0 316 +791 433 447 20 3117 3357 10 0 66 +792 372 97 -25 0 7492 10 523 0 +793 344 203 -26 0 7582 10 571 0 +794 423 170 -30 1992 2232 10 512 0 +795 171 188 30 2422 2662 10 0 364 +796 64 5 -36 0 7380 10 220 0 +797 371 163 -15 0 7538 10 952 0 +798 398 210 31 0 7534 10 0 623 +799 48 437 4 0 7412 10 0 785 +800 392 1 -10 0 7401 10 14 0 +801 195 464 -7 0 7467 10 514 0 +802 211 248 26 0 7648 10 0 565 +803 293 228 19 73 313 10 0 742 +804 23 235 43 0 7460 10 0 343 +805 213 185 -8 0 7613 10 981 0 +806 172 292 17 308 548 10 0 405 +807 228 287 21 0 7644 10 0 564 +808 387 394 -23 0 7489 10 836 0 +809 374 232 -24 0 7562 10 684 0 +810 48 366 29 0 7455 10 0 933 +811 44 311 -12 1570 1810 10 212 0 +812 447 272 -28 0 7489 10 233 0 +813 132 477 25 0 7432 10 0 288 +814 80 117 -3 0 7472 10 505 0 +815 11 403 -23 1312 1552 10 662 0 +816 144 220 -32 0 7577 10 951 0 +817 473 491 23 0 7359 10 0 285 +818 210 219 7 0 7637 10 0 906 +819 452 484 -18 0 7378 10 543 0 +820 365 28 9 0 7437 10 0 862 +821 498 456 -7 0 7365 10 128 0 +822 84 453 -7 4832 5072 10 788 0 +823 91 427 -19 0 7450 10 748 0 +824 178 72 -23 2967 3207 10 29 0 +825 409 155 -29 0 7502 10 444 0 +826 132 151 22 0 7533 10 0 656 +827 136 430 14 0 7474 10 0 506 +828 292 104 26 0 7536 0 0 1008 +829 443 167 -24 0 7477 10 432 0 +830 321 149 -28 0 7564 10 712 0 +831 235 13 27 0 7450 10 0 860 +832 166 440 -10 711 951 10 203 0 +833 112 433 29 0 7458 10 0 912 +834 452 172 9 0 7471 10 0 693 +835 37 281 17 0 7472 10 0 345 +836 414 378 23 1919 2159 10 0 808 +837 475 352 -8 0 7440 10 123 0 +838 400 71 17 0 7454 10 0 217 +839 286 244 -13 0 7651 10 975 0 +840 429 389 18 1636 1876 10 0 849 +841 92 76 4 0 7452 10 0 970 +842 124 111 15 0 7500 10 0 701 +843 268 458 24 0 7479 10 0 53 +844 352 63 6 4653 4893 10 0 348 +845 49 118 -8 0 7447 10 51 0 +846 398 329 -26 0 7520 10 351 0 +847 382 9 30 1027 1267 10 0 63 +848 229 322 11 0 7612 10 0 287 +849 279 355 -18 0 7579 10 840 0 +850 266 221 9 0 7654 10 0 243 +851 142 80 -24 0 7486 10 917 0 +852 359 287 24 0 7572 10 0 485 +853 482 104 -14 0 7413 10 75 0 +854 284 457 -17 5934 6174 10 468 0 +855 64 294 12 0 7496 10 0 393 +856 404 59 -19 0 7442 10 412 0 +857 68 160 21 0 7484 10 0 911 +858 211 411 -26 4526 4766 10 337 0 +859 30 155 -14 5062 5302 10 238 0 +860 240 34 -27 0 7471 10 831 0 +861 107 374 8 0 7498 10 0 895 +862 404 140 -9 0 7498 10 820 0 +863 436 467 -15 0 7402 10 897 0 +864 421 386 29 0 7469 10 0 163 +865 182 480 31 0 7448 10 0 139 +866 9 233 31 1165 1405 10 0 635 +867 110 251 23 1931 2171 10 0 955 +868 19 38 15 0 7374 10 0 236 +869 46 248 9 0 7483 10 0 318 +870 308 199 14 0 7610 10 0 429 +871 423 221 -10 0 7512 10 347 0 +872 313 391 -6 0 7533 10 999 0 +873 413 345 -29 4812 5052 10 755 0 +874 278 450 29 0 7486 10 0 489 +875 94 497 31 0 7395 10 0 210 +876 7 382 27 3022 3262 10 0 202 +877 493 111 -32 2104 2344 10 708 0 +878 392 87 23 0 7471 10 0 990 +879 13 394 -12 0 7410 10 983 0 +880 259 301 -17 0 7636 10 681 0 +881 351 233 -33 5631 5871 10 893 0 +882 313 493 20 0 7436 10 0 714 +883 65 62 -14 0 7424 10 461 0 +884 417 212 -27 0 7516 10 519 0 +885 450 194 -29 0 7480 10 441 0 +886 470 138 -23 0 7441 10 193 0 +887 190 267 -25 0 7625 10 510 0 +888 248 214 -20 5857 6097 10 190 0 +889 50 383 20 0 7447 10 0 607 +890 244 422 14 2091 2331 10 0 181 +891 60 29 32 0 7396 10 0 628 +892 5 445 30 0 7374 10 0 93 +893 490 276 33 0 7446 10 0 881 +894 441 100 -9 0 7445 10 68 0 +895 162 388 -8 0 7524 10 861 0 +896 244 277 -36 5145 5385 10 338 0 +897 406 408 15 0 7465 10 0 863 +898 265 240 9 18 258 10 0 185 +899 130 186 16 465 705 10 0 953 +900 382 110 24 0 7495 10 0 948 +901 142 14 -23 0 7428 10 117 0 +902 352 487 -20 0 7429 10 954 0 +903 307 52 -20 3622 3862 10 723 0 +904 418 399 20 0 7463 10 0 205 +905 196 56 -33 0 7486 10 339 0 +906 66 31 -7 0 7401 10 818 0 +907 90 496 13 0 7394 10 0 731 +908 480 136 22 0 7431 10 0 342 +909 65 82 -11 2898 3138 10 42 0 +910 48 293 -11 0 7481 10 71 0 +911 105 181 -21 0 7527 10 857 0 +912 215 282 -29 0 7640 10 833 0 +913 257 133 19 0 7570 10 0 745 +914 77 465 -22 0 7412 10 916 0 +915 43 135 31 0 7451 10 0 619 +916 27 444 22 0 7392 10 0 914 +917 357 290 24 0 7573 10 0 851 +918 38 15 3 0 7371 10 0 545 +919 80 337 28 0 7497 10 0 278 +920 36 451 -8 0 7394 10 88 0 +921 291 251 20 0 7646 10 0 213 +922 195 111 -13 0 7538 10 114 0 +923 383 17 -24 0 7419 10 630 0 +924 53 466 -31 0 7395 10 440 0 +925 114 102 21 0 7487 10 0 143 +926 350 199 -40 4746 4986 10 11 0 +927 405 349 -40 0 7504 10 439 0 +928 472 248 -5 0 7465 10 786 0 +929 333 293 27 2408 2648 10 0 158 +930 174 397 -36 4919 5159 10 134 0 +931 2 264 40 0 7439 10 0 150 +932 7 82 25 0 7392 10 0 336 +933 34 329 -29 0 7458 10 810 0 +934 158 179 -12 0 7571 10 22 0 +935 421 499 23 0 7385 10 0 226 +936 345 431 12 0 7483 10 0 172 +937 370 262 15 0 7567 10 0 658 +938 77 172 23 0 7498 10 0 232 +939 87 51 35 0 7430 10 0 437 +940 468 352 -8 0 7447 10 988 0 +941 63 420 19 0 7435 10 0 771 +942 347 184 15 0 7570 0 0 1003 +943 206 174 14 3139 3379 10 0 259 +944 209 212 -19 6051 6291 10 462 0 +945 466 362 15 0 7444 0 0 1001 +946 201 278 13 106 346 10 0 255 +947 206 172 29 3092 3332 10 0 961 +948 471 94 -24 0 7417 10 900 0 +949 331 134 -31 4435 4675 10 145 0 +950 274 261 -15 0 7661 10 214 0 +951 219 215 32 0 7641 10 0 816 +952 349 76 15 0 7487 10 0 797 +953 86 189 -16 0 7513 10 899 0 +954 336 493 20 0 7430 10 0 902 +955 7 194 -23 0 7438 10 867 0 +956 492 335 10 3253 3493 10 0 472 +957 248 386 22 0 7551 10 0 5 +958 463 406 -23 0 7423 10 156 0 +959 199 438 3 0 7493 10 0 445 +960 135 30 -18 0 7439 10 480 0 +961 447 267 -29 0 7490 10 947 0 +962 235 33 -19 0 7470 10 995 0 +963 63 155 -29 0 7478 10 588 0 +964 294 421 26 6242 6482 10 0 389 +965 318 99 -20 0 7522 10 971 0 +966 21 146 21 0 7436 10 0 654 +967 30 7 23 4694 4934 10 0 558 +968 410 399 25 875 1115 10 0 691 +969 405 187 -10 0 7520 10 298 0 +970 109 56 -4 0 7448 10 841 0 +971 212 47 20 0 7481 10 0 965 +972 479 387 -16 0 7421 10 162 0 +973 167 291 27 0 7595 10 0 126 +974 259 498 33 0 7439 10 0 231 +975 461 182 13 2456 2696 10 0 839 +976 277 428 7 0 7507 10 0 386 +977 290 328 7 515 755 10 0 85 +978 146 313 -13 4721 4961 10 740 0 +979 40 304 16 4519 4759 10 0 705 +980 56 268 -19 0 7493 10 495 0 +981 104 28 8 0 7422 10 0 805 +982 370 493 22 0 7416 10 0 352 +983 136 265 12 340 580 10 0 879 +984 247 306 33 104 344 10 0 431 +985 241 38 16 2067 2307 10 0 622 +986 180 162 -29 634 874 10 775 0 +987 253 118 19 0 7555 10 0 254 +988 413 391 8 0 7472 10 0 940 +989 380 350 15 3406 3646 10 0 189 +990 391 112 -23 0 7490 10 878 0 +991 86 199 23 0 7516 10 0 360 +992 91 326 4 0 7511 10 0 458 +993 287 256 18 37 277 10 0 385 +994 203 211 -23 0 7626 10 326 0 +995 79 80 19 0 7446 10 0 962 +996 32 319 -22 1542 1782 10 235 0 +997 167 445 -25 0 7476 10 575 0 +998 439 237 11 0 7498 10 0 597 +999 373 418 6 0 7479 10 0 872 +1000 26 342 12 0 7445 10 0 667 +1001 466 362 -15 0 7444 10 945 0 +1002 117 110 -13 0 7494 10 595 0 +1003 347 184 -15 0 7570 10 942 0 +1004 478 300 -12 0 7454 10 715 0 +1005 187 73 -18 0 7500 10 672 0 +1006 409 255 -23 0 7528 10 410 0 +1007 207 487 -4 0 7447 10 657 0 +1008 292 104 -26 0 7536 10 828 0 diff --git a/jsprit-instances/instances/lilim/1000/LR2109.txt b/jsprit-instances/instances/lilim/1000/LR2109.txt new file mode 100644 index 00000000..71c814f3 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LR2109.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7697 0 0 0 +1 228 399 14 2207 2603 10 0 501 +2 325 56 -21 3216 3275 10 116 0 +3 290 145 5 4884 5488 10 0 299 +4 340 291 22 1859 2025 10 0 726 +5 370 382 11 3444 3746 10 0 553 +6 273 255 18 5796 6260 0 0 1007 +7 36 301 21 758 1001 10 0 187 +8 117 178 28 4421 4637 10 0 42 +9 295 283 -23 3476 3791 10 707 0 +10 57 43 15 3935 4373 10 0 147 +11 436 123 40 788 1013 0 0 1004 +12 48 162 15 656 1201 0 0 1005 +13 222 499 7 3075 3807 10 0 930 +14 376 92 10 3896 4149 10 0 580 +15 437 90 -5 2143 2657 10 673 0 +16 3 23 -12 1396 1856 10 22 0 +17 94 40 24 4208 4457 10 0 418 +18 398 476 25 1534 1931 10 0 434 +19 307 249 10 5244 5888 10 0 912 +20 179 286 -26 1102 1747 10 476 0 +21 0 356 -8 4298 4511 10 124 0 +22 143 158 12 355 865 10 0 16 +23 413 476 -29 4656 4896 10 864 0 +24 371 488 10 2207 2575 10 0 560 +25 415 118 19 846 1007 10 0 708 +26 440 77 14 3454 3969 10 0 923 +27 261 201 -1 5941 6291 10 427 0 +28 490 286 29 2019 2279 10 0 320 +29 309 161 23 2064 2722 10 0 605 +30 39 162 -34 2112 2529 10 142 0 +31 361 178 5 3679 4221 10 0 58 +32 261 138 -9 2451 2616 10 850 0 +33 447 383 17 890 1012 10 0 819 +34 346 354 -17 3189 3471 10 199 0 +35 461 195 26 5426 5855 10 0 410 +36 187 263 35 64 470 10 0 638 +37 130 247 17 280 681 10 0 257 +38 328 491 -15 2638 2908 10 288 0 +39 161 276 8 435 752 10 0 954 +40 365 74 24 3287 3621 10 0 900 +41 168 109 -9 733 1021 10 986 0 +42 111 192 -28 4798 4918 10 8 0 +43 87 213 -10 2211 2914 10 279 0 +44 45 166 -6 4018 4209 10 473 0 +45 62 94 16 3590 4134 0 0 1001 +46 348 476 -14 4701 4993 10 827 0 +47 64 437 -32 3591 3875 10 129 0 +48 56 75 -19 5529 6092 10 609 0 +49 24 259 -16 1273 1808 10 108 0 +50 295 247 -23 5102 5446 10 679 0 +51 6 53 8 2207 2608 10 0 763 +52 15 11 -32 3792 3941 10 180 0 +53 179 497 -15 5481 5928 10 375 0 +54 67 352 -19 1388 1717 10 530 0 +55 317 45 -23 2330 3057 10 217 0 +56 40 278 -25 4362 4593 10 813 0 +57 33 278 18 5734 6283 10 0 710 +58 322 290 -5 5658 6294 10 31 0 +59 159 226 16 260 492 10 0 385 +60 208 445 -26 5232 5548 10 802 0 +61 453 360 -25 750 1098 10 968 0 +62 34 169 -6 1787 2209 10 433 0 +63 436 25 19 5038 5340 10 0 838 +64 393 98 13 2772 3368 10 0 724 +65 466 96 -5 5542 5643 10 676 0 +66 366 390 -36 5135 5530 10 301 0 +67 303 78 12 472 967 10 0 491 +68 374 116 9 2338 2479 10 0 844 +69 424 288 -19 4132 4447 10 961 0 +70 191 84 13 3319 3737 10 0 962 +71 59 276 11 3388 3871 10 0 919 +72 215 293 13 55 792 10 0 176 +73 343 276 15 151 622 10 0 586 +74 488 173 -11 4632 5170 10 928 0 +75 452 110 -14 1240 1602 10 639 0 +76 153 244 5 402 581 10 0 588 +77 176 200 17 2261 2400 10 0 143 +78 498 171 -22 4724 5447 10 496 0 +79 492 188 33 2897 2946 10 0 537 +80 177 156 25 581 877 10 0 527 +81 398 49 21 3015 3439 10 0 245 +82 497 296 14 2347 2673 10 0 529 +83 276 84 20 2674 2895 10 0 507 +84 128 113 22 1346 1676 10 0 789 +85 422 498 -7 2597 3059 10 977 0 +86 460 424 -20 5775 5981 10 791 0 +87 246 314 -15 5813 5870 10 757 0 +88 0 422 -30 3311 3378 10 633 0 +89 166 247 1 84 605 10 0 399 +90 311 422 -17 3839 4185 10 296 0 +91 392 95 -17 3039 3210 10 829 0 +92 460 117 14 1916 2363 10 0 148 +93 28 467 -22 5292 5569 10 686 0 +94 375 145 12 3761 3793 10 0 749 +95 240 255 -14 6386 6622 10 437 0 +96 440 436 18 3525 3731 10 0 848 +97 454 201 -24 5210 5349 10 917 0 +98 407 35 -17 5132 5295 10 620 0 +99 420 383 27 3856 4119 10 0 109 +100 264 180 -14 6495 7070 10 565 0 +101 440 294 -27 3572 4230 10 929 0 +102 500 228 -20 2983 3391 10 153 0 +103 144 331 -14 3509 4061 10 482 0 +104 98 2 -14 2227 2626 10 381 0 +105 461 186 -26 5717 6501 10 223 0 +106 68 450 -19 2438 2742 10 405 0 +107 153 192 -5 3370 3676 10 786 0 +108 34 239 16 763 1108 10 0 49 +109 465 367 -27 3937 4398 10 99 0 +110 208 488 -16 1776 2165 10 346 0 +111 93 413 17 678 1133 10 0 616 +112 371 332 14 1951 2405 10 0 285 +113 231 167 15 165 517 10 0 546 +114 179 75 -17 2844 3195 10 503 0 +115 196 489 23 3948 4413 10 0 964 +116 280 245 21 30 369 10 0 2 +117 108 37 -2 1908 2608 10 777 0 +118 1 101 -21 4874 5304 10 925 0 +119 420 80 24 4193 4701 10 0 430 +120 38 190 23 999 1399 10 0 602 +121 470 405 -23 3581 3946 10 836 0 +122 448 397 33 3404 3640 10 0 156 +123 471 427 -9 3110 3542 10 159 0 +124 146 376 8 743 1252 10 0 21 +125 12 358 -25 4714 5201 10 292 0 +126 175 422 -12 5571 6120 10 626 0 +127 297 131 -27 4493 4950 10 604 0 +128 457 492 7 1870 2315 10 0 688 +129 69 423 32 3099 3440 10 0 47 +130 97 288 -12 4980 5412 10 702 0 +131 172 314 -9 2195 2289 10 168 0 +132 170 347 15 1574 2032 10 0 462 +133 103 123 -32 1947 2090 10 951 0 +134 154 374 36 3590 4025 10 0 154 +135 318 497 21 3260 3690 10 0 226 +136 330 147 -19 3272 3636 10 987 0 +137 241 180 -22 6708 6969 10 331 0 +138 174 67 -11 4764 5433 10 502 0 +139 235 288 18 40 451 10 0 356 +140 94 192 1 4279 4484 10 0 414 +141 232 101 24 1283 1606 10 0 185 +142 28 180 34 1382 1822 10 0 30 +143 64 135 -17 3500 3566 10 77 0 +144 174 376 8 5457 6018 10 0 290 +145 293 174 31 159 540 10 0 721 +146 218 12 3 1980 2492 10 0 158 +147 110 122 -15 5849 6342 10 10 0 +148 459 53 -14 4298 4800 10 92 0 +149 173 474 14 5039 5361 10 0 959 +150 135 400 20 1194 1315 10 0 589 +151 497 266 -13 2949 3151 10 459 0 +152 380 194 3 2837 2992 10 0 963 +153 495 227 20 1273 1599 10 0 102 +154 268 351 -36 6518 7003 10 134 0 +155 213 399 18 873 1118 10 0 785 +156 448 414 -33 4668 5234 10 122 0 +157 327 139 13 4937 5241 10 0 597 +158 151 81 -3 6142 6442 10 146 0 +159 425 448 9 2961 3514 10 0 123 +160 92 259 4 1565 1750 10 0 210 +161 59 388 -26 2452 2970 10 337 0 +162 468 360 -12 854 1458 10 564 0 +163 332 459 35 1260 1809 10 0 936 +164 469 489 -3 2115 2448 10 358 0 +165 248 176 -14 5608 5723 10 753 0 +166 174 41 15 5250 5297 10 0 746 +167 343 205 -2 2803 3456 10 648 0 +168 154 392 9 561 811 10 0 131 +169 92 18 -13 4368 4745 10 429 0 +170 250 328 24 843 1266 10 0 957 +171 88 484 5 5888 6158 10 0 202 +172 360 488 -30 1175 1470 10 269 0 +173 156 65 -24 4049 4369 10 310 0 +174 18 225 8 2582 3069 10 0 931 +175 152 476 -29 2058 2242 10 833 0 +176 176 470 -13 2041 2452 10 72 0 +177 195 450 -22 5809 6198 10 762 0 +178 466 149 -17 4524 5085 10 396 0 +179 221 269 14 4718 5525 10 0 184 +180 105 137 32 1624 2114 10 0 52 +181 284 319 17 3125 3529 10 0 338 +182 41 120 22 2759 2928 10 0 909 +183 263 418 25 833 1514 10 0 902 +184 218 271 -14 6219 6490 10 179 0 +185 365 119 -24 1325 1849 10 141 0 +186 89 322 -27 3904 4381 10 318 0 +187 180 283 -21 2886 3183 10 7 0 +188 385 17 -10 3084 3507 10 298 0 +189 401 314 25 3745 4186 10 0 336 +190 245 176 -33 4840 5157 10 685 0 +191 251 238 27 12 330 10 0 325 +192 139 438 -9 811 1021 10 548 0 +193 236 126 23 333 666 10 0 521 +194 61 441 27 2128 2342 10 0 646 +195 405 454 -10 5115 5428 10 760 0 +196 111 392 -15 4647 4825 10 858 0 +197 373 421 21 927 1092 10 0 334 +198 247 443 17 1078 1685 10 0 614 +199 322 406 17 3268 3487 10 0 34 +200 412 478 -25 3754 4044 10 388 0 +201 374 346 27 1632 1856 10 0 332 +202 122 422 -5 5590 6184 10 171 0 +203 261 359 -25 188 688 10 880 0 +204 173 182 25 102 783 10 0 422 +205 398 341 -15 3718 3915 10 989 0 +206 413 127 -25 3339 3426 10 428 0 +207 325 311 22 5174 5524 10 0 520 +208 80 357 -19 2028 2336 10 456 0 +209 67 378 -13 1680 2204 10 946 0 +210 216 341 -4 2380 2972 10 160 0 +211 498 457 15 3444 3981 10 0 787 +212 44 344 -23 3981 4775 10 732 0 +213 352 481 -19 5087 5311 10 384 0 +214 237 420 15 5122 5672 10 0 874 +215 389 43 21 1346 1939 10 0 376 +216 292 136 28 2918 3447 10 0 947 +217 426 38 23 2299 2691 10 0 55 +218 245 461 8 2590 2725 10 0 453 +219 415 253 21 1367 1686 10 0 664 +220 298 264 36 50 597 10 0 809 +221 307 412 -19 1413 1936 10 517 0 +222 53 204 8 4157 4403 10 0 767 +223 480 152 26 3908 4385 10 0 105 +224 262 97 17 3628 4069 10 0 486 +225 83 169 -23 3003 3329 10 938 0 +226 377 432 -21 3277 3494 10 135 0 +227 390 249 21 2081 2693 10 0 303 +228 132 479 -12 830 1231 10 832 0 +229 359 246 -34 5531 5972 10 969 0 +230 314 205 -14 5883 6452 10 467 0 +231 124 448 6 1257 1812 10 0 699 +232 0 188 26 3578 3998 10 0 394 +233 343 166 28 3269 3858 10 0 642 +234 482 141 14 3862 4345 10 0 751 +235 162 306 22 338 735 10 0 815 +236 24 71 11 1170 1719 10 0 480 +237 188 119 44 3621 4298 10 0 452 +238 100 85 14 1250 1678 10 0 701 +239 103 177 28 2448 2683 10 0 362 +240 26 67 -21 5069 5585 10 805 0 +241 164 332 19 5034 5324 10 0 994 +242 385 285 -16 3348 3716 10 561 0 +243 209 68 -3 6076 6589 10 518 0 +244 149 341 6 1541 1811 10 0 779 +245 415 95 -21 4521 5013 10 81 0 +246 167 488 17 987 1133 10 0 329 +247 413 493 -15 4679 5186 10 680 0 +248 439 222 22 3781 4175 10 0 259 +249 150 484 -14 2306 2816 10 890 0 +250 299 353 34 139 774 10 0 573 +251 273 300 30 55 481 10 0 439 +252 402 277 -12 5641 5986 10 554 0 +253 239 15 -16 2380 2571 10 985 0 +254 363 225 35 3189 3778 10 0 733 +255 65 343 38 625 1154 10 0 426 +256 351 60 15 838 963 10 0 416 +257 60 246 -17 641 879 10 37 0 +258 144 35 26 875 1042 10 0 939 +259 463 253 -22 4128 4368 10 248 0 +260 332 382 -12 3879 4325 10 354 0 +261 408 318 15 2432 2833 10 0 681 +262 452 206 -7 1946 2111 10 719 0 +263 471 368 19 1503 2041 10 0 935 +264 93 490 2 1417 1736 10 0 979 +265 241 402 11 4038 4280 10 0 585 +266 60 231 32 4020 4307 10 0 689 +267 172 66 -32 5248 5294 10 497 0 +268 404 207 -5 3543 3861 10 872 0 +269 286 356 30 375 521 10 0 172 +270 489 338 -18 5551 5747 10 773 0 +271 334 481 32 1280 1483 10 0 865 +272 26 442 -20 5082 5790 10 889 0 +273 226 175 -19 6536 7134 10 995 0 +274 488 3 3 1396 1929 10 0 357 +275 178 150 -30 2384 2788 10 795 0 +276 371 423 10 579 1110 10 0 600 +277 5 224 -10 4127 4430 10 778 0 +278 94 344 -26 2660 2917 10 417 0 +279 153 235 10 223 562 10 0 43 +280 12 367 -5 1194 1532 10 316 0 +281 217 357 -15 5623 5857 10 392 0 +282 255 487 19 1388 1915 10 0 419 +283 149 214 7 1888 2088 10 0 781 +284 169 305 21 645 769 10 0 879 +285 487 446 -14 5131 5710 10 112 0 +286 267 374 23 2113 2812 10 0 322 +287 360 294 -21 5621 5841 10 926 0 +288 185 431 15 1405 1811 10 0 38 +289 325 210 -34 3685 3902 10 552 0 +290 175 352 -8 6599 6841 10 144 0 +291 76 462 18 3711 4057 10 0 768 +292 19 273 25 3619 4633 10 0 125 +293 72 227 25 2143 2488 10 0 498 +294 213 283 -15 5734 6154 10 883 0 +295 130 140 -20 510 1163 10 350 0 +296 274 442 17 4044 4607 10 0 90 +297 337 41 8 3837 4301 10 0 878 +298 372 39 10 2809 3099 10 0 188 +299 269 112 -5 4875 5346 10 3 0 +300 224 56 -18 4607 5005 10 901 0 +301 340 416 36 1180 1509 10 0 66 +302 13 214 -25 5261 5687 10 406 0 +303 230 320 -21 4681 4975 10 227 0 +304 6 196 20 4579 5166 10 0 911 +305 87 3 -3 5604 5981 10 505 0 +306 133 202 33 1642 2162 10 0 499 +307 235 316 -21 2538 2828 10 364 0 +308 435 180 37 787 1129 10 0 534 +309 173 65 -27 1596 2112 10 831 0 +310 245 42 24 2109 2390 10 0 173 +311 384 149 18 4663 5035 10 0 888 +312 51 286 -21 5837 5955 10 966 0 +313 267 290 15 43 458 10 0 873 +314 453 318 -9 1415 1695 10 871 0 +315 189 402 10 2114 2295 10 0 372 +316 210 276 5 82 300 10 0 280 +317 120 261 5 3081 3385 10 0 978 +318 35 263 27 949 1333 10 0 186 +319 429 59 9 1707 2084 10 0 612 +320 330 308 -29 4473 5010 10 28 0 +321 58 391 16 3372 3807 10 0 799 +322 260 472 -23 3933 4474 10 286 0 +323 217 333 26 1384 2025 10 0 533 +324 335 46 -14 5331 5522 10 477 0 +325 198 85 -27 875 1346 10 191 0 +326 138 28 -26 4250 4642 10 470 0 +327 29 336 22 1318 1455 10 0 471 +328 200 27 22 2051 2266 10 0 475 +329 157 269 -17 6177 6554 10 246 0 +330 177 404 17 4820 5397 10 0 474 +331 202 28 22 3599 3994 10 0 137 +332 366 334 -27 1370 2031 10 201 0 +333 149 458 13 4646 4785 10 0 655 +334 481 454 -21 1184 1500 10 197 0 +335 377 385 -16 3406 3644 10 694 0 +336 217 207 -25 5222 5958 10 189 0 +337 96 346 26 697 905 10 0 161 +338 224 320 -17 5066 5323 10 181 0 +339 206 97 -24 1757 1947 10 432 0 +340 438 127 -13 3576 4071 10 761 0 +341 494 468 31 1211 1728 10 0 352 +342 494 165 19 2354 2600 10 0 636 +343 5 281 -18 5405 5687 10 345 0 +344 441 60 -30 5660 6130 10 948 0 +345 14 232 18 1057 1504 10 0 343 +346 288 439 16 1020 1287 10 0 110 +347 420 224 10 1470 2082 10 0 567 +348 267 162 -10 5691 6022 10 603 0 +349 195 273 22 62 414 10 0 892 +350 233 230 20 26 422 10 0 295 +351 382 360 26 649 895 10 0 972 +352 406 460 -31 2792 3081 10 341 0 +353 499 316 18 2331 2763 10 0 468 +354 246 407 12 1060 1553 10 0 260 +355 283 454 -12 4949 5291 10 389 0 +356 426 231 -18 3917 4431 10 139 0 +357 432 2 -3 1755 2097 10 274 0 +358 404 439 3 862 1168 10 0 164 +359 397 477 -23 4722 5124 10 958 0 +360 44 140 11 3458 3608 10 0 390 +361 330 138 18 4134 4862 10 0 965 +362 39 153 -28 3008 3494 10 239 0 +363 397 153 -21 3528 3651 10 797 0 +364 226 316 21 183 378 10 0 307 +365 354 156 20 3268 3511 10 0 990 +366 201 66 14 4572 4882 10 0 830 +367 389 156 27 2770 3075 10 0 463 +368 134 211 -35 477 607 10 816 0 +369 386 154 -15 4366 4561 10 937 0 +370 335 99 -15 4736 5131 10 744 0 +371 356 256 19 238 611 10 0 812 +372 240 362 -10 5476 5954 10 315 0 +373 412 100 -5 2053 2174 10 500 0 +374 394 322 -18 4044 4275 10 993 0 +375 48 150 15 2544 2816 10 0 53 +376 225 121 -21 2824 3164 10 215 0 +377 102 422 23 873 1057 10 0 729 +378 339 41 -10 1536 2229 10 598 0 +379 440 201 -7 3434 3827 10 403 0 +380 411 379 25 4599 5068 0 0 1002 +381 219 210 14 50 558 10 0 104 +382 250 441 -12 2729 3436 10 413 0 +383 210 29 -7 4053 4473 10 818 0 +384 178 302 19 3351 3861 10 0 213 +385 148 208 -16 2002 2329 10 59 0 +386 225 369 38 278 694 10 0 508 +387 16 287 12 923 1363 10 0 811 +388 450 416 25 2310 2425 10 0 200 +389 287 397 12 2163 2472 10 0 355 +390 285 247 -11 4996 5322 10 360 0 +391 351 481 10 1260 1434 10 0 578 +392 243 408 15 5589 6001 10 0 281 +393 137 377 23 364 995 10 0 575 +394 33 152 -26 5034 5646 10 232 0 +395 68 303 -20 940 950 10 469 0 +396 456 113 17 4708 5230 10 0 178 +397 134 276 15 390 795 10 0 649 +398 26 221 -16 3845 4246 10 899 0 +399 79 257 -1 3592 4153 10 89 0 +400 181 185 19 6338 6693 0 0 1003 +401 104 349 20 3817 4376 10 0 464 +402 267 174 -36 6442 6623 10 695 0 +403 475 267 7 2950 3407 10 0 379 +404 385 239 21 2980 3425 10 0 511 +405 95 382 19 746 1223 10 0 106 +406 67 190 25 4673 4834 10 0 302 +407 32 94 14 3591 3971 10 0 922 +408 401 164 13 2427 2663 10 0 857 +409 376 113 8 2039 2194 10 0 862 +410 409 255 -26 5941 6358 10 35 0 +411 228 260 -20 6314 6651 10 506 0 +412 363 34 -13 1117 1181 10 792 0 +413 274 441 12 2660 3016 10 0 382 +414 146 188 -1 4895 5105 10 140 0 +415 212 186 -19 6799 7094 10 913 0 +416 432 66 -15 4318 4371 10 256 0 +417 83 300 26 1936 2181 10 0 278 +418 51 89 -24 4664 5122 10 17 0 +419 379 486 -19 2652 2841 10 282 0 +420 440 284 -13 3339 3595 10 703 0 +421 175 239 -8 132 475 10 547 0 +422 282 1 -25 4131 4328 10 204 0 +423 268 113 21 2517 3041 10 0 841 +424 480 131 5 2516 3105 10 0 894 +425 429 67 -2 2850 3128 10 770 0 +426 162 301 -38 6343 6681 10 255 0 +427 281 96 1 4248 4878 10 0 27 +428 495 199 25 1319 1495 10 0 206 +429 372 115 13 1354 1676 10 0 169 +430 396 83 -24 6325 6487 10 119 0 +431 239 486 -22 5913 6063 10 691 0 +432 288 70 24 607 945 10 0 339 +433 66 163 6 1419 1865 10 0 62 +434 470 417 -25 2998 3017 10 18 0 +435 226 423 15 451 1245 10 0 976 +436 342 319 36 260 661 10 0 927 +437 174 122 14 2182 2685 10 0 95 +438 49 353 -27 5756 5932 10 771 0 +439 448 495 -30 1363 1825 10 251 0 +440 13 465 -32 2900 3408 10 458 0 +441 489 159 29 5699 5843 10 0 886 +442 311 203 15 2863 3037 10 0 528 +443 480 119 -16 2460 2688 10 776 0 +444 442 153 29 4640 4990 10 0 881 +445 148 462 10 2776 3159 10 0 861 +446 233 87 18 909 1232 10 0 784 +447 323 34 -16 5209 5430 10 697 0 +448 84 377 10 3510 4021 10 0 780 +449 292 32 14 833 1120 10 0 647 +450 418 75 11 1770 1934 10 0 856 +451 451 305 13 582 1085 10 0 885 +452 225 269 -44 4864 5422 10 237 0 +453 272 420 -8 5502 5705 10 218 0 +454 318 280 21 98 496 10 0 513 +455 250 57 26 2821 3285 10 0 617 +456 77 372 19 653 1040 10 0 208 +457 385 58 -30 1488 1870 10 632 0 +458 44 496 32 1429 1905 10 0 440 +459 460 328 13 855 1018 10 0 151 +460 67 24 -17 3996 4272 10 591 0 +461 91 27 -12 4560 5013 10 718 0 +462 360 284 -15 2604 2849 10 132 0 +463 82 183 -27 4254 4679 10 367 0 +464 153 362 -20 4397 5012 10 401 0 +465 52 412 -36 5351 6016 10 635 0 +466 32 191 -24 2270 2540 10 674 0 +467 325 147 14 4540 5074 10 0 230 +468 328 458 -18 2943 3320 10 353 0 +469 133 273 20 254 699 10 0 395 +470 147 30 26 4300 4689 10 0 326 +471 131 246 -22 3184 3592 10 327 0 +472 433 319 -15 5506 5624 10 942 0 +473 168 59 6 1372 1676 10 0 44 +474 218 403 -17 5087 5586 10 330 0 +475 295 89 -22 2866 3189 10 328 0 +476 118 314 26 1233 1587 10 0 20 +477 251 63 14 3846 4173 10 0 324 +478 388 44 22 4188 4979 0 0 1008 +479 381 328 -31 2726 3132 10 584 0 +480 132 32 -11 3002 3393 10 236 0 +481 334 403 26 329 1067 10 0 543 +482 83 290 14 2236 2744 10 0 103 +483 411 396 23 3628 3853 10 0 577 +484 243 402 13 1554 1807 10 0 494 +485 52 18 28 3308 3668 10 0 967 +486 265 0 -17 3294 3994 10 224 0 +487 268 288 -4 4753 5502 10 725 0 +488 476 61 -19 1646 2064 10 739 0 +489 283 438 3 806 1165 10 0 766 +490 191 215 17 95 453 10 0 581 +491 253 50 -12 831 1094 10 67 0 +492 71 282 -14 2305 2948 10 668 0 +493 297 304 4 71 618 10 0 722 +494 244 368 -13 1581 1852 10 484 0 +495 80 279 -4 4535 4847 10 992 0 +496 488 96 22 4114 4535 10 0 78 +497 142 30 32 4903 5184 10 0 267 +498 68 240 -25 3117 3358 10 293 0 +499 193 138 -33 2321 3086 10 306 0 +500 451 62 5 1054 1324 10 0 373 +501 138 406 -14 4826 5021 10 1 0 +502 306 42 11 1889 2045 10 0 138 +503 247 219 17 31 445 10 0 114 +504 98 29 -16 4212 4281 10 628 0 +505 102 6 3 5764 6024 10 0 305 +506 142 360 20 5914 6462 10 0 411 +507 172 24 -20 5691 6046 10 83 0 +508 352 241 -38 3003 3456 10 386 0 +509 486 324 15 3113 3164 10 0 730 +510 133 455 25 3035 3548 10 0 741 +511 440 292 -21 3648 3993 10 404 0 +512 364 173 -19 707 854 10 803 0 +513 442 289 -21 530 1117 10 454 0 +514 48 412 7 4028 4349 10 0 618 +515 344 70 24 4481 4804 10 0 652 +516 78 406 15 3713 4091 10 0 916 +517 329 456 19 920 1192 10 0 221 +518 157 38 3 4009 4494 10 0 243 +519 374 260 -23 6952 7366 10 658 0 +520 297 283 -22 5268 5647 10 207 0 +521 210 113 -23 2620 3021 10 193 0 +522 215 434 9 770 891 10 0 569 +523 262 92 -18 2421 2742 10 672 0 +524 140 108 -11 4146 4543 10 558 0 +525 235 108 -15 4139 4618 10 526 0 +526 210 133 15 2424 3204 10 0 525 +527 25 53 -25 4091 4190 10 80 0 +528 339 113 -15 3064 3140 10 442 0 +529 394 310 -14 4290 4618 10 82 0 +530 126 391 19 992 1310 10 0 54 +531 343 34 -22 2721 3197 10 908 0 +532 354 416 10 2597 2957 10 0 727 +533 202 391 -26 2243 2866 10 323 0 +534 367 97 -37 3856 4167 10 308 0 +535 188 151 -28 5053 5440 10 712 0 +536 111 178 18 483 769 10 0 709 +537 456 157 -33 5627 6134 10 79 0 +538 441 7 -9 1334 1918 10 820 0 +539 270 337 -22 6973 7410 10 750 0 +540 323 29 -20 4238 4981 10 971 0 +541 200 78 31 3954 4108 10 0 670 +542 330 281 -8 5198 5566 10 808 0 +543 438 488 -26 1140 1598 10 481 0 +544 161 416 -11 3933 4277 10 627 0 +545 30 97 -18 4680 5121 10 634 0 +546 273 70 -15 2294 2780 10 113 0 +547 214 245 8 36 754 10 0 421 +548 221 291 9 58 430 10 0 192 +549 79 467 -46 1320 1612 10 599 0 +550 423 315 12 640 921 10 0 693 +551 395 474 26 1431 1785 10 0 956 +552 481 207 34 3112 3856 10 0 289 +553 199 203 -11 5848 5930 10 5 0 +554 497 483 12 1277 1671 10 0 252 +555 449 428 -18 4832 5263 10 840 0 +556 100 266 5 1700 2178 10 0 823 +557 214 274 -13 5303 5770 10 595 0 +558 16 68 11 1070 1302 10 0 524 +559 475 198 -23 3184 3617 10 592 0 +560 371 427 -10 3634 4152 10 24 0 +561 62 375 16 1316 1594 10 0 242 +562 163 472 -10 2460 2888 10 752 0 +563 13 314 14 861 1210 10 0 997 +564 376 385 12 630 847 10 0 162 +565 231 29 14 4956 4974 10 0 100 +566 89 358 -28 5016 5082 10 980 0 +567 331 356 -10 2666 3148 10 347 0 +568 365 190 22 5762 6178 10 0 870 +569 256 441 -9 613 915 10 522 0 +570 120 37 28 2919 3404 10 0 650 +571 349 43 26 634 1202 10 0 847 +572 230 487 -13 4375 4781 10 740 0 +573 489 457 -34 1252 1399 10 250 0 +574 341 72 9 3025 3533 10 0 903 +575 181 441 -23 2067 2388 10 393 0 +576 306 229 -24 5176 5507 10 814 0 +577 492 326 -23 4625 5127 10 483 0 +578 347 459 -10 1688 2268 10 391 0 +579 66 88 2 3093 3665 10 0 896 +580 272 234 -10 6359 6484 10 14 0 +581 134 194 -17 6481 6852 10 490 0 +582 320 211 -24 3804 4257 10 684 0 +583 214 311 14 70 549 10 0 924 +584 489 274 31 2114 2276 10 0 479 +585 231 410 -11 4836 5176 10 265 0 +586 432 199 -15 2418 2811 10 73 0 +587 29 358 23 2328 2678 10 0 735 +588 62 236 -5 2234 2349 10 76 0 +589 333 163 -20 4769 5273 10 150 0 +590 364 71 -30 5247 5661 10 645 0 +591 125 65 17 3014 3414 10 0 460 +592 429 476 23 2236 2470 10 0 559 +593 161 275 21 5304 5590 10 0 944 +594 365 274 14 166 774 10 0 720 +595 117 110 13 3819 4131 10 0 557 +596 166 345 -17 4568 4591 10 835 0 +597 345 146 -13 5702 5930 10 157 0 +598 324 99 10 1314 1510 10 0 378 +599 72 477 46 900 1408 10 0 549 +600 487 320 -10 3291 3690 10 276 0 +601 120 17 30 876 1477 10 0 906 +602 1 252 -23 929 1393 10 120 0 +603 303 186 10 5209 5744 10 0 348 +604 428 302 27 3907 4341 10 0 127 +605 264 135 -23 3219 3937 10 29 0 +606 223 178 20 4496 4715 10 0 839 +607 174 347 -22 4044 4193 10 910 0 +608 238 123 24 2889 3480 10 0 824 +609 187 61 19 2046 2433 10 0 48 +610 52 303 -12 1640 2009 10 1000 0 +611 89 185 -21 2282 2637 10 996 0 +612 341 59 -9 3117 3322 10 319 0 +613 89 65 16 2758 3125 10 0 656 +614 495 355 -17 4907 5159 10 198 0 +615 368 452 16 2692 2788 10 0 716 +616 164 473 -17 1055 1435 10 111 0 +617 171 34 -26 4373 4892 10 455 0 +618 114 460 -7 4301 4506 10 514 0 +619 224 3 10 2642 3001 10 0 860 +620 472 57 17 5161 5318 10 0 98 +621 448 404 -1 2302 2610 10 747 0 +622 390 120 -24 3855 4298 10 852 0 +623 386 225 -12 3535 3934 10 863 0 +624 301 239 31 52 819 10 0 798 +625 115 296 -2 5934 6417 10 933 0 +626 69 266 12 2858 3328 10 0 126 +627 115 395 11 3160 3482 10 0 544 +628 68 53 16 2851 3178 10 0 504 +629 33 268 18 2750 2936 10 0 869 +630 450 45 24 1988 2160 10 0 794 +631 351 5 -26 1808 2280 10 828 0 +632 351 148 30 1711 2098 10 0 457 +633 80 458 30 1430 1654 10 0 88 +634 60 5 18 3946 4524 10 0 545 +635 10 407 36 1649 1947 10 0 465 +636 497 18 -19 4436 4724 10 342 0 +637 437 98 -15 4309 4720 10 952 0 +638 130 494 -35 2847 3344 10 36 0 +639 391 202 14 304 887 10 0 75 +640 43 210 20 756 931 10 0 955 +641 381 457 28 1650 2236 10 0 950 +642 449 190 -28 4504 4735 10 233 0 +643 429 169 -23 3361 3981 10 817 0 +644 105 140 -37 394 1063 10 934 0 +645 282 10 30 5017 5196 10 0 590 +646 20 480 -27 2134 2548 10 194 0 +647 61 170 -14 3935 4232 10 449 0 +648 210 81 2 1548 1765 10 0 167 +649 87 311 -15 671 721 10 397 0 +650 309 29 -28 5191 5280 10 570 0 +651 397 57 -9 5903 6024 10 898 0 +652 337 232 -24 6227 6458 10 515 0 +653 262 369 -9 517 638 10 849 0 +654 41 232 -21 629 1134 10 953 0 +655 69 414 -13 4835 5392 10 333 0 +656 149 98 -16 4582 4858 10 613 0 +657 207 487 4 2679 2955 10 0 895 +658 366 260 23 5965 6316 10 0 519 +659 497 54 -17 3841 4104 10 717 0 +660 210 379 -12 2640 3150 10 983 0 +661 437 19 -9 3990 4241 10 834 0 +662 181 260 23 69 503 10 0 759 +663 125 61 -21 2316 2698 10 666 0 +664 368 311 -21 3563 3966 10 219 0 +665 80 400 10 5662 6028 10 0 667 +666 75 118 21 1408 1984 10 0 663 +667 171 303 -10 6375 6459 10 665 0 +668 80 251 14 1037 1512 10 0 492 +669 455 168 21 3385 3669 10 0 682 +670 215 129 -31 4302 4766 10 541 0 +671 179 318 -12 4372 4713 10 855 0 +672 187 73 18 1199 1258 10 0 523 +673 394 47 5 1075 1548 10 0 15 +674 31 175 24 832 1260 10 0 466 +675 339 144 13 4168 4743 10 0 949 +676 492 34 5 3006 3598 10 0 65 +677 387 349 9 282 1070 10 0 904 +678 142 372 18 455 848 10 0 914 +679 291 213 23 4908 5274 10 0 50 +680 421 387 15 3120 3409 10 0 247 +681 274 403 -15 3179 4040 10 261 0 +682 434 359 -21 5371 5886 10 669 0 +683 257 57 18 4678 5250 10 0 723 +684 428 202 24 3502 3849 10 0 582 +685 355 174 33 2816 3026 10 0 190 +686 46 389 22 908 1266 10 0 93 +687 44 440 24 2930 3500 10 0 973 +688 491 369 -7 2763 3194 10 128 0 +689 33 286 -32 6235 6253 10 266 0 +690 351 128 -11 4910 5236 10 998 0 +691 485 428 22 5734 6306 10 0 431 +692 273 149 -31 6026 6116 10 915 0 +693 447 184 -12 1658 1857 10 550 0 +694 386 245 16 1959 1993 10 0 335 +695 323 77 36 5468 5892 10 0 402 +696 21 70 15 2968 3321 10 0 796 +697 9 101 16 2497 2952 10 0 447 +698 71 304 19 2563 3070 10 0 714 +699 43 360 -6 3367 3435 10 231 0 +700 396 417 -17 3102 3499 10 846 0 +701 158 24 -14 2322 2688 10 238 0 +702 164 320 12 4241 4636 10 0 130 +703 195 386 13 383 790 10 0 420 +704 306 235 25 146 317 10 0 800 +705 66 314 26 684 875 10 0 736 +706 95 64 -12 2969 3279 10 851 0 +707 348 348 23 3655 3942 10 0 9 +708 495 83 -19 1759 1888 10 25 0 +709 61 214 -18 1210 1643 10 536 0 +710 240 240 -18 6749 6967 10 57 0 +711 140 137 32 1964 2713 10 0 842 +712 242 106 28 4875 5392 10 0 535 +713 392 491 -33 4398 4784 10 837 0 +714 342 481 -19 5793 5848 10 698 0 +715 478 300 -29 3339 3897 10 755 0 +716 299 285 -16 4791 5360 10 615 0 +717 481 84 17 1875 2290 10 0 659 +718 271 128 12 1124 1760 10 0 461 +719 484 224 7 1143 1373 10 0 262 +720 441 177 -14 3780 4350 10 594 0 +721 46 163 -31 3504 4024 10 145 0 +722 493 493 -4 3139 3832 10 493 0 +723 253 74 -18 5305 5616 10 683 0 +724 390 34 -13 4211 4392 10 64 0 +725 374 306 4 3967 4106 10 0 487 +726 436 295 -22 2037 2309 10 4 0 +727 371 315 -10 4659 4787 10 532 0 +728 27 464 -17 4945 5504 10 806 0 +729 3 471 -23 2649 3157 10 377 0 +730 418 269 -15 4771 4987 10 509 0 +731 90 477 18 858 1363 10 0 876 +732 141 426 23 1980 2392 10 0 212 +733 418 251 -35 4564 5131 10 254 0 +734 57 183 -30 4387 4536 10 754 0 +735 29 462 -23 5144 5453 10 587 0 +736 55 318 -26 948 1668 10 705 0 +737 18 24 -22 2375 2771 10 826 0 +738 263 153 12 1455 1965 10 0 943 +739 289 220 19 49 466 10 0 488 +740 84 255 13 1043 1333 10 0 572 +741 159 299 -25 4023 4222 10 510 0 +742 485 104 -14 3066 3409 10 793 0 +743 178 135 -12 6093 6137 10 774 0 +744 389 255 15 3085 3317 10 0 370 +745 457 280 -29 3988 4130 10 772 0 +746 171 24 -15 5447 5740 10 166 0 +747 330 371 1 2102 2486 10 0 621 +748 10 237 -31 2352 2699 10 866 0 +749 458 213 -12 4431 4715 10 94 0 +750 257 391 22 6347 6838 10 0 539 +751 482 184 -14 4289 4686 10 234 0 +752 222 331 10 1892 2545 10 0 562 +753 332 5 14 4113 4270 10 0 165 +754 47 208 30 763 1169 10 0 734 +755 489 437 29 2717 3058 10 0 715 +756 165 59 27 3702 3961 10 0 981 +757 211 446 15 4418 4689 10 0 87 +758 225 488 -33 2375 2829 10 984 0 +759 355 485 -23 5705 6247 10 662 0 +760 441 374 10 714 1192 10 0 195 +761 399 175 13 2892 3204 10 0 340 +762 103 464 22 4953 5350 10 0 177 +763 244 13 -8 4089 4135 10 51 0 +764 51 360 -21 4533 4743 10 790 0 +765 44 115 24 935 1035 10 0 932 +766 312 453 -3 2034 2483 10 489 0 +767 64 198 -8 4198 4630 10 222 0 +768 67 451 -18 4878 4966 10 291 0 +769 371 71 21 1106 1308 10 0 853 +770 439 156 2 2015 2312 10 0 425 +771 105 474 27 1765 2121 10 0 438 +772 366 288 29 2747 2842 10 0 745 +773 415 207 18 3421 3899 10 0 270 +774 58 39 12 4430 4993 10 0 743 +775 197 202 -3 4742 5008 10 845 0 +776 442 5 16 1315 1367 10 0 443 +777 71 12 2 880 1583 10 0 117 +778 74 215 10 823 1127 10 0 277 +779 347 192 -6 5841 6185 10 244 0 +780 178 420 -10 4262 4429 10 448 0 +781 186 135 -7 2883 2978 10 283 0 +782 176 199 28 272 447 10 0 991 +783 438 5 18 1961 2552 10 0 877 +784 150 68 -18 1631 1872 10 446 0 +785 185 434 -18 2179 2529 10 155 0 +786 215 79 5 759 1150 10 0 107 +787 177 486 -15 6360 6538 10 211 0 +788 49 437 7 1427 2112 10 0 810 +789 100 66 -22 5439 5879 10 84 0 +790 35 344 21 3286 3738 10 0 764 +791 433 447 20 3082 3392 10 0 86 +792 372 97 13 729 1101 10 0 412 +793 344 203 14 542 916 10 0 742 +794 423 170 -24 1973 2251 10 630 0 +795 171 188 30 2357 2727 10 0 275 +796 64 5 -15 4318 4833 10 696 0 +797 371 163 21 3193 3550 10 0 363 +798 398 210 -31 338 888 10 624 0 +799 48 437 -16 3056 3493 10 321 0 +800 392 1 -25 2172 2790 10 704 0 +801 195 464 20 5989 6462 0 0 1006 +802 211 248 26 39 414 10 0 60 +803 293 228 19 53 334 10 0 512 +804 23 235 43 4029 4278 10 0 859 +805 213 185 21 113 485 10 0 240 +806 172 292 17 239 616 10 0 728 +807 228 287 21 43 471 10 0 887 +808 387 394 8 4304 4597 10 0 542 +809 374 232 -36 280 722 10 220 0 +810 48 366 -7 2894 3170 10 788 0 +811 44 311 -12 1650 1730 10 387 0 +812 447 272 -19 1463 1728 10 371 0 +813 132 477 25 1136 1602 10 0 56 +814 80 117 24 3237 3476 10 0 576 +815 11 403 -22 1286 1577 10 235 0 +816 144 220 35 279 602 10 0 368 +817 473 491 23 1629 1798 10 0 643 +818 210 219 7 60 345 10 0 383 +819 452 484 -17 4907 5440 10 33 0 +820 365 28 9 1052 1214 10 0 538 +821 498 456 27 5456 5912 10 0 854 +822 84 453 19 4815 5089 10 0 907 +823 91 427 -5 3374 3806 10 556 0 +824 178 72 -24 2840 3335 10 608 0 +825 409 155 -20 565 917 10 921 0 +826 132 151 22 298 934 10 0 737 +827 136 430 14 2667 3134 10 0 46 +828 292 104 26 1160 1392 10 0 631 +829 443 167 17 1993 2472 10 0 91 +830 321 149 -14 5428 6088 10 366 0 +831 235 13 27 1303 1687 10 0 309 +832 166 440 12 625 1036 10 0 228 +833 112 433 29 750 1250 10 0 175 +834 452 172 9 2366 2620 10 0 661 +835 37 281 17 1722 2343 10 0 596 +836 414 378 23 1912 2167 10 0 121 +837 475 352 33 1211 1388 10 0 713 +838 400 71 -19 5475 5621 10 63 0 +839 286 244 -20 5063 5329 10 606 0 +840 429 389 18 1622 1891 10 0 555 +841 92 76 -21 4567 4665 10 423 0 +842 124 111 -32 3185 3250 10 711 0 +843 268 458 24 2050 2254 10 0 945 +844 352 63 -9 4566 4979 10 68 0 +845 49 118 3 4270 4422 10 0 775 +846 398 329 17 577 765 10 0 700 +847 382 9 -26 918 1377 10 571 0 +848 229 322 -18 6461 6942 10 96 0 +849 279 355 9 327 1124 10 0 653 +850 266 221 9 33 443 10 0 32 +851 142 80 12 1874 2183 10 0 706 +852 359 287 24 132 788 10 0 622 +853 482 104 -21 3111 3468 10 769 0 +854 284 457 -27 5775 6333 10 821 0 +855 64 294 12 4182 4748 10 0 671 +856 404 59 -11 3559 3864 10 450 0 +857 68 160 -13 4404 4803 10 408 0 +858 211 411 15 4496 4796 10 0 196 +859 30 155 -43 5044 5320 10 804 0 +860 240 34 -10 6135 6462 10 619 0 +861 107 374 -10 3485 3949 10 445 0 +862 404 140 -8 4972 5217 10 409 0 +863 436 467 12 2869 3140 10 0 623 +864 421 386 29 3190 3525 10 0 23 +865 182 480 -32 1310 1728 10 271 0 +866 9 233 31 1072 1498 10 0 748 +867 110 251 23 1847 2254 10 0 875 +868 19 38 15 3277 3621 10 0 891 +869 46 248 -18 3179 3452 10 629 0 +870 308 199 -22 5953 6233 10 568 0 +871 423 221 9 1020 1167 10 0 314 +872 313 391 5 397 919 10 0 268 +873 413 345 -15 4863 5002 10 313 0 +874 278 450 -15 5345 5774 10 214 0 +875 94 497 -23 2946 3431 10 867 0 +876 7 382 -18 2895 3388 10 731 0 +877 493 111 -18 1970 2479 10 783 0 +878 392 87 -8 4565 5016 10 297 0 +879 13 394 -21 1452 1649 10 284 0 +880 259 301 25 195 716 10 0 203 +881 351 233 -29 5530 5972 10 444 0 +882 313 493 -33 4670 4994 10 974 0 +883 65 62 15 3646 4285 10 0 294 +884 417 212 -9 3547 3855 10 940 0 +885 450 194 -13 2340 2778 10 451 0 +886 470 138 -29 5275 5961 10 441 0 +887 190 267 -21 6849 7300 10 807 0 +888 248 214 -18 5623 6330 10 311 0 +889 50 383 20 865 1335 10 0 272 +890 244 422 14 2013 2409 10 0 249 +891 60 29 -15 5292 5729 10 868 0 +892 5 445 -22 1151 1456 10 349 0 +893 490 276 33 973 1049 10 0 975 +894 441 100 -5 3239 3868 10 424 0 +895 162 388 -4 4374 4754 10 657 0 +896 244 277 -2 5159 5372 10 579 0 +897 406 408 -8 5712 6057 10 988 0 +898 265 240 9 18 429 10 0 651 +899 130 186 16 472 698 10 0 398 +900 382 110 -24 4308 4712 10 40 0 +901 142 14 18 3115 3686 10 0 300 +902 352 487 -25 3300 4034 10 183 0 +903 307 52 -9 3530 3954 10 574 0 +904 418 399 -9 1678 1943 10 677 0 +905 196 56 -12 2369 2626 10 960 0 +906 66 31 -30 4124 4384 10 601 0 +907 90 496 -19 5371 5912 10 822 0 +908 480 136 22 731 1322 10 0 531 +909 65 82 -22 2807 3230 10 182 0 +910 48 293 22 1150 1177 10 0 607 +911 105 181 -20 5981 6388 10 304 0 +912 215 282 -10 5644 5999 10 19 0 +913 257 133 19 3361 3657 10 0 415 +914 77 465 -18 932 1276 10 678 0 +915 43 135 31 629 1266 10 0 692 +916 27 444 -15 4069 4693 10 516 0 +917 357 290 24 150 764 10 0 97 +918 38 15 -27 4195 4654 10 970 0 +919 80 337 -11 4315 4758 10 71 0 +920 36 451 -19 3293 3938 10 941 0 +921 291 251 20 41 662 10 0 825 +922 195 111 -14 3971 4133 10 407 0 +923 383 17 -14 3563 4080 10 26 0 +924 53 466 -14 1186 1615 10 583 0 +925 114 102 21 1849 2330 10 0 118 +926 350 199 21 4761 4970 10 0 287 +927 405 349 -36 2119 2179 10 436 0 +928 472 248 11 2980 3816 10 0 74 +929 333 293 27 2302 2755 10 0 101 +930 174 397 -7 4710 5368 10 13 0 +931 2 264 -8 2551 2806 10 174 0 +932 7 82 -24 1460 1953 10 765 0 +933 34 329 2 4120 4345 10 0 625 +934 158 179 37 442 487 10 0 644 +935 421 499 -19 5226 5657 10 263 0 +936 345 431 -35 1270 1610 10 163 0 +937 370 262 15 4326 4590 10 0 369 +938 77 172 23 2920 3484 10 0 225 +939 87 51 -26 1977 2257 10 258 0 +940 468 352 9 2964 3301 10 0 884 +941 63 420 19 1954 2323 10 0 920 +942 347 184 15 4266 4483 10 0 472 +943 206 174 -12 2947 3571 10 738 0 +944 209 212 -21 5936 6406 10 593 0 +945 466 362 -24 4624 4715 10 843 0 +946 201 278 13 198 253 10 0 209 +947 206 172 -28 2952 3471 10 216 0 +948 471 94 30 3862 4249 10 0 344 +949 331 134 -13 4364 4745 10 675 0 +950 274 261 -28 6843 6933 10 641 0 +951 219 215 32 46 710 10 0 133 +952 349 76 15 4014 4351 10 0 637 +953 86 189 21 798 1136 10 0 654 +954 336 493 -8 6006 6057 10 39 0 +955 7 194 -20 3632 4099 10 640 0 +956 492 335 -26 3249 3497 10 551 0 +957 248 386 -24 1321 1825 10 170 0 +958 463 406 23 3320 3659 10 0 359 +959 199 438 -14 5315 5688 10 149 0 +960 135 30 12 1572 2343 10 0 905 +961 447 267 19 3716 4240 10 0 69 +962 235 33 -13 5322 5494 10 70 0 +963 63 155 -3 3782 4056 10 152 0 +964 294 421 -23 6057 6666 10 115 0 +965 318 99 -18 4654 5168 10 361 0 +966 21 146 21 1772 2242 10 0 312 +967 30 7 -28 4750 4879 10 485 0 +968 410 399 25 722 1268 10 0 61 +969 405 187 34 4814 5311 10 0 229 +970 109 56 27 754 1165 10 0 918 +971 212 47 20 3135 3394 10 0 540 +972 479 387 -26 1522 1778 10 351 0 +973 167 291 -24 6558 6637 10 687 0 +974 259 498 33 4123 4596 10 0 882 +975 461 182 -33 2429 2722 10 893 0 +976 277 428 -15 1876 2167 10 435 0 +977 290 328 7 584 686 10 0 85 +978 146 313 -5 4580 5103 10 317 0 +979 40 304 -2 4389 4888 10 264 0 +980 56 268 28 3936 4695 10 0 566 +981 104 28 -27 5896 6008 10 756 0 +982 370 493 22 2301 2389 10 0 999 +983 136 265 12 357 563 10 0 660 +984 247 306 33 56 778 10 0 758 +985 241 38 16 1789 2584 10 0 253 +986 180 162 9 722 786 10 0 41 +987 253 118 19 2177 2321 10 0 136 +988 413 391 8 902 955 10 0 897 +989 380 350 15 3390 3662 10 0 205 +990 391 112 -20 3958 4165 10 365 0 +991 86 199 -28 873 1470 10 782 0 +992 91 326 4 3470 4355 10 0 495 +993 287 256 18 37 272 10 0 374 +994 203 211 -19 5009 5562 10 241 0 +995 79 80 19 5361 5816 10 0 273 +996 32 319 21 1582 1742 10 0 611 +997 167 445 -14 5515 5902 10 563 0 +998 439 237 11 3700 3928 10 0 690 +999 373 418 -22 4906 5289 10 982 0 +1000 26 342 12 996 1691 10 0 610 +1001 62 94 -16 3590 4134 10 45 0 +1002 411 379 -25 4599 5068 10 380 0 +1003 181 185 -19 6338 6693 10 400 0 +1004 436 123 -40 788 1013 10 11 0 +1005 48 162 -15 656 1201 10 12 0 +1006 195 464 -20 5989 6462 10 801 0 +1007 273 255 -18 5796 6260 10 6 0 +1008 388 44 -22 4188 4979 10 478 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1101.txt b/jsprit-instances/instances/lilim/1000/LRC1101.txt new file mode 100644 index 00000000..5a2bb37c --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1101.txt @@ -0,0 +1,1056 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 -29 892 922 10 651 0 +2 214 394 10 231 261 10 0 347 +3 476 483 -30 355 385 10 999 0 +4 352 487 27 902 932 10 0 968 +5 230 197 -20 122 152 10 763 0 +6 175 239 23 75 105 10 0 817 +7 133 202 -20 461 491 10 753 0 +8 328 458 -16 768 798 10 807 0 +9 25 499 10 445 475 0 0 1001 +10 226 423 15 197 227 10 0 141 +11 313 282 20 163 193 10 0 886 +12 60 454 10 347 377 10 0 387 +13 239 486 -31 1482 1512 10 860 0 +14 102 264 10 148 178 10 0 86 +15 408 452 -20 272 302 10 630 0 +16 451 62 5 282 312 10 0 985 +17 203 390 40 159 189 10 0 383 +18 92 233 -10 224 254 10 900 0 +19 7 300 -20 345 375 10 615 0 +20 409 90 -20 258 288 10 814 0 +21 307 108 10 237 267 10 0 429 +22 347 54 10 295 325 0 0 1034 +23 406 87 -10 313 343 10 670 0 +24 371 332 14 530 560 10 0 459 +25 116 466 20 254 284 10 0 328 +26 441 265 40 197 227 10 0 918 +27 130 140 17 194 224 0 0 1025 +28 80 117 24 824 854 10 0 832 +29 421 387 -10 801 831 10 55 0 +30 83 300 -30 500 530 10 414 0 +31 136 52 -10 293 323 10 293 0 +32 18 462 -20 398 428 10 376 0 +33 390 120 -30 1004 1034 10 180 0 +34 188 119 -20 975 1005 10 272 0 +35 467 114 -14 376 406 10 594 0 +36 440 292 -10 940 970 10 522 0 +37 268 400 -20 243 273 10 878 0 +38 391 202 14 148 178 10 0 716 +39 377 432 -5 831 861 10 741 0 +40 80 290 10 197 227 10 0 803 +41 439 15 20 343 373 10 0 337 +42 307 52 -13 920 950 10 129 0 +43 111 192 -12 1199 1229 10 902 0 +44 131 56 -21 256 286 10 864 0 +45 88 286 -20 252 282 10 449 0 +46 69 414 6 1263 1293 10 0 246 +47 41 232 16 209 239 10 0 153 +48 323 77 -20 1405 1435 10 528 0 +49 340 416 -3 321 351 10 710 0 +50 86 199 23 278 308 10 0 772 +51 314 124 20 231 261 10 0 709 +52 375 191 -30 167 197 10 360 0 +53 226 175 -18 1694 1724 10 435 0 +54 242 106 -23 1268 1298 10 663 0 +55 417 417 10 332 362 10 0 29 +56 419 459 -10 316 346 10 582 0 +57 389 11 20 323 353 10 0 322 +58 450 416 25 577 607 10 0 910 +59 246 255 -10 113 143 10 252 0 +60 71 333 10 197 227 10 0 152 +61 105 474 -10 471 501 10 917 0 +62 20 489 -10 383 413 10 606 0 +63 388 331 -30 160 190 10 792 0 +64 92 259 4 399 429 10 0 562 +65 200 261 10 166 196 10 0 610 +66 400 288 30 154 184 10 0 775 +67 299 285 -24 1254 1284 10 224 0 +68 378 199 10 207 237 10 0 677 +69 325 147 -28 1187 1217 10 400 0 +70 421 386 -20 824 854 10 821 0 +71 404 447 20 250 280 10 0 213 +72 412 478 -20 960 990 10 253 0 +73 26 67 -20 1317 1347 10 137 0 +74 358 183 20 234 264 10 0 527 +75 30 302 10 267 297 10 0 513 +76 176 470 14 547 577 10 0 957 +77 96 270 20 162 192 10 0 618 +78 243 408 -10 1434 1464 10 549 0 +79 60 29 -30 1363 1393 10 563 0 +80 34 169 -35 484 514 10 508 0 +81 407 280 10 209 239 10 0 603 +82 277 403 10 175 205 10 0 439 +83 498 456 -10 1406 1436 10 962 0 +84 384 491 -10 348 378 10 164 0 +85 355 174 -30 715 745 10 445 0 +86 97 288 -10 1284 1314 10 14 0 +87 316 284 -30 125 155 10 402 0 +88 334 403 26 174 204 10 0 915 +89 415 223 -25 305 335 10 275 0 +90 230 320 -10 1192 1222 10 507 0 +91 432 199 -31 639 669 10 592 0 +92 92 18 8 1124 1154 10 0 109 +93 273 300 30 55 85 10 0 271 +94 269 112 -24 1263 1293 10 633 0 +95 429 389 -10 424 454 10 431 0 +96 371 71 21 287 317 10 0 620 +97 5 297 -10 331 361 10 382 0 +98 414 378 -13 495 525 10 598 0 +99 38 15 -30 1091 1121 10 914 0 +100 2 295 -20 306 336 10 993 0 +101 237 254 20 83 113 10 0 659 +102 54 445 10 308 338 10 0 785 +103 382 110 -20 1112 1142 10 521 0 +104 438 488 18 327 357 10 0 936 +105 395 331 20 217 247 10 0 338 +106 230 487 -23 1130 1160 10 622 0 +107 249 407 10 174 204 10 0 853 +108 488 26 30 433 463 10 0 820 +109 151 81 -8 1558 1588 10 92 0 +110 483 14 -20 363 393 10 998 0 +111 0 422 8 821 851 10 0 295 +112 429 67 16 732 762 10 0 673 +113 195 464 -5 1541 1571 10 417 0 +114 356 256 19 106 136 10 0 690 +115 264 180 -12 1681 1711 10 796 0 +116 94 235 20 156 186 0 0 1051 +117 474 96 30 271 301 10 0 576 +118 268 52 -30 306 336 10 981 0 +119 44 440 -10 789 819 10 924 0 +120 7 382 27 770 800 10 0 509 +121 459 53 -19 1122 1152 10 778 0 +122 491 25 -20 409 439 10 708 0 +123 439 243 20 314 344 10 0 260 +124 210 185 20 76 106 10 0 346 +125 150 68 23 423 453 10 0 158 +126 201 270 10 52 82 10 0 374 +127 0 188 -18 932 962 10 614 0 +128 103 464 -19 1273 1303 10 140 0 +129 325 56 13 796 826 10 0 42 +130 44 344 -30 1079 1109 10 869 0 +131 418 75 11 448 478 10 0 804 +132 472 57 -10 1295 1325 10 813 0 +133 460 328 13 224 254 10 0 194 +134 89 270 -20 204 234 10 304 0 +135 374 190 20 143 173 10 0 602 +136 463 253 23 1047 1077 10 0 801 +137 97 93 20 240 270 10 0 73 +138 163 472 -20 653 683 10 308 0 +139 29 336 -20 332 362 10 381 0 +140 84 453 19 1223 1253 10 0 128 +141 294 421 -15 1575 1605 10 10 0 +142 343 62 10 357 387 10 0 236 +143 371 193 20 133 163 10 0 806 +144 142 372 -21 162 192 10 451 0 +145 66 88 -20 830 860 10 525 0 +146 395 332 10 206 236 10 0 934 +147 93 413 17 226 256 10 0 880 +148 267 394 10 259 289 10 0 862 +149 249 258 -30 127 157 10 779 0 +150 472 129 10 252 282 10 0 444 +151 87 3 13 1433 1463 0 0 1003 +152 62 326 -10 286 316 10 60 0 +153 212 186 -16 1707 1737 10 47 0 +154 241 402 11 1025 1055 10 0 257 +155 439 266 -14 189 219 10 644 0 +156 79 80 -4 1382 1412 10 526 0 +157 62 453 10 295 325 10 0 703 +158 188 151 -23 1297 1327 10 125 0 +159 386 154 31 1101 1131 0 0 1009 +160 38 301 20 296 326 10 0 569 +161 192 265 -10 124 154 10 647 0 +162 371 192 30 134 164 10 0 379 +163 64 294 12 1101 1131 10 0 842 +164 381 494 10 333 363 10 0 84 +165 437 12 -20 330 360 10 364 0 +166 186 135 -10 718 748 10 859 0 +167 459 10 10 335 365 10 0 829 +168 175 422 -13 1446 1476 10 434 0 +169 274 48 10 211 241 10 0 403 +170 488 173 -20 279 309 10 591 0 +171 398 97 10 212 242 10 0 861 +172 385 17 -10 809 839 10 844 0 +173 180 283 -8 744 774 10 698 0 +174 71 12 2 297 327 10 0 418 +175 343 49 10 265 295 10 0 997 +176 248 251 20 2 32 0 0 1004 +177 7 194 29 951 981 10 0 970 +178 322 290 -27 1479 1509 10 655 0 +179 410 399 25 234 264 10 0 468 +180 398 103 30 278 308 10 0 33 +181 385 285 -20 868 898 10 567 0 +182 179 497 -10 1411 1441 10 847 0 +183 464 13 20 385 415 0 0 1042 +184 492 335 -20 828 858 10 486 0 +185 27 464 21 1291 1321 10 0 972 +186 231 29 -6 1226 1256 10 543 0 +187 157 38 -30 1048 1078 10 743 0 +188 439 268 -15 298 328 10 989 0 +189 149 214 -20 482 512 10 500 0 +190 187 73 18 292 322 10 0 317 +191 429 169 -9 903 933 10 390 0 +192 350 199 -20 1201 1231 10 350 0 +193 60 231 32 1026 1056 10 0 420 +194 448 404 -13 599 629 10 133 0 +195 481 20 20 347 377 10 0 288 +196 436 25 -20 1282 1312 10 231 0 +197 111 459 20 359 389 0 0 1052 +198 389 17 10 366 396 10 0 546 +199 148 208 -10 526 556 10 754 0 +200 475 477 -14 405 435 10 948 0 +201 390 325 30 251 281 10 0 826 +202 346 354 8 817 847 10 0 758 +203 91 266 10 233 263 10 0 427 +204 17 65 -10 327 357 10 881 0 +205 391 112 -10 1000 1030 10 736 0 +206 224 203 20 53 83 10 0 706 +207 426 231 -9 1028 1058 10 471 0 +208 260 472 -20 1036 1066 10 327 0 +209 265 0 10 896 926 10 0 765 +210 391 293 20 226 256 10 0 416 +211 411 421 20 315 345 10 0 662 +212 132 30 -30 326 356 10 457 0 +213 475 480 -20 379 409 10 71 0 +214 286 244 -30 1284 1314 10 850 0 +215 436 237 20 186 216 10 0 912 +216 402 284 30 165 195 10 0 329 +217 287 397 12 564 594 10 0 834 +218 272 420 -12 1386 1416 10 324 0 +219 477 120 10 342 372 10 0 865 +220 145 434 20 233 263 10 0 839 +221 33 286 11 1546 1576 0 0 1030 +222 370 262 15 1099 1129 10 0 269 +223 393 20 -10 391 421 10 282 0 +224 330 308 24 1170 1200 10 0 67 +225 246 398 40 148 178 10 0 330 +226 482 184 -22 1107 1137 10 784 0 +227 451 305 13 208 238 10 0 577 +228 226 316 21 70 100 10 0 465 +229 110 459 -10 348 378 10 585 0 +230 244 250 10 12 42 10 0 991 +231 458 16 20 313 343 10 0 196 +232 390 34 -20 1060 1090 10 377 0 +233 423 214 20 217 247 10 0 958 +234 219 215 32 46 76 10 0 248 +235 326 118 10 152 182 10 0 674 +236 365 74 -10 848 878 10 142 0 +237 331 356 -10 712 742 10 354 0 +238 210 398 10 204 234 10 0 876 +239 403 93 10 341 371 10 0 669 +240 248 404 30 154 184 10 0 487 +241 65 62 -15 976 1006 10 559 0 +242 460 13 20 322 352 10 0 320 +243 0 293 -10 279 309 10 575 0 +244 211 248 26 39 69 10 0 823 +245 484 174 -20 265 295 10 888 0 +246 175 352 -6 1655 1685 10 46 0 +247 455 168 21 867 897 10 0 648 +248 224 191 -32 81 111 10 234 0 +249 439 156 -40 526 556 10 637 0 +250 434 359 -9 1392 1422 10 649 0 +251 118 314 26 338 368 10 0 467 +252 234 246 10 65 95 10 0 59 +253 406 450 20 259 289 10 0 72 +254 75 118 -12 409 439 10 904 0 +255 115 395 -7 815 845 10 980 0 +256 329 456 19 249 279 10 0 680 +257 218 403 -11 1319 1349 10 154 0 +258 149 341 6 404 434 10 0 744 +259 253 74 -14 1350 1380 10 564 0 +260 436 241 -20 327 357 10 123 0 +261 238 203 10 94 124 10 0 413 +262 405 455 40 341 371 10 0 277 +263 485 27 -30 446 476 10 365 0 +264 323 118 20 161 191 10 0 841 +265 330 371 1 559 589 0 0 1018 +266 25 65 -20 376 406 10 943 0 +267 406 96 20 219 249 10 0 969 +268 49 451 20 284 314 10 0 899 +269 307 249 -15 1377 1407 10 222 0 +270 178 135 -16 1514 1544 10 372 0 +271 299 353 -30 114 144 10 93 0 +272 236 213 20 39 69 10 0 34 +273 355 177 20 127 157 10 0 316 +274 394 23 -10 404 434 10 1000 0 +275 306 235 25 57 87 10 0 89 +276 90 477 18 277 307 10 0 752 +277 379 486 -40 672 702 10 262 0 +278 435 16 -30 367 397 10 616 0 +279 8 497 -20 408 438 10 705 0 +280 150 484 -20 625 655 10 746 0 +281 213 399 18 234 264 10 0 448 +282 391 18 10 378 408 10 0 223 +283 111 392 -30 1169 1199 10 975 0 +284 330 281 -20 1330 1360 10 428 0 +285 344 203 14 167 197 10 0 678 +286 91 235 -10 269 299 10 742 0 +287 346 60 -30 321 351 10 787 0 +288 483 27 -20 458 488 10 195 0 +289 382 498 -10 309 339 10 681 0 +290 457 492 -30 508 538 10 702 0 +291 291 213 -11 1258 1288 10 769 0 +292 154 374 -20 937 967 10 335 0 +293 225 196 10 59 89 10 0 31 +294 94 40 24 1068 1098 10 0 895 +295 0 356 -8 1086 1116 10 111 0 +296 297 283 28 1349 1379 0 0 1040 +297 371 423 10 211 241 10 0 939 +298 417 217 30 189 219 10 0 672 +299 500 228 -27 782 812 10 493 0 +300 412 214 10 165 195 10 0 351 +301 442 289 25 195 225 10 0 707 +302 157 269 -10 1576 1606 10 930 0 +303 440 241 -10 301 331 10 573 0 +304 100 266 20 150 180 10 0 134 +305 111 178 18 156 186 10 0 462 +306 91 101 10 298 328 10 0 438 +307 25 307 10 249 279 10 0 496 +308 135 400 20 299 329 10 0 138 +309 58 458 -30 323 353 10 987 0 +310 133 26 -26 312 342 10 373 0 +311 211 386 20 141 171 10 0 657 +312 94 97 20 218 248 10 0 800 +313 30 155 -21 1280 1310 10 510 0 +314 208 184 20 78 108 10 0 388 +315 394 333 20 194 224 10 0 722 +316 355 180 -20 137 167 10 273 0 +317 241 180 -18 1695 1725 10 190 0 +318 21 485 30 338 368 10 0 489 +319 80 251 -10 304 334 10 408 0 +320 476 61 -20 449 479 10 242 0 +321 406 94 10 228 258 10 0 824 +322 364 71 -20 1348 1378 10 57 0 +323 418 221 -10 291 321 10 731 0 +324 274 441 12 695 725 10 0 218 +325 304 97 20 182 212 10 0 699 +326 297 102 10 155 185 10 0 720 +327 250 405 20 162 192 10 0 208 +328 111 463 -20 322 352 10 25 0 +329 408 279 -30 220 250 10 216 0 +330 263 418 -40 278 308 10 225 0 +331 480 119 7 628 658 10 0 561 +332 420 383 -20 982 1012 10 897 0 +333 142 14 -10 835 865 10 621 0 +334 73 328 20 193 223 10 0 645 +335 50 438 20 337 367 10 0 292 +336 441 7 20 392 422 10 0 646 +337 462 14 -20 397 427 10 41 0 +338 360 294 -20 1418 1448 10 105 0 +339 58 39 -10 1163 1193 10 530 0 +340 58 391 16 882 912 10 0 770 +341 410 285 20 193 223 10 0 693 +342 96 97 20 217 247 10 0 688 +343 21 64 20 352 382 10 0 816 +344 238 210 30 134 164 10 0 730 +345 479 121 -30 308 338 10 361 0 +346 200 178 -20 94 124 10 124 0 +347 216 341 -10 654 684 10 2 0 +348 48 437 -10 804 834 10 550 0 +349 200 270 -30 59 89 10 838 0 +350 357 181 20 149 179 10 0 192 +351 476 174 -10 324 354 10 300 0 +352 400 286 10 154 184 10 0 992 +353 351 481 10 322 352 10 0 409 +354 270 400 10 151 181 10 0 237 +355 95 234 -10 163 193 10 395 0 +356 128 113 22 363 393 10 0 789 +357 133 455 25 808 838 10 0 697 +358 16 463 -20 375 405 10 554 0 +359 59 388 -10 663 693 10 586 0 +360 376 190 30 155 185 10 0 52 +361 481 122 30 295 325 10 0 345 +362 266 405 -30 217 247 10 436 0 +363 374 232 33 125 155 10 0 600 +364 398 20 20 273 303 10 0 165 +365 481 26 30 321 351 10 0 263 +366 63 444 -30 380 410 10 782 0 +367 89 290 20 168 198 10 0 811 +368 246 314 -10 1445 1475 10 664 0 +369 40 304 -25 1145 1175 10 907 0 +370 262 369 15 129 159 10 0 974 +371 323 29 -2 1137 1167 10 750 0 +372 89 65 16 720 750 10 0 270 +373 144 35 26 239 269 10 0 310 +374 200 265 -10 152 182 10 126 0 +375 436 264 20 186 216 10 0 764 +376 15 457 20 323 353 10 0 32 +377 397 20 20 280 310 10 0 232 +378 328 491 21 678 708 10 0 463 +379 399 175 -30 747 777 10 162 0 +380 432 2 -9 467 497 10 908 0 +381 63 336 20 266 296 10 0 139 +382 6 296 10 320 350 10 0 97 +383 146 376 -40 234 264 10 17 0 +384 295 247 -20 1303 1333 10 891 0 +385 235 33 -27 1337 1367 10 700 0 +386 233 204 -10 54 84 10 660 0 +387 142 360 -10 1532 1562 10 12 0 +388 177 156 -20 167 197 10 314 0 +389 315 287 30 148 178 10 0 973 +390 452 172 9 608 638 10 0 191 +391 263 153 12 412 442 10 0 406 +392 493 493 -10 856 886 10 848 0 +393 320 283 30 111 141 10 0 524 +394 64 5 14 1129 1159 10 0 555 +395 95 235 10 155 185 10 0 355 +396 203 211 20 1306 1336 0 0 1054 +397 16 497 -30 426 456 10 593 0 +398 348 348 -12 935 965 10 863 0 +399 485 104 -5 794 824 10 977 0 +400 330 147 28 848 878 10 0 69 +401 443 237 20 193 223 10 0 843 +402 316 286 30 137 167 10 0 87 +403 335 46 -10 1342 1372 10 169 0 +404 381 495 20 322 352 10 0 480 +405 364 173 30 180 210 0 0 1002 +406 267 162 -12 1449 1479 10 391 0 +407 214 245 8 36 66 10 0 696 +408 92 234 10 235 265 10 0 319 +409 347 459 -10 479 509 10 353 0 +410 30 7 -15 1189 1219 10 574 0 +411 120 37 -10 775 805 10 916 0 +412 397 153 29 882 912 10 0 595 +413 210 29 -10 1051 1081 10 261 0 +414 87 285 30 241 271 10 0 30 +415 132 32 18 784 814 10 0 423 +416 390 294 -20 237 267 10 210 0 +417 67 451 5 1216 1246 10 0 113 +418 24 68 -2 414 444 10 174 0 +419 146 439 10 259 289 10 0 503 +420 209 212 -32 1528 1558 10 193 0 +421 6 292 10 247 277 10 0 728 +422 18 63 10 339 369 10 0 687 +423 149 98 -18 1165 1195 10 415 0 +424 91 268 10 245 275 10 0 737 +425 103 177 -20 626 656 10 944 0 +426 367 178 -19 180 210 10 727 0 +427 225 269 -10 1271 1301 10 203 0 +428 443 246 20 230 260 10 0 284 +429 306 42 -10 477 507 10 21 0 +430 374 306 -20 994 1024 10 983 0 +431 413 421 10 303 333 10 0 95 +432 470 405 -30 926 956 10 491 0 +433 33 278 -28 1487 1517 10 882 0 +434 149 458 13 1164 1194 10 0 168 +435 257 57 18 1226 1256 10 0 53 +436 272 403 30 190 220 10 0 362 +437 221 291 9 50 80 10 0 996 +438 1 101 -10 1257 1287 10 306 0 +439 332 459 -10 369 399 10 82 0 +440 220 392 -30 258 288 10 855 0 +441 253 50 27 226 256 10 0 852 +442 250 441 -7 756 786 10 475 0 +443 471 484 -20 340 370 10 773 0 +444 480 152 -10 1022 1052 10 150 0 +445 404 83 30 298 328 10 0 85 +446 476 94 20 274 304 10 0 675 +447 458 213 -13 1128 1158 10 890 0 +448 215 395 -18 242 272 10 281 0 +449 85 288 20 182 212 10 0 45 +450 179 75 -23 740 770 10 578 0 +451 228 287 21 43 73 10 0 144 +452 397 18 -20 292 322 10 474 0 +453 238 204 20 105 135 10 0 715 +454 488 3 -10 401 431 10 504 0 +455 407 88 -20 324 354 10 903 0 +456 459 14 20 315 345 10 0 531 +457 120 17 30 279 309 10 0 212 +458 235 316 -10 656 686 10 534 0 +459 370 382 -14 884 914 10 24 0 +460 405 454 -20 1303 1333 10 481 0 +461 17 458 10 433 463 10 0 551 +462 43 135 -18 236 266 10 305 0 +463 318 497 -21 854 884 10 378 0 +464 199 268 20 71 101 10 0 967 +465 111 467 -21 287 317 10 228 0 +466 138 438 -30 287 317 10 867 0 +467 172 314 -26 545 575 10 251 0 +468 494 468 -25 352 382 10 179 0 +469 35 303 20 221 251 10 0 857 +470 341 59 27 790 820 10 0 781 +471 423 221 9 258 288 10 0 207 +472 395 295 -30 211 241 10 960 0 +473 413 417 -17 356 386 10 931 0 +474 339 60 20 211 241 10 0 452 +475 277 428 7 490 520 10 0 442 +476 176 199 28 89 119 10 0 488 +477 265 240 9 18 48 10 0 927 +478 365 190 -18 1477 1507 10 529 0 +479 133 53 -20 279 309 10 733 0 +480 387 488 -20 362 392 10 404 0 +481 385 295 20 142 172 10 0 460 +482 491 369 28 730 760 10 0 831 +483 445 273 -10 258 288 10 492 0 +484 195 273 22 59 89 10 0 822 +485 313 493 20 1193 1223 0 0 1037 +486 495 227 20 344 374 10 0 184 +487 241 403 -30 220 250 10 240 0 +488 30 72 -28 432 462 10 476 0 +489 21 487 -30 350 380 10 318 0 +490 324 99 -30 338 368 10 636 0 +491 453 318 30 374 404 10 0 432 +492 443 272 10 270 300 10 0 483 +493 447 184 27 424 454 10 0 299 +494 366 288 29 684 714 10 0 711 +495 440 284 -10 852 882 10 768 0 +496 13 314 -10 245 275 10 307 0 +497 72 227 25 564 594 10 0 964 +498 377 385 6 866 896 0 0 1048 +499 477 478 20 392 422 10 0 840 +500 204 185 20 163 193 10 0 189 +501 226 191 20 93 123 0 0 1015 +502 330 138 -30 1110 1140 10 612 0 +503 185 434 -10 574 604 10 419 0 +504 483 22 10 334 364 10 0 454 +505 71 282 -10 642 672 10 535 0 +506 60 5 -28 1044 1074 10 942 0 +507 189 402 10 536 566 10 0 90 +508 134 211 35 122 152 10 0 80 +509 146 313 -27 1195 1225 10 120 0 +510 21 146 21 487 517 10 0 313 +511 37 281 17 493 523 0 0 1020 +512 416 417 -20 343 373 10 774 0 +513 44 311 -10 407 437 10 75 0 +514 361 181 20 197 227 0 0 1043 +515 444 242 10 216 246 10 0 718 +516 444 271 10 246 276 10 0 650 +517 359 179 20 162 192 10 0 926 +518 388 334 20 161 191 10 0 685 +519 401 164 -10 621 651 10 965 0 +520 499 316 -29 622 652 10 928 0 +521 399 106 20 302 332 10 0 103 +522 425 215 10 229 259 10 0 36 +523 407 98 -20 218 248 10 579 0 +524 406 460 -30 719 749 10 393 0 +525 88 95 20 270 300 10 0 145 +526 95 64 4 766 796 10 0 156 +527 306 229 -20 1320 1350 10 74 0 +528 273 55 20 196 226 10 0 48 +529 384 149 18 1197 1227 10 0 478 +530 122 35 10 250 280 10 0 339 +531 308 199 -20 1508 1538 10 456 0 +532 390 301 -10 165 195 10 909 0 +533 300 108 10 150 180 10 0 982 +534 267 400 10 232 262 10 0 458 +535 8 300 10 356 386 10 0 505 +536 105 181 19 1531 1561 0 0 1032 +537 398 325 -20 233 263 10 545 0 +538 166 247 1 84 114 10 0 635 +539 140 431 30 211 241 10 0 825 +540 253 118 19 547 577 10 0 565 +541 359 246 18 1423 1453 10 0 795 +542 321 277 10 75 105 0 0 1039 +543 168 59 6 366 396 10 0 186 +544 406 285 20 179 209 10 0 548 +545 391 334 20 181 211 10 0 537 +546 437 19 -10 1014 1044 10 198 0 +547 201 278 13 56 86 10 0 791 +548 435 267 -20 323 353 10 544 0 +549 245 408 10 204 234 10 0 78 +550 16 462 10 386 416 10 0 348 +551 107 374 -10 914 944 10 461 0 +552 477 97 10 283 313 10 0 780 +553 346 57 -30 308 338 10 870 0 +554 14 459 20 336 366 10 0 358 +555 102 6 -14 1458 1488 10 394 0 +556 359 287 24 115 145 10 0 894 +557 297 131 -40 1165 1195 10 884 0 +558 282 1 -30 1042 1072 10 849 0 +559 21 70 15 771 801 10 0 241 +560 440 244 -10 266 296 10 713 0 +561 482 104 -7 807 837 10 331 0 +562 120 261 -4 793 823 10 64 0 +563 125 29 30 283 313 10 0 79 +564 292 32 14 229 259 10 0 259 +565 262 92 -19 630 660 10 540 0 +566 68 160 21 1136 1166 10 0 799 +567 405 276 20 234 264 10 0 181 +568 277 50 10 201 231 10 0 797 +569 32 319 -20 401 431 10 160 0 +570 344 70 -20 1146 1176 10 941 0 +571 481 84 17 506 536 0 0 1011 +572 21 68 20 401 431 0 0 1007 +573 441 244 10 277 307 10 0 303 +574 57 43 15 1023 1053 10 0 410 +575 1 293 10 268 298 10 0 243 +576 481 96 -30 297 327 10 117 0 +577 471 368 -13 428 458 10 227 0 +578 236 126 23 124 154 10 0 450 +579 406 99 20 227 257 10 0 523 +580 303 186 -10 1354 1384 10 767 0 +581 225 369 38 121 151 0 0 1014 +582 412 453 10 297 327 10 0 56 +583 104 349 -18 1009 1039 10 634 0 +584 173 182 25 102 132 10 0 596 +585 111 464 10 311 341 10 0 229 +586 53 440 10 323 353 10 0 359 +587 69 336 20 218 248 10 0 601 +588 359 182 20 209 239 10 0 883 +589 13 459 20 347 377 10 0 858 +590 244 277 -10 1301 1331 10 932 0 +591 484 177 20 252 282 10 0 170 +592 452 206 31 492 522 10 0 91 +593 22 483 30 325 355 10 0 397 +594 452 110 14 340 370 10 0 35 +595 347 192 -29 1488 1518 10 412 0 +596 95 92 -25 253 283 10 584 0 +597 368 311 -20 926 956 10 691 0 +598 479 387 13 397 427 10 0 98 +599 479 169 -20 309 339 10 875 0 +600 497 266 -33 748 778 10 363 0 +601 66 336 -20 253 283 10 587 0 +602 376 195 -20 181 211 10 135 0 +603 401 281 -10 261 291 10 81 0 +604 441 177 -10 1001 1031 10 756 0 +605 231 203 20 67 97 10 0 695 +606 21 488 10 361 391 10 0 62 +607 231 204 -10 150 180 10 760 0 +608 122 422 -10 1457 1487 10 625 0 +609 65 453 30 282 312 10 0 812 +610 206 261 -10 182 212 10 65 0 +611 466 149 -20 1186 1216 10 776 0 +612 313 119 30 216 246 10 0 502 +613 90 274 20 179 209 10 0 641 +614 39 162 18 565 595 10 0 127 +615 35 306 20 229 259 10 0 19 +616 437 15 30 355 385 10 0 278 +617 307 412 8 404 434 0 0 1053 +618 79 291 -20 209 239 10 77 0 +619 64 437 -11 918 948 10 833 0 +620 376 92 -21 991 1021 10 96 0 +621 129 27 10 298 328 10 0 333 +622 196 489 23 1030 1060 10 0 106 +623 51 286 -20 1459 1489 10 830 0 +624 20 488 -10 372 402 10 905 0 +625 13 455 10 313 343 10 0 608 +626 170 347 15 436 466 10 0 745 +627 92 230 20 189 219 10 0 945 +628 117 467 10 254 284 10 0 734 +629 413 217 20 166 196 10 0 725 +630 405 450 20 253 283 10 0 15 +631 394 322 12 1025 1055 0 0 1021 +632 125 61 26 612 642 0 0 1050 +633 238 123 24 781 811 10 0 94 +634 11 403 18 343 373 10 0 583 +635 89 272 -1 192 222 10 538 0 +636 304 102 30 197 227 10 0 490 +637 478 121 40 319 349 10 0 249 +638 408 84 10 284 314 0 0 1012 +639 376 494 30 274 304 10 0 719 +640 20 73 10 290 320 10 0 851 +641 159 299 -20 1016 1046 10 613 0 +642 95 382 19 231 261 10 0 913 +643 352 63 -10 1178 1208 10 990 0 +644 365 274 14 117 147 10 0 155 +645 30 301 -20 278 308 10 334 0 +646 351 5 -20 496 526 10 336 0 +647 197 267 10 109 139 10 0 161 +648 498 171 -21 1256 1286 10 247 0 +649 468 352 9 768 798 10 0 250 +650 418 251 -10 1197 1227 10 516 0 +651 489 437 29 707 737 10 0 1 +652 251 63 14 987 1017 10 0 994 +653 132 55 10 267 297 0 0 1026 +654 281 96 1 1126 1156 0 0 1044 +655 333 293 27 617 647 10 0 178 +656 255 487 19 398 428 10 0 893 +657 207 400 -20 191 221 10 311 0 +658 469 489 -20 555 585 10 949 0 +659 244 254 -20 100 130 10 101 0 +660 233 207 10 46 76 10 0 386 +661 441 60 -20 1459 1489 10 873 0 +662 411 379 -20 1193 1223 10 211 0 +663 178 72 23 757 787 10 0 54 +664 51 447 10 294 324 10 0 368 +665 478 118 20 354 384 0 0 1005 +666 141 426 23 531 561 0 0 1033 +667 295 89 -20 742 772 10 682 0 +668 112 433 -9 235 265 10 984 0 +669 320 211 -10 993 1023 10 239 0 +670 400 103 10 256 286 10 0 23 +671 408 453 -10 283 313 10 771 0 +672 435 180 -30 225 255 10 298 0 +673 432 66 -16 1071 1101 10 112 0 +674 374 116 -10 587 617 10 235 0 +675 478 102 -20 324 354 10 446 0 +676 335 57 30 210 240 10 0 901 +677 385 239 -10 786 816 10 68 0 +678 386 245 -14 479 509 10 285 0 +679 208 396 20 176 206 0 0 1010 +680 380 489 -19 379 409 10 256 0 +681 380 498 10 297 327 10 0 289 +682 440 7 20 314 344 10 0 667 +683 434 245 -20 342 372 10 971 0 +684 90 232 -30 212 242 10 887 0 +685 389 334 -20 169 199 10 518 0 +686 241 205 -17 118 148 10 929 0 +687 18 24 -10 628 658 10 422 0 +688 57 183 -20 1100 1130 10 342 0 +689 59 457 30 334 364 0 0 1016 +690 442 243 -19 289 319 10 114 0 +691 402 281 20 250 280 10 0 597 +692 445 237 10 200 230 0 0 1027 +693 441 273 -20 282 312 10 341 0 +694 31 175 -30 247 277 10 786 0 +695 234 202 -20 80 110 10 605 0 +696 52 303 -8 441 471 10 407 0 +697 167 445 -25 1412 1442 10 357 0 +698 179 286 8 341 371 10 0 173 +699 269 48 -20 281 311 10 325 0 +700 165 59 27 943 973 10 0 385 +701 461 8 -40 369 399 10 809 0 +702 421 415 30 237 267 10 0 290 +703 59 459 -10 311 341 10 157 0 +704 24 492 -9 462 492 10 739 0 +705 55 449 20 278 308 10 0 279 +706 224 192 -20 70 100 10 206 0 +707 444 269 -25 234 264 10 301 0 +708 491 20 20 394 424 10 0 122 +709 313 126 -20 243 273 10 51 0 +710 283 438 3 231 261 10 0 49 +711 352 241 -29 792 822 10 494 0 +712 398 476 -20 418 448 10 986 0 +713 442 247 10 241 271 10 0 560 +714 217 207 26 1382 1412 0 0 1038 +715 233 87 -20 253 283 10 453 0 +716 479 127 -14 270 300 10 38 0 +717 6 53 -24 587 617 10 748 0 +718 478 300 -10 890 920 10 515 0 +719 378 493 -30 282 312 10 639 0 +720 303 78 -10 179 209 10 326 0 +721 344 62 -20 346 376 10 866 0 +722 371 315 -20 1166 1196 10 315 0 +723 200 78 -20 993 1023 10 810 0 +724 413 391 8 217 247 10 0 828 +725 415 216 -20 176 206 10 629 0 +726 397 57 17 1476 1506 0 0 1013 +727 293 228 19 48 78 10 0 426 +728 0 297 -10 293 323 10 421 0 +729 435 20 -20 381 411 10 856 0 +730 195 111 -30 998 1028 10 344 0 +731 417 218 10 278 308 10 0 323 +732 340 54 10 238 268 10 0 751 +733 132 57 20 244 274 10 0 479 +734 210 379 -10 709 739 10 628 0 +735 228 260 12 1606 1636 0 0 1024 +736 399 104 10 290 320 10 0 205 +737 95 277 -10 274 304 10 424 0 +738 360 284 19 667 697 0 0 1047 +739 53 466 9 335 365 10 0 704 +740 112 465 10 299 329 10 0 946 +741 313 391 5 154 184 10 0 39 +742 93 235 10 246 276 10 0 286 +743 125 32 30 259 289 10 0 187 +744 215 282 -6 1440 1470 10 258 0 +745 224 320 -15 1284 1314 10 626 0 +746 134 428 20 308 338 10 0 280 +747 26 490 10 475 505 10 0 766 +748 44 115 24 246 276 10 0 717 +749 438 127 -5 941 971 10 953 0 +750 239 15 2 604 634 10 0 371 +751 342 54 -10 250 280 10 732 0 +752 109 463 -18 334 364 10 276 0 +753 199 187 20 127 157 10 0 7 +754 201 188 10 139 169 10 0 199 +755 399 301 30 194 224 0 0 1046 +756 484 171 10 293 323 10 0 604 +757 272 234 -10 1590 1620 10 889 0 +758 380 350 -8 866 896 10 202 0 +759 140 108 -40 1071 1101 10 885 0 +760 228 199 10 134 164 10 0 607 +761 245 461 -30 649 679 10 906 0 +762 305 107 20 225 255 0 0 1036 +763 231 195 20 109 139 10 0 5 +764 450 265 -20 216 246 10 375 0 +765 273 149 -10 1503 1533 10 209 0 +766 12 358 -10 1224 1254 10 747 0 +767 315 121 10 203 233 10 0 580 +768 420 213 10 204 234 10 0 495 +769 331 134 11 1124 1154 10 0 291 +770 84 377 -16 926 956 10 340 0 +771 320 280 10 85 115 10 0 671 +772 89 185 -23 600 630 10 50 0 +773 472 481 20 327 357 10 0 443 +774 422 420 20 263 293 10 0 512 +775 475 267 -30 780 810 10 66 0 +776 470 125 20 253 283 10 0 611 +777 435 268 10 312 342 0 0 1045 +778 409 155 19 185 215 10 0 121 +779 243 248 30 24 54 10 0 149 +780 488 96 -10 1066 1096 10 552 0 +781 341 72 -27 805 835 10 470 0 +782 58 449 30 363 393 10 0 366 +783 16 460 -20 411 441 10 966 0 +784 480 136 22 256 286 10 0 226 +785 162 388 -10 1126 1156 10 102 0 +786 47 208 30 226 256 10 0 694 +787 324 127 30 143 173 10 0 287 +788 87 96 30 282 312 10 0 921 +789 140 137 -22 570 600 10 356 0 +790 314 205 -20 1527 1557 10 952 0 +791 96 346 -13 185 215 10 547 0 +792 321 280 30 77 107 10 0 63 +793 245 251 10 5 35 10 0 871 +794 436 295 -20 528 558 10 874 0 +795 274 261 -18 1707 1737 10 541 0 +796 271 128 12 346 376 10 0 115 +797 275 45 -10 225 255 10 568 0 +798 422 409 10 234 264 10 0 892 +799 146 188 -21 1235 1265 10 566 0 +800 93 96 -20 225 255 10 312 0 +801 409 255 -23 1522 1552 10 136 0 +802 449 428 25 1247 1277 0 0 1035 +803 90 285 -10 276 306 10 40 0 +804 415 95 -11 1177 1207 10 131 0 +805 88 287 30 263 293 0 0 1049 +806 379 196 -20 194 224 10 143 0 +807 368 452 16 670 700 10 0 8 +808 202 186 20 151 181 10 0 959 +809 435 11 40 302 332 10 0 701 +810 269 46 20 269 299 10 0 723 +811 7 292 -20 246 276 10 367 0 +812 44 496 -30 402 432 10 609 0 +813 478 99 10 311 341 10 0 132 +814 391 99 20 206 236 10 0 20 +815 132 477 -20 327 357 10 837 0 +816 24 65 -20 365 395 10 343 0 +817 130 247 -23 120 150 10 6 0 +818 133 273 20 119 149 10 0 923 +819 347 62 -20 333 363 10 933 0 +820 404 140 -30 1259 1289 10 108 0 +821 416 420 20 290 320 10 0 70 +822 67 335 -22 242 272 10 484 0 +823 92 270 -26 257 287 10 244 0 +824 411 95 -10 243 273 10 321 0 +825 132 479 -30 257 287 10 539 0 +826 366 334 -30 410 440 10 201 0 +827 125 39 -20 245 275 10 947 0 +828 419 422 -8 276 306 10 724 0 +829 460 2 -10 353 383 10 167 0 +830 67 334 20 231 261 10 0 623 +831 448 414 -28 1223 1253 10 482 0 +832 46 163 -24 926 956 10 28 0 +833 77 465 11 275 305 10 0 619 +834 284 319 -12 817 847 10 217 0 +835 102 422 -5 226 256 10 922 0 +836 240 34 28 1560 1590 0 0 1023 +837 141 428 20 208 238 10 0 815 +838 204 269 30 49 79 10 0 349 +839 144 439 -20 271 301 10 220 0 +840 470 417 -20 737 767 10 499 0 +841 404 103 -20 242 272 10 264 0 +842 5 281 -12 1372 1402 10 163 0 +843 487 320 -20 858 888 10 401 0 +844 398 23 10 270 300 10 0 172 +845 90 296 20 166 196 0 0 1029 +846 386 13 10 337 367 0 0 1008 +847 115 465 10 262 292 10 0 182 +848 473 475 10 417 447 10 0 392 +849 275 42 30 238 268 10 0 558 +850 286 356 30 111 141 10 0 214 +851 15 69 -10 296 326 10 640 0 +852 267 44 -27 256 286 10 441 0 +853 243 399 -10 235 265 10 107 0 +854 390 249 -10 582 612 10 954 0 +855 210 391 30 146 176 10 0 440 +856 433 15 20 297 327 10 0 729 +857 24 259 -20 370 400 10 469 0 +858 12 463 -20 361 391 10 589 0 +859 237 213 10 147 177 10 0 166 +860 182 480 31 365 395 10 0 13 +861 409 88 -10 270 300 10 171 0 +862 244 368 -10 414 444 10 148 0 +863 381 328 12 717 747 10 0 398 +864 213 185 21 74 104 10 0 44 +865 482 141 -10 1011 1041 10 219 0 +866 319 124 20 178 208 10 0 721 +867 141 431 30 218 248 10 0 466 +868 198 264 -20 140 170 10 976 0 +869 69 334 30 206 236 10 0 130 +870 299 98 30 167 197 10 0 553 +871 240 250 -10 37 67 10 793 0 +872 199 203 -8 1457 1487 10 879 0 +873 459 17 20 411 441 10 0 661 +874 423 217 20 242 272 10 0 794 +875 477 179 20 237 267 10 0 599 +876 213 397 -10 217 247 10 238 0 +877 405 187 -24 1251 1281 10 956 0 +878 269 402 20 203 233 10 0 37 +879 53 204 8 1055 1085 10 0 872 +880 13 394 -17 373 403 10 147 0 +881 15 68 10 303 333 10 0 204 +882 56 268 28 1064 1094 10 0 433 +883 360 184 -20 221 251 10 588 0 +884 307 102 40 210 240 10 0 557 +885 130 57 40 232 262 10 0 759 +886 250 328 -20 249 279 10 11 0 +887 91 231 30 200 230 10 0 684 +888 479 176 20 240 270 10 0 245 +889 420 224 10 429 459 10 0 757 +890 461 182 13 629 659 10 0 447 +891 418 218 20 267 297 10 0 384 +892 419 418 -10 249 279 10 798 0 +893 336 493 -19 1493 1523 10 656 0 +894 389 300 -24 154 184 10 556 0 +895 92 76 -24 1139 1169 10 294 0 +896 476 102 20 336 366 0 0 1006 +897 418 399 20 438 468 10 0 332 +898 109 56 27 239 269 10 0 935 +899 13 465 -20 774 804 10 268 0 +900 92 232 10 177 207 10 0 18 +901 394 47 -30 313 343 10 676 0 +902 16 287 12 271 301 10 0 43 +903 399 102 20 267 297 10 0 455 +904 143 158 12 141 171 10 0 254 +905 18 484 10 329 359 10 0 624 +906 250 411 30 188 218 10 0 761 +907 19 273 25 1017 1047 10 0 369 +908 365 28 9 268 298 10 0 380 +909 387 297 10 144 174 10 0 532 +910 433 447 -25 794 824 10 58 0 +911 214 274 24 1369 1399 0 0 1017 +912 489 338 -20 1397 1427 10 215 0 +913 130 494 -19 759 789 10 642 0 +914 23 67 30 389 419 10 0 99 +915 374 489 -26 269 299 10 88 0 +916 126 30 10 272 302 10 0 411 +917 112 467 10 276 306 10 0 61 +918 489 274 -40 534 564 10 26 0 +919 61 214 -16 342 372 10 988 0 +920 166 440 12 207 237 0 0 1019 +921 56 75 -30 1438 1468 10 788 0 +922 210 276 5 47 77 10 0 835 +923 80 286 -20 224 254 10 818 0 +924 17 459 10 422 452 10 0 119 +925 66 448 10 270 300 0 0 1028 +926 351 128 -20 1253 1283 10 517 0 +927 352 176 -9 126 156 10 477 0 +928 490 286 29 522 552 10 0 520 +929 247 219 17 31 61 10 0 686 +930 86 268 10 217 247 10 0 302 +931 398 329 17 167 197 10 0 473 +932 272 402 10 160 190 10 0 590 +933 317 123 20 190 220 10 0 819 +934 408 318 -10 643 673 10 146 0 +935 66 31 -27 1048 1078 10 898 0 +936 425 448 -18 794 824 10 104 0 +937 35 304 30 221 251 10 0 995 +938 471 94 30 999 1029 10 0 978 +939 470 473 -10 431 461 10 297 0 +940 224 56 13 1186 1216 0 0 1041 +941 343 47 20 277 307 10 0 570 +942 52 18 28 857 887 10 0 506 +943 16 68 20 314 344 10 0 266 +944 195 185 20 112 142 10 0 425 +945 92 236 -20 258 288 10 627 0 +946 76 462 -10 956 986 10 740 0 +947 124 56 20 231 261 10 0 827 +948 481 454 14 320 350 10 0 200 +949 477 483 20 366 396 10 0 658 +950 481 124 10 283 313 10 0 963 +951 389 156 27 716 746 0 0 1022 +952 384 16 20 351 381 10 0 790 +953 492 34 5 811 841 10 0 749 +954 371 200 10 224 254 10 0 854 +955 153 235 10 98 128 10 0 979 +956 428 202 24 904 934 10 0 877 +957 257 391 -14 1633 1663 10 76 0 +958 421 218 -20 254 284 10 233 0 +959 206 186 -20 188 218 10 808 0 +960 393 301 30 178 208 10 0 472 +961 204 187 30 175 205 0 0 1031 +962 468 475 10 313 343 10 0 83 +963 477 122 -10 330 360 10 950 0 +964 100 66 -25 1400 1430 10 497 0 +965 489 27 10 421 451 10 0 519 +966 12 451 20 311 341 10 0 783 +967 197 270 -20 96 126 10 464 0 +968 311 422 -27 988 1018 10 4 0 +969 489 17 -20 380 410 10 267 0 +970 13 214 -29 1354 1384 10 177 0 +971 440 247 20 253 283 10 0 683 +972 28 467 -21 1343 1373 10 185 0 +973 388 325 -30 263 293 10 389 0 +974 270 401 -15 152 182 10 370 0 +975 5 445 30 313 343 10 0 283 +976 198 271 20 84 114 10 0 868 +977 480 131 5 688 718 10 0 399 +978 437 98 -30 1114 1144 10 938 0 +979 131 246 -10 832 862 10 955 0 +980 49 437 7 427 457 10 0 255 +981 270 49 30 292 322 10 0 118 +982 337 41 -10 1002 1032 10 533 0 +983 318 280 20 97 127 10 0 430 +984 154 392 9 171 201 10 0 668 +985 493 111 -5 541 571 10 16 0 +986 399 450 20 359 389 10 0 712 +987 67 452 30 272 302 10 0 309 +988 34 239 16 219 249 10 0 919 +989 343 276 15 96 126 10 0 188 +990 393 12 10 309 339 10 0 643 +991 236 247 -10 52 82 10 230 0 +992 340 291 -10 470 500 10 352 0 +993 3 292 20 256 286 10 0 100 +994 209 68 -14 1568 1598 10 652 0 +995 18 225 -30 691 721 10 937 0 +996 147 435 -9 245 275 10 437 0 +997 335 99 -10 1218 1248 10 175 0 +998 485 24 20 326 356 10 0 110 +999 470 475 30 314 344 10 0 3 +1000 341 58 10 224 254 10 0 274 +1001 25 499 -10 445 475 10 9 0 +1002 364 173 -30 180 210 10 405 0 +1003 87 3 -13 1433 1463 10 151 0 +1004 248 251 -20 2 32 10 176 0 +1005 478 118 -20 354 384 10 665 0 +1006 476 102 -20 336 366 10 896 0 +1007 21 68 -20 401 431 10 572 0 +1008 386 13 -10 337 367 10 846 0 +1009 386 154 -31 1101 1131 10 159 0 +1010 208 396 -20 176 206 10 679 0 +1011 481 84 -17 506 536 10 571 0 +1012 408 84 -10 284 314 10 638 0 +1013 397 57 -17 1476 1506 10 726 0 +1014 225 369 -38 121 151 10 581 0 +1015 226 191 -20 93 123 10 501 0 +1016 59 457 -30 334 364 10 689 0 +1017 214 274 -24 1369 1399 10 911 0 +1018 330 371 -1 559 589 10 265 0 +1019 166 440 -12 207 237 10 920 0 +1020 37 281 -17 493 523 10 511 0 +1021 394 322 -12 1025 1055 10 631 0 +1022 389 156 -27 716 746 10 951 0 +1023 240 34 -28 1560 1590 10 836 0 +1024 228 260 -12 1606 1636 10 735 0 +1025 130 140 -17 194 224 10 27 0 +1026 132 55 -10 267 297 10 653 0 +1027 445 237 -10 200 230 10 692 0 +1028 66 448 -10 270 300 10 925 0 +1029 90 296 -20 166 196 10 845 0 +1030 33 286 -11 1546 1576 10 221 0 +1031 204 187 -30 175 205 10 961 0 +1032 105 181 -19 1531 1561 10 536 0 +1033 141 426 -23 531 561 10 666 0 +1034 347 54 -10 295 325 10 22 0 +1035 449 428 -25 1247 1277 10 802 0 +1036 305 107 -20 225 255 10 762 0 +1037 313 493 -20 1193 1223 10 485 0 +1038 217 207 -26 1382 1412 10 714 0 +1039 321 277 -10 75 105 10 542 0 +1040 297 283 -28 1349 1379 10 296 0 +1041 224 56 -13 1186 1216 10 940 0 +1042 464 13 -20 385 415 10 183 0 +1043 361 181 -20 197 227 10 514 0 +1044 281 96 -1 1126 1156 10 654 0 +1045 435 268 -10 312 342 10 777 0 +1046 399 301 -30 194 224 10 755 0 +1047 360 284 -19 667 697 10 738 0 +1048 377 385 -6 866 896 10 498 0 +1049 88 287 -30 263 293 10 805 0 +1050 125 61 -26 612 642 10 632 0 +1051 94 235 -20 156 186 10 116 0 +1052 111 459 -20 359 389 10 197 0 +1053 307 412 -8 404 434 10 617 0 +1054 203 211 -20 1306 1336 10 396 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC11010.txt b/jsprit-instances/instances/lilim/1000/LRC11010.txt new file mode 100644 index 00000000..0c4ddbd1 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC11010.txt @@ -0,0 +1,1046 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 18 832 982 10 0 802 +2 214 394 10 171 321 10 0 734 +3 476 483 -20 324 474 10 200 0 +4 352 487 -22 842 992 10 277 0 +5 230 197 40 62 212 10 0 248 +6 175 239 -10 75 225 10 374 0 +7 133 202 -22 401 551 10 199 0 +8 328 458 -10 708 858 10 82 0 +9 25 499 -30 385 535 10 318 0 +10 226 423 -20 174 324 10 440 0 +11 313 282 20 103 253 10 0 983 +12 60 454 10 287 437 10 0 157 +13 239 486 -20 1422 1572 10 465 0 +14 102 264 -10 148 298 10 955 0 +15 408 452 -10 256 406 10 297 0 +16 451 62 5 275 425 10 0 365 +17 203 390 -20 147 297 10 311 0 +18 92 233 10 164 314 10 0 614 +19 7 300 30 285 435 10 0 535 +20 409 90 20 225 375 10 0 445 +21 307 108 10 177 327 10 0 325 +22 347 54 10 235 385 10 0 553 +23 406 87 10 253 403 10 0 769 +24 371 332 14 470 620 10 0 826 +25 116 466 -10 254 404 10 847 0 +26 441 265 40 191 341 10 0 215 +27 130 140 17 162 312 10 0 137 +28 80 117 24 764 914 10 0 759 +29 421 387 -17 741 891 10 931 0 +30 83 300 -10 440 590 10 618 0 +31 136 52 10 233 383 10 0 310 +32 18 462 -32 338 488 10 812 0 +33 390 120 -9 944 1094 10 477 0 +34 188 119 -15 915 1065 10 730 0 +35 467 114 10 316 466 10 0 331 +36 440 292 -11 880 1030 10 794 0 +37 268 400 20 183 333 10 0 324 +38 391 202 14 148 298 10 0 390 +39 377 432 -6 771 921 10 498 0 +40 80 290 -30 174 324 10 805 0 +41 439 15 -10 301 451 10 167 0 +42 307 52 -27 860 1010 10 470 0 +43 111 192 -10 1139 1289 10 408 0 +44 131 56 -40 227 377 10 885 0 +45 88 286 10 192 342 10 0 302 +46 69 414 -4 1203 1353 10 348 0 +47 41 232 16 209 359 10 0 688 +48 323 77 -30 1345 1495 10 676 0 +49 340 416 36 261 411 10 0 807 +50 86 199 23 218 368 10 0 145 +51 314 124 20 171 321 10 0 235 +52 375 191 -30 138 288 10 162 0 +53 226 175 23 1583 1733 10 0 317 +54 242 106 28 1208 1358 10 0 765 +55 417 417 10 272 422 10 0 473 +56 419 459 -10 268 418 10 582 0 +57 389 11 -9 276 426 10 908 0 +58 450 416 -15 517 667 10 194 0 +59 246 255 -30 53 203 10 779 0 +60 71 333 -20 197 347 10 845 0 +61 105 474 27 411 561 10 0 697 +62 20 489 -10 331 481 10 624 0 +63 388 331 20 160 310 10 0 758 +64 92 259 -20 339 489 10 160 0 +65 200 261 10 106 256 10 0 868 +66 400 288 30 154 304 10 0 216 +67 299 285 -29 1194 1344 10 70 0 +68 378 199 -10 147 297 10 602 0 +69 325 147 -18 1127 1277 10 502 0 +70 421 386 29 764 914 10 0 67 +71 404 447 20 250 400 10 0 910 +72 412 478 7 900 1050 10 0 460 +73 26 67 -30 1257 1407 10 914 0 +74 358 183 20 174 324 10 0 883 +75 30 302 10 226 376 10 0 382 +76 176 470 -20 487 637 10 996 0 +77 96 270 -20 155 305 10 818 0 +78 243 408 -10 1374 1524 10 549 0 +79 60 29 32 1303 1453 10 0 156 +80 34 169 -20 424 574 10 627 0 +81 407 280 10 159 309 10 0 693 +82 277 403 10 155 305 10 0 8 +83 498 456 27 1339 1489 0 0 1003 +84 384 491 20 288 438 10 0 680 +85 355 174 -11 655 805 10 429 0 +86 97 288 -17 1224 1374 10 817 0 +87 316 284 20 74 224 10 0 224 +88 334 403 26 174 324 10 0 656 +89 415 223 -10 245 395 10 731 0 +90 230 320 -5 1132 1282 10 442 0 +91 432 199 7 579 729 10 0 191 +92 92 18 -32 1064 1214 10 687 0 +93 273 300 -20 55 205 10 659 0 +94 269 112 -23 1203 1353 10 667 0 +95 429 389 18 364 514 10 0 432 +96 371 71 21 227 377 10 0 236 +97 5 297 -20 271 421 10 615 0 +98 414 378 -30 435 585 10 537 0 +99 38 15 3 1031 1181 10 0 151 +100 2 295 -10 252 402 10 421 0 +101 237 254 -10 23 173 10 871 0 +102 54 445 10 276 426 10 0 664 +103 382 110 24 1052 1202 10 0 531 +104 438 488 18 303 453 10 0 290 +105 395 331 -10 166 316 10 973 0 +106 230 487 20 1070 1220 10 0 622 +107 249 407 -15 157 307 10 370 0 +108 488 26 -10 373 523 10 969 0 +109 151 81 -4 1466 1616 10 423 0 +110 483 14 10 331 481 10 0 504 +111 0 422 -20 761 911 10 376 0 +112 429 67 16 672 822 10 0 620 +113 195 464 20 1441 1591 0 0 1016 +114 356 256 19 106 256 10 0 481 +115 264 180 33 1590 1740 0 0 1040 +116 94 235 -10 156 306 10 355 0 +117 474 96 30 271 421 10 0 998 +118 268 52 10 246 396 10 0 568 +119 44 440 24 729 879 10 0 182 +120 7 382 -14 710 860 10 496 0 +121 459 53 20 1062 1212 10 0 132 +122 491 25 -20 349 499 10 288 0 +123 439 243 20 254 404 10 0 573 +124 210 185 20 76 226 10 0 314 +125 150 68 23 363 513 10 0 663 +126 201 270 10 52 202 0 0 1042 +127 0 188 -16 872 1022 10 988 0 +128 103 464 -6 1213 1363 10 913 0 +129 325 56 -10 736 886 10 819 0 +130 44 344 -20 1019 1169 10 381 0 +131 418 75 -10 388 538 10 638 0 +132 472 57 -20 1235 1385 10 121 0 +133 460 328 13 224 374 10 0 577 +134 89 270 -10 162 312 10 424 0 +135 374 190 20 137 287 10 0 360 +136 463 253 -20 987 1137 10 486 0 +137 97 93 -17 219 369 10 27 0 +138 163 472 9 593 743 0 0 1014 +139 29 336 22 272 422 10 0 880 +140 84 453 -18 1163 1313 10 946 0 +141 294 421 -29 1485 1635 10 968 0 +142 343 62 10 297 447 10 0 781 +143 371 193 20 133 283 10 0 806 +144 142 372 18 162 312 0 0 1024 +145 66 88 -23 770 920 10 50 0 +146 395 332 -30 166 316 10 201 0 +147 93 413 17 226 376 10 0 340 +148 267 394 10 199 349 10 0 240 +149 249 258 -20 67 217 10 176 0 +150 472 129 10 252 402 10 0 361 +151 87 3 -3 1366 1516 10 99 0 +152 62 326 -20 226 376 10 334 0 +153 212 186 -18 1587 1737 10 415 0 +154 241 402 -40 965 1115 10 225 0 +155 439 266 10 189 339 0 0 1027 +156 79 80 -32 1322 1472 10 79 0 +157 62 453 -10 276 426 10 12 0 +158 188 151 -10 1237 1387 10 621 0 +159 386 154 -13 1041 1191 10 379 0 +160 38 301 20 236 386 10 0 64 +161 192 265 10 64 214 10 0 872 +162 371 192 30 134 284 10 0 52 +163 64 294 12 1041 1191 0 0 1020 +164 381 494 -10 276 426 10 681 0 +165 437 12 -5 302 452 10 901 0 +166 186 135 24 658 808 10 0 652 +167 459 10 10 318 468 10 0 41 +168 175 422 -20 1386 1536 10 220 0 +169 274 48 10 203 353 10 0 849 +170 488 173 -20 250 400 10 888 0 +171 398 97 10 212 362 10 0 997 +172 385 17 -10 749 899 10 282 0 +173 180 283 23 684 834 10 0 590 +174 71 12 2 297 447 10 0 942 +175 343 49 -12 221 371 10 720 0 +176 248 251 20 2 152 10 0 149 +177 7 194 -19 891 1041 10 857 0 +178 322 290 -23 1419 1569 10 398 0 +179 410 399 25 218 368 10 0 897 +180 398 103 30 218 368 10 0 814 +181 385 285 -10 808 958 10 532 0 +182 179 497 -24 1351 1501 10 119 0 +183 464 13 -20 325 475 10 873 0 +184 492 335 -10 768 918 10 188 0 +185 27 464 -9 1231 1381 10 739 0 +186 231 29 -18 1166 1316 10 558 0 +187 157 38 -18 988 1138 10 333 0 +188 439 268 10 238 388 10 0 184 +189 149 214 7 422 572 10 0 259 +190 187 73 18 232 382 10 0 543 +191 429 169 -7 843 993 10 91 0 +192 350 199 -27 1141 1291 10 951 0 +193 60 231 -14 966 1116 10 319 0 +194 448 404 15 539 689 10 0 58 +195 481 20 -20 325 475 10 231 0 +196 436 25 -20 1222 1372 10 242 0 +197 111 459 -20 299 449 10 837 0 +198 389 17 -10 306 456 10 990 0 +199 148 208 22 466 616 10 0 7 +200 475 477 20 345 495 10 0 3 +201 390 325 30 191 341 10 0 146 +202 346 354 8 757 907 10 0 284 +203 91 266 10 173 323 0 0 1034 +204 17 65 20 297 447 10 0 266 +205 391 112 -20 940 1090 10 903 0 +206 224 203 20 53 203 10 0 391 +207 426 231 -10 968 1118 10 300 0 +208 260 472 -35 976 1126 10 439 0 +209 265 0 -14 836 986 10 564 0 +210 391 293 -10 166 316 10 894 0 +211 411 421 -8 255 405 10 724 0 +212 132 30 20 266 416 10 0 413 +213 475 480 -10 321 471 10 962 0 +214 286 244 -12 1224 1374 10 384 0 +215 436 237 -40 186 336 10 26 0 +216 402 284 -30 155 305 10 66 0 +217 287 397 -10 504 654 10 932 0 +218 272 420 -7 1326 1476 10 475 0 +219 477 120 -30 282 432 10 824 0 +220 145 434 20 211 361 10 0 168 +221 33 286 -30 1442 1592 10 243 0 +222 370 262 15 1039 1189 10 0 541 +223 393 20 -10 331 481 10 846 0 +224 330 308 -20 1110 1260 10 87 0 +225 246 398 40 148 298 10 0 154 +226 482 184 14 1047 1197 10 0 648 +227 451 305 -10 208 358 10 492 0 +228 226 316 21 70 220 10 0 886 +229 110 459 30 288 438 10 0 752 +230 244 250 10 6 156 10 0 991 +231 458 16 20 313 463 10 0 195 +232 390 34 7 1000 1150 10 0 580 +233 423 214 -20 176 326 10 891 0 +234 219 215 32 46 196 10 0 959 +235 326 118 -20 152 302 10 51 0 +236 365 74 -21 788 938 10 96 0 +237 331 356 13 652 802 10 0 597 +238 210 398 -18 153 303 10 281 0 +239 403 93 -10 281 431 10 321 0 +240 248 404 -10 154 304 10 148 0 +241 65 62 15 916 1066 10 0 921 +242 460 13 20 316 466 10 0 196 +243 0 293 30 253 403 10 0 221 +244 211 248 26 39 189 10 0 610 +245 484 174 -10 246 396 10 756 0 +246 175 352 -11 1535 1685 10 785 0 +247 455 168 -31 807 957 10 592 0 +248 224 191 -40 64 214 10 5 0 +249 439 156 -19 466 616 10 778 0 +250 434 359 -10 1332 1482 10 516 0 +251 118 314 -20 278 428 10 976 0 +252 234 246 10 16 166 10 0 547 +253 406 450 20 253 403 10 0 262 +254 75 118 -30 349 499 10 788 0 +255 115 395 -9 755 905 10 984 0 +256 329 456 19 220 370 10 0 378 +257 218 403 -10 1259 1409 10 487 0 +258 149 341 6 344 494 10 0 626 +259 253 74 -7 1290 1440 10 189 0 +260 436 241 -20 267 417 10 971 0 +261 238 203 10 48 198 10 0 344 +262 405 455 -20 281 431 10 253 0 +263 485 27 10 386 536 10 0 965 +264 323 118 -20 150 300 10 933 0 +265 330 371 -22 499 649 10 992 0 +266 25 65 -20 316 466 10 204 0 +267 406 96 -10 219 369 10 523 0 +268 49 451 20 284 434 10 0 366 +269 307 249 -24 1317 1467 10 556 0 +270 178 135 21 1454 1604 0 0 1028 +271 299 353 34 114 264 0 0 1018 +272 236 213 20 39 189 10 0 501 +273 355 177 -20 127 277 10 514 0 +274 394 23 -20 344 494 10 952 0 +275 306 235 25 57 207 10 0 757 +276 90 477 18 277 427 10 0 335 +277 379 486 22 612 762 10 0 4 +278 435 16 10 307 457 10 0 546 +279 8 497 -10 348 498 10 489 0 +280 150 484 16 565 715 10 0 357 +281 213 399 18 174 324 10 0 238 +282 391 18 10 318 468 10 0 172 +283 111 392 18 1109 1259 0 0 1023 +284 330 281 -8 1270 1420 10 202 0 +285 344 203 14 107 257 10 0 405 +286 91 235 10 209 359 10 0 497 +287 346 60 -10 261 411 10 1000 0 +288 483 27 20 398 548 10 0 122 +289 382 498 -30 280 430 10 639 0 +290 457 492 -18 448 598 10 104 0 +291 291 213 -30 1198 1348 10 316 0 +292 154 374 -23 877 1027 10 666 0 +293 225 196 10 59 209 10 0 706 +294 94 40 -16 1008 1158 10 372 0 +295 0 356 13 1026 1176 10 0 766 +296 297 283 -30 1289 1439 10 402 0 +297 371 423 10 211 361 10 0 15 +298 417 217 30 170 320 10 0 801 +299 500 228 8 722 872 10 0 775 +300 412 214 10 165 315 10 0 207 +301 442 289 25 195 345 10 0 338 +302 157 269 -10 1516 1666 10 45 0 +303 440 241 10 241 391 10 0 690 +304 100 266 20 150 300 10 0 414 +305 111 178 -35 156 306 10 508 0 +306 91 101 -20 238 388 10 525 0 +307 25 307 10 232 382 10 0 569 +308 135 400 20 239 389 10 0 770 +309 58 458 10 283 433 10 0 689 +310 133 26 -10 252 402 10 31 0 +311 211 386 20 141 291 10 0 17 +312 94 97 -20 218 368 10 342 0 +313 30 155 -10 1220 1370 10 640 0 +314 208 184 -20 78 228 10 124 0 +315 394 333 20 166 316 10 0 545 +316 355 180 30 126 276 10 0 291 +317 241 180 -23 1591 1741 10 53 0 +318 21 485 30 328 478 10 0 9 +319 80 251 14 244 394 10 0 193 +320 476 61 36 389 539 0 0 1004 +321 406 94 10 220 370 10 0 239 +322 364 71 5 1288 1438 10 0 726 +323 418 221 10 231 381 10 0 677 +324 274 441 -20 635 785 10 37 0 +325 304 97 -10 162 312 10 21 0 +326 297 102 10 155 305 10 0 636 +327 250 405 20 155 305 10 0 853 +328 111 463 20 262 412 10 0 628 +329 408 279 20 160 310 10 0 341 +330 263 418 -20 218 368 10 878 0 +331 480 119 -10 568 718 10 35 0 +332 420 383 27 922 1072 10 0 662 +333 142 14 18 775 925 10 0 187 +334 73 328 20 193 343 10 0 152 +335 50 438 -18 277 427 10 276 0 +336 441 7 -10 332 482 10 452 0 +337 462 14 20 337 487 10 0 454 +338 360 294 -25 1358 1508 10 301 0 +339 58 39 -26 1103 1253 10 632 0 +340 58 391 -17 822 972 10 147 0 +341 410 285 -20 163 313 10 329 0 +342 96 97 20 217 367 10 0 312 +343 21 64 -10 295 445 10 851 0 +344 238 210 -10 74 224 10 261 0 +345 479 121 10 262 412 10 0 784 +346 200 178 -20 87 237 10 500 0 +347 216 341 -10 594 744 10 507 0 +348 48 437 4 744 894 10 0 46 +349 200 270 20 53 203 10 0 509 +350 357 181 -20 127 277 10 588 0 +351 476 174 30 264 414 10 0 599 +352 400 286 10 154 304 10 0 603 +353 351 481 10 262 412 10 0 404 +354 270 400 10 151 301 10 0 957 +355 95 234 10 155 305 10 0 116 +356 128 113 -25 303 453 10 388 0 +357 133 455 -16 748 898 10 280 0 +358 16 463 20 316 466 10 0 972 +359 59 388 -19 603 753 10 642 0 +360 376 190 -20 139 289 10 135 0 +361 481 122 -10 264 414 10 150 0 +362 266 405 20 157 307 10 0 761 +363 374 232 33 125 275 10 0 956 +364 398 20 20 273 423 10 0 844 +365 481 26 -5 321 471 10 16 0 +366 63 444 -20 320 470 10 268 0 +367 89 290 -20 165 315 10 737 0 +368 246 314 -21 1385 1535 10 451 0 +369 40 304 -30 1085 1235 10 937 0 +370 262 369 15 119 269 10 0 107 +371 323 29 7 1077 1227 10 0 403 +372 89 65 16 660 810 10 0 294 +373 144 35 26 239 389 10 0 994 +374 200 265 10 92 242 10 0 6 +375 436 264 20 186 336 10 0 428 +376 15 457 20 313 463 10 0 111 +377 397 20 20 272 422 10 0 682 +378 328 491 -19 618 768 10 256 0 +379 399 175 13 687 837 10 0 159 +380 432 2 -20 407 557 10 856 0 +381 63 336 20 206 356 10 0 130 +382 6 296 -10 260 410 10 75 0 +383 146 376 8 174 324 10 0 387 +384 295 247 12 1243 1393 10 0 214 +385 235 33 -20 1277 1427 10 528 0 +386 233 204 -10 49 199 10 695 0 +387 142 360 -8 1472 1622 10 383 0 +388 177 156 25 119 269 10 0 356 +389 315 287 -30 88 238 10 792 0 +390 452 172 -14 548 698 10 38 0 +391 263 153 -20 352 502 10 206 0 +392 493 493 -20 796 946 10 773 0 +393 320 283 -10 77 227 10 771 0 +394 64 5 -18 1069 1219 10 506 0 +395 95 235 10 155 305 10 0 945 +396 203 211 20 1246 1396 10 0 420 +397 16 497 20 366 516 10 0 747 +398 348 348 23 875 1025 10 0 178 +399 485 104 -10 734 884 10 675 0 +400 330 147 -10 788 938 10 767 0 +401 443 237 20 193 343 10 0 600 +402 316 286 30 77 227 10 0 296 +403 335 46 -7 1282 1432 10 371 0 +404 381 495 -10 277 427 10 353 0 +405 364 173 -14 137 287 10 285 0 +406 267 162 -25 1389 1539 10 584 0 +407 214 245 8 36 186 10 0 993 +408 92 234 10 175 325 10 0 43 +409 347 459 -5 419 569 10 741 0 +410 30 7 -8 1129 1279 10 717 0 +411 120 37 28 715 865 10 0 526 +412 397 153 29 822 972 0 0 1029 +413 210 29 -20 991 1141 10 212 0 +414 87 285 -20 181 331 10 304 0 +415 132 32 18 724 874 10 0 153 +416 390 294 20 177 327 10 0 691 +417 67 451 -7 1156 1306 10 980 0 +418 24 68 -10 354 504 10 816 0 +419 146 439 10 215 365 10 0 860 +420 209 212 -20 1468 1618 10 396 0 +421 6 292 10 247 397 10 0 100 +422 18 63 -10 297 447 10 881 0 +423 149 98 4 1105 1255 10 0 109 +424 91 268 10 185 335 10 0 134 +425 103 177 -16 566 716 10 772 0 +426 367 178 20 137 287 10 0 519 +427 225 269 -30 1211 1361 10 838 0 +428 443 246 -20 193 343 10 375 0 +429 306 42 11 417 567 10 0 85 +430 374 306 -12 934 1084 10 631 0 +431 413 421 10 243 393 0 0 1017 +432 470 405 -18 866 1016 10 95 0 +433 33 278 -8 1427 1577 10 438 0 +434 149 458 -25 1104 1254 10 815 0 +435 257 57 -24 1166 1316 10 633 0 +436 272 403 -20 154 304 10 974 0 +437 221 291 9 50 200 10 0 581 +438 1 101 8 1197 1347 10 0 433 +439 332 459 35 309 459 10 0 208 +440 220 392 20 198 348 10 0 10 +441 253 50 27 200 350 10 0 810 +442 250 441 5 696 846 10 0 90 +443 471 484 10 321 471 10 0 949 +444 480 152 26 962 1112 10 0 611 +445 404 83 -20 238 388 10 20 0 +446 476 94 -10 274 424 10 813 0 +447 458 213 -10 1068 1218 10 768 0 +448 215 395 20 182 332 10 0 657 +449 85 288 20 169 319 10 0 923 +450 179 75 -12 680 830 10 904 0 +451 228 287 21 43 193 10 0 368 +452 397 18 10 274 424 10 0 336 +453 238 204 -17 47 197 10 929 0 +454 488 3 -20 343 493 10 337 0 +455 407 88 -20 264 414 10 861 0 +456 459 14 20 315 465 10 0 829 +457 120 17 -20 266 416 10 479 0 +458 235 316 -20 596 746 10 679 0 +459 370 382 -30 824 974 10 702 0 +460 405 454 -7 1243 1393 10 72 0 +461 17 458 10 373 523 10 0 783 +462 43 135 31 236 386 10 0 488 +463 318 497 21 794 944 10 0 893 +464 199 268 20 54 204 10 0 647 +465 111 467 20 257 407 10 0 13 +466 138 438 20 227 377 10 0 920 +467 172 314 -22 485 635 10 484 0 +468 494 468 -10 327 477 10 671 0 +469 35 303 20 221 371 10 0 513 +470 341 59 27 730 880 10 0 42 +471 423 221 -20 198 348 10 629 0 +472 395 295 -30 151 301 10 960 0 +473 413 417 -10 296 446 10 55 0 +474 339 60 20 209 359 10 0 721 +475 277 428 7 430 580 10 0 218 +476 176 199 -10 89 239 10 754 0 +477 265 240 9 18 168 10 0 33 +478 365 190 22 1417 1567 0 0 1013 +479 133 53 20 229 379 10 0 457 +480 387 488 20 302 452 0 0 1011 +481 385 295 -19 142 292 10 114 0 +482 491 369 28 670 820 10 0 843 +483 445 273 20 198 348 0 0 1005 +484 195 273 22 59 209 10 0 467 +485 313 493 -8 1133 1283 10 617 0 +486 495 227 20 284 434 10 0 136 +487 241 403 10 160 310 10 0 257 +488 30 72 -31 372 522 10 462 0 +489 21 487 10 329 479 10 0 279 +490 324 99 -20 278 428 10 762 0 +491 453 318 30 314 464 10 0 598 +492 443 272 10 210 360 10 0 227 +493 447 184 -37 364 514 10 672 0 +494 366 288 29 624 774 0 0 1041 +495 440 284 -12 792 942 10 718 0 +496 13 314 14 245 395 10 0 120 +497 72 227 -10 504 654 10 286 0 +498 377 385 6 806 956 10 0 39 +499 477 478 -30 332 482 10 999 0 +500 204 185 20 103 253 10 0 346 +501 226 191 -20 63 213 10 272 0 +502 330 138 18 1050 1200 10 0 69 +503 185 434 -30 514 664 10 839 0 +504 483 22 -10 325 475 10 110 0 +505 71 282 -40 582 732 10 803 0 +506 60 5 18 984 1134 10 0 394 +507 189 402 10 476 626 10 0 347 +508 134 211 35 122 272 10 0 305 +509 146 313 -20 1135 1285 10 349 0 +510 21 146 -10 427 577 10 900 0 +511 37 281 -10 433 583 10 684 0 +512 416 417 -20 283 433 10 774 0 +513 44 311 -20 347 497 10 469 0 +514 361 181 20 137 287 10 0 273 +515 444 242 -10 194 344 10 713 0 +516 444 271 10 195 345 10 0 250 +517 359 179 20 130 280 10 0 669 +518 388 334 -20 161 311 10 685 0 +519 401 164 -20 561 711 10 426 0 +520 499 316 -29 562 712 10 928 0 +521 399 106 20 242 392 10 0 841 +522 425 215 10 178 328 10 0 711 +523 407 98 10 218 368 10 0 267 +524 406 460 -25 659 809 10 712 0 +525 88 95 20 224 374 10 0 306 +526 95 64 -28 706 856 10 411 0 +527 306 229 10 1260 1410 0 0 1022 +528 273 55 20 196 346 10 0 385 +529 384 149 -9 1137 1287 10 674 0 +530 122 35 -27 250 400 10 898 0 +531 308 199 -24 1448 1598 10 103 0 +532 390 301 10 149 299 10 0 181 +533 300 108 10 150 300 10 0 941 +534 267 400 -30 172 322 10 850 0 +535 8 300 -30 296 446 10 19 0 +536 105 181 19 1471 1621 0 0 1035 +537 398 325 30 173 323 10 0 98 +538 166 247 1 84 234 10 0 995 +539 140 431 30 211 361 10 0 825 +540 253 118 19 487 637 10 0 557 +541 359 246 -15 1363 1513 10 222 0 +542 321 277 10 75 225 10 0 989 +543 168 59 -18 306 456 10 190 0 +544 406 285 -20 159 309 10 567 0 +545 391 334 -20 164 314 10 315 0 +546 437 19 -10 954 1104 10 278 0 +547 201 278 -10 56 206 10 252 0 +548 435 267 20 263 413 10 0 764 +549 245 408 10 158 308 10 0 78 +550 16 462 10 326 476 10 0 899 +551 107 374 -29 854 1004 10 668 0 +552 477 97 10 273 423 0 0 1010 +553 346 57 -10 248 398 10 22 0 +554 14 459 20 315 465 10 0 589 +555 102 6 3 1376 1526 0 0 1002 +556 359 287 24 115 265 10 0 269 +557 297 131 -19 1105 1255 10 540 0 +558 282 1 18 982 1132 10 0 186 +559 21 70 -24 711 861 10 694 0 +560 440 244 10 206 356 10 0 692 +561 482 104 19 747 897 10 0 780 +562 120 261 5 733 883 10 0 979 +563 125 29 -10 253 403 10 653 0 +564 292 32 14 222 372 10 0 209 +565 262 92 -23 570 720 10 578 0 +566 68 160 -8 1076 1226 10 832 0 +567 405 276 20 174 324 10 0 544 +568 277 50 -10 201 351 10 118 0 +569 32 319 -10 341 491 10 307 0 +570 344 70 -8 1086 1236 10 982 0 +571 481 84 -20 446 596 10 576 0 +572 21 68 20 341 491 10 0 943 +573 441 244 -20 217 367 10 123 0 +574 57 43 15 963 1113 10 0 935 +575 1 293 10 252 402 10 0 842 +576 481 96 20 277 427 10 0 571 +577 471 368 -13 368 518 10 133 0 +578 236 126 23 124 274 10 0 565 +579 406 99 20 217 367 10 0 594 +580 303 186 -7 1294 1444 10 232 0 +581 225 369 -9 121 271 10 437 0 +582 412 453 10 259 409 10 0 56 +583 104 349 -30 949 1099 10 867 0 +584 173 182 25 102 252 10 0 406 +585 111 464 10 255 405 10 0 740 +586 53 440 10 273 423 10 0 705 +587 69 336 -26 200 350 10 791 0 +588 359 182 20 149 299 10 0 350 +589 13 459 -20 315 465 10 554 0 +590 244 277 -23 1241 1391 10 173 0 +591 484 177 -20 245 395 10 875 0 +592 452 206 31 432 582 10 0 247 +593 22 483 30 325 475 10 0 905 +594 452 110 -20 280 430 10 579 0 +595 347 192 18 1428 1578 10 0 790 +596 95 92 20 221 371 10 0 800 +597 368 311 -13 866 1016 10 237 0 +598 479 387 -30 337 487 10 491 0 +599 479 169 -30 249 399 10 351 0 +600 497 266 -20 688 838 10 401 0 +601 66 336 -30 203 353 10 869 0 +602 376 195 10 137 287 10 0 68 +603 401 281 -10 201 351 10 352 0 +604 441 177 -10 941 1091 10 683 0 +605 231 203 -30 50 200 10 686 0 +606 21 488 10 330 480 10 0 704 +607 231 204 20 90 240 0 0 1043 +608 122 422 -20 1397 1547 10 858 0 +609 65 453 -11 274 424 10 833 0 +610 206 261 -26 122 272 10 244 0 +611 466 149 -26 1126 1276 10 444 0 +612 313 119 30 156 306 10 0 870 +613 90 274 20 161 311 10 0 882 +614 39 162 -10 505 655 10 18 0 +615 35 306 20 222 372 10 0 97 +616 437 15 -40 300 450 10 809 0 +617 307 412 8 344 494 10 0 485 +618 79 291 10 175 325 10 0 30 +619 64 437 -10 858 1008 10 917 0 +620 376 92 -16 931 1081 10 112 0 +621 129 27 10 253 403 10 0 158 +622 196 489 -20 970 1120 10 106 0 +623 51 286 -25 1399 1549 10 907 0 +624 20 488 10 330 480 10 0 62 +625 13 455 -20 313 463 10 966 0 +626 170 347 -6 376 526 10 258 0 +627 92 230 20 159 309 10 0 80 +628 117 467 -20 254 404 10 328 0 +629 413 217 20 166 316 10 0 471 +630 405 450 20 253 403 10 0 936 +631 394 322 12 965 1115 10 0 430 +632 125 61 26 552 702 10 0 339 +633 238 123 24 721 871 10 0 435 +634 11 403 18 283 433 10 0 924 +635 89 272 -20 162 312 10 823 0 +636 304 102 -10 157 307 10 326 0 +637 478 121 40 261 411 10 0 716 +638 408 84 10 229 379 10 0 131 +639 376 494 30 274 424 10 0 289 +640 20 73 10 290 440 10 0 313 +641 159 299 -5 956 1106 10 922 0 +642 95 382 19 203 353 10 0 359 +643 352 63 -12 1118 1268 10 646 0 +644 365 274 14 117 267 0 0 1031 +645 30 301 10 225 375 10 0 728 +646 351 5 12 436 586 10 0 643 +647 197 267 -20 55 205 10 464 0 +648 498 171 -14 1196 1346 10 226 0 +649 468 352 9 708 858 0 0 1012 +650 418 251 21 1137 1287 0 0 1033 +651 489 437 -10 647 797 10 939 0 +652 251 63 -24 927 1077 10 166 0 +653 132 55 10 227 377 10 0 563 +654 281 96 -12 1066 1216 10 796 0 +655 333 293 27 557 707 0 0 1039 +656 255 487 -26 338 488 10 88 0 +657 207 400 -20 156 306 10 448 0 +658 469 489 -14 495 645 10 948 0 +659 244 254 20 40 190 10 0 93 +660 233 207 10 46 196 10 0 859 +661 441 60 -20 1392 1542 10 701 0 +662 411 379 -27 1133 1283 10 332 0 +663 178 72 -23 697 847 10 125 0 +664 51 447 -10 280 430 10 102 0 +665 478 118 -10 294 444 10 736 0 +666 141 426 23 471 621 10 0 292 +667 295 89 23 682 832 10 0 94 +668 112 433 29 229 379 10 0 551 +669 320 211 -20 933 1083 10 517 0 +670 400 103 10 210 360 10 0 963 +671 408 453 10 257 407 10 0 468 +672 435 180 37 197 347 10 0 493 +673 432 66 30 1011 1161 10 0 804 +674 374 116 9 527 677 10 0 529 +675 478 102 10 271 421 10 0 399 +676 335 57 30 210 360 10 0 48 +677 385 239 -10 726 876 10 323 0 +678 386 245 -21 419 569 10 854 0 +679 208 396 20 151 301 10 0 458 +680 380 489 -20 319 469 10 84 0 +681 380 498 10 280 430 10 0 164 +682 440 7 -20 308 458 10 377 0 +683 434 245 10 282 432 10 0 604 +684 90 232 10 161 311 10 0 511 +685 389 334 20 162 312 10 0 518 +686 241 205 30 58 208 10 0 605 +687 18 24 32 568 718 10 0 92 +688 57 183 -16 1040 1190 10 47 0 +689 59 457 -10 281 431 10 309 0 +690 442 243 -10 229 379 10 303 0 +691 402 281 -20 190 340 10 416 0 +692 445 237 -10 195 345 10 560 0 +693 441 273 -10 222 372 10 81 0 +694 31 175 24 231 381 10 0 559 +695 234 202 10 50 200 10 0 386 +696 52 303 25 381 531 0 0 1025 +697 167 445 -27 1352 1502 10 61 0 +698 179 286 -30 281 431 10 967 0 +699 269 48 -18 221 371 10 715 0 +700 165 59 27 883 1033 10 0 723 +701 461 8 20 321 471 10 0 661 +702 421 415 30 237 387 10 0 459 +703 59 459 -30 283 433 10 782 0 +704 24 492 -10 402 552 10 606 0 +705 55 449 -10 278 428 10 586 0 +706 224 192 -10 63 213 10 293 0 +707 444 269 -10 194 344 10 777 0 +708 491 20 20 334 484 10 0 953 +709 313 126 10 183 333 10 0 787 +710 283 438 3 190 340 10 0 986 +711 352 241 -10 732 882 10 522 0 +712 398 476 25 358 508 10 0 524 +713 442 247 10 192 342 10 0 515 +714 217 207 26 1322 1472 0 0 1044 +715 233 87 18 193 343 10 0 699 +716 479 127 -40 259 409 10 637 0 +717 6 53 8 527 677 10 0 410 +718 478 300 12 830 980 10 0 495 +719 378 493 -20 274 424 10 915 0 +720 303 78 12 179 329 10 0 175 +721 344 62 -20 286 436 10 474 0 +722 371 315 18 1106 1256 0 0 1038 +723 200 78 -27 933 1083 10 700 0 +724 413 391 8 215 365 10 0 211 +725 415 216 10 168 318 10 0 958 +726 397 57 -5 1416 1566 10 322 0 +727 293 228 19 48 198 10 0 927 +728 0 297 -10 254 404 10 645 0 +729 435 20 20 321 471 0 0 1007 +730 195 111 15 938 1088 10 0 34 +731 417 218 10 218 368 10 0 89 +732 340 54 10 215 365 10 0 751 +733 132 57 -20 226 376 10 947 0 +734 210 379 -10 649 799 10 2 0 +735 228 260 -36 1546 1696 10 745 0 +736 399 104 10 230 380 10 0 665 +737 95 277 20 214 364 10 0 367 +738 360 284 19 607 757 10 0 863 +739 53 466 9 292 442 10 0 185 +740 112 465 -10 255 405 10 585 0 +741 313 391 5 154 304 10 0 409 +742 93 235 10 186 336 10 0 887 +743 125 32 30 251 401 10 0 916 +744 215 282 21 1380 1530 10 0 911 +745 224 320 36 1224 1374 10 0 735 +746 134 428 20 248 398 10 0 835 +747 26 490 -20 415 565 10 397 0 +748 44 115 -30 246 396 10 786 0 +749 438 127 2 881 1031 10 0 926 +750 239 15 -20 544 694 10 797 0 +751 342 54 -10 216 366 10 732 0 +752 109 463 -30 274 424 10 229 0 +753 199 187 20 81 231 0 0 1026 +754 201 188 10 79 229 10 0 476 +755 399 301 -10 157 307 10 909 0 +756 484 171 10 246 396 10 0 245 +757 272 234 -25 1530 1680 10 275 0 +758 380 350 -20 806 956 10 63 0 +759 140 108 -24 1011 1161 10 28 0 +760 228 199 10 74 224 10 0 763 +761 245 461 -20 589 739 10 362 0 +762 305 107 20 165 315 10 0 490 +763 231 195 -10 58 208 10 760 0 +764 450 265 -20 200 350 10 548 0 +765 273 149 -28 1443 1593 10 54 0 +766 12 358 -13 1164 1314 10 295 0 +767 315 121 10 144 294 10 0 400 +768 420 213 10 173 323 10 0 447 +769 331 134 -10 1064 1214 10 23 0 +770 84 377 -20 866 1016 10 308 0 +771 320 280 10 76 226 10 0 393 +772 89 185 16 540 690 10 0 425 +773 472 481 20 320 470 10 0 392 +774 422 420 20 241 391 10 0 512 +775 475 267 -8 720 870 10 299 0 +776 470 125 20 253 403 10 0 985 +777 435 268 10 252 402 10 0 707 +778 409 155 19 185 335 10 0 249 +779 243 248 30 7 157 10 0 59 +780 488 96 -19 1006 1156 10 561 0 +781 341 72 -10 745 895 10 142 0 +782 58 449 30 303 453 10 0 703 +783 16 460 -10 351 501 10 461 0 +784 480 136 -10 256 406 10 345 0 +785 162 388 11 1066 1216 10 0 246 +786 47 208 30 207 357 10 0 748 +787 324 127 -10 143 293 10 709 0 +788 87 96 30 224 374 10 0 254 +789 140 137 32 510 660 0 0 1008 +790 314 205 -18 1467 1617 10 595 0 +791 96 346 26 181 331 10 0 587 +792 321 280 30 77 227 10 0 389 +793 245 251 10 5 155 10 0 834 +794 436 295 11 468 618 10 0 36 +795 274 261 -15 1635 1785 10 934 0 +796 271 128 12 286 436 10 0 654 +797 275 45 20 206 356 10 0 750 +798 422 409 10 234 384 10 0 892 +799 146 188 -10 1175 1325 10 930 0 +800 93 96 -20 219 369 10 596 0 +801 409 255 -30 1462 1612 10 298 0 +802 449 428 -18 1187 1337 10 1 0 +803 90 285 40 216 366 10 0 505 +804 415 95 -30 1117 1267 10 673 0 +805 88 287 30 203 353 10 0 40 +806 379 196 -20 139 289 10 143 0 +807 368 452 -36 610 760 10 49 0 +808 202 186 20 91 241 10 0 944 +809 435 11 40 302 452 10 0 616 +810 269 46 -27 209 359 10 441 0 +811 7 292 -12 246 396 10 902 0 +812 44 496 32 342 492 10 0 32 +813 478 99 10 273 423 10 0 446 +814 391 99 -30 206 356 10 180 0 +815 132 477 25 267 417 10 0 434 +816 24 65 10 305 455 10 0 418 +817 130 247 17 120 270 10 0 86 +818 133 273 20 119 269 10 0 77 +819 347 62 10 273 423 10 0 129 +820 404 140 -5 1199 1349 10 977 0 +821 416 420 20 237 387 10 0 828 +822 67 335 -20 201 351 10 830 0 +823 92 270 20 197 347 10 0 635 +824 411 95 30 223 373 10 0 219 +825 132 479 -30 257 407 10 539 0 +826 366 334 -14 350 500 10 24 0 +827 125 39 20 245 395 0 0 1015 +828 419 422 -20 241 391 10 821 0 +829 460 2 -20 324 474 10 456 0 +830 67 334 20 201 351 10 0 822 +831 448 414 -11 1163 1313 10 840 0 +832 46 163 8 866 1016 10 0 566 +833 77 465 11 275 425 10 0 609 +834 284 319 -10 757 907 10 793 0 +835 102 422 -20 226 376 10 746 0 +836 240 34 28 1445 1595 0 0 1021 +837 141 428 20 208 358 10 0 197 +838 204 269 30 49 199 10 0 427 +839 144 439 30 216 366 10 0 503 +840 470 417 11 677 827 10 0 831 +841 404 103 -20 212 362 10 521 0 +842 5 281 -10 1312 1462 10 575 0 +843 487 320 -28 798 948 10 482 0 +844 398 23 -20 270 420 10 364 0 +845 90 296 20 166 316 10 0 60 +846 386 13 10 277 427 10 0 223 +847 115 465 10 253 403 10 0 25 +848 473 475 10 357 507 0 0 1001 +849 275 42 -10 209 359 10 169 0 +850 286 356 30 111 261 10 0 534 +851 15 69 10 296 446 10 0 343 +852 267 44 20 206 356 10 0 981 +853 243 399 -20 175 325 10 327 0 +854 390 249 21 522 672 10 0 678 +855 210 391 30 146 296 10 0 906 +856 433 15 20 297 447 10 0 380 +857 24 259 19 310 460 10 0 177 +858 12 463 20 319 469 10 0 608 +859 237 213 -10 87 237 10 660 0 +860 182 480 -10 305 455 10 419 0 +861 409 88 20 226 376 10 0 455 +862 244 368 25 354 504 0 0 1030 +863 381 328 -19 657 807 10 738 0 +864 213 185 21 74 224 10 0 961 +865 482 141 -10 951 1101 10 950 0 +866 319 124 20 143 293 0 0 1036 +867 141 431 30 211 361 10 0 583 +868 198 264 -10 80 230 10 65 0 +869 69 334 30 199 349 10 0 601 +870 299 98 -30 159 309 10 612 0 +871 240 250 10 10 160 10 0 101 +872 199 203 -10 1397 1547 10 161 0 +873 459 17 20 351 501 10 0 183 +874 423 217 20 182 332 10 0 889 +875 477 179 20 237 387 10 0 591 +876 213 397 10 157 307 0 0 1037 +877 405 187 -13 1191 1341 10 890 0 +878 269 402 20 153 303 10 0 330 +879 53 204 -4 995 1145 10 919 0 +880 13 394 -22 313 463 10 139 0 +881 15 68 10 297 447 10 0 422 +882 56 268 -20 1004 1154 10 613 0 +883 360 184 -20 161 311 10 74 0 +884 307 102 40 158 308 0 0 1032 +885 130 57 40 227 377 10 0 44 +886 250 328 -21 189 339 10 228 0 +887 91 231 -10 160 310 10 742 0 +888 479 176 20 240 390 10 0 170 +889 420 224 -20 369 519 10 874 0 +890 461 182 13 569 719 10 0 877 +891 418 218 20 207 357 10 0 233 +892 419 418 -10 238 388 10 798 0 +893 336 493 -21 1404 1554 10 463 0 +894 389 300 10 147 297 10 0 210 +895 92 76 4 1079 1229 10 0 964 +896 476 102 20 276 426 10 0 938 +897 418 399 -25 378 528 10 179 0 +898 109 56 27 239 389 10 0 530 +899 13 465 -10 714 864 10 550 0 +900 92 232 10 159 309 10 0 510 +901 394 47 5 253 403 10 0 165 +902 16 287 12 236 386 10 0 811 +903 399 102 20 210 360 10 0 205 +904 143 158 12 141 291 10 0 450 +905 18 484 -30 329 479 10 593 0 +906 250 411 -30 161 311 10 855 0 +907 19 273 25 957 1107 10 0 623 +908 365 28 9 250 400 10 0 57 +909 387 297 10 144 294 10 0 755 +910 433 447 -20 734 884 10 71 0 +911 214 274 -21 1309 1459 10 744 0 +912 489 338 -31 1337 1487 10 918 0 +913 130 494 6 699 849 10 0 128 +914 23 67 30 329 479 10 0 73 +915 374 489 20 269 419 10 0 719 +916 126 30 -30 252 402 10 743 0 +917 112 467 10 257 407 10 0 619 +918 489 274 31 474 624 10 0 912 +919 61 214 4 282 432 10 0 879 +920 166 440 -20 207 357 10 466 0 +921 56 75 -15 1378 1528 10 241 0 +922 210 276 5 47 197 10 0 641 +923 80 286 -20 173 323 10 449 0 +924 17 459 -18 362 512 10 634 0 +925 66 448 -30 270 420 10 987 0 +926 351 128 -2 1193 1343 10 749 0 +927 352 176 -19 126 276 10 727 0 +928 490 286 29 462 612 10 0 520 +929 247 219 17 31 181 10 0 453 +930 86 268 10 164 314 10 0 799 +931 398 329 17 167 317 10 0 29 +932 272 402 10 153 303 10 0 217 +933 317 123 20 143 293 10 0 264 +934 408 318 15 583 733 10 0 795 +935 66 31 -15 988 1138 10 574 0 +936 425 448 -20 734 884 10 630 0 +937 35 304 30 221 371 10 0 369 +938 471 94 -20 939 1089 10 896 0 +939 470 473 10 371 521 10 0 651 +940 224 56 13 1126 1276 0 0 1019 +941 343 47 -10 223 373 10 533 0 +942 52 18 -2 797 947 10 174 0 +943 16 68 -20 296 446 10 572 0 +944 195 185 -20 85 235 10 808 0 +945 92 236 -10 198 348 10 395 0 +946 76 462 18 896 1046 10 0 140 +947 124 56 20 231 381 10 0 733 +948 481 454 14 308 458 10 0 658 +949 477 483 -10 325 475 10 443 0 +950 481 124 10 263 413 10 0 865 +951 389 156 27 656 806 10 0 192 +952 384 16 20 291 441 10 0 274 +953 492 34 -20 751 901 10 708 0 +954 371 200 10 164 314 10 0 978 +955 153 235 10 98 248 10 0 14 +956 428 202 -33 844 994 10 363 0 +957 257 391 -10 1520 1670 10 354 0 +958 421 218 -10 194 344 10 725 0 +959 206 186 -32 128 278 10 234 0 +960 393 301 30 151 301 10 0 472 +961 204 187 -21 115 265 10 864 0 +962 468 475 10 313 463 10 0 213 +963 477 122 -10 270 420 10 670 0 +964 100 66 -4 1340 1490 10 895 0 +965 489 27 -10 361 511 10 263 0 +966 12 451 20 311 461 10 0 625 +967 197 270 30 56 206 10 0 698 +968 311 422 29 928 1078 10 0 141 +969 489 17 10 333 483 10 0 108 +970 13 214 21 1294 1444 0 0 1009 +971 440 247 20 193 343 10 0 260 +972 28 467 -20 1283 1433 10 358 0 +973 388 325 10 203 353 10 0 105 +974 270 401 20 152 302 10 0 436 +975 5 445 30 313 463 0 0 1006 +976 198 271 20 56 206 10 0 251 +977 480 131 5 628 778 10 0 820 +978 437 98 -10 1054 1204 10 954 0 +979 131 246 -5 772 922 10 562 0 +980 49 437 7 367 517 10 0 417 +981 270 49 -20 232 382 10 852 0 +982 337 41 8 942 1092 10 0 570 +983 318 280 -20 74 224 10 11 0 +984 154 392 9 171 321 10 0 255 +985 493 111 -20 481 631 10 776 0 +986 399 450 -3 299 449 10 710 0 +987 67 452 30 272 422 10 0 925 +988 34 239 16 216 366 10 0 127 +989 343 276 -10 96 246 10 542 0 +990 393 12 10 277 427 10 0 198 +991 236 247 -10 14 164 10 230 0 +992 340 291 22 410 560 10 0 265 +993 3 292 -8 250 400 10 407 0 +994 209 68 -26 1475 1625 10 373 0 +995 18 225 -1 631 781 10 538 0 +996 147 435 20 211 361 10 0 76 +997 335 99 -10 1158 1308 10 171 0 +998 485 24 -30 326 476 10 117 0 +999 470 475 30 314 464 10 0 499 +1000 341 58 10 212 362 10 0 287 +1001 473 475 -10 357 507 10 848 0 +1002 102 6 -3 1376 1526 10 555 0 +1003 498 456 -27 1339 1489 10 83 0 +1004 476 61 -36 389 539 10 320 0 +1005 445 273 -20 198 348 10 483 0 +1006 5 445 -30 313 463 10 975 0 +1007 435 20 -20 321 471 10 729 0 +1008 140 137 -32 510 660 10 789 0 +1009 13 214 -21 1294 1444 10 970 0 +1010 477 97 -10 273 423 10 552 0 +1011 387 488 -20 302 452 10 480 0 +1012 468 352 -9 708 858 10 649 0 +1013 365 190 -22 1417 1567 10 478 0 +1014 163 472 -9 593 743 10 138 0 +1015 125 39 -20 245 395 10 827 0 +1016 195 464 -20 1441 1591 10 113 0 +1017 413 421 -10 243 393 10 431 0 +1018 299 353 -34 114 264 10 271 0 +1019 224 56 -13 1126 1276 10 940 0 +1020 64 294 -12 1041 1191 10 163 0 +1021 240 34 -28 1445 1595 10 836 0 +1022 306 229 -10 1260 1410 10 527 0 +1023 111 392 -18 1109 1259 10 283 0 +1024 142 372 -18 162 312 10 144 0 +1025 52 303 -25 381 531 10 696 0 +1026 199 187 -20 81 231 10 753 0 +1027 439 266 -10 189 339 10 155 0 +1028 178 135 -21 1454 1604 10 270 0 +1029 397 153 -29 822 972 10 412 0 +1030 244 368 -25 354 504 10 862 0 +1031 365 274 -14 117 267 10 644 0 +1032 307 102 -40 158 308 10 884 0 +1033 418 251 -21 1137 1287 10 650 0 +1034 91 266 -10 173 323 10 203 0 +1035 105 181 -19 1471 1621 10 536 0 +1036 319 124 -20 143 293 10 866 0 +1037 213 397 -10 157 307 10 876 0 +1038 371 315 -18 1106 1256 10 722 0 +1039 333 293 -27 557 707 10 655 0 +1040 264 180 -33 1590 1740 10 115 0 +1041 366 288 -29 624 774 10 494 0 +1042 201 270 -10 52 202 10 126 0 +1043 231 204 -20 90 240 10 607 0 +1044 217 207 -26 1322 1472 10 714 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1102.txt b/jsprit-instances/instances/lilim/1000/LRC1102.txt new file mode 100644 index 00000000..f3c9c7df --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1102.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 18 892 922 0 0 1015 +2 214 394 -10 231 261 10 876 0 +3 476 483 10 0 1487 10 0 392 +4 352 487 27 0 1553 10 0 524 +5 230 197 40 122 152 0 0 1044 +6 175 239 23 75 105 10 0 30 +7 133 202 33 461 491 0 0 1046 +8 328 458 17 0 1589 10 0 353 +9 25 499 -40 0 1476 10 279 0 +10 226 423 -20 0 1637 10 220 0 +11 313 282 20 163 193 10 0 655 +12 60 454 10 347 377 10 0 366 +13 239 486 -30 1482 1512 10 839 0 +14 102 264 10 148 178 10 0 930 +15 408 452 10 0 1555 10 0 582 +16 451 62 5 282 312 10 0 320 +17 203 390 -21 159 189 10 451 0 +18 92 233 -10 0 1653 10 684 0 +19 7 300 -10 345 375 10 811 0 +20 409 90 20 258 288 10 0 580 +21 307 108 10 237 267 10 0 259 +22 347 54 10 295 325 10 0 852 +23 406 87 -10 0 1586 10 455 0 +24 371 332 -30 530 560 10 201 0 +25 116 466 20 254 284 10 0 168 +26 441 265 40 0 1620 10 0 560 +27 130 140 -6 194 224 10 799 0 +28 80 117 24 824 854 10 0 306 +29 421 387 -17 801 831 10 432 0 +30 83 300 -23 500 530 10 6 0 +31 136 52 -10 293 323 10 653 0 +32 18 462 -6 398 428 10 258 0 +33 390 120 24 1004 1034 10 0 926 +34 188 119 -17 975 1005 10 929 0 +35 467 114 10 376 406 10 0 611 +36 440 292 -31 940 970 10 918 0 +37 268 400 -10 243 273 10 534 0 +38 391 202 14 148 178 10 0 493 +39 377 432 -20 831 861 10 630 0 +40 80 290 10 197 227 10 0 367 +41 439 15 -20 343 373 10 474 0 +42 307 52 -10 920 950 10 278 0 +43 111 192 -15 1199 1229 10 688 0 +44 131 56 10 0 1584 10 0 759 +45 88 286 10 0 1646 10 0 803 +46 69 414 -4 1263 1293 10 64 0 +47 41 232 -32 209 239 10 193 0 +48 323 77 36 1405 1435 0 0 1027 +49 340 416 36 321 351 10 0 265 +50 86 199 23 0 1640 0 0 1036 +51 314 124 20 231 261 10 0 103 +52 375 191 30 0 1673 10 0 731 +53 226 175 -7 1694 1724 10 158 0 +54 242 106 -10 1268 1298 10 767 0 +55 417 417 10 332 362 10 0 83 +56 419 459 20 316 346 10 0 986 +57 389 11 20 0 1535 10 0 232 +58 450 416 25 577 607 10 0 651 +59 246 255 10 113 143 10 0 214 +60 71 333 -13 197 227 10 547 0 +61 105 474 -18 471 501 10 144 0 +62 20 489 -10 383 413 10 624 0 +63 388 331 20 160 190 10 0 537 +64 92 259 4 399 429 10 0 46 +65 200 261 10 166 196 10 0 610 +66 400 288 30 154 184 10 0 711 +67 299 285 -17 0 1751 10 931 0 +68 378 199 -20 207 237 10 806 0 +69 325 147 -27 1187 1217 10 951 0 +70 421 386 29 824 854 0 0 1014 +71 404 447 20 250 280 10 0 671 +72 412 478 7 960 990 10 0 712 +73 26 67 -10 1317 1347 10 266 0 +74 358 183 20 234 264 10 0 478 +75 30 302 10 267 297 10 0 645 +76 176 470 -30 0 1579 10 539 0 +77 96 270 20 162 192 10 0 203 +78 243 408 -30 0 1653 10 240 0 +79 60 29 32 0 1520 10 0 313 +80 34 169 11 484 514 10 0 832 +81 407 280 -25 0 1652 10 600 0 +82 277 403 10 175 205 10 0 436 +83 498 456 -10 1406 1436 10 55 0 +84 384 491 -10 348 378 10 164 0 +85 355 174 33 715 745 10 0 557 +86 97 288 -20 1284 1314 10 737 0 +87 316 284 20 125 155 10 0 992 +88 334 403 26 174 204 10 0 910 +89 415 223 20 305 335 10 0 184 +90 230 320 -20 1192 1222 10 679 0 +91 432 199 7 639 669 10 0 956 +92 92 18 -10 1124 1154 10 916 0 +93 273 300 30 55 85 0 0 1042 +94 269 112 -30 1263 1293 10 870 0 +95 429 389 18 424 454 10 0 98 +96 371 71 21 287 317 10 0 400 +97 5 297 -14 0 1562 10 496 0 +98 414 378 -18 495 525 10 95 0 +99 38 15 3 0 1495 10 0 964 +100 2 295 30 306 336 10 0 382 +101 237 254 -10 83 113 10 871 0 +102 54 445 -20 308 338 10 705 0 +103 382 110 -20 0 1619 10 51 0 +104 438 488 18 0 1508 10 0 821 +105 395 331 -20 217 247 10 315 0 +106 230 487 -12 1130 1160 10 920 0 +107 249 407 10 174 204 10 0 549 +108 488 26 30 433 463 10 0 288 +109 151 81 -27 1558 1588 10 700 0 +110 483 14 10 0 1480 10 0 263 +111 0 422 -10 821 851 10 625 0 +112 429 67 -10 732 762 10 321 0 +113 195 464 -1 1541 1571 10 182 0 +114 356 256 19 106 136 10 0 222 +115 264 180 -15 1681 1711 10 730 0 +116 94 235 20 156 186 10 0 319 +117 474 96 30 0 1540 0 0 1009 +118 268 52 -20 306 336 10 528 0 +119 44 440 -34 0 1531 10 972 0 +120 7 382 27 770 800 0 0 1011 +121 459 53 20 0 1524 10 0 454 +122 491 25 -20 409 439 10 998 0 +123 439 243 -20 0 1622 10 375 0 +124 210 185 -10 76 106 10 293 0 +125 150 68 -22 423 453 10 356 0 +126 201 270 10 52 82 10 0 868 +127 0 188 -21 932 962 10 510 0 +128 103 464 -29 1273 1303 10 668 0 +129 325 56 -10 0 1604 10 287 0 +130 44 344 12 1079 1109 10 0 369 +131 418 75 -20 448 478 10 861 0 +132 472 57 17 1295 1325 10 0 361 +133 460 328 13 224 254 10 0 491 +134 89 270 -20 204 234 10 613 0 +135 374 190 20 0 1674 0 0 1024 +136 463 253 -10 1047 1077 10 764 0 +137 97 93 -32 240 270 10 789 0 +138 163 472 9 653 683 0 0 1020 +139 29 336 22 332 362 10 0 163 +140 84 453 -10 0 1549 10 742 0 +141 294 421 -25 1575 1605 10 357 0 +142 343 62 10 357 387 10 0 982 +143 371 193 20 133 163 10 0 529 +144 142 372 18 162 192 10 0 61 +145 66 88 2 830 860 10 0 241 +146 395 332 -18 206 236 10 722 0 +147 93 413 17 226 256 10 0 178 +148 267 394 -20 259 289 10 974 0 +149 249 258 -20 0 1803 10 176 0 +150 472 129 10 252 282 10 0 345 +151 87 3 -10 1433 1463 10 530 0 +152 62 326 20 286 316 10 0 513 +153 212 186 -20 1707 1737 10 212 0 +154 241 402 11 0 1659 10 0 834 +155 439 266 10 189 219 10 0 971 +156 79 80 -20 1382 1412 10 525 0 +157 62 453 10 295 325 10 0 309 +158 188 151 7 1297 1327 10 0 53 +159 386 154 31 1101 1131 0 0 1038 +160 38 301 -20 296 326 10 304 0 +161 192 265 -20 124 154 10 976 0 +162 371 192 30 134 164 10 0 778 +163 64 294 -22 1101 1131 10 139 0 +164 381 494 10 333 363 10 0 84 +165 437 12 20 330 360 10 0 952 +166 186 135 24 0 1680 0 0 1030 +167 459 10 10 335 365 10 0 701 +168 175 422 -20 1446 1476 10 25 0 +169 274 48 10 211 241 10 0 564 +170 488 173 -10 279 309 10 245 0 +171 398 97 10 212 242 10 0 445 +172 385 17 40 809 839 10 0 196 +173 180 283 23 744 774 10 0 911 +174 71 12 2 297 327 10 0 717 +175 343 49 -30 0 1590 10 676 0 +176 248 251 20 2 32 10 0 149 +177 7 194 29 951 981 10 0 497 +178 322 290 -17 1479 1509 10 147 0 +179 410 399 25 234 264 10 0 250 +180 398 103 30 278 308 0 0 1033 +181 385 285 13 0 1672 10 0 603 +182 179 497 1 1411 1441 10 0 113 +183 464 13 -30 0 1492 10 365 0 +184 492 335 -20 828 858 10 89 0 +185 27 464 21 1291 1321 0 0 1007 +186 231 29 14 1226 1256 10 0 836 +187 157 38 -18 1048 1078 10 305 0 +188 439 268 -20 298 328 10 691 0 +189 149 214 7 482 512 10 0 961 +190 187 73 18 292 322 0 0 1045 +191 429 169 -20 903 933 10 446 0 +192 350 199 -31 1201 1231 10 592 0 +193 60 231 32 0 1621 10 0 47 +194 448 404 -20 599 629 10 897 0 +195 481 20 20 347 377 10 0 546 +196 436 25 -40 0 1520 10 172 0 +197 111 459 -10 359 389 10 628 0 +198 389 17 10 366 396 10 0 274 +199 148 208 -20 526 556 10 991 0 +200 475 477 20 0 1492 10 0 948 +201 390 325 30 251 281 10 0 24 +202 346 354 8 817 847 10 0 459 +203 91 266 -20 233 263 10 77 0 +204 17 65 20 327 357 10 0 572 +205 391 112 -10 1000 1030 10 490 0 +206 224 203 20 53 83 10 0 706 +207 426 231 -10 1028 1058 10 303 0 +208 260 472 33 1036 1066 10 0 485 +209 265 0 -10 896 926 10 235 0 +210 391 293 -10 226 256 10 352 0 +211 411 421 -10 315 345 10 892 0 +212 132 30 20 0 1562 10 0 153 +213 475 480 -20 379 409 10 949 0 +214 286 244 -10 1284 1314 10 59 0 +215 436 237 20 186 216 10 0 690 +216 402 284 -29 165 195 10 494 0 +217 287 397 -15 564 594 10 370 0 +218 272 420 7 0 1640 10 0 439 +219 477 120 10 342 372 10 0 648 +220 145 434 20 233 263 10 0 10 +221 33 286 11 1546 1576 0 0 1023 +222 370 262 -19 1099 1129 10 114 0 +223 393 20 -10 391 421 10 452 0 +224 330 308 24 1170 1200 10 0 795 +225 246 398 40 148 178 10 0 862 +226 482 184 -10 1107 1137 10 756 0 +227 451 305 13 208 238 10 0 482 +228 226 316 21 70 100 10 0 745 +229 110 459 30 348 378 10 0 697 +230 244 250 10 12 42 10 0 531 +231 458 16 20 313 343 10 0 456 +232 390 34 -20 1060 1090 10 57 0 +233 423 214 -10 217 247 10 725 0 +234 219 215 32 46 76 10 0 501 +235 326 118 10 152 182 10 0 209 +236 365 74 -30 848 878 10 405 0 +237 331 356 13 712 742 10 0 332 +238 210 398 -31 0 1658 10 860 0 +239 403 93 -30 0 1592 10 673 0 +240 248 404 30 154 184 10 0 78 +241 65 62 -2 976 1006 10 145 0 +242 460 13 20 322 352 10 0 364 +243 0 293 30 279 309 10 0 842 +244 211 248 26 39 69 10 0 823 +245 484 174 10 265 295 10 0 170 +246 175 352 12 0 1685 0 0 1039 +247 455 168 21 0 1591 10 0 595 +248 224 191 20 81 111 10 0 344 +249 439 156 -10 526 556 10 958 0 +250 434 359 -25 0 1598 10 179 0 +251 118 314 -30 338 368 10 805 0 +252 234 246 -30 65 95 10 779 0 +253 406 450 20 259 289 0 0 1016 +254 75 118 21 409 439 10 0 538 +255 115 395 -20 815 845 10 783 0 +256 329 456 -25 249 279 10 330 0 +257 218 403 -5 1319 1349 10 442 0 +258 149 341 6 0 1676 10 0 32 +259 253 74 -10 1350 1380 10 21 0 +260 436 241 -25 327 357 10 275 0 +261 238 203 10 94 124 10 0 994 +262 405 455 40 341 371 10 0 297 +263 485 27 -10 446 476 10 110 0 +264 323 118 20 161 191 10 0 884 +265 330 371 -36 559 589 10 49 0 +266 25 65 10 376 406 10 0 73 +267 406 96 20 219 249 10 0 638 +268 49 451 20 284 314 10 0 606 +269 307 249 -20 1377 1407 10 472 0 +270 178 135 -18 1514 1544 10 415 0 +271 299 353 34 114 144 10 0 662 +272 236 213 20 39 69 10 0 605 +273 355 177 20 0 1684 10 0 470 +274 394 23 -10 404 434 10 198 0 +275 306 235 25 57 87 10 0 260 +276 90 477 18 277 307 10 0 752 +277 379 486 -21 672 702 10 463 0 +278 435 16 10 367 397 10 0 42 +279 8 497 40 408 438 10 0 9 +280 150 484 -11 0 1557 10 825 0 +281 213 399 18 234 264 10 0 440 +282 391 18 -10 0 1540 10 846 0 +283 111 392 -10 1169 1199 10 395 0 +284 330 281 14 1330 1360 10 0 771 +285 344 203 14 0 1706 10 0 588 +286 91 235 -10 269 299 10 408 0 +287 346 60 10 321 351 10 0 129 +288 483 27 -30 458 488 10 108 0 +289 382 498 10 0 1531 10 0 681 +290 457 492 -10 508 538 10 848 0 +291 291 213 23 0 1756 10 0 866 +292 154 374 36 0 1655 10 0 503 +293 225 196 10 0 1752 10 0 124 +294 94 40 -25 0 1550 10 935 0 +295 0 356 -17 1086 1116 10 511 0 +296 297 283 -10 1349 1379 10 853 0 +297 371 423 -40 0 1600 10 262 0 +298 417 217 30 189 219 10 0 678 +299 500 228 -20 782 812 10 401 0 +300 412 214 10 0 1646 0 0 1019 +301 442 289 25 195 225 10 0 483 +302 157 269 -17 1576 1606 10 979 0 +303 440 241 10 301 331 10 0 207 +304 100 266 20 0 1661 10 0 160 +305 111 178 18 156 186 10 0 187 +306 91 101 -24 0 1594 10 28 0 +307 25 307 -20 249 279 10 615 0 +308 135 400 20 299 329 10 0 393 +309 58 458 -10 323 353 10 157 0 +310 133 26 -28 0 1559 10 411 0 +311 211 386 20 0 1670 10 0 368 +312 94 97 20 218 248 10 0 970 +313 30 155 -32 1280 1310 10 79 0 +314 208 184 20 0 1733 10 0 753 +315 394 333 20 194 224 10 0 105 +316 355 180 30 0 1685 10 0 762 +317 241 180 13 0 1741 10 0 715 +318 21 485 30 0 1483 10 0 489 +319 80 251 -20 304 334 10 116 0 +320 476 61 -5 449 479 10 16 0 +321 406 94 10 0 1591 10 0 112 +322 364 71 -20 1348 1378 10 708 0 +323 418 221 -20 291 321 10 874 0 +324 274 441 12 695 725 10 0 968 +325 304 97 20 182 212 10 0 751 +326 297 102 10 155 185 0 0 1026 +327 250 405 20 162 192 10 0 475 +328 111 463 20 0 1557 10 0 585 +329 408 279 -20 0 1651 10 341 0 +330 263 418 25 0 1643 10 0 256 +331 480 119 -30 0 1547 10 938 0 +332 420 383 -13 982 1012 10 237 0 +333 142 14 -10 0 1552 10 621 0 +334 73 328 20 193 223 10 0 340 +335 50 438 20 0 1537 10 0 641 +336 441 7 20 392 422 10 0 371 +337 462 14 -20 397 427 10 682 0 +338 360 294 -24 1418 1448 10 556 0 +339 58 39 12 1163 1193 10 0 423 +340 58 391 -20 882 912 10 334 0 +341 410 285 20 193 223 10 0 329 +342 96 97 -12 217 247 10 904 0 +343 21 64 -28 0 1516 10 942 0 +344 238 210 -20 134 164 10 248 0 +345 479 121 -10 308 338 10 150 0 +346 200 178 20 94 124 10 0 450 +347 216 341 -10 0 1714 10 740 0 +348 48 437 -31 804 834 10 899 0 +349 200 270 20 59 89 10 0 647 +350 357 181 20 149 179 10 0 514 +351 476 174 -20 324 354 10 591 0 +352 400 286 10 154 184 10 0 210 +353 351 481 -17 322 352 10 8 0 +354 270 400 10 0 1660 10 0 878 +355 95 234 10 163 193 10 0 900 +356 128 113 22 363 393 10 0 125 +357 133 455 25 808 838 10 0 141 +358 16 463 20 375 405 10 0 551 +359 59 388 -10 663 693 10 461 0 +360 376 190 -10 155 185 10 602 0 +361 481 122 -17 0 1547 10 132 0 +362 266 405 -10 217 247 10 932 0 +363 374 232 33 125 155 0 0 1028 +364 398 20 -20 0 1538 10 242 0 +365 481 26 30 0 1490 10 0 183 +366 63 444 -10 380 410 10 12 0 +367 89 290 -10 0 1646 10 40 0 +368 246 314 -20 1445 1475 10 311 0 +369 40 304 -12 1145 1175 10 130 0 +370 262 369 15 0 1692 10 0 217 +371 323 29 -20 0 1579 10 336 0 +372 89 65 -20 720 750 10 947 0 +373 144 35 26 239 269 10 0 632 +374 200 265 10 152 182 10 0 458 +375 436 264 20 186 216 10 0 123 +376 15 457 20 323 353 10 0 858 +377 397 20 20 280 310 10 0 990 +378 328 491 21 0 1558 10 0 936 +379 399 175 -14 747 777 10 594 0 +380 432 2 -20 467 497 10 873 0 +381 63 336 -20 266 296 10 587 0 +382 6 296 -30 320 350 10 100 0 +383 146 376 8 234 264 10 0 744 +384 295 247 -20 1303 1333 10 659 0 +385 235 33 -30 1337 1367 10 686 0 +386 233 204 20 54 84 10 0 714 +387 142 360 -20 1532 1562 10 583 0 +388 177 156 25 0 1692 10 0 733 +389 315 287 -30 148 178 10 402 0 +390 452 172 -10 0 1595 10 963 0 +391 263 153 12 412 442 10 0 540 +392 493 493 -10 856 886 10 3 0 +393 320 283 -20 0 1734 10 308 0 +394 64 5 14 1129 1159 10 0 410 +395 95 235 10 155 185 10 0 283 +396 203 211 -20 1306 1336 10 808 0 +397 16 497 20 426 456 0 0 1001 +398 348 348 23 0 1673 10 0 512 +399 485 104 21 794 824 0 0 1010 +400 330 147 -21 0 1681 10 96 0 +401 443 237 20 193 223 10 0 299 +402 316 286 30 137 167 10 0 389 +403 335 46 -10 1342 1372 10 844 0 +404 381 495 -25 322 352 10 409 0 +405 364 173 30 180 210 10 0 236 +406 267 162 -10 1449 1479 10 533 0 +407 214 245 -8 0 1775 10 879 0 +408 92 234 10 235 265 10 0 286 +409 347 459 25 0 1581 10 0 404 +410 30 7 -14 1189 1219 10 394 0 +411 120 37 28 775 805 10 0 310 +412 397 153 -20 882 912 10 891 0 +413 210 29 -18 1051 1081 10 558 0 +414 87 285 -20 241 271 10 449 0 +415 132 32 18 784 814 10 0 270 +416 390 294 -30 237 267 10 792 0 +417 67 451 -7 1216 1246 10 980 0 +418 24 68 -30 0 1521 10 914 0 +419 146 439 -20 259 289 10 996 0 +420 209 212 -20 1528 1558 10 500 0 +421 6 292 10 0 1564 10 0 882 +422 18 63 -10 339 369 10 851 0 +423 149 98 -12 0 1629 10 339 0 +424 91 268 -17 245 275 10 817 0 +425 103 177 28 626 656 10 0 427 +426 367 178 20 180 210 10 0 643 +427 225 269 -28 1271 1301 10 425 0 +428 443 246 20 230 260 10 0 889 +429 306 42 -30 477 507 10 981 0 +430 374 306 -12 0 1675 10 863 0 +431 413 421 10 303 333 10 0 545 +432 470 405 17 0 1542 10 0 29 +433 33 278 -30 1487 1517 10 869 0 +434 149 458 -10 1164 1194 10 917 0 +435 257 57 -20 1226 1256 10 941 0 +436 272 403 -10 190 220 10 82 0 +437 221 291 9 50 80 10 0 466 +438 1 101 -18 0 1521 10 506 0 +439 332 459 -7 369 399 10 218 0 +440 220 392 -18 258 288 10 281 0 +441 253 50 27 226 256 10 0 750 +442 250 441 5 756 786 10 0 257 +443 471 484 10 340 370 10 0 460 +444 480 152 -20 1022 1052 10 888 0 +445 404 83 -10 298 328 10 171 0 +446 476 94 20 0 1537 10 0 191 +447 458 213 -21 1128 1158 10 650 0 +448 215 395 -30 242 272 10 855 0 +449 85 288 20 182 212 10 0 414 +450 179 75 -20 740 770 10 346 0 +451 228 287 21 43 73 10 0 17 +452 397 18 10 292 322 10 0 223 +453 238 204 20 0 1764 10 0 652 +454 488 3 -20 401 431 10 121 0 +455 407 88 10 0 1586 10 0 23 +456 459 14 -20 315 345 10 231 0 +457 120 17 30 0 1545 0 0 1008 +458 235 316 -10 656 686 10 374 0 +459 370 382 -8 884 914 10 202 0 +460 405 454 -10 1303 1333 10 443 0 +461 17 458 10 433 463 10 0 359 +462 43 135 -28 0 1575 10 476 0 +463 318 497 21 0 1555 10 0 277 +464 199 268 -10 71 101 10 793 0 +465 111 467 20 287 317 0 0 1013 +466 138 438 -9 287 317 10 437 0 +467 172 314 9 0 1711 10 0 791 +468 494 468 31 352 382 10 0 939 +469 35 303 -10 221 251 10 618 0 +470 341 59 -20 790 820 10 273 0 +471 423 221 -10 258 288 10 522 0 +472 395 295 20 211 241 10 0 269 +473 413 417 -20 356 386 10 828 0 +474 339 60 20 211 241 10 0 41 +475 277 428 -20 490 520 10 327 0 +476 176 199 28 89 119 10 0 462 +477 265 240 -16 0 1793 10 669 0 +478 365 190 -20 0 1682 10 74 0 +479 133 53 20 0 1582 10 0 743 +480 387 488 20 362 392 10 0 680 +481 385 295 20 0 1669 0 0 1040 +482 491 369 -13 730 760 10 227 0 +483 445 273 -25 258 288 10 301 0 +484 195 273 -12 59 89 10 735 0 +485 313 493 -33 1193 1223 10 208 0 +486 495 227 20 0 1565 0 0 1022 +487 241 403 -38 220 250 10 581 0 +488 30 72 -27 0 1529 10 898 0 +489 21 487 -30 350 380 10 318 0 +490 324 99 10 338 368 10 0 205 +491 453 318 -13 374 404 10 133 0 +492 443 272 -20 270 300 10 707 0 +493 447 184 -14 0 1604 10 38 0 +494 366 288 29 0 1689 10 0 216 +495 440 284 25 852 882 10 0 912 +496 13 314 14 245 275 10 0 97 +497 72 227 -29 0 1632 10 177 0 +498 377 385 -25 0 1626 10 802 0 +499 477 478 -10 392 422 10 962 0 +500 204 185 20 163 193 10 0 420 +501 226 191 -32 0 1748 10 234 0 +502 330 138 -25 0 1674 10 997 0 +503 185 434 -36 574 604 10 292 0 +504 483 22 10 334 364 10 0 965 +505 71 282 -19 0 1630 10 642 0 +506 60 5 18 0 1501 10 0 438 +507 189 402 10 536 566 10 0 657 +508 134 211 35 122 152 10 0 887 +509 146 313 -15 1195 1225 10 626 0 +510 21 146 21 487 517 10 0 127 +511 37 281 17 493 523 10 0 295 +512 416 417 -23 0 1576 10 398 0 +513 44 311 -20 407 437 10 152 0 +514 361 181 -20 197 227 10 350 0 +515 444 242 10 216 246 10 0 541 +516 444 271 10 0 1616 10 0 548 +517 359 179 20 0 1681 10 0 883 +518 388 334 20 0 1650 10 0 598 +519 401 164 -15 621 651 10 989 0 +520 499 316 -19 622 652 10 577 0 +521 399 106 -20 302 332 10 903 0 +522 425 215 10 229 259 10 0 471 +523 407 98 -21 0 1593 10 661 0 +524 406 460 -27 719 749 10 4 0 +525 88 95 20 270 300 10 0 156 +526 95 64 -40 766 796 10 885 0 +527 306 229 -37 1320 1350 10 672 0 +528 273 55 20 196 226 10 0 118 +529 384 149 -20 1197 1227 10 143 0 +530 122 35 10 250 280 10 0 151 +531 308 199 -10 0 1734 10 230 0 +532 390 301 10 165 195 10 0 934 +533 300 108 10 0 1661 10 0 406 +534 267 400 10 232 262 10 0 37 +535 8 300 10 0 1564 10 0 728 +536 105 181 19 0 1651 10 0 694 +537 398 325 -20 233 263 10 63 0 +538 166 247 -21 0 1727 10 254 0 +539 140 431 30 211 241 10 0 76 +540 253 118 -12 547 577 10 391 0 +541 359 246 -10 1423 1453 10 515 0 +542 321 277 10 0 1736 0 0 1035 +543 168 59 6 366 396 10 0 663 +544 406 285 20 0 1652 10 0 649 +545 391 334 -10 0 1647 10 431 0 +546 437 19 -20 1014 1044 10 195 0 +547 201 278 13 56 86 10 0 60 +548 435 267 -10 323 353 10 516 0 +549 245 408 -10 204 234 10 107 0 +550 16 462 -9 0 1496 10 739 0 +551 107 374 -20 914 944 10 358 0 +552 477 97 -17 0 1538 10 571 0 +553 346 57 20 308 338 10 0 570 +554 14 459 20 336 366 10 0 924 +555 102 6 3 0 1526 10 0 559 +556 359 287 24 115 145 10 0 338 +557 297 131 -33 1165 1195 10 85 0 +558 282 1 18 0 1560 10 0 413 +559 21 70 -3 771 801 10 555 0 +560 440 244 -40 266 296 10 26 0 +561 482 104 -16 0 1537 10 978 0 +562 120 261 -20 793 823 10 945 0 +563 125 29 -20 283 313 10 827 0 +564 292 32 -10 0 1589 10 169 0 +565 262 92 25 630 660 10 0 940 +566 68 160 -18 1136 1166 10 614 0 +567 405 276 -7 0 1654 10 775 0 +568 277 50 10 201 231 10 0 699 +569 32 319 21 401 431 10 0 907 +570 344 70 -20 1146 1176 10 553 0 +571 481 84 17 506 536 10 0 552 +572 21 68 -20 401 431 10 204 0 +573 441 244 10 277 307 10 0 683 +574 57 43 15 0 1528 0 0 1005 +575 1 293 -20 268 298 10 993 0 +576 481 96 20 297 327 10 0 985 +577 471 368 19 428 458 10 0 520 +578 236 126 23 124 154 10 0 723 +579 406 99 20 227 257 10 0 824 +580 303 186 -20 1354 1384 10 20 0 +581 225 369 38 121 151 10 0 487 +582 412 453 -10 297 327 10 15 0 +583 104 349 20 1009 1039 10 0 387 +584 173 182 25 102 132 10 0 895 +585 111 464 -20 0 1556 10 328 0 +586 53 440 -10 323 353 10 664 0 +587 69 336 20 218 248 10 0 381 +588 359 182 -14 209 239 10 285 0 +589 13 459 20 347 377 10 0 619 +590 244 277 18 0 1784 0 0 1041 +591 484 177 20 252 282 10 0 351 +592 452 206 31 492 522 10 0 192 +593 22 483 30 325 355 10 0 905 +594 452 110 14 340 370 10 0 379 +595 347 192 -21 1488 1518 10 247 0 +596 95 92 20 0 1590 10 0 921 +597 368 311 -15 0 1679 10 758 0 +598 479 387 -20 397 427 10 518 0 +599 479 169 -20 0 1569 10 875 0 +600 497 266 25 0 1564 10 0 81 +601 66 336 10 253 283 10 0 880 +602 376 195 10 0 1674 10 0 360 +603 401 281 -13 261 291 10 181 0 +604 441 177 23 0 1607 10 0 877 +605 231 203 -20 67 97 10 272 0 +606 21 488 -20 361 391 10 268 0 +607 231 204 -10 150 180 10 660 0 +608 122 422 3 1457 1487 10 0 785 +609 65 453 -10 282 312 10 925 0 +610 206 261 -10 182 212 10 65 0 +611 466 149 -10 1186 1216 10 35 0 +612 313 119 30 216 246 10 0 633 +613 90 274 20 179 209 10 0 134 +614 39 162 18 565 595 10 0 566 +615 35 306 20 229 259 10 0 307 +616 437 15 -10 0 1511 10 969 0 +617 307 412 -5 404 434 10 741 0 +618 79 291 10 0 1636 10 0 469 +619 64 437 -20 918 948 10 589 0 +620 376 92 -14 991 1021 10 765 0 +621 129 27 10 298 328 10 0 333 +622 196 489 23 1030 1060 10 0 710 +623 51 286 -20 0 1609 10 845 0 +624 20 488 10 372 402 10 0 62 +625 13 455 10 0 1498 10 0 111 +626 170 347 15 436 466 10 0 509 +627 92 230 20 0 1652 10 0 772 +628 117 467 10 254 284 10 0 197 +629 413 217 20 0 1645 10 0 677 +630 405 450 20 0 1558 10 0 39 +631 394 322 -30 0 1651 10 960 0 +632 125 61 -26 612 642 10 373 0 +633 238 123 -30 781 811 10 612 0 +634 11 403 18 343 373 10 0 770 +635 89 272 10 0 1649 0 0 1031 +636 304 102 -20 0 1654 10 797 0 +637 478 121 40 319 349 10 0 665 +638 408 84 -20 284 314 10 267 0 +639 376 494 30 274 304 0 0 1012 +640 20 73 10 290 320 10 0 881 +641 159 299 -20 1016 1046 10 335 0 +642 95 382 19 231 261 10 0 505 +643 352 63 -20 1178 1208 10 426 0 +644 365 274 14 117 147 10 0 954 +645 30 301 -10 278 308 10 75 0 +646 351 5 -20 496 526 10 729 0 +647 197 267 -20 109 139 10 349 0 +648 498 171 -10 1256 1286 10 219 0 +649 468 352 -20 768 798 10 544 0 +650 418 251 21 0 1643 10 0 447 +651 489 437 -25 707 737 10 58 0 +652 251 63 -20 0 1624 10 453 0 +653 132 55 10 267 297 10 0 31 +654 281 96 -30 1126 1156 10 849 0 +655 333 293 -20 617 647 10 11 0 +656 255 487 19 0 1574 0 0 1029 +657 207 400 -10 0 1655 10 507 0 +658 469 489 4 555 585 0 0 1002 +659 244 254 20 100 130 10 0 384 +660 233 207 10 46 76 10 0 607 +661 441 60 21 1459 1489 10 0 523 +662 411 379 -34 1193 1223 10 271 0 +663 178 72 -6 757 787 10 543 0 +664 51 447 10 294 324 10 0 586 +665 478 118 -40 354 384 10 637 0 +666 141 426 -20 0 1604 10 837 0 +667 295 89 -12 742 772 10 720 0 +668 112 433 29 235 265 10 0 128 +669 320 211 16 0 1731 10 0 477 +670 400 103 10 0 1601 10 0 781 +671 408 453 -20 283 313 10 71 0 +672 435 180 37 225 255 10 0 527 +673 432 66 30 1071 1101 10 0 239 +674 374 116 -10 587 617 10 736 0 +675 478 102 10 324 354 10 0 780 +676 335 57 30 210 240 10 0 175 +677 385 239 -20 786 816 10 629 0 +678 386 245 -30 479 509 10 298 0 +679 208 396 20 176 206 10 0 90 +680 380 489 -20 379 409 10 480 0 +681 380 498 -10 0 1531 10 289 0 +682 440 7 20 314 344 10 0 337 +683 434 245 -10 342 372 10 573 0 +684 90 232 10 212 242 10 0 18 +685 389 334 20 169 199 10 0 831 +686 241 205 30 118 148 10 0 385 +687 18 24 32 628 658 10 0 816 +688 57 183 15 0 1607 10 0 43 +689 59 457 -11 334 364 10 833 0 +690 442 243 -20 289 319 10 215 0 +691 402 281 20 0 1656 10 0 188 +692 445 237 10 200 230 10 0 713 +693 441 273 20 282 312 10 0 794 +694 31 175 -19 247 277 10 536 0 +695 234 202 10 80 110 10 0 760 +696 52 303 25 441 471 0 0 1018 +697 167 445 -30 1412 1442 10 229 0 +698 179 286 -30 341 371 10 967 0 +699 269 48 -10 281 311 10 568 0 +700 165 59 27 943 973 10 0 109 +701 461 8 -10 369 399 10 167 0 +702 421 415 30 237 267 10 0 774 +703 59 459 20 311 341 10 0 747 +704 24 492 -30 0 1480 10 987 0 +705 55 449 20 278 308 10 0 102 +706 224 192 -20 0 1748 10 206 0 +707 444 269 20 234 264 10 0 492 +708 491 20 20 394 424 10 0 322 +709 313 126 -20 243 273 10 927 0 +710 283 438 -23 0 1621 10 622 0 +711 352 241 -30 792 822 10 66 0 +712 398 476 -7 0 1541 10 72 0 +713 442 247 -10 241 271 10 692 0 +714 217 207 -20 1382 1412 10 386 0 +715 233 87 -13 253 283 10 317 0 +716 479 127 -8 270 300 10 820 0 +717 6 53 -2 587 617 10 174 0 +718 478 300 -10 890 920 10 777 0 +719 378 493 -20 282 312 10 915 0 +720 303 78 12 179 209 10 0 667 +721 344 62 -10 346 376 10 732 0 +722 371 315 18 0 1674 10 0 146 +723 200 78 -23 0 1632 10 578 0 +724 413 391 8 217 247 10 0 840 +725 415 216 10 176 206 10 0 233 +726 397 57 -15 1476 1506 10 804 0 +727 293 228 -22 0 1763 10 790 0 +728 0 297 -10 0 1557 10 535 0 +729 435 20 20 381 411 10 0 646 +730 195 111 15 998 1028 10 0 115 +731 417 218 -30 278 308 10 52 0 +732 340 54 10 238 268 10 0 721 +733 132 57 -25 244 274 10 388 0 +734 210 379 -23 709 739 10 835 0 +735 228 260 12 0 1787 10 0 484 +736 399 104 10 0 1603 10 0 674 +737 95 277 20 274 304 10 0 86 +738 360 284 19 0 1696 10 0 909 +739 53 466 9 335 365 10 0 550 +740 112 465 10 299 329 10 0 347 +741 313 391 5 154 184 10 0 617 +742 93 235 10 246 276 10 0 140 +743 125 32 -20 259 289 10 479 0 +744 215 282 -8 1440 1470 10 383 0 +745 224 320 -21 0 1737 10 228 0 +746 134 428 20 308 338 10 0 761 +747 26 490 -20 475 505 10 703 0 +748 44 115 24 0 1565 10 0 943 +749 438 127 -5 0 1587 10 953 0 +750 239 15 -27 604 634 10 441 0 +751 342 54 -20 250 280 10 325 0 +752 109 463 -18 334 364 10 276 0 +753 199 187 -20 127 157 10 314 0 +754 201 188 10 0 1732 10 0 872 +755 399 301 -10 194 224 10 894 0 +756 484 171 10 293 323 10 0 226 +757 272 234 -10 1590 1620 10 819 0 +758 380 350 15 866 896 10 0 597 +759 140 108 -10 1071 1101 10 44 0 +760 228 199 -10 0 1756 10 695 0 +761 245 461 -20 649 679 10 746 0 +762 305 107 -30 0 1658 10 316 0 +763 231 195 20 109 139 10 0 859 +764 450 265 10 0 1611 10 0 136 +765 273 149 14 0 1708 10 0 620 +766 12 358 -30 1224 1254 10 937 0 +767 315 121 10 203 233 10 0 54 +768 420 213 10 204 234 10 0 854 +769 331 134 11 0 1670 10 0 841 +770 84 377 -18 926 956 10 634 0 +771 320 280 -14 0 1735 10 284 0 +772 89 185 -20 600 630 10 627 0 +773 472 481 -30 327 357 10 999 0 +774 422 420 -30 0 1570 10 702 0 +775 475 267 7 780 810 10 0 567 +776 470 125 20 0 1558 10 0 977 +777 435 268 10 312 342 10 0 718 +778 409 155 -30 185 215 10 162 0 +779 243 248 30 24 54 10 0 252 +780 488 96 -10 1066 1096 10 675 0 +781 341 72 -10 805 835 10 670 0 +782 58 449 -18 363 393 10 946 0 +783 16 460 20 411 441 10 0 255 +784 480 136 22 256 286 10 0 890 +785 162 388 -3 0 1648 10 608 0 +786 47 208 30 226 256 10 0 919 +787 324 127 30 143 173 10 0 810 +788 87 96 -20 282 312 10 800 0 +789 140 137 32 0 1654 10 0 137 +790 314 205 22 1527 1557 10 0 727 +791 96 346 -9 185 215 10 467 0 +792 321 280 30 77 107 10 0 416 +793 245 251 10 5 35 10 0 464 +794 436 295 -20 528 558 10 693 0 +795 274 261 -24 1707 1737 10 224 0 +796 271 128 -20 346 376 10 933 0 +797 275 45 20 225 255 10 0 636 +798 422 409 10 234 264 0 0 1006 +799 146 188 6 0 1690 10 0 27 +800 93 96 20 225 255 10 0 788 +801 409 255 23 0 1652 0 0 1034 +802 449 428 25 0 1545 10 0 498 +803 90 285 -10 276 306 10 45 0 +804 415 95 15 1177 1207 10 0 726 +805 88 287 30 263 293 10 0 251 +806 379 196 20 194 224 10 0 68 +807 368 452 -22 670 700 10 957 0 +808 202 186 20 151 181 10 0 396 +809 435 11 -20 302 332 10 856 0 +810 269 46 -30 0 1607 10 787 0 +811 7 292 10 246 276 10 0 19 +812 44 496 32 0 1491 0 0 1004 +813 478 99 10 311 341 10 0 896 +814 391 99 -5 0 1605 10 901 0 +815 132 477 -30 0 1556 10 867 0 +816 24 65 -32 0 1519 10 687 0 +817 130 247 17 120 150 10 0 424 +818 133 273 20 119 149 10 0 822 +819 347 62 10 0 1600 10 0 757 +820 404 140 8 0 1622 10 0 716 +821 416 420 -18 0 1574 10 104 0 +822 67 335 -20 0 1610 10 818 0 +823 92 270 -26 257 287 10 244 0 +824 411 95 -20 243 273 10 579 0 +825 132 479 11 257 287 10 0 280 +826 366 334 -10 410 440 10 973 0 +827 125 39 20 0 1566 10 0 563 +828 419 422 20 276 306 10 0 473 +829 460 2 20 0 1487 0 0 1003 +830 67 334 -5 231 261 10 922 0 +831 448 414 -20 0 1554 10 685 0 +832 46 163 -11 926 956 10 80 0 +833 77 465 11 275 305 10 0 689 +834 284 319 -11 817 847 10 154 0 +835 102 422 23 226 256 10 0 734 +836 240 34 -14 1560 1590 10 186 0 +837 141 428 20 208 238 10 0 666 +838 204 269 30 49 79 10 0 886 +839 144 439 30 0 1595 10 0 13 +840 470 417 -8 737 767 10 724 0 +841 404 103 -11 242 272 10 769 0 +842 5 281 -30 1372 1402 10 243 0 +843 487 320 21 0 1564 10 0 928 +844 398 23 10 270 300 10 0 403 +845 90 296 20 166 196 10 0 623 +846 386 13 10 337 367 10 0 282 +847 115 465 10 0 1558 10 0 913 +848 473 475 10 417 447 10 0 290 +849 275 42 30 238 268 10 0 654 +850 286 356 -30 0 1700 10 906 0 +851 15 69 10 296 326 10 0 422 +852 267 44 -10 0 1605 10 22 0 +853 243 399 10 235 265 10 0 296 +854 390 249 -10 582 612 10 768 0 +855 210 391 30 146 176 10 0 448 +856 433 15 20 297 327 10 0 809 +857 24 259 -12 0 1585 10 902 0 +858 12 463 -20 361 391 10 376 0 +859 237 213 -20 147 177 10 763 0 +860 182 480 31 0 1572 10 0 238 +861 409 88 20 270 300 10 0 131 +862 244 368 -40 414 444 10 225 0 +863 381 328 12 717 747 10 0 430 +864 213 185 21 0 1737 10 0 944 +865 482 141 -10 0 1555 10 950 0 +866 319 124 -23 178 208 10 291 0 +867 141 431 30 0 1600 10 0 815 +868 198 264 -10 140 170 10 126 0 +869 69 334 30 206 236 10 0 433 +870 299 98 30 0 1652 10 0 94 +871 240 250 10 37 67 10 0 101 +872 199 203 -10 1457 1487 10 754 0 +873 459 17 20 411 441 10 0 380 +874 423 217 20 242 272 10 0 323 +875 477 179 20 0 1574 10 0 599 +876 213 397 10 217 247 10 0 2 +877 405 187 -23 1251 1281 10 604 0 +878 269 402 -10 203 233 10 354 0 +879 53 204 8 1055 1085 10 0 407 +880 13 394 -10 0 1534 10 601 0 +881 15 68 -10 303 333 10 640 0 +882 56 268 -10 1064 1094 10 421 0 +883 360 184 -20 0 1683 10 517 0 +884 307 102 -20 210 240 10 264 0 +885 130 57 40 0 1584 10 0 526 +886 250 328 -30 249 279 10 838 0 +887 91 231 -35 200 230 10 508 0 +888 479 176 20 240 270 10 0 444 +889 420 224 -20 0 1640 10 428 0 +890 461 182 -22 629 659 10 784 0 +891 418 218 20 267 297 10 0 412 +892 419 418 10 249 279 10 0 211 +893 336 493 20 1493 1523 0 0 1021 +894 389 300 10 154 184 10 0 755 +895 92 76 -25 1139 1169 10 584 0 +896 476 102 -10 336 366 10 813 0 +897 418 399 20 0 1587 10 0 194 +898 109 56 27 239 269 10 0 488 +899 13 465 31 774 804 10 0 348 +900 92 232 -10 177 207 10 355 0 +901 394 47 5 313 343 10 0 814 +902 16 287 12 0 1575 10 0 857 +903 399 102 20 267 297 10 0 521 +904 143 158 12 141 171 10 0 342 +905 18 484 -30 329 359 10 593 0 +906 250 411 30 188 218 10 0 850 +907 19 273 -21 1017 1047 10 569 0 +908 365 28 -10 268 298 10 1000 0 +909 387 297 -19 144 174 10 738 0 +910 433 447 -26 794 824 10 88 0 +911 214 274 -23 1369 1399 10 173 0 +912 489 338 -25 1397 1427 10 495 0 +913 130 494 -10 759 789 10 847 0 +914 23 67 30 389 419 10 0 418 +915 374 489 20 269 299 10 0 719 +916 126 30 10 272 302 10 0 92 +917 112 467 10 276 306 10 0 434 +918 489 274 31 534 564 10 0 36 +919 61 214 -30 342 372 10 786 0 +920 166 440 12 207 237 10 0 106 +921 56 75 -20 1438 1468 10 596 0 +922 210 276 5 47 77 10 0 830 +923 80 286 10 0 1638 0 0 1032 +924 17 459 -20 422 452 10 554 0 +925 66 448 10 270 300 10 0 609 +926 351 128 -24 1253 1283 10 33 0 +927 352 176 20 126 156 10 0 709 +928 490 286 -21 522 552 10 843 0 +929 247 219 17 0 1780 10 0 34 +930 86 268 -10 217 247 10 14 0 +931 398 329 17 167 197 10 0 67 +932 272 402 10 160 190 10 0 362 +933 317 123 20 190 220 10 0 796 +934 408 318 -10 643 673 10 532 0 +935 66 31 25 1048 1078 10 0 294 +936 425 448 -21 794 824 10 378 0 +937 35 304 30 0 1590 10 0 766 +938 471 94 30 0 1541 10 0 331 +939 470 473 -31 431 461 10 468 0 +940 224 56 -25 1186 1216 10 565 0 +941 343 47 20 277 307 10 0 435 +942 52 18 28 0 1506 10 0 343 +943 16 68 -24 314 344 10 748 0 +944 195 185 -21 0 1726 10 864 0 +945 92 236 20 258 288 10 0 562 +946 76 462 18 0 1537 10 0 782 +947 124 56 20 231 261 10 0 372 +948 481 454 -20 0 1503 10 200 0 +949 477 483 20 366 396 10 0 213 +950 481 124 10 0 1548 10 0 865 +951 389 156 27 716 746 10 0 69 +952 384 16 -20 0 1542 10 165 0 +953 492 34 5 811 841 10 0 749 +954 371 200 -14 224 254 10 644 0 +955 153 235 -16 0 1713 10 988 0 +956 428 202 -7 904 934 10 91 0 +957 257 391 22 0 1670 10 0 807 +958 421 218 10 254 284 10 0 249 +959 206 186 10 188 218 0 0 1037 +960 393 301 30 0 1660 10 0 631 +961 204 187 -7 0 1733 10 189 0 +962 468 475 10 313 343 10 0 499 +963 477 122 10 330 360 10 0 390 +964 100 66 -3 1400 1430 10 99 0 +965 489 27 -10 421 451 10 504 0 +966 12 451 -30 311 341 10 975 0 +967 197 270 30 96 126 10 0 698 +968 311 422 -12 988 1018 10 324 0 +969 489 17 10 380 410 10 0 616 +970 13 214 -20 1354 1384 10 312 0 +971 440 247 -10 253 283 10 155 0 +972 28 467 34 1343 1373 10 0 119 +973 388 325 10 263 293 10 0 826 +974 270 401 20 152 182 10 0 148 +975 5 445 30 0 1498 10 0 966 +976 198 271 20 0 1755 10 0 161 +977 480 131 -20 688 718 10 776 0 +978 437 98 16 0 1571 10 0 561 +979 131 246 17 832 862 10 0 302 +980 49 437 7 0 1537 10 0 417 +981 270 49 30 292 322 10 0 429 +982 337 41 -10 0 1585 10 142 0 +983 318 280 20 0 1737 0 0 1043 +984 154 392 9 0 1640 0 0 1017 +985 493 111 -20 0 1532 10 576 0 +986 399 450 -20 359 389 10 56 0 +987 67 452 30 0 1539 10 0 704 +988 34 239 16 0 1595 10 0 955 +989 343 276 15 96 126 10 0 519 +990 393 12 -20 309 339 10 377 0 +991 236 247 20 0 1797 10 0 199 +992 340 291 -20 470 500 10 87 0 +993 3 292 20 256 286 10 0 575 +994 209 68 -10 1568 1598 10 261 0 +995 18 225 8 691 721 0 0 1025 +996 147 435 20 245 275 10 0 419 +997 335 99 25 1218 1248 10 0 502 +998 485 24 20 326 356 10 0 122 +999 470 475 30 314 344 10 0 773 +1000 341 58 10 224 254 10 0 908 +1001 16 497 -20 426 456 10 397 0 +1002 469 489 -4 555 585 10 658 0 +1003 460 2 -20 0 1487 10 829 0 +1004 44 496 -32 0 1491 10 812 0 +1005 57 43 -15 0 1528 10 574 0 +1006 422 409 -10 234 264 10 798 0 +1007 27 464 -21 1291 1321 10 185 0 +1008 120 17 -30 0 1545 10 457 0 +1009 474 96 -30 0 1540 10 117 0 +1010 485 104 -21 794 824 10 399 0 +1011 7 382 -27 770 800 10 120 0 +1012 376 494 -30 274 304 10 639 0 +1013 111 467 -20 287 317 10 465 0 +1014 421 386 -29 824 854 10 70 0 +1015 440 436 -18 892 922 10 1 0 +1016 406 450 -20 259 289 10 253 0 +1017 154 392 -9 0 1640 10 984 0 +1018 52 303 -25 441 471 10 696 0 +1019 412 214 -10 0 1646 10 300 0 +1020 163 472 -9 653 683 10 138 0 +1021 336 493 -20 1493 1523 10 893 0 +1022 495 227 -20 0 1565 10 486 0 +1023 33 286 -11 1546 1576 10 221 0 +1024 374 190 -20 0 1674 10 135 0 +1025 18 225 -8 691 721 10 995 0 +1026 297 102 -10 155 185 10 326 0 +1027 323 77 -36 1405 1435 10 48 0 +1028 374 232 -33 125 155 10 363 0 +1029 255 487 -19 0 1574 10 656 0 +1030 186 135 -24 0 1680 10 166 0 +1031 89 272 -10 0 1649 10 635 0 +1032 80 286 -10 0 1638 10 923 0 +1033 398 103 -30 278 308 10 180 0 +1034 409 255 -23 0 1652 10 801 0 +1035 321 277 -10 0 1736 10 542 0 +1036 86 199 -23 0 1640 10 50 0 +1037 206 186 -10 188 218 10 959 0 +1038 386 154 -31 1101 1131 10 159 0 +1039 175 352 -12 0 1685 10 246 0 +1040 385 295 -20 0 1669 10 481 0 +1041 244 277 -18 0 1784 10 590 0 +1042 273 300 -30 55 85 10 93 0 +1043 318 280 -20 0 1737 10 983 0 +1044 230 197 -40 122 152 10 5 0 +1045 187 73 -18 292 322 10 190 0 +1046 133 202 -33 461 491 10 7 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1103.txt b/jsprit-instances/instances/lilim/1000/LRC1103.txt new file mode 100644 index 00000000..a81128b7 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1103.txt @@ -0,0 +1,1050 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 18 0 1546 10 0 202 +2 214 394 -20 231 261 10 311 0 +3 476 483 -10 0 1487 10 962 0 +4 352 487 27 0 1553 0 0 1046 +5 230 197 -20 122 152 10 605 0 +6 175 239 23 0 1736 10 0 302 +7 133 202 33 0 1685 10 0 995 +8 328 458 17 0 1589 10 0 850 +9 25 499 -10 0 1476 10 905 0 +10 226 423 -7 0 1637 10 218 0 +11 313 282 -20 163 193 10 983 0 +12 60 454 10 347 377 10 0 551 +13 239 486 -12 1482 1512 10 324 0 +14 102 264 10 148 178 10 0 43 +15 408 452 -10 0 1555 10 671 0 +16 451 62 5 0 1536 10 0 953 +17 203 390 40 0 1664 10 0 679 +18 92 233 -10 0 1653 10 684 0 +19 7 300 30 345 375 10 0 907 +20 409 90 -20 0 1586 10 267 0 +21 307 108 10 237 267 10 0 557 +22 347 54 -30 0 1593 10 676 0 +23 406 87 10 0 1586 10 0 96 +24 371 332 -5 530 560 10 826 0 +25 116 466 20 254 284 10 0 465 +26 441 265 -23 0 1620 10 801 0 +27 130 140 17 194 224 10 0 898 +28 80 117 -18 824 854 10 305 0 +29 421 387 -20 801 831 10 897 0 +30 83 300 26 500 530 10 0 583 +31 136 52 -10 293 323 10 653 0 +32 18 462 20 398 428 10 0 111 +33 390 120 -17 1004 1034 10 929 0 +34 188 119 44 975 1005 10 0 166 +35 467 114 -10 0 1555 10 219 0 +36 440 292 -10 940 970 10 768 0 +37 268 400 -21 243 273 10 228 0 +38 391 202 14 148 178 10 0 323 +39 377 432 20 0 1590 10 0 262 +40 80 290 10 197 227 10 0 64 +41 439 15 -3 0 1510 10 454 0 +42 307 52 -8 920 950 10 982 0 +43 111 192 -10 1199 1229 10 14 0 +44 131 56 -7 0 1584 10 158 0 +45 88 286 10 0 1646 10 0 307 +46 69 414 -31 1263 1293 10 899 0 +47 41 232 16 0 1602 10 0 497 +48 323 77 -9 1405 1435 10 781 0 +49 340 416 36 321 351 10 0 224 +50 86 199 -8 0 1640 10 407 0 +51 314 124 20 231 261 10 0 956 +52 375 191 30 0 1673 10 0 958 +53 226 175 -14 1694 1724 10 652 0 +54 242 106 -12 0 1667 10 796 0 +55 417 417 -30 0 1575 10 702 0 +56 419 459 20 0 1543 10 0 431 +57 389 11 -20 0 1535 10 941 0 +58 450 416 -25 577 607 10 802 0 +59 246 255 10 0 1805 10 0 149 +60 71 333 10 197 227 10 0 369 +61 105 474 -10 471 501 10 917 0 +62 20 489 -30 383 413 10 593 0 +63 388 331 20 160 190 10 0 201 +64 92 259 -10 399 429 10 40 0 +65 200 261 10 166 196 10 0 610 +66 400 288 30 0 1657 10 0 222 +67 299 285 -20 0 1751 10 499 0 +68 378 199 -20 207 237 10 143 0 +69 325 147 14 0 1684 10 0 633 +70 421 386 29 824 854 10 0 332 +71 404 447 20 0 1561 10 0 253 +72 412 478 7 0 1532 10 0 936 +73 26 67 15 1317 1347 10 0 438 +74 358 183 -30 0 1684 10 405 0 +75 30 302 10 267 297 10 0 496 +76 176 470 -31 0 1579 10 860 0 +77 96 270 -20 162 192 10 818 0 +78 243 408 -40 0 1653 10 225 0 +79 60 29 -3 0 1520 10 99 0 +80 34 169 -21 484 514 10 970 0 +81 407 280 10 0 1652 10 0 567 +82 277 403 10 175 205 10 0 932 +83 498 456 27 1406 1436 10 0 948 +84 384 491 20 348 378 10 0 277 +85 355 174 33 0 1682 10 0 275 +86 97 288 22 0 1654 10 0 923 +87 316 284 -10 125 155 10 542 0 +88 334 403 26 174 204 10 0 398 +89 415 223 20 305 335 10 0 711 +90 230 320 -36 0 1739 10 745 0 +91 432 199 -13 0 1622 10 890 0 +92 92 18 -20 1124 1154 10 596 0 +93 273 300 30 55 85 10 0 657 +94 269 112 19 0 1672 10 0 568 +95 429 389 18 424 454 0 0 1013 +96 371 71 -10 0 1595 10 23 0 +97 5 297 -10 0 1562 10 575 0 +98 414 378 23 495 525 10 0 430 +99 38 15 3 0 1495 10 0 79 +100 2 295 30 0 1559 10 0 993 +101 237 254 -10 83 113 10 230 0 +102 54 445 -10 308 338 10 664 0 +103 382 110 24 0 1619 10 0 824 +104 438 488 18 0 1508 10 0 848 +105 395 331 20 217 247 10 0 631 +106 230 487 -15 1130 1160 10 370 0 +107 249 407 10 174 204 10 0 710 +108 488 26 -20 0 1485 10 288 0 +109 151 81 28 0 1616 10 0 450 +110 483 14 10 0 1480 10 0 708 +111 0 422 -20 821 851 10 32 0 +112 429 67 16 732 762 10 0 670 +113 195 464 20 1541 1571 10 0 734 +114 356 256 19 106 136 10 0 494 +115 264 180 -23 1681 1711 10 667 0 +116 94 235 20 156 186 10 0 945 +117 474 96 30 0 1540 10 0 379 +118 268 52 -30 306 336 10 849 0 +119 44 440 24 0 1531 10 0 461 +120 7 382 27 0 1535 10 0 634 +121 459 53 -9 0 1524 10 908 0 +122 491 25 10 409 439 10 0 965 +123 439 243 -10 0 1622 10 573 0 +124 210 185 -32 76 106 10 234 0 +125 150 68 -26 423 453 10 373 0 +126 201 270 10 52 82 10 0 464 +127 0 188 -30 0 1554 10 786 0 +128 103 464 -15 0 1552 10 880 0 +129 325 56 -20 0 1604 10 553 0 +130 44 344 12 1079 1109 10 0 601 +131 418 75 11 448 478 10 0 444 +132 472 57 -30 1295 1325 10 365 0 +133 460 328 -10 0 1587 10 184 0 +134 89 270 -20 0 1649 10 304 0 +135 374 190 -22 0 1674 10 478 0 +136 463 253 -7 1047 1077 10 775 0 +137 97 93 -22 0 1592 10 356 0 +138 163 472 -30 653 683 10 752 0 +139 29 336 -21 0 1574 10 569 0 +140 84 453 -4 0 1549 10 348 0 +141 294 421 -8 1575 1605 10 617 0 +142 343 62 10 357 387 10 0 533 +143 371 193 20 0 1678 10 0 68 +144 142 372 -36 162 192 10 292 0 +145 66 88 2 0 1566 10 0 914 +146 395 332 10 0 1645 10 0 931 +147 93 413 -20 0 1585 10 268 0 +148 267 394 -10 259 289 10 534 0 +149 249 258 -10 0 1803 10 59 0 +150 472 129 10 0 1559 0 0 1018 +151 87 3 13 1433 1463 10 0 333 +152 62 326 -20 0 1609 10 830 0 +153 212 186 -3 1707 1737 10 187 0 +154 241 402 -10 0 1659 10 487 0 +155 439 266 -20 189 219 10 375 0 +156 79 80 19 0 1570 10 0 555 +157 62 453 10 0 1535 10 0 987 +158 188 151 7 0 1695 10 0 44 +159 386 154 -24 1101 1131 10 205 0 +160 38 301 -10 296 326 10 645 0 +161 192 265 10 0 1752 0 0 1001 +162 371 192 -22 134 164 10 790 0 +163 64 294 -10 1101 1131 10 728 0 +164 381 494 -30 0 1535 10 639 0 +165 437 12 -20 330 360 10 856 0 +166 186 135 -44 0 1680 10 34 0 +167 459 10 -20 0 1493 10 242 0 +168 175 422 -7 1446 1476 10 697 0 +169 274 48 10 0 1608 10 0 810 +170 488 173 -20 0 1561 10 866 0 +171 398 97 -10 0 1599 10 321 0 +172 385 17 -10 809 839 10 198 0 +173 180 283 -8 0 1734 10 698 0 +174 71 12 -28 0 1514 10 942 0 +175 343 49 10 0 1590 10 0 406 +176 248 251 20 2 32 10 0 779 +177 7 194 29 0 1562 0 0 1040 +178 322 290 -18 1479 1509 10 722 0 +179 410 399 25 0 1593 10 0 662 +180 398 103 30 0 1603 10 0 814 +181 385 285 13 0 1672 10 0 992 +182 179 497 -8 0 1554 10 761 0 +183 464 13 -20 0 1492 10 195 0 +184 492 335 10 828 858 10 0 133 +185 27 464 21 0 1502 10 0 258 +186 231 29 -2 1226 1256 10 750 0 +187 157 38 3 1048 1078 10 0 153 +188 439 268 10 298 328 0 0 1014 +189 149 214 -10 482 512 10 618 0 +190 187 73 -31 292 322 10 723 0 +191 429 169 8 0 1615 10 0 541 +192 350 199 -20 1201 1231 10 806 0 +193 60 231 32 0 1621 10 0 538 +194 448 404 -30 599 629 10 537 0 +195 481 20 20 347 377 10 0 183 +196 436 25 19 0 1520 0 0 1005 +197 111 459 20 359 389 0 0 1045 +198 389 17 10 0 1540 10 0 172 +199 148 208 -20 526 556 10 845 0 +200 475 477 -25 0 1492 10 712 0 +201 390 325 -20 0 1653 10 63 0 +202 346 354 -18 0 1670 10 1 0 +203 91 266 10 0 1652 10 0 424 +204 17 65 20 0 1514 10 0 572 +205 391 112 24 1000 1030 10 0 159 +206 224 203 20 0 1758 10 0 959 +207 426 231 24 1028 1058 0 0 1047 +208 260 472 33 1036 1066 10 0 656 +209 265 0 -20 896 926 10 377 0 +210 391 293 20 0 1664 0 0 1043 +211 411 421 -20 0 1577 10 821 0 +212 132 30 20 0 1562 10 0 543 +213 475 480 -20 379 409 10 949 0 +214 286 244 -13 1284 1314 10 519 0 +215 436 237 20 186 216 10 0 560 +216 402 284 -14 0 1656 10 644 0 +217 287 397 12 564 594 0 0 1030 +218 272 420 7 0 1640 10 0 10 +219 477 120 10 0 1550 10 0 35 +220 145 434 20 233 263 10 0 996 +221 33 286 -20 1546 1576 10 334 0 +222 370 262 -30 1099 1129 10 66 0 +223 393 20 20 0 1541 10 0 952 +224 330 308 -36 0 1713 10 49 0 +225 246 398 40 148 178 10 0 78 +226 482 184 -10 0 1570 10 245 0 +227 451 305 -25 208 238 10 495 0 +228 226 316 21 70 100 10 0 37 +229 110 459 -20 348 378 10 328 0 +230 244 250 10 12 42 10 0 101 +231 458 16 20 313 343 10 0 336 +232 390 34 -30 1060 1090 10 616 0 +233 423 214 20 217 247 10 0 592 +234 219 215 32 46 76 10 0 124 +235 326 118 10 0 1659 10 0 933 +236 365 74 -5 848 878 10 322 0 +237 331 356 -20 712 742 10 362 0 +238 210 398 -38 0 1658 10 581 0 +239 403 93 -10 0 1592 10 709 0 +240 248 404 30 154 184 10 0 368 +241 65 62 15 976 1006 10 0 921 +242 460 13 20 322 352 10 0 167 +243 0 293 30 279 309 10 0 811 +244 211 248 26 39 69 10 0 635 +245 484 174 10 265 295 10 0 226 +246 175 352 12 0 1685 10 0 822 +247 455 168 21 0 1591 10 0 594 +248 224 191 20 81 111 10 0 706 +249 439 156 2 526 556 0 0 1012 +250 434 359 13 0 1598 10 0 577 +251 118 314 -30 0 1665 10 869 0 +252 234 246 10 65 95 10 0 659 +253 406 450 -20 0 1558 10 71 0 +254 75 118 -21 0 1592 10 510 0 +255 115 395 -30 815 845 10 867 0 +256 329 456 19 249 279 10 0 910 +257 218 403 -15 1319 1349 10 626 0 +258 149 341 -21 0 1676 10 185 0 +259 253 74 -18 1350 1380 10 435 0 +260 436 241 -10 327 357 10 690 0 +261 238 203 -20 94 124 10 453 0 +262 405 455 -20 0 1554 10 39 0 +263 485 27 -20 0 1488 10 456 0 +264 323 118 -30 0 1661 10 787 0 +265 330 371 -20 559 589 10 404 0 +266 25 65 10 0 1520 10 0 418 +267 406 96 20 219 249 10 0 20 +268 49 451 20 284 314 10 0 147 +269 307 249 -28 1377 1407 10 296 0 +270 178 135 -4 1514 1544 10 895 0 +271 299 353 34 114 144 10 0 436 +272 236 213 20 39 69 10 0 660 +273 355 177 20 0 1684 10 0 727 +274 394 23 -10 0 1543 10 452 0 +275 306 235 -33 0 1754 10 85 0 +276 90 477 -11 277 307 10 833 0 +277 379 486 -20 0 1543 10 84 0 +278 435 16 10 367 397 10 0 282 +279 8 497 -10 0 1466 10 489 0 +280 150 484 -10 0 1557 10 585 0 +281 213 399 18 0 1658 10 0 387 +282 391 18 -10 0 1540 10 278 0 +283 111 392 18 1169 1199 0 0 1007 +284 330 281 -15 1330 1360 10 934 0 +285 344 203 14 0 1706 0 0 1010 +286 91 235 -35 269 299 10 508 0 +287 346 60 -10 321 351 10 490 0 +288 483 27 20 0 1489 10 0 108 +289 382 498 -30 0 1531 10 719 0 +290 457 492 -10 508 538 10 939 0 +291 291 213 23 0 1756 10 0 883 +292 154 374 36 0 1655 10 0 144 +293 225 196 10 0 1752 10 0 961 +294 94 40 -20 0 1550 10 800 0 +295 0 356 -27 1086 1116 10 513 0 +296 297 283 28 1349 1379 10 0 269 +297 371 423 10 0 1600 10 0 999 +298 417 217 30 189 219 10 0 522 +299 500 228 -20 782 812 10 888 0 +300 412 214 -10 0 1646 10 527 0 +301 442 289 25 195 225 10 0 843 +302 157 269 -23 1576 1606 10 6 0 +303 440 241 -10 301 331 10 692 0 +304 100 266 20 0 1661 10 0 134 +305 111 178 18 156 186 10 0 28 +306 91 101 10 0 1594 0 0 1037 +307 25 307 -10 249 279 10 45 0 +308 135 400 20 299 329 10 0 503 +309 58 458 -20 323 353 10 703 0 +310 133 26 10 0 1559 10 0 827 +311 211 386 20 0 1670 10 0 2 +312 94 97 20 218 248 10 0 457 +313 30 155 -18 1280 1310 10 614 0 +314 208 184 20 0 1733 10 0 346 +315 394 333 20 194 224 10 0 597 +316 355 180 30 0 1685 10 0 350 +317 241 180 13 0 1741 10 0 391 +318 21 485 30 0 1483 10 0 624 +319 80 251 14 0 1641 0 0 1015 +320 476 61 -5 0 1517 10 901 0 +321 406 94 10 0 1591 10 0 171 +322 364 71 5 0 1599 10 0 236 +323 418 221 -14 291 321 10 38 0 +324 274 441 12 695 725 10 0 13 +325 304 97 20 182 212 10 0 636 +326 297 102 10 155 185 10 0 884 +327 250 405 20 162 192 10 0 853 +328 111 463 20 0 1557 10 0 229 +329 408 279 -20 0 1651 10 544 0 +330 263 418 25 0 1643 10 0 442 +331 480 119 -21 0 1547 10 399 0 +332 420 383 -29 0 1596 10 70 0 +333 142 14 -13 0 1552 10 151 0 +334 73 328 20 193 223 10 0 221 +335 50 438 -10 0 1537 10 770 0 +336 441 7 -20 392 422 10 231 0 +337 462 14 -20 397 427 10 682 0 +338 360 294 -20 1418 1448 10 545 0 +339 58 39 12 1163 1193 10 0 748 +340 58 391 -10 0 1573 10 550 0 +341 410 285 -10 0 1648 10 352 0 +342 96 97 20 0 1594 10 0 388 +343 21 64 20 0 1516 10 0 410 +344 238 210 30 134 164 10 0 607 +345 479 121 10 308 338 10 0 963 +346 200 178 -20 94 124 10 314 0 +347 216 341 19 0 1714 10 0 984 +348 48 437 4 0 1536 10 0 140 +349 200 270 20 59 89 10 0 427 +350 357 181 -30 149 179 10 316 0 +351 476 174 30 324 354 10 0 875 +352 400 286 10 154 184 10 0 341 +353 351 481 10 322 352 10 0 893 +354 270 400 -30 0 1660 10 906 0 +355 95 234 10 163 193 10 0 367 +356 128 113 22 363 393 10 0 137 +357 133 455 25 808 838 10 0 608 +358 16 463 -20 0 1495 10 376 0 +359 59 388 20 663 693 10 0 628 +360 376 190 -5 0 1672 10 977 0 +361 481 122 -2 0 1547 10 749 0 +362 266 405 20 0 1656 10 0 237 +363 374 232 33 125 155 10 0 416 +364 398 20 20 0 1538 10 0 646 +365 481 26 30 0 1490 10 0 132 +366 63 444 20 0 1542 10 0 417 +367 89 290 -10 0 1646 10 355 0 +368 246 314 -30 1445 1475 10 240 0 +369 40 304 -10 1145 1175 10 60 0 +370 262 369 15 0 1692 10 0 106 +371 323 29 7 0 1579 10 0 385 +372 89 65 16 720 750 10 0 574 +373 144 35 26 0 1572 10 0 125 +374 200 265 10 0 1759 10 0 911 +375 436 264 20 186 216 10 0 155 +376 15 457 20 323 353 10 0 358 +377 397 20 20 280 310 10 0 209 +378 328 491 21 0 1558 10 0 463 +379 399 175 -30 0 1645 10 117 0 +380 432 2 -20 467 497 10 729 0 +381 63 336 -20 0 1606 10 587 0 +382 6 296 10 320 350 10 0 842 +383 146 376 -20 0 1648 10 466 0 +384 295 247 -18 0 1766 10 590 0 +385 235 33 -7 0 1594 10 371 0 +386 233 204 20 54 84 10 0 695 +387 142 360 -18 1532 1562 10 281 0 +388 177 156 -20 0 1692 10 342 0 +389 315 287 30 148 178 10 0 795 +390 452 172 -20 0 1595 10 776 0 +391 263 153 -13 412 442 10 317 0 +392 493 493 -4 856 886 10 658 0 +393 320 283 30 0 1734 0 0 1039 +394 64 5 -10 0 1504 10 488 0 +395 95 235 10 155 185 10 0 509 +396 203 211 -28 1306 1336 10 476 0 +397 16 497 20 0 1471 10 0 747 +398 348 348 -26 0 1673 10 88 0 +399 485 104 21 794 824 10 0 331 +400 330 147 28 0 1681 10 0 502 +401 443 237 20 193 223 10 0 713 +402 316 286 -30 0 1736 10 792 0 +403 335 46 -10 1342 1372 10 1000 0 +404 381 495 20 0 1534 10 0 265 +405 364 173 30 180 210 10 0 74 +406 267 162 -10 1449 1479 10 175 0 +407 214 245 8 0 1775 10 0 50 +408 92 234 -30 0 1653 10 887 0 +409 347 459 25 0 1581 10 0 485 +410 30 7 -20 1189 1219 10 343 0 +411 120 37 -10 0 1562 10 621 0 +412 397 153 -19 882 912 10 778 0 +413 210 29 -23 1051 1081 10 663 0 +414 87 285 30 241 271 10 0 805 +415 132 32 -26 784 814 10 632 0 +416 390 294 -33 0 1665 10 363 0 +417 67 451 -20 1216 1246 10 366 0 +418 24 68 -10 0 1521 10 266 0 +419 146 439 -30 259 289 10 539 0 +420 209 212 -10 0 1756 10 754 0 +421 6 292 10 0 1564 0 0 1035 +422 18 63 10 339 369 10 0 687 +423 149 98 4 0 1629 10 0 947 +424 91 268 -10 0 1651 10 203 0 +425 103 177 28 626 656 0 0 1023 +426 367 178 20 180 210 10 0 951 +427 225 269 -20 0 1780 10 349 0 +428 443 246 -10 0 1618 10 515 0 +429 306 42 11 477 507 10 0 564 +430 374 306 -23 0 1675 10 98 0 +431 413 421 -20 0 1575 10 56 0 +432 470 405 17 0 1542 10 0 831 +433 33 278 18 1487 1517 0 0 1033 +434 149 458 -25 1164 1194 10 815 0 +435 257 57 18 1226 1256 10 0 259 +436 272 403 -34 190 220 10 271 0 +437 221 291 9 50 80 10 0 549 +438 1 101 -15 0 1521 10 73 0 +439 332 459 -20 0 1587 10 915 0 +440 220 392 -30 258 288 10 855 0 +441 253 50 -28 0 1611 10 836 0 +442 250 441 -25 756 786 10 330 0 +443 471 484 10 340 370 10 0 840 +444 480 152 -11 0 1561 10 131 0 +445 404 83 -10 298 328 10 638 0 +446 476 94 20 0 1537 10 0 938 +447 458 213 22 0 1600 10 0 764 +448 215 395 -10 0 1662 10 507 0 +449 85 288 20 182 212 10 0 882 +450 179 75 -28 740 770 10 109 0 +451 228 287 21 43 73 10 0 974 +452 397 18 10 0 1537 10 0 274 +453 238 204 20 0 1764 10 0 261 +454 488 3 3 401 431 10 0 41 +455 407 88 -20 0 1586 10 861 0 +456 459 14 20 315 345 10 0 263 +457 120 17 -20 0 1545 10 312 0 +458 235 316 -10 656 686 10 876 0 +459 370 382 11 884 914 0 0 1004 +460 405 454 11 1303 1333 10 0 807 +461 17 458 -24 433 463 10 119 0 +462 43 135 -19 0 1575 10 536 0 +463 318 497 -21 0 1555 10 378 0 +464 199 268 -10 71 101 10 126 0 +465 111 467 -20 0 1554 10 25 0 +466 138 438 20 287 317 10 0 383 +467 172 314 -11 0 1711 10 785 0 +468 494 468 31 0 1484 10 0 651 +469 35 303 20 221 251 10 0 857 +470 341 59 27 0 1600 10 0 721 +471 423 221 -20 258 288 10 629 0 +472 395 295 -30 211 241 10 755 0 +473 413 417 -15 356 386 10 758 0 +474 339 60 20 211 241 10 0 732 +475 277 428 -22 490 520 10 957 0 +476 176 199 28 0 1722 10 0 396 +477 265 240 -17 0 1793 10 834 0 +478 365 190 22 0 1682 10 0 135 +479 133 53 20 0 1582 10 0 885 +480 387 488 20 362 392 10 0 680 +481 385 295 20 0 1669 10 0 556 +482 491 369 28 730 760 10 0 912 +483 445 273 -10 0 1615 10 725 0 +484 195 273 -17 0 1752 10 979 0 +485 313 493 -25 0 1560 10 409 0 +486 495 227 -10 0 1565 10 756 0 +487 241 403 10 220 250 10 0 154 +488 30 72 10 0 1529 10 0 394 +489 21 487 10 350 380 10 0 279 +490 324 99 10 0 1643 10 0 287 +491 453 318 30 374 404 10 0 520 +492 443 272 10 0 1617 10 0 918 +493 447 184 27 0 1604 10 0 672 +494 366 288 -19 0 1689 10 114 0 +495 440 284 25 0 1618 10 0 227 +496 13 314 -10 0 1566 10 75 0 +497 72 227 -16 0 1632 10 47 0 +498 377 385 6 0 1626 10 0 773 +499 477 478 20 392 422 10 0 67 +500 204 185 -10 163 193 10 859 0 +501 226 191 20 0 1748 10 0 864 +502 330 138 -28 0 1674 10 400 0 +503 185 434 -20 574 604 10 308 0 +504 483 22 -20 334 364 10 998 0 +505 71 282 29 0 1630 10 0 623 +506 60 5 -8 0 1501 10 717 0 +507 189 402 10 536 566 10 0 448 +508 134 211 35 122 152 10 0 286 +509 146 313 -10 1195 1225 10 395 0 +510 21 146 21 487 517 10 0 254 +511 37 281 -25 0 1596 10 696 0 +512 416 417 -10 0 1576 10 798 0 +513 44 311 27 0 1597 10 0 295 +514 361 181 -20 197 227 10 588 0 +515 444 242 10 216 246 10 0 428 +516 444 271 -20 0 1616 10 548 0 +517 359 179 -18 0 1681 10 529 0 +518 388 334 20 0 1650 10 0 685 +519 401 164 13 621 651 10 0 214 +520 499 316 -30 622 652 10 491 0 +521 399 106 -30 0 1604 10 673 0 +522 425 215 -30 229 259 10 298 0 +523 407 98 -20 0 1593 10 841 0 +524 406 460 -20 0 1550 10 986 0 +525 88 95 20 270 300 10 0 526 +526 95 64 -20 766 796 10 525 0 +527 306 229 10 0 1752 10 0 300 +528 273 55 20 0 1615 10 0 699 +529 384 149 18 0 1644 10 0 517 +530 122 35 10 250 280 10 0 743 +531 308 199 14 0 1734 0 0 1008 +532 390 301 -10 0 1662 10 894 0 +533 300 108 -10 0 1661 10 142 0 +534 267 400 10 232 262 10 0 148 +535 8 300 10 0 1564 10 0 988 +536 105 181 19 0 1651 10 0 462 +537 398 325 30 233 263 10 0 194 +538 166 247 -32 0 1727 10 193 0 +539 140 431 30 211 241 10 0 419 +540 253 118 19 547 577 10 0 765 +541 359 246 -8 1423 1453 10 191 0 +542 321 277 10 0 1736 10 0 87 +543 168 59 -20 366 396 10 212 0 +544 406 285 20 0 1652 10 0 329 +545 391 334 20 0 1647 10 0 338 +546 437 19 -20 0 1514 10 873 0 +547 201 278 13 56 86 10 0 744 +548 435 267 20 323 353 10 0 516 +549 245 408 -9 204 234 10 437 0 +550 16 462 10 0 1496 10 0 340 +551 107 374 -10 914 944 10 12 0 +552 477 97 10 0 1538 10 0 950 +553 346 57 20 308 338 10 0 129 +554 14 459 -20 336 366 10 966 0 +555 102 6 -19 0 1526 10 156 0 +556 359 287 -20 0 1696 10 481 0 +557 297 131 -10 1165 1195 10 21 0 +558 282 1 18 0 1560 10 0 852 +559 21 70 -10 0 1520 10 816 0 +560 440 244 -20 266 296 10 215 0 +561 482 104 -20 0 1537 10 896 0 +562 120 261 -20 793 823 10 737 0 +563 125 29 30 283 313 10 0 916 +564 292 32 -11 0 1589 10 429 0 +565 262 92 -30 630 660 10 686 0 +566 68 160 -15 1136 1166 10 688 0 +567 405 276 -10 0 1654 10 81 0 +568 277 50 -19 201 231 10 94 0 +569 32 319 21 401 431 10 0 139 +570 344 70 24 1146 1176 0 0 1022 +571 481 84 17 506 536 10 0 780 +572 21 68 -20 401 431 10 204 0 +573 441 244 10 277 307 10 0 123 +574 57 43 -16 0 1528 10 372 0 +575 1 293 10 268 298 10 0 97 +576 481 96 20 0 1534 0 0 1042 +577 471 368 -13 0 1561 10 250 0 +578 236 126 23 124 154 10 0 700 +579 406 99 -10 227 257 10 736 0 +580 303 186 -15 1354 1384 10 804 0 +581 225 369 38 121 151 10 0 238 +582 412 453 10 297 327 10 0 630 +583 104 349 -26 1009 1039 10 30 0 +584 173 182 25 0 1709 10 0 730 +585 111 464 10 0 1556 10 0 280 +586 53 440 -20 0 1538 10 589 0 +587 69 336 20 218 248 10 0 381 +588 359 182 20 209 239 10 0 514 +589 13 459 20 0 1496 10 0 586 +590 244 277 18 0 1784 10 0 384 +591 484 177 20 0 1566 10 0 599 +592 452 206 -20 492 522 10 233 0 +593 22 483 30 325 355 10 0 62 +594 452 110 -21 340 370 10 247 0 +595 347 192 -20 1488 1518 10 927 0 +596 95 92 20 0 1590 10 0 92 +597 368 311 -20 0 1679 10 315 0 +598 479 387 -9 397 427 10 649 0 +599 479 169 -20 0 1569 10 591 0 +600 497 266 -29 0 1564 10 928 0 +601 66 336 -12 0 1608 10 130 0 +602 376 195 10 0 1674 10 0 954 +603 401 281 -10 261 291 10 909 0 +604 441 177 23 0 1607 10 0 877 +605 231 203 20 67 97 10 0 5 +606 21 488 10 361 391 10 0 704 +607 231 204 -30 0 1762 10 344 0 +608 122 422 -25 1457 1487 10 357 0 +609 65 453 30 282 312 10 0 739 +610 206 261 -10 182 212 10 65 0 +611 466 149 -16 1186 1216 10 669 0 +612 313 119 -10 216 246 10 767 0 +613 90 274 20 0 1650 10 0 803 +614 39 162 18 565 595 10 0 313 +615 35 306 -5 229 259 10 922 0 +616 437 15 30 0 1511 10 0 232 +617 307 412 8 0 1640 10 0 141 +618 79 291 10 0 1636 10 0 189 +619 64 437 11 918 948 0 0 1032 +620 376 92 -20 991 1021 10 903 0 +621 129 27 10 298 328 10 0 411 +622 196 489 -12 0 1566 10 920 0 +623 51 286 -29 0 1609 10 505 0 +624 20 488 -30 372 402 10 318 0 +625 13 455 -20 0 1498 10 783 0 +626 170 347 15 436 466 10 0 257 +627 92 230 20 0 1652 10 0 772 +628 117 467 -20 0 1557 10 359 0 +629 413 217 20 0 1645 10 0 471 +630 405 450 -10 0 1558 10 582 0 +631 394 322 -20 0 1651 10 105 0 +632 125 61 26 612 642 10 0 415 +633 238 123 -14 781 811 10 69 0 +634 11 403 -27 0 1528 10 120 0 +635 89 272 -26 0 1649 10 244 0 +636 304 102 -20 0 1654 10 325 0 +637 478 121 40 0 1550 10 0 813 +638 408 84 10 284 314 10 0 445 +639 376 494 30 0 1537 10 0 164 +640 20 73 10 290 320 10 0 881 +641 159 299 -19 0 1708 10 642 0 +642 95 382 19 231 261 10 0 641 +643 352 63 6 0 1598 10 0 985 +644 365 274 14 0 1694 10 0 216 +645 30 301 10 278 308 10 0 160 +646 351 5 -20 496 526 10 364 0 +647 197 267 10 109 139 10 0 868 +648 498 171 -16 0 1551 10 978 0 +649 468 352 9 0 1571 10 0 598 +650 418 251 21 0 1643 0 0 1003 +651 489 437 -31 707 737 10 468 0 +652 251 63 14 0 1624 10 0 53 +653 132 55 10 267 297 10 0 31 +654 281 96 -20 1126 1156 10 751 0 +655 333 293 -20 617 647 10 693 0 +656 255 487 -33 0 1574 10 208 0 +657 207 400 -30 0 1655 10 93 0 +658 469 489 4 555 585 10 0 392 +659 244 254 -10 100 130 10 252 0 +660 233 207 -20 46 76 10 272 0 +661 441 60 21 1459 1489 0 0 1026 +662 411 379 -25 1193 1223 10 179 0 +663 178 72 23 757 787 10 0 413 +664 51 447 10 294 324 10 0 102 +665 478 118 20 0 1548 10 0 675 +666 141 426 23 0 1604 10 0 837 +667 295 89 23 742 772 10 0 115 +668 112 433 29 235 265 10 0 913 +669 320 211 16 0 1731 10 0 611 +670 400 103 -16 0 1601 10 112 0 +671 408 453 10 283 313 10 0 15 +672 435 180 -27 0 1614 10 493 0 +673 432 66 30 0 1553 10 0 521 +674 374 116 -11 587 617 10 769 0 +675 478 102 -20 324 354 10 665 0 +676 335 57 30 210 240 10 0 22 +677 385 239 -10 0 1676 10 889 0 +678 386 245 -21 479 509 10 854 0 +679 208 396 -40 176 206 10 17 0 +680 380 489 -20 0 1539 10 480 0 +681 380 498 -5 0 1531 10 741 0 +682 440 7 20 314 344 10 0 337 +683 434 245 -20 342 372 10 971 0 +684 90 232 10 212 242 10 0 18 +685 389 334 -20 169 199 10 518 0 +686 241 205 30 0 1766 10 0 565 +687 18 24 -10 0 1488 10 422 0 +688 57 183 15 0 1607 10 0 566 +689 59 457 -23 334 364 10 835 0 +690 442 243 10 0 1619 10 0 260 +691 402 281 20 0 1656 0 0 1034 +692 445 237 10 200 230 10 0 303 +693 441 273 20 282 312 10 0 655 +694 31 175 24 247 277 10 0 788 +695 234 202 -20 80 110 10 386 0 +696 52 303 25 441 471 10 0 511 +697 167 445 7 1412 1442 10 0 168 +698 179 286 8 0 1732 10 0 173 +699 269 48 -20 281 311 10 528 0 +700 165 59 -23 943 973 10 578 0 +701 461 8 -20 0 1490 10 829 0 +702 421 415 30 0 1574 10 0 55 +703 59 459 20 311 341 10 0 309 +704 24 492 -10 0 1480 10 606 0 +705 55 449 20 278 308 10 0 782 +706 224 192 -20 0 1748 10 248 0 +707 444 269 20 234 264 10 0 960 +708 491 20 -10 394 424 10 110 0 +709 313 126 10 243 273 10 0 239 +710 283 438 -10 0 1621 10 107 0 +711 352 241 -20 792 822 10 89 0 +712 398 476 25 0 1541 10 0 200 +713 442 247 -20 241 271 10 401 0 +714 217 207 26 1382 1412 0 0 1011 +715 233 87 18 253 283 0 0 1025 +716 479 127 -22 270 300 10 784 0 +717 6 53 8 587 617 10 0 506 +718 478 300 -10 0 1578 10 777 0 +719 378 493 30 282 312 10 0 289 +720 303 78 -10 0 1632 10 819 0 +721 344 62 -27 0 1601 10 470 0 +722 371 315 18 0 1674 10 0 178 +723 200 78 31 0 1632 10 0 190 +724 413 391 8 217 247 0 0 1002 +725 415 216 10 176 206 10 0 483 +726 397 57 17 1476 1506 0 0 1036 +727 293 228 -20 0 1763 10 273 0 +728 0 297 10 0 1557 10 0 163 +729 435 20 20 381 411 10 0 380 +730 195 111 -25 998 1028 10 584 0 +731 417 218 -20 278 308 10 891 0 +732 340 54 -20 238 268 10 474 0 +733 132 57 20 0 1585 0 0 1038 +734 210 379 -20 0 1676 10 113 0 +735 228 260 12 0 1787 10 0 757 +736 399 104 10 0 1603 10 0 579 +737 95 277 20 274 304 10 0 562 +738 360 284 -15 0 1696 10 989 0 +739 53 466 -30 0 1519 10 609 0 +740 112 465 10 299 329 10 0 825 +741 313 391 5 154 184 10 0 681 +742 93 235 -10 246 276 10 900 0 +743 125 32 -10 259 289 10 530 0 +744 215 282 -13 1440 1470 10 547 0 +745 224 320 36 0 1737 10 0 90 +746 134 428 20 308 338 10 0 839 +747 26 490 -20 475 505 10 397 0 +748 44 115 -12 0 1565 10 339 0 +749 438 127 2 0 1587 10 0 361 +750 239 15 2 604 634 10 0 186 +751 342 54 20 250 280 10 0 654 +752 109 463 30 334 364 10 0 138 +753 199 187 -20 127 157 10 944 0 +754 201 188 10 0 1732 10 0 420 +755 399 301 30 194 224 10 0 472 +756 484 171 10 293 323 10 0 486 +757 272 234 -12 1590 1620 10 735 0 +758 380 350 15 0 1647 10 0 473 +759 140 108 -15 0 1632 10 964 0 +760 228 199 10 0 1756 10 0 763 +761 245 461 8 649 679 10 0 182 +762 305 107 -30 0 1658 10 870 0 +763 231 195 -10 109 139 10 760 0 +764 450 265 -22 0 1611 10 447 0 +765 273 149 -19 0 1708 10 540 0 +766 12 358 -30 1224 1254 10 937 0 +767 315 121 10 203 233 10 0 612 +768 420 213 10 204 234 10 0 36 +769 331 134 11 0 1670 10 0 674 +770 84 377 10 0 1602 10 0 335 +771 320 280 10 0 1735 0 0 1006 +772 89 185 -20 600 630 10 627 0 +773 472 481 -6 0 1491 10 498 0 +774 422 420 -29 0 1570 10 968 0 +775 475 267 7 780 810 10 0 136 +776 470 125 20 0 1558 10 0 390 +777 435 268 10 312 342 10 0 718 +778 409 155 19 185 215 10 0 412 +779 243 248 -20 0 1804 10 176 0 +780 488 96 -17 1066 1096 10 571 0 +781 341 72 9 0 1612 10 0 48 +782 58 449 -20 363 393 10 705 0 +783 16 460 20 411 441 10 0 625 +784 480 136 22 256 286 10 0 716 +785 162 388 11 0 1648 10 0 467 +786 47 208 30 226 256 10 0 127 +787 324 127 30 143 173 10 0 264 +788 87 96 -24 0 1587 10 694 0 +789 140 137 -12 0 1654 10 904 0 +790 314 205 22 0 1733 10 0 162 +791 96 346 26 0 1630 0 0 1028 +792 321 280 30 77 107 10 0 402 +793 245 251 10 0 1806 10 0 871 +794 436 295 11 0 1620 0 0 1021 +795 274 261 -30 0 1785 10 389 0 +796 271 128 12 346 376 10 0 54 +797 275 45 20 225 255 10 0 981 +798 422 409 10 234 264 10 0 512 +799 146 188 -8 0 1690 10 832 0 +800 93 96 20 225 255 10 0 294 +801 409 255 23 0 1652 10 0 26 +802 449 428 25 0 1545 10 0 58 +803 90 285 -20 0 1648 10 613 0 +804 415 95 15 0 1585 10 0 580 +805 88 287 -30 263 293 10 414 0 +806 379 196 20 194 224 10 0 192 +807 368 452 -11 0 1578 10 460 0 +808 202 186 20 151 181 10 0 872 +809 435 11 -10 302 332 10 844 0 +810 269 46 -10 0 1607 10 169 0 +811 7 292 -30 0 1565 10 243 0 +812 44 496 32 0 1491 0 0 1029 +813 478 99 -40 311 341 10 637 0 +814 391 99 -30 0 1605 10 180 0 +815 132 477 25 0 1556 10 0 434 +816 24 65 10 0 1519 10 0 559 +817 130 247 17 120 150 10 0 838 +818 133 273 20 119 149 10 0 77 +819 347 62 10 0 1600 10 0 720 +820 404 140 -10 0 1622 10 969 0 +821 416 420 20 0 1574 10 0 211 +822 67 335 -12 0 1610 10 246 0 +823 92 270 20 257 287 10 0 919 +824 411 95 -24 243 273 10 103 0 +825 132 479 -10 0 1554 10 740 0 +826 366 334 5 410 440 10 0 24 +827 125 39 -10 0 1566 10 310 0 +828 419 422 -10 276 306 10 892 0 +829 460 2 20 0 1487 10 0 701 +830 67 334 20 231 261 10 0 152 +831 448 414 -17 0 1554 10 432 0 +832 46 163 8 0 1590 10 0 799 +833 77 465 11 275 305 10 0 276 +834 284 319 17 817 847 10 0 477 +835 102 422 23 226 256 10 0 689 +836 240 34 28 0 1595 10 0 441 +837 141 428 -23 208 238 10 666 0 +838 204 269 -17 0 1762 10 817 0 +839 144 439 -20 0 1595 10 746 0 +840 470 417 -10 0 1535 10 443 0 +841 404 103 20 242 272 10 0 523 +842 5 281 -10 1372 1402 10 382 0 +843 487 320 -25 0 1564 10 301 0 +844 398 23 10 270 300 10 0 809 +845 90 296 20 166 196 10 0 199 +846 386 13 -10 0 1538 10 990 0 +847 115 465 -7 0 1558 10 980 0 +848 473 475 -18 417 447 10 104 0 +849 275 42 30 238 268 10 0 118 +850 286 356 -17 0 1700 10 8 0 +851 15 69 10 296 326 10 0 943 +852 267 44 -18 0 1605 10 558 0 +853 243 399 -20 235 265 10 327 0 +854 390 249 21 0 1671 10 0 678 +855 210 391 30 146 176 10 0 440 +856 433 15 20 297 327 10 0 165 +857 24 259 -20 0 1585 10 469 0 +858 12 463 20 361 391 10 0 972 +859 237 213 10 0 1772 10 0 500 +860 182 480 31 0 1572 10 0 76 +861 409 88 20 0 1585 10 0 455 +862 244 368 25 414 444 0 0 1027 +863 381 328 -10 717 747 10 973 0 +864 213 185 -20 0 1737 10 501 0 +865 482 141 14 0 1555 0 0 1044 +866 319 124 20 0 1668 10 0 170 +867 141 431 30 0 1600 10 0 255 +868 198 264 -10 0 1758 10 647 0 +869 69 334 30 0 1612 10 0 251 +870 299 98 30 0 1652 10 0 762 +871 240 250 -10 37 67 10 793 0 +872 199 203 -20 1457 1487 10 808 0 +873 459 17 20 411 441 10 0 546 +874 423 217 20 0 1635 0 0 1048 +875 477 179 -30 0 1574 10 351 0 +876 213 397 10 0 1660 10 0 458 +877 405 187 -23 1251 1281 10 604 0 +878 269 402 20 0 1658 0 0 1017 +879 53 204 -10 1055 1085 10 930 0 +880 13 394 15 0 1534 10 0 128 +881 15 68 -10 303 333 10 640 0 +882 56 268 -20 0 1617 10 449 0 +883 360 184 -23 0 1683 10 291 0 +884 307 102 -10 210 240 10 326 0 +885 130 57 -20 0 1584 10 479 0 +886 250 328 24 249 279 0 0 1031 +887 91 231 30 0 1651 10 0 408 +888 479 176 20 240 270 10 0 299 +889 420 224 10 0 1640 10 0 677 +890 461 182 13 0 1590 10 0 91 +891 418 218 20 0 1640 10 0 731 +892 419 418 10 249 279 10 0 828 +893 336 493 -10 1493 1523 10 353 0 +894 389 300 10 0 1664 10 0 532 +895 92 76 4 1139 1169 10 0 270 +896 476 102 20 336 366 10 0 561 +897 418 399 20 0 1587 10 0 29 +898 109 56 -17 0 1572 10 27 0 +899 13 465 31 774 804 10 0 46 +900 92 232 10 177 207 10 0 742 +901 394 47 5 313 343 10 0 320 +902 16 287 12 0 1575 0 0 1041 +903 399 102 20 0 1601 10 0 620 +904 143 158 12 141 171 10 0 789 +905 18 484 10 329 359 10 0 9 +906 250 411 30 0 1650 10 0 354 +907 19 273 -30 1017 1047 10 19 0 +908 365 28 9 268 298 10 0 121 +909 387 297 10 144 174 10 0 603 +910 433 447 -19 794 824 10 256 0 +911 214 274 -10 0 1768 10 374 0 +912 489 338 -28 0 1557 10 482 0 +913 130 494 -29 759 789 10 668 0 +914 23 67 -2 389 419 10 145 0 +915 374 489 20 269 299 10 0 439 +916 126 30 -30 272 302 10 563 0 +917 112 467 10 276 306 10 0 61 +918 489 274 -10 534 564 10 492 0 +919 61 214 -20 342 372 10 823 0 +920 166 440 12 207 237 10 0 622 +921 56 75 -15 1438 1468 10 241 0 +922 210 276 5 47 77 10 0 615 +923 80 286 -22 0 1638 10 86 0 +924 17 459 10 0 1498 10 0 975 +925 66 448 10 270 300 10 0 946 +926 351 128 15 1253 1283 0 0 1019 +927 352 176 20 126 156 10 0 595 +928 490 286 29 0 1569 10 0 600 +929 247 219 17 0 1780 10 0 33 +930 86 268 10 217 247 10 0 879 +931 398 329 -10 0 1644 10 146 0 +932 272 402 -10 0 1658 10 82 0 +933 317 123 -10 0 1668 10 235 0 +934 408 318 15 643 673 10 0 284 +935 66 31 25 1048 1078 0 0 1024 +936 425 448 -7 0 1547 10 72 0 +937 35 304 30 0 1590 10 0 766 +938 471 94 -20 0 1541 10 446 0 +939 470 473 10 431 461 10 0 290 +940 224 56 13 1186 1216 10 0 994 +941 343 47 20 0 1588 10 0 57 +942 52 18 28 0 1506 10 0 174 +943 16 68 -10 0 1515 10 851 0 +944 195 185 20 0 1726 10 0 753 +945 92 236 -20 0 1653 10 116 0 +946 76 462 -10 0 1537 10 925 0 +947 124 56 -4 0 1580 10 423 0 +948 481 454 -27 0 1503 10 83 0 +949 477 483 20 366 396 10 0 213 +950 481 124 -10 0 1548 10 552 0 +951 389 156 -20 716 746 10 426 0 +952 384 16 -20 0 1542 10 223 0 +953 492 34 -5 0 1487 10 16 0 +954 371 200 -10 224 254 10 602 0 +955 153 235 10 0 1713 10 0 967 +956 428 202 -20 904 934 10 51 0 +957 257 391 22 0 1670 10 0 475 +958 421 218 -30 0 1638 10 52 0 +959 206 186 -20 0 1734 10 206 0 +960 393 301 -20 0 1660 10 707 0 +961 204 187 -10 0 1733 10 293 0 +962 468 475 10 313 343 10 0 3 +963 477 122 -10 330 360 10 345 0 +964 100 66 15 0 1574 10 0 759 +965 489 27 -10 421 451 10 122 0 +966 12 451 20 311 341 10 0 554 +967 197 270 -10 0 1755 10 955 0 +968 311 422 29 0 1629 10 0 774 +969 489 17 10 380 410 10 0 820 +970 13 214 21 0 1572 10 0 80 +971 440 247 20 0 1621 10 0 683 +972 28 467 -20 0 1501 10 858 0 +973 388 325 10 0 1654 10 0 863 +974 270 401 -21 0 1659 10 451 0 +975 5 445 -10 0 1498 10 924 0 +976 198 271 20 0 1755 0 0 1016 +977 480 131 5 0 1553 10 0 360 +978 437 98 16 0 1571 10 0 648 +979 131 246 17 832 862 10 0 484 +980 49 437 7 0 1537 10 0 847 +981 270 49 -20 292 322 10 797 0 +982 337 41 8 0 1585 10 0 42 +983 318 280 20 0 1737 10 0 11 +984 154 392 -19 0 1640 10 347 0 +985 493 111 -6 0 1532 10 643 0 +986 399 450 20 359 389 10 0 524 +987 67 452 -10 0 1539 10 157 0 +988 34 239 -10 0 1595 10 535 0 +989 343 276 15 96 126 10 0 738 +990 393 12 10 0 1534 10 0 846 +991 236 247 20 0 1797 0 0 1020 +992 340 291 -13 470 500 10 181 0 +993 3 292 -30 0 1561 10 100 0 +994 209 68 -13 1568 1598 10 940 0 +995 18 225 -33 0 1578 10 7 0 +996 147 435 -20 245 275 10 220 0 +997 335 99 25 0 1638 0 0 1009 +998 485 24 20 326 356 10 0 504 +999 470 475 -10 0 1497 10 297 0 +1000 341 58 10 224 254 10 0 403 +1001 192 265 -10 0 1752 10 161 0 +1002 413 391 -8 217 247 10 724 0 +1003 418 251 -21 0 1643 10 650 0 +1004 370 382 -11 884 914 10 459 0 +1005 436 25 -19 0 1520 10 196 0 +1006 320 280 -10 0 1735 10 771 0 +1007 111 392 -18 1169 1199 10 283 0 +1008 308 199 -14 0 1734 10 531 0 +1009 335 99 -25 0 1638 10 997 0 +1010 344 203 -14 0 1706 10 285 0 +1011 217 207 -26 1382 1412 10 714 0 +1012 439 156 -2 526 556 10 249 0 +1013 429 389 -18 424 454 10 95 0 +1014 439 268 -10 298 328 10 188 0 +1015 80 251 -14 0 1641 10 319 0 +1016 198 271 -20 0 1755 10 976 0 +1017 269 402 -20 0 1658 10 878 0 +1018 472 129 -10 0 1559 10 150 0 +1019 351 128 -15 1253 1283 10 926 0 +1020 236 247 -20 0 1797 10 991 0 +1021 436 295 -11 0 1620 10 794 0 +1022 344 70 -24 1146 1176 10 570 0 +1023 103 177 -28 626 656 10 425 0 +1024 66 31 -25 1048 1078 10 935 0 +1025 233 87 -18 253 283 10 715 0 +1026 441 60 -21 1459 1489 10 661 0 +1027 244 368 -25 414 444 10 862 0 +1028 96 346 -26 0 1630 10 791 0 +1029 44 496 -32 0 1491 10 812 0 +1030 287 397 -12 564 594 10 217 0 +1031 250 328 -24 249 279 10 886 0 +1032 64 437 -11 918 948 10 619 0 +1033 33 278 -18 1487 1517 10 433 0 +1034 402 281 -20 0 1656 10 691 0 +1035 6 292 -10 0 1564 10 421 0 +1036 397 57 -17 1476 1506 10 726 0 +1037 91 101 -10 0 1594 10 306 0 +1038 132 57 -20 0 1585 10 733 0 +1039 320 283 -30 0 1734 10 393 0 +1040 7 194 -29 0 1562 10 177 0 +1041 16 287 -12 0 1575 10 902 0 +1042 481 96 -20 0 1534 10 576 0 +1043 391 293 -20 0 1664 10 210 0 +1044 482 141 -14 0 1555 10 865 0 +1045 111 459 -20 359 389 10 197 0 +1046 352 487 -27 0 1553 10 4 0 +1047 426 231 -24 1028 1058 10 207 0 +1048 423 217 -20 0 1635 10 874 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1104.txt b/jsprit-instances/instances/lilim/1000/LRC1104.txt new file mode 100644 index 00000000..44077a7e --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1104.txt @@ -0,0 +1,1044 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 18 0 1546 10 0 598 +2 214 394 -30 231 261 10 855 0 +3 476 483 10 0 1487 10 0 200 +4 352 487 -20 0 1553 10 485 0 +5 230 197 40 122 152 10 0 293 +6 175 239 23 0 1736 0 0 1033 +7 133 202 -16 0 1685 10 772 0 +8 328 458 -26 0 1589 10 88 0 +9 25 499 -10 0 1476 10 747 0 +10 226 423 15 0 1637 10 0 886 +11 313 282 20 0 1741 10 0 296 +12 60 454 10 347 377 10 0 46 +13 239 486 3 1482 1512 10 0 327 +14 102 264 10 0 1663 10 0 203 +15 408 452 -20 0 1555 10 71 0 +16 451 62 5 0 1536 10 0 131 +17 203 390 -24 0 1664 10 168 0 +18 92 233 -20 0 1653 10 116 0 +19 7 300 -10 0 1563 10 421 0 +20 409 90 20 0 1586 10 0 205 +21 307 108 -20 0 1658 10 377 0 +22 347 54 10 0 1593 10 0 371 +23 406 87 -10 0 1586 10 455 0 +24 371 332 -10 0 1665 10 892 0 +25 116 466 20 254 284 10 0 357 +26 441 265 40 0 1620 10 0 226 +27 130 140 17 0 1649 10 0 799 +28 80 117 24 824 854 10 0 508 +29 421 387 -20 801 831 10 897 0 +30 83 300 26 500 530 10 0 163 +31 136 52 10 0 1583 10 0 743 +32 18 462 20 0 1497 10 0 858 +33 390 120 24 0 1620 10 0 267 +34 188 119 -7 0 1667 10 158 0 +35 467 114 -2 0 1555 10 749 0 +36 440 292 24 940 970 10 0 777 +37 268 400 20 0 1660 10 0 932 +38 391 202 14 0 1663 10 0 604 +39 377 432 -20 0 1590 10 986 0 +40 80 290 10 0 1637 10 0 152 +41 439 15 20 0 1510 10 0 926 +42 307 52 -14 920 950 10 564 0 +43 111 192 -21 0 1661 10 254 0 +44 131 56 10 0 1584 10 0 450 +45 88 286 10 0 1646 10 0 818 +46 69 414 -10 0 1567 10 12 0 +47 41 232 16 0 1602 10 0 882 +48 323 77 36 1405 1435 10 0 933 +49 340 416 36 0 1623 10 0 217 +50 86 199 -10 0 1640 10 900 0 +51 314 124 20 0 1670 10 0 264 +52 375 191 -20 0 1673 10 806 0 +53 226 175 23 0 1733 10 0 124 +54 242 106 -27 0 1667 10 994 0 +55 417 417 10 0 1575 10 0 473 +56 419 459 -20 0 1543 10 253 0 +57 389 11 20 0 1535 10 0 646 +58 450 416 25 577 607 10 0 194 +59 246 255 10 0 1805 10 0 344 +60 71 333 -20 0 1614 10 334 0 +61 105 474 27 0 1545 10 0 585 +62 20 489 -30 0 1480 10 318 0 +63 388 331 20 160 190 10 0 685 +64 92 259 4 399 429 0 0 1032 +65 200 261 10 166 196 10 0 230 +66 400 288 -30 0 1657 10 755 0 +67 299 285 3 0 1751 10 0 98 +68 378 199 -30 207 237 10 162 0 +69 325 147 14 0 1684 10 0 533 +70 421 386 -25 0 1593 10 179 0 +71 404 447 20 0 1561 10 0 15 +72 412 478 7 0 1532 0 0 1031 +73 26 67 -20 1317 1347 10 418 0 +74 358 183 -20 0 1684 10 588 0 +75 30 302 -30 0 1585 10 937 0 +76 176 470 14 0 1579 10 0 622 +77 96 270 20 162 192 10 0 930 +78 243 408 -5 0 1653 10 442 0 +79 60 29 -8 0 1520 10 717 0 +80 34 169 11 484 514 10 0 748 +81 407 280 -20 0 1652 10 691 0 +82 277 403 -30 0 1656 10 436 0 +83 498 456 27 1406 1436 10 0 651 +84 384 491 -30 348 378 10 639 0 +85 355 174 -20 0 1682 10 927 0 +86 97 288 -30 0 1654 10 805 0 +87 316 284 -20 0 1737 10 350 0 +88 334 403 26 0 1637 10 0 8 +89 415 223 -23 0 1644 10 801 0 +90 230 320 8 0 1739 10 0 149 +91 432 199 7 0 1622 10 0 874 +92 92 18 -3 0 1531 10 555 0 +93 273 300 30 55 85 10 0 475 +94 269 112 -20 0 1672 10 528 0 +95 429 389 18 0 1585 10 0 332 +96 371 71 21 0 1595 10 0 819 +97 5 297 10 0 1562 10 0 535 +98 414 378 -3 495 525 10 67 0 +99 38 15 3 0 1495 10 0 942 +100 2 295 30 0 1559 10 0 243 +101 237 254 20 0 1798 10 0 793 +102 54 445 10 308 338 10 0 785 +103 382 110 -20 0 1619 10 579 0 +104 438 488 18 0 1508 10 0 262 +105 395 331 20 217 247 10 0 146 +106 230 487 -10 1130 1160 10 148 0 +107 249 407 -25 0 1654 10 330 0 +108 488 26 30 0 1485 0 0 1011 +109 151 81 28 0 1616 10 0 723 +110 483 14 -10 0 1480 10 969 0 +111 0 422 -10 0 1508 10 625 0 +112 429 67 -36 0 1556 10 320 0 +113 195 464 -1 1541 1571 10 182 0 +114 356 256 19 0 1705 10 0 222 +115 264 180 33 1681 1711 0 0 1019 +116 94 235 20 0 1655 10 0 18 +117 474 96 -2 0 1540 10 249 0 +118 268 52 10 0 1613 10 0 699 +119 44 440 24 0 1531 10 0 147 +120 7 382 27 0 1535 10 0 634 +121 459 53 20 0 1524 0 0 1014 +122 491 25 -30 0 1482 10 938 0 +123 439 243 20 0 1622 10 0 303 +124 210 185 -23 0 1735 10 53 0 +125 150 68 -10 423 453 10 653 0 +126 201 270 10 52 82 10 0 967 +127 0 188 -8 0 1554 10 879 0 +128 103 464 -20 0 1552 10 466 0 +129 325 56 -20 0 1604 10 474 0 +130 44 344 -15 0 1585 10 880 0 +131 418 75 -5 0 1569 10 16 0 +132 472 57 17 1295 1325 10 0 814 +133 460 328 -29 0 1587 10 928 0 +134 89 270 -17 0 1649 10 817 0 +135 374 190 20 0 1674 10 0 669 +136 463 253 23 0 1598 10 0 890 +137 97 93 20 0 1592 10 0 788 +138 163 472 9 653 683 10 0 860 +139 29 336 -20 0 1574 10 469 0 +140 84 453 -30 0 1549 10 609 0 +141 294 421 -15 1575 1605 10 370 0 +142 343 62 10 0 1602 10 0 676 +143 371 193 20 0 1678 10 0 478 +144 142 372 -20 0 1649 10 966 0 +145 66 88 2 0 1566 10 0 339 +146 395 332 -20 0 1645 10 105 0 +147 93 413 -24 0 1585 10 119 0 +148 267 394 10 259 289 10 0 106 +149 249 258 -8 0 1803 10 90 0 +150 472 129 10 0 1559 10 0 716 +151 87 3 -10 1433 1463 10 530 0 +152 62 326 -10 0 1609 10 40 0 +153 212 186 11 1707 1737 10 0 859 +154 241 402 -40 0 1659 10 225 0 +155 439 266 10 189 219 10 0 707 +156 79 80 19 0 1570 10 0 356 +157 62 453 10 0 1535 10 0 980 +158 188 151 7 0 1695 10 0 34 +159 386 154 31 0 1645 10 0 824 +160 38 301 -5 296 326 10 562 0 +161 192 265 10 0 1752 10 0 976 +162 371 192 30 134 164 10 0 68 +163 64 294 -26 1101 1131 10 30 0 +164 381 494 -20 0 1535 10 915 0 +165 437 12 20 330 360 10 0 236 +166 186 135 24 0 1680 0 0 1028 +167 459 10 -20 0 1493 10 873 0 +168 175 422 24 1446 1476 10 0 17 +169 274 48 10 0 1608 10 0 568 +170 488 173 -10 0 1561 10 245 0 +171 398 97 -30 0 1599 10 445 0 +172 385 17 -10 809 839 10 846 0 +173 180 283 -8 0 1734 10 698 0 +174 71 12 -18 0 1514 10 506 0 +175 343 49 10 0 1590 10 0 941 +176 248 251 20 2 32 10 0 757 +177 7 194 -8 0 1562 10 407 0 +178 322 290 23 1479 1509 10 0 402 +179 410 399 25 0 1593 10 0 70 +180 398 103 -10 0 1603 10 670 0 +181 385 285 -30 0 1672 10 960 0 +182 179 497 1 0 1554 10 0 113 +183 464 13 20 0 1492 10 0 452 +184 492 335 -18 828 858 10 520 0 +185 27 464 21 0 1502 10 0 972 +186 231 29 14 1226 1256 10 0 836 +187 157 38 3 1048 1078 10 0 543 +188 439 268 10 0 1622 10 0 486 +189 149 214 -22 0 1704 10 199 0 +190 187 73 18 0 1624 10 0 413 +191 429 169 -30 0 1615 10 298 0 +192 350 199 -20 0 1699 10 273 0 +193 60 231 -25 0 1621 10 497 0 +194 448 404 -25 0 1561 10 58 0 +195 481 20 -10 347 377 10 504 0 +196 436 25 19 0 1520 10 0 682 +197 111 459 -20 0 1560 10 328 0 +198 389 17 10 0 1540 10 0 952 +199 148 208 22 0 1701 10 0 189 +200 475 477 -10 0 1492 10 3 0 +201 390 325 -12 0 1653 10 631 0 +202 346 354 -19 0 1670 10 577 0 +203 91 266 -10 0 1652 10 14 0 +204 17 65 20 0 1514 10 0 343 +205 391 112 -20 1000 1030 10 20 0 +206 224 203 -14 0 1758 10 765 0 +207 426 231 -10 0 1634 10 573 0 +208 260 472 -20 1036 1066 10 362 0 +209 265 0 -2 0 1561 10 750 0 +210 391 293 20 0 1664 0 0 1034 +211 411 421 20 0 1577 10 0 774 +212 132 30 -10 0 1562 10 621 0 +213 475 480 30 0 1490 0 0 1001 +214 286 244 -23 1284 1314 10 291 0 +215 436 237 20 186 216 10 0 471 +216 402 284 -10 0 1656 10 909 0 +217 287 397 -36 564 594 10 49 0 +218 272 420 -10 0 1640 10 549 0 +219 477 120 10 0 1550 10 0 611 +220 145 434 -10 0 1600 10 419 0 +221 33 286 -19 0 1592 10 857 0 +222 370 262 -19 1099 1129 10 114 0 +223 393 20 -7 0 1541 10 232 0 +224 330 308 24 0 1713 10 0 795 +225 246 398 40 148 178 10 0 154 +226 482 184 -40 0 1570 10 26 0 +227 451 305 13 208 238 10 0 693 +228 226 316 -21 70 100 10 451 0 +229 110 459 -19 0 1560 10 347 0 +230 244 250 -10 0 1805 10 65 0 +231 458 16 20 313 343 10 0 456 +232 390 34 7 0 1554 10 0 223 +233 423 214 20 217 247 10 0 672 +234 219 215 32 46 76 10 0 753 +235 326 118 10 0 1659 10 0 732 +236 365 74 -20 0 1601 10 165 0 +237 331 356 13 0 1678 10 0 409 +238 210 398 10 0 1658 10 0 657 +239 403 93 -17 0 1592 10 571 0 +240 248 404 30 0 1657 10 0 906 +241 65 62 15 0 1548 10 0 921 +242 460 13 20 322 352 10 0 829 +243 0 293 -30 0 1558 10 100 0 +244 211 248 26 39 69 0 0 1040 +245 484 174 10 265 295 10 0 170 +246 175 352 12 0 1685 0 0 1017 +247 455 168 -10 0 1591 10 300 0 +248 224 191 -20 0 1747 10 763 0 +249 439 156 2 0 1600 10 0 117 +250 434 359 -25 0 1598 10 662 0 +251 118 314 26 0 1665 10 0 845 +252 234 246 -10 65 95 10 871 0 +253 406 450 20 0 1558 10 0 56 +254 75 118 21 0 1592 10 0 43 +255 115 395 11 815 845 10 0 308 +256 329 456 -35 0 1591 10 439 0 +257 218 403 -25 0 1655 10 862 0 +258 149 341 -15 0 1676 10 626 0 +259 253 74 20 0 1635 10 0 429 +260 436 241 -12 327 357 10 384 0 +261 238 203 10 0 1763 10 0 386 +262 405 455 -18 0 1554 10 104 0 +263 485 27 -10 0 1488 10 965 0 +264 323 118 -20 0 1661 10 51 0 +265 330 371 -10 0 1666 10 297 0 +266 25 65 -10 0 1520 10 851 0 +267 406 96 -24 219 249 10 33 0 +268 49 451 20 284 314 10 0 925 +269 307 249 -20 0 1754 10 341 0 +270 178 135 21 1514 1544 10 0 944 +271 299 353 -36 0 1697 10 368 0 +272 236 213 20 39 69 10 0 706 +273 355 177 20 0 1684 10 0 192 +274 394 23 20 0 1543 10 0 908 +275 306 235 25 0 1754 10 0 527 +276 90 477 18 277 307 10 0 628 +277 379 486 -5 0 1543 10 741 0 +278 435 16 10 0 1513 10 0 620 +279 8 497 -10 0 1466 10 624 0 +280 150 484 -10 0 1557 10 847 0 +281 213 399 18 0 1658 10 0 641 +282 391 18 -5 0 1540 10 901 0 +283 111 392 18 0 1613 10 0 984 +284 330 281 -22 1330 1360 10 992 0 +285 344 203 14 0 1706 10 0 595 +286 91 235 -1 0 1652 10 538 0 +287 346 60 10 321 351 10 0 721 +288 483 27 20 0 1489 10 0 998 +289 382 498 -30 0 1531 10 719 0 +290 457 492 7 0 1493 10 0 999 +291 291 213 23 0 1756 10 0 214 +292 154 374 -8 0 1655 10 383 0 +293 225 196 -40 0 1752 10 5 0 +294 94 40 -30 0 1550 10 563 0 +295 0 356 -21 1086 1116 10 569 0 +296 297 283 -20 0 1754 10 11 0 +297 371 423 10 0 1600 10 0 265 +298 417 217 30 189 219 10 0 191 +299 500 228 8 0 1561 10 0 912 +300 412 214 10 0 1646 10 0 247 +301 442 289 -30 0 1616 10 491 0 +302 157 269 -10 0 1717 10 742 0 +303 440 241 -20 0 1621 10 123 0 +304 100 266 -30 0 1661 10 887 0 +305 111 178 18 156 186 10 0 566 +306 91 101 -20 0 1594 10 525 0 +307 25 307 10 0 1579 10 0 433 +308 135 400 -11 0 1622 10 255 0 +309 58 458 -30 323 353 10 689 0 +310 133 26 10 0 1559 10 0 827 +311 211 386 -23 0 1670 10 666 0 +312 94 97 20 218 248 10 0 895 +313 30 155 9 1280 1310 10 0 510 +314 208 184 -19 0 1733 10 540 0 +315 394 333 -20 0 1645 10 518 0 +316 355 180 -20 0 1685 10 514 0 +317 241 180 -27 0 1741 10 700 0 +318 21 485 30 0 1483 10 0 62 +319 80 251 -30 0 1641 10 786 0 +320 476 61 36 0 1517 10 0 112 +321 406 94 -10 0 1591 10 736 0 +322 364 71 5 0 1599 10 0 990 +323 418 221 10 291 321 10 0 891 +324 274 441 -3 695 725 10 710 0 +325 304 97 20 182 212 10 0 720 +326 297 102 -30 0 1656 10 636 0 +327 250 405 -3 0 1656 10 13 0 +328 111 463 20 0 1557 10 0 197 +329 408 279 20 0 1651 10 0 567 +330 263 418 25 0 1643 10 0 107 +331 480 119 7 0 1547 10 0 776 +332 420 383 -18 0 1596 10 95 0 +333 142 14 18 0 1552 10 0 415 +334 73 328 20 193 223 10 0 60 +335 50 438 -11 0 1537 10 619 0 +336 441 7 20 392 422 10 0 616 +337 462 14 20 0 1494 10 0 701 +338 360 294 -20 1418 1448 10 481 0 +339 58 39 -2 1163 1193 10 145 0 +340 58 391 -19 0 1573 10 642 0 +341 410 285 20 0 1648 10 0 269 +342 96 97 20 0 1594 10 0 596 +343 21 64 -20 0 1516 10 204 0 +344 238 210 -10 0 1770 10 59 0 +345 479 121 -8 0 1549 10 820 0 +346 200 178 -10 94 124 10 959 0 +347 216 341 19 0 1714 10 0 229 +348 48 437 -20 0 1536 10 705 0 +349 200 270 20 0 1758 10 0 911 +350 357 181 20 149 179 10 0 87 +351 476 174 -20 0 1573 10 599 0 +352 400 286 -29 154 184 10 494 0 +353 351 481 -20 322 352 10 893 0 +354 270 400 10 0 1660 10 0 974 +355 95 234 10 163 193 10 0 919 +356 128 113 -19 0 1628 10 156 0 +357 133 455 -20 0 1575 10 25 0 +358 16 463 20 0 1495 10 0 899 +359 59 388 20 663 693 10 0 770 +360 376 190 -34 0 1672 10 877 0 +361 481 122 30 0 1547 10 0 784 +362 266 405 20 0 1656 10 0 208 +363 374 232 33 125 155 10 0 677 +364 398 20 20 0 1538 10 0 729 +365 481 26 30 0 1490 10 0 638 +366 63 444 20 0 1542 10 0 782 +367 89 290 20 0 1646 10 0 923 +368 246 314 36 1445 1475 10 0 271 +369 40 304 -27 1145 1175 10 513 0 +370 262 369 15 0 1692 10 0 141 +371 323 29 -10 0 1579 10 22 0 +372 89 65 -15 0 1566 10 964 0 +373 144 35 -28 0 1572 10 411 0 +374 200 265 -20 0 1759 10 868 0 +375 436 264 20 186 216 10 0 548 +376 15 457 20 323 353 10 0 739 +377 397 20 20 280 310 10 0 21 +378 328 491 -21 0 1558 10 463 0 +379 399 175 13 0 1645 10 0 529 +380 432 2 20 467 497 0 0 1003 +381 63 336 -10 0 1606 10 601 0 +382 6 296 10 320 350 10 0 496 +383 146 376 8 0 1648 10 0 292 +384 295 247 12 0 1766 10 0 260 +385 235 33 30 0 1594 10 0 810 +386 233 204 -10 0 1762 10 261 0 +387 142 360 20 1532 1562 0 0 1004 +388 177 156 -25 0 1692 10 584 0 +389 315 287 -27 0 1737 10 655 0 +390 452 172 9 0 1595 0 0 1025 +391 263 153 12 412 442 0 0 1042 +392 493 493 -10 0 1468 10 962 0 +393 320 283 -18 0 1734 10 541 0 +394 64 5 14 0 1504 10 0 935 +395 95 235 -17 155 185 10 979 0 +396 203 211 20 0 1750 10 0 420 +397 16 497 -30 0 1471 10 593 0 +398 348 348 23 0 1673 0 0 1021 +399 485 104 -10 0 1535 10 552 0 +400 330 147 28 0 1681 10 0 502 +401 443 237 20 193 223 10 0 447 +402 316 286 -23 0 1736 10 178 0 +403 335 46 18 1342 1372 10 0 982 +404 381 495 -10 0 1534 10 681 0 +405 364 173 30 180 210 0 0 1036 +406 267 162 -13 1449 1479 10 940 0 +407 214 245 8 0 1775 10 0 177 +408 92 234 10 0 1653 0 0 1023 +409 347 459 -13 0 1581 10 237 0 +410 30 7 -32 0 1484 10 687 0 +411 120 37 28 0 1562 10 0 373 +412 397 153 -13 882 912 10 519 0 +413 210 29 -18 0 1587 10 190 0 +414 87 285 30 0 1645 10 0 803 +415 132 32 -18 784 814 10 333 0 +416 390 294 -30 0 1665 10 537 0 +417 67 451 5 0 1540 10 0 703 +418 24 68 20 0 1521 10 0 73 +419 146 439 10 0 1596 10 0 220 +420 209 212 -20 0 1756 10 396 0 +421 6 292 10 0 1564 10 0 19 +422 18 63 -20 339 369 10 943 0 +423 149 98 4 0 1629 10 0 574 +424 91 268 10 0 1651 10 0 945 +425 103 177 28 0 1647 10 0 536 +426 367 178 20 0 1674 10 0 778 +427 225 269 -22 0 1780 10 484 0 +428 443 246 20 0 1618 10 0 725 +429 306 42 -20 477 507 10 259 0 +430 374 306 4 0 1675 10 0 482 +431 413 421 10 0 1575 10 0 802 +432 470 405 -31 0 1542 10 468 0 +433 33 278 -10 0 1593 10 307 0 +434 149 458 -10 0 1580 10 917 0 +435 257 57 18 1226 1256 10 0 565 +436 272 403 30 190 220 10 0 82 +437 221 291 -3 0 1761 10 608 0 +438 1 101 8 0 1521 10 0 640 +439 332 459 35 0 1587 10 0 256 +440 220 392 -20 258 288 10 448 0 +441 253 50 -18 0 1611 10 715 0 +442 250 441 5 756 786 10 0 78 +443 471 484 10 340 370 10 0 773 +444 480 152 -10 0 1561 10 756 0 +445 404 83 30 0 1584 10 0 171 +446 476 94 -20 0 1537 10 896 0 +447 458 213 -20 0 1600 10 401 0 +448 215 395 20 0 1662 10 0 440 +449 85 288 20 0 1642 10 0 505 +450 179 75 -10 0 1623 10 44 0 +451 228 287 21 0 1768 10 0 228 +452 397 18 -20 0 1537 10 183 0 +453 238 204 20 0 1764 10 0 695 +454 488 3 -16 0 1468 10 978 0 +455 407 88 10 0 1586 10 0 23 +456 459 14 -20 315 345 10 231 0 +457 120 17 -10 0 1545 10 916 0 +458 235 316 -10 656 686 10 876 0 +459 370 382 -20 884 914 10 480 0 +460 405 454 -14 0 1555 10 948 0 +461 17 458 -10 433 463 10 924 0 +462 43 135 -20 0 1575 10 572 0 +463 318 497 21 0 1555 10 0 378 +464 199 268 20 0 1757 10 0 647 +465 111 467 -10 0 1554 10 740 0 +466 138 438 20 287 317 10 0 128 +467 172 314 9 0 1711 0 0 1015 +468 494 468 31 0 1484 10 0 432 +469 35 303 20 0 1590 10 0 139 +470 341 59 27 0 1600 10 0 553 +471 423 221 -20 258 288 10 215 0 +472 395 295 -10 0 1660 10 894 0 +473 413 417 -10 0 1578 10 55 0 +474 339 60 20 0 1602 10 0 129 +475 277 428 -30 490 520 10 93 0 +476 176 199 -20 0 1722 10 991 0 +477 265 240 -27 0 1793 10 951 0 +478 365 190 -20 0 1682 10 143 0 +479 133 53 -40 0 1582 10 885 0 +480 387 488 20 0 1537 10 0 459 +481 385 295 20 0 1669 10 0 338 +482 491 369 -4 0 1543 10 430 0 +483 445 273 -11 0 1615 10 794 0 +484 195 273 22 0 1752 10 0 427 +485 313 493 20 0 1560 10 0 4 +486 495 227 -10 0 1565 10 188 0 +487 241 403 -10 220 250 10 853 0 +488 30 72 -10 0 1529 10 881 0 +489 21 487 10 350 380 10 0 606 +490 324 99 -30 0 1643 10 612 0 +491 453 318 30 374 404 10 0 301 +492 443 272 10 0 1617 10 0 516 +493 447 184 27 0 1604 10 0 602 +494 366 288 29 0 1689 10 0 352 +495 440 284 25 0 1618 0 0 1020 +496 13 314 -10 0 1566 10 382 0 +497 72 227 25 0 1632 10 0 193 +498 377 385 6 0 1626 10 0 630 +499 477 478 20 392 422 10 0 848 +500 204 185 -20 0 1732 10 808 0 +501 226 191 20 0 1748 0 0 1041 +502 330 138 -28 0 1674 10 400 0 +503 185 434 -12 0 1616 10 920 0 +504 483 22 10 334 364 10 0 195 +505 71 282 -20 0 1630 10 449 0 +506 60 5 18 0 1501 10 0 174 +507 189 402 -30 536 566 10 867 0 +508 134 211 -24 0 1689 10 28 0 +509 146 313 22 0 1690 10 0 744 +510 21 146 -9 0 1560 10 313 0 +511 37 281 -12 0 1596 10 902 0 +512 416 417 20 0 1576 10 0 821 +513 44 311 27 0 1597 10 0 369 +514 361 181 20 0 1681 10 0 316 +515 444 242 10 216 246 10 0 690 +516 444 271 -10 0 1616 10 492 0 +517 359 179 -14 0 1681 10 531 0 +518 388 334 20 0 1650 10 0 315 +519 401 164 13 621 651 10 0 412 +520 499 316 18 622 652 10 0 184 +521 399 106 -20 0 1604 10 841 0 +522 425 215 10 0 1633 10 0 731 +523 407 98 -20 0 1593 10 861 0 +524 406 460 -20 0 1550 10 680 0 +525 88 95 20 0 1587 10 0 306 +526 95 64 -20 766 796 10 947 0 +527 306 229 -25 0 1752 10 275 0 +528 273 55 20 0 1615 10 0 94 +529 384 149 -13 0 1644 10 379 0 +530 122 35 10 250 280 10 0 151 +531 308 199 14 0 1734 10 0 517 +532 390 301 -15 0 1662 10 934 0 +533 300 108 -14 0 1661 10 69 0 +534 267 400 10 0 1661 10 0 761 +535 8 300 -10 0 1564 10 97 0 +536 105 181 -28 0 1651 10 425 0 +537 398 325 30 233 263 10 0 416 +538 166 247 1 0 1727 10 0 286 +539 140 431 -23 0 1600 10 835 0 +540 253 118 19 547 577 10 0 314 +541 359 246 18 1423 1453 10 0 393 +542 321 277 -20 0 1736 10 983 0 +543 168 59 -3 0 1604 10 187 0 +544 406 285 -20 0 1652 10 603 0 +545 391 334 20 0 1647 10 0 758 +546 437 19 15 0 1514 10 0 809 +547 201 278 13 0 1755 0 0 1035 +548 435 267 -20 323 353 10 375 0 +549 245 408 10 204 234 10 0 218 +550 16 462 10 0 1496 10 0 783 +551 107 374 -10 914 944 10 664 0 +552 477 97 10 0 1538 10 0 399 +553 346 57 -27 308 338 10 470 0 +554 14 459 -20 336 366 10 589 0 +555 102 6 3 0 1526 10 0 92 +556 359 287 -19 0 1696 10 738 0 +557 297 131 25 0 1684 10 0 870 +558 282 1 -29 0 1560 10 759 0 +559 21 70 15 0 1520 10 0 816 +560 440 244 -20 266 296 10 971 0 +561 482 104 -10 0 1537 10 813 0 +562 120 261 5 0 1681 10 0 160 +563 125 29 30 283 313 10 0 294 +564 292 32 14 0 1589 10 0 42 +565 262 92 -18 0 1653 10 435 0 +566 68 160 -18 1136 1166 10 305 0 +567 405 276 -20 0 1654 10 329 0 +568 277 50 -10 0 1610 10 169 0 +569 32 319 21 401 431 10 0 295 +570 344 70 -9 0 1608 10 781 0 +571 481 84 17 506 536 10 0 239 +572 21 68 20 0 1519 10 0 462 +573 441 244 10 0 1620 10 0 207 +574 57 43 -4 0 1528 10 423 0 +575 1 293 -10 268 298 10 728 0 +576 481 96 20 0 1534 0 0 1008 +577 471 368 19 0 1561 10 0 202 +578 236 126 -15 0 1687 10 730 0 +579 406 99 20 0 1594 10 0 103 +580 303 186 -9 1354 1384 10 674 0 +581 225 369 38 121 151 10 0 734 +582 412 453 10 297 327 10 0 910 +583 104 349 -20 0 1635 10 822 0 +584 173 182 25 0 1709 10 0 388 +585 111 464 -27 0 1556 10 61 0 +586 53 440 -30 0 1538 10 975 0 +587 69 336 -30 218 248 10 869 0 +588 359 182 20 209 239 10 0 74 +589 13 459 20 0 1496 10 0 554 +590 244 277 18 0 1784 10 0 850 +591 484 177 -20 0 1566 10 875 0 +592 452 206 31 492 522 0 0 1024 +593 22 483 30 0 1486 10 0 397 +594 452 110 14 340 370 10 0 661 +595 347 192 -14 1488 1518 10 285 0 +596 95 92 -20 0 1590 10 342 0 +597 368 311 14 0 1679 10 0 722 +598 479 387 -18 0 1545 10 1 0 +599 479 169 20 0 1569 10 0 351 +600 497 266 25 0 1564 10 0 918 +601 66 336 10 0 1608 10 0 381 +602 376 195 -27 0 1674 10 493 0 +603 401 281 20 261 291 10 0 544 +604 441 177 -14 0 1607 10 38 0 +605 231 203 -10 0 1761 10 660 0 +606 21 488 -10 361 391 10 489 0 +607 231 204 -10 0 1762 10 760 0 +608 122 422 3 1457 1487 10 0 437 +609 65 453 30 282 312 10 0 140 +610 206 261 -30 0 1766 10 779 0 +611 466 149 -10 1186 1216 10 219 0 +612 313 119 30 216 246 10 0 490 +613 90 274 20 0 1650 0 0 1030 +614 39 162 -8 0 1583 10 832 0 +615 35 306 20 0 1589 10 0 766 +616 437 15 -20 0 1511 10 336 0 +617 307 412 -29 0 1640 10 968 0 +618 79 291 10 0 1636 10 0 737 +619 64 437 11 0 1548 10 0 335 +620 376 92 -10 991 1021 10 278 0 +621 129 27 10 298 328 10 0 212 +622 196 489 -14 0 1566 10 76 0 +623 51 286 -16 0 1609 10 842 0 +624 20 488 10 372 402 10 0 279 +625 13 455 10 0 1498 10 0 111 +626 170 347 15 436 466 10 0 258 +627 92 230 -10 0 1652 10 955 0 +628 117 467 -18 0 1557 10 276 0 +629 413 217 -10 0 1645 10 683 0 +630 405 450 -6 0 1558 10 498 0 +631 394 322 12 0 1651 10 0 201 +632 125 61 -20 0 1585 10 733 0 +633 238 123 24 781 811 10 0 864 +634 11 403 -27 0 1528 10 120 0 +635 89 272 -20 0 1649 10 823 0 +636 304 102 30 0 1654 10 0 326 +637 478 121 -10 0 1550 10 950 0 +638 408 84 -30 0 1582 10 365 0 +639 376 494 30 0 1537 10 0 84 +640 20 73 -8 0 1521 10 438 0 +641 159 299 -18 0 1708 10 281 0 +642 95 382 19 0 1608 10 0 340 +643 352 63 -17 0 1598 10 726 0 +644 365 274 -16 0 1694 10 678 0 +645 30 301 -25 0 1586 10 696 0 +646 351 5 -20 0 1546 10 57 0 +647 197 267 -20 109 139 10 464 0 +648 498 171 -20 0 1551 10 888 0 +649 468 352 -12 0 1571 10 718 0 +650 418 251 21 0 1643 10 0 768 +651 489 437 -27 0 1508 10 83 0 +652 251 63 14 0 1624 0 0 1016 +653 132 55 10 267 297 10 0 125 +654 281 96 -30 0 1654 10 849 0 +655 333 293 27 617 647 10 0 389 +656 255 487 19 0 1574 10 0 957 +657 207 400 -10 0 1655 10 238 0 +658 469 489 4 0 1487 10 0 949 +659 244 254 20 100 130 10 0 686 +660 233 207 10 46 76 10 0 605 +661 441 60 -14 1459 1489 10 594 0 +662 411 379 25 1193 1223 10 0 250 +663 178 72 23 0 1619 0 0 1013 +664 51 447 10 0 1531 10 0 551 +665 478 118 -26 0 1548 10 985 0 +666 141 426 23 0 1604 10 0 311 +667 295 89 -25 742 772 10 997 0 +668 112 433 29 235 265 10 0 839 +669 320 211 -20 0 1731 10 135 0 +670 400 103 10 0 1601 10 0 180 +671 408 453 10 0 1554 10 0 702 +672 435 180 -20 0 1614 10 233 0 +673 432 66 -20 0 1553 10 708 0 +674 374 116 9 0 1629 10 0 580 +675 478 102 10 0 1540 10 0 780 +676 335 57 -10 0 1601 10 142 0 +677 385 239 -33 0 1676 10 363 0 +678 386 245 16 0 1675 10 0 644 +679 208 396 -36 176 206 10 745 0 +680 380 489 20 0 1539 10 0 524 +681 380 498 10 0 1531 10 0 404 +682 440 7 -19 314 344 10 196 0 +683 434 245 10 342 372 10 0 629 +684 90 232 10 0 1650 10 0 970 +685 389 334 -20 0 1649 10 63 0 +686 241 205 -20 0 1766 10 659 0 +687 18 24 32 0 1488 10 0 410 +688 57 183 15 0 1607 10 0 694 +689 59 457 30 0 1530 10 0 309 +690 442 243 -10 0 1619 10 515 0 +691 402 281 20 0 1656 10 0 81 +692 445 237 10 200 230 10 0 956 +693 441 273 -13 0 1619 10 227 0 +694 31 175 -15 247 277 10 688 0 +695 234 202 -20 0 1761 10 453 0 +696 52 303 25 441 471 10 0 645 +697 167 445 -11 0 1600 10 825 0 +698 179 286 8 0 1732 10 0 173 +699 269 48 -10 0 1609 10 118 0 +700 165 59 27 0 1602 10 0 317 +701 461 8 -20 0 1490 10 337 0 +702 421 415 -10 0 1574 10 671 0 +703 59 459 -5 311 341 10 417 0 +704 24 492 10 0 1480 10 0 905 +705 55 449 20 0 1533 10 0 348 +706 224 192 -20 0 1748 10 272 0 +707 444 269 -10 0 1617 10 155 0 +708 491 20 20 394 424 10 0 673 +709 313 126 -11 243 273 10 769 0 +710 283 438 3 0 1621 10 0 324 +711 352 241 -10 0 1709 10 958 0 +712 398 476 25 0 1541 0 0 1012 +713 442 247 10 0 1619 10 0 889 +714 217 207 26 0 1757 10 0 754 +715 233 87 18 253 283 10 0 441 +716 479 127 -10 270 300 10 150 0 +717 6 53 8 0 1498 10 0 79 +718 478 300 12 0 1578 10 0 649 +719 378 493 30 0 1537 10 0 289 +720 303 78 -20 0 1632 10 325 0 +721 344 62 -10 0 1601 10 287 0 +722 371 315 -14 0 1674 10 597 0 +723 200 78 -28 0 1632 10 109 0 +724 413 391 8 0 1596 10 0 826 +725 415 216 -20 0 1643 10 428 0 +726 397 57 17 1476 1506 10 0 643 +727 293 228 -22 0 1763 10 790 0 +728 0 297 10 0 1557 10 0 575 +729 435 20 -20 0 1516 10 364 0 +730 195 111 15 0 1662 10 0 578 +731 417 218 -10 0 1641 10 522 0 +732 340 54 -10 238 268 10 235 0 +733 132 57 20 0 1585 10 0 632 +734 210 379 -38 0 1676 10 581 0 +735 228 260 -30 0 1787 10 838 0 +736 399 104 10 0 1603 10 0 321 +737 95 277 -10 0 1654 10 618 0 +738 360 284 19 0 1696 10 0 556 +739 53 466 -20 0 1519 10 376 0 +740 112 465 10 0 1556 10 0 465 +741 313 391 5 0 1657 10 0 277 +742 93 235 10 0 1654 10 0 302 +743 125 32 -10 0 1560 10 31 0 +744 215 282 -22 1440 1470 10 509 0 +745 224 320 36 0 1737 10 0 679 +746 134 428 -5 0 1599 10 922 0 +747 26 490 10 0 1483 10 0 9 +748 44 115 -11 0 1565 10 80 0 +749 438 127 2 0 1587 10 0 35 +750 239 15 2 604 634 10 0 209 +751 342 54 -30 0 1595 10 787 0 +752 109 463 30 334 364 0 0 1009 +753 199 187 -32 0 1730 10 234 0 +754 201 188 -26 0 1732 10 714 0 +755 399 301 30 194 224 10 0 66 +756 484 171 10 293 323 10 0 444 +757 272 234 -20 1590 1620 10 176 0 +758 380 350 -20 0 1647 10 545 0 +759 140 108 29 0 1632 10 0 558 +760 228 199 10 0 1756 10 0 607 +761 245 461 -10 649 679 10 534 0 +762 305 107 20 0 1658 10 0 884 +763 231 195 20 109 139 10 0 248 +764 450 265 10 0 1611 0 0 1027 +765 273 149 14 0 1708 10 0 206 +766 12 358 -20 0 1550 10 615 0 +767 315 121 10 203 233 10 0 866 +768 420 213 -21 0 1638 10 650 0 +769 331 134 11 0 1670 10 0 709 +770 84 377 -20 0 1602 10 359 0 +771 320 280 -30 0 1735 10 792 0 +772 89 185 16 600 630 10 0 7 +773 472 481 -10 0 1491 10 443 0 +774 422 420 -20 0 1570 10 211 0 +775 475 267 7 0 1586 10 0 843 +776 470 125 -7 0 1558 10 331 0 +777 435 268 -24 0 1626 10 36 0 +778 409 155 -20 185 215 10 426 0 +779 243 248 30 0 1804 10 0 610 +780 488 96 -10 1066 1096 10 675 0 +781 341 72 9 0 1612 10 0 570 +782 58 449 -20 0 1535 10 366 0 +783 16 460 -10 411 441 10 550 0 +784 480 136 -30 0 1555 10 361 0 +785 162 388 -10 0 1648 10 102 0 +786 47 208 30 226 256 10 0 319 +787 324 127 30 0 1668 10 0 751 +788 87 96 -20 0 1587 10 137 0 +789 140 137 32 0 1654 10 0 852 +790 314 205 22 0 1733 10 0 727 +791 96 346 -20 0 1630 10 830 0 +792 321 280 30 0 1734 10 0 771 +793 245 251 -20 0 1806 10 101 0 +794 436 295 11 0 1620 10 0 483 +795 274 261 -24 0 1785 10 224 0 +796 271 128 12 346 376 0 0 1022 +797 275 45 -30 0 1605 10 981 0 +798 422 409 10 234 264 10 0 931 +799 146 188 -17 0 1690 10 27 0 +800 93 96 -12 225 255 10 904 0 +801 409 255 23 0 1652 10 0 89 +802 449 428 -10 0 1545 10 431 0 +803 90 285 -30 0 1648 10 414 0 +804 415 95 15 0 1585 10 0 903 +805 88 287 30 0 1645 10 0 86 +806 379 196 20 194 224 10 0 52 +807 368 452 16 0 1578 0 0 1010 +808 202 186 20 0 1731 10 0 500 +809 435 11 -15 0 1509 10 546 0 +810 269 46 -30 0 1607 10 385 0 +811 7 292 -20 0 1565 10 993 0 +812 44 496 -30 0 1491 10 987 0 +813 478 99 10 0 1538 10 0 561 +814 391 99 -17 0 1605 10 132 0 +815 132 477 25 0 1556 10 0 913 +816 24 65 -15 0 1519 10 559 0 +817 130 247 17 120 150 10 0 134 +818 133 273 -10 0 1692 10 45 0 +819 347 62 -21 0 1600 10 96 0 +820 404 140 8 0 1622 10 0 345 +821 416 420 -20 0 1574 10 512 0 +822 67 335 20 0 1610 10 0 583 +823 92 270 20 257 287 10 0 635 +824 411 95 -31 243 273 10 159 0 +825 132 479 11 0 1554 10 0 697 +826 366 334 -8 0 1668 10 724 0 +827 125 39 -10 0 1566 10 310 0 +828 419 422 20 276 306 10 0 831 +829 460 2 -20 0 1487 10 242 0 +830 67 334 20 0 1610 10 0 791 +831 448 414 -20 0 1554 10 828 0 +832 46 163 8 0 1590 10 0 614 +833 77 465 -18 0 1536 10 946 0 +834 284 319 17 817 847 0 0 1039 +835 102 422 23 226 256 10 0 539 +836 240 34 -14 0 1595 10 186 0 +837 141 428 20 208 238 10 0 996 +838 204 269 30 0 1762 10 0 735 +839 144 439 -29 0 1595 10 668 0 +840 470 417 11 0 1535 0 0 1002 +841 404 103 20 0 1599 10 0 521 +842 5 281 16 0 1565 10 0 623 +843 487 320 -7 0 1564 10 775 0 +844 398 23 10 270 300 10 0 856 +845 90 296 -26 166 196 10 251 0 +846 386 13 10 0 1538 10 0 172 +847 115 465 10 0 1558 10 0 280 +848 473 475 -20 0 1495 10 499 0 +849 275 42 30 0 1602 10 0 654 +850 286 356 -18 0 1700 10 590 0 +851 15 69 10 296 326 10 0 266 +852 267 44 -32 0 1605 10 789 0 +853 243 399 10 235 265 10 0 487 +854 390 249 21 0 1671 0 0 1026 +855 210 391 30 0 1665 10 0 2 +856 433 15 -10 0 1514 10 844 0 +857 24 259 19 0 1585 10 0 221 +858 12 463 -20 361 391 10 32 0 +859 237 213 -11 0 1772 10 153 0 +860 182 480 -9 0 1572 10 138 0 +861 409 88 20 0 1585 10 0 523 +862 244 368 25 0 1693 10 0 257 +863 381 328 -10 717 747 10 973 0 +864 213 185 -24 0 1737 10 633 0 +865 482 141 -10 0 1555 10 963 0 +866 319 124 -10 0 1668 10 767 0 +867 141 431 30 0 1600 10 0 507 +868 198 264 20 0 1758 10 0 374 +869 69 334 30 0 1612 10 0 587 +870 299 98 -25 0 1652 10 557 0 +871 240 250 10 37 67 10 0 252 +872 199 203 -30 1457 1487 10 961 0 +873 459 17 20 0 1498 10 0 167 +874 423 217 -7 0 1635 10 91 0 +875 477 179 20 0 1574 10 0 591 +876 213 397 10 0 1660 10 0 458 +877 405 187 34 1251 1281 10 0 360 +878 269 402 20 0 1658 0 0 1029 +879 53 204 8 1055 1085 10 0 127 +880 13 394 15 0 1534 10 0 130 +881 15 68 10 0 1514 10 0 488 +882 56 268 -16 0 1617 10 47 0 +883 360 184 10 0 1683 10 0 954 +884 307 102 -20 0 1653 10 762 0 +885 130 57 40 0 1584 10 0 479 +886 250 328 -15 0 1733 10 10 0 +887 91 231 30 0 1651 10 0 304 +888 479 176 20 240 270 10 0 648 +889 420 224 -10 0 1640 10 713 0 +890 461 182 -23 0 1590 10 136 0 +891 418 218 -10 0 1640 10 323 0 +892 419 418 10 0 1573 10 0 24 +893 336 493 20 0 1554 10 0 353 +894 389 300 10 0 1664 10 0 472 +895 92 76 -20 1139 1169 10 312 0 +896 476 102 20 0 1541 10 0 446 +897 418 399 20 0 1587 10 0 29 +898 109 56 27 0 1572 0 0 1007 +899 13 465 -20 0 1492 10 358 0 +900 92 232 10 177 207 10 0 50 +901 394 47 5 313 343 10 0 282 +902 16 287 12 0 1575 10 0 511 +903 399 102 -15 0 1601 10 804 0 +904 143 158 12 0 1670 10 0 800 +905 18 484 -10 0 1482 10 704 0 +906 250 411 -30 0 1650 10 240 0 +907 19 273 25 0 1579 0 0 1018 +908 365 28 -20 0 1561 10 274 0 +909 387 297 10 144 174 10 0 216 +910 433 447 -10 794 824 10 582 0 +911 214 274 -20 0 1768 10 349 0 +912 489 338 -8 0 1557 10 299 0 +913 130 494 -25 0 1540 10 815 0 +914 23 67 30 0 1520 0 0 1006 +915 374 489 20 0 1542 10 0 164 +916 126 30 10 0 1559 10 0 457 +917 112 467 10 276 306 10 0 434 +918 489 274 -25 534 564 10 600 0 +919 61 214 -10 342 372 10 355 0 +920 166 440 12 207 237 10 0 503 +921 56 75 -15 1438 1468 10 241 0 +922 210 276 5 47 77 10 0 746 +923 80 286 -20 0 1638 10 367 0 +924 17 459 10 0 1498 10 0 461 +925 66 448 -20 0 1541 10 268 0 +926 351 128 -20 1253 1283 10 41 0 +927 352 176 20 126 156 10 0 85 +928 490 286 29 0 1569 10 0 133 +929 247 219 17 0 1780 0 0 1038 +930 86 268 -20 0 1647 10 77 0 +931 398 329 -10 0 1644 10 798 0 +932 272 402 -20 0 1658 10 37 0 +933 317 123 -36 0 1668 10 48 0 +934 408 318 15 643 673 10 0 532 +935 66 31 -14 1048 1078 10 394 0 +936 425 448 -10 0 1547 10 939 0 +937 35 304 30 0 1590 10 0 75 +938 471 94 30 0 1541 10 0 122 +939 470 473 10 0 1498 10 0 936 +940 224 56 13 0 1616 10 0 406 +941 343 47 -10 0 1588 10 175 0 +942 52 18 -3 0 1506 10 99 0 +943 16 68 20 0 1515 10 0 422 +944 195 185 -21 0 1726 10 270 0 +945 92 236 -10 0 1653 10 424 0 +946 76 462 18 0 1537 10 0 833 +947 124 56 20 0 1580 10 0 526 +948 481 454 14 0 1503 10 0 460 +949 477 483 -4 366 396 10 658 0 +950 481 124 10 0 1548 10 0 637 +951 389 156 27 0 1644 10 0 477 +952 384 16 -10 0 1542 10 198 0 +953 492 34 -5 0 1487 10 977 0 +954 371 200 -10 224 254 10 883 0 +955 153 235 10 0 1713 10 0 627 +956 428 202 -10 904 934 10 692 0 +957 257 391 -19 0 1670 10 656 0 +958 421 218 10 0 1638 10 0 711 +959 206 186 10 0 1734 10 0 346 +960 393 301 30 0 1660 10 0 181 +961 204 187 30 0 1733 10 0 872 +962 468 475 10 313 343 10 0 392 +963 477 122 10 330 360 10 0 865 +964 100 66 15 0 1574 10 0 372 +965 489 27 10 0 1485 10 0 263 +966 12 451 20 0 1500 10 0 144 +967 197 270 -10 0 1755 10 126 0 +968 311 422 29 0 1629 10 0 617 +969 489 17 10 0 1478 10 0 110 +970 13 214 -10 0 1572 10 684 0 +971 440 247 20 0 1621 10 0 560 +972 28 467 -21 0 1501 10 185 0 +973 388 325 10 0 1654 10 0 863 +974 270 401 -10 0 1659 10 354 0 +975 5 445 30 0 1498 10 0 586 +976 198 271 -10 0 1755 10 161 0 +977 480 131 5 0 1553 10 0 953 +978 437 98 16 0 1571 10 0 454 +979 131 246 17 0 1692 10 0 395 +980 49 437 -10 0 1537 10 157 0 +981 270 49 30 0 1610 10 0 797 +982 337 41 -18 0 1585 10 403 0 +983 318 280 20 0 1737 10 0 542 +984 154 392 -18 0 1640 10 283 0 +985 493 111 26 0 1532 10 0 665 +986 399 450 20 0 1562 10 0 39 +987 67 452 30 0 1539 10 0 812 +988 34 239 -8 0 1595 10 995 0 +989 343 276 15 96 126 0 0 1037 +990 393 12 -5 0 1534 10 322 0 +991 236 247 20 0 1797 10 0 476 +992 340 291 22 0 1713 10 0 284 +993 3 292 20 0 1561 10 0 811 +994 209 68 27 1568 1598 10 0 54 +995 18 225 8 0 1578 10 0 988 +996 147 435 -20 245 275 10 837 0 +997 335 99 25 0 1638 10 0 667 +998 485 24 -20 0 1485 10 288 0 +999 470 475 -7 0 1497 10 290 0 +1000 341 58 10 224 254 0 0 1005 +1001 475 480 -30 0 1490 10 213 0 +1002 470 417 -11 0 1535 10 840 0 +1003 432 2 -20 467 497 10 380 0 +1004 142 360 -20 1532 1562 10 387 0 +1005 341 58 -10 224 254 10 1000 0 +1006 23 67 -30 0 1520 10 914 0 +1007 109 56 -27 0 1572 10 898 0 +1008 481 96 -20 0 1534 10 576 0 +1009 109 463 -30 334 364 10 752 0 +1010 368 452 -16 0 1578 10 807 0 +1011 488 26 -30 0 1485 10 108 0 +1012 398 476 -25 0 1541 10 712 0 +1013 178 72 -23 0 1619 10 663 0 +1014 459 53 -20 0 1524 10 121 0 +1015 172 314 -9 0 1711 10 467 0 +1016 251 63 -14 0 1624 10 652 0 +1017 175 352 -12 0 1685 10 246 0 +1018 19 273 -25 0 1579 10 907 0 +1019 264 180 -33 1681 1711 10 115 0 +1020 440 284 -25 0 1618 10 495 0 +1021 348 348 -23 0 1673 10 398 0 +1022 271 128 -12 346 376 10 796 0 +1023 92 234 -10 0 1653 10 408 0 +1024 452 206 -31 492 522 10 592 0 +1025 452 172 -9 0 1595 10 390 0 +1026 390 249 -21 0 1671 10 854 0 +1027 450 265 -10 0 1611 10 764 0 +1028 186 135 -24 0 1680 10 166 0 +1029 269 402 -20 0 1658 10 878 0 +1030 90 274 -20 0 1650 10 613 0 +1031 412 478 -7 0 1532 10 72 0 +1032 92 259 -4 399 429 10 64 0 +1033 175 239 -23 0 1736 10 6 0 +1034 391 293 -20 0 1664 10 210 0 +1035 201 278 -13 0 1755 10 547 0 +1036 364 173 -30 180 210 10 405 0 +1037 343 276 -15 96 126 10 989 0 +1038 247 219 -17 0 1780 10 929 0 +1039 284 319 -17 817 847 10 834 0 +1040 211 248 -26 39 69 10 244 0 +1041 226 191 -20 0 1748 10 501 0 +1042 263 153 -12 412 442 10 391 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1105.txt b/jsprit-instances/instances/lilim/1000/LRC1105.txt new file mode 100644 index 00000000..ff41aa82 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1105.txt @@ -0,0 +1,1054 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 -7 882 932 10 290 0 +2 214 394 -18 221 271 10 281 0 +3 476 483 -20 324 432 10 56 0 +4 352 487 -10 905 928 10 487 0 +5 230 197 40 94 179 10 0 453 +6 175 239 23 75 148 10 0 395 +7 133 202 -10 468 483 10 44 0 +8 328 458 -25 755 810 10 409 0 +9 25 499 10 431 489 10 0 551 +10 226 423 -30 174 259 10 906 0 +11 313 282 20 128 229 10 0 87 +12 60 454 10 329 396 10 0 503 +13 239 486 -20 1486 1508 10 220 0 +14 102 264 10 148 194 10 0 635 +15 408 452 -25 265 310 10 179 0 +16 451 62 5 275 388 10 0 998 +17 203 390 40 168 179 10 0 507 +18 92 233 10 179 298 0 0 1041 +19 7 300 -10 328 392 10 645 0 +20 409 90 20 247 299 10 0 455 +21 307 108 -10 238 267 10 767 0 +22 347 54 -10 270 350 10 533 0 +23 406 87 -30 309 347 10 445 0 +24 371 332 14 480 609 10 0 655 +25 116 466 20 254 277 10 0 197 +26 441 265 40 191 269 10 0 188 +27 130 140 17 189 230 10 0 356 +28 80 117 -10 808 871 10 408 0 +29 421 387 15 768 865 10 0 460 +30 83 300 26 475 554 10 0 730 +31 136 52 10 302 313 10 0 411 +32 18 462 -10 397 429 10 550 0 +33 390 120 24 1014 1025 0 0 1034 +34 188 119 -20 955 1024 10 465 0 +35 467 114 10 388 393 10 0 938 +36 440 292 -25 919 991 10 495 0 +37 268 400 20 225 291 10 0 826 +38 391 202 14 148 187 10 0 592 +39 377 432 -20 808 885 10 84 0 +40 80 290 10 187 238 10 0 449 +41 439 15 -10 330 387 10 452 0 +42 307 52 23 891 980 0 0 1032 +43 111 192 -32 1196 1232 10 193 0 +44 131 56 10 252 289 10 0 7 +45 88 286 -30 233 301 10 414 0 +46 69 414 -11 1259 1298 10 833 0 +47 41 232 16 209 298 10 0 879 +48 323 77 -10 1400 1441 10 883 0 +49 340 416 36 280 393 10 0 680 +50 86 199 23 246 340 10 0 832 +51 314 124 -10 231 261 10 709 0 +52 375 191 -10 164 200 10 793 0 +53 226 175 -21 1678 1733 10 451 0 +54 242 106 28 1278 1288 10 0 259 +55 417 417 -20 337 358 10 828 0 +56 419 459 20 276 387 10 0 3 +57 389 11 20 276 423 10 0 646 +58 450 416 -10 581 602 10 939 0 +59 246 255 10 97 159 10 0 531 +60 71 333 10 197 230 10 0 160 +61 105 474 27 449 522 10 0 76 +62 20 489 -10 371 426 10 606 0 +63 388 331 20 160 197 10 0 722 +64 92 259 -20 402 427 10 152 0 +65 200 261 -32 148 215 10 234 0 +66 400 288 30 154 308 10 0 352 +67 299 285 -20 1247 1290 10 499 0 +68 378 199 -30 205 239 10 162 0 +69 325 147 -25 1173 1230 10 557 0 +70 421 386 29 818 861 0 0 1038 +71 404 447 20 250 313 10 0 200 +72 412 478 -26 952 998 10 88 0 +73 26 67 -29 1294 1369 10 177 0 +74 358 183 -10 213 284 10 771 0 +75 30 302 10 262 302 10 0 139 +76 176 470 -27 528 596 10 61 0 +77 96 270 20 155 211 10 0 803 +78 243 408 -8 1436 1462 10 202 0 +79 60 29 32 1351 1404 10 0 555 +80 34 169 -35 475 523 10 508 0 +81 407 280 -10 198 249 10 542 0 +82 277 403 10 155 256 0 0 1019 +83 498 456 -25 1395 1447 10 662 0 +84 384 491 20 341 385 10 0 39 +85 355 174 33 677 784 10 0 502 +86 97 288 22 1262 1337 0 0 1046 +87 316 284 -20 95 184 10 11 0 +88 334 403 26 174 204 10 0 72 +89 415 223 20 279 361 10 0 801 +90 230 320 -11 1169 1246 10 154 0 +91 432 199 7 635 672 10 0 207 +92 92 18 -20 1101 1177 10 596 0 +93 273 300 30 55 136 10 0 765 +94 269 112 -30 1234 1322 10 612 0 +95 429 389 -20 409 469 10 512 0 +96 371 71 -10 274 329 10 326 0 +97 5 297 -10 325 367 10 811 0 +98 414 378 23 494 525 10 0 332 +99 38 15 3 1048 1165 0 0 1003 +100 2 295 -20 314 327 10 993 0 +101 237 254 20 67 129 10 0 659 +102 54 445 10 296 351 10 0 140 +103 382 110 -13 1110 1145 10 379 0 +104 438 488 -20 326 358 10 630 0 +105 395 331 -20 209 255 10 315 0 +106 230 487 -15 1122 1168 10 370 0 +107 249 407 -30 157 245 10 240 0 +108 488 26 30 407 488 10 0 288 +109 151 81 -2 1559 1587 10 145 0 +110 483 14 10 347 409 10 0 263 +111 0 422 8 813 860 10 0 340 +112 429 67 -20 704 790 10 377 0 +113 195 464 -8 1519 1591 10 617 0 +114 356 256 19 106 135 10 0 597 +115 264 180 -6 1602 1740 10 406 0 +116 94 235 20 156 228 10 0 742 +117 474 96 30 271 324 0 0 1014 +118 268 52 10 292 350 10 0 750 +119 44 440 -10 790 817 10 905 0 +120 7 382 -7 746 824 10 980 0 +121 459 53 20 1099 1175 0 0 1009 +122 491 25 -30 401 447 10 365 0 +123 439 243 -20 302 355 10 143 0 +124 210 185 20 76 159 0 0 1030 +125 150 68 -20 409 466 10 827 0 +126 201 270 10 52 125 10 0 838 +127 0 188 26 904 990 0 0 1012 +128 103 464 -18 1242 1334 10 283 0 +129 325 56 -20 751 872 10 927 0 +130 44 344 -30 1072 1117 10 937 0 +131 418 75 -10 449 476 10 638 0 +132 472 57 -3 1254 1366 10 454 0 +133 460 328 13 224 290 10 0 577 +134 89 270 10 190 247 10 0 737 +135 374 190 -10 137 216 10 230 0 +136 463 253 -20 1046 1078 10 472 0 +137 97 93 -20 237 274 10 800 0 +138 163 472 9 623 713 10 0 280 +139 29 336 -10 299 394 10 75 0 +140 84 453 -10 1180 1295 10 102 0 +141 294 421 -12 1556 1625 10 217 0 +142 343 62 -10 356 388 10 568 0 +143 371 193 20 133 157 10 0 123 +144 142 372 18 162 180 10 0 984 +145 66 88 2 832 858 10 0 109 +146 395 332 10 173 269 10 0 537 +147 93 413 17 226 299 10 0 783 +148 267 394 -20 211 338 10 974 0 +149 249 258 30 104 179 10 0 252 +150 472 129 -22 252 334 10 784 0 +151 87 3 -24 1441 1456 10 294 0 +152 62 326 20 259 343 10 0 64 +153 212 186 -20 1663 1737 10 945 0 +154 241 402 11 1008 1072 10 0 90 +155 439 266 10 189 232 10 0 483 +156 79 80 -10 1383 1412 10 754 0 +157 62 453 -10 297 322 10 925 0 +158 188 151 -10 1261 1363 10 959 0 +159 386 154 -30 1088 1144 10 393 0 +160 38 301 -10 295 326 10 60 0 +161 192 265 -10 100 179 10 647 0 +162 371 192 30 134 162 10 0 68 +163 64 294 -10 1090 1142 10 306 0 +164 381 494 10 310 386 0 0 1015 +165 437 12 20 310 380 10 0 337 +166 186 135 -20 689 777 10 335 0 +167 459 10 -20 318 385 10 242 0 +168 175 422 -20 1426 1496 10 583 0 +169 274 48 10 217 236 10 0 667 +170 488 173 -20 264 324 10 888 0 +171 398 97 10 212 269 10 0 267 +172 385 17 -10 792 856 10 990 0 +173 180 283 23 753 764 10 0 714 +174 71 12 2 297 353 10 0 717 +175 343 49 10 237 323 10 0 846 +176 248 251 20 2 74 10 0 402 +177 7 194 29 939 993 10 0 73 +178 322 290 -20 1480 1507 10 868 0 +179 410 399 25 228 269 10 0 15 +180 398 103 -20 274 312 10 517 0 +181 385 285 -10 877 888 10 909 0 +182 179 497 -25 1385 1467 10 815 0 +183 464 13 -20 323 476 10 231 0 +184 492 335 -18 818 868 10 520 0 +185 27 464 -20 1259 1354 10 703 0 +186 231 29 -10 1203 1280 10 706 0 +187 157 38 -6 1043 1083 10 543 0 +188 439 268 -40 287 339 10 26 0 +189 149 214 7 467 528 10 0 536 +190 187 73 -18 268 346 10 715 0 +191 429 169 -13 890 945 10 890 0 +192 350 199 -10 1195 1238 10 736 0 +193 60 231 32 1014 1068 10 0 43 +194 448 404 -20 574 654 10 518 0 +195 481 20 20 346 377 10 0 953 +196 436 25 -20 1251 1343 10 861 0 +197 111 459 -20 337 410 10 25 0 +198 389 17 -20 347 415 10 474 0 +199 148 208 22 487 596 0 0 1028 +200 475 477 -20 413 427 10 71 0 +201 390 325 -20 221 311 10 210 0 +202 346 354 8 800 864 10 0 78 +203 91 266 10 211 285 10 0 424 +204 17 65 20 339 344 10 0 559 +205 391 112 -20 981 1050 10 521 0 +206 224 203 20 53 101 10 0 373 +207 426 231 -7 1001 1086 10 91 0 +208 260 472 33 1020 1082 10 0 218 +209 265 0 -10 869 953 10 490 0 +210 391 293 20 199 283 10 0 201 +211 411 421 20 289 370 0 0 1022 +212 132 30 -20 323 359 10 733 0 +213 475 480 -30 378 411 10 999 0 +214 286 244 -24 1252 1345 10 886 0 +215 436 237 20 186 218 10 0 573 +216 402 284 30 155 254 10 0 711 +217 287 397 12 537 622 10 0 141 +218 272 420 -33 1375 1426 10 208 0 +219 477 120 -40 315 399 10 637 0 +220 145 434 20 211 298 10 0 13 +221 33 286 11 1499 1592 10 0 433 +222 370 262 15 1090 1138 0 0 1025 +223 393 20 -5 348 464 10 901 0 +224 330 308 -12 1129 1241 10 631 0 +225 246 398 40 148 207 10 0 327 +226 482 184 -10 1108 1136 10 756 0 +227 451 305 13 208 262 10 0 649 +228 226 316 -9 70 91 10 437 0 +229 110 459 -10 298 427 10 628 0 +230 244 250 10 6 107 10 0 135 +231 458 16 20 313 418 10 0 183 +232 390 34 -20 1037 1114 10 380 0 +233 423 214 -20 182 281 10 629 0 +234 219 215 32 46 121 10 0 65 +235 326 118 10 152 265 10 0 981 +236 365 74 -20 831 896 10 528 0 +237 331 356 13 689 764 10 0 968 +238 210 398 10 181 258 10 0 448 +239 403 93 10 320 391 10 0 726 +240 248 404 30 154 219 10 0 107 +241 65 62 -20 961 1021 10 312 0 +242 460 13 20 316 417 10 0 167 +243 0 293 30 263 325 10 0 728 +244 211 248 26 39 77 10 0 464 +245 484 174 10 254 305 10 0 599 +246 175 352 -10 1572 1685 10 847 0 +247 455 168 -37 847 916 10 672 0 +248 224 191 20 76 116 10 0 753 +249 439 156 -19 525 557 10 778 0 +250 434 359 -29 1390 1425 10 651 0 +251 118 314 26 328 377 10 0 834 +252 234 246 -30 16 146 10 149 0 +253 406 450 20 259 290 10 0 398 +254 75 118 -12 419 430 10 904 0 +255 115 395 11 808 852 10 0 292 +256 329 456 19 246 283 10 0 485 +257 218 403 15 1300 1369 0 0 1049 +258 149 341 -14 398 440 10 319 0 +259 253 74 -28 1327 1404 10 54 0 +260 436 241 -10 324 360 10 323 0 +261 238 203 -20 63 155 10 386 0 +262 405 455 40 328 383 10 0 758 +263 485 27 -10 441 481 10 110 0 +264 323 118 -20 150 233 10 866 0 +265 330 371 1 547 600 10 0 459 +266 25 65 -10 365 417 10 816 0 +267 406 96 -10 219 295 10 171 0 +268 49 451 20 284 343 10 0 318 +269 307 249 10 1379 1405 0 0 1052 +270 178 135 -20 1490 1568 10 808 0 +271 299 353 34 114 173 10 0 741 +272 236 213 20 39 129 10 0 735 +273 355 177 20 127 150 10 0 950 +274 394 23 -20 392 446 10 751 0 +275 306 235 25 57 92 10 0 363 +276 90 477 18 277 374 0 0 1017 +277 379 486 22 633 740 10 0 910 +278 435 16 -20 342 423 10 364 0 +279 8 497 -10 378 467 10 624 0 +280 150 484 -9 623 657 10 138 0 +281 213 399 18 217 281 10 0 2 +282 391 18 10 350 436 10 0 546 +283 111 392 18 1144 1225 10 0 128 +284 330 281 -12 1327 1364 10 863 0 +285 344 203 -20 141 223 10 983 0 +286 91 235 -17 254 314 10 817 0 +287 346 60 10 307 365 10 0 819 +288 483 27 -30 437 509 10 108 0 +289 382 498 -20 289 360 10 915 0 +290 457 492 7 506 541 10 0 1 +291 291 213 23 1247 1298 10 0 580 +292 154 374 -11 898 1005 10 255 0 +293 225 196 10 59 149 10 0 864 +294 94 40 24 1045 1121 10 0 151 +295 0 356 -21 1057 1146 10 569 0 +296 297 283 -36 1333 1396 10 745 0 +297 371 423 10 211 232 10 0 719 +298 417 217 30 186 222 0 0 1039 +299 500 228 -15 758 835 10 989 0 +300 412 214 10 165 198 10 0 958 +301 442 289 25 195 241 10 0 843 +302 157 269 -10 1577 1606 10 695 0 +303 440 241 -10 269 363 10 602 0 +304 100 266 20 150 239 10 0 347 +305 111 178 18 156 200 10 0 462 +306 91 101 10 259 367 10 0 163 +307 25 307 -20 232 300 10 615 0 +308 135 400 -20 280 348 10 818 0 +309 58 458 10 300 376 10 0 608 +310 133 26 -10 322 331 10 530 0 +311 211 386 20 141 155 10 0 549 +312 94 97 20 224 234 10 0 241 +313 30 155 9 1280 1310 10 0 970 +314 208 184 20 78 103 10 0 653 +315 394 333 20 168 250 10 0 105 +316 355 180 -20 138 167 10 350 0 +317 241 180 -10 1696 1724 10 527 0 +318 21 485 -20 340 367 10 268 0 +319 80 251 14 299 338 10 0 258 +320 476 61 -20 434 493 10 456 0 +321 406 94 10 220 305 10 0 873 +322 364 71 -20 1324 1402 10 729 0 +323 418 221 10 277 335 10 0 260 +324 274 441 -31 657 762 10 860 0 +325 304 97 -40 162 231 10 884 0 +326 297 102 10 155 198 10 0 96 +327 250 405 -40 155 212 10 225 0 +328 111 463 -20 322 351 10 996 0 +329 408 279 20 185 284 0 0 1047 +330 263 418 -20 272 315 10 362 0 +331 480 119 -10 619 668 10 969 0 +332 420 383 -23 975 1019 10 98 0 +333 142 14 18 806 894 10 0 994 +334 73 328 20 193 232 10 0 830 +335 50 438 20 324 379 10 0 166 +336 441 7 -30 370 443 10 616 0 +337 462 14 -20 391 433 10 165 0 +338 360 294 -10 1422 1443 10 764 0 +339 58 39 -4 1136 1219 10 526 0 +340 58 391 -8 892 903 10 111 0 +341 410 285 20 196 219 10 0 854 +342 96 97 20 217 269 0 0 1008 +343 21 64 20 331 403 0 0 1010 +344 238 210 -17 142 156 10 929 0 +345 479 121 -20 307 338 10 716 0 +346 200 178 20 87 150 10 0 885 +347 216 341 -20 649 689 10 304 0 +348 48 437 -32 795 842 10 812 0 +349 200 270 20 53 140 10 0 967 +350 357 181 20 127 212 10 0 316 +351 476 174 30 308 370 10 0 648 +352 400 286 -30 163 170 10 66 0 +353 351 481 10 303 370 0 0 1023 +354 270 400 10 151 199 0 0 1033 +355 95 234 10 155 234 10 0 627 +356 128 113 -17 338 417 10 27 0 +357 133 455 25 759 887 10 0 622 +358 16 463 -20 367 413 10 966 0 +359 59 388 20 631 725 10 0 770 +360 376 190 30 139 211 10 0 769 +361 481 122 30 275 345 10 0 865 +362 266 405 20 219 245 10 0 330 +363 374 232 -25 125 166 10 275 0 +364 398 20 20 273 348 10 0 278 +365 481 26 30 321 381 10 0 122 +366 63 444 20 371 419 10 0 417 +367 89 290 20 166 199 10 0 601 +368 246 314 36 1451 1470 0 0 1051 +369 40 304 -28 1133 1187 10 882 0 +370 262 369 15 119 205 10 0 106 +371 323 29 -18 1099 1205 10 558 0 +372 89 65 -26 705 766 10 632 0 +373 144 35 -20 239 370 10 206 0 +374 200 265 -20 155 180 10 991 0 +375 436 264 20 186 257 10 0 707 +376 15 457 20 313 420 10 0 589 +377 397 20 20 272 354 10 0 112 +378 328 491 21 659 728 0 0 1043 +379 399 175 13 741 782 10 0 103 +380 432 2 20 448 516 10 0 232 +381 63 336 20 238 325 10 0 842 +382 6 296 -20 303 367 10 469 0 +383 146 376 -13 221 278 10 547 0 +384 295 247 12 1298 1339 10 0 795 +385 235 33 -13 1329 1375 10 940 0 +386 233 204 20 49 147 10 0 261 +387 142 360 20 1519 1574 0 0 1036 +388 177 156 25 163 201 10 0 415 +389 315 287 30 126 201 10 0 992 +390 452 172 -14 611 635 10 594 0 +391 263 153 12 394 460 10 0 790 +392 493 493 -10 843 900 10 962 0 +393 320 283 30 95 157 10 0 159 +394 64 5 -28 1120 1167 10 942 0 +395 95 235 -23 155 235 10 6 0 +396 203 211 20 1283 1360 10 0 757 +397 16 497 20 382 500 0 0 1001 +398 348 348 -20 928 971 10 253 0 +399 485 104 -5 766 853 10 977 0 +400 330 147 -10 848 879 10 954 0 +401 443 237 20 196 211 10 0 692 +402 316 286 -20 135 168 10 176 0 +403 335 46 -19 1321 1392 10 727 0 +404 381 495 -10 307 367 10 681 0 +405 364 173 -20 166 225 10 426 0 +406 267 162 6 1440 1488 10 0 115 +407 214 245 8 36 82 10 0 744 +408 92 234 10 219 280 10 0 28 +409 347 459 25 473 516 10 0 8 +410 30 7 -30 1152 1256 10 743 0 +411 120 37 -10 768 813 10 31 0 +412 397 153 -9 872 922 10 477 0 +413 210 29 -27 1029 1103 10 700 0 +414 87 285 30 249 264 10 0 45 +415 132 32 -25 773 826 10 388 0 +416 390 294 20 229 275 10 0 973 +417 67 451 -20 1211 1250 10 366 0 +418 24 68 -10 392 466 10 851 0 +419 146 439 -30 237 312 10 867 0 +420 209 212 18 1512 1574 0 0 1040 +421 6 292 10 247 358 10 0 696 +422 18 63 10 324 385 10 0 572 +423 149 98 -28 1152 1208 10 476 0 +424 91 268 -10 250 270 10 203 0 +425 103 177 28 610 672 10 0 759 +426 367 178 20 155 235 10 0 405 +427 225 269 -30 1272 1300 10 779 0 +428 443 246 -10 215 274 10 515 0 +429 306 42 -20 474 509 10 797 0 +430 374 306 -20 993 1025 10 897 0 +431 413 421 10 287 348 10 0 473 +432 470 405 -14 913 969 10 948 0 +433 33 278 -11 1478 1526 10 221 0 +434 149 458 -10 1151 1207 10 585 0 +435 257 57 18 1213 1269 0 0 1035 +436 272 403 30 165 245 10 0 878 +437 221 291 9 50 116 10 0 228 +438 1 101 -21 1249 1295 10 510 0 +439 332 459 -3 351 416 10 710 0 +440 220 392 20 241 304 10 0 893 +441 253 50 27 200 317 10 0 565 +442 250 441 -12 732 809 10 920 0 +443 471 484 10 339 370 10 0 936 +444 480 152 -20 1024 1049 10 665 0 +445 404 83 30 296 330 10 0 23 +446 476 94 20 274 367 10 0 552 +447 458 213 -20 1130 1156 10 971 0 +448 215 395 -10 229 284 10 238 0 +449 85 288 -10 169 243 10 40 0 +450 179 75 -32 729 781 10 789 0 +451 228 287 21 43 108 10 0 53 +452 397 18 10 279 334 10 0 41 +453 238 204 -40 76 164 10 5 0 +454 488 3 3 402 429 10 0 132 +455 407 88 -20 297 381 10 20 0 +456 459 14 20 315 389 10 0 320 +457 120 17 30 277 312 10 0 506 +458 235 316 -10 649 693 10 876 0 +459 370 382 -1 865 933 10 265 0 +460 405 454 -15 1301 1335 10 29 0 +461 17 458 10 409 488 0 0 1005 +462 43 135 -18 236 338 10 305 0 +463 318 497 -10 836 901 10 932 0 +464 199 268 -26 63 110 10 244 0 +465 111 467 20 292 311 10 0 34 +466 138 438 -20 273 331 10 837 0 +467 172 314 -10 520 600 10 575 0 +468 494 468 -20 339 395 10 774 0 +469 35 303 20 221 284 10 0 382 +470 341 59 27 786 823 10 0 620 +471 423 221 -20 263 284 10 806 0 +472 395 295 20 211 241 10 0 136 +473 413 417 -10 330 412 10 431 0 +474 339 60 20 209 317 10 0 198 +475 277 428 -25 483 528 10 862 0 +476 176 199 28 89 143 10 0 423 +477 265 240 9 18 93 10 0 412 +478 365 190 22 1465 1519 10 0 595 +479 133 53 -20 258 330 10 944 0 +480 387 488 -30 350 403 10 639 0 +481 385 295 20 142 205 10 0 960 +482 491 369 28 718 771 10 0 718 +483 445 273 -10 234 312 10 155 0 +484 195 273 -20 59 156 10 976 0 +485 313 493 -19 1177 1239 10 256 0 +486 495 227 20 339 378 0 0 1024 +487 241 403 10 222 248 10 0 4 +488 30 72 -30 418 476 10 914 0 +489 21 487 -30 348 382 10 593 0 +490 324 99 10 305 401 10 0 209 +491 453 318 -10 354 423 10 532 0 +492 443 272 10 227 343 10 0 918 +493 447 184 -10 395 483 10 768 0 +494 366 288 -10 684 714 10 683 0 +495 440 284 25 827 907 10 0 36 +496 13 314 14 245 293 10 0 497 +497 72 227 -14 526 631 10 496 0 +498 377 385 -25 846 917 10 712 0 +499 477 478 20 397 417 10 0 67 +500 204 185 20 155 201 10 0 961 +501 226 191 -20 73 143 10 763 0 +502 330 138 -33 1108 1141 10 85 0 +503 185 434 -10 572 605 10 12 0 +504 483 22 10 325 424 10 0 965 +505 71 282 29 615 698 10 0 697 +506 60 5 -30 1032 1085 10 457 0 +507 189 402 -40 531 571 10 17 0 +508 134 211 35 122 227 10 0 80 +509 146 313 22 1175 1245 10 0 872 +510 21 146 21 470 534 10 0 438 +511 37 281 -15 476 541 10 880 0 +512 416 417 20 339 377 10 0 95 +513 44 311 -30 395 450 10 869 0 +514 361 181 20 169 256 10 0 570 +515 444 242 10 194 268 10 0 428 +516 444 271 10 239 283 10 0 777 +517 359 179 20 142 213 10 0 180 +518 388 334 20 165 182 10 0 194 +519 401 164 -20 603 669 10 588 0 +520 499 316 18 573 700 10 0 184 +521 399 106 20 298 336 10 0 205 +522 425 215 -10 183 305 10 725 0 +523 407 98 -20 218 281 10 579 0 +524 406 460 -16 697 771 10 807 0 +525 88 95 20 275 296 0 0 1011 +526 95 64 4 758 804 10 0 339 +527 306 229 10 1310 1360 10 0 317 +528 273 55 20 196 203 10 0 236 +529 384 149 18 1183 1242 0 0 1027 +530 122 35 10 250 326 10 0 310 +531 308 199 -10 1502 1544 10 59 0 +532 390 301 10 149 234 10 0 491 +533 300 108 10 150 256 10 0 22 +534 267 400 -30 233 261 10 850 0 +535 8 300 10 341 401 10 0 766 +536 105 181 -7 1513 1579 10 189 0 +537 398 325 -10 223 273 10 146 0 +538 166 247 1 84 188 10 0 799 +539 140 431 30 211 275 10 0 740 +540 253 118 19 538 586 10 0 663 +541 359 246 -10 1406 1470 10 560 0 +542 321 277 10 75 170 10 0 81 +543 168 59 6 368 394 10 0 187 +544 406 285 20 171 216 10 0 889 +545 391 334 -20 169 223 10 685 0 +546 437 19 -10 1019 1038 10 282 0 +547 201 278 13 56 102 10 0 383 +548 435 267 -20 305 371 10 603 0 +549 245 408 -20 183 254 10 311 0 +550 16 462 10 357 445 10 0 32 +551 107 374 -10 908 951 10 9 0 +552 477 97 -20 273 343 10 446 0 +553 346 57 -30 314 332 10 870 0 +554 14 459 20 330 372 10 0 858 +555 102 6 -32 1441 1505 10 79 0 +556 359 287 24 115 153 10 0 931 +557 297 131 25 1145 1215 10 0 69 +558 282 1 18 1021 1094 10 0 371 +559 21 70 -20 750 822 10 204 0 +560 440 244 10 238 325 10 0 541 +561 482 104 19 794 850 10 0 780 +562 120 261 5 777 839 10 0 979 +563 125 29 30 274 323 10 0 621 +564 292 32 -30 222 276 10 849 0 +565 262 92 -27 607 684 10 441 0 +566 68 160 -15 1125 1177 10 688 0 +567 405 276 20 241 257 10 0 669 +568 277 50 10 201 243 10 0 142 +569 32 319 21 402 430 10 0 295 +570 344 70 -20 1121 1200 10 514 0 +571 481 84 -10 465 577 10 844 0 +572 21 68 -10 364 468 10 422 0 +573 441 244 -20 274 311 10 215 0 +574 57 43 15 978 1099 10 0 935 +575 1 293 10 257 308 10 0 467 +576 481 96 -20 277 370 10 776 0 +577 471 368 -13 401 486 10 133 0 +578 236 126 23 124 135 10 0 852 +579 406 99 20 225 260 10 0 523 +580 303 186 -23 1325 1413 10 291 0 +581 225 369 38 121 164 10 0 657 +582 412 453 10 299 325 10 0 986 +583 104 349 20 984 1064 10 0 168 +584 173 182 25 102 179 10 0 995 +585 111 464 10 301 350 10 0 434 +586 53 440 -29 330 347 10 668 0 +587 69 336 20 215 252 10 0 623 +588 359 182 20 197 252 10 0 519 +589 13 459 -20 335 388 10 376 0 +590 244 277 18 1272 1360 0 0 1044 +591 484 177 -20 245 322 10 875 0 +592 452 206 -14 470 544 10 38 0 +593 22 483 30 325 341 10 0 489 +594 452 110 14 322 389 10 0 390 +595 347 192 -22 1478 1529 10 478 0 +596 95 92 20 229 306 10 0 92 +597 368 311 -19 900 982 10 114 0 +598 479 387 13 383 442 10 0 912 +599 479 169 -10 288 360 10 245 0 +600 497 266 25 743 783 10 0 775 +601 66 336 -20 203 339 10 367 0 +602 376 195 10 160 231 10 0 303 +603 401 281 20 235 317 10 0 548 +604 441 177 23 994 1038 10 0 611 +605 231 203 20 50 119 10 0 610 +606 21 488 10 342 411 10 0 62 +607 231 204 20 142 188 0 0 1050 +608 122 422 -10 1435 1509 10 309 0 +609 65 453 30 274 383 10 0 972 +610 206 261 -20 177 218 10 605 0 +611 466 149 -23 1162 1240 10 604 0 +612 313 119 30 198 264 10 0 94 +613 90 274 20 168 220 10 0 805 +614 39 162 -30 533 628 10 788 0 +615 35 306 20 225 263 10 0 307 +616 437 15 30 339 401 10 0 336 +617 307 412 8 398 440 10 0 113 +618 79 291 -10 175 286 10 923 0 +619 64 437 -6 903 963 10 913 0 +620 376 92 -27 957 1055 10 470 0 +621 129 27 -30 302 323 10 563 0 +622 196 489 -25 994 1097 10 357 0 +623 51 286 -20 1455 1493 10 587 0 +624 20 488 10 368 407 10 0 279 +625 13 455 -30 313 371 10 975 0 +626 170 347 15 418 483 10 0 734 +627 92 230 -10 191 216 10 355 0 +628 117 467 10 254 302 10 0 229 +629 413 217 20 166 244 10 0 233 +630 405 450 20 253 301 10 0 104 +631 394 322 12 995 1084 10 0 224 +632 125 61 26 612 641 10 0 372 +633 238 123 24 758 835 0 0 1018 +634 11 403 18 331 385 10 0 641 +635 89 272 -10 200 213 10 14 0 +636 304 102 30 173 251 10 0 721 +637 478 121 40 295 373 10 0 219 +638 408 84 10 254 345 10 0 131 +639 376 494 30 274 353 10 0 480 +640 20 73 10 290 342 10 0 943 +641 159 299 -18 993 1069 10 634 0 +642 95 382 -26 224 268 10 791 0 +643 352 63 6 1163 1224 0 0 1031 +644 365 274 14 117 244 10 0 928 +645 30 301 10 270 316 10 0 19 +646 351 5 -20 493 529 10 57 0 +647 197 267 10 99 148 10 0 161 +648 498 171 -30 1231 1311 10 351 0 +649 468 352 -13 755 812 10 227 0 +650 418 251 -20 1183 1241 10 874 0 +651 489 437 29 699 744 10 0 250 +652 251 63 -20 974 1030 10 699 0 +653 132 55 -20 248 317 10 314 0 +654 281 96 1 1107 1174 0 0 1007 +655 333 293 -14 597 667 10 24 0 +656 255 487 19 401 425 0 0 1029 +657 207 400 -38 186 226 10 581 0 +658 469 489 -10 542 599 10 671 0 +659 244 254 -20 88 143 10 101 0 +660 233 207 10 46 112 10 0 698 +661 441 60 21 1465 1482 0 0 1021 +662 411 379 25 1161 1255 10 0 83 +663 178 72 -19 737 806 10 540 0 +664 51 447 -30 286 333 10 987 0 +665 478 118 20 329 410 10 0 444 +666 141 426 23 513 580 0 0 1016 +667 295 89 -10 710 804 10 169 0 +668 112 433 29 229 304 10 0 586 +669 320 211 -20 985 1031 10 567 0 +670 400 103 10 234 307 0 0 1026 +671 408 453 10 268 329 10 0 658 +672 435 180 37 229 250 10 0 247 +673 432 66 -30 1076 1096 10 824 0 +674 374 116 -20 581 624 10 682 0 +675 478 102 -10 298 380 10 813 0 +676 335 57 30 210 253 10 0 732 +677 385 239 21 769 833 10 0 956 +678 386 245 16 465 523 0 0 1045 +679 208 396 20 171 211 0 0 1048 +680 380 489 -36 386 402 10 49 0 +681 380 498 10 280 357 10 0 404 +682 440 7 20 308 371 10 0 674 +683 434 245 10 341 372 10 0 494 +684 90 232 -10 198 256 10 900 0 +685 389 334 20 162 221 10 0 545 +686 241 205 -10 92 173 10 760 0 +687 18 24 -10 598 688 10 916 0 +688 57 183 15 1095 1135 10 0 566 +689 59 457 30 343 356 0 0 1006 +690 442 243 -10 284 324 10 713 0 +691 402 281 20 225 305 10 0 693 +692 445 237 -20 199 232 10 401 0 +693 441 273 -20 281 313 10 691 0 +694 31 175 -30 243 281 10 786 0 +695 234 202 10 66 123 10 0 302 +696 52 303 -10 429 483 10 421 0 +697 167 445 -29 1399 1455 10 505 0 +698 179 286 -10 316 396 10 660 0 +699 269 48 20 283 309 10 0 652 +700 165 59 27 919 997 10 0 413 +701 461 8 20 368 401 10 0 829 +702 421 415 30 237 315 10 0 848 +703 59 459 20 298 355 10 0 185 +704 24 492 10 447 507 10 0 747 +705 55 449 20 278 329 10 0 924 +706 224 192 10 63 130 10 0 186 +707 444 269 -20 197 300 10 375 0 +708 491 20 20 398 419 10 0 985 +709 313 126 10 219 298 10 0 51 +710 283 438 3 208 284 10 0 439 +711 352 241 -30 776 839 10 216 0 +712 398 476 25 390 476 10 0 498 +713 442 247 10 223 289 10 0 690 +714 217 207 -23 1342 1453 10 173 0 +715 233 87 18 246 289 10 0 190 +716 479 127 20 259 367 10 0 345 +717 6 53 -2 575 629 10 174 0 +718 478 300 -28 897 912 10 482 0 +719 378 493 -10 274 331 10 297 0 +720 303 78 12 179 260 10 0 1000 +721 344 62 -30 303 419 10 636 0 +722 371 315 -20 1164 1198 10 63 0 +723 200 78 31 972 1044 0 0 1037 +724 413 391 8 226 239 10 0 821 +725 415 216 10 168 235 10 0 522 +726 397 57 -10 1472 1510 10 239 0 +727 293 228 19 48 144 10 0 403 +728 0 297 -30 267 349 10 243 0 +729 435 20 20 385 407 10 0 322 +730 195 111 -26 997 1030 10 30 0 +731 417 218 10 284 303 10 0 891 +732 340 54 -30 227 279 10 676 0 +733 132 57 20 226 309 10 0 212 +734 210 379 -15 714 733 10 626 0 +735 228 260 -20 1580 1662 10 272 0 +736 399 104 10 279 331 10 0 192 +737 95 277 -10 268 311 10 134 0 +738 360 284 19 657 707 10 0 877 +739 53 466 -23 312 388 10 835 0 +740 112 465 -30 303 325 10 539 0 +741 313 391 -34 154 239 10 271 0 +742 93 235 -20 221 302 10 116 0 +743 125 32 30 251 345 10 0 410 +744 215 282 -8 1405 1506 10 407 0 +745 224 320 36 1266 1331 10 0 296 +746 134 428 -30 305 342 10 839 0 +747 26 490 -10 481 499 10 704 0 +748 44 115 24 246 300 10 0 881 +749 438 127 2 932 980 10 0 820 +750 239 15 -10 567 670 10 118 0 +751 342 54 20 240 289 10 0 274 +752 109 463 -10 308 389 10 917 0 +753 199 187 -20 92 192 10 248 0 +754 201 188 10 136 172 10 0 156 +755 399 301 -10 158 260 10 894 0 +756 484 171 10 281 335 10 0 226 +757 272 234 -20 1587 1624 10 396 0 +758 380 350 -40 847 916 10 262 0 +759 140 108 -28 1049 1123 10 425 0 +760 228 199 10 103 196 10 0 686 +761 245 461 8 623 705 0 0 1020 +762 305 107 -20 214 266 10 933 0 +763 231 195 20 82 166 10 0 501 +764 450 265 10 200 267 10 0 338 +765 273 149 -30 1485 1551 10 93 0 +766 12 358 -10 1208 1271 10 535 0 +767 315 121 10 195 242 10 0 21 +768 420 213 10 173 279 10 0 493 +769 331 134 -30 1130 1148 10 360 0 +770 84 377 -20 915 968 10 359 0 +771 320 280 10 89 110 10 0 74 +772 89 185 -11 552 678 10 825 0 +773 472 481 20 320 371 10 0 949 +774 422 420 20 254 302 10 0 468 +775 475 267 -25 742 848 10 600 0 +776 470 125 20 253 306 10 0 576 +777 435 268 -10 309 345 10 516 0 +778 409 155 19 185 207 10 0 249 +779 243 248 30 7 72 10 0 427 +780 488 96 -19 1063 1099 10 561 0 +781 341 72 9 804 836 10 0 926 +782 58 449 30 356 399 10 0 946 +783 16 460 -17 393 459 10 147 0 +784 480 136 22 256 290 10 0 150 +785 162 388 11 1092 1191 0 0 1013 +786 47 208 30 213 270 10 0 694 +787 324 127 30 143 225 10 0 841 +788 87 96 30 284 310 10 0 614 +789 140 137 32 548 621 10 0 450 +790 314 205 -12 1504 1580 10 391 0 +791 96 346 26 181 271 10 0 642 +792 321 280 30 77 120 10 0 951 +793 245 251 10 5 81 10 0 52 +794 436 295 11 519 568 10 0 934 +795 274 261 -12 1696 1747 10 384 0 +796 271 128 12 326 395 10 0 836 +797 275 45 20 206 306 10 0 429 +798 422 409 10 234 258 10 0 892 +799 146 188 -1 1222 1278 10 538 0 +800 93 96 20 232 248 10 0 137 +801 409 255 -20 1525 1549 10 89 0 +802 449 428 25 1227 1297 10 0 831 +803 90 285 -20 221 362 10 77 0 +804 415 95 -16 1158 1225 10 978 0 +805 88 287 -20 261 295 10 613 0 +806 379 196 20 177 241 10 0 471 +807 368 452 16 672 697 10 0 524 +808 202 186 20 155 178 10 0 270 +809 435 11 -20 302 374 10 856 0 +810 269 46 20 237 330 10 0 997 +811 7 292 10 246 275 10 0 97 +812 44 496 32 369 464 10 0 348 +813 478 99 10 286 367 10 0 675 +814 391 99 20 206 281 10 0 903 +815 132 477 25 292 392 10 0 182 +816 24 65 10 350 411 10 0 266 +817 130 247 17 120 163 10 0 286 +818 133 273 20 119 135 10 0 308 +819 347 62 -10 321 375 10 287 0 +820 404 140 -2 1249 1298 10 749 0 +821 416 420 -8 274 335 10 724 0 +822 67 335 -5 223 291 10 922 0 +823 92 270 -10 236 308 10 930 0 +824 411 95 30 223 295 10 0 673 +825 132 479 11 257 277 10 0 772 +826 366 334 -20 408 443 10 37 0 +827 125 39 20 245 267 10 0 125 +828 419 422 20 259 324 10 0 55 +829 460 2 -20 328 407 10 701 0 +830 67 334 -20 226 265 10 334 0 +831 448 414 -25 1208 1268 10 802 0 +832 46 163 -23 909 973 10 50 0 +833 77 465 11 275 364 10 0 46 +834 284 319 -26 806 858 10 251 0 +835 102 422 23 230 253 10 0 739 +836 240 34 -12 1557 1592 10 796 0 +837 141 428 20 208 246 10 0 466 +838 204 269 -10 49 110 10 126 0 +839 144 439 30 270 303 10 0 746 +840 470 417 11 739 764 0 0 1004 +841 404 103 -30 239 274 10 787 0 +842 5 281 -20 1365 1409 10 381 0 +843 487 320 -25 818 927 10 301 0 +844 398 23 10 270 362 10 0 571 +845 90 296 20 166 231 10 0 907 +846 386 13 -10 315 388 10 175 0 +847 115 465 10 260 294 10 0 246 +848 473 475 -30 390 475 10 702 0 +849 275 42 30 225 280 10 0 564 +850 286 356 30 111 210 10 0 534 +851 15 69 10 296 358 10 0 418 +852 267 44 -23 265 276 10 578 0 +853 243 399 -30 218 282 10 855 0 +854 390 249 -20 549 645 10 341 0 +855 210 391 30 146 246 10 0 853 +856 433 15 20 297 394 10 0 809 +857 24 259 -12 368 403 10 902 0 +858 12 463 -20 341 410 10 554 0 +859 237 213 -10 130 194 10 871 0 +860 182 480 31 357 403 10 0 324 +861 409 88 20 271 299 10 0 196 +862 244 368 25 381 478 10 0 475 +863 381 328 12 699 766 10 0 284 +864 213 185 -10 74 194 10 293 0 +865 482 141 -30 987 1065 10 361 0 +866 319 124 20 155 230 10 0 264 +867 141 431 30 211 276 10 0 419 +868 198 264 20 118 193 10 0 178 +869 69 334 30 199 257 10 0 513 +870 299 98 30 159 214 10 0 553 +871 240 250 10 21 83 10 0 859 +872 199 203 -22 1440 1504 10 509 0 +873 459 17 -10 390 463 10 321 0 +874 423 217 20 227 287 10 0 650 +875 477 179 20 237 320 10 0 591 +876 213 397 10 215 250 10 0 458 +877 405 187 -19 1238 1293 10 738 0 +878 269 402 -30 188 248 10 436 0 +879 53 204 -16 1023 1117 10 47 0 +880 13 394 15 338 438 10 0 511 +881 15 68 -24 297 347 10 748 0 +882 56 268 28 1049 1108 10 0 369 +883 360 184 10 207 265 10 0 48 +884 307 102 40 173 277 10 0 325 +885 130 57 -20 227 290 10 346 0 +886 250 328 24 230 298 10 0 214 +887 91 231 30 173 257 10 0 919 +888 479 176 20 240 285 10 0 170 +889 420 224 -20 414 473 10 544 0 +890 461 182 13 595 693 10 0 191 +891 418 218 -10 250 314 10 731 0 +892 419 418 -10 238 357 10 798 0 +893 336 493 -20 1488 1528 10 440 0 +894 389 300 10 147 230 10 0 755 +895 92 76 4 1133 1175 0 0 1042 +896 476 102 20 346 357 10 0 963 +897 418 399 20 436 469 10 0 430 +898 109 56 -20 239 283 10 947 0 +899 13 465 31 736 841 0 0 1002 +900 92 232 10 159 246 10 0 684 +901 394 47 5 285 371 10 0 223 +902 16 287 12 236 341 10 0 857 +903 399 102 -20 243 321 10 814 0 +904 143 158 12 141 201 10 0 254 +905 18 484 10 329 391 10 0 119 +906 250 411 30 164 242 10 0 10 +907 19 273 -20 974 1090 10 845 0 +908 365 28 -20 250 338 10 941 0 +909 387 297 10 144 177 10 0 181 +910 433 447 -22 739 880 10 277 0 +911 214 274 24 1356 1413 10 0 957 +912 489 338 -13 1381 1443 10 598 0 +913 130 494 6 757 791 10 0 619 +914 23 67 30 352 457 10 0 488 +915 374 489 20 269 334 10 0 289 +916 126 30 10 265 309 10 0 687 +917 112 467 10 263 319 10 0 752 +918 489 274 -10 529 569 10 492 0 +919 61 214 -30 321 393 10 887 0 +920 166 440 12 207 262 10 0 442 +921 56 75 -15 1414 1491 10 964 0 +922 210 276 5 47 75 10 0 822 +923 80 286 10 197 281 10 0 618 +924 17 459 -20 404 471 10 705 0 +925 66 448 10 270 287 10 0 157 +926 351 128 -9 1245 1291 10 781 0 +927 352 176 20 126 182 10 0 129 +928 490 286 -14 500 575 10 644 0 +929 247 219 17 31 54 10 0 344 +930 86 268 10 213 251 10 0 823 +931 398 329 -24 167 186 10 556 0 +932 272 402 10 153 207 10 0 463 +933 317 123 20 195 216 10 0 762 +934 408 318 -11 623 694 10 794 0 +935 66 31 -15 1021 1106 10 574 0 +936 425 448 -10 759 859 10 443 0 +937 35 304 30 226 239 10 0 130 +938 471 94 -10 969 1059 10 35 0 +939 470 473 10 406 486 10 0 58 +940 224 56 13 1150 1253 10 0 385 +941 343 47 20 240 344 10 0 908 +942 52 18 28 833 910 10 0 394 +943 16 68 -10 296 391 10 640 0 +944 195 185 20 99 156 10 0 479 +945 92 236 20 222 323 10 0 153 +946 76 462 -30 958 984 10 782 0 +947 124 56 20 231 279 10 0 898 +948 481 454 14 308 365 10 0 432 +949 477 483 -20 343 418 10 773 0 +950 481 124 -20 290 306 10 273 0 +951 389 156 -30 707 755 10 792 0 +952 384 16 20 332 399 10 0 982 +953 492 34 -20 780 872 10 195 0 +954 371 200 10 210 268 10 0 400 +955 153 235 10 98 135 10 0 988 +956 428 202 -21 893 945 10 677 0 +957 257 391 -24 1603 1670 10 911 0 +958 421 218 -10 244 295 10 300 0 +959 206 186 10 163 242 10 0 158 +960 393 301 -20 177 210 10 481 0 +961 204 187 -20 162 219 10 500 0 +962 468 475 10 313 401 10 0 392 +963 477 122 -20 286 405 10 896 0 +964 100 66 15 1380 1449 10 0 921 +965 489 27 -10 410 462 10 504 0 +966 12 451 20 311 329 10 0 358 +967 197 270 -20 56 171 10 349 0 +968 311 422 -13 977 1029 10 237 0 +969 489 17 10 359 431 10 0 331 +970 13 214 -9 1317 1421 10 313 0 +971 440 247 20 220 317 10 0 447 +972 28 467 -30 1306 1409 10 609 0 +973 388 325 -20 252 304 10 416 0 +974 270 401 20 152 257 10 0 148 +975 5 445 30 313 371 10 0 625 +976 198 271 20 56 170 10 0 484 +977 480 131 5 676 729 10 0 399 +978 437 98 16 1110 1147 10 0 804 +979 131 246 -5 821 874 10 562 0 +980 49 437 7 436 449 10 0 120 +981 270 49 -10 292 323 10 235 0 +982 337 41 -20 971 1063 10 952 0 +983 318 280 20 82 142 10 0 285 +984 154 392 -18 171 246 10 144 0 +985 493 111 -20 527 585 10 708 0 +986 399 450 -10 306 442 10 582 0 +987 67 452 30 272 328 10 0 664 +988 34 239 -10 216 295 10 955 0 +989 343 276 15 96 166 10 0 299 +990 393 12 10 286 363 10 0 172 +991 236 247 20 41 93 10 0 374 +992 340 291 -30 477 493 10 389 0 +993 3 292 20 256 286 10 0 100 +994 209 68 -18 1562 1605 10 333 0 +995 18 225 -25 680 733 10 584 0 +996 147 435 20 211 313 10 0 328 +997 335 99 -20 1202 1264 10 810 0 +998 485 24 -5 326 417 10 16 0 +999 470 475 30 314 417 10 0 213 +1000 341 58 -12 223 254 10 720 0 +1001 16 497 -20 382 500 10 397 0 +1002 13 465 -31 736 841 10 899 0 +1003 38 15 -3 1048 1165 10 99 0 +1004 470 417 -11 739 764 10 840 0 +1005 17 458 -10 409 488 10 461 0 +1006 59 457 -30 343 356 10 689 0 +1007 281 96 -1 1107 1174 10 654 0 +1008 96 97 -20 217 269 10 342 0 +1009 459 53 -20 1099 1175 10 121 0 +1010 21 64 -20 331 403 10 343 0 +1011 88 95 -20 275 296 10 525 0 +1012 0 188 -26 904 990 10 127 0 +1013 162 388 -11 1092 1191 10 785 0 +1014 474 96 -30 271 324 10 117 0 +1015 381 494 -10 310 386 10 164 0 +1016 141 426 -23 513 580 10 666 0 +1017 90 477 -18 277 374 10 276 0 +1018 238 123 -24 758 835 10 633 0 +1019 277 403 -10 155 256 10 82 0 +1020 245 461 -8 623 705 10 761 0 +1021 441 60 -21 1465 1482 10 661 0 +1022 411 421 -20 289 370 10 211 0 +1023 351 481 -10 303 370 10 353 0 +1024 495 227 -20 339 378 10 486 0 +1025 370 262 -15 1090 1138 10 222 0 +1026 400 103 -10 234 307 10 670 0 +1027 384 149 -18 1183 1242 10 529 0 +1028 148 208 -22 487 596 10 199 0 +1029 255 487 -19 401 425 10 656 0 +1030 210 185 -20 76 159 10 124 0 +1031 352 63 -6 1163 1224 10 643 0 +1032 307 52 -23 891 980 10 42 0 +1033 270 400 -10 151 199 10 354 0 +1034 390 120 -24 1014 1025 10 33 0 +1035 257 57 -18 1213 1269 10 435 0 +1036 142 360 -20 1519 1574 10 387 0 +1037 200 78 -31 972 1044 10 723 0 +1038 421 386 -29 818 861 10 70 0 +1039 417 217 -30 186 222 10 298 0 +1040 209 212 -18 1512 1574 10 420 0 +1041 92 233 -10 179 298 10 18 0 +1042 92 76 -4 1133 1175 10 895 0 +1043 328 491 -21 659 728 10 378 0 +1044 244 277 -18 1272 1360 10 590 0 +1045 386 245 -16 465 523 10 678 0 +1046 97 288 -22 1262 1337 10 86 0 +1047 408 279 -20 185 284 10 329 0 +1048 208 396 -20 171 211 10 679 0 +1049 218 403 -15 1300 1369 10 257 0 +1050 231 204 -20 142 188 10 607 0 +1051 246 314 -36 1451 1470 10 368 0 +1052 307 249 -10 1379 1405 10 269 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1106.txt b/jsprit-instances/instances/lilim/1000/LRC1106.txt new file mode 100644 index 00000000..736ba3ef --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1106.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 18 877 937 0 0 1046 +2 214 394 10 216 276 10 0 440 +3 476 483 10 340 400 10 0 200 +4 352 487 27 887 947 0 0 1019 +5 230 197 40 107 167 10 0 633 +6 175 239 23 75 135 10 0 64 +7 133 202 33 446 506 10 0 772 +8 328 458 -3 753 813 10 710 0 +9 25 499 -10 430 490 10 747 0 +10 226 423 -20 182 242 10 679 0 +11 313 282 -30 148 208 10 389 0 +12 60 454 10 332 392 10 0 128 +13 239 486 -12 1467 1527 10 324 0 +14 102 264 10 148 208 10 0 823 +15 408 452 -20 257 317 10 253 0 +16 451 62 5 275 335 10 0 576 +17 203 390 -21 147 207 10 451 0 +18 92 233 -30 209 269 10 887 0 +19 7 300 -16 330 390 10 988 0 +20 409 90 20 243 303 10 0 502 +21 307 108 10 222 282 10 0 667 +22 347 54 -20 280 340 10 866 0 +23 406 87 -10 298 358 10 171 0 +24 371 332 14 515 575 10 0 67 +25 116 466 -11 254 314 10 825 0 +26 441 265 40 191 251 10 0 707 +27 130 140 17 179 239 10 0 488 +28 80 117 24 809 869 10 0 145 +29 421 387 -20 786 846 10 341 0 +30 83 300 -20 485 545 10 845 0 +31 136 52 -10 278 338 10 653 0 +32 18 462 -20 383 443 10 376 0 +33 390 120 -10 989 1049 10 239 0 +34 188 119 -25 960 1020 10 388 0 +35 467 114 -19 361 421 10 778 0 +36 440 292 -25 925 985 10 495 0 +37 268 400 -20 228 288 10 878 0 +38 391 202 14 148 208 10 0 604 +39 377 432 -30 816 876 10 850 0 +40 80 290 10 182 242 10 0 728 +41 439 15 20 328 388 10 0 982 +42 307 52 -20 905 965 10 528 0 +43 111 192 -23 1184 1244 10 50 0 +44 131 56 10 241 301 0 0 1045 +45 88 286 -30 237 297 10 414 0 +46 69 414 -10 1248 1308 10 461 0 +47 41 232 16 209 269 10 0 857 +48 323 77 -18 1390 1450 10 403 0 +49 340 416 -10 306 366 10 82 0 +50 86 199 23 263 323 10 0 43 +51 314 124 20 216 276 10 0 236 +52 375 191 30 152 212 10 0 883 +53 226 175 -21 1673 1733 10 270 0 +54 242 106 28 1253 1313 10 0 115 +55 417 417 -20 317 377 10 512 0 +56 419 459 20 301 361 10 0 807 +57 389 11 20 308 368 10 0 198 +58 450 416 -15 562 622 10 194 0 +59 246 255 -20 98 158 10 659 0 +60 71 333 10 197 257 10 0 601 +61 105 474 27 456 516 0 0 1011 +62 20 489 10 368 428 10 0 295 +63 388 331 20 160 220 10 0 201 +64 92 259 -23 384 444 10 6 0 +65 200 261 10 151 211 10 0 347 +66 400 288 30 154 214 0 0 1004 +67 299 285 -14 1239 1299 10 24 0 +68 378 199 -10 192 252 10 954 0 +69 325 147 -20 1172 1232 10 861 0 +70 421 386 -30 809 869 10 755 0 +71 404 447 20 250 310 10 0 409 +72 412 478 -7 945 1005 10 290 0 +73 26 67 -10 1302 1362 10 881 0 +74 358 183 -30 219 279 10 360 0 +75 30 302 10 252 312 10 0 569 +76 176 470 -9 532 592 10 984 0 +77 96 270 -26 155 215 10 244 0 +78 243 408 -20 1419 1479 10 362 0 +79 60 29 -27 1348 1408 10 898 0 +80 34 169 11 469 529 10 0 614 +81 407 280 10 194 254 10 0 548 +82 277 403 10 160 220 10 0 49 +83 498 456 -23 1391 1451 10 831 0 +84 384 491 20 333 393 10 0 480 +85 355 174 33 700 760 10 0 400 +86 97 288 -20 1269 1329 10 469 0 +87 316 284 -10 110 170 10 771 0 +88 334 403 26 174 234 10 0 459 +89 415 223 -20 290 350 10 806 0 +90 230 320 8 1177 1237 10 0 745 +91 432 199 -10 624 684 10 522 0 +92 92 18 -21 1109 1169 10 864 0 +93 273 300 30 55 115 10 0 237 +94 269 112 -30 1248 1308 10 636 0 +95 429 389 -40 409 469 10 262 0 +96 371 71 -20 272 332 10 751 0 +97 5 297 10 316 376 10 0 882 +98 414 378 -10 480 540 10 473 0 +99 38 15 3 1076 1136 10 0 410 +100 2 295 -10 291 351 10 811 0 +101 237 254 20 68 128 10 0 610 +102 54 445 10 293 353 10 0 119 +103 382 110 24 1097 1157 10 0 926 +104 438 488 18 312 372 10 0 524 +105 395 331 20 202 262 10 0 537 +106 230 487 -5 1115 1175 10 442 0 +107 249 407 10 159 219 10 0 217 +108 488 26 -10 418 478 10 167 0 +109 151 81 -10 1543 1603 10 530 0 +110 483 14 10 348 408 10 0 708 +111 0 422 -10 806 866 10 489 0 +112 429 67 -20 717 777 10 998 0 +113 195 464 -1 1526 1586 10 182 0 +114 356 256 19 106 166 10 0 958 +115 264 180 -28 1666 1726 10 54 0 +116 94 235 20 156 216 10 0 177 +117 474 96 30 271 331 10 0 594 +118 268 52 -20 291 351 10 810 0 +119 44 440 -10 774 834 10 102 0 +120 7 382 -18 755 815 10 634 0 +121 459 53 -20 1107 1167 10 579 0 +122 491 25 -20 394 454 10 183 0 +123 439 243 20 299 359 10 0 683 +124 210 185 20 76 136 10 0 714 +125 150 68 23 408 468 10 0 663 +126 201 270 10 52 112 10 0 484 +127 0 188 26 917 977 10 0 970 +128 103 464 -10 1258 1318 10 12 0 +129 325 56 13 781 841 10 0 652 +130 44 344 -10 1064 1124 10 307 0 +131 418 75 11 433 493 10 0 196 +132 472 57 -20 1280 1340 10 267 0 +133 460 328 13 224 284 10 0 491 +134 89 270 -20 189 249 10 613 0 +135 374 190 20 137 197 10 0 790 +136 463 253 -10 1032 1092 10 889 0 +137 97 93 20 225 285 10 0 525 +138 163 472 -25 638 698 10 815 0 +139 29 336 22 317 377 10 0 696 +140 84 453 -18 1208 1268 10 946 0 +141 294 421 26 1560 1620 0 0 1020 +142 343 62 -10 342 402 10 721 0 +143 371 193 20 133 193 10 0 602 +144 142 372 18 162 222 10 0 835 +145 66 88 -24 815 875 10 28 0 +146 395 332 10 191 251 10 0 284 +147 93 413 17 226 286 10 0 292 +148 267 394 10 244 304 0 0 1007 +149 249 258 30 112 172 10 0 583 +150 472 129 10 252 312 10 0 820 +151 87 3 -20 1418 1478 10 343 0 +152 62 326 -20 271 331 10 587 0 +153 212 186 -10 1677 1737 10 306 0 +154 241 402 -29 1010 1070 10 968 0 +155 439 266 -20 189 249 10 375 0 +156 79 80 -20 1367 1427 10 947 0 +157 62 453 -10 280 340 10 925 0 +158 188 151 -20 1282 1342 10 346 0 +159 386 154 31 1086 1146 10 0 529 +160 38 301 20 281 341 10 0 163 +161 192 265 10 109 169 10 0 635 +162 371 192 30 134 194 0 0 1033 +163 64 294 -20 1086 1146 10 160 0 +164 381 494 -30 318 378 10 639 0 +165 437 12 20 315 375 10 0 682 +166 186 135 -20 703 763 10 206 0 +167 459 10 10 320 380 10 0 108 +168 175 422 -6 1431 1491 10 913 0 +169 274 48 10 203 263 10 0 564 +170 488 173 20 264 324 10 0 599 +171 398 97 10 212 272 10 0 23 +172 385 17 -9 794 854 10 908 0 +173 180 283 23 729 789 10 0 911 +174 71 12 2 297 357 10 0 266 +175 343 49 10 250 310 10 0 620 +176 248 251 20 2 62 10 0 255 +177 7 194 -20 936 996 10 116 0 +178 322 290 -22 1464 1524 10 992 0 +179 410 399 25 219 279 10 0 651 +180 398 103 30 263 323 10 0 521 +181 385 285 13 853 913 10 0 722 +182 179 497 1 1396 1456 10 0 113 +183 464 13 20 370 430 10 0 122 +184 492 335 10 813 873 10 0 843 +185 27 464 -30 1276 1336 10 975 0 +186 231 29 14 1211 1271 0 0 1015 +187 157 38 -20 1033 1093 10 827 0 +188 439 268 10 283 343 10 0 777 +189 149 214 7 467 527 0 0 1022 +190 187 73 -20 277 337 10 501 0 +191 429 169 -2 888 948 10 249 0 +192 350 199 -21 1186 1246 10 247 0 +193 60 231 -25 1011 1071 10 497 0 +194 448 404 15 584 644 10 0 58 +195 481 20 -10 332 392 10 321 0 +196 436 25 -11 1267 1327 10 131 0 +197 111 459 -11 344 404 10 833 0 +198 389 17 -20 351 411 10 57 0 +199 148 208 -20 511 571 10 944 0 +200 475 477 -10 390 450 10 3 0 +201 390 325 -20 236 296 10 63 0 +202 346 354 8 802 862 10 0 296 +203 91 266 -20 218 278 10 304 0 +204 17 65 20 312 372 10 0 422 +205 391 112 -10 985 1045 10 455 0 +206 224 203 20 53 113 10 0 166 +207 426 231 24 1013 1073 10 0 650 +208 260 472 -30 1021 1081 10 867 0 +209 265 0 10 881 941 10 0 385 +210 391 293 20 211 271 10 0 649 +211 411 421 20 300 360 10 0 431 +212 132 30 20 311 371 10 0 415 +213 475 480 -31 364 424 10 468 0 +214 286 244 31 1269 1329 0 0 1038 +215 436 237 20 186 246 10 0 430 +216 402 284 -20 155 215 10 481 0 +217 287 397 -10 549 609 10 107 0 +218 272 420 -10 1371 1431 10 353 0 +219 477 120 10 327 387 10 0 749 +220 145 434 20 218 278 10 0 419 +221 33 286 -12 1531 1591 10 902 0 +222 370 262 -20 1084 1144 10 693 0 +223 393 20 -10 376 436 10 282 0 +224 330 308 24 1155 1215 0 0 1042 +225 246 398 40 148 208 10 0 240 +226 482 184 -10 1092 1152 10 245 0 +227 451 305 -25 208 268 10 301 0 +228 226 316 21 70 130 10 0 507 +229 110 459 30 333 393 10 0 761 +230 244 250 10 6 66 10 0 374 +231 458 16 20 313 373 10 0 322 +232 390 34 -20 1045 1105 10 274 0 +233 423 214 -33 202 262 10 363 0 +234 219 215 32 46 106 10 0 753 +235 326 118 10 152 212 10 0 377 +236 365 74 -20 833 893 10 51 0 +237 331 356 -30 697 757 10 93 0 +238 210 398 10 189 249 10 0 448 +239 403 93 10 326 386 10 0 33 +240 248 404 -40 154 214 10 225 0 +241 65 62 15 961 1021 10 0 935 +242 460 13 -20 316 376 10 456 0 +243 0 293 -10 264 324 10 575 0 +244 211 248 26 39 99 10 0 77 +245 484 174 10 250 310 10 0 226 +246 175 352 -3 1625 1685 10 608 0 +247 455 168 21 852 912 10 0 192 +248 224 191 20 66 126 10 0 961 +249 439 156 2 511 571 10 0 191 +250 434 359 -11 1377 1437 10 840 0 +251 118 314 -20 323 383 10 818 0 +252 234 246 10 50 110 10 0 930 +253 406 450 20 253 313 10 0 15 +254 75 118 21 394 454 10 0 895 +255 115 395 -20 800 860 10 176 0 +256 329 456 -34 234 294 10 271 0 +257 218 403 -20 1304 1364 10 466 0 +258 149 341 -20 389 449 10 381 0 +259 253 74 -18 1335 1395 10 435 0 +260 436 241 -10 312 372 10 303 0 +261 238 203 10 79 139 10 0 453 +262 405 455 40 326 386 10 0 95 +263 485 27 -3 431 491 10 454 0 +264 323 118 20 150 210 0 0 1024 +265 330 371 -5 544 604 10 826 0 +266 25 65 -2 361 421 10 174 0 +267 406 96 20 219 279 10 0 132 +268 49 451 -20 284 344 10 705 0 +269 307 249 10 1362 1422 0 0 1017 +270 178 135 21 1499 1559 10 0 53 +271 299 353 34 114 174 10 0 256 +272 236 213 20 39 99 10 0 607 +273 355 177 20 127 187 0 0 1028 +274 394 23 20 389 449 10 0 232 +275 306 235 25 57 117 10 0 390 +276 90 477 -10 277 337 10 847 0 +277 379 486 -10 657 717 10 582 0 +278 435 16 -20 352 412 10 364 0 +279 8 497 -20 393 453 10 397 0 +280 150 484 16 610 670 10 0 622 +281 213 399 18 219 279 10 0 734 +282 391 18 10 363 423 10 0 223 +283 111 392 -10 1154 1214 10 586 0 +284 330 281 -10 1315 1375 10 146 0 +285 344 203 14 152 212 10 0 854 +286 91 235 -10 254 314 10 408 0 +287 346 60 -20 306 366 10 474 0 +288 483 27 20 443 503 0 0 1036 +289 382 498 -10 294 354 10 681 0 +290 457 492 7 493 553 10 0 72 +291 291 213 -9 1243 1303 10 471 0 +292 154 374 -17 922 982 10 147 0 +293 225 196 -10 59 119 10 660 0 +294 94 40 24 1053 1113 10 0 339 +295 0 356 -10 1071 1131 10 62 0 +296 297 283 -8 1334 1394 10 202 0 +297 371 423 10 211 271 10 0 897 +298 417 217 30 174 234 10 0 592 +299 500 228 8 767 827 10 0 447 +300 412 214 10 165 225 10 0 629 +301 442 289 25 195 255 10 0 227 +302 157 269 -10 1561 1621 10 424 0 +303 440 241 10 286 346 10 0 260 +304 100 266 20 150 210 10 0 203 +305 111 178 18 156 216 10 0 748 +306 91 101 10 283 343 10 0 153 +307 25 307 10 234 294 10 0 130 +308 135 400 -8 284 344 10 383 0 +309 58 458 10 308 368 0 0 1030 +310 133 26 10 297 357 0 0 1037 +311 211 386 20 141 201 10 0 834 +312 94 97 -20 218 278 10 342 0 +313 30 155 -8 1265 1325 10 879 0 +314 208 184 20 78 138 10 0 872 +315 394 333 20 179 239 0 0 1026 +316 355 180 30 126 186 10 0 769 +317 241 180 -19 1680 1740 10 540 0 +318 21 485 -10 328 388 10 905 0 +319 80 251 14 289 349 10 0 566 +320 476 61 -20 434 494 10 446 0 +321 406 94 10 220 280 10 0 195 +322 364 71 -20 1333 1393 10 231 0 +323 418 221 10 276 336 0 0 1006 +324 274 441 12 680 740 10 0 13 +325 304 97 -10 167 227 10 533 0 +326 297 102 10 155 215 10 0 762 +327 250 405 20 155 215 10 0 906 +328 111 463 -10 307 367 10 740 0 +329 408 279 -15 205 265 10 989 0 +330 263 418 -10 263 323 10 853 0 +331 480 119 -22 613 673 10 784 0 +332 420 383 -10 967 1027 10 932 0 +333 142 14 -30 820 880 10 563 0 +334 73 328 20 193 253 10 0 830 +335 50 438 20 322 382 10 0 366 +336 441 7 20 377 437 10 0 371 +337 462 14 20 382 442 10 0 546 +338 360 294 -10 1403 1463 10 692 0 +339 58 39 -24 1148 1208 10 294 0 +340 58 391 16 867 927 0 0 1018 +341 410 285 20 178 238 10 0 29 +342 96 97 20 217 277 10 0 312 +343 21 64 20 337 397 10 0 151 +344 238 210 -30 119 179 10 686 0 +345 479 121 -10 293 353 10 950 0 +346 200 178 20 87 147 10 0 158 +347 216 341 -10 639 699 10 65 0 +348 48 437 4 789 849 10 0 619 +349 200 270 20 53 113 10 0 976 +350 357 181 -9 134 194 10 477 0 +351 476 174 -20 309 369 10 875 0 +352 400 286 10 154 214 10 0 918 +353 351 481 10 307 367 10 0 218 +354 270 400 10 151 211 10 0 974 +355 95 234 10 155 215 10 0 684 +356 128 113 -30 348 408 10 788 0 +357 133 455 25 793 853 0 0 1043 +358 16 463 -20 360 420 10 554 0 +359 59 388 -7 648 708 10 980 0 +360 376 190 30 140 200 10 0 74 +361 481 122 -20 280 340 10 716 0 +362 266 405 20 202 262 10 0 78 +363 374 232 33 125 185 10 0 233 +364 398 20 20 273 333 10 0 278 +365 481 26 30 321 381 10 0 504 +366 63 444 -20 365 425 10 335 0 +367 89 290 20 165 225 10 0 505 +368 246 314 -20 1430 1490 10 868 0 +369 40 304 -20 1130 1190 10 615 0 +370 262 369 15 119 179 10 0 534 +371 323 29 -20 1122 1182 10 336 0 +372 89 65 16 705 765 10 0 574 +373 144 35 -20 239 299 10 733 0 +374 200 265 -10 137 197 10 230 0 +375 436 264 20 186 246 10 0 155 +376 15 457 20 313 373 10 0 32 +377 397 20 -10 272 332 10 235 0 +378 328 491 21 663 723 10 0 463 +379 399 175 -10 732 792 10 736 0 +380 432 2 -40 452 512 10 809 0 +381 63 336 20 251 311 10 0 258 +382 6 296 10 305 365 10 0 511 +383 146 376 8 219 279 10 0 308 +384 295 247 -22 1288 1348 10 780 0 +385 235 33 -10 1322 1382 10 209 0 +386 233 204 20 49 109 10 0 796 +387 142 360 20 1517 1577 0 0 1039 +388 177 156 25 152 212 10 0 34 +389 315 287 30 133 193 10 0 11 +390 452 172 -25 593 653 10 275 0 +391 263 153 12 397 457 0 0 1003 +392 493 493 -20 841 901 10 774 0 +393 320 283 30 96 156 10 0 738 +394 64 5 -28 1114 1174 10 942 0 +395 95 235 10 155 215 10 0 535 +396 203 211 -21 1291 1351 10 510 0 +397 16 497 20 411 471 10 0 279 +398 348 348 -24 920 980 10 886 0 +399 485 104 21 779 839 10 0 561 +400 330 147 -33 833 893 10 85 0 +401 443 237 20 193 253 10 0 713 +402 316 286 -20 122 182 10 983 0 +403 335 46 18 1327 1387 10 0 48 +404 381 495 20 307 367 10 0 680 +405 364 173 30 165 225 10 0 412 +406 267 162 -1 1434 1494 10 654 0 +407 214 245 8 36 96 10 0 979 +408 92 234 10 220 280 10 0 286 +409 347 459 -20 464 524 10 71 0 +410 30 7 -3 1174 1234 10 99 0 +411 120 37 28 760 820 10 0 964 +412 397 153 -30 867 927 10 405 0 +413 210 29 -10 1036 1096 10 760 0 +414 87 285 30 226 286 10 0 45 +415 132 32 -20 769 829 10 212 0 +416 390 294 20 222 282 10 0 577 +417 67 451 -30 1201 1261 10 689 0 +418 24 68 20 399 459 10 0 438 +419 146 439 -20 244 304 10 220 0 +420 209 212 18 1513 1573 0 0 1027 +421 6 292 10 247 307 10 0 993 +422 18 63 -20 324 384 10 204 0 +423 149 98 -29 1150 1210 10 759 0 +424 91 268 10 230 290 10 0 302 +425 103 177 28 611 671 10 0 536 +426 367 178 20 165 225 10 0 985 +427 225 269 -20 1256 1316 10 464 0 +428 443 246 20 215 275 10 0 718 +429 306 42 -20 462 522 10 797 0 +430 374 306 -20 979 1039 10 215 0 +431 413 421 -20 288 348 10 211 0 +432 470 405 17 911 971 0 0 1034 +433 33 278 -16 1472 1532 10 842 0 +434 149 458 13 1149 1209 10 0 697 +435 257 57 18 1211 1271 10 0 259 +436 272 403 30 175 235 10 0 662 +437 221 291 9 50 110 10 0 656 +438 1 101 -20 1242 1302 10 418 0 +439 332 459 -5 354 414 10 741 0 +440 220 392 -10 243 303 10 2 0 +441 253 50 27 211 271 10 0 849 +442 250 441 5 741 801 10 0 106 +443 471 484 -20 325 385 10 773 0 +444 480 152 26 1007 1067 0 0 1035 +445 404 83 -10 283 343 10 638 0 +446 476 94 20 274 334 10 0 320 +447 458 213 -8 1113 1173 10 299 0 +448 215 395 -10 227 287 10 238 0 +449 85 288 20 169 229 10 0 923 +450 179 75 -20 725 785 10 479 0 +451 228 287 21 43 103 10 0 17 +452 397 18 -10 277 337 10 844 0 +453 238 204 -10 90 150 10 261 0 +454 488 3 3 386 446 10 0 263 +455 407 88 10 309 369 10 0 205 +456 459 14 20 315 375 10 0 242 +457 120 17 30 266 326 10 0 621 +458 235 316 -7 641 701 10 475 0 +459 370 382 -26 869 929 10 88 0 +460 405 454 -10 1288 1348 10 798 0 +461 17 458 10 418 478 10 0 46 +462 43 135 -35 236 296 10 508 0 +463 318 497 -21 839 899 10 378 0 +464 199 268 20 56 116 10 0 427 +465 111 467 -10 272 332 10 628 0 +466 138 438 20 272 332 10 0 257 +467 172 314 -15 530 590 10 626 0 +468 494 468 31 337 397 10 0 213 +469 35 303 20 221 281 10 0 86 +470 341 59 -10 775 835 10 568 0 +471 423 221 9 243 303 10 0 291 +472 395 295 20 196 256 10 0 598 +473 413 417 10 341 401 10 0 98 +474 339 60 20 209 269 10 0 287 +475 277 428 7 475 535 10 0 458 +476 176 199 -20 89 149 10 991 0 +477 265 240 9 18 78 10 0 350 +478 365 190 -10 1462 1522 10 552 0 +479 133 53 20 264 324 10 0 450 +480 387 488 -20 347 407 10 84 0 +481 385 295 20 142 202 10 0 216 +482 491 369 28 715 775 0 0 1029 +483 445 273 -10 243 303 10 764 0 +484 195 273 -10 59 119 10 126 0 +485 313 493 -31 1178 1238 10 860 0 +486 495 227 -20 329 389 10 971 0 +487 241 403 -10 205 265 10 549 0 +488 30 72 -17 417 477 10 27 0 +489 21 487 10 335 395 10 0 111 +490 324 99 10 323 383 10 0 643 +491 453 318 -13 359 419 10 133 0 +492 443 272 -10 255 315 10 516 0 +493 447 184 -37 409 469 10 672 0 +494 366 288 -27 669 729 10 655 0 +495 440 284 25 837 897 10 0 36 +496 13 314 14 245 305 10 0 880 +497 72 227 25 549 609 10 0 193 +498 377 385 -20 851 911 10 544 0 +499 477 478 20 377 437 10 0 848 +500 204 185 -20 148 208 10 605 0 +501 226 191 20 78 138 10 0 190 +502 330 138 -20 1095 1155 10 20 0 +503 185 434 -30 559 619 10 752 0 +504 483 22 -30 325 385 10 365 0 +505 71 282 -20 627 687 10 367 0 +506 60 5 18 1029 1089 10 0 555 +507 189 402 -21 521 581 10 228 0 +508 134 211 35 122 182 10 0 462 +509 146 313 22 1180 1240 10 0 744 +510 21 146 21 472 532 10 0 396 +511 37 281 -10 478 538 10 382 0 +512 416 417 20 328 388 10 0 55 +513 44 311 27 392 452 0 0 1016 +514 361 181 20 182 242 10 0 951 +515 444 242 10 201 261 10 0 573 +516 444 271 10 231 291 10 0 492 +517 359 179 20 147 207 10 0 557 +518 388 334 20 161 221 10 0 724 +519 401 164 -20 606 666 10 814 0 +520 499 316 -29 607 667 10 928 0 +521 399 106 -30 287 347 10 180 0 +522 425 215 10 214 274 10 0 91 +523 407 98 10 218 278 10 0 824 +524 406 460 -18 704 764 10 104 0 +525 88 95 -20 255 315 10 137 0 +526 95 64 4 751 811 0 0 1023 +527 306 229 -13 1305 1365 10 890 0 +528 273 55 20 196 256 10 0 42 +529 384 149 -31 1182 1242 10 159 0 +530 122 35 10 250 310 10 0 109 +531 308 199 -10 1493 1553 10 963 0 +532 390 301 10 150 210 10 0 960 +533 300 108 10 150 210 10 0 325 +534 267 400 -15 217 277 10 370 0 +535 8 300 -10 341 401 10 395 0 +536 105 181 -28 1516 1576 10 425 0 +537 398 325 -20 218 278 10 105 0 +538 166 247 1 84 144 10 0 694 +539 140 431 30 211 271 10 0 996 +540 253 118 19 532 592 10 0 317 +541 359 246 18 1408 1468 0 0 1012 +542 321 277 10 75 135 10 0 792 +543 168 59 6 351 411 10 0 940 +544 406 285 20 164 224 10 0 498 +545 391 334 20 166 226 10 0 936 +546 437 19 -20 999 1059 10 337 0 +547 201 278 13 56 116 10 0 625 +548 435 267 -10 308 368 10 81 0 +549 245 408 10 189 249 10 0 487 +550 16 462 -20 371 431 10 858 0 +551 107 374 8 899 959 10 0 770 +552 477 97 10 273 333 10 0 478 +553 346 57 20 293 353 10 0 819 +554 14 459 20 321 381 10 0 358 +555 102 6 -18 1443 1503 10 506 0 +556 359 287 24 115 175 10 0 691 +557 297 131 -20 1150 1210 10 517 0 +558 282 1 18 1027 1087 10 0 836 +559 21 70 -10 756 816 10 816 0 +560 440 244 -10 251 311 10 690 0 +561 482 104 -21 792 852 10 399 0 +562 120 261 -30 778 838 10 805 0 +563 125 29 30 268 328 10 0 333 +564 292 32 -10 222 282 10 169 0 +565 262 92 25 615 675 0 0 1021 +566 68 160 -14 1121 1181 10 319 0 +567 405 276 -20 219 279 10 603 0 +568 277 50 10 201 261 10 0 470 +569 32 319 -10 386 446 10 75 0 +570 344 70 -9 1131 1191 10 781 0 +571 481 84 17 491 551 0 0 1013 +572 21 68 20 386 446 10 0 717 +573 441 244 -10 262 322 10 515 0 +574 57 43 -16 1008 1068 10 372 0 +575 1 293 10 253 313 10 0 243 +576 481 96 -5 282 342 10 16 0 +577 471 368 -20 413 473 10 416 0 +578 236 126 23 124 184 10 0 750 +579 406 99 20 217 277 10 0 121 +580 303 186 -20 1339 1399 10 588 0 +581 225 369 38 121 181 10 0 855 +582 412 453 10 282 342 10 0 277 +583 104 349 -30 994 1054 10 149 0 +584 173 182 25 102 162 0 0 1032 +585 111 464 -10 296 356 10 917 0 +586 53 440 10 308 368 10 0 283 +587 69 336 20 203 263 10 0 152 +588 359 182 20 194 254 10 0 580 +589 13 459 20 332 392 10 0 783 +590 244 277 -20 1286 1346 10 657 0 +591 484 177 20 245 305 10 0 648 +592 452 206 -30 477 537 10 298 0 +593 22 483 30 325 385 10 0 624 +594 452 110 -30 325 385 10 117 0 +595 347 192 -20 1473 1533 10 776 0 +596 95 92 20 238 298 10 0 800 +597 368 311 14 911 971 0 0 1041 +598 479 387 -20 382 442 10 472 0 +599 479 169 -20 294 354 10 170 0 +600 497 266 25 733 793 10 0 775 +601 66 336 -10 238 298 10 60 0 +602 376 195 -20 166 226 10 143 0 +603 401 281 20 246 306 10 0 567 +604 441 177 -14 986 1046 10 38 0 +605 231 203 20 52 112 10 0 500 +606 21 488 10 346 406 10 0 766 +607 231 204 -20 135 195 10 272 0 +608 122 422 3 1442 1502 10 0 246 +609 65 453 30 274 334 10 0 703 +610 206 261 -20 167 227 10 101 0 +611 466 149 16 1171 1231 10 0 877 +612 313 119 -10 201 261 10 767 0 +613 90 274 20 164 224 10 0 134 +614 39 162 -11 550 610 10 80 0 +615 35 306 20 222 282 10 0 369 +616 437 15 30 340 400 10 0 646 +617 307 412 8 389 449 10 0 957 +618 79 291 10 194 254 10 0 645 +619 64 437 -4 903 963 10 348 0 +620 376 92 -10 976 1036 10 175 0 +621 129 27 -30 283 343 10 457 0 +622 196 489 -16 1015 1075 10 280 0 +623 51 286 -30 1444 1504 10 937 0 +624 20 488 -30 357 417 10 593 0 +625 13 455 -13 313 373 10 547 0 +626 170 347 15 421 481 10 0 467 +627 92 230 -10 174 234 10 955 0 +628 117 467 10 254 314 10 0 465 +629 413 217 -10 166 226 10 300 0 +630 405 450 20 253 313 10 0 986 +631 394 322 -20 1010 1070 10 910 0 +632 125 61 26 597 657 10 0 730 +633 238 123 -40 766 826 10 5 0 +634 11 403 18 328 388 10 0 120 +635 89 272 -10 177 237 10 161 0 +636 304 102 30 182 242 10 0 94 +637 478 121 40 304 364 10 0 665 +638 408 84 10 269 329 10 0 445 +639 376 494 30 274 334 10 0 164 +640 20 73 10 290 350 10 0 921 +641 159 299 -20 1001 1061 10 737 0 +642 95 382 -5 216 276 10 922 0 +643 352 63 -10 1163 1223 10 490 0 +644 365 274 14 117 177 10 0 909 +645 30 301 -10 263 323 10 618 0 +646 351 5 -30 481 541 10 616 0 +647 197 267 -10 94 154 10 871 0 +648 498 171 -20 1241 1301 10 591 0 +649 468 352 -20 753 813 10 210 0 +650 418 251 -24 1182 1242 10 207 0 +651 489 437 -25 692 752 10 179 0 +652 251 63 -13 972 1032 10 129 0 +653 132 55 10 252 312 10 0 31 +654 281 96 1 1111 1171 10 0 406 +655 333 293 27 602 662 10 0 494 +656 255 487 -9 383 443 10 437 0 +657 207 400 20 176 236 10 0 590 +658 469 489 4 540 600 10 0 802 +659 244 254 20 85 145 10 0 59 +660 233 207 10 46 106 10 0 293 +661 441 60 -10 1444 1504 10 969 0 +662 411 379 -30 1178 1238 10 436 0 +663 178 72 -23 742 802 10 125 0 +664 51 447 -30 280 340 10 987 0 +665 478 118 -40 339 399 10 637 0 +666 141 426 23 516 576 10 0 785 +667 295 89 -10 727 787 10 21 0 +668 112 433 29 229 289 10 0 746 +669 320 211 16 978 1038 0 0 1025 +670 400 103 10 241 301 10 0 674 +671 408 453 10 268 328 10 0 712 +672 435 180 37 210 270 10 0 493 +673 432 66 -20 1056 1116 10 841 0 +674 374 116 -10 572 632 10 670 0 +675 478 102 10 309 369 10 0 896 +676 335 57 30 210 270 10 0 941 +677 385 239 21 771 831 10 0 711 +678 386 245 -19 464 524 10 727 0 +679 208 396 20 161 221 10 0 10 +680 380 489 -20 364 424 10 404 0 +681 380 498 10 282 342 10 0 289 +682 440 7 -20 308 368 10 165 0 +683 434 245 -20 327 387 10 123 0 +684 90 232 -10 197 257 10 355 0 +685 389 334 20 162 222 10 0 702 +686 241 205 30 103 163 10 0 344 +687 18 24 -30 613 673 10 914 0 +688 57 183 -4 1085 1145 10 919 0 +689 59 457 30 319 379 10 0 417 +690 442 243 10 274 334 10 0 560 +691 402 281 -24 235 295 10 556 0 +692 445 237 10 195 255 10 0 338 +693 441 273 20 267 327 10 0 222 +694 31 175 -1 232 292 10 538 0 +695 234 202 10 65 125 10 0 715 +696 52 303 -22 426 486 10 139 0 +697 167 445 -13 1397 1457 10 434 0 +698 179 286 -30 326 386 10 838 0 +699 269 48 -20 266 326 10 852 0 +700 165 59 27 928 988 10 0 723 +701 461 8 20 354 414 10 0 953 +702 421 415 -20 237 297 10 685 0 +703 59 459 -30 296 356 10 609 0 +704 24 492 -20 447 507 10 966 0 +705 55 449 20 278 338 10 0 268 +706 224 192 10 63 123 10 0 808 +707 444 269 -40 219 279 10 26 0 +708 491 20 -10 379 439 10 110 0 +709 313 126 10 228 288 10 0 765 +710 283 438 3 216 276 10 0 8 +711 352 241 -21 777 837 10 677 0 +712 398 476 -10 403 463 10 671 0 +713 442 247 -20 226 286 10 401 0 +714 217 207 -20 1367 1427 10 124 0 +715 233 87 -10 238 298 10 695 0 +716 479 127 20 259 319 10 0 361 +717 6 53 -20 572 632 10 572 0 +718 478 300 -20 875 935 10 428 0 +719 378 493 -20 274 334 10 915 0 +720 303 78 12 179 239 10 0 846 +721 344 62 10 331 391 10 0 142 +722 371 315 -13 1151 1211 10 181 0 +723 200 78 -27 978 1038 10 700 0 +724 413 391 -20 215 275 10 518 0 +725 415 216 10 168 228 10 0 874 +726 397 57 -5 1461 1521 10 901 0 +727 293 228 19 48 108 10 0 678 +728 0 297 -10 278 338 10 40 0 +729 435 20 20 366 426 0 0 1010 +730 195 111 -26 983 1043 10 632 0 +731 417 218 10 263 323 10 0 891 +732 340 54 10 223 283 0 0 1014 +733 132 57 20 229 289 10 0 373 +734 210 379 -18 694 754 10 281 0 +735 228 260 -10 1591 1651 10 793 0 +736 399 104 10 275 335 10 0 379 +737 95 277 20 259 319 10 0 641 +738 360 284 -30 652 712 10 393 0 +739 53 466 9 320 380 10 0 812 +740 112 465 10 284 344 10 0 328 +741 313 391 5 154 214 10 0 439 +742 93 235 10 231 291 10 0 945 +743 125 32 30 251 311 10 0 916 +744 215 282 -22 1425 1485 10 509 0 +745 224 320 -8 1269 1329 10 90 0 +746 134 428 -29 293 353 10 668 0 +747 26 490 10 460 520 10 0 9 +748 44 115 -18 246 306 10 305 0 +749 438 127 -10 926 986 10 219 0 +750 239 15 -23 589 649 10 578 0 +751 342 54 20 235 295 10 0 96 +752 109 463 30 319 379 10 0 503 +753 199 187 -32 112 172 10 234 0 +754 201 188 10 124 184 10 0 885 +755 399 301 30 179 239 10 0 70 +756 484 171 -20 278 338 10 888 0 +757 272 234 -20 1575 1635 10 927 0 +758 380 350 -17 851 911 10 931 0 +759 140 108 29 1056 1116 10 0 423 +760 228 199 10 119 179 10 0 413 +761 245 461 -30 634 694 10 229 0 +762 305 107 -10 210 270 10 326 0 +763 231 195 20 94 154 10 0 994 +764 450 265 10 201 261 10 0 483 +765 273 149 -10 1488 1548 10 709 0 +766 12 358 -10 1209 1269 10 606 0 +767 315 121 10 188 248 10 0 612 +768 420 213 10 189 249 10 0 956 +769 331 134 -30 1109 1169 10 316 0 +770 84 377 -8 911 971 10 551 0 +771 320 280 10 76 136 10 0 87 +772 89 185 -33 585 645 10 7 0 +773 472 481 20 320 380 10 0 443 +774 422 420 20 248 308 10 0 392 +775 475 267 -25 765 825 10 600 0 +776 470 125 20 253 313 10 0 595 +777 435 268 -10 297 357 10 188 0 +778 409 155 19 185 245 10 0 35 +779 243 248 30 9 69 10 0 859 +780 488 96 22 1051 1111 10 0 384 +781 341 72 9 790 850 10 0 570 +782 58 449 -26 348 408 10 791 0 +783 16 460 -20 396 456 10 589 0 +784 480 136 22 256 316 10 0 331 +785 162 388 -23 1111 1171 10 666 0 +786 47 208 30 211 271 10 0 995 +787 324 127 30 143 203 10 0 903 +788 87 96 30 267 327 10 0 356 +789 140 137 -12 555 615 10 904 0 +790 314 205 -20 1512 1572 10 135 0 +791 96 346 26 181 241 10 0 782 +792 321 280 -10 77 137 10 542 0 +793 245 251 10 5 65 10 0 735 +794 436 295 11 513 573 10 0 934 +795 274 261 20 1692 1752 0 0 1044 +796 271 128 -20 331 391 10 386 0 +797 275 45 20 210 270 10 0 429 +798 422 409 10 234 294 10 0 460 +799 146 188 -10 1220 1280 10 900 0 +800 93 96 -20 219 279 10 596 0 +801 409 255 23 1507 1567 0 0 1031 +802 449 428 -4 1232 1292 10 658 0 +803 90 285 -30 261 321 10 967 0 +804 415 95 -16 1162 1222 10 978 0 +805 88 287 30 248 308 10 0 562 +806 379 196 20 179 239 10 0 89 +807 368 452 -20 655 715 10 56 0 +808 202 186 -10 136 196 10 706 0 +809 435 11 40 302 362 10 0 380 +810 269 46 20 254 314 10 0 118 +811 7 292 10 246 306 10 0 100 +812 44 496 -9 387 447 10 739 0 +813 478 99 10 296 356 10 0 938 +814 391 99 20 206 266 10 0 519 +815 132 477 25 312 372 10 0 138 +816 24 65 10 350 410 10 0 559 +817 130 247 17 120 180 10 0 907 +818 133 273 20 119 179 10 0 251 +819 347 62 -20 318 378 10 553 0 +820 404 140 -10 1244 1304 10 150 0 +821 416 420 -20 275 335 10 828 0 +822 67 335 -30 227 287 10 869 0 +823 92 270 -10 242 302 10 14 0 +824 411 95 -10 228 288 10 523 0 +825 132 479 11 257 317 10 0 25 +826 366 334 5 395 455 10 0 265 +827 125 39 20 245 305 10 0 187 +828 419 422 20 261 321 10 0 821 +829 460 2 20 338 398 10 0 965 +830 67 334 -20 216 276 10 334 0 +831 448 414 23 1208 1268 10 0 83 +832 46 163 8 911 971 0 0 1008 +833 77 465 11 275 335 10 0 197 +834 284 319 -20 802 862 10 311 0 +835 102 422 -18 226 286 10 144 0 +836 240 34 -18 1535 1595 10 558 0 +837 141 428 20 208 268 10 0 839 +838 204 269 30 49 109 10 0 698 +839 144 439 -20 256 316 10 837 0 +840 470 417 11 722 782 10 0 250 +841 404 103 20 227 287 10 0 673 +842 5 281 16 1357 1417 10 0 433 +843 487 320 -10 843 903 10 184 0 +844 398 23 10 270 330 10 0 452 +845 90 296 20 166 226 10 0 30 +846 386 13 -12 322 382 10 720 0 +847 115 465 10 253 313 10 0 276 +848 473 475 -20 402 462 10 499 0 +849 275 42 -27 223 283 10 441 0 +850 286 356 30 111 171 10 0 39 +851 15 69 10 296 356 10 0 943 +852 267 44 20 241 301 10 0 699 +853 243 399 10 220 280 10 0 330 +854 390 249 -14 567 627 10 285 0 +855 210 391 -38 146 206 10 581 0 +856 433 15 20 297 357 10 0 873 +857 24 259 -16 355 415 10 47 0 +858 12 463 20 346 406 10 0 550 +859 237 213 -30 132 192 10 779 0 +860 182 480 31 350 410 10 0 485 +861 409 88 20 255 315 10 0 69 +862 244 368 -10 399 459 10 876 0 +863 381 328 -10 702 762 10 973 0 +864 213 185 21 74 134 10 0 92 +865 482 141 -5 996 1056 10 977 0 +866 319 124 20 163 223 10 0 22 +867 141 431 30 211 271 10 0 208 +868 198 264 20 125 185 10 0 368 +869 69 334 30 199 259 10 0 822 +870 299 98 30 159 219 10 0 884 +871 240 250 10 22 82 10 0 647 +872 199 203 -20 1442 1502 10 314 0 +873 459 17 -20 396 456 10 856 0 +874 423 217 -10 227 287 10 725 0 +875 477 179 20 237 297 10 0 351 +876 213 397 10 202 262 10 0 862 +877 405 187 -16 1236 1296 10 611 0 +878 269 402 20 188 248 10 0 37 +879 53 204 8 1040 1100 10 0 313 +880 13 394 -14 358 418 10 496 0 +881 15 68 10 297 357 10 0 73 +882 56 268 -10 1049 1109 10 97 0 +883 360 184 -30 206 266 10 52 0 +884 307 102 -30 195 255 10 870 0 +885 130 57 -10 227 287 10 754 0 +886 250 328 24 234 294 10 0 398 +887 91 231 30 185 245 10 0 18 +888 479 176 20 240 300 10 0 756 +889 420 224 10 414 474 10 0 136 +890 461 182 13 614 674 10 0 527 +891 418 218 -10 252 312 10 731 0 +892 419 418 10 238 298 10 0 999 +893 336 493 -12 1478 1538 10 920 0 +894 389 300 10 147 207 10 0 912 +895 92 76 -21 1124 1184 10 254 0 +896 476 102 -10 321 381 10 675 0 +897 418 399 -10 423 483 10 297 0 +898 109 56 27 239 299 10 0 79 +899 13 465 31 759 819 10 0 972 +900 92 232 10 162 222 10 0 799 +901 394 47 5 298 358 10 0 726 +902 16 287 12 256 316 10 0 221 +903 399 102 -30 252 312 10 787 0 +904 143 158 12 141 201 10 0 789 +905 18 484 10 329 389 10 0 318 +906 250 411 -20 173 233 10 327 0 +907 19 273 -17 1002 1062 10 817 0 +908 365 28 9 253 313 10 0 172 +909 387 297 -14 144 204 10 644 0 +910 433 447 20 779 839 10 0 631 +911 214 274 -23 1354 1414 10 173 0 +912 489 338 -10 1382 1442 10 894 0 +913 130 494 6 744 804 10 0 168 +914 23 67 30 374 434 10 0 687 +915 374 489 20 269 329 10 0 719 +916 126 30 -30 257 317 10 743 0 +917 112 467 10 261 321 10 0 585 +918 489 274 -10 519 579 10 352 0 +919 61 214 4 327 387 10 0 688 +920 166 440 12 207 267 10 0 893 +921 56 75 -10 1423 1483 10 640 0 +922 210 276 5 47 107 10 0 642 +923 80 286 -20 209 269 10 449 0 +924 17 459 10 407 467 0 0 1009 +925 66 448 10 270 330 10 0 157 +926 351 128 -24 1238 1298 10 103 0 +927 352 176 20 126 186 10 0 757 +928 490 286 29 507 567 10 0 520 +929 247 219 17 31 91 10 0 981 +930 86 268 -10 202 262 10 252 0 +931 398 329 17 167 227 10 0 758 +932 272 402 10 153 213 10 0 332 +933 317 123 20 175 235 0 0 1005 +934 408 318 -11 628 688 10 794 0 +935 66 31 -15 1033 1093 10 241 0 +936 425 448 -20 779 839 10 545 0 +937 35 304 30 221 281 10 0 623 +938 471 94 -10 984 1044 10 813 0 +939 470 473 -20 416 476 10 949 0 +940 224 56 -6 1171 1231 10 543 0 +941 343 47 -30 262 322 10 676 0 +942 52 18 28 842 902 10 0 394 +943 16 68 -10 299 359 10 851 0 +944 195 185 20 97 157 10 0 199 +945 92 236 -10 243 303 10 742 0 +946 76 462 18 941 1001 10 0 140 +947 124 56 20 231 291 10 0 156 +948 481 454 14 308 368 0 0 1002 +949 477 483 20 351 411 10 0 939 +950 481 124 10 268 328 10 0 345 +951 389 156 -20 701 761 10 514 0 +952 384 16 -10 336 396 10 990 0 +953 492 34 -20 796 856 10 701 0 +954 371 200 10 209 269 10 0 68 +955 153 235 10 98 158 10 0 627 +956 428 202 -10 889 949 10 768 0 +957 257 391 -8 1610 1670 10 617 0 +958 421 218 -19 239 299 10 114 0 +959 206 186 10 173 233 0 0 1040 +960 393 301 -10 163 223 10 532 0 +961 204 187 -20 160 220 10 248 0 +962 468 475 10 313 373 0 0 1001 +963 477 122 10 315 375 10 0 531 +964 100 66 -28 1385 1445 10 411 0 +965 489 27 -20 406 466 10 829 0 +966 12 451 20 311 371 10 0 704 +967 197 270 30 81 141 10 0 803 +968 311 422 29 973 1033 10 0 154 +969 489 17 10 365 425 10 0 661 +970 13 214 -26 1339 1399 10 127 0 +971 440 247 20 238 298 10 0 486 +972 28 467 -31 1328 1388 10 899 0 +973 388 325 10 248 308 10 0 863 +974 270 401 -10 152 212 10 354 0 +975 5 445 30 313 373 10 0 185 +976 198 271 -20 69 129 10 349 0 +977 480 131 5 673 733 10 0 865 +978 437 98 16 1099 1159 10 0 804 +979 131 246 -8 817 877 10 407 0 +980 49 437 7 412 472 10 0 359 +981 270 49 -17 277 337 10 929 0 +982 337 41 -20 987 1047 10 41 0 +983 318 280 20 82 142 10 0 402 +984 154 392 9 171 231 10 0 76 +985 493 111 -20 526 586 10 426 0 +986 399 450 -20 344 404 10 630 0 +987 67 452 30 272 332 10 0 664 +988 34 239 16 216 276 10 0 19 +989 343 276 15 96 156 10 0 329 +990 393 12 10 294 354 10 0 952 +991 236 247 20 37 97 10 0 476 +992 340 291 22 455 515 10 0 178 +993 3 292 -10 250 310 10 421 0 +994 209 68 -20 1553 1613 10 763 0 +995 18 225 -30 676 736 10 786 0 +996 147 435 -30 230 290 10 539 0 +997 335 99 -10 1203 1263 10 1000 0 +998 485 24 20 326 386 10 0 112 +999 470 475 -10 314 374 10 892 0 +1000 341 58 10 212 272 10 0 997 +1001 468 475 -10 313 373 10 962 0 +1002 481 454 -14 308 368 10 948 0 +1003 263 153 -12 397 457 10 391 0 +1004 400 288 -30 154 214 10 66 0 +1005 317 123 -20 175 235 10 933 0 +1006 418 221 -10 276 336 10 323 0 +1007 267 394 -10 244 304 10 148 0 +1008 46 163 -8 911 971 10 832 0 +1009 17 459 -10 407 467 10 924 0 +1010 435 20 -20 366 426 10 729 0 +1011 105 474 -27 456 516 10 61 0 +1012 359 246 -18 1408 1468 10 541 0 +1013 481 84 -17 491 551 10 571 0 +1014 340 54 -10 223 283 10 732 0 +1015 231 29 -14 1211 1271 10 186 0 +1016 44 311 -27 392 452 10 513 0 +1017 307 249 -10 1362 1422 10 269 0 +1018 58 391 -16 867 927 10 340 0 +1019 352 487 -27 887 947 10 4 0 +1020 294 421 -26 1560 1620 10 141 0 +1021 262 92 -25 615 675 10 565 0 +1022 149 214 -7 467 527 10 189 0 +1023 95 64 -4 751 811 10 526 0 +1024 323 118 -20 150 210 10 264 0 +1025 320 211 -16 978 1038 10 669 0 +1026 394 333 -20 179 239 10 315 0 +1027 209 212 -18 1513 1573 10 420 0 +1028 355 177 -20 127 187 10 273 0 +1029 491 369 -28 715 775 10 482 0 +1030 58 458 -10 308 368 10 309 0 +1031 409 255 -23 1507 1567 10 801 0 +1032 173 182 -25 102 162 10 584 0 +1033 371 192 -30 134 194 10 162 0 +1034 470 405 -17 911 971 10 432 0 +1035 480 152 -26 1007 1067 10 444 0 +1036 483 27 -20 443 503 10 288 0 +1037 133 26 -10 297 357 10 310 0 +1038 286 244 -31 1269 1329 10 214 0 +1039 142 360 -20 1517 1577 10 387 0 +1040 206 186 -10 173 233 10 959 0 +1041 368 311 -14 911 971 10 597 0 +1042 330 308 -24 1155 1215 10 224 0 +1043 133 455 -25 793 853 10 357 0 +1044 274 261 -20 1692 1752 10 795 0 +1045 131 56 -10 241 301 10 44 0 +1046 440 436 -18 877 937 10 1 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1107.txt b/jsprit-instances/instances/lilim/1000/LRC1107.txt new file mode 100644 index 00000000..ef0f6947 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1107.txt @@ -0,0 +1,1048 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 18 862 951 10 0 338 +2 214 394 10 200 291 10 0 734 +3 476 483 10 337 403 10 0 392 +4 352 487 27 888 945 10 0 485 +5 230 197 40 100 173 10 0 344 +6 175 239 23 75 169 10 0 304 +7 133 202 -18 438 513 10 305 0 +8 328 458 -26 754 811 10 88 0 +9 25 499 -30 403 516 10 689 0 +10 226 423 -40 174 276 10 17 0 +11 313 282 20 152 204 0 0 1002 +12 60 454 -10 313 412 10 157 0 +13 239 486 3 1433 1562 0 0 1039 +14 102 264 10 148 257 10 0 134 +15 408 452 10 260 314 10 0 460 +16 451 62 5 275 355 10 0 122 +17 203 390 40 147 257 10 0 10 +18 92 233 -17 198 279 10 817 0 +19 7 300 30 315 404 10 0 535 +20 409 90 -30 225 371 10 824 0 +21 307 108 -20 225 280 10 264 0 +22 347 54 10 276 345 10 0 287 +23 406 87 10 301 355 10 0 638 +24 371 332 -20 506 584 10 210 0 +25 116 466 -10 254 330 10 847 0 +26 441 265 40 191 300 10 0 495 +27 130 140 17 183 235 10 0 356 +28 80 117 -10 782 897 10 306 0 +29 421 387 -18 744 889 10 95 0 +30 83 300 -30 433 597 10 805 0 +31 136 52 -20 278 338 10 479 0 +32 18 462 -20 377 448 10 783 0 +33 390 120 -30 976 1063 10 180 0 +34 188 119 -25 945 1035 10 388 0 +35 467 114 10 338 443 0 0 1006 +36 440 292 24 888 1022 0 0 1027 +37 268 400 20 208 308 10 0 237 +38 391 202 14 148 323 10 0 233 +39 377 432 -25 816 877 10 409 0 +40 80 290 -10 174 265 10 618 0 +41 439 15 20 309 408 10 0 380 +42 307 52 -11 882 989 10 429 0 +43 111 192 -20 1159 1269 10 627 0 +44 131 56 10 229 313 10 0 632 +45 88 286 -10 221 313 10 647 0 +46 69 414 -11 1226 1330 10 619 0 +47 41 232 16 209 272 10 0 811 +48 323 77 -10 1352 1488 10 175 0 +49 340 416 36 296 376 10 0 378 +50 86 199 -10 230 355 10 355 0 +51 314 124 20 221 270 10 0 796 +52 375 191 -30 149 215 10 162 0 +53 226 175 -20 1618 1733 10 259 0 +54 242 106 -13 1244 1322 10 940 0 +55 417 417 10 313 381 10 0 431 +56 419 459 -40 273 389 10 262 0 +57 389 11 -20 293 383 10 377 0 +58 450 416 25 541 643 10 0 83 +59 246 255 10 57 199 10 0 862 +60 71 333 10 197 294 10 0 251 +61 105 474 27 465 506 10 0 357 +62 20 489 -10 358 438 10 489 0 +63 388 331 20 160 277 10 0 545 +64 92 259 -10 383 445 10 203 0 +65 200 261 10 106 257 10 0 427 +66 400 288 30 154 262 10 0 81 +67 299 285 -10 1228 1310 10 542 0 +68 378 199 10 180 265 10 0 191 +69 325 147 14 1163 1241 0 0 1003 +70 421 386 -20 802 876 10 774 0 +71 404 447 20 250 352 10 0 630 +72 412 478 -30 928 1022 10 999 0 +73 26 67 -10 1290 1373 10 266 0 +74 358 183 20 203 294 10 0 527 +75 30 302 10 226 372 10 0 513 +76 176 470 -25 503 620 10 815 0 +77 96 270 20 155 272 10 0 424 +78 243 408 -5 1413 1484 10 442 0 +79 60 29 32 1322 1433 0 0 1005 +80 34 169 11 427 571 0 0 1012 +81 407 280 -30 186 262 10 66 0 +82 277 403 10 155 245 10 0 617 +83 498 456 -25 1387 1455 10 58 0 +84 384 491 -10 281 444 10 164 0 +85 355 174 -10 665 796 10 883 0 +86 97 288 -20 1243 1355 10 176 0 +87 316 284 -30 97 182 10 402 0 +88 334 403 26 174 298 10 0 8 +89 415 223 20 286 354 10 0 889 +90 230 320 -20 1158 1256 10 440 0 +91 432 199 7 636 672 10 0 192 +92 92 18 -27 1132 1146 10 898 0 +93 273 300 30 55 123 10 0 393 +94 269 112 19 1228 1328 10 0 765 +95 429 389 18 385 494 10 0 29 +96 371 71 21 241 362 10 0 620 +97 5 297 -10 306 386 10 382 0 +98 414 378 -17 459 561 10 931 0 +99 38 15 -28 1036 1176 10 942 0 +100 2 295 -14 276 366 10 496 0 +101 237 254 20 33 163 10 0 126 +102 54 445 10 283 364 10 0 335 +103 382 110 -20 1101 1153 10 903 0 +104 438 488 18 303 384 10 0 651 +105 395 331 -10 193 270 10 146 0 +106 230 487 20 1072 1218 10 0 208 +107 249 407 -30 157 232 10 240 0 +108 488 26 -30 385 511 10 365 0 +109 151 81 -3 1562 1583 10 555 0 +110 483 14 -20 349 408 10 195 0 +111 0 422 -30 772 900 10 318 0 +112 429 67 -10 716 779 10 950 0 +113 195 464 -11 1531 1581 10 825 0 +114 356 256 19 106 172 10 0 692 +115 264 180 -25 1645 1740 10 557 0 +116 94 235 -8 156 227 10 407 0 +117 474 96 30 271 365 10 0 552 +118 268 52 -10 280 362 10 568 0 +119 44 440 -10 749 858 10 924 0 +120 7 382 -15 755 816 10 880 0 +121 459 53 -10 1075 1199 10 263 0 +122 491 25 -5 363 485 10 16 0 +123 439 243 20 305 352 10 0 683 +124 210 185 20 76 189 10 0 754 +125 150 68 -6 378 498 10 543 0 +126 201 270 -20 52 172 10 101 0 +127 0 188 26 890 1005 0 0 1013 +128 103 464 -10 1209 1366 10 747 0 +129 325 56 -10 779 843 10 198 0 +130 44 344 -20 1065 1124 10 583 0 +131 418 75 11 395 530 10 0 580 +132 472 57 -20 1255 1364 10 708 0 +133 460 328 13 224 346 10 0 598 +134 89 270 -10 184 253 10 14 0 +135 374 190 -30 137 190 10 360 0 +136 463 253 -8 1000 1124 10 299 0 +137 97 93 20 219 303 10 0 158 +138 163 472 -20 607 730 10 197 0 +139 29 336 22 300 393 10 0 634 +140 84 453 -30 1193 1282 10 987 0 +141 294 421 -29 1557 1624 10 968 0 +142 343 62 10 320 424 10 0 470 +143 371 193 20 133 217 10 0 514 +144 142 372 18 162 213 10 0 551 +145 66 88 -24 793 896 10 748 0 +146 395 332 10 189 253 10 0 105 +147 93 413 17 226 249 10 0 664 +148 267 394 10 220 328 10 0 534 +149 249 258 30 107 176 10 0 886 +150 472 129 10 254 281 10 0 345 +151 87 3 -24 1396 1501 10 294 0 +152 62 326 20 259 343 10 0 433 +153 212 186 11 1615 1737 0 0 1032 +154 241 402 -10 990 1090 10 549 0 +155 439 266 10 189 295 10 0 764 +156 79 80 -12 1343 1451 10 339 0 +157 62 453 10 276 368 10 0 12 +158 188 151 -20 1281 1342 10 137 0 +159 386 154 -33 1053 1179 10 363 0 +160 38 301 -30 279 343 10 414 0 +161 192 265 10 103 176 10 0 803 +162 371 192 30 134 277 10 0 52 +163 64 294 12 1068 1165 10 0 302 +164 381 494 10 283 414 10 0 84 +165 437 12 20 325 365 10 0 682 +166 186 135 -22 710 755 10 199 0 +167 459 10 -20 318 390 10 242 0 +168 175 422 -9 1419 1504 10 984 0 +169 274 48 10 203 279 10 0 186 +170 488 173 20 265 322 10 0 756 +171 398 97 10 212 284 10 0 239 +172 385 17 -20 794 854 10 941 0 +173 180 283 23 719 798 10 0 744 +174 71 12 2 297 369 10 0 935 +175 343 49 10 249 310 10 0 48 +176 248 251 20 2 72 10 0 86 +177 7 194 -10 926 1006 10 421 0 +178 322 290 -5 1451 1537 10 826 0 +179 410 399 25 218 314 10 0 986 +180 398 103 30 269 318 10 0 33 +181 385 285 -10 854 911 10 352 0 +182 179 497 -20 1367 1486 10 465 0 +183 464 13 20 349 450 10 0 322 +184 492 335 -10 808 878 10 188 0 +185 27 464 -20 1270 1342 10 589 0 +186 231 29 -10 1201 1281 10 169 0 +187 157 38 -10 1033 1092 10 916 0 +188 439 268 10 271 354 10 0 184 +189 149 214 7 429 565 10 0 789 +190 187 73 -20 294 320 10 501 0 +191 429 169 -10 881 954 10 68 0 +192 350 199 -7 1174 1258 10 91 0 +193 60 231 32 998 1083 10 0 688 +194 448 404 15 545 683 10 0 840 +195 481 20 20 325 405 10 0 110 +196 436 25 -20 1240 1354 10 364 0 +197 111 459 20 302 445 10 0 138 +198 389 17 10 341 421 10 0 129 +199 148 208 22 502 580 10 0 166 +200 475 477 -20 368 471 10 499 0 +201 390 325 30 192 340 0 0 1025 +202 346 354 -20 799 866 10 480 0 +203 91 266 10 191 304 10 0 64 +204 17 65 20 315 369 0 0 1018 +205 391 112 -20 982 1048 10 841 0 +206 224 203 -30 53 178 10 686 0 +207 426 231 -10 1034 1053 10 573 0 +208 260 472 -20 980 1121 10 106 0 +209 265 0 -30 868 954 10 981 0 +210 391 293 20 206 276 10 0 24 +211 411 421 20 283 377 0 0 1016 +212 132 30 -30 276 406 10 563 0 +213 475 480 30 347 442 10 0 290 +214 286 244 -30 1259 1339 10 389 0 +215 436 237 20 186 268 10 0 600 +216 402 284 30 155 207 10 0 544 +217 287 397 -20 552 606 10 878 0 +218 272 420 -20 1340 1461 10 679 0 +219 477 120 -20 322 393 10 716 0 +220 145 434 20 211 322 10 0 257 +221 33 286 -7 1528 1592 10 766 0 +222 370 262 -20 1059 1169 10 691 0 +223 393 20 20 365 447 10 0 274 +224 330 308 24 1141 1229 10 0 296 +225 246 398 40 148 209 10 0 330 +226 482 184 -13 1082 1161 10 890 0 +227 451 305 13 208 306 10 0 491 +228 226 316 21 70 172 10 0 539 +229 110 459 -30 305 421 10 752 0 +230 244 250 -10 6 79 10 793 0 +231 458 16 20 313 390 10 0 456 +232 390 34 -15 1031 1120 10 546 0 +233 423 214 -14 209 255 10 38 0 +234 219 215 32 46 177 0 0 1007 +235 326 118 10 152 264 10 0 762 +236 365 74 24 858 868 0 0 1026 +237 331 356 -20 697 756 10 37 0 +238 210 398 -38 178 261 10 581 0 +239 403 93 -10 281 431 10 171 0 +240 248 404 30 154 266 10 0 107 +241 65 62 -24 911 1071 10 694 0 +242 460 13 20 316 395 10 0 167 +243 0 293 30 253 361 10 0 575 +244 211 248 26 39 117 10 0 374 +245 484 174 -20 246 314 10 875 0 +246 175 352 12 1619 1685 0 0 1014 +247 455 168 -37 827 936 10 672 0 +248 224 191 20 72 120 10 0 959 +249 439 156 -27 481 600 10 493 0 +250 434 359 -17 1358 1457 10 432 0 +251 118 314 -10 276 429 10 60 0 +252 234 246 -10 26 133 10 871 0 +253 406 450 20 253 349 10 0 936 +254 75 118 -20 381 468 10 944 0 +255 115 395 -8 804 857 10 383 0 +256 329 456 -34 237 292 10 271 0 +257 218 403 -20 1302 1367 10 220 0 +258 149 341 -20 357 480 10 822 0 +259 253 74 20 1297 1433 10 0 53 +260 436 241 20 275 410 10 0 541 +261 238 203 10 71 147 10 0 386 +262 405 455 40 281 430 10 0 56 +263 485 27 10 414 508 10 0 121 +264 323 118 20 150 242 10 0 21 +265 330 371 -20 541 606 10 404 0 +266 25 65 10 336 446 10 0 73 +267 406 96 20 219 339 10 0 445 +268 49 451 20 284 350 10 0 705 +269 307 249 -20 1328 1455 10 329 0 +270 178 135 -27 1491 1567 10 700 0 +271 299 353 34 114 151 10 0 256 +272 236 213 20 39 127 10 0 763 +273 355 177 -20 127 244 10 588 0 +274 394 23 -20 357 480 10 223 0 +275 306 235 25 57 148 10 0 865 +276 90 477 18 277 376 0 0 1021 +277 379 486 -25 637 736 10 712 0 +278 435 16 -20 310 455 10 336 0 +279 8 497 -10 390 455 10 606 0 +280 150 484 -10 603 677 10 740 0 +281 213 399 18 177 321 0 0 1038 +282 391 18 -10 356 430 10 990 0 +283 111 392 -16 1134 1234 10 340 0 +284 330 281 14 1298 1393 0 0 1043 +285 344 203 -9 130 234 10 477 0 +286 91 235 -20 254 314 10 945 0 +287 346 60 -10 273 399 10 22 0 +288 483 27 -40 438 508 10 809 0 +289 382 498 -10 280 405 10 681 0 +290 457 492 -30 485 562 10 213 0 +291 291 213 23 1221 1324 10 0 757 +292 154 374 36 909 995 10 0 745 +293 225 196 10 59 145 10 0 864 +294 94 40 24 1013 1153 10 0 151 +295 0 356 13 1066 1137 10 0 842 +296 297 283 -24 1316 1412 10 224 0 +297 371 423 10 211 290 10 0 332 +298 417 217 30 186 222 10 0 323 +299 500 228 8 768 826 10 0 136 +300 412 214 10 165 216 10 0 768 +301 442 289 -20 195 236 10 341 0 +302 157 269 -12 1546 1636 10 163 0 +303 440 241 10 277 355 0 0 1045 +304 100 266 -23 150 197 10 6 0 +305 111 178 18 156 251 10 0 7 +306 91 101 10 263 364 10 0 28 +307 25 307 10 239 290 10 0 645 +308 135 400 20 294 333 10 0 369 +309 58 458 10 283 432 10 0 703 +310 133 26 -30 277 377 10 743 0 +311 211 386 20 141 233 10 0 876 +312 94 97 -20 218 379 10 596 0 +313 30 155 -10 1249 1341 10 408 0 +314 208 184 20 78 167 0 0 1044 +315 394 333 20 166 284 10 0 662 +316 355 180 30 126 203 10 0 540 +317 241 180 -24 1666 1741 10 633 0 +318 21 485 30 328 439 10 0 111 +319 80 251 14 264 374 10 0 979 +320 476 61 36 392 536 0 0 1033 +321 406 94 10 220 355 10 0 455 +322 364 71 -20 1327 1400 10 183 0 +323 418 221 -30 273 340 10 298 0 +324 274 441 12 683 736 0 0 1041 +325 304 97 20 162 233 10 0 654 +326 297 102 10 155 281 10 0 870 +327 250 405 -15 155 266 10 370 0 +328 111 463 -10 313 360 10 585 0 +329 408 279 20 193 277 10 0 269 +330 263 418 -40 255 332 10 225 0 +331 480 119 -26 604 683 10 985 0 +332 420 383 -10 966 1028 10 297 0 +333 142 14 -10 796 905 10 530 0 +334 73 328 20 193 270 10 0 830 +335 50 438 -10 289 415 10 102 0 +336 441 7 20 377 437 10 0 278 +337 462 14 20 388 436 10 0 873 +338 360 294 -18 1389 1476 10 1 0 +339 58 39 12 1153 1202 10 0 156 +340 58 391 16 860 934 10 0 283 +341 410 285 20 163 273 10 0 301 +342 96 97 20 217 331 10 0 788 +343 21 64 -10 335 400 10 422 0 +344 238 210 -40 95 202 10 5 0 +345 479 121 -10 265 380 10 150 0 +346 200 178 -20 87 207 10 753 0 +347 216 341 19 611 726 10 0 458 +348 48 437 4 796 841 0 0 1009 +349 200 270 -30 53 206 10 838 0 +350 357 181 20 127 237 10 0 400 +351 476 174 -20 300 379 10 599 0 +352 400 286 10 154 270 10 0 181 +353 351 481 10 296 377 0 0 1008 +354 270 400 -30 151 211 10 850 0 +355 95 234 10 155 249 10 0 50 +356 128 113 -17 365 391 10 27 0 +357 133 455 -27 765 881 10 61 0 +358 16 463 -10 334 446 10 905 0 +359 59 388 20 641 715 10 0 387 +360 376 190 30 139 244 10 0 135 +361 481 122 -40 270 351 10 637 0 +362 266 405 -10 200 265 10 932 0 +363 374 232 33 125 268 10 0 159 +364 398 20 20 273 393 10 0 196 +365 481 26 30 321 419 10 0 108 +366 63 444 -23 344 445 10 835 0 +367 89 290 20 165 240 10 0 737 +368 246 314 36 1422 1499 10 0 795 +369 40 304 -20 1098 1221 10 308 0 +370 262 369 15 119 179 10 0 327 +371 323 29 -20 1093 1212 10 810 0 +372 89 65 -20 694 776 10 947 0 +373 144 35 26 239 323 10 0 411 +374 200 265 -26 107 228 10 244 0 +375 436 264 20 186 294 10 0 775 +376 15 457 20 313 408 10 0 461 +377 397 20 20 275 315 10 0 57 +378 328 491 -36 663 723 10 49 0 +379 399 175 -20 708 816 10 806 0 +380 432 2 -20 427 537 10 41 0 +381 63 336 20 223 340 0 0 1031 +382 6 296 10 326 343 10 0 97 +383 146 376 8 238 261 10 0 255 +384 295 247 -20 1259 1377 10 603 0 +385 235 33 30 1306 1397 10 0 836 +386 233 204 -10 49 126 10 261 0 +387 142 360 -20 1490 1603 10 359 0 +388 177 156 25 147 217 10 0 34 +389 315 287 30 136 191 10 0 214 +390 452 172 9 572 675 10 0 648 +391 263 153 -20 410 445 10 866 0 +392 493 493 -10 832 910 10 3 0 +393 320 283 -30 92 159 10 93 0 +394 64 5 -8 1117 1170 10 717 0 +395 95 235 -1 155 230 10 538 0 +396 203 211 -20 1259 1384 10 605 0 +397 16 497 -10 389 493 10 624 0 +398 348 348 -11 894 1005 10 459 0 +399 485 104 -20 760 858 10 446 0 +400 330 147 -20 802 925 10 350 0 +401 443 237 20 193 309 10 0 650 +402 316 286 30 104 199 10 0 87 +403 335 46 -10 1300 1413 10 1000 0 +404 381 495 20 304 371 10 0 265 +405 364 173 30 173 218 10 0 502 +406 267 162 6 1427 1502 0 0 1040 +407 214 245 8 36 129 10 0 116 +408 92 234 10 197 302 10 0 313 +409 347 459 25 433 556 10 0 39 +410 30 7 -32 1167 1240 10 687 0 +411 120 37 -26 737 843 10 373 0 +412 397 153 29 851 944 0 0 1036 +413 210 29 -18 1016 1116 10 558 0 +414 87 285 30 191 322 10 0 160 +415 132 32 -20 770 828 10 827 0 +416 390 294 20 222 282 10 0 909 +417 67 451 -10 1166 1296 10 925 0 +418 24 68 -31 372 486 10 462 0 +419 146 439 10 249 299 10 0 839 +420 209 212 -20 1511 1575 10 872 0 +421 6 292 10 247 358 10 0 177 +422 18 63 10 310 399 10 0 343 +423 149 98 -23 1151 1210 10 663 0 +424 91 268 -20 220 300 10 77 0 +425 103 177 -30 617 665 10 887 0 +426 367 178 20 154 237 10 0 814 +427 225 269 -10 1262 1309 10 65 0 +428 443 246 20 203 287 10 0 560 +429 306 42 11 476 508 10 0 42 +430 374 306 -15 958 1060 10 934 0 +431 413 421 -10 262 373 10 55 0 +432 470 405 17 883 998 10 0 250 +433 33 278 -20 1473 1532 10 152 0 +434 149 458 -29 1137 1220 10 668 0 +435 257 57 -14 1167 1314 10 652 0 +436 272 403 -20 154 300 10 974 0 +437 221 291 9 50 201 0 0 1017 +438 1 101 8 1237 1307 10 0 921 +439 332 459 -5 362 406 10 741 0 +440 220 392 20 246 299 10 0 90 +441 253 50 27 209 272 10 0 564 +442 250 441 5 721 820 10 0 78 +443 471 484 -20 321 414 10 949 0 +444 480 152 -31 971 1102 10 592 0 +445 404 83 -20 272 354 10 267 0 +446 476 94 20 274 395 10 0 399 +447 458 213 22 1112 1175 10 0 790 +448 215 395 -30 215 299 10 855 0 +449 85 288 20 169 286 10 0 562 +450 179 75 13 699 811 10 0 759 +451 228 287 21 43 125 10 0 746 +452 397 18 10 274 399 10 0 781 +453 238 204 -17 81 159 10 929 0 +454 488 3 3 356 475 10 0 820 +455 407 88 -10 272 406 10 321 0 +456 459 14 -20 315 442 10 231 0 +457 120 17 30 266 345 10 0 621 +458 235 316 -19 608 734 10 347 0 +459 370 382 11 855 942 10 0 398 +460 405 454 -10 1274 1361 10 15 0 +461 17 458 -20 410 487 10 376 0 +462 43 135 31 236 297 10 0 418 +463 318 497 21 814 924 10 0 893 +464 199 268 20 54 140 10 0 785 +465 111 467 20 257 366 10 0 182 +466 138 438 20 261 344 10 0 917 +467 172 314 -10 501 619 10 601 0 +468 494 468 -10 327 419 10 962 0 +469 35 303 -10 221 313 10 923 0 +470 341 59 -10 776 833 10 142 0 +471 423 221 -10 219 327 10 958 0 +472 395 295 -15 151 303 10 989 0 +473 413 417 10 341 401 0 0 1030 +474 339 60 20 209 269 10 0 751 +475 277 428 7 447 564 10 0 834 +476 176 199 28 89 186 10 0 508 +477 265 240 9 18 145 10 0 285 +478 365 190 -34 1432 1552 10 877 0 +479 133 53 20 229 363 10 0 31 +480 387 488 20 324 429 10 0 202 +481 385 295 20 142 289 10 0 597 +482 491 369 28 698 792 10 0 649 +483 445 273 -10 248 297 10 516 0 +484 195 273 -30 59 137 10 967 0 +485 313 493 -27 1168 1249 10 4 0 +486 495 227 20 317 400 10 0 801 +487 241 403 -10 185 285 10 853 0 +488 30 72 -10 429 464 10 955 0 +489 21 487 10 329 439 10 0 62 +490 324 99 -30 302 404 10 787 0 +491 453 318 -13 353 424 10 227 0 +492 443 272 -20 218 353 10 707 0 +493 447 184 27 380 498 10 0 249 +494 366 288 -27 660 737 10 655 0 +495 440 284 -40 808 926 10 26 0 +496 13 314 14 245 296 10 0 100 +497 72 227 25 532 626 10 0 879 +498 377 385 -16 837 925 10 807 0 +499 477 478 20 362 453 10 0 200 +500 204 185 -10 142 215 10 706 0 +501 226 191 20 74 142 10 0 190 +502 330 138 -30 1085 1165 10 405 0 +503 185 434 -12 547 631 10 920 0 +504 483 22 10 325 436 10 0 998 +505 71 282 -20 587 726 10 818 0 +506 60 5 -15 1040 1078 10 574 0 +507 189 402 10 480 622 0 0 1022 +508 134 211 -28 122 198 10 476 0 +509 146 313 -17 1160 1260 10 511 0 +510 21 146 21 457 547 10 0 832 +511 37 281 17 478 539 10 0 509 +512 416 417 -8 296 420 10 724 0 +513 44 311 -10 382 462 10 75 0 +514 361 181 -20 178 246 10 143 0 +515 444 242 10 194 302 10 0 690 +516 444 271 10 216 305 10 0 483 +517 359 179 20 133 222 10 0 769 +518 388 334 20 161 272 10 0 685 +519 401 164 13 601 672 10 0 529 +520 499 316 18 611 663 10 0 843 +521 399 106 -10 285 349 10 670 0 +522 425 215 -20 201 287 10 874 0 +523 407 98 10 218 296 10 0 861 +524 406 460 2 715 753 10 0 910 +525 88 95 -20 254 317 10 800 0 +526 95 64 4 760 802 10 0 964 +527 306 229 -20 1287 1383 10 74 0 +528 273 55 20 196 306 10 0 750 +529 384 149 -13 1156 1269 10 519 0 +530 122 35 10 250 327 10 0 333 +531 308 199 -27 1484 1562 10 951 0 +532 390 301 10 149 254 10 0 577 +533 300 108 10 150 215 10 0 667 +534 267 400 -10 188 306 10 148 0 +535 8 300 -30 342 400 10 19 0 +536 105 181 -10 1499 1593 10 742 0 +537 398 325 30 208 289 10 0 863 +538 166 247 1 84 215 10 0 395 +539 140 431 -21 211 277 10 228 0 +540 253 118 -30 508 616 10 316 0 +541 359 246 -20 1382 1493 10 260 0 +542 321 277 10 75 221 10 0 67 +543 168 59 6 343 420 10 0 125 +544 406 285 -30 159 229 10 216 0 +545 391 334 -20 164 264 10 63 0 +546 437 19 15 998 1060 10 0 232 +547 201 278 13 56 151 10 0 623 +548 435 267 20 278 397 10 0 777 +549 245 408 10 164 273 10 0 154 +550 16 462 10 335 467 10 0 554 +551 107 374 -18 890 969 10 144 0 +552 477 97 -30 273 342 10 117 0 +553 346 57 -10 288 359 10 732 0 +554 14 459 -10 315 399 10 550 0 +555 102 6 3 1406 1526 10 0 109 +556 359 287 24 115 190 10 0 758 +557 297 131 25 1128 1232 10 0 115 +558 282 1 18 995 1120 10 0 413 +559 21 70 -10 747 825 10 640 0 +560 440 244 -20 261 302 10 428 0 +561 482 104 -20 774 871 10 576 0 +562 120 261 -20 775 842 10 449 0 +563 125 29 30 255 342 10 0 212 +564 292 32 -27 222 327 10 441 0 +565 262 92 -10 594 697 10 660 0 +566 68 160 -18 1115 1187 10 614 0 +567 405 276 -14 202 296 10 644 0 +568 277 50 10 201 346 10 0 118 +569 32 319 21 370 462 10 0 696 +570 344 70 -12 1105 1216 10 720 0 +571 481 84 -10 473 569 10 813 0 +572 21 68 -10 384 448 10 816 0 +573 441 244 10 235 350 10 0 207 +574 57 43 15 994 1082 10 0 506 +575 1 293 -30 252 353 10 243 0 +576 481 96 20 284 339 10 0 561 +577 471 368 -10 389 498 10 532 0 +578 236 126 23 124 274 10 0 715 +579 406 99 20 226 258 10 0 674 +580 303 186 -11 1338 1400 10 131 0 +581 225 369 38 121 204 10 0 238 +582 412 453 -10 259 375 10 671 0 +583 104 349 20 979 1069 10 0 130 +584 173 182 25 102 220 10 0 904 +585 111 464 10 274 378 10 0 328 +586 53 440 10 300 376 10 0 770 +587 69 336 -30 200 301 10 869 0 +588 359 182 20 177 272 10 0 273 +589 13 459 20 315 430 10 0 185 +590 244 277 -15 1281 1352 10 626 0 +591 484 177 -20 245 394 10 888 0 +592 452 206 31 464 550 10 0 444 +593 22 483 30 325 418 10 0 899 +594 452 110 14 311 400 10 0 673 +595 347 192 -23 1461 1545 10 604 0 +596 95 92 20 235 300 10 0 312 +597 368 311 -20 906 976 10 481 0 +598 479 387 -13 362 463 10 133 0 +599 479 169 20 266 382 10 0 351 +600 497 266 -20 696 829 10 215 0 +601 66 336 10 211 325 10 0 467 +602 376 195 10 189 203 10 0 778 +603 401 281 20 259 293 10 0 384 +604 441 177 23 980 1052 10 0 595 +605 231 203 20 50 177 10 0 396 +606 21 488 10 346 406 10 0 279 +607 231 204 20 127 203 10 0 760 +608 122 422 -10 1428 1516 10 704 0 +609 65 453 30 277 317 10 0 782 +610 206 261 -20 161 234 10 868 0 +611 466 149 16 1166 1236 0 0 1028 +612 313 119 -10 175 287 10 767 0 +613 90 274 -20 161 292 10 823 0 +614 39 162 18 541 620 10 0 566 +615 35 306 20 222 278 10 0 641 +616 437 15 30 325 415 10 0 726 +617 307 412 -10 374 464 10 82 0 +618 79 291 10 215 233 10 0 40 +619 64 437 11 866 1001 10 0 46 +620 376 92 -21 944 1068 10 96 0 +621 129 27 -30 285 341 10 457 0 +622 196 489 -20 996 1094 10 657 0 +623 51 286 -13 1435 1513 10 547 0 +624 20 488 10 339 435 10 0 397 +625 13 455 -30 313 414 10 975 0 +626 170 347 15 409 492 10 0 590 +627 92 230 20 167 240 10 0 43 +628 117 467 10 254 348 10 0 860 +629 413 217 20 166 237 10 0 731 +630 405 450 -20 253 350 10 71 0 +631 394 322 -11 987 1092 10 794 0 +632 125 61 -10 577 676 10 44 0 +633 238 123 24 739 854 10 0 317 +634 11 403 -22 316 399 10 139 0 +635 89 272 10 180 234 10 0 930 +636 304 102 30 170 254 10 0 884 +637 478 121 40 267 400 10 0 361 +638 408 84 -10 256 342 10 23 0 +639 376 494 30 274 376 10 0 680 +640 20 73 10 290 392 10 0 559 +641 159 299 -20 980 1082 10 615 0 +642 95 382 19 226 267 10 0 966 +643 352 63 -12 1148 1238 10 646 0 +644 365 274 14 117 198 10 0 567 +645 30 301 -10 243 343 10 307 0 +646 351 5 12 479 543 10 0 643 +647 197 267 10 69 178 10 0 45 +648 498 171 -9 1237 1305 10 390 0 +649 468 352 -28 751 815 10 482 0 +650 418 251 -20 1146 1278 10 401 0 +651 489 437 -18 669 775 10 104 0 +652 251 63 14 960 1044 10 0 435 +653 132 55 -20 244 321 10 733 0 +654 281 96 -20 1086 1195 10 325 0 +655 333 293 27 583 681 10 0 494 +656 255 487 19 358 467 10 0 761 +657 207 400 20 156 304 10 0 622 +658 469 489 -20 540 601 10 773 0 +659 244 254 20 55 175 10 0 976 +660 233 207 10 46 99 10 0 565 +661 441 60 -20 1411 1537 10 729 0 +662 411 379 -20 1156 1260 10 315 0 +663 178 72 23 733 811 10 0 423 +664 51 447 -17 280 363 10 147 0 +665 478 118 -20 314 425 10 776 0 +666 141 426 -20 517 575 10 996 0 +667 295 89 -10 724 790 10 533 0 +668 112 433 29 229 348 10 0 434 +669 320 211 16 946 1070 0 0 1024 +670 400 103 10 220 321 10 0 521 +671 408 453 10 257 340 10 0 582 +672 435 180 37 207 272 10 0 247 +673 432 66 -14 1029 1144 10 594 0 +674 374 116 -20 570 634 10 579 0 +675 478 102 10 293 385 10 0 977 +676 335 57 30 210 338 10 0 819 +677 385 239 21 763 838 10 0 711 +678 386 245 16 464 524 10 0 854 +679 208 396 20 151 283 10 0 218 +680 380 489 -30 359 429 10 639 0 +681 380 498 10 289 336 10 0 289 +682 440 7 -20 308 370 10 165 0 +683 434 245 -20 317 396 10 123 0 +684 90 232 10 161 308 10 0 919 +685 389 334 -20 162 248 10 518 0 +686 241 205 30 81 184 10 0 206 +687 18 24 32 609 678 10 0 410 +688 57 183 -32 1096 1135 10 193 0 +689 59 457 30 281 424 10 0 9 +690 442 243 -10 256 351 10 515 0 +691 402 281 20 224 307 10 0 222 +692 445 237 -19 195 285 10 114 0 +693 441 273 20 283 311 0 0 1019 +694 31 175 24 240 284 10 0 241 +695 234 202 10 50 202 10 0 859 +696 52 303 -21 432 481 10 569 0 +697 167 445 -6 1392 1462 10 913 0 +698 179 286 8 328 385 0 0 1004 +699 269 48 -20 238 353 10 852 0 +700 165 59 27 915 1001 10 0 270 +701 461 8 -20 357 412 10 829 0 +702 421 415 -10 237 303 10 798 0 +703 59 459 -10 294 359 10 309 0 +704 24 492 10 442 512 10 0 608 +705 55 449 -20 278 382 10 268 0 +706 224 192 10 63 173 10 0 500 +707 444 269 20 206 292 10 0 492 +708 491 20 20 402 415 10 0 132 +709 313 126 10 235 282 0 0 1029 +710 283 438 -30 212 281 10 906 0 +711 352 241 -21 776 839 10 677 0 +712 398 476 25 355 512 10 0 277 +713 442 247 -20 227 285 10 971 0 +714 217 207 26 1349 1446 0 0 1001 +715 233 87 -23 221 315 10 578 0 +716 479 127 20 259 326 10 0 219 +717 6 53 8 578 625 10 0 394 +718 478 300 12 852 958 10 0 912 +719 378 493 -20 274 390 10 915 0 +720 303 78 12 179 317 10 0 570 +721 344 62 10 337 385 10 0 997 +722 371 315 -10 1133 1228 10 771 0 +723 200 78 -15 942 1073 10 730 0 +724 413 391 8 215 320 10 0 512 +725 415 216 10 168 261 10 0 891 +726 397 57 -30 1444 1538 10 616 0 +727 293 228 19 48 198 10 0 954 +728 0 297 10 264 352 10 0 993 +729 435 20 20 346 446 10 0 661 +730 195 111 15 955 1071 10 0 723 +731 417 218 -20 247 339 10 629 0 +732 340 54 10 249 256 10 0 553 +733 132 57 20 226 339 10 0 653 +734 210 379 -10 698 750 10 2 0 +735 228 260 -24 1546 1696 10 911 0 +736 399 104 10 285 324 10 0 926 +737 95 277 -20 223 356 10 367 0 +738 360 284 -20 635 728 10 983 0 +739 53 466 9 318 382 10 0 946 +740 112 465 10 272 357 10 0 280 +741 313 391 5 154 222 10 0 439 +742 93 235 10 248 274 10 0 536 +743 125 32 30 251 335 10 0 310 +744 215 282 -23 1383 1527 10 173 0 +745 224 320 -36 1256 1341 10 292 0 +746 134 428 -21 264 383 10 451 0 +747 26 490 10 461 518 10 0 128 +748 44 115 24 246 342 10 0 145 +749 438 127 -20 919 993 10 896 0 +750 239 15 -20 552 686 10 528 0 +751 342 54 -20 224 306 10 474 0 +752 109 463 30 319 379 10 0 229 +753 199 187 20 81 209 10 0 346 +754 201 188 -20 98 209 10 124 0 +755 399 301 -10 180 238 10 894 0 +756 484 171 -20 274 343 10 170 0 +757 272 234 -23 1583 1627 10 291 0 +758 380 350 -24 855 908 10 556 0 +759 140 108 -13 1039 1134 10 450 0 +760 228 199 -20 113 186 10 607 0 +761 245 461 -19 609 720 10 656 0 +762 305 107 -10 186 294 10 235 0 +763 231 195 -20 91 157 10 272 0 +764 450 265 -10 200 290 10 155 0 +765 273 149 -19 1493 1542 10 94 0 +766 12 358 7 1191 1287 10 0 221 +767 315 121 10 166 270 10 0 612 +768 420 213 -10 183 255 10 300 0 +769 331 134 -20 1100 1177 10 517 0 +770 84 377 -10 907 975 10 586 0 +771 320 280 10 76 174 10 0 722 +772 89 185 -10 577 652 10 900 0 +773 472 481 20 320 407 10 0 658 +774 422 420 20 253 303 10 0 70 +775 475 267 -20 756 833 10 375 0 +776 470 125 20 253 372 10 0 665 +777 435 268 -20 290 364 10 548 0 +778 409 155 -10 185 314 10 602 0 +779 243 248 30 7 126 10 0 991 +780 488 96 22 1030 1133 10 0 938 +781 341 72 -10 778 861 10 452 0 +782 58 449 -30 341 414 10 609 0 +783 16 460 20 375 476 10 0 32 +784 480 136 22 256 341 10 0 963 +785 162 388 -20 1090 1193 10 464 0 +786 47 208 30 207 300 10 0 857 +787 324 127 30 143 238 10 0 490 +788 87 96 -20 227 367 10 342 0 +789 140 137 -7 531 638 10 189 0 +790 314 205 -22 1485 1598 10 447 0 +791 96 346 -5 181 267 10 922 0 +792 321 280 30 77 190 10 0 992 +793 245 251 10 5 73 10 0 230 +794 436 295 11 505 581 10 0 631 +795 274 261 -36 1683 1760 10 368 0 +796 271 128 -20 325 397 10 51 0 +797 275 45 20 206 298 10 0 849 +798 422 409 10 234 363 10 0 702 +799 146 188 6 1204 1295 0 0 1035 +800 93 96 20 219 318 10 0 525 +801 409 255 -20 1487 1587 10 486 0 +802 449 428 25 1216 1307 10 0 831 +803 90 285 -10 245 338 10 161 0 +804 415 95 -16 1142 1242 10 978 0 +805 88 287 30 253 303 10 0 30 +806 379 196 20 153 266 10 0 379 +807 368 452 16 627 743 10 0 498 +808 202 186 20 150 182 10 0 961 +809 435 11 40 302 341 10 0 288 +810 269 46 20 205 362 10 0 371 +811 7 292 -16 246 365 10 47 0 +812 44 496 -11 381 453 10 833 0 +813 478 99 10 306 347 10 0 571 +814 391 99 -20 206 266 10 426 0 +815 132 477 25 310 374 10 0 76 +816 24 65 10 338 423 10 0 572 +817 130 247 17 120 187 10 0 18 +818 133 273 20 119 206 10 0 505 +819 347 62 -30 310 386 10 676 0 +820 404 140 -3 1239 1309 10 454 0 +821 416 420 -20 289 321 10 828 0 +822 67 335 20 222 291 10 0 258 +823 92 270 20 203 340 10 0 613 +824 411 95 30 223 296 10 0 20 +825 132 479 11 257 342 10 0 113 +826 366 334 5 378 473 10 0 178 +827 125 39 20 245 316 10 0 415 +828 419 422 20 251 332 10 0 821 +829 460 2 20 332 403 10 0 701 +830 67 334 -20 201 326 10 334 0 +831 448 414 -25 1201 1275 10 802 0 +832 46 163 -21 896 987 10 510 0 +833 77 465 11 275 385 10 0 812 +834 284 319 -7 791 872 10 475 0 +835 102 422 23 226 392 10 0 366 +836 240 34 -30 1501 1595 10 385 0 +837 141 428 -30 208 368 10 867 0 +838 204 269 30 49 144 10 0 349 +839 144 439 -10 226 347 10 419 0 +840 470 417 -15 679 825 10 194 0 +841 404 103 20 226 288 10 0 205 +842 5 281 -13 1336 1438 10 295 0 +843 487 320 -18 826 920 10 520 0 +844 398 23 10 270 371 10 0 846 +845 90 296 20 166 255 10 0 882 +846 386 13 -10 301 403 10 844 0 +847 115 465 10 253 330 10 0 25 +848 473 475 10 383 481 0 0 1011 +849 275 42 -20 209 326 10 797 0 +850 286 356 30 111 214 10 0 354 +851 15 69 10 296 356 10 0 914 +852 267 44 20 233 309 10 0 699 +853 243 399 10 210 289 10 0 487 +854 390 249 -16 572 621 10 678 0 +855 210 391 30 146 249 10 0 448 +856 433 15 20 297 375 10 0 953 +857 24 259 -30 332 439 10 786 0 +858 12 463 20 334 418 10 0 972 +859 237 213 -10 114 210 10 695 0 +860 182 480 -10 320 440 10 628 0 +861 409 88 -10 247 324 10 523 0 +862 244 368 -10 371 487 10 59 0 +863 381 328 -30 697 768 10 537 0 +864 213 185 -10 74 200 10 293 0 +865 482 141 -25 991 1061 10 275 0 +866 319 124 20 143 255 10 0 391 +867 141 431 30 211 337 10 0 837 +868 198 264 20 123 187 10 0 610 +869 69 334 30 199 252 10 0 587 +870 299 98 -10 159 248 10 326 0 +871 240 250 10 19 85 10 0 252 +872 199 203 20 1458 1487 10 0 420 +873 459 17 -20 364 488 10 337 0 +874 423 217 20 217 297 10 0 522 +875 477 179 20 237 381 10 0 245 +876 213 397 -20 202 262 10 311 0 +877 405 187 34 1214 1318 10 0 478 +878 269 402 20 153 320 10 0 217 +879 53 204 -25 1044 1096 10 497 0 +880 13 394 15 357 418 10 0 120 +881 15 68 10 297 373 10 0 943 +882 56 268 -20 1031 1126 10 845 0 +883 360 184 10 198 274 10 0 85 +884 307 102 -30 186 264 10 636 0 +885 130 57 40 227 366 10 0 895 +886 250 328 -30 215 313 10 149 0 +887 91 231 30 179 252 10 0 425 +888 479 176 20 240 320 10 0 591 +889 420 224 -20 381 506 10 89 0 +890 461 182 13 608 680 10 0 226 +891 418 218 -10 238 326 10 725 0 +892 419 418 10 238 297 10 0 897 +893 336 493 -21 1470 1546 10 463 0 +894 389 300 10 147 221 10 0 755 +895 92 76 -40 1117 1191 10 885 0 +896 476 102 20 314 388 10 0 749 +897 418 399 -10 412 493 10 892 0 +898 109 56 27 239 359 10 0 92 +899 13 465 -30 759 819 10 593 0 +900 92 232 10 159 250 10 0 772 +901 394 47 5 290 366 0 0 1042 +902 16 287 12 240 331 10 0 970 +903 399 102 20 231 334 10 0 103 +904 143 158 -25 141 239 10 584 0 +905 18 484 10 329 381 10 0 358 +906 250 411 30 172 234 10 0 710 +907 19 273 25 949 1115 0 0 1034 +908 365 28 9 254 313 10 0 982 +909 387 297 -20 144 250 10 416 0 +910 433 447 -2 784 835 10 524 0 +911 214 274 24 1331 1438 10 0 735 +912 489 338 -12 1347 1478 10 718 0 +913 130 494 6 759 789 10 0 697 +914 23 67 -10 351 458 10 851 0 +915 374 489 20 269 407 10 0 719 +916 126 30 10 252 358 10 0 187 +917 112 467 -20 257 351 10 466 0 +918 489 274 31 490 608 10 0 928 +919 61 214 -10 323 390 10 684 0 +920 166 440 12 207 286 10 0 503 +921 56 75 -8 1430 1476 10 438 0 +922 210 276 5 47 116 10 0 791 +923 80 286 10 173 307 10 0 469 +924 17 459 10 375 500 10 0 119 +925 66 448 10 270 382 10 0 417 +926 351 128 -10 1214 1322 10 736 0 +927 352 176 20 126 228 10 0 933 +928 490 286 -31 496 579 10 918 0 +929 247 219 17 31 128 10 0 453 +930 86 268 -10 190 274 10 635 0 +931 398 329 17 167 302 10 0 98 +932 272 402 10 153 216 10 0 362 +933 317 123 -20 177 233 10 927 0 +934 408 318 15 605 712 10 0 430 +935 66 31 -2 1018 1109 10 174 0 +936 425 448 -20 759 860 10 253 0 +937 35 304 30 221 310 0 0 1020 +938 471 94 -22 969 1059 10 780 0 +939 470 473 -14 422 469 10 948 0 +940 224 56 13 1168 1235 10 0 54 +941 343 47 20 263 321 10 0 172 +942 52 18 28 851 893 10 0 99 +943 16 68 -10 296 403 10 881 0 +944 195 185 20 113 141 10 0 254 +945 92 236 20 227 318 10 0 286 +946 76 462 -9 930 1011 10 739 0 +947 124 56 20 231 322 10 0 372 +948 481 454 14 308 438 10 0 939 +949 477 483 20 337 424 10 0 443 +950 481 124 10 263 352 10 0 112 +951 389 156 27 692 770 10 0 531 +952 384 16 20 318 413 0 0 1046 +953 492 34 -20 781 871 10 856 0 +954 371 200 -19 217 262 10 727 0 +955 153 235 10 98 174 10 0 488 +956 428 202 24 857 981 0 0 1023 +957 257 391 22 1535 1670 0 0 1037 +958 421 218 10 235 303 10 0 471 +959 206 186 -20 149 257 10 248 0 +960 393 301 30 167 220 10 0 973 +961 204 187 -20 136 244 10 808 0 +962 468 475 10 313 405 10 0 468 +963 477 122 -22 281 410 10 784 0 +964 100 66 -4 1363 1466 10 526 0 +965 489 27 -10 402 470 10 969 0 +966 12 451 -19 311 428 10 642 0 +967 197 270 30 80 142 10 0 484 +968 311 422 29 948 1057 10 0 141 +969 489 17 10 370 419 10 0 965 +970 13 214 -12 1341 1396 10 902 0 +971 440 247 20 222 314 10 0 713 +972 28 467 -20 1299 1417 10 858 0 +973 388 325 -30 221 335 10 960 0 +974 270 401 20 152 241 10 0 436 +975 5 445 30 313 394 10 0 625 +976 198 271 -20 56 172 10 659 0 +977 480 131 -10 656 749 10 675 0 +978 437 98 16 1076 1182 10 0 804 +979 131 246 -14 815 879 10 319 0 +980 49 437 7 397 488 0 0 1010 +981 270 49 30 270 344 10 0 209 +982 337 41 -9 976 1058 10 908 0 +983 318 280 20 74 196 10 0 738 +984 154 392 9 171 263 10 0 168 +985 493 111 26 500 613 10 0 331 +986 399 450 -25 345 403 10 179 0 +987 67 452 30 272 383 10 0 140 +988 34 239 16 216 264 10 0 995 +989 343 276 15 96 237 10 0 472 +990 393 12 10 283 366 10 0 282 +991 236 247 -30 14 146 10 779 0 +992 340 291 -30 449 521 10 792 0 +993 3 292 -10 250 359 10 728 0 +994 209 68 27 1463 1625 0 0 1015 +995 18 225 -16 670 743 10 988 0 +996 147 435 20 211 308 10 0 666 +997 335 99 -10 1217 1249 10 721 0 +998 485 24 -10 326 449 10 504 0 +999 470 475 30 314 396 10 0 72 +1000 341 58 10 212 335 10 0 403 +1001 217 207 -26 1349 1446 10 714 0 +1002 313 282 -20 152 204 10 11 0 +1003 325 147 -14 1163 1241 10 69 0 +1004 179 286 -8 328 385 10 698 0 +1005 60 29 -32 1322 1433 10 79 0 +1006 467 114 -10 338 443 10 35 0 +1007 219 215 -32 46 177 10 234 0 +1008 351 481 -10 296 377 10 353 0 +1009 48 437 -4 796 841 10 348 0 +1010 49 437 -7 397 488 10 980 0 +1011 473 475 -10 383 481 10 848 0 +1012 34 169 -11 427 571 10 80 0 +1013 0 188 -26 890 1005 10 127 0 +1014 175 352 -12 1619 1685 10 246 0 +1015 209 68 -27 1463 1625 10 994 0 +1016 411 421 -20 283 377 10 211 0 +1017 221 291 -9 50 201 10 437 0 +1018 17 65 -20 315 369 10 204 0 +1019 441 273 -20 283 311 10 693 0 +1020 35 304 -30 221 310 10 937 0 +1021 90 477 -18 277 376 10 276 0 +1022 189 402 -10 480 622 10 507 0 +1023 428 202 -24 857 981 10 956 0 +1024 320 211 -16 946 1070 10 669 0 +1025 390 325 -30 192 340 10 201 0 +1026 365 74 -24 858 868 10 236 0 +1027 440 292 -24 888 1022 10 36 0 +1028 466 149 -16 1166 1236 10 611 0 +1029 313 126 -10 235 282 10 709 0 +1030 413 417 -10 341 401 10 473 0 +1031 63 336 -20 223 340 10 381 0 +1032 212 186 -11 1615 1737 10 153 0 +1033 476 61 -36 392 536 10 320 0 +1034 19 273 -25 949 1115 10 907 0 +1035 146 188 -6 1204 1295 10 799 0 +1036 397 153 -29 851 944 10 412 0 +1037 257 391 -22 1535 1670 10 957 0 +1038 213 399 -18 177 321 10 281 0 +1039 239 486 -3 1433 1562 10 13 0 +1040 267 162 -6 1427 1502 10 406 0 +1041 274 441 -12 683 736 10 324 0 +1042 394 47 -5 290 366 10 901 0 +1043 330 281 -14 1298 1393 10 284 0 +1044 208 184 -20 78 167 10 314 0 +1045 440 241 -10 277 355 10 303 0 +1046 384 16 -20 318 413 10 952 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1108.txt b/jsprit-instances/instances/lilim/1000/LRC1108.txt new file mode 100644 index 00000000..3cbaab7c --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1108.txt @@ -0,0 +1,1046 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 -10 849 964 10 939 0 +2 214 394 10 178 313 10 0 507 +3 476 483 10 324 443 10 0 290 +4 352 487 -22 854 980 10 277 0 +5 230 197 40 91 183 10 0 605 +6 175 239 -20 75 156 10 991 0 +7 133 202 -10 401 551 10 793 0 +8 328 458 -21 731 834 10 378 0 +9 25 499 -30 415 504 10 318 0 +10 226 423 -18 174 263 10 281 0 +11 313 282 20 121 236 10 0 795 +12 60 454 -30 315 410 10 689 0 +13 239 486 -10 1447 1548 10 628 0 +14 102 264 10 148 282 10 0 304 +15 408 452 10 256 358 10 0 893 +16 451 62 5 275 393 10 0 546 +17 203 390 40 147 254 10 0 440 +18 92 233 10 162 315 10 0 43 +19 7 300 -10 313 406 10 382 0 +20 409 90 20 225 383 10 0 23 +21 307 108 -9 198 306 10 477 0 +22 347 54 10 279 341 10 0 142 +23 406 87 -20 273 382 10 20 0 +24 371 332 14 478 612 10 0 631 +25 116 466 -10 254 334 10 740 0 +26 441 265 40 191 337 0 0 1029 +27 130 140 17 162 256 10 0 342 +28 80 117 24 795 883 10 0 566 +29 421 387 -20 760 872 10 897 0 +30 83 300 -20 488 541 10 818 0 +31 136 52 -20 250 365 10 733 0 +32 18 462 20 345 480 10 0 358 +33 390 120 -10 946 1093 10 323 0 +34 188 119 -24 928 1052 10 633 0 +35 467 114 10 335 446 10 0 749 +36 440 292 -11 896 1015 10 794 0 +37 268 400 20 190 326 0 0 1043 +38 391 202 14 148 235 10 0 629 +39 377 432 -25 786 906 10 301 0 +40 80 290 -20 174 331 10 830 0 +41 439 15 -40 301 420 10 809 0 +42 307 52 -13 893 978 10 129 0 +43 111 192 -10 1149 1279 10 18 0 +44 131 56 10 227 358 10 0 457 +45 88 286 -10 220 314 10 635 0 +46 69 414 -7 1222 1335 10 980 0 +47 41 232 16 209 252 10 0 786 +48 323 77 -18 1381 1460 10 403 0 +49 340 416 -30 302 370 10 436 0 +50 86 199 -10 250 335 10 742 0 +51 314 124 20 177 314 10 0 709 +52 375 191 30 138 254 0 0 1002 +53 226 175 -32 1623 1733 10 789 0 +54 242 106 -20 1224 1342 10 206 0 +55 417 417 10 285 409 10 0 71 +56 419 459 20 268 401 10 0 468 +57 389 11 -10 310 366 10 452 0 +58 450 416 25 512 672 10 0 184 +59 246 255 10 82 174 10 0 244 +60 71 333 10 197 238 10 0 869 +61 105 474 -30 408 564 10 752 0 +62 20 489 -30 341 455 10 593 0 +63 388 331 20 160 224 10 0 931 +64 92 259 4 361 467 10 0 696 +65 200 261 -30 123 239 10 838 0 +66 400 288 -20 154 279 10 472 0 +67 299 285 -8 1196 1341 10 202 0 +68 378 199 -19 166 279 10 114 0 +69 325 147 14 1145 1258 10 0 115 +70 421 386 29 762 917 10 0 662 +71 404 447 -10 250 365 10 55 0 +72 412 478 -10 915 1035 10 681 0 +73 26 67 15 1269 1395 10 0 438 +74 358 183 20 212 285 10 0 531 +75 30 302 -10 226 342 10 645 0 +76 176 470 -30 506 618 10 839 0 +77 96 270 20 155 251 10 0 803 +78 243 408 -11 1386 1512 10 154 0 +79 60 29 32 1305 1450 10 0 555 +80 34 169 -31 444 554 10 462 0 +81 407 280 -20 169 279 10 603 0 +82 277 403 10 155 283 10 0 237 +83 498 456 -20 1368 1473 10 392 0 +84 384 491 -20 306 420 10 986 0 +85 355 174 -14 694 766 10 285 0 +86 97 288 -20 1260 1338 10 737 0 +87 316 284 -30 81 199 10 389 0 +88 334 403 26 174 258 10 0 338 +89 415 223 20 287 352 10 0 471 +90 230 320 -16 1153 1262 10 340 0 +91 432 199 -31 607 700 10 592 0 +92 92 18 -24 1071 1208 10 748 0 +93 273 300 30 55 176 10 0 983 +94 269 112 -20 1225 1331 10 501 0 +95 429 389 -20 387 492 10 211 0 +96 371 71 -20 253 351 10 814 0 +97 5 297 -10 282 410 10 575 0 +98 414 378 -8 445 574 10 724 0 +99 38 15 -28 1029 1183 10 942 0 +100 2 295 -10 264 377 10 728 0 +101 237 254 20 21 176 10 0 744 +102 54 445 10 276 403 10 0 782 +103 382 110 -9 1044 1211 10 674 0 +104 438 488 -20 303 422 10 915 0 +105 395 331 20 171 293 10 0 545 +106 230 487 -12 1097 1193 10 920 0 +107 249 407 10 157 275 10 0 906 +108 488 26 -20 384 512 10 195 0 +109 151 81 -28 1496 1616 10 411 0 +110 483 14 -20 331 456 10 708 0 +111 0 422 -23 787 885 10 835 0 +112 429 67 -10 699 796 10 171 0 +113 195 464 -20 1469 1591 10 220 0 +114 356 256 19 106 256 10 0 68 +115 264 180 -14 1589 1740 10 69 0 +116 94 235 -10 156 294 10 395 0 +117 474 96 30 271 410 10 0 232 +118 268 52 10 267 375 10 0 259 +119 44 440 24 744 863 10 0 766 +120 7 382 -17 734 837 10 147 0 +121 459 53 -36 1089 1186 10 320 0 +122 491 25 -10 367 480 10 504 0 +123 439 243 -20 245 413 10 971 0 +124 210 185 20 76 210 10 0 808 +125 150 68 -20 416 459 10 810 0 +126 201 270 10 52 131 10 0 967 +127 0 188 -21 884 1010 10 510 0 +128 103 464 22 1244 1332 10 0 608 +129 325 56 13 753 870 10 0 42 +130 44 344 12 1029 1159 10 0 163 +131 418 75 -20 396 529 10 941 0 +132 472 57 17 1244 1376 0 0 1042 +133 460 328 -30 224 355 10 491 0 +134 89 270 10 162 292 10 0 193 +135 374 190 -10 137 252 10 602 0 +136 463 253 -20 988 1136 10 707 0 +137 97 93 20 219 323 10 0 898 +138 163 472 -11 623 714 10 825 0 +139 29 336 -21 287 406 10 569 0 +140 84 453 -18 1196 1280 10 946 0 +141 294 421 -33 1550 1630 10 208 0 +142 343 62 -10 277 467 10 22 0 +143 371 193 -30 133 269 10 162 0 +144 142 372 18 162 248 10 0 292 +145 66 88 -4 786 904 10 526 0 +146 395 332 10 166 278 10 0 518 +147 93 413 17 226 333 10 0 120 +148 267 394 -40 197 352 10 225 0 +149 249 258 30 80 203 10 0 178 +150 472 129 10 252 388 0 0 1028 +151 87 3 -10 1401 1495 10 488 0 +152 62 326 -20 243 360 10 334 0 +153 212 186 -25 1621 1737 10 584 0 +154 241 402 11 1000 1080 10 0 78 +155 439 266 10 189 268 10 0 492 +156 79 80 -2 1351 1444 10 174 0 +157 62 453 -10 276 455 10 309 0 +158 188 151 -35 1277 1347 10 508 0 +159 386 154 -13 1047 1185 10 519 0 +160 38 301 -20 243 379 10 615 0 +161 192 265 -22 71 207 10 484 0 +162 371 192 30 134 184 10 0 143 +163 64 294 -12 1064 1168 10 130 0 +164 381 494 10 312 385 10 0 936 +165 437 12 20 302 450 10 0 682 +166 186 135 24 687 778 10 0 723 +167 459 10 -20 318 407 10 231 0 +168 175 422 -20 1383 1540 10 448 0 +169 274 48 -10 203 333 10 533 0 +170 488 173 20 250 376 10 0 756 +171 398 97 10 212 291 10 0 112 +172 385 17 -9 767 880 10 908 0 +173 180 283 23 719 798 10 0 427 +174 71 12 2 297 398 10 0 156 +175 343 49 -10 246 313 10 1000 0 +176 248 251 20 2 100 10 0 695 +177 7 194 -18 874 1059 10 614 0 +178 322 290 -30 1436 1551 10 149 0 +179 410 399 25 218 318 10 0 892 +180 398 103 -10 208 380 10 736 0 +181 385 285 -16 804 962 10 678 0 +182 179 497 1 1383 1470 0 0 1013 +183 464 13 20 350 450 10 0 829 +184 492 335 -25 773 913 10 58 0 +185 27 464 -10 1242 1370 10 550 0 +186 231 29 14 1198 1284 10 0 994 +187 157 38 -18 1007 1118 10 333 0 +188 439 268 10 252 373 10 0 764 +189 149 214 -10 433 561 10 230 0 +190 187 73 -20 236 378 10 852 0 +191 429 169 -27 859 977 10 493 0 +192 350 199 21 1123 1309 10 0 790 +193 60 231 -10 966 1116 10 134 0 +194 448 404 15 556 672 10 0 912 +195 481 20 20 325 437 10 0 108 +196 436 25 -20 1264 1331 10 729 0 +197 111 459 -20 314 434 10 466 0 +198 389 17 10 318 443 10 0 952 +199 148 208 -8 483 600 10 407 0 +200 475 477 -20 375 464 10 773 0 +201 390 325 -30 205 327 10 755 0 +202 346 354 8 773 892 10 0 67 +203 91 266 -17 190 305 10 817 0 +204 17 65 20 297 479 10 0 241 +205 391 112 -10 966 1064 10 889 0 +206 224 203 20 53 127 10 0 54 +207 426 231 -20 992 1095 10 483 0 +208 260 472 33 989 1112 10 0 141 +209 265 0 -30 842 980 10 849 0 +210 391 293 20 187 294 10 0 854 +211 411 421 20 264 396 10 0 95 +212 132 30 -10 279 402 10 621 0 +213 475 480 30 331 458 10 0 949 +214 286 244 31 1248 1349 10 0 269 +215 436 237 20 186 355 10 0 428 +216 402 284 30 155 249 10 0 329 +217 287 397 12 509 650 10 0 722 +218 272 420 -19 1334 1468 10 656 0 +219 477 120 10 286 428 10 0 950 +220 145 434 20 211 360 10 0 113 +221 33 286 -19 1508 1592 10 857 0 +222 370 262 -10 1063 1165 10 771 0 +223 393 20 20 347 465 10 0 646 +224 330 308 -20 1129 1242 10 481 0 +225 246 398 40 148 268 10 0 148 +226 482 184 -20 1048 1196 10 579 0 +227 451 305 13 208 309 10 0 459 +228 226 316 21 70 161 10 0 641 +229 110 459 -20 305 420 10 837 0 +230 244 250 10 6 127 10 0 189 +231 458 16 20 313 442 10 0 167 +232 390 34 -30 1004 1147 10 117 0 +233 423 214 20 176 318 10 0 956 +234 219 215 32 46 135 10 0 261 +235 326 118 10 152 297 10 0 767 +236 365 74 24 788 938 10 0 470 +237 331 356 -10 690 763 10 82 0 +238 210 398 -30 186 252 10 855 0 +239 403 93 10 310 401 10 0 824 +240 248 404 -20 154 262 10 327 0 +241 65 62 -20 906 1076 10 204 0 +242 460 13 20 316 386 10 0 701 +243 0 293 -10 253 422 10 811 0 +244 211 248 -10 39 161 10 59 0 +245 484 174 10 246 362 10 0 249 +246 175 352 -11 1584 1685 10 785 0 +247 455 168 -37 848 916 10 672 0 +248 224 191 20 64 197 10 0 317 +249 439 156 -10 478 604 10 245 0 +250 434 359 -27 1327 1488 10 332 0 +251 118 314 26 285 420 10 0 258 +252 234 246 10 44 116 10 0 305 +253 406 450 -10 253 432 10 431 0 +254 75 118 21 364 485 10 0 879 +255 115 395 11 776 885 0 0 1011 +256 329 456 19 220 348 10 0 807 +257 218 403 -34 1260 1409 10 271 0 +258 149 341 -26 355 483 10 251 0 +259 253 74 -10 1298 1432 10 118 0 +260 436 241 -10 246 438 10 560 0 +261 238 203 -32 69 148 10 234 0 +262 405 455 40 294 418 10 0 680 +263 485 27 -3 391 530 10 454 0 +264 323 118 -30 150 247 10 787 0 +265 330 371 -15 522 626 10 370 0 +266 25 65 10 297 486 10 0 687 +267 406 96 -20 219 377 10 521 0 +268 49 451 -10 284 327 10 664 0 +269 307 249 -31 1341 1442 10 214 0 +270 178 135 -29 1445 1613 10 759 0 +271 299 353 34 114 208 10 0 257 +272 236 213 20 39 188 10 0 344 +273 355 177 20 127 249 10 0 517 +274 394 23 20 351 486 10 0 371 +275 306 235 -19 57 197 10 727 0 +276 90 477 -11 277 328 10 833 0 +277 379 486 22 619 754 10 0 4 +278 435 16 10 334 431 10 0 336 +279 8 497 40 368 477 10 0 704 +280 150 484 -29 572 708 10 668 0 +281 213 399 18 202 295 10 0 10 +282 391 18 10 315 470 0 0 1021 +283 111 392 -9 1116 1253 10 984 0 +284 330 281 -30 1293 1397 10 316 0 +285 344 203 14 106 259 10 0 85 +286 91 235 -10 205 363 10 424 0 +287 346 60 -20 277 395 10 474 0 +288 483 27 20 418 528 10 0 322 +289 382 498 -20 283 365 10 404 0 +290 457 492 -10 475 571 10 3 0 +291 291 213 23 1194 1351 10 0 527 +292 154 374 -18 893 1011 10 144 0 +293 225 196 10 59 175 10 0 391 +294 94 40 -15 1004 1163 10 574 0 +295 0 356 -20 1030 1173 10 366 0 +296 297 283 -20 1308 1421 10 416 0 +297 371 423 10 211 338 10 0 353 +298 417 217 30 170 274 10 0 874 +299 500 228 -20 714 879 10 486 0 +300 412 214 10 165 325 10 0 768 +301 442 289 25 195 363 10 0 39 +302 157 269 -20 1516 1667 10 659 0 +303 440 241 -10 253 380 10 573 0 +304 100 266 -10 150 265 10 14 0 +305 111 178 -10 156 262 10 252 0 +306 91 101 -30 246 381 10 788 0 +307 25 307 -30 232 361 10 937 0 +308 135 400 20 251 376 10 0 551 +309 58 458 10 283 398 10 0 157 +310 133 26 -20 280 374 10 479 0 +311 211 386 20 141 238 10 0 834 +312 94 97 20 218 369 10 0 525 +313 30 155 -15 1215 1375 10 688 0 +314 208 184 20 78 178 10 0 420 +315 394 333 20 166 305 10 0 758 +316 355 180 30 126 188 10 0 284 +317 241 180 -20 1655 1741 10 248 0 +318 21 485 30 328 437 10 0 9 +319 80 251 14 251 386 10 0 945 +320 476 61 36 354 574 10 0 121 +321 406 94 10 220 361 10 0 861 +322 364 71 -20 1315 1412 10 288 0 +323 418 221 10 234 379 10 0 33 +324 274 441 -10 668 751 10 549 0 +325 304 97 20 162 320 10 0 528 +326 297 102 10 155 268 10 0 870 +327 250 405 20 155 250 10 0 240 +328 111 463 -20 293 381 10 465 0 +329 408 279 -30 184 286 10 216 0 +330 263 418 25 252 335 10 0 761 +331 480 119 -40 589 698 10 637 0 +332 420 383 27 923 1071 10 0 250 +333 142 14 18 790 910 10 0 187 +334 73 328 20 193 284 10 0 152 +335 50 438 20 274 431 10 0 634 +336 441 7 -10 351 462 10 278 0 +337 462 14 20 363 462 10 0 873 +338 360 294 -26 1387 1479 10 88 0 +339 58 39 12 1111 1245 10 0 921 +340 58 391 16 851 944 10 0 90 +341 410 285 -20 163 358 10 544 0 +342 96 97 -17 217 324 10 27 0 +343 21 64 -10 295 457 10 881 0 +344 238 210 -20 90 207 10 272 0 +345 479 121 10 263 382 10 0 446 +346 200 178 -20 87 210 10 500 0 +347 216 341 -2 617 720 10 458 0 +348 48 437 -20 778 860 10 703 0 +349 200 270 20 53 145 10 0 610 +350 357 181 20 127 247 10 0 514 +351 476 174 30 273 405 10 0 390 +352 400 286 -10 154 303 10 894 0 +353 351 481 -10 280 394 10 297 0 +354 270 400 10 151 295 10 0 968 +355 95 234 10 155 256 10 0 900 +356 128 113 -12 320 436 10 904 0 +357 133 455 -10 785 861 10 917 0 +358 16 463 -20 321 459 10 32 0 +359 59 388 -30 629 726 10 987 0 +360 376 190 30 139 287 10 0 426 +361 481 122 30 264 412 10 0 780 +362 266 405 -20 181 283 10 974 0 +363 374 232 33 125 255 0 0 1034 +364 398 20 20 273 400 10 0 982 +365 481 26 30 321 455 10 0 456 +366 63 444 20 364 426 10 0 295 +367 89 290 20 165 264 10 0 923 +368 246 314 36 1416 1504 0 0 1026 +369 40 304 -10 1088 1231 10 618 0 +370 262 369 15 119 223 10 0 265 +371 323 29 -20 1098 1206 10 274 0 +372 89 65 -20 685 786 10 947 0 +373 144 35 -10 239 361 10 653 0 +374 200 265 -20 113 222 10 976 0 +375 436 264 20 186 283 10 0 516 +376 15 457 20 313 383 10 0 554 +377 397 20 20 272 410 10 0 990 +378 328 491 21 637 749 10 0 8 +379 399 175 -20 708 816 10 806 0 +380 432 2 20 420 543 0 0 1024 +381 63 336 20 221 341 10 0 387 +382 6 296 10 270 400 10 0 19 +383 146 376 8 187 312 10 0 791 +384 295 247 -16 1259 1378 10 669 0 +385 235 33 30 1285 1418 0 0 1031 +386 233 204 -30 49 181 10 779 0 +387 142 360 -20 1488 1606 10 381 0 +388 177 156 25 119 250 10 0 730 +389 315 287 30 122 204 10 0 87 +390 452 172 -30 590 657 10 351 0 +391 263 153 -10 380 474 10 293 0 +392 493 493 20 801 942 10 0 83 +393 320 283 -30 78 173 10 402 0 +394 64 5 -10 1069 1219 10 422 0 +395 95 235 10 155 242 10 0 116 +396 203 211 -28 1247 1395 10 425 0 +397 16 497 -10 364 518 10 606 0 +398 348 348 -20 913 986 10 685 0 +399 485 104 -10 751 868 10 963 0 +400 330 147 28 796 931 10 0 580 +401 443 237 20 193 288 10 0 692 +402 316 286 30 82 222 10 0 393 +403 335 46 18 1300 1414 10 0 48 +404 381 495 20 286 389 10 0 289 +405 364 173 -20 137 302 10 927 0 +406 267 162 -21 1401 1527 10 864 0 +407 214 245 8 36 134 10 0 199 +408 92 234 10 184 315 10 0 627 +409 347 459 -35 435 554 10 439 0 +410 30 7 23 1145 1262 0 0 1008 +411 120 37 28 727 853 10 0 109 +412 397 153 29 833 961 10 0 595 +413 210 29 -10 1014 1117 10 568 0 +414 87 285 30 200 313 10 0 449 +415 132 32 18 769 830 0 0 1023 +416 390 294 20 199 305 10 0 296 +417 67 451 -11 1178 1284 10 619 0 +418 24 68 20 370 489 10 0 423 +419 146 439 10 224 324 10 0 860 +420 209 212 -20 1507 1578 10 314 0 +421 6 292 10 247 348 10 0 993 +422 18 63 10 297 457 10 0 394 +423 149 98 -20 1133 1227 10 418 0 +424 91 268 10 205 315 10 0 286 +425 103 177 28 556 726 10 0 396 +426 367 178 -30 137 266 10 360 0 +427 225 269 -23 1239 1332 10 173 0 +428 443 246 -20 193 329 10 215 0 +429 306 42 11 433 550 10 0 570 +430 374 306 4 959 1060 0 0 1039 +431 413 421 10 272 363 10 0 253 +432 470 405 17 890 991 0 0 1038 +433 33 278 -16 1433 1571 10 988 0 +434 149 458 -10 1142 1216 10 847 0 +435 257 57 -12 1180 1302 10 720 0 +436 272 403 30 154 300 10 0 49 +437 221 291 9 50 157 10 0 911 +438 1 101 -15 1213 1332 10 73 0 +439 332 459 35 359 409 10 0 409 +440 220 392 -40 231 314 10 17 0 +441 253 50 27 200 365 10 0 964 +442 250 441 -10 690 851 10 534 0 +443 471 484 10 321 446 10 0 658 +444 480 152 -20 996 1077 10 599 0 +445 404 83 30 260 366 10 0 673 +446 476 94 -10 274 405 10 345 0 +447 458 213 -23 1064 1223 10 604 0 +448 215 395 20 184 330 10 0 168 +449 85 288 -30 169 266 10 414 0 +450 179 75 -10 713 796 10 530 0 +451 228 287 21 43 181 10 0 886 +452 397 18 10 274 408 10 0 57 +453 238 204 -10 71 169 10 859 0 +454 488 3 3 365 466 10 0 263 +455 407 88 10 262 417 10 0 638 +456 459 14 -30 315 446 10 365 0 +457 120 17 -10 266 419 10 44 0 +458 235 316 2 600 742 10 0 347 +459 370 382 -13 841 956 10 227 0 +460 405 454 -30 1236 1399 10 639 0 +461 17 458 -10 410 486 10 925 0 +462 43 135 31 236 340 10 0 80 +463 318 497 -5 800 938 10 741 0 +464 199 268 20 54 178 10 0 868 +465 111 467 20 257 364 10 0 328 +466 138 438 20 237 368 10 0 197 +467 172 314 -15 516 605 10 626 0 +468 494 468 -20 327 430 10 56 0 +469 35 303 -12 221 344 10 902 0 +470 341 59 -24 744 866 10 236 0 +471 423 221 -20 223 323 10 89 0 +472 395 295 20 171 281 10 0 66 +473 413 417 10 324 418 0 0 1010 +474 339 60 20 209 330 10 0 287 +475 277 428 7 480 531 0 0 1009 +476 176 199 -30 89 217 10 961 0 +477 265 240 9 18 144 10 0 21 +478 365 190 -27 1443 1541 10 951 0 +479 133 53 20 245 343 10 0 310 +480 387 488 20 290 463 0 0 1012 +481 385 295 20 142 270 10 0 224 +482 491 369 -19 681 809 10 577 0 +483 445 273 20 221 325 10 0 207 +484 195 273 22 59 166 10 0 161 +485 313 493 20 1172 1245 0 0 1033 +486 495 227 20 284 433 10 0 299 +487 241 403 10 156 315 10 0 710 +488 30 72 10 364 530 10 0 151 +489 21 487 10 329 463 10 0 747 +490 324 99 10 286 420 10 0 997 +491 453 318 30 324 453 10 0 133 +492 443 272 -10 223 347 10 155 0 +493 447 184 27 386 493 10 0 191 +494 366 288 29 608 790 10 0 541 +495 440 284 -20 812 922 10 693 0 +496 13 314 14 245 441 10 0 562 +497 72 227 25 522 636 0 0 1005 +498 377 385 6 816 947 0 0 1027 +499 477 478 -10 330 485 10 848 0 +500 204 185 20 130 226 10 0 346 +501 226 191 20 73 143 10 0 94 +502 330 138 -18 1074 1175 10 715 0 +503 185 434 -20 522 655 10 657 0 +504 483 22 10 325 458 10 0 122 +505 71 282 -20 600 714 10 822 0 +506 60 5 18 988 1129 10 0 935 +507 189 402 -10 482 621 10 2 0 +508 134 211 35 122 262 10 0 158 +509 146 313 22 1148 1272 10 0 745 +510 21 146 21 442 561 10 0 127 +511 37 281 17 437 580 10 0 513 +512 416 417 20 293 423 10 0 774 +513 44 311 -17 334 510 10 511 0 +514 361 181 -20 159 266 10 350 0 +515 444 242 10 208 254 10 0 690 +516 444 271 -20 205 317 10 375 0 +517 359 179 -20 130 237 10 273 0 +518 388 334 -10 161 294 10 146 0 +519 401 164 13 595 678 10 0 159 +520 499 316 -20 588 685 10 776 0 +521 399 106 20 267 367 10 0 267 +522 425 215 10 202 286 10 0 890 +523 407 98 10 218 364 0 0 1022 +524 406 460 -30 693 776 10 702 0 +525 88 95 -20 247 324 10 312 0 +526 95 64 4 732 829 10 0 145 +527 306 229 -23 1262 1409 10 291 0 +528 273 55 -20 196 296 10 325 0 +529 384 149 18 1181 1243 0 0 1030 +530 122 35 10 250 336 10 0 450 +531 308 199 -20 1460 1586 10 74 0 +532 390 301 10 149 287 10 0 537 +533 300 108 10 150 264 10 0 169 +534 267 400 10 196 298 10 0 442 +535 8 300 10 301 441 0 0 1025 +536 105 181 -26 1498 1594 10 632 0 +537 398 325 -10 169 327 10 532 0 +538 166 247 1 84 189 10 0 823 +539 140 431 30 211 359 10 0 746 +540 253 118 19 489 635 10 0 769 +541 359 246 -29 1349 1526 10 494 0 +542 321 277 10 75 185 10 0 992 +543 168 59 6 341 421 0 0 1019 +544 406 285 20 159 258 10 0 341 +545 391 334 -20 164 290 10 105 0 +546 437 19 -5 975 1082 10 16 0 +547 201 278 13 56 169 10 0 735 +548 435 267 20 255 421 10 0 777 +549 245 408 10 158 321 10 0 324 +550 16 462 10 346 456 10 0 185 +551 107 374 -20 849 1009 10 308 0 +552 477 97 10 273 414 0 0 1041 +553 346 57 -30 277 369 10 676 0 +554 14 459 -20 315 418 10 376 0 +555 102 6 -32 1424 1522 10 79 0 +556 359 287 24 115 199 10 0 644 +557 297 131 -30 1118 1242 10 612 0 +558 282 1 -10 1014 1100 10 846 0 +559 21 70 -10 741 832 10 851 0 +560 440 244 10 205 358 10 0 260 +561 482 104 -26 745 900 10 985 0 +562 120 261 -14 761 855 10 496 0 +563 125 29 30 253 404 10 0 700 +564 292 32 14 222 360 10 0 750 +565 262 92 -10 575 716 10 706 0 +566 68 160 -24 1098 1203 10 28 0 +567 405 276 -20 201 297 10 691 0 +568 277 50 10 201 317 10 0 413 +569 32 319 21 375 456 10 0 139 +570 344 70 -11 1110 1212 10 429 0 +571 481 84 17 423 619 0 0 1044 +572 21 68 -20 364 468 10 943 0 +573 441 244 10 203 382 10 0 303 +574 57 43 15 989 1088 10 0 294 +575 1 293 10 252 355 10 0 97 +576 481 96 20 277 371 10 0 938 +577 471 368 19 400 486 10 0 482 +578 236 126 23 124 301 10 0 667 +579 406 99 20 217 351 10 0 226 +580 303 186 -28 1316 1422 10 400 0 +581 225 369 38 121 231 10 0 734 +582 412 453 10 259 407 10 0 962 +583 104 349 -30 967 1082 10 609 0 +584 173 182 25 102 267 10 0 153 +585 111 464 10 255 412 0 0 1006 +586 53 440 10 274 402 10 0 705 +587 69 336 20 200 347 10 0 642 +588 359 182 20 162 287 10 0 883 +589 13 459 20 315 431 10 0 858 +590 244 277 -10 1252 1380 10 853 0 +591 484 177 -20 245 378 10 875 0 +592 452 206 31 461 554 10 0 91 +593 22 483 30 325 427 10 0 62 +594 452 110 14 295 415 10 0 865 +595 347 192 -29 1456 1550 10 412 0 +596 95 92 20 221 320 0 0 1036 +597 368 311 -8 873 1009 10 617 0 +598 479 387 13 345 480 10 0 649 +599 479 169 20 247 401 10 0 444 +600 497 266 25 698 828 10 0 775 +601 66 336 10 215 321 10 0 882 +602 376 195 10 150 242 10 0 135 +603 401 281 20 210 343 10 0 81 +604 441 177 23 950 1082 10 0 447 +605 231 203 -40 50 146 10 5 0 +606 21 488 10 330 459 10 0 397 +607 231 204 20 96 235 10 0 660 +608 122 422 -22 1420 1523 10 128 0 +609 65 453 30 274 357 10 0 583 +610 206 261 -20 120 274 10 349 0 +611 466 149 -20 1115 1288 10 841 0 +612 313 119 30 149 313 10 0 557 +613 90 274 20 161 268 10 0 930 +614 39 162 18 507 653 10 0 177 +615 35 306 20 222 301 10 0 160 +616 437 15 -20 300 449 10 856 0 +617 307 412 8 363 474 10 0 597 +618 79 291 10 175 317 10 0 369 +619 64 437 11 867 1000 10 0 417 +620 376 92 10 924 1088 10 0 643 +621 129 27 10 253 387 10 0 212 +622 196 489 -20 1002 1088 10 996 0 +623 51 286 -24 1423 1525 10 694 0 +624 20 488 -10 330 455 10 905 0 +625 13 455 10 313 434 10 0 966 +626 170 347 15 398 503 10 0 467 +627 92 230 -10 159 313 10 408 0 +628 117 467 10 254 357 10 0 13 +629 413 217 -14 166 298 10 38 0 +630 405 450 -10 253 389 10 798 0 +631 394 322 -14 1010 1069 10 24 0 +632 125 61 26 548 705 10 0 536 +633 238 123 24 749 843 10 0 34 +634 11 403 -20 300 416 10 335 0 +635 89 272 10 162 284 10 0 45 +636 304 102 30 161 262 10 0 762 +637 478 121 40 292 376 10 0 331 +638 408 84 -10 249 349 10 455 0 +639 376 494 30 274 402 10 0 460 +640 20 73 10 290 471 10 0 914 +641 159 299 -21 964 1098 10 228 0 +642 95 382 -20 203 307 10 587 0 +643 352 63 -10 1158 1229 10 620 0 +644 365 274 -24 117 230 10 556 0 +645 30 301 10 225 363 10 0 75 +646 351 5 -20 451 571 10 223 0 +647 197 267 -10 55 226 10 871 0 +648 498 171 -20 1261 1281 10 888 0 +649 468 352 -13 712 854 10 598 0 +650 418 251 21 1164 1259 10 0 801 +651 489 437 29 641 802 10 0 840 +652 251 63 -30 921 1084 10 981 0 +653 132 55 10 227 343 10 0 373 +654 281 96 -10 1068 1214 10 844 0 +655 333 293 -15 541 724 10 989 0 +656 255 487 19 343 483 10 0 218 +657 207 400 20 156 262 10 0 503 +658 469 489 -10 523 618 10 443 0 +659 244 254 20 33 197 10 0 302 +660 233 207 -20 46 177 10 607 0 +661 441 60 21 1434 1514 10 0 726 +662 411 379 -29 1133 1284 10 70 0 +663 178 72 -30 721 822 10 743 0 +664 51 447 10 289 329 10 0 268 +665 478 118 -22 300 438 10 784 0 +666 141 426 23 493 600 0 0 1015 +667 295 89 -23 714 800 10 578 0 +668 112 433 29 229 383 10 0 280 +669 320 211 16 942 1073 10 0 384 +670 400 103 10 216 326 10 0 903 +671 408 453 10 257 385 10 0 831 +672 435 180 37 197 344 10 0 247 +673 432 66 -30 1016 1156 10 445 0 +674 374 116 9 524 680 10 0 103 +675 478 102 -20 279 400 10 716 0 +676 335 57 30 210 289 10 0 553 +677 385 239 -10 747 855 10 954 0 +678 386 245 16 452 536 10 0 181 +679 208 396 20 151 261 10 0 876 +680 380 489 -40 342 445 10 262 0 +681 380 498 10 280 408 10 0 72 +682 440 7 -20 308 397 10 165 0 +683 434 245 -10 275 439 10 713 0 +684 90 232 10 161 295 10 0 772 +685 389 334 20 162 299 10 0 398 +686 241 205 30 45 233 10 0 757 +687 18 24 -10 568 718 10 266 0 +688 57 183 15 1039 1191 10 0 313 +689 59 457 30 299 399 10 0 12 +690 442 243 -10 240 368 10 515 0 +691 402 281 20 192 338 10 0 567 +692 445 237 -20 195 383 10 401 0 +693 441 273 20 228 366 10 0 495 +694 31 175 24 231 397 10 0 623 +695 234 202 -20 54 135 10 176 0 +696 52 303 -4 408 504 10 64 0 +697 167 445 -30 1383 1471 10 867 0 +698 179 286 -5 289 424 10 922 0 +699 269 48 20 244 347 10 0 940 +700 165 59 -30 907 1009 10 563 0 +701 461 8 -20 321 449 10 242 0 +702 421 415 30 237 412 10 0 524 +703 59 459 20 283 407 10 0 348 +704 24 492 -40 413 540 10 279 0 +705 55 449 -10 278 414 10 586 0 +706 224 192 10 63 157 10 0 565 +707 444 269 20 194 335 10 0 136 +708 491 20 20 366 451 10 0 110 +709 313 126 -20 164 353 10 51 0 +710 283 438 -10 200 292 10 487 0 +711 352 241 5 770 845 0 0 1014 +712 398 476 -30 396 471 10 719 0 +713 442 247 10 197 316 10 0 683 +714 217 207 -10 1356 1439 10 955 0 +715 233 87 18 186 349 10 0 502 +716 479 127 20 259 402 10 0 675 +717 6 53 -10 543 660 10 816 0 +718 478 300 -19 834 975 10 778 0 +719 378 493 30 274 413 10 0 712 +720 303 78 12 179 243 10 0 435 +721 344 62 10 301 421 10 0 781 +722 371 315 -12 1119 1243 10 217 0 +723 200 78 -24 960 1056 10 166 0 +724 413 391 8 215 349 10 0 98 +725 415 216 10 168 322 10 0 958 +726 397 57 -21 1432 1550 10 661 0 +727 293 228 19 48 206 10 0 275 +728 0 297 10 268 347 10 0 100 +729 435 20 20 344 449 10 0 196 +730 195 111 -25 942 1085 10 388 0 +731 417 218 10 257 329 10 0 891 +732 340 54 10 215 326 10 0 901 +733 132 57 20 226 300 10 0 31 +734 210 379 -38 661 787 10 581 0 +735 228 260 -13 1563 1678 10 547 0 +736 399 104 10 224 385 10 0 180 +737 95 277 20 222 357 10 0 86 +738 360 284 -30 613 750 10 792 0 +739 53 466 9 292 416 10 0 975 +740 112 465 10 255 373 10 0 25 +741 313 391 5 154 261 10 0 463 +742 93 235 10 195 327 10 0 50 +743 125 32 30 251 330 10 0 663 +744 215 282 -20 1380 1530 10 101 0 +745 224 320 -22 1231 1366 10 509 0 +746 134 428 -30 253 393 10 539 0 +747 26 490 -10 429 551 10 489 0 +748 44 115 24 246 389 10 0 92 +749 438 127 -10 893 1019 10 35 0 +750 239 15 -14 550 688 10 564 0 +751 342 54 20 216 317 10 0 819 +752 109 463 30 284 413 10 0 61 +753 199 187 20 90 194 0 0 1004 +754 201 188 10 79 251 10 0 872 +755 399 301 30 157 312 10 0 201 +756 484 171 -20 246 392 10 170 0 +757 272 234 -30 1538 1673 10 686 0 +758 380 350 -20 807 956 10 315 0 +759 140 108 29 1027 1145 10 0 270 +760 228 199 -20 96 203 10 763 0 +761 245 461 -25 615 714 10 330 0 +762 305 107 -30 160 321 10 636 0 +763 231 195 20 77 172 10 0 760 +764 450 265 -10 200 349 10 188 0 +765 273 149 -12 1457 1578 10 796 0 +766 12 358 -24 1177 1302 10 119 0 +767 315 121 -10 152 284 10 235 0 +768 420 213 -10 173 341 10 300 0 +769 331 134 -19 1086 1192 10 540 0 +770 84 377 -15 902 981 10 880 0 +771 320 280 10 76 208 10 0 222 +772 89 185 -10 537 693 10 684 0 +773 472 481 20 320 431 10 0 200 +774 422 420 -20 241 405 10 512 0 +775 475 267 -25 719 871 10 600 0 +776 470 125 20 253 349 10 0 520 +777 435 268 -20 270 384 10 548 0 +778 409 155 19 185 288 10 0 718 +779 243 248 30 7 171 10 0 386 +780 488 96 -30 1019 1143 10 361 0 +781 341 72 -10 747 893 10 721 0 +782 58 449 -10 305 451 10 102 0 +783 16 460 -10 371 481 10 924 0 +784 480 136 22 256 381 10 0 665 +785 162 388 11 1080 1203 10 0 246 +786 47 208 -16 207 323 10 47 0 +787 324 127 30 143 254 10 0 264 +788 87 96 30 224 379 10 0 306 +789 140 137 32 525 645 10 0 53 +790 314 205 -21 1490 1593 10 192 0 +791 96 346 -8 181 359 10 383 0 +792 321 280 30 77 180 10 0 738 +793 245 251 10 5 162 10 0 7 +794 436 295 11 511 575 10 0 36 +795 274 261 -20 1672 1772 10 11 0 +796 271 128 12 292 430 10 0 765 +797 275 45 20 206 310 10 0 836 +798 422 409 10 234 353 10 0 630 +799 146 188 -30 1168 1332 10 887 0 +800 93 96 20 219 317 10 0 832 +801 409 255 -21 1446 1629 10 650 0 +802 449 428 -20 1188 1336 10 910 0 +803 90 285 -20 225 358 10 77 0 +804 415 95 -16 1113 1270 10 978 0 +805 88 287 30 229 328 10 0 845 +806 379 196 20 139 288 10 0 379 +807 368 452 -19 636 734 10 256 0 +808 202 186 -20 113 220 10 124 0 +809 435 11 40 302 414 10 0 41 +810 269 46 20 227 341 10 0 125 +811 7 292 10 246 335 10 0 243 +812 44 496 32 374 460 10 0 972 +813 478 99 -20 273 408 10 896 0 +814 391 99 20 206 352 10 0 96 +815 132 477 25 260 425 10 0 913 +816 24 65 10 320 440 10 0 717 +817 130 247 17 120 256 10 0 203 +818 133 273 20 119 279 10 0 30 +819 347 62 -20 285 411 10 751 0 +820 404 140 8 1209 1339 10 0 877 +821 416 420 -20 241 369 10 828 0 +822 67 335 20 201 344 10 0 505 +823 92 270 -1 226 318 10 538 0 +824 411 95 -10 223 358 10 239 0 +825 132 479 11 257 363 10 0 138 +826 366 334 -30 368 483 10 960 0 +827 125 39 20 245 341 10 0 916 +828 419 422 20 241 375 10 0 821 +829 460 2 -20 324 489 10 183 0 +830 67 334 20 201 376 10 0 40 +831 448 414 -10 1182 1293 10 671 0 +832 46 163 -20 857 1025 10 800 0 +833 77 465 11 275 395 10 0 276 +834 284 319 -20 763 901 10 311 0 +835 102 422 23 226 346 10 0 111 +836 240 34 -20 1431 1595 10 797 0 +837 141 428 20 208 317 10 0 229 +838 204 269 30 49 143 10 0 65 +839 144 439 30 238 334 10 0 76 +840 470 417 -29 686 817 10 651 0 +841 404 103 20 212 370 10 0 611 +842 5 281 -8 1333 1441 10 995 0 +843 487 320 21 793 952 0 0 1017 +844 398 23 10 270 377 10 0 654 +845 90 296 -30 166 287 10 805 0 +846 386 13 10 301 403 10 0 558 +847 115 465 10 253 383 10 0 434 +848 473 475 10 365 500 10 0 499 +849 275 42 30 209 325 10 0 209 +850 286 356 30 111 206 10 0 862 +851 15 69 10 296 398 10 0 559 +852 267 44 20 214 327 10 0 190 +853 243 399 10 197 303 10 0 590 +854 390 249 -20 550 643 10 210 0 +855 210 391 30 146 288 10 0 238 +856 433 15 20 297 404 10 0 616 +857 24 259 19 351 420 10 0 221 +858 12 463 -20 332 419 10 589 0 +859 237 213 10 86 237 10 0 453 +860 182 480 -10 327 433 10 419 0 +861 409 88 -10 226 355 10 321 0 +862 244 368 -30 356 503 10 850 0 +863 381 328 -10 682 782 10 973 0 +864 213 185 21 74 161 10 0 406 +865 482 141 -14 965 1086 10 594 0 +866 319 124 20 143 285 10 0 933 +867 141 431 30 211 387 10 0 697 +868 198 264 -20 84 226 10 464 0 +869 69 334 -10 199 331 10 60 0 +870 299 98 -10 159 290 10 326 0 +871 240 250 10 10 143 10 0 647 +872 199 203 -10 1418 1526 10 754 0 +873 459 17 -20 332 521 10 337 0 +874 423 217 -30 176 377 10 298 0 +875 477 179 20 237 348 10 0 591 +876 213 397 -20 188 276 10 679 0 +877 405 187 -8 1215 1316 10 820 0 +878 269 402 -10 188 248 10 932 0 +879 53 204 -21 1020 1120 10 254 0 +880 13 394 15 347 428 10 0 770 +881 15 68 10 297 382 10 0 343 +882 56 268 -10 987 1171 10 601 0 +883 360 184 -20 184 288 10 588 0 +884 307 102 40 179 270 10 0 926 +885 130 57 40 227 372 0 0 1018 +886 250 328 -21 191 336 10 451 0 +887 91 231 30 160 275 10 0 799 +888 479 176 20 240 362 10 0 648 +889 420 224 10 399 489 10 0 205 +890 461 182 -10 580 707 10 522 0 +891 418 218 -10 240 325 10 731 0 +892 419 418 -25 238 398 10 179 0 +893 336 493 -10 1439 1554 10 15 0 +894 389 300 10 147 291 10 0 352 +895 92 76 4 1108 1200 0 0 1003 +896 476 102 20 289 413 10 0 813 +897 418 399 20 390 515 10 0 29 +898 109 56 -20 239 406 10 137 0 +899 13 465 31 716 861 0 0 1035 +900 92 232 -10 159 273 10 355 0 +901 394 47 -10 282 373 10 732 0 +902 16 287 12 236 357 10 0 469 +903 399 102 -10 214 350 10 670 0 +904 143 158 12 141 231 10 0 356 +905 18 484 10 329 435 10 0 624 +906 250 411 -10 161 264 10 107 0 +907 19 273 -4 955 1109 10 919 0 +908 365 28 9 250 334 10 0 172 +909 387 297 10 144 242 0 0 1020 +910 433 447 20 755 863 10 0 802 +911 214 274 -9 1311 1457 10 437 0 +912 489 338 -15 1366 1459 10 194 0 +913 130 494 -25 701 847 10 815 0 +914 23 67 -10 342 466 10 640 0 +915 374 489 20 269 398 10 0 104 +916 126 30 -20 252 419 10 827 0 +917 112 467 10 260 321 10 0 357 +918 489 274 31 480 618 10 0 928 +919 61 214 4 291 422 10 0 907 +920 166 440 12 207 308 10 0 106 +921 56 75 -12 1393 1512 10 339 0 +922 210 276 5 47 221 10 0 698 +923 80 286 -20 206 271 10 367 0 +924 17 459 10 367 507 10 0 783 +925 66 448 10 270 397 10 0 461 +926 351 128 -40 1202 1334 10 884 0 +927 352 176 20 126 213 10 0 405 +928 490 286 -31 495 580 10 918 0 +929 247 219 17 31 172 0 0 1032 +930 86 268 -20 192 273 10 613 0 +931 398 329 -20 167 206 10 63 0 +932 272 402 10 153 324 10 0 878 +933 317 123 -20 160 251 10 866 0 +934 408 318 15 585 731 0 0 1001 +935 66 31 -18 1008 1119 10 506 0 +936 425 448 -10 760 859 10 164 0 +937 35 304 30 221 335 10 0 307 +938 471 94 -20 955 1073 10 576 0 +939 470 473 10 356 536 10 0 1 +940 224 56 -20 1151 1251 10 699 0 +941 343 47 20 225 359 10 0 131 +942 52 18 28 821 922 10 0 99 +943 16 68 20 296 414 10 0 572 +944 195 185 -10 85 191 10 959 0 +945 92 236 -14 210 335 10 319 0 +946 76 462 18 900 1041 10 0 140 +947 124 56 20 231 370 10 0 372 +948 481 454 -30 308 429 10 999 0 +949 477 483 -30 326 435 10 213 0 +950 481 124 -10 263 351 10 219 0 +951 389 156 27 649 813 10 0 478 +952 384 16 -10 309 423 10 198 0 +953 492 34 -20 752 899 10 998 0 +954 371 200 10 185 293 10 0 677 +955 153 235 10 98 221 10 0 714 +956 428 202 -20 866 972 10 233 0 +957 257 391 22 1550 1670 0 0 1016 +958 421 218 -10 219 320 10 725 0 +959 206 186 10 135 270 10 0 944 +960 393 301 30 151 242 10 0 826 +961 204 187 30 116 264 10 0 476 +962 468 475 -10 313 432 10 582 0 +963 477 122 10 278 412 10 0 399 +964 100 66 -27 1343 1487 10 441 0 +965 489 27 -10 350 523 10 969 0 +966 12 451 -10 311 461 10 625 0 +967 197 270 -10 60 162 10 126 0 +968 311 422 -10 953 1053 10 354 0 +969 489 17 10 339 450 10 0 965 +970 13 214 21 1316 1421 0 0 1037 +971 440 247 20 207 330 10 0 123 +972 28 467 -32 1303 1412 10 812 0 +973 388 325 10 231 325 10 0 863 +974 270 401 20 152 309 10 0 362 +975 5 445 -9 313 476 10 739 0 +976 198 271 20 56 175 10 0 374 +977 480 131 5 661 744 0 0 1040 +978 437 98 16 1067 1191 10 0 804 +979 131 246 17 799 895 0 0 1007 +980 49 437 7 385 499 10 0 46 +981 270 49 30 216 398 10 0 652 +982 337 41 -20 952 1083 10 364 0 +983 318 280 -30 74 171 10 93 0 +984 154 392 9 171 296 10 0 283 +985 493 111 26 477 636 10 0 561 +986 399 450 20 301 447 10 0 84 +987 67 452 30 272 377 10 0 359 +988 34 239 16 216 348 10 0 433 +989 343 276 15 96 210 10 0 655 +990 393 12 -20 277 484 10 377 0 +991 236 247 20 14 150 10 0 6 +992 340 291 -10 432 538 10 542 0 +993 3 292 -10 250 371 10 421 0 +994 209 68 -14 1476 1625 10 186 0 +995 18 225 8 647 765 10 0 842 +996 147 435 20 211 309 10 0 622 +997 335 99 -10 1158 1309 10 490 0 +998 485 24 20 326 487 10 0 953 +999 470 475 30 314 420 10 0 948 +1000 341 58 10 212 333 10 0 175 +1001 408 318 -15 585 731 10 934 0 +1002 375 191 -30 138 254 10 52 0 +1003 92 76 -4 1108 1200 10 895 0 +1004 199 187 -20 90 194 10 753 0 +1005 72 227 -25 522 636 10 497 0 +1006 111 464 -10 255 412 10 585 0 +1007 131 246 -17 799 895 10 979 0 +1008 30 7 -23 1145 1262 10 410 0 +1009 277 428 -7 480 531 10 475 0 +1010 413 417 -10 324 418 10 473 0 +1011 115 395 -11 776 885 10 255 0 +1012 387 488 -20 290 463 10 480 0 +1013 179 497 -1 1383 1470 10 182 0 +1014 352 241 -5 770 845 10 711 0 +1015 141 426 -23 493 600 10 666 0 +1016 257 391 -22 1550 1670 10 957 0 +1017 487 320 -21 793 952 10 843 0 +1018 130 57 -40 227 372 10 885 0 +1019 168 59 -6 341 421 10 543 0 +1020 387 297 -10 144 242 10 909 0 +1021 391 18 -10 315 470 10 282 0 +1022 407 98 -10 218 364 10 523 0 +1023 132 32 -18 769 830 10 415 0 +1024 432 2 -20 420 543 10 380 0 +1025 8 300 -10 301 441 10 535 0 +1026 246 314 -36 1416 1504 10 368 0 +1027 377 385 -6 816 947 10 498 0 +1028 472 129 -10 252 388 10 150 0 +1029 441 265 -40 191 337 10 26 0 +1030 384 149 -18 1181 1243 10 529 0 +1031 235 33 -30 1285 1418 10 385 0 +1032 247 219 -17 31 172 10 929 0 +1033 313 493 -20 1172 1245 10 485 0 +1034 374 232 -33 125 255 10 363 0 +1035 13 465 -31 716 861 10 899 0 +1036 95 92 -20 221 320 10 596 0 +1037 13 214 -21 1316 1421 10 970 0 +1038 470 405 -17 890 991 10 432 0 +1039 374 306 -4 959 1060 10 430 0 +1040 480 131 -5 661 744 10 977 0 +1041 477 97 -10 273 414 10 552 0 +1042 472 57 -17 1244 1376 10 132 0 +1043 268 400 -20 190 326 10 37 0 +1044 481 84 -17 423 619 10 571 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC1109.txt b/jsprit-instances/instances/lilim/1000/LRC1109.txt new file mode 100644 index 00000000..466dc2e7 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC1109.txt @@ -0,0 +1,1050 @@ +250 200 1 +0 250 250 0 0 1821 0 0 0 +1 440 436 -13 847 967 10 598 0 +2 214 394 10 186 306 10 0 384 +3 476 483 10 324 444 0 0 1037 +4 352 487 -22 857 977 10 277 0 +5 230 197 40 77 197 0 0 1048 +6 175 239 23 75 195 10 0 508 +7 133 202 -10 416 536 10 610 0 +8 328 458 17 723 843 10 0 498 +9 25 499 10 400 520 10 0 747 +10 226 423 15 174 294 10 0 507 +11 313 282 20 118 238 10 0 992 +12 60 454 10 302 422 10 0 609 +13 239 486 -1 1437 1557 10 182 0 +14 102 264 10 148 268 10 0 134 +15 408 452 10 256 376 10 0 986 +16 451 62 5 275 395 10 0 122 +17 203 390 40 147 267 0 0 1012 +18 92 233 10 179 299 0 0 1020 +19 7 300 30 300 420 10 0 842 +20 409 90 20 225 345 10 0 673 +21 307 108 10 192 312 10 0 884 +22 347 54 10 250 370 10 0 646 +23 406 87 -10 268 388 10 455 0 +24 371 332 14 485 605 10 0 222 +25 116 466 20 254 374 10 0 328 +26 441 265 40 191 311 0 0 1011 +27 130 140 17 162 282 0 0 1007 +28 80 117 -20 779 899 10 525 0 +29 421 387 -15 756 876 10 194 0 +30 83 300 -10 455 575 10 45 0 +31 136 52 10 248 368 10 0 333 +32 18 462 20 353 473 10 0 924 +33 390 120 24 959 1079 10 0 595 +34 188 119 44 930 1050 0 0 1042 +35 467 114 10 331 451 10 0 219 +36 440 292 -30 895 1015 10 491 0 +37 268 400 20 198 318 10 0 710 +38 391 202 14 148 268 10 0 677 +39 377 432 20 786 906 0 0 1013 +40 80 290 -20 174 294 10 449 0 +41 439 15 20 301 421 0 0 1045 +42 307 52 -30 875 995 10 870 0 +43 111 192 -18 1154 1274 10 614 0 +44 131 56 10 227 347 10 0 109 +45 88 286 10 207 327 10 0 30 +46 69 414 -4 1218 1338 10 348 0 +47 41 232 16 209 329 10 0 811 +48 323 77 -24 1360 1480 10 570 0 +49 340 416 -26 276 396 10 88 0 +50 86 199 -30 233 353 10 887 0 +51 314 124 -20 186 306 10 866 0 +52 375 191 30 138 258 10 0 405 +53 226 175 -27 1613 1733 10 700 0 +54 242 106 -23 1223 1343 10 663 0 +55 417 417 10 287 407 10 0 828 +56 419 459 20 271 391 0 0 1001 +57 389 11 20 278 398 10 0 322 +58 450 416 25 532 652 10 0 83 +59 246 255 10 68 188 10 0 149 +60 71 333 10 197 317 10 0 461 +61 105 474 -20 426 546 10 197 0 +62 20 489 -10 338 458 10 624 0 +63 388 331 -19 160 280 10 114 0 +64 92 259 4 354 474 10 0 193 +65 200 261 10 121 241 10 0 189 +66 400 288 30 154 274 10 0 548 +67 299 285 -20 1209 1329 10 448 0 +68 378 199 10 162 282 10 0 89 +69 325 147 -15 1142 1262 10 926 0 +70 421 386 -18 779 899 10 95 0 +71 404 447 20 250 370 10 0 524 +72 412 478 -40 915 1035 10 262 0 +73 26 67 -10 1272 1392 10 816 0 +74 358 183 -30 189 309 10 360 0 +75 30 302 10 226 346 10 0 382 +76 176 470 -12 502 622 10 920 0 +77 96 270 20 155 275 10 0 203 +78 243 408 -20 1389 1509 10 362 0 +79 60 29 -12 1318 1438 10 339 0 +80 34 169 11 439 559 10 0 510 +81 407 280 -20 164 284 10 544 0 +82 277 403 -20 155 275 10 327 0 +83 498 456 -25 1361 1481 10 58 0 +84 384 491 -30 303 423 10 719 0 +85 355 174 33 670 790 10 0 400 +86 97 288 -20 1239 1359 10 818 0 +87 316 284 -30 80 200 10 402 0 +88 334 403 26 174 294 10 0 49 +89 415 223 -10 260 380 10 68 0 +90 230 320 8 1147 1267 10 0 368 +91 432 199 -10 594 714 10 690 0 +92 92 18 -30 1079 1199 10 457 0 +93 273 300 30 55 175 10 0 389 +94 269 112 19 1218 1338 10 0 765 +95 429 389 18 379 499 10 0 70 +96 371 71 -10 242 362 10 321 0 +97 5 297 10 286 406 10 0 575 +98 414 378 -20 450 570 10 518 0 +99 38 15 -18 1046 1166 10 506 0 +100 2 295 30 261 381 10 0 243 +101 237 254 20 38 158 10 0 199 +102 54 445 10 276 396 10 0 782 +103 382 110 -15 1067 1187 10 804 0 +104 438 488 18 303 423 10 0 290 +105 395 331 20 172 292 0 0 1032 +106 230 487 -30 1085 1205 10 867 0 +107 249 407 10 157 277 10 0 932 +108 488 26 -20 388 508 10 998 0 +109 151 81 -10 1496 1616 10 44 0 +110 483 14 -10 331 451 10 504 0 +111 0 422 8 776 896 10 0 766 +112 429 67 -20 687 807 10 861 0 +113 195 464 -9 1471 1591 10 138 0 +114 356 256 19 106 226 10 0 63 +115 264 180 -25 1620 1740 10 557 0 +116 94 235 20 156 276 10 0 286 +117 474 96 -10 271 391 10 813 0 +118 268 52 10 261 381 10 0 169 +119 44 440 -20 744 864 10 589 0 +120 7 382 27 725 845 0 0 1047 +121 459 53 20 1077 1197 10 0 661 +122 491 25 -5 364 484 10 16 0 +123 439 243 20 269 389 10 0 207 +124 210 185 20 76 196 10 0 959 +125 150 68 -27 378 498 10 441 0 +126 201 270 -30 52 172 10 838 0 +127 0 188 -29 887 1007 10 177 0 +128 103 464 -20 1228 1348 10 679 0 +129 325 56 -10 751 871 10 490 0 +130 44 344 12 1034 1154 10 0 221 +131 418 75 11 403 523 10 0 726 +132 472 57 -5 1250 1370 10 953 0 +133 460 328 13 224 344 10 0 184 +134 89 270 -10 162 282 10 14 0 +135 374 190 20 137 257 0 0 1039 +136 463 253 -10 1002 1122 10 573 0 +137 97 93 20 219 339 10 0 800 +138 163 472 9 608 728 10 0 113 +139 29 336 -30 287 407 10 937 0 +140 84 453 -23 1178 1298 10 666 0 +141 294 421 -29 1515 1635 10 968 0 +142 343 62 -10 312 432 10 1000 0 +143 371 193 -30 133 253 10 162 0 +144 142 372 18 162 282 10 0 255 +145 66 88 -25 785 905 10 388 0 +146 395 332 10 166 286 10 0 685 +147 93 413 17 226 346 10 0 366 +148 267 394 10 214 334 10 0 617 +149 249 258 -10 82 202 10 59 0 +150 472 129 10 252 372 10 0 446 +151 87 3 13 1388 1508 10 0 555 +152 62 326 20 241 361 10 0 511 +153 212 186 -15 1617 1737 10 574 0 +154 241 402 11 980 1100 10 0 957 +155 439 266 10 189 309 10 0 693 +156 79 80 -22 1337 1457 10 356 0 +157 62 453 -10 276 396 10 664 0 +158 188 151 7 1252 1372 10 0 872 +159 386 154 -9 1056 1176 10 674 0 +160 38 301 -10 251 371 10 923 0 +161 192 265 10 79 199 10 0 304 +162 371 192 30 134 254 10 0 143 +163 64 294 -28 1056 1176 10 882 0 +164 381 494 -20 288 408 10 915 0 +165 437 12 -20 302 422 10 856 0 +166 186 135 -25 673 793 10 584 0 +167 459 10 10 318 438 10 0 701 +168 175 422 -36 1401 1521 10 292 0 +169 274 48 -10 203 323 10 118 0 +170 488 173 20 250 370 10 0 648 +171 398 97 10 212 332 10 0 638 +172 385 17 -10 764 884 10 846 0 +173 180 283 23 699 819 10 0 744 +174 71 12 2 297 417 10 0 687 +175 343 49 -20 221 341 10 751 0 +176 248 251 20 2 122 10 0 531 +177 7 194 29 906 1026 10 0 127 +178 322 290 -30 1434 1554 10 792 0 +179 410 399 25 218 338 10 0 512 +180 398 103 30 233 353 10 0 824 +181 385 285 13 823 943 10 0 541 +182 179 497 1 1366 1486 10 0 13 +183 464 13 20 340 460 10 0 365 +184 492 335 -13 783 903 10 133 0 +185 27 464 -20 1246 1366 10 858 0 +186 231 29 -12 1181 1301 10 391 0 +187 157 38 3 1003 1123 0 0 1029 +188 439 268 10 253 373 10 0 482 +189 149 214 -10 437 557 10 65 0 +190 187 73 18 247 367 10 0 543 +191 429 169 8 858 978 0 0 1022 +192 350 199 -29 1156 1276 10 412 0 +193 60 231 -4 981 1101 10 64 0 +194 448 404 15 554 674 10 0 29 +195 481 20 20 325 445 10 0 288 +196 436 25 -20 1237 1357 10 336 0 +197 111 459 20 314 434 10 0 61 +198 389 17 10 321 441 0 0 1002 +199 148 208 -20 481 601 10 101 0 +200 475 477 -30 360 480 10 999 0 +201 390 325 -30 206 326 10 960 0 +202 346 354 -34 772 892 10 271 0 +203 91 266 -20 188 308 10 77 0 +204 17 65 20 297 417 10 0 266 +205 391 112 24 955 1075 10 0 580 +206 224 203 20 53 173 10 0 500 +207 426 231 -20 983 1103 10 123 0 +208 260 472 -7 991 1111 10 475 0 +209 265 0 10 851 971 10 0 558 +210 391 293 20 181 301 0 0 1040 +211 411 421 20 270 390 10 0 218 +212 132 30 -26 281 401 10 373 0 +213 475 480 -20 334 454 10 499 0 +214 286 244 31 1239 1359 10 0 757 +215 436 237 -10 186 306 10 352 0 +216 402 284 30 155 275 10 0 777 +217 287 397 -30 519 639 10 436 0 +218 272 420 -20 1341 1461 10 211 0 +219 477 120 -10 297 417 10 35 0 +220 145 434 -20 211 331 10 996 0 +221 33 286 -12 1472 1592 10 130 0 +222 370 262 -14 1054 1174 10 24 0 +223 393 20 -9 346 466 10 908 0 +224 330 308 24 1125 1245 10 0 284 +225 246 398 40 148 268 10 0 503 +226 482 184 14 1062 1182 10 0 611 +227 451 305 -25 208 328 10 301 0 +228 226 316 21 70 190 10 0 269 +229 110 459 -20 303 423 10 466 0 +230 244 250 10 6 126 10 0 607 +231 458 16 20 313 433 10 0 829 +232 390 34 -20 1015 1135 10 941 0 +233 423 214 -10 176 296 10 768 0 +234 219 215 -20 46 166 10 272 0 +235 326 118 -25 152 272 10 275 0 +236 365 74 24 803 923 10 0 620 +237 331 356 13 667 787 0 0 1038 +238 210 398 10 159 279 10 0 946 +239 403 93 -10 296 416 10 670 0 +240 248 404 30 154 274 10 0 354 +241 65 62 -21 931 1051 10 254 0 +242 460 13 -20 316 436 10 456 0 +243 0 293 -30 253 373 10 100 0 +244 211 248 -10 39 159 10 871 0 +245 484 174 10 246 366 10 0 820 +246 175 352 -30 1565 1685 10 344 0 +247 455 168 -9 822 942 10 471 0 +248 224 191 -10 64 184 10 293 0 +249 439 156 -36 481 601 10 320 0 +250 434 359 -17 1347 1467 10 432 0 +251 118 314 -10 293 413 10 859 0 +252 234 246 -10 20 140 10 793 0 +253 406 450 20 253 373 10 0 460 +254 75 118 21 364 484 10 0 241 +255 115 395 -18 770 890 10 144 0 +256 329 456 19 220 340 10 0 378 +257 218 403 -31 1274 1394 10 860 0 +258 149 341 -17 359 479 10 929 0 +259 253 74 -13 1305 1425 10 413 0 +260 436 241 -20 282 402 10 971 0 +261 238 203 10 49 169 10 0 796 +262 405 455 40 296 416 10 0 72 +263 485 27 -10 401 521 10 969 0 +264 323 118 20 150 270 10 0 767 +265 330 371 1 514 634 10 0 338 +266 25 65 -20 331 451 10 204 0 +267 406 96 20 219 339 10 0 978 +268 49 451 20 284 404 10 0 705 +269 307 249 -21 1332 1452 10 228 0 +270 178 135 -29 1469 1589 10 759 0 +271 299 353 34 114 234 10 0 202 +272 236 213 20 39 159 10 0 234 +273 355 177 -30 127 247 10 316 0 +274 394 23 -20 359 479 10 364 0 +275 306 235 25 57 177 10 0 235 +276 90 477 18 277 397 10 0 434 +277 379 486 22 627 747 10 0 4 +278 435 16 -20 322 442 10 729 0 +279 8 497 40 363 483 10 0 704 +280 150 484 -25 580 700 10 815 0 +281 213 399 18 189 309 10 0 296 +282 391 18 10 333 453 10 0 452 +283 111 392 18 1124 1244 0 0 1024 +284 330 281 -24 1285 1405 10 224 0 +285 344 203 14 122 242 10 0 787 +286 91 235 -20 224 344 10 116 0 +287 346 60 -20 276 396 10 474 0 +288 483 27 -20 413 533 10 195 0 +289 382 498 -30 280 400 10 639 0 +290 457 492 -18 463 583 10 104 0 +291 291 213 23 1213 1333 0 0 1019 +292 154 374 36 892 1012 10 0 168 +293 225 196 10 59 179 10 0 248 +294 94 40 -28 1023 1143 10 411 0 +295 0 356 -10 1041 1161 10 625 0 +296 297 283 -18 1304 1424 10 281 0 +297 371 423 10 211 331 10 0 807 +298 417 217 30 170 290 10 0 891 +299 500 228 -10 737 857 10 560 0 +300 412 214 10 165 285 0 0 1031 +301 442 289 25 195 315 10 0 227 +302 157 269 31 1531 1651 10 0 735 +303 440 241 10 256 376 10 0 775 +304 100 266 -10 150 270 10 161 0 +305 111 178 -10 156 276 10 955 0 +306 91 101 -30 253 373 10 788 0 +307 25 307 10 232 352 0 0 1014 +308 135 400 20 254 374 10 0 619 +309 58 458 10 283 403 10 0 703 +310 133 26 10 267 387 10 0 415 +311 211 386 20 141 261 10 0 876 +312 94 97 -20 218 338 10 342 0 +313 30 155 9 1235 1355 0 0 1004 +314 208 184 -20 78 198 10 763 0 +315 394 333 -17 166 286 10 931 0 +316 355 180 30 126 246 10 0 273 +317 241 180 -13 1621 1741 10 450 0 +318 21 485 -32 328 448 10 812 0 +319 80 251 -10 259 379 10 424 0 +320 476 61 36 404 524 10 0 249 +321 406 94 10 220 340 10 0 96 +322 364 71 -20 1303 1423 10 57 0 +323 418 221 10 246 366 10 0 874 +324 274 441 12 650 770 10 0 442 +325 304 97 20 162 282 10 0 667 +326 297 102 10 155 275 10 0 849 +327 250 405 20 155 275 10 0 82 +328 111 463 -20 277 397 10 25 0 +329 408 279 20 175 295 10 0 567 +330 263 418 -10 233 353 10 534 0 +331 480 119 7 583 703 10 0 749 +332 420 383 27 937 1057 10 0 662 +333 142 14 -10 790 910 10 31 0 +334 73 328 -10 193 313 10 618 0 +335 50 438 20 292 412 10 0 913 +336 441 7 20 347 467 10 0 196 +337 462 14 -30 352 472 10 616 0 +338 360 294 -1 1373 1493 10 265 0 +339 58 39 12 1118 1238 10 0 79 +340 58 391 -26 837 957 10 791 0 +341 410 285 20 163 283 10 0 375 +342 96 97 20 217 337 10 0 312 +343 21 64 20 307 427 10 0 418 +344 238 210 30 89 209 10 0 246 +345 479 121 10 262 382 10 0 399 +346 200 178 20 87 207 10 0 944 +347 216 341 19 609 729 10 0 458 +348 48 437 4 759 879 10 0 46 +349 200 270 20 53 173 10 0 976 +350 357 181 20 127 247 10 0 951 +351 476 174 -20 279 399 10 875 0 +352 400 286 10 154 274 10 0 215 +353 351 481 10 277 397 10 0 480 +354 270 400 -30 151 271 10 240 0 +355 95 234 10 155 275 10 0 566 +356 128 113 22 318 438 10 0 156 +357 133 455 -30 763 883 10 987 0 +358 16 463 20 330 450 10 0 972 +359 59 388 20 618 738 10 0 551 +360 376 190 30 139 259 10 0 74 +361 481 122 30 264 384 10 0 985 +362 266 405 20 172 292 10 0 78 +363 374 232 -10 125 245 10 771 0 +364 398 20 20 273 393 10 0 274 +365 481 26 -20 321 441 10 183 0 +366 63 444 -17 335 455 10 147 0 +367 89 290 -20 165 285 10 845 0 +368 246 314 -8 1400 1520 10 90 0 +369 40 304 16 1100 1220 10 0 623 +370 262 369 15 119 239 10 0 459 +371 323 29 -10 1092 1212 10 721 0 +372 89 65 -4 675 795 10 526 0 +373 144 35 26 239 359 10 0 212 +374 200 265 10 107 227 10 0 464 +375 436 264 -20 186 306 10 341 0 +376 15 457 20 313 433 10 0 980 +377 397 20 -10 272 392 10 990 0 +378 328 491 -19 633 753 10 256 0 +379 399 175 -20 702 822 10 588 0 +380 432 2 -20 422 542 10 682 0 +381 63 336 20 221 341 10 0 634 +382 6 296 -10 275 395 10 75 0 +383 146 376 -20 189 309 10 657 0 +384 295 247 -10 1258 1378 10 2 0 +385 235 33 -20 1292 1412 10 699 0 +386 233 204 20 49 169 10 0 605 +387 142 360 -11 1487 1607 10 785 0 +388 177 156 25 122 242 10 0 145 +389 315 287 -30 103 223 10 93 0 +390 452 172 -27 563 683 10 493 0 +391 263 153 12 367 487 10 0 186 +392 493 493 -10 811 931 10 962 0 +393 320 283 30 77 197 10 0 590 +394 64 5 -28 1084 1204 10 942 0 +395 95 235 10 155 275 10 0 425 +396 203 211 -21 1261 1381 10 864 0 +397 16 497 20 381 501 10 0 417 +398 348 348 23 890 1010 10 0 597 +399 485 104 -10 749 869 10 345 0 +400 330 147 -33 803 923 10 85 0 +401 443 237 20 193 313 10 0 600 +402 316 286 30 92 212 10 0 87 +403 335 46 -20 1297 1417 10 797 0 +404 381 495 -10 277 397 10 681 0 +405 364 173 -30 137 257 10 52 0 +406 267 162 -1 1404 1524 10 654 0 +407 214 245 8 36 156 10 0 789 +408 92 234 -20 190 310 10 945 0 +409 347 459 25 434 554 10 0 463 +410 30 7 -25 1144 1264 10 935 0 +411 120 37 28 730 850 10 0 294 +412 397 153 29 837 957 10 0 192 +413 210 29 13 1006 1126 10 0 259 +414 87 285 30 196 316 10 0 587 +415 132 32 -10 739 859 10 310 0 +416 390 294 -20 192 312 10 481 0 +417 67 451 -20 1171 1291 10 397 0 +418 24 68 -20 369 489 10 343 0 +419 146 439 -9 215 335 10 437 0 +420 209 212 -10 1483 1603 10 695 0 +421 6 292 -12 247 367 10 902 0 +422 18 63 10 297 417 10 0 717 +423 149 98 -18 1120 1240 10 715 0 +424 91 268 10 200 320 10 0 319 +425 103 177 -10 581 701 10 395 0 +426 367 178 20 137 257 10 0 514 +427 225 269 -30 1226 1346 10 967 0 +428 443 246 -10 193 313 10 713 0 +429 306 42 -10 432 552 10 568 0 +430 374 306 -10 949 1069 10 894 0 +431 413 421 -8 258 378 10 724 0 +432 470 405 17 881 1001 10 0 250 +433 33 278 -15 1442 1562 10 559 0 +434 149 458 -18 1119 1239 10 276 0 +435 257 57 -25 1181 1301 10 565 0 +436 272 403 30 154 274 10 0 217 +437 221 291 9 50 170 10 0 419 +438 1 101 8 1212 1332 10 0 970 +439 332 459 35 324 444 10 0 485 +440 220 392 20 213 333 10 0 862 +441 253 50 27 200 320 10 0 125 +442 250 441 -12 711 831 10 324 0 +443 471 484 10 321 441 10 0 848 +444 480 152 26 977 1097 10 0 604 +445 404 83 -10 253 373 10 523 0 +446 476 94 -10 274 394 10 150 0 +447 458 213 -10 1083 1203 10 522 0 +448 215 395 20 197 317 10 0 67 +449 85 288 20 169 289 10 0 40 +450 179 75 13 695 815 10 0 317 +451 228 287 21 43 163 10 0 911 +452 397 18 -10 274 394 10 282 0 +453 238 204 20 60 180 10 0 686 +454 488 3 3 356 476 10 0 708 +455 407 88 10 279 399 10 0 23 +456 459 14 20 315 435 10 0 242 +457 120 17 30 266 386 10 0 92 +458 235 316 -19 611 731 10 347 0 +459 370 382 -15 839 959 10 370 0 +460 405 454 -20 1258 1378 10 253 0 +461 17 458 -10 388 508 10 60 0 +462 43 135 -24 236 356 10 694 0 +463 318 497 -25 809 929 10 409 0 +464 199 268 -10 54 174 10 374 0 +465 111 467 -10 257 377 10 628 0 +466 138 438 20 242 362 10 0 229 +467 172 314 -15 500 620 10 626 0 +468 494 468 31 327 447 10 0 939 +469 35 303 20 221 341 0 0 1025 +470 341 59 27 745 865 0 0 1030 +471 423 221 9 213 333 10 0 247 +472 395 295 -10 166 286 10 909 0 +473 413 417 -30 311 431 10 702 0 +474 339 60 20 209 329 10 0 287 +475 277 428 7 445 565 10 0 208 +476 176 199 28 89 209 0 0 1034 +477 265 240 9 18 138 10 0 769 +478 365 190 -10 1432 1552 10 542 0 +479 133 53 20 234 354 10 0 994 +480 387 488 -10 317 437 10 353 0 +481 385 295 20 142 262 10 0 416 +482 491 369 -10 685 805 10 188 0 +483 445 273 20 213 333 10 0 918 +484 195 273 22 59 179 10 0 698 +485 313 493 -35 1148 1268 10 439 0 +486 495 227 -10 299 419 10 515 0 +487 241 403 10 175 295 10 0 549 +488 30 72 -30 387 507 10 786 0 +489 21 487 10 329 449 10 0 606 +490 324 99 10 293 413 10 0 129 +491 453 318 30 329 449 10 0 36 +492 443 272 10 225 345 10 0 516 +493 447 184 27 379 499 10 0 390 +494 366 288 29 639 759 0 0 1041 +495 440 284 -11 807 927 10 794 0 +496 13 314 -10 245 365 10 645 0 +497 72 227 -13 519 639 10 547 0 +498 377 385 -17 821 941 10 8 0 +499 477 478 20 347 467 10 0 213 +500 204 185 -20 118 238 10 206 0 +501 226 191 20 63 183 10 0 961 +502 330 138 -19 1065 1185 10 727 0 +503 185 434 -40 529 649 10 225 0 +504 483 22 10 325 445 10 0 110 +505 71 282 -40 597 717 10 803 0 +506 60 5 18 999 1119 10 0 99 +507 189 402 -15 491 611 10 10 0 +508 134 211 -23 122 242 10 6 0 +509 146 313 22 1150 1270 0 0 1044 +510 21 146 -11 442 562 10 80 0 +511 37 281 -20 448 568 10 152 0 +512 416 417 -25 298 418 10 179 0 +513 44 311 -5 362 482 10 922 0 +514 361 181 -20 152 272 10 426 0 +515 444 242 10 194 314 10 0 486 +516 444 271 -10 201 321 10 492 0 +517 359 179 20 130 250 0 0 1028 +518 388 334 20 161 281 10 0 98 +519 401 164 13 576 696 10 0 877 +520 499 316 18 577 697 0 0 1017 +521 399 106 -19 257 377 10 778 0 +522 425 215 10 184 304 10 0 447 +523 407 98 10 218 338 10 0 445 +524 406 460 -20 674 794 10 71 0 +525 88 95 20 225 345 10 0 28 +526 95 64 4 721 841 10 0 372 +527 306 229 10 1275 1395 10 0 790 +528 273 55 20 196 316 10 0 981 +529 384 149 -20 1152 1272 10 776 0 +530 122 35 -30 250 370 10 563 0 +531 308 199 -20 1463 1583 10 176 0 +532 390 301 10 149 269 10 0 973 +533 300 108 10 150 270 10 0 676 +534 267 400 10 187 307 10 0 330 +535 8 300 -10 311 431 10 728 0 +536 105 181 -16 1486 1606 10 772 0 +537 398 325 30 188 308 10 0 826 +538 166 247 1 84 204 10 0 879 +539 140 431 -20 211 331 10 837 0 +540 253 118 19 502 622 10 0 940 +541 359 246 -13 1378 1498 10 181 0 +542 321 277 10 75 195 10 0 478 +543 168 59 -18 321 441 10 190 0 +544 406 285 20 159 279 10 0 81 +545 391 334 20 164 284 10 0 758 +546 437 19 15 969 1089 0 0 1010 +547 201 278 13 56 176 10 0 497 +548 435 267 -30 278 398 10 66 0 +549 245 408 -10 159 279 10 487 0 +550 16 462 10 341 461 10 0 554 +551 107 374 -20 869 989 10 359 0 +552 477 97 10 273 393 10 0 938 +553 346 57 -10 263 383 10 819 0 +554 14 459 -10 315 435 10 550 0 +555 102 6 -13 1406 1526 10 151 0 +556 359 287 24 115 235 10 0 738 +557 297 131 25 1120 1240 10 0 115 +558 282 1 -10 997 1117 10 209 0 +559 21 70 15 726 846 10 0 433 +560 440 244 10 221 341 10 0 299 +561 482 104 -5 762 882 10 977 0 +562 120 261 -17 748 868 10 979 0 +563 125 29 30 253 373 10 0 530 +564 292 32 -12 222 342 10 720 0 +565 262 92 25 585 705 10 0 435 +566 68 160 -10 1091 1211 10 355 0 +567 405 276 -20 189 309 10 329 0 +568 277 50 10 201 321 10 0 429 +569 32 319 -20 356 476 10 615 0 +570 344 70 24 1101 1221 10 0 48 +571 481 84 17 461 581 0 0 1005 +572 21 68 20 356 476 10 0 851 +573 441 244 10 232 352 10 0 136 +574 57 43 15 978 1098 10 0 153 +575 1 293 -10 252 372 10 97 0 +576 481 96 -20 277 397 10 896 0 +577 471 368 19 383 503 10 0 802 +578 236 126 23 124 244 10 0 632 +579 406 99 -20 217 337 10 841 0 +580 303 186 -24 1309 1429 10 205 0 +581 225 369 38 121 241 10 0 745 +582 412 453 -5 259 379 10 741 0 +583 104 349 -30 964 1084 10 869 0 +584 173 182 25 102 222 10 0 166 +585 111 464 -10 266 386 10 740 0 +586 53 440 10 278 398 10 0 925 +587 69 336 -30 200 320 10 414 0 +588 359 182 20 164 284 10 0 379 +589 13 459 20 315 435 10 0 119 +590 244 277 -30 1256 1376 10 393 0 +591 484 177 -20 245 365 10 599 0 +592 452 206 31 447 567 10 0 890 +593 22 483 -30 325 445 10 689 0 +594 452 110 14 295 415 0 0 1023 +595 347 192 -24 1443 1563 10 33 0 +596 95 92 -12 221 341 10 904 0 +597 368 311 -23 881 1001 10 398 0 +598 479 387 13 352 472 10 0 1 +599 479 169 20 264 384 10 0 591 +600 497 266 -20 703 823 10 401 0 +601 66 336 10 208 328 10 0 880 +602 376 195 10 137 257 10 0 678 +603 401 281 20 216 336 10 0 691 +604 441 177 -26 956 1076 10 444 0 +605 231 203 -20 50 170 10 386 0 +606 21 488 -10 330 450 10 489 0 +607 231 204 -10 105 225 10 230 0 +608 122 422 -10 1412 1532 10 847 0 +609 65 453 -10 274 394 10 12 0 +610 206 261 10 137 257 10 0 7 +611 466 149 -14 1141 1261 10 226 0 +612 313 119 30 171 291 0 0 1008 +613 90 274 20 161 281 10 0 930 +614 39 162 18 520 640 10 0 43 +615 35 306 20 222 342 10 0 569 +616 437 15 30 310 430 10 0 337 +617 307 412 -10 359 479 10 148 0 +618 79 291 10 175 295 10 0 334 +619 64 437 -20 873 993 10 308 0 +620 376 92 -24 946 1066 10 236 0 +621 129 27 -10 253 373 10 916 0 +622 196 489 -9 985 1105 10 984 0 +623 51 286 -16 1414 1534 10 369 0 +624 20 488 10 330 450 10 0 62 +625 13 455 10 313 433 10 0 295 +626 170 347 15 391 511 10 0 467 +627 92 230 -10 159 279 10 900 0 +628 117 467 10 254 374 10 0 465 +629 413 217 20 166 286 10 0 731 +630 405 450 20 253 373 10 0 712 +631 394 322 -12 980 1100 10 863 0 +632 125 61 -23 567 687 10 578 0 +633 238 123 24 736 856 10 0 652 +634 11 403 -20 298 418 10 381 0 +635 89 272 -20 162 282 10 823 0 +636 304 102 30 157 277 10 0 781 +637 478 121 40 274 394 10 0 665 +638 408 84 -10 239 359 10 171 0 +639 376 494 30 274 394 10 0 289 +640 20 73 10 290 410 10 0 914 +641 159 299 -20 971 1091 10 659 0 +642 95 382 19 203 323 10 0 835 +643 352 63 -8 1133 1253 10 982 0 +644 365 274 -15 117 237 10 989 0 +645 30 301 10 233 353 10 0 496 +646 351 5 -10 451 571 10 22 0 +647 197 267 -20 64 184 10 868 0 +648 498 171 -20 1211 1331 10 170 0 +649 468 352 9 723 843 10 0 831 +650 418 251 21 1152 1272 10 0 801 +651 489 437 -14 662 782 10 948 0 +652 251 63 -24 942 1062 10 633 0 +653 132 55 -20 227 347 10 733 0 +654 281 96 1 1081 1201 10 0 406 +655 333 293 -20 572 692 10 983 0 +656 255 487 19 353 473 10 0 761 +657 207 400 20 156 276 10 0 383 +658 469 489 4 510 630 10 0 840 +659 244 254 20 55 175 10 0 641 +660 233 207 10 46 166 0 0 1036 +661 441 60 -20 1414 1534 10 121 0 +662 411 379 -27 1148 1268 10 332 0 +663 178 72 23 712 832 10 0 54 +664 51 447 10 280 400 10 0 157 +665 478 118 -40 309 429 10 637 0 +666 141 426 23 486 606 10 0 140 +667 295 89 -20 697 817 10 325 0 +668 112 433 29 229 349 10 0 770 +669 320 211 -10 948 1068 10 883 0 +670 400 103 10 211 331 10 0 239 +671 408 453 10 257 377 0 0 1026 +672 435 180 37 197 317 10 0 963 +673 432 66 -20 1026 1146 10 20 0 +674 374 116 9 542 662 10 0 159 +675 478 102 10 279 399 10 0 780 +676 335 57 -10 210 330 10 533 0 +677 385 239 -14 741 861 10 38 0 +678 386 245 -10 434 554 10 602 0 +679 208 396 20 151 271 10 0 128 +680 380 489 20 334 454 0 0 1006 +681 380 498 10 280 400 10 0 404 +682 440 7 20 308 428 10 0 380 +683 434 245 10 297 417 0 0 1035 +684 90 232 10 167 287 10 0 748 +685 389 334 -10 162 282 10 146 0 +686 241 205 -20 73 193 10 453 0 +687 18 24 -2 583 703 10 174 0 +688 57 183 -8 1055 1175 10 995 0 +689 59 457 30 289 409 10 0 593 +690 442 243 10 244 364 10 0 91 +691 402 281 -20 205 325 10 603 0 +692 445 237 10 195 315 0 0 1021 +693 441 273 -10 237 357 10 155 0 +694 31 175 24 231 351 10 0 462 +695 234 202 10 50 170 10 0 420 +696 52 303 -20 396 516 10 830 0 +697 167 445 -11 1367 1487 10 833 0 +698 179 286 -22 296 416 10 484 0 +699 269 48 20 236 356 10 0 385 +700 165 59 27 898 1018 10 0 53 +701 461 8 -10 324 444 10 167 0 +702 421 415 30 237 357 10 0 473 +703 59 459 -10 283 403 10 309 0 +704 24 492 -40 417 537 10 279 0 +705 55 449 -20 278 398 10 268 0 +706 224 192 10 63 183 10 0 753 +707 444 269 20 194 314 10 0 764 +708 491 20 -3 349 469 10 454 0 +709 313 126 -20 198 318 10 927 0 +710 283 438 -20 190 310 10 37 0 +711 352 241 -21 747 867 10 854 0 +712 398 476 -20 373 493 10 630 0 +713 442 247 10 196 316 10 0 428 +714 217 207 -10 1337 1457 10 754 0 +715 233 87 18 208 328 10 0 423 +716 479 127 -10 259 379 10 950 0 +717 6 53 -10 542 662 10 422 0 +718 478 300 -29 845 965 10 928 0 +719 378 493 30 274 394 10 0 84 +720 303 78 12 179 299 10 0 564 +721 344 62 10 301 421 10 0 371 +722 371 315 -30 1121 1241 10 850 0 +723 200 78 31 948 1068 10 0 730 +724 413 391 8 215 335 10 0 431 +725 415 216 10 168 288 10 0 956 +726 397 57 -11 1431 1551 10 131 0 +727 293 228 19 48 168 10 0 502 +728 0 297 10 254 374 10 0 535 +729 435 20 20 336 456 10 0 278 +730 195 111 -31 953 1073 10 723 0 +731 417 218 -20 233 353 10 629 0 +732 340 54 10 215 335 10 0 997 +733 132 57 20 226 346 10 0 653 +734 210 379 -30 664 784 10 855 0 +735 228 260 -31 1561 1681 10 302 0 +736 399 104 10 245 365 10 0 903 +737 95 277 20 229 349 10 0 805 +738 360 284 -24 622 742 10 556 0 +739 53 466 9 292 412 10 0 783 +740 112 465 10 255 375 10 0 585 +741 313 391 5 154 274 10 0 582 +742 93 235 -17 201 321 10 817 0 +743 125 32 -20 251 371 10 827 0 +744 215 282 -23 1395 1515 10 173 0 +745 224 320 -38 1239 1359 10 581 0 +746 134 428 20 263 383 0 0 1003 +747 26 490 -10 430 550 10 9 0 +748 44 115 -10 246 366 10 684 0 +749 438 127 -7 896 1016 10 331 0 +750 239 15 -20 559 679 10 852 0 +751 342 54 20 216 336 10 0 175 +752 109 463 -10 289 409 10 917 0 +753 199 187 -10 82 202 10 706 0 +754 201 188 10 94 214 10 0 714 +755 399 301 30 157 277 10 0 934 +756 484 171 -20 248 368 10 888 0 +757 272 234 -31 1545 1665 10 214 0 +758 380 350 -20 821 941 10 545 0 +759 140 108 29 1026 1146 10 0 270 +760 228 199 -30 89 209 10 779 0 +761 245 461 -19 604 724 10 656 0 +762 305 107 -20 180 300 10 933 0 +763 231 195 20 64 184 10 0 314 +764 450 265 -20 200 320 10 707 0 +765 273 149 -19 1458 1578 10 94 0 +766 12 358 -8 1179 1299 10 111 0 +767 315 121 -20 158 278 10 264 0 +768 420 213 10 173 293 10 0 233 +769 331 134 -9 1079 1199 10 477 0 +770 84 377 -29 881 1001 10 668 0 +771 320 280 10 76 196 10 0 363 +772 89 185 16 555 675 10 0 536 +773 472 481 20 320 440 10 0 949 +774 422 420 20 241 361 0 0 1027 +775 475 267 -10 735 855 10 303 0 +776 470 125 20 253 373 10 0 529 +777 435 268 -30 267 387 10 216 0 +778 409 155 19 185 305 10 0 521 +779 243 248 30 7 127 10 0 760 +780 488 96 -10 1021 1141 10 675 0 +781 341 72 -30 760 880 10 636 0 +782 58 449 -10 318 438 10 102 0 +783 16 460 -9 366 486 10 739 0 +784 480 136 22 256 376 10 0 865 +785 162 388 11 1081 1201 10 0 387 +786 47 208 30 207 327 10 0 488 +787 324 127 -14 143 263 10 285 0 +788 87 96 30 237 357 10 0 306 +789 140 137 -8 525 645 10 407 0 +790 314 205 -10 1482 1602 10 527 0 +791 96 346 26 181 301 10 0 340 +792 321 280 30 77 197 10 0 178 +793 245 251 10 5 125 10 0 252 +794 436 295 11 483 603 10 0 495 +795 274 261 20 1662 1782 0 0 1033 +796 271 128 -10 301 421 10 261 0 +797 275 45 20 206 326 10 0 403 +798 422 409 10 234 354 10 0 897 +799 146 188 -4 1190 1310 10 919 0 +800 93 96 -20 219 339 10 137 0 +801 409 255 -21 1477 1597 10 650 0 +802 449 428 -19 1202 1322 10 577 0 +803 90 285 40 231 351 10 0 505 +804 415 95 15 1132 1252 10 0 103 +805 88 287 -20 218 338 10 737 0 +806 379 196 -10 149 269 10 954 0 +807 368 452 -10 625 745 10 297 0 +808 202 186 20 106 226 0 0 1018 +809 435 11 40 302 422 10 0 873 +810 269 46 20 224 344 10 0 836 +811 7 292 -16 246 366 10 47 0 +812 44 496 32 357 477 10 0 318 +813 478 99 10 273 393 10 0 117 +814 391 99 20 206 326 10 0 901 +815 132 477 25 282 402 10 0 280 +816 24 65 10 320 440 10 0 73 +817 130 247 17 120 240 10 0 742 +818 133 273 20 119 239 10 0 86 +819 347 62 10 288 408 10 0 553 +820 404 140 -10 1214 1334 10 245 0 +821 416 420 20 245 365 10 0 892 +822 67 335 20 201 321 10 0 907 +823 92 270 20 212 332 10 0 635 +824 411 95 -30 223 343 10 180 0 +825 132 479 -30 257 377 10 839 0 +826 366 334 -30 365 485 10 537 0 +827 125 39 20 245 365 10 0 743 +828 419 422 -10 241 361 10 55 0 +829 460 2 -20 324 444 10 231 0 +830 67 334 20 201 321 10 0 696 +831 448 414 -9 1178 1298 10 649 0 +832 46 163 -20 881 1001 10 993 0 +833 77 465 11 275 395 10 0 697 +834 284 319 -24 772 892 10 886 0 +835 102 422 -19 226 346 10 642 0 +836 240 34 -20 1475 1595 10 810 0 +837 141 428 20 208 328 10 0 539 +838 204 269 30 49 169 10 0 126 +839 144 439 30 226 346 10 0 825 +840 470 417 -4 692 812 10 658 0 +841 404 103 20 212 332 10 0 579 +842 5 281 -30 1327 1447 10 19 0 +843 487 320 21 813 933 10 0 912 +844 398 23 10 270 390 10 0 952 +845 90 296 20 166 286 10 0 367 +846 386 13 10 292 412 10 0 172 +847 115 465 10 253 373 10 0 608 +848 473 475 -10 372 492 10 443 0 +849 275 42 -10 209 329 10 326 0 +850 286 356 30 111 231 10 0 722 +851 15 69 -20 296 416 10 572 0 +852 267 44 20 211 331 10 0 750 +853 243 399 10 190 310 10 0 906 +854 390 249 21 537 657 10 0 711 +855 210 391 30 146 266 10 0 734 +856 433 15 20 297 417 10 0 165 +857 24 259 -16 325 445 10 988 0 +858 12 463 20 319 439 10 0 185 +859 237 213 10 102 222 10 0 251 +860 182 480 31 320 440 10 0 257 +861 409 88 20 226 346 10 0 112 +862 244 368 -20 369 489 10 440 0 +863 381 328 12 672 792 10 0 631 +864 213 185 21 74 194 10 0 396 +865 482 141 -22 966 1086 10 784 0 +866 319 124 20 143 263 10 0 51 +867 141 431 30 211 331 10 0 106 +868 198 264 20 95 215 10 0 647 +869 69 334 30 199 319 10 0 583 +870 299 98 30 159 279 10 0 42 +871 240 250 10 10 130 10 0 244 +872 199 203 -7 1412 1532 10 158 0 +873 459 17 -40 366 486 10 809 0 +874 423 217 -10 197 317 10 323 0 +875 477 179 20 237 357 10 0 351 +876 213 397 -20 172 292 10 311 0 +877 405 187 -13 1206 1326 10 519 0 +878 269 402 -20 158 278 10 974 0 +879 53 204 -1 1010 1130 10 538 0 +880 13 394 -10 328 448 10 601 0 +881 15 68 -20 297 417 10 943 0 +882 56 268 28 1019 1139 10 0 163 +883 360 184 10 176 296 10 0 669 +884 307 102 -10 165 285 10 21 0 +885 130 57 40 227 347 10 0 898 +886 250 328 24 204 324 10 0 834 +887 91 231 30 160 280 10 0 50 +888 479 176 20 240 360 10 0 756 +889 420 224 -10 384 504 10 958 0 +890 461 182 -31 584 704 10 592 0 +891 418 218 -30 222 342 10 298 0 +892 419 418 -20 238 358 10 821 0 +893 336 493 20 1434 1554 0 0 1009 +894 389 300 10 147 267 10 0 430 +895 92 76 4 1094 1214 0 0 1043 +896 476 102 20 291 411 10 0 576 +897 418 399 -10 393 513 10 798 0 +898 109 56 -40 239 359 10 885 0 +899 13 465 -10 729 849 10 905 0 +900 92 232 10 159 279 10 0 627 +901 394 47 -20 268 388 10 814 0 +902 16 287 12 236 356 10 0 421 +903 399 102 -10 222 342 10 736 0 +904 143 158 12 141 261 10 0 596 +905 18 484 10 329 449 10 0 899 +906 250 411 -10 161 281 10 853 0 +907 19 273 -20 972 1092 10 822 0 +908 365 28 9 250 370 10 0 223 +909 387 297 10 144 264 10 0 472 +910 433 447 20 749 869 10 0 936 +911 214 274 -21 1324 1444 10 451 0 +912 489 338 -21 1352 1472 10 843 0 +913 130 494 -20 714 834 10 335 0 +914 23 67 -10 344 464 10 640 0 +915 374 489 20 269 389 10 0 164 +916 126 30 10 252 372 10 0 621 +917 112 467 10 257 377 10 0 752 +918 489 274 -20 489 609 10 483 0 +919 61 214 4 297 417 10 0 799 +920 166 440 12 207 327 10 0 76 +921 56 75 24 1393 1513 0 0 1016 +922 210 276 5 47 167 10 0 513 +923 80 286 10 179 299 10 0 160 +924 17 459 -20 377 497 10 32 0 +925 66 448 -10 270 390 10 586 0 +926 351 128 15 1208 1328 10 0 69 +927 352 176 20 126 246 10 0 709 +928 490 286 29 477 597 10 0 718 +929 247 219 17 31 151 10 0 258 +930 86 268 -20 172 292 10 613 0 +931 398 329 17 167 287 10 0 315 +932 272 402 -10 153 273 10 107 0 +933 317 123 20 145 265 10 0 762 +934 408 318 -30 598 718 10 755 0 +935 66 31 25 1003 1123 10 0 410 +936 425 448 -20 749 869 10 910 0 +937 35 304 30 221 341 10 0 139 +938 471 94 -10 954 1074 10 552 0 +939 470 473 -31 386 506 10 468 0 +940 224 56 -19 1141 1261 10 540 0 +941 343 47 20 232 352 10 0 232 +942 52 18 28 812 932 10 0 394 +943 16 68 20 296 416 10 0 881 +944 195 185 -20 85 205 10 346 0 +945 92 236 20 213 333 10 0 408 +946 76 462 -10 911 1031 10 238 0 +947 124 56 20 231 351 10 0 964 +948 481 454 14 308 428 10 0 651 +949 477 483 -20 325 445 10 773 0 +950 481 124 10 263 383 10 0 716 +951 389 156 -20 671 791 10 350 0 +952 384 16 -10 306 426 10 844 0 +953 492 34 5 766 886 10 0 132 +954 371 200 10 179 299 10 0 806 +955 153 235 10 98 218 10 0 305 +956 428 202 -10 859 979 10 725 0 +957 257 391 -11 1550 1670 10 154 0 +958 421 218 10 209 329 10 0 889 +959 206 186 -20 143 263 10 124 0 +960 393 301 30 151 271 10 0 201 +961 204 187 -20 130 250 10 501 0 +962 468 475 10 313 433 10 0 392 +963 477 122 -37 285 405 10 672 0 +964 100 66 -20 1355 1475 10 947 0 +965 489 27 10 376 496 0 0 1046 +966 12 451 -30 311 431 10 975 0 +967 197 270 30 56 176 10 0 427 +968 311 422 29 943 1063 10 0 141 +969 489 17 10 335 455 10 0 263 +970 13 214 -8 1309 1429 10 438 0 +971 440 247 20 208 328 10 0 260 +972 28 467 -20 1298 1418 10 358 0 +973 388 325 -10 218 338 10 532 0 +974 270 401 20 152 272 10 0 878 +975 5 445 30 313 433 10 0 966 +976 198 271 -20 56 176 10 349 0 +977 480 131 5 643 763 10 0 561 +978 437 98 -20 1069 1189 10 267 0 +979 131 246 17 787 907 10 0 562 +980 49 437 -20 382 502 10 376 0 +981 270 49 -20 247 367 10 528 0 +982 337 41 8 957 1077 10 0 643 +983 318 280 20 74 194 10 0 655 +984 154 392 9 171 291 10 0 622 +985 493 111 -30 496 616 10 361 0 +986 399 450 -10 314 434 10 15 0 +987 67 452 30 272 392 10 0 357 +988 34 239 16 216 336 10 0 857 +989 343 276 15 96 216 10 0 644 +990 393 12 10 277 397 10 0 377 +991 236 247 20 14 134 0 0 1015 +992 340 291 -20 425 545 10 11 0 +993 3 292 20 250 370 10 0 832 +994 209 68 -20 1505 1625 10 479 0 +995 18 225 8 646 766 10 0 688 +996 147 435 20 211 331 10 0 220 +997 335 99 -10 1173 1293 10 732 0 +998 485 24 20 326 446 10 0 108 +999 470 475 30 314 434 10 0 200 +1000 341 58 10 212 332 10 0 142 +1001 419 459 -20 271 391 10 56 0 +1002 389 17 -10 321 441 10 198 0 +1003 134 428 -20 263 383 10 746 0 +1004 30 155 -9 1235 1355 10 313 0 +1005 481 84 -17 461 581 10 571 0 +1006 380 489 -20 334 454 10 680 0 +1007 130 140 -17 162 282 10 27 0 +1008 313 119 -30 171 291 10 612 0 +1009 336 493 -20 1434 1554 10 893 0 +1010 437 19 -15 969 1089 10 546 0 +1011 441 265 -40 191 311 10 26 0 +1012 203 390 -40 147 267 10 17 0 +1013 377 432 -20 786 906 10 39 0 +1014 25 307 -10 232 352 10 307 0 +1015 236 247 -20 14 134 10 991 0 +1016 56 75 -24 1393 1513 10 921 0 +1017 499 316 -18 577 697 10 520 0 +1018 202 186 -20 106 226 10 808 0 +1019 291 213 -23 1213 1333 10 291 0 +1020 92 233 -10 179 299 10 18 0 +1021 445 237 -10 195 315 10 692 0 +1022 429 169 -8 858 978 10 191 0 +1023 452 110 -14 295 415 10 594 0 +1024 111 392 -18 1124 1244 10 283 0 +1025 35 303 -20 221 341 10 469 0 +1026 408 453 -10 257 377 10 671 0 +1027 422 420 -20 241 361 10 774 0 +1028 359 179 -20 130 250 10 517 0 +1029 157 38 -3 1003 1123 10 187 0 +1030 341 59 -27 745 865 10 470 0 +1031 412 214 -10 165 285 10 300 0 +1032 395 331 -20 172 292 10 105 0 +1033 274 261 -20 1662 1782 10 795 0 +1034 176 199 -28 89 209 10 476 0 +1035 434 245 -10 297 417 10 683 0 +1036 233 207 -10 46 166 10 660 0 +1037 476 483 -10 324 444 10 3 0 +1038 331 356 -13 667 787 10 237 0 +1039 374 190 -20 137 257 10 135 0 +1040 391 293 -20 181 301 10 210 0 +1041 366 288 -29 639 759 10 494 0 +1042 188 119 -44 930 1050 10 34 0 +1043 92 76 -4 1094 1214 10 895 0 +1044 146 313 -22 1150 1270 10 509 0 +1045 439 15 -20 301 421 10 41 0 +1046 489 27 -10 376 496 10 965 0 +1047 7 382 -27 725 845 10 120 0 +1048 230 197 -40 77 197 10 5 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC2101.txt b/jsprit-instances/instances/lilim/1000/LRC2101.txt new file mode 100644 index 00000000..7826942c --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC2101.txt @@ -0,0 +1,1016 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 18 3568 3688 10 0 154 +2 214 394 10 922 1042 10 0 494 +3 476 483 -30 1419 1539 10 240 0 +4 352 487 -30 3607 3727 10 318 0 +5 230 197 40 486 606 10 0 663 +6 175 239 23 243 363 10 0 467 +7 133 202 33 1842 1962 10 0 163 +8 328 458 17 3071 3191 0 0 1002 +9 25 499 -20 1780 1900 10 376 0 +10 226 423 -30 788 908 10 906 0 +11 313 282 20 654 774 10 0 483 +12 60 454 10 1389 1509 10 0 550 +13 239 486 -20 5928 6048 10 358 0 +14 102 264 -20 535 655 10 659 0 +15 408 452 10 1088 1208 10 0 662 +16 451 62 5 1129 1249 10 0 219 +17 203 390 40 635 755 10 0 917 +18 92 233 -20 895 1015 10 116 0 +19 7 300 30 1379 1499 10 0 127 +20 409 90 -10 1033 1153 10 523 0 +21 307 108 10 950 1070 10 0 190 +22 347 54 10 1180 1300 10 0 819 +23 406 87 -10 1252 1372 10 958 0 +24 371 332 -10 2118 2238 10 683 0 +25 116 466 -20 1004 1124 10 220 0 +26 441 265 40 789 909 10 0 874 +27 130 140 17 776 896 10 0 125 +28 80 117 -21 3297 3417 10 510 0 +29 421 387 15 3205 3325 10 0 968 +30 83 300 26 1999 2119 10 0 697 +31 136 52 10 1171 1291 10 0 563 +32 18 462 -20 1591 1711 10 679 0 +33 390 120 24 4017 4137 10 0 648 +34 188 119 44 3899 4019 10 0 730 +35 467 114 10 1504 1624 10 0 502 +36 440 292 -30 3760 3880 10 491 0 +37 268 400 -20 973 1093 10 974 0 +38 391 202 14 536 656 10 0 446 +39 377 432 -25 3326 3446 10 712 0 +40 80 290 10 790 910 10 0 993 +41 439 15 -30 1373 1493 10 360 0 +42 307 52 23 3682 3802 10 0 385 +43 111 192 -29 4798 4918 10 177 0 +44 131 56 -27 1023 1143 10 898 0 +45 88 286 10 1010 1130 10 0 251 +46 69 414 6 5053 5173 10 0 182 +47 41 232 -35 821 941 10 508 0 +48 323 77 36 5620 5740 0 0 1004 +49 340 416 36 1284 1404 10 0 181 +50 86 199 23 1111 1231 10 0 857 +51 314 124 20 924 1044 10 0 391 +52 375 191 30 667 787 10 0 901 +53 226 175 -31 6775 6895 10 723 0 +54 242 106 -1 5074 5194 10 654 0 +55 417 417 10 1328 1448 10 0 140 +56 419 459 -8 1265 1385 10 724 0 +57 389 11 -10 1293 1413 10 638 0 +58 450 416 -10 2307 2427 10 487 0 +59 246 255 10 450 570 10 0 618 +60 71 333 10 775 895 10 0 714 +61 105 474 -40 1883 2003 10 279 0 +62 20 489 -10 1533 1653 10 664 0 +63 388 331 -10 580 700 10 894 0 +64 92 259 4 1598 1718 10 0 369 +65 200 261 10 666 786 10 0 440 +66 400 288 -10 559 679 10 542 0 +67 299 285 -31 5015 5135 10 592 0 +68 378 199 -20 829 949 10 514 0 +69 325 147 14 4747 4867 10 0 192 +70 421 386 29 3297 3417 10 0 78 +71 404 447 20 940 1060 10 0 262 +72 412 478 7 3839 3959 10 0 257 +73 26 67 -18 5267 5387 10 333 0 +74 358 183 20 935 1055 10 0 486 +75 30 302 10 1066 1186 10 0 728 +76 176 470 -20 2187 2307 10 466 0 +77 96 270 20 649 769 10 0 193 +78 243 408 -29 5735 5855 10 70 0 +79 60 29 32 5451 5571 10 0 153 +80 34 169 11 1938 2058 10 0 302 +81 407 280 -30 834 954 10 402 0 +82 277 403 10 699 819 10 0 534 +83 498 456 -3 5624 5744 10 710 0 +84 384 491 20 1391 1511 10 0 265 +85 355 174 -25 2861 2981 10 275 0 +86 97 288 -25 5136 5256 10 907 0 +87 316 284 20 499 619 10 0 495 +88 334 403 26 638 758 10 0 179 +89 415 223 -25 1219 1339 10 301 0 +90 230 320 -30 4768 4888 10 719 0 +91 432 199 7 2554 2674 10 0 269 +92 92 18 -20 4497 4617 10 343 0 +93 273 300 30 160 280 10 0 821 +94 269 112 -10 5051 5171 10 235 0 +95 429 389 -20 1696 1816 10 260 0 +96 371 71 21 1147 1267 10 0 673 +97 5 297 10 1325 1445 10 0 899 +98 414 378 23 1979 2099 10 0 338 +99 38 15 3 4364 4484 10 0 964 +100 2 295 -20 1223 1343 10 464 0 +101 237 254 20 333 453 10 0 937 +102 54 445 10 1232 1352 10 0 666 +103 382 110 -31 4450 4570 10 159 0 +104 438 488 -10 1309 1429 10 671 0 +105 395 331 20 866 986 10 0 678 +106 230 487 -10 4518 4638 10 924 0 +107 249 407 10 695 815 10 0 773 +108 488 26 -10 1731 1851 10 965 0 +109 151 81 28 6232 6352 10 0 994 +110 483 14 10 1453 1573 10 0 985 +111 0 422 8 3284 3404 10 0 387 +112 429 67 -20 2929 3049 10 903 0 +113 195 464 -7 6165 6285 10 980 0 +114 356 256 19 365 485 10 0 736 +115 264 180 -20 6723 6843 10 259 0 +116 94 235 20 607 727 10 0 18 +117 474 96 30 1027 1147 10 0 379 +118 268 52 -20 1222 1342 10 762 0 +119 44 440 -10 3155 3275 10 811 0 +120 7 382 27 3082 3202 10 0 608 +121 459 53 -30 4489 4609 10 938 0 +122 491 25 10 1634 1754 10 0 546 +123 439 243 20 1254 1374 10 0 178 +124 210 185 20 245 365 10 0 204 +125 150 68 -17 1691 1811 10 27 0 +126 201 270 10 192 312 10 0 642 +127 0 188 -30 3728 3848 10 19 0 +128 103 464 -30 5092 5212 10 702 0 +129 325 56 13 3186 3306 10 0 982 +130 44 344 -22 4318 4438 10 139 0 +131 418 75 -20 1792 1912 10 875 0 +132 472 57 -19 5179 5299 10 727 0 +133 460 328 -20 876 996 10 341 0 +134 89 270 -10 814 934 10 635 0 +135 374 190 -30 573 693 10 162 0 +136 463 253 -13 4188 4308 10 598 0 +137 97 93 20 962 1082 10 0 621 +138 163 472 -10 2614 2734 10 606 0 +139 29 336 22 1326 1446 10 0 130 +140 84 453 -10 4892 5012 10 55 0 +141 294 421 -20 6302 6422 10 893 0 +142 343 62 -10 1430 1550 10 568 0 +143 371 193 20 475 595 10 0 725 +144 142 372 18 592 712 10 0 624 +145 66 88 -10 3319 3439 10 754 0 +146 395 332 10 822 942 10 0 201 +147 93 413 17 845 965 10 0 747 +148 267 394 -10 1037 1157 10 932 0 +149 249 258 30 507 627 10 0 878 +150 472 129 10 1010 1130 10 0 813 +151 87 3 -20 5732 5852 10 943 0 +152 62 326 20 1145 1265 10 0 562 +153 212 186 -32 6886 7006 10 79 0 +154 241 402 -18 4099 4219 10 1 0 +155 439 266 -33 741 861 10 363 0 +156 79 80 -28 5528 5648 10 942 0 +157 62 453 -20 1179 1299 10 311 0 +158 188 151 -8 5187 5307 10 551 0 +159 386 154 31 4404 4524 10 0 103 +160 38 301 -20 1182 1302 10 613 0 +161 192 265 10 497 617 10 0 304 +162 371 192 30 519 639 10 0 135 +163 64 294 -33 4405 4525 10 7 0 +164 381 494 -10 1334 1454 10 354 0 +165 437 12 20 1318 1438 10 0 380 +166 186 135 -32 2871 2991 10 789 0 +167 459 10 10 1340 1460 10 0 320 +168 175 422 -20 5786 5906 10 845 0 +169 274 48 10 845 965 10 0 699 +170 488 173 20 1115 1235 10 0 361 +171 398 97 10 836 956 10 0 616 +172 385 17 40 3235 3355 10 0 620 +173 180 283 -12 2975 3095 10 734 0 +174 71 12 2 1172 1292 10 0 772 +175 343 49 10 1060 1180 10 0 377 +176 248 251 20 2 122 10 0 838 +177 7 194 29 3805 3925 10 0 43 +178 322 290 -20 5916 6036 10 123 0 +179 410 399 -26 935 1055 10 88 0 +180 398 103 -20 1114 1234 10 814 0 +181 385 285 -36 3472 3592 10 49 0 +182 179 497 -6 5644 5764 10 46 0 +183 464 13 -30 1539 1659 10 365 0 +184 492 335 10 3313 3433 10 0 802 +185 27 464 -25 5164 5284 10 696 0 +186 231 29 -10 4905 5025 10 455 0 +187 157 38 -6 4191 4311 10 543 0 +188 439 268 -30 1191 1311 10 960 0 +189 149 214 -10 1928 2048 10 601 0 +190 187 73 -10 1168 1288 10 21 0 +191 429 169 -20 3611 3731 10 599 0 +192 350 199 -14 4806 4926 10 69 0 +193 60 231 -20 4104 4224 10 77 0 +194 448 404 15 2396 2516 10 0 332 +195 481 20 -30 1388 1508 10 676 0 +196 436 25 -2 5129 5249 10 749 0 +197 111 459 -20 1435 1555 10 746 0 +198 389 17 -14 1463 1583 10 564 0 +199 148 208 -20 2106 2226 10 381 0 +200 475 477 -10 1618 1738 10 962 0 +201 390 325 -10 1005 1125 10 146 0 +202 346 354 -10 3270 3390 10 289 0 +203 91 266 10 930 1050 10 0 414 +204 17 65 -20 1307 1427 10 124 0 +205 391 112 24 4001 4121 10 0 978 +206 224 203 20 155 275 10 0 305 +207 426 231 -10 4114 4234 10 532 0 +208 260 472 33 4144 4264 0 0 1012 +209 265 0 -30 3584 3704 10 612 0 +210 391 293 -20 903 1023 10 416 0 +211 411 421 20 1260 1380 10 0 473 +212 132 30 20 1303 1423 10 0 759 +213 475 480 -20 1518 1638 10 949 0 +214 286 244 -20 5136 5256 10 315 0 +215 436 237 20 686 806 10 0 940 +216 402 284 30 658 778 10 0 516 +217 287 397 -19 2257 2377 10 656 0 +218 272 420 -9 5543 5663 10 936 0 +219 477 120 -5 1368 1488 10 16 0 +220 145 434 20 932 1052 10 0 25 +221 33 286 -26 6184 6304 10 373 0 +222 370 262 -30 4398 4518 10 779 0 +223 393 20 20 1563 1683 10 0 820 +224 330 308 -18 4682 4802 10 722 0 +225 246 398 40 532 652 10 0 499 +226 482 184 14 4427 4547 10 0 478 +227 451 305 13 774 894 10 0 398 +228 226 316 -9 221 341 10 437 0 +229 110 459 30 1391 1511 10 0 860 +230 244 250 10 47 167 10 0 805 +231 458 16 -10 1192 1312 10 261 0 +232 390 34 -10 4241 4361 10 732 0 +233 423 214 20 867 987 10 0 963 +234 219 215 32 127 247 10 0 476 +235 326 118 10 591 711 10 0 94 +236 365 74 -30 3394 3514 10 849 0 +237 331 356 -20 2847 2967 10 680 0 +238 210 398 -10 817 937 10 610 0 +239 403 93 -20 1363 1483 10 428 0 +240 248 404 30 598 718 10 0 3 +241 65 62 -10 3906 4026 10 640 0 +242 460 13 20 1287 1407 10 0 371 +243 0 293 30 1115 1235 10 0 505 +244 211 248 -10 96 216 10 871 0 +245 484 174 10 1058 1178 10 0 247 +246 175 352 12 6660 6780 0 0 1008 +247 455 168 -10 3467 3587 10 245 0 +248 224 191 20 324 444 10 0 864 +249 439 156 -10 2103 2223 10 573 0 +250 434 359 -19 5569 5689 10 577 0 +251 118 314 -10 1350 1470 10 45 0 +252 234 246 10 259 379 10 0 617 +253 406 450 20 1037 1157 10 0 409 +254 75 118 -20 1636 1756 10 827 0 +255 115 395 11 3261 3381 10 0 420 +256 329 456 19 996 1116 10 0 999 +257 218 403 -7 5277 5397 10 72 0 +258 149 341 -1 1616 1736 10 538 0 +259 253 74 20 5400 5520 10 0 115 +260 436 241 20 1309 1429 10 0 95 +261 238 203 10 375 495 10 0 231 +262 405 455 -20 1363 1483 10 71 0 +263 485 27 -10 1784 1904 10 1000 0 +264 323 118 20 643 763 10 0 709 +265 330 371 -20 2234 2354 10 84 0 +266 25 65 10 1505 1625 10 0 394 +267 406 96 20 863 983 10 0 336 +268 49 451 20 1120 1240 10 0 489 +269 307 249 -7 5506 5626 10 91 0 +270 178 135 -3 6055 6175 10 555 0 +271 299 353 34 396 516 10 0 741 +272 236 213 20 98 218 10 0 952 +273 355 177 20 497 617 10 0 954 +274 394 23 -10 1615 1735 10 282 0 +275 306 235 25 172 292 10 0 85 +276 90 477 18 1051 1171 10 0 554 +277 379 486 22 2687 2807 10 0 392 +278 435 16 -30 1470 1590 10 445 0 +279 8 497 40 1631 1751 10 0 61 +280 150 484 16 2501 2621 10 0 799 +281 213 399 18 936 1056 10 0 886 +282 391 18 10 1511 1631 10 0 274 +283 111 392 -20 4676 4796 10 828 0 +284 330 281 -14 5322 5442 10 597 0 +285 344 203 14 669 789 10 0 670 +286 91 235 10 1076 1196 10 0 536 +287 346 60 -20 1285 1405 10 810 0 +288 483 27 20 1832 1952 10 0 953 +289 382 498 10 1237 1357 10 0 202 +290 457 492 -14 2032 2152 10 948 0 +291 291 213 -20 5031 5151 10 685 0 +292 154 374 -20 3748 3868 10 334 0 +293 225 196 10 223 343 10 0 525 +294 94 40 -20 4272 4392 10 346 0 +295 0 356 -20 4345 4465 10 449 0 +296 297 283 -13 5398 5518 10 890 0 +297 371 423 10 784 904 10 0 434 +298 417 217 30 754 874 10 0 674 +299 500 228 -30 3127 3247 10 351 0 +300 412 214 10 604 724 10 0 716 +301 442 289 25 764 884 10 0 89 +302 157 269 -11 6305 6425 10 80 0 +303 440 241 -14 1205 1325 10 644 0 +304 100 266 -10 586 706 10 161 0 +305 111 178 -20 566 686 10 206 0 +306 91 101 -10 1193 1313 10 859 0 +307 25 307 -20 998 1118 10 615 0 +308 135 400 -22 1194 1314 10 484 0 +309 58 458 10 1291 1411 10 0 622 +310 133 26 -20 1247 1367 10 733 0 +311 211 386 20 506 626 10 0 157 +312 94 97 20 856 976 10 0 632 +313 30 155 9 5122 5242 10 0 842 +314 208 184 20 294 414 10 0 410 +315 394 333 20 777 897 10 0 214 +316 355 180 30 549 669 10 0 412 +317 241 180 -14 6778 6898 10 652 0 +318 21 485 30 1353 1473 10 0 4 +319 80 251 -10 1214 1334 10 930 0 +320 476 61 -10 1795 1915 10 167 0 +321 406 94 10 911 1031 10 0 841 +322 364 71 -12 5394 5514 10 720 0 +323 418 221 10 1165 1285 10 0 889 +324 274 441 12 2778 2898 10 0 442 +325 304 97 20 727 847 10 0 646 +326 297 102 10 609 729 10 0 870 +327 250 405 20 646 766 10 0 582 +328 111 463 20 1286 1406 10 0 815 +329 408 279 20 880 1000 10 0 548 +330 263 418 -20 1114 1234 10 991 0 +331 480 119 -10 2514 2634 10 533 0 +332 420 383 -15 3928 4048 10 194 0 +333 142 14 18 3341 3461 10 0 73 +334 73 328 20 714 834 10 0 292 +335 50 438 -10 1347 1467 10 740 0 +336 441 7 -20 1566 1686 10 267 0 +337 462 14 20 1588 1708 10 0 780 +338 360 294 -23 5671 5791 10 98 0 +339 58 39 -4 4652 4772 10 526 0 +340 58 391 -20 3529 3649 10 359 0 +341 410 285 20 771 891 10 0 133 +342 96 97 -20 808 928 10 605 0 +343 21 64 20 1409 1529 10 0 92 +344 238 210 30 535 655 10 0 457 +345 479 121 10 1231 1351 10 0 956 +346 200 178 20 374 494 10 0 294 +347 216 341 19 2616 2736 10 0 427 +348 48 437 -14 3215 3335 10 496 0 +349 200 270 20 236 356 10 0 587 +350 357 181 20 598 718 10 0 806 +351 476 174 30 1297 1417 10 0 299 +352 400 286 10 607 727 10 0 498 +353 351 481 -10 1287 1407 10 681 0 +354 270 400 10 545 665 10 0 164 +355 95 234 10 653 773 10 0 626 +356 128 113 22 1451 1571 10 0 970 +357 133 455 25 3232 3352 10 0 396 +358 16 463 20 1499 1619 10 0 13 +359 59 388 20 2651 2771 10 0 340 +360 376 190 30 621 741 10 0 41 +361 481 122 -20 1182 1302 10 170 0 +362 266 405 -30 868 988 10 436 0 +363 374 232 33 441 561 10 0 155 +364 398 20 -40 1076 1196 10 884 0 +365 481 26 30 1227 1347 10 0 183 +366 63 444 20 1519 1639 10 0 461 +367 89 290 -20 670 790 10 976 0 +368 246 314 -30 5781 5901 10 850 0 +369 40 304 -4 4579 4699 10 64 0 +370 262 369 15 517 637 10 0 443 +371 323 29 -20 4550 4670 10 242 0 +372 89 65 -20 2881 3001 10 800 0 +373 144 35 26 899 1019 10 0 221 +374 200 265 -20 610 730 10 868 0 +375 436 264 20 686 806 10 0 429 +376 15 457 20 1294 1414 10 0 9 +377 397 20 -10 1120 1240 10 175 0 +378 328 491 -8 2713 2833 10 761 0 +379 399 175 -30 2988 3108 10 117 0 +380 432 2 -20 1866 1986 10 165 0 +381 63 336 20 1065 1185 10 0 199 +382 6 296 -10 1279 1399 10 421 0 +383 146 376 -26 937 1057 10 791 0 +384 295 247 -14 5214 5334 10 594 0 +385 235 33 -23 5348 5468 10 42 0 +386 233 204 20 217 337 10 0 553 +387 142 360 -8 6128 6248 10 111 0 +388 177 156 25 669 789 10 0 916 +389 315 287 30 592 712 10 0 794 +390 452 172 -20 2433 2553 10 971 0 +391 263 153 -20 1650 1770 10 51 0 +392 493 493 -22 3426 3546 10 277 0 +393 320 283 30 442 562 10 0 669 +394 64 5 -10 4516 4636 10 266 0 +395 95 235 10 563 683 10 0 424 +396 203 211 -25 5226 5346 10 357 0 +397 16 497 20 1703 1823 10 0 485 +398 348 348 -13 3739 3859 10 227 0 +399 485 104 -20 3178 3298 10 456 0 +400 330 147 28 3394 3514 10 0 529 +401 443 237 20 754 874 10 0 713 +402 316 286 30 547 667 10 0 81 +403 335 46 -15 5367 5487 10 804 0 +404 381 495 20 1290 1410 10 0 439 +405 364 173 30 721 841 10 0 604 +406 267 162 -10 5797 5917 10 490 0 +407 214 245 8 85 205 10 0 408 +408 92 234 -8 939 1059 10 407 0 +409 347 459 -20 1918 2038 10 253 0 +410 30 7 -20 4754 4874 10 314 0 +411 120 37 28 3101 3221 10 0 895 +412 397 153 -30 3530 3650 10 316 0 +413 210 29 -23 4203 4323 10 667 0 +414 87 285 -10 964 1084 10 203 0 +415 132 32 18 3138 3258 10 0 574 +416 390 294 20 949 1069 10 0 210 +417 67 451 -20 4862 4982 10 910 0 +418 24 68 -10 1658 1778 10 706 0 +419 146 439 -20 1037 1157 10 837 0 +420 209 212 -11 6111 6231 10 255 0 +421 6 292 10 970 1090 10 0 382 +422 18 63 10 1356 1476 10 0 506 +423 149 98 4 4660 4780 10 0 836 +424 91 268 -10 978 1098 10 395 0 +425 103 177 28 2506 2626 10 0 433 +426 367 178 -9 721 841 10 477 0 +427 225 269 -19 5083 5203 10 347 0 +428 443 246 20 919 1039 10 0 239 +429 306 42 -20 1907 2027 10 375 0 +430 374 306 -15 3976 4096 10 758 0 +431 413 421 -20 1212 1332 10 630 0 +432 470 405 -9 3703 3823 10 649 0 +433 33 278 -28 5949 6069 10 425 0 +434 149 458 -10 4655 4775 10 297 0 +435 257 57 -25 4904 5024 10 565 0 +436 272 403 30 759 879 10 0 362 +437 221 291 9 184 304 10 0 228 +438 1 101 -8 5029 5149 10 717 0 +439 332 459 -20 1475 1595 10 404 0 +440 220 392 -10 1031 1151 10 65 0 +441 253 50 -20 903 1023 10 797 0 +442 250 441 -12 3023 3143 10 324 0 +443 471 484 -15 1359 1479 10 370 0 +444 480 152 -25 4086 4206 10 600 0 +445 404 83 30 1194 1314 10 0 278 +446 476 94 -14 1079 1199 10 38 0 +447 458 213 -10 4513 4633 10 756 0 +448 215 395 -10 968 1088 10 876 0 +449 85 288 20 728 848 10 0 295 +450 179 75 -40 2960 3080 10 885 0 +451 228 287 21 112 232 10 0 855 +452 397 18 -20 1168 1288 10 474 0 +453 238 204 20 419 539 10 0 701 +454 488 3 3 1602 1722 10 0 561 +455 407 88 10 1298 1418 10 0 186 +456 459 14 20 1241 1361 10 0 399 +457 120 17 -30 1116 1236 10 344 0 +458 235 316 -17 2623 2743 10 817 0 +459 370 382 11 3535 3655 10 0 631 +460 405 454 -23 5212 5332 10 831 0 +461 17 458 -20 1732 1852 10 366 0 +462 43 135 31 887 1007 10 0 921 +463 318 497 -20 3415 3535 10 589 0 +464 199 268 20 285 405 10 0 100 +465 111 467 20 1148 1268 10 0 782 +466 138 438 20 1149 1269 10 0 76 +467 172 314 -23 2182 2302 10 6 0 +468 494 468 31 1410 1530 10 0 658 +469 35 303 20 826 946 10 0 619 +470 341 59 -9 3159 3279 10 781 0 +471 423 221 -10 1033 1153 10 764 0 +472 395 295 20 845 965 10 0 567 +473 413 417 -20 1424 1544 10 211 0 +474 339 60 20 844 964 10 0 452 +475 277 428 -30 1961 2081 10 639 0 +476 176 199 -32 299 419 10 234 0 +477 265 240 9 18 138 10 0 426 +478 365 190 -14 5910 6030 10 226 0 +479 133 53 -10 1118 1238 10 653 0 +480 387 488 20 1448 1568 10 0 745 +481 385 295 -30 509 629 10 792 0 +482 491 369 -10 2918 3038 10 848 0 +483 445 273 -20 1031 1151 10 11 0 +484 195 273 22 178 298 10 0 308 +485 313 493 -20 4772 4892 10 397 0 +486 495 227 -20 1376 1496 10 74 0 +487 241 403 10 881 1001 10 0 58 +488 30 72 -25 1726 1846 10 584 0 +489 21 487 -20 1401 1521 10 268 0 +490 324 99 10 1352 1472 10 0 406 +491 453 318 30 1495 1615 10 0 36 +492 443 272 10 1080 1200 10 0 777 +493 447 184 27 1698 1818 10 0 863 +494 366 288 -10 2735 2855 10 2 0 +495 440 284 -20 3407 3527 10 87 0 +496 13 314 14 975 1095 10 0 348 +497 72 227 -24 2255 2375 10 694 0 +498 377 385 -10 3465 3585 10 352 0 +499 477 478 -40 1569 1689 10 225 0 +500 204 185 20 653 773 10 0 947 +501 226 191 20 372 492 10 0 528 +502 330 138 -10 4438 4558 10 35 0 +503 185 434 -10 2294 2414 10 507 0 +504 483 22 10 1336 1456 10 0 708 +505 71 282 -30 2567 2687 10 243 0 +506 60 5 -10 4175 4295 10 422 0 +507 189 402 10 2144 2264 10 0 503 +508 134 211 35 482 602 10 0 47 +509 146 313 22 4781 4901 10 0 872 +510 21 146 21 1947 2067 10 0 28 +511 37 281 -4 1973 2093 10 919 0 +512 416 417 -20 1372 1492 10 774 0 +513 44 311 -18 1630 1750 10 634 0 +514 361 181 20 788 908 10 0 68 +515 444 242 10 862 982 10 0 731 +516 444 271 -30 982 1102 10 216 0 +517 359 179 -20 649 769 10 927 0 +518 388 334 20 632 752 10 0 711 +519 401 164 13 2485 2605 0 0 1003 +520 499 316 18 2487 2607 10 0 757 +521 399 106 -20 1207 1327 10 891 0 +522 425 215 -10 916 1036 10 692 0 +523 407 98 10 814 934 10 0 20 +524 406 460 -20 2877 2997 10 986 0 +525 88 95 -10 1081 1201 10 293 0 +526 95 64 4 3064 3184 10 0 339 +527 306 229 -11 5281 5401 10 769 0 +528 273 55 -20 725 845 10 501 0 +529 384 149 -28 4789 4909 10 400 0 +530 122 35 10 981 1101 10 0 743 +531 308 199 -21 6033 6153 10 661 0 +532 390 301 10 661 781 10 0 207 +533 300 108 10 542 662 10 0 331 +534 267 400 -10 929 1049 10 82 0 +535 8 300 -16 1423 1543 10 988 0 +536 105 181 -10 6125 6245 10 286 0 +537 398 325 -20 933 1053 10 983 0 +538 166 247 1 276 396 10 0 258 +539 140 431 30 828 948 10 0 825 +540 253 118 -18 2189 2309 10 715 0 +541 359 246 18 5691 5811 0 0 1014 +542 321 277 10 244 364 10 0 66 +543 168 59 6 1464 1584 10 0 187 +544 406 285 20 715 835 10 0 934 +545 391 334 20 724 844 10 0 677 +546 437 19 -10 4056 4176 10 122 0 +547 201 278 13 166 286 10 0 668 +548 435 267 -20 1291 1411 10 329 0 +549 245 408 10 815 935 10 0 718 +550 16 462 -10 1543 1663 10 12 0 +551 107 374 8 3657 3777 10 0 158 +552 477 97 10 1131 1251 10 0 665 +553 346 57 -20 1233 1353 10 386 0 +554 14 459 -18 1343 1463 10 276 0 +555 102 6 3 5834 5954 10 0 270 +556 359 287 24 400 520 10 0 931 +557 297 131 -27 4662 4782 10 951 0 +558 282 1 -2 4170 4290 10 750 0 +559 21 70 -20 3085 3205 10 572 0 +560 440 244 -20 1064 1184 10 707 0 +561 482 104 -3 3230 3350 10 454 0 +562 120 261 -20 3173 3293 10 152 0 +563 125 29 -10 1133 1253 10 31 0 +564 292 32 14 917 1037 10 0 198 +565 262 92 25 2522 2642 10 0 435 +566 68 160 -10 4543 4663 10 900 0 +567 405 276 -20 937 1057 10 472 0 +568 277 50 10 791 911 10 0 142 +569 32 319 -12 1602 1722 10 902 0 +570 344 70 24 4583 4703 10 0 997 +571 481 84 17 2022 2142 10 0 643 +572 21 68 20 1606 1726 10 0 559 +573 441 244 10 1108 1228 10 0 249 +574 57 43 -18 4094 4214 10 415 0 +575 1 293 10 1071 1191 10 0 583 +576 481 96 -20 1188 1308 10 629 0 +577 471 368 19 1712 1832 10 0 250 +578 236 126 -10 439 559 10 695 0 +579 406 99 20 908 1028 0 0 1009 +580 303 186 10 5417 5537 0 0 1013 +581 225 369 38 426 546 10 0 586 +582 412 453 -20 1188 1308 10 327 0 +583 104 349 -10 4037 4157 10 575 0 +584 173 182 25 351 471 10 0 488 +585 111 464 -30 1242 1362 10 869 0 +586 53 440 -38 1292 1412 10 581 0 +587 69 336 -20 872 992 10 349 0 +588 359 182 20 837 957 10 0 918 +589 13 459 20 1387 1507 10 0 463 +590 244 277 -17 5205 5325 10 834 0 +591 484 177 20 1006 1126 10 0 877 +592 452 206 31 1969 2089 10 0 67 +593 22 483 30 1244 1364 10 0 905 +594 452 110 14 1361 1481 10 0 384 +595 347 192 -7 5953 6073 10 775 0 +596 95 92 -24 1011 1131 10 748 0 +597 368 311 14 3704 3824 10 0 284 +598 479 387 13 1590 1710 10 0 136 +599 479 169 20 1234 1354 10 0 191 +600 497 266 25 2990 3110 10 0 444 +601 66 336 10 1013 1133 10 0 189 +602 376 195 10 724 844 10 0 950 +603 401 281 20 1044 1164 10 0 691 +604 441 177 -30 4005 4125 10 405 0 +605 231 203 20 266 386 10 0 342 +606 21 488 10 1445 1565 10 0 138 +607 231 204 20 601 721 10 0 961 +608 122 422 -27 5827 5947 10 120 0 +609 65 453 30 1127 1247 10 0 858 +610 206 261 10 730 850 10 0 238 +611 466 149 16 4744 4864 10 0 765 +612 313 119 30 863 983 10 0 209 +613 90 274 20 717 837 10 0 160 +614 39 162 18 2261 2381 10 0 623 +615 35 306 20 918 1038 10 0 307 +616 437 15 -10 1421 1541 10 171 0 +617 307 412 -10 1615 1735 10 252 0 +618 79 291 -10 835 955 10 59 0 +619 64 437 -20 3673 3793 10 469 0 +620 376 92 -40 3962 4082 10 172 0 +621 129 27 -20 1190 1310 10 137 0 +622 196 489 -10 4121 4241 10 309 0 +623 51 286 -18 5836 5956 10 614 0 +624 20 488 -18 1489 1609 10 144 0 +625 13 455 -11 1243 1363 10 833 0 +626 170 347 -10 1743 1863 10 355 0 +627 92 230 20 755 875 10 0 786 +628 117 467 10 958 1078 10 0 704 +629 413 217 20 656 776 10 0 576 +630 405 450 20 993 1113 10 0 431 +631 394 322 -11 4099 4219 10 459 0 +632 125 61 -20 2447 2567 10 312 0 +633 238 123 24 3124 3244 0 0 1007 +634 11 403 18 1372 1492 10 0 513 +635 89 272 10 766 886 10 0 134 +636 304 102 30 787 907 10 0 751 +637 478 121 -37 1275 1395 10 672 0 +638 408 84 10 1137 1257 10 0 57 +639 376 494 30 1079 1199 10 0 475 +640 20 73 10 1101 1221 10 0 241 +641 159 299 -10 4062 4182 10 770 0 +642 95 382 -10 925 1045 10 126 0 +643 352 63 -17 4713 4833 10 571 0 +644 365 274 14 410 530 10 0 303 +645 30 301 -10 1110 1230 10 793 0 +646 351 5 -20 1984 2104 10 325 0 +647 197 267 10 435 555 10 0 822 +648 498 171 -24 5026 5146 10 33 0 +649 468 352 9 3073 3193 10 0 432 +650 418 251 21 4787 4907 0 0 1010 +651 489 437 29 2827 2947 10 0 840 +652 251 63 14 3950 4070 10 0 317 +653 132 55 10 1069 1189 10 0 479 +654 281 96 1 4503 4623 10 0 54 +655 333 293 -22 2468 2588 10 992 0 +656 255 487 19 1592 1712 10 0 217 +657 207 400 20 762 882 10 0 689 +658 469 489 -31 2222 2342 10 468 0 +659 244 254 20 401 521 10 0 14 +660 233 207 10 165 285 10 0 700 +661 441 60 21 5835 5955 10 0 531 +662 411 379 -10 4773 4893 10 15 0 +663 178 72 -40 3027 3147 10 5 0 +664 51 447 10 1178 1298 10 0 62 +665 478 118 -10 1417 1537 10 552 0 +666 141 426 -10 2126 2246 10 102 0 +667 295 89 23 2968 3088 10 0 413 +668 112 433 -13 940 1060 10 547 0 +669 320 211 -30 3970 4090 10 393 0 +670 400 103 -14 1022 1142 10 285 0 +671 408 453 10 1132 1252 10 0 104 +672 435 180 37 898 1018 10 0 637 +673 432 66 -21 4285 4405 10 96 0 +674 374 116 -30 2349 2469 10 298 0 +675 478 102 10 1297 1417 10 0 896 +676 335 57 30 784 904 10 0 195 +677 385 239 -20 3142 3262 10 545 0 +678 386 245 -20 1916 2036 10 105 0 +679 208 396 20 706 826 10 0 32 +680 380 489 20 1516 1636 10 0 237 +681 380 498 10 1189 1309 10 0 353 +682 440 7 20 1255 1375 10 0 998 +683 434 245 10 1367 1487 10 0 24 +684 90 232 -10 846 966 10 955 0 +685 389 334 20 676 796 10 0 291 +686 241 205 -17 472 592 10 929 0 +687 18 24 -30 2513 2633 10 914 0 +688 57 183 -8 4401 4521 10 879 0 +689 59 457 -20 1337 1457 10 657 0 +690 442 243 -15 1154 1274 10 989 0 +691 402 281 -20 1000 1120 10 603 0 +692 445 237 10 802 922 10 0 522 +693 441 273 -30 1129 1249 10 755 0 +694 31 175 24 986 1106 10 0 497 +695 234 202 10 319 439 10 0 578 +696 52 303 25 1765 1885 10 0 185 +697 167 445 -26 5648 5768 10 30 0 +698 179 286 -20 1365 1485 10 737 0 +699 269 48 -10 1122 1242 10 169 0 +700 165 59 -10 3771 3891 10 660 0 +701 461 8 -20 1476 1596 10 453 0 +702 421 415 30 941 1061 10 0 128 +703 59 459 -12 1245 1365 10 920 0 +704 24 492 -10 1848 1968 10 628 0 +705 55 449 20 1054 1174 10 0 975 +706 224 192 10 280 400 10 0 418 +707 444 269 20 934 1054 10 0 560 +708 491 20 -10 1574 1694 10 504 0 +709 313 126 -20 973 1093 10 264 0 +710 283 438 3 926 1046 10 0 83 +711 352 241 -20 3169 3289 10 518 0 +712 398 476 25 1672 1792 10 0 39 +713 442 247 -20 964 1084 10 401 0 +714 217 207 -10 5530 5650 10 60 0 +715 233 87 18 1010 1130 10 0 540 +716 479 127 -10 1079 1199 10 300 0 +717 6 53 8 2348 2468 10 0 438 +718 478 300 -10 3558 3678 10 549 0 +719 378 493 30 1127 1247 10 0 90 +720 303 78 12 660 780 10 0 322 +721 344 62 -20 1386 1506 10 852 0 +722 371 315 18 4663 4783 10 0 224 +723 200 78 31 3971 4091 10 0 53 +724 413 391 8 868 988 10 0 56 +725 415 216 -20 705 825 10 143 0 +726 397 57 -10 5904 6024 10 990 0 +727 293 228 19 133 253 10 0 132 +728 0 297 -10 1171 1291 10 75 0 +729 435 20 -20 1526 1646 10 861 0 +730 195 111 -44 3992 4112 10 34 0 +731 417 218 -10 1112 1232 10 515 0 +732 340 54 10 951 1071 10 0 232 +733 132 57 20 978 1098 10 0 310 +734 210 379 12 2835 2955 10 0 173 +735 228 260 12 6422 6542 0 0 1006 +736 399 104 -19 1159 1279 10 114 0 +737 95 277 20 1098 1218 10 0 698 +738 360 284 -25 2666 2786 10 862 0 +739 53 466 -10 1340 1460 10 847 0 +740 112 465 10 1197 1317 10 0 335 +741 313 391 -34 598 718 10 271 0 +742 93 235 10 985 1105 10 0 995 +743 125 32 -10 1038 1158 10 530 0 +744 215 282 -24 5762 5882 10 911 0 +745 224 320 -20 5135 5255 10 480 0 +746 134 428 20 1232 1352 10 0 197 +747 26 490 -17 1899 2019 10 147 0 +748 44 115 24 925 1045 10 0 596 +749 438 127 2 3764 3884 10 0 196 +750 239 15 2 2415 2535 10 0 558 +751 342 54 -30 999 1119 10 636 0 +752 109 463 -20 1334 1454 10 996 0 +753 199 187 20 507 627 10 0 944 +754 201 188 10 555 675 10 0 145 +755 399 301 30 777 897 10 0 693 +756 484 171 10 1173 1293 10 0 447 +757 272 234 -18 6361 6481 10 520 0 +758 380 350 15 3466 3586 10 0 430 +759 140 108 -20 4285 4405 10 212 0 +760 228 199 10 537 657 10 0 959 +761 245 461 8 2597 2717 10 0 378 +762 305 107 20 901 1021 10 0 118 +763 231 195 20 437 557 10 0 941 +764 450 265 10 865 985 10 0 471 +765 273 149 -16 6011 6131 10 611 0 +766 12 358 -18 4897 5017 10 946 0 +767 315 121 10 812 932 10 0 796 +768 420 213 10 814 934 10 0 776 +769 331 134 11 4495 4615 10 0 527 +770 84 377 10 3705 3825 10 0 641 +771 320 280 10 340 460 10 0 909 +772 89 185 -2 2399 2519 10 174 0 +773 472 481 -10 1306 1426 10 107 0 +774 422 420 20 1050 1170 10 0 512 +775 475 267 7 3118 3238 10 0 595 +776 470 125 -10 952 1072 10 768 0 +777 435 268 -10 1247 1367 10 492 0 +778 409 155 19 681 801 10 0 824 +779 243 248 30 96 216 10 0 222 +780 488 96 -20 4265 4385 10 337 0 +781 341 72 9 3219 3339 10 0 470 +782 58 449 -20 1451 1571 10 465 0 +783 16 460 -30 1643 1763 10 867 0 +784 480 136 -20 967 1087 10 888 0 +785 162 388 -16 4504 4624 10 807 0 +786 47 208 -20 906 1026 10 627 0 +787 324 127 30 514 634 10 0 981 +788 87 96 30 1127 1247 10 0 851 +789 140 137 32 2279 2399 10 0 166 +790 314 205 -14 6107 6227 10 865 0 +791 96 346 26 741 861 10 0 383 +792 321 280 30 296 416 10 0 481 +793 245 251 10 5 125 10 0 645 +794 436 295 -30 2113 2233 10 389 0 +795 274 261 20 6828 6948 0 0 1001 +796 271 128 -10 1382 1502 10 767 0 +797 275 45 20 898 1018 10 0 441 +798 422 409 10 877 997 10 0 892 +799 146 188 -16 4940 5060 10 280 0 +800 93 96 20 902 1022 10 0 372 +801 409 255 23 6090 6210 0 0 1005 +802 449 428 -10 4987 5107 10 184 0 +803 90 285 -20 1105 1225 10 823 0 +804 415 95 15 4707 4827 10 0 403 +805 88 287 -10 1054 1174 10 230 0 +806 379 196 -20 776 896 10 350 0 +807 368 452 16 2680 2800 10 0 785 +808 202 186 20 604 724 10 0 832 +809 435 11 -20 1189 1309 10 856 0 +810 269 46 20 1074 1194 10 0 287 +811 7 292 10 926 1046 10 0 119 +812 44 496 -30 1607 1727 10 987 0 +813 478 99 -10 1245 1365 10 150 0 +814 391 99 20 766 886 10 0 180 +815 132 477 -20 1309 1429 10 328 0 +816 24 65 -10 1461 1581 10 881 0 +817 130 247 17 420 540 10 0 458 +818 133 273 20 417 537 10 0 880 +819 347 62 -10 1334 1454 10 22 0 +820 404 140 -20 5035 5155 10 223 0 +821 416 420 -30 1159 1279 10 93 0 +822 67 335 -10 967 1087 10 647 0 +823 92 270 20 1027 1147 10 0 803 +824 411 95 -19 971 1091 10 778 0 +825 132 479 -30 970 1090 10 539 0 +826 366 334 5 1641 1761 0 0 1011 +827 125 39 20 921 1041 10 0 254 +828 419 422 20 1105 1225 10 0 283 +829 460 2 -9 1412 1532 10 908 0 +830 67 334 -10 923 1043 10 923 0 +831 448 414 23 4891 5011 10 0 460 +832 46 163 -20 3704 3824 10 808 0 +833 77 465 11 1044 1164 10 0 625 +834 284 319 17 3267 3387 10 0 590 +835 102 422 -9 905 1025 10 984 0 +836 240 34 -4 6238 6358 10 423 0 +837 141 428 20 775 895 10 0 419 +838 204 269 -20 139 259 10 176 0 +839 144 439 30 1085 1205 10 0 913 +840 470 417 -29 2947 3067 10 651 0 +841 404 103 -10 966 1086 10 321 0 +842 5 281 -9 5486 5606 10 313 0 +843 487 320 -10 3431 3551 10 939 0 +844 398 23 10 1024 1144 10 0 977 +845 90 296 20 606 726 10 0 168 +846 386 13 10 1348 1468 10 0 873 +847 115 465 10 1049 1169 10 0 739 +848 473 475 10 1669 1789 10 0 482 +849 275 42 30 950 1070 10 0 236 +850 286 356 30 388 508 10 0 368 +851 15 69 -30 1167 1287 10 788 0 +852 267 44 20 1023 1143 10 0 721 +853 243 399 10 939 1059 10 0 915 +854 390 249 -10 2327 2447 10 973 0 +855 210 391 -21 566 686 10 451 0 +856 433 15 20 1131 1251 10 0 809 +857 24 259 -23 1480 1600 10 50 0 +858 12 463 -30 1443 1563 10 609 0 +859 237 213 10 588 708 10 0 306 +860 182 480 -30 1459 1579 10 229 0 +861 409 88 20 1081 1201 10 0 729 +862 244 368 25 1656 1776 10 0 738 +863 381 328 -27 2869 2989 10 493 0 +864 213 185 -20 239 359 10 248 0 +865 482 141 14 4043 4163 10 0 790 +866 319 124 20 712 832 10 0 933 +867 141 431 30 872 992 10 0 783 +868 198 264 20 561 681 10 0 374 +869 69 334 30 824 944 10 0 585 +870 299 98 -10 667 787 10 326 0 +871 240 250 10 150 270 10 0 244 +872 199 203 -22 5829 5949 10 509 0 +873 459 17 -10 1645 1765 10 846 0 +874 423 217 -40 967 1087 10 26 0 +875 477 179 20 891 1011 10 0 131 +876 213 397 10 869 989 10 0 448 +877 405 187 -20 5002 5122 10 591 0 +878 269 402 -30 811 931 10 149 0 +879 53 204 8 4220 4340 10 0 688 +880 13 394 -20 1490 1610 10 818 0 +881 15 68 10 1211 1331 10 0 816 +882 56 268 -17 4256 4376 10 979 0 +883 360 184 10 886 1006 10 0 928 +884 307 102 40 839 959 10 0 364 +885 130 57 40 930 1050 10 0 450 +886 250 328 -18 995 1115 10 281 0 +887 91 231 30 801 921 10 0 945 +888 479 176 20 946 1066 10 0 784 +889 420 224 -10 1716 1836 10 323 0 +890 461 182 13 2516 2636 10 0 296 +891 418 218 20 1068 1188 10 0 521 +892 419 418 -10 996 1116 10 798 0 +893 336 493 20 5972 6092 10 0 141 +894 389 300 10 615 735 10 0 63 +895 92 76 -28 4556 4676 10 411 0 +896 476 102 -10 1345 1465 10 675 0 +897 418 399 20 1751 1871 10 0 912 +898 109 56 27 899 1019 10 0 44 +899 13 465 -10 3094 3214 10 97 0 +900 92 232 10 707 827 10 0 566 +901 394 47 -30 1252 1372 10 52 0 +902 16 287 12 1083 1203 10 0 569 +903 399 102 20 1068 1188 10 0 112 +904 143 158 12 550 670 10 0 935 +905 18 484 -30 1300 1420 10 593 0 +906 250 411 30 752 872 10 0 10 +907 19 273 25 4066 4186 10 0 86 +908 365 28 9 1073 1193 10 0 829 +909 387 297 -10 561 681 10 771 0 +910 433 447 20 3177 3297 10 0 417 +911 214 274 24 5476 5596 10 0 744 +912 489 338 -20 5589 5709 10 897 0 +913 130 494 -30 3035 3155 10 839 0 +914 23 67 30 1557 1677 10 0 687 +915 374 489 -10 1017 1137 10 853 0 +916 126 30 -25 1087 1207 10 388 0 +917 112 467 -40 1104 1224 10 17 0 +918 489 274 -20 2135 2255 10 588 0 +919 61 214 4 1367 1487 10 0 511 +920 166 440 12 771 891 10 0 703 +921 56 75 -31 5751 5871 10 462 0 +922 210 276 5 131 251 10 0 966 +923 80 286 10 896 1016 10 0 830 +924 17 459 10 1688 1808 10 0 106 +925 66 448 10 1021 1141 10 0 957 +926 351 128 -10 5013 5133 10 969 0 +927 352 176 20 444 564 10 0 517 +928 490 286 -10 2089 2209 10 883 0 +929 247 219 17 65 185 10 0 686 +930 86 268 10 869 989 10 0 319 +931 398 329 -24 611 731 10 556 0 +932 272 402 10 638 758 10 0 148 +933 317 123 -20 761 881 10 866 0 +934 408 318 -20 2572 2692 10 544 0 +935 66 31 -12 4194 4314 10 904 0 +936 425 448 9 3178 3298 10 0 218 +937 35 304 -20 870 990 10 101 0 +938 471 94 30 3995 4115 10 0 121 +939 470 473 10 1724 1844 10 0 843 +940 224 56 -20 4746 4866 10 215 0 +941 343 47 -20 1108 1228 10 763 0 +942 52 18 28 3428 3548 10 0 156 +943 16 68 20 1255 1375 10 0 151 +944 195 185 -20 449 569 10 753 0 +945 92 236 -30 1031 1151 10 887 0 +946 76 462 18 3824 3944 10 0 766 +947 124 56 -20 865 985 10 500 0 +948 481 454 14 1282 1402 10 0 290 +949 477 483 20 1463 1583 10 0 213 +950 481 124 -10 1134 1254 10 602 0 +951 389 156 27 2862 2982 10 0 557 +952 384 16 -20 1402 1522 10 272 0 +953 492 34 -20 3242 3362 10 288 0 +954 371 200 -20 897 1017 10 273 0 +955 153 235 10 333 453 10 0 684 +956 428 202 -10 3615 3735 10 345 0 +957 257 391 -10 6532 6652 10 925 0 +958 421 218 10 1016 1136 10 0 23 +959 206 186 -10 750 870 10 760 0 +960 393 301 30 713 833 10 0 188 +961 204 187 -20 701 821 10 607 0 +962 468 475 10 1193 1313 10 0 200 +963 477 122 -20 1320 1440 10 233 0 +964 100 66 -3 5599 5719 10 99 0 +965 489 27 10 1685 1805 10 0 108 +966 12 451 -5 1186 1306 10 922 0 +967 197 270 30 383 503 10 0 972 +968 311 422 -15 3952 4072 10 29 0 +969 489 17 10 1520 1640 10 0 926 +970 13 214 -22 5414 5534 10 356 0 +971 440 247 20 1012 1132 10 0 390 +972 28 467 -30 5370 5490 10 967 0 +973 388 325 10 1053 1173 10 0 854 +974 270 401 20 589 709 10 0 37 +975 5 445 -20 1244 1364 10 705 0 +976 198 271 20 337 457 10 0 367 +977 480 131 -10 2750 2870 10 844 0 +978 437 98 -24 4455 4575 10 205 0 +979 131 246 17 3328 3448 10 0 882 +980 49 437 7 1710 1830 10 0 113 +981 270 49 -30 1168 1288 10 787 0 +982 337 41 -13 4009 4129 10 129 0 +983 318 280 20 388 508 10 0 537 +984 154 392 9 626 746 10 0 835 +985 493 111 -10 2164 2284 10 110 0 +986 399 450 20 1435 1555 10 0 524 +987 67 452 30 1078 1198 10 0 812 +988 34 239 16 876 996 10 0 535 +989 343 276 15 326 446 10 0 690 +990 393 12 10 1237 1357 10 0 726 +991 236 247 20 210 330 10 0 330 +992 340 291 22 1882 2002 10 0 655 +993 3 292 -10 1022 1142 10 40 0 +994 209 68 -28 6272 6392 10 109 0 +995 18 225 -10 2765 2885 10 742 0 +996 147 435 20 980 1100 10 0 752 +997 335 99 -24 4874 4994 10 570 0 +998 485 24 -20 1285 1405 10 682 0 +999 470 475 -19 1241 1361 10 256 0 +1000 341 58 10 895 1015 10 0 263 +1001 274 261 -20 6828 6948 10 795 0 +1002 328 458 -17 3071 3191 10 8 0 +1003 401 164 -13 2485 2605 10 519 0 +1004 323 77 -36 5620 5740 10 48 0 +1005 409 255 -23 6090 6210 10 801 0 +1006 228 260 -12 6422 6542 10 735 0 +1007 238 123 -24 3124 3244 10 633 0 +1008 175 352 -12 6660 6780 10 246 0 +1009 406 99 -20 908 1028 10 579 0 +1010 418 251 -21 4787 4907 10 650 0 +1011 366 334 -5 1641 1761 10 826 0 +1012 260 472 -33 4144 4264 10 208 0 +1013 303 186 -10 5417 5537 10 580 0 +1014 359 246 -18 5691 5811 10 541 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC21010.txt b/jsprit-instances/instances/lilim/1000/LRC21010.txt new file mode 100644 index 00000000..cc1a67a6 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC21010.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 -30 3328 3928 10 93 0 +2 214 394 10 682 1282 10 0 327 +3 476 483 -10 1179 1779 10 15 0 +4 352 487 -6 3367 3967 10 498 0 +5 230 197 -10 246 846 10 695 0 +6 175 239 23 75 675 10 0 14 +7 133 202 33 1602 2202 10 0 789 +8 328 458 17 2831 3431 10 0 936 +9 25 499 -20 1540 2140 10 268 0 +10 226 423 -20 548 1148 10 448 0 +11 313 282 20 414 1014 10 0 108 +12 60 454 10 1149 1749 10 0 550 +13 239 486 3 5688 6288 10 0 182 +14 102 264 -23 295 895 10 6 0 +15 408 452 10 848 1448 10 0 3 +16 451 62 5 889 1489 10 0 288 +17 203 390 40 395 995 10 0 549 +18 92 233 -10 655 1255 10 742 0 +19 7 300 -10 1139 1739 10 575 0 +20 409 90 -30 793 1393 10 792 0 +21 307 108 -20 710 1310 10 762 0 +22 347 54 -10 940 1540 10 287 0 +23 406 87 10 1012 1612 10 0 736 +24 371 332 14 1878 2478 10 0 956 +25 116 466 20 764 1364 10 0 366 +26 441 265 -20 549 1149 10 350 0 +27 130 140 -20 536 1136 10 206 0 +28 80 117 -8 3057 3657 10 717 0 +29 421 387 15 2965 3565 10 0 78 +30 83 300 26 1759 2359 10 0 972 +31 136 52 -20 931 1531 10 947 0 +32 18 462 -10 1351 1951 10 925 0 +33 390 120 -10 3777 4377 10 81 0 +34 188 119 -23 3659 4259 10 663 0 +35 467 114 -20 1264 1864 10 170 0 +36 440 292 -11 3520 4120 10 794 0 +37 268 400 -10 733 1333 10 238 0 +38 391 202 -20 296 896 10 588 0 +39 377 432 -15 3086 3686 10 758 0 +40 80 290 -10 550 1150 10 955 0 +41 439 15 -10 1133 1733 10 713 0 +42 307 52 23 3442 4042 10 0 872 +43 111 192 -27 4558 5158 10 700 0 +44 131 56 10 783 1383 10 0 733 +45 88 286 10 770 1370 10 0 152 +46 69 414 6 4813 5413 10 0 185 +47 41 232 16 581 1181 10 0 885 +48 323 77 36 5380 5980 10 0 406 +49 340 416 -20 1044 1644 10 440 0 +50 86 199 23 871 1471 10 0 134 +51 314 124 20 684 1284 10 0 364 +52 375 191 30 427 1027 10 0 303 +53 226 175 -18 6535 7135 10 435 0 +54 242 106 28 4834 5434 10 0 259 +55 417 417 10 1088 1688 10 0 194 +56 419 459 20 1025 1625 10 0 910 +57 389 11 -10 1053 1653 10 709 0 +58 450 416 -20 2067 2667 10 211 0 +59 246 255 10 210 810 10 0 213 +60 71 333 -10 535 1135 10 647 0 +61 105 474 -10 1643 2243 10 704 0 +62 20 489 10 1293 1893 10 0 913 +63 388 331 -20 340 940 10 105 0 +64 92 259 4 1358 1958 10 0 156 +65 200 261 10 426 1026 10 0 246 +66 400 288 30 319 919 10 0 638 +67 299 285 -10 4775 5375 10 527 0 +68 378 199 10 589 1189 10 0 483 +69 325 147 14 4507 5107 10 0 580 +70 421 386 -9 3057 3657 10 649 0 +71 404 447 20 700 1300 10 0 840 +72 412 478 -29 3599 4199 10 651 0 +73 26 67 -10 5027 5627 10 881 0 +74 358 183 20 695 1295 10 0 707 +75 30 302 -20 826 1426 10 101 0 +76 176 470 14 1947 2547 10 0 655 +77 96 270 -20 409 1009 10 304 0 +78 243 408 -15 5495 6095 10 29 0 +79 60 29 -10 5211 5811 10 395 0 +80 34 169 -20 1698 2298 10 116 0 +81 407 280 10 594 1194 10 0 33 +82 277 403 10 459 1059 10 0 262 +83 498 456 -16 5384 5984 10 807 0 +84 384 491 -30 1151 1751 10 436 0 +85 355 174 -9 2621 3221 10 390 0 +86 97 288 -22 4896 5496 10 484 0 +87 316 284 20 259 859 10 0 481 +88 334 403 -30 398 998 10 850 0 +89 415 223 20 979 1579 10 0 711 +90 230 320 -9 4528 5128 10 503 0 +91 432 199 -10 2314 2914 10 142 0 +92 92 18 -26 4257 4857 10 127 0 +93 273 300 30 55 655 10 0 1 +94 269 112 -20 4811 5411 10 808 0 +95 429 389 18 1456 2056 10 0 482 +96 371 71 21 907 1507 10 0 191 +97 5 297 -30 1085 1685 10 805 0 +98 414 378 -20 1739 2339 10 480 0 +99 38 15 -2 4124 4724 10 145 0 +100 2 295 30 983 1583 10 0 139 +101 237 254 20 93 693 10 0 75 +102 54 445 10 992 1592 0 0 1005 +103 382 110 -10 4210 4810 10 1000 0 +104 438 488 18 1069 1669 10 0 378 +105 395 331 20 626 1226 10 0 63 +106 230 487 -20 4278 4878 10 897 0 +107 249 407 -20 455 1055 10 679 0 +108 488 26 -20 1491 2091 10 11 0 +109 151 81 -32 5992 6592 10 193 0 +110 483 14 -10 1213 1813 10 504 0 +111 0 422 -10 3044 3644 10 586 0 +112 429 67 -20 2689 3289 10 223 0 +113 195 464 -20 5925 6525 10 680 0 +114 356 256 19 125 725 10 0 123 +115 264 180 -20 6483 7083 10 479 0 +116 94 235 20 367 967 10 0 80 +117 474 96 30 787 1387 10 0 331 +118 268 52 -10 982 1582 10 326 0 +119 44 440 -20 2915 3515 10 197 0 +120 7 382 -21 2842 3442 10 569 0 +121 459 53 20 4249 4849 10 0 322 +122 491 25 -20 1394 1994 10 829 0 +123 439 243 -19 1014 1614 10 114 0 +124 210 185 20 76 676 10 0 959 +125 150 68 -25 1451 2051 10 388 0 +126 201 270 -30 52 652 10 838 0 +127 0 188 26 3488 4088 10 0 92 +128 103 464 22 4852 5452 10 0 368 +129 325 56 -24 2946 3546 10 236 0 +130 44 344 -19 4078 4678 10 347 0 +131 418 75 -30 1552 2152 10 676 0 +132 472 57 -5 4939 5539 10 953 0 +133 460 328 -25 636 1236 10 301 0 +134 89 270 -23 574 1174 10 50 0 +135 374 190 -10 333 933 10 909 0 +136 463 253 -29 3948 4548 10 928 0 +137 97 93 20 722 1322 10 0 232 +138 163 472 -26 2374 2974 10 251 0 +139 29 336 -30 1086 1686 10 100 0 +140 84 453 19 4652 5252 10 0 608 +141 294 421 -20 6062 6662 10 392 0 +142 343 62 10 1190 1790 10 0 91 +143 371 193 20 235 835 10 0 445 +144 142 372 18 352 952 10 0 705 +145 66 88 2 3079 3679 10 0 99 +146 395 332 -20 582 1182 10 472 0 +147 93 413 17 605 1205 10 0 946 +148 267 394 -24 797 1397 10 886 0 +149 249 258 30 267 867 10 0 473 +150 472 129 -30 770 1370 10 298 0 +151 87 3 -4 5492 6092 10 895 0 +152 62 326 -10 905 1505 10 45 0 +153 212 186 11 6600 7200 0 0 1004 +154 241 402 -33 3859 4459 10 208 0 +155 439 266 10 501 1101 10 0 597 +156 79 80 -4 5288 5888 10 64 0 +157 62 453 -12 939 1539 10 920 0 +158 188 151 -20 4947 5547 10 699 0 +159 386 154 -10 4164 4764 10 954 0 +160 38 301 -20 942 1542 10 367 0 +161 192 265 10 257 857 10 0 615 +162 371 192 30 279 879 10 0 841 +163 64 294 -8 4165 4765 10 698 0 +164 381 494 -35 1094 1694 10 439 0 +165 437 12 -15 1078 1678 10 989 0 +166 186 135 -20 2631 3231 10 944 0 +167 459 10 -20 1100 1700 10 603 0 +168 175 422 24 5546 6146 10 0 257 +169 274 48 -10 605 1205 10 533 0 +170 488 173 20 875 1475 10 0 35 +171 398 97 -20 596 1196 10 567 0 +172 385 17 40 2995 3595 10 0 982 +173 180 283 23 2735 3335 10 0 292 +174 71 12 -10 932 1532 10 310 0 +175 343 49 -20 820 1420 10 933 0 +176 248 251 20 2 602 10 0 779 +177 7 194 -10 3565 4165 10 684 0 +178 322 290 -18 5676 6276 10 541 0 +179 410 399 25 695 1295 10 0 999 +180 398 103 30 874 1474 10 0 523 +181 385 285 13 3232 3832 10 0 269 +182 179 497 -3 5404 6004 10 13 0 +183 464 13 20 1299 1899 10 0 965 +184 492 335 10 3073 3673 10 0 332 +185 27 464 -6 4924 5524 10 46 0 +186 231 29 -30 4665 5265 10 385 0 +187 157 38 -36 3951 4551 10 320 0 +188 439 268 10 951 1551 10 0 430 +189 149 214 7 1688 2288 10 0 497 +190 187 73 18 928 1528 10 0 970 +191 429 169 -21 3371 3971 10 96 0 +192 350 199 -10 4566 5166 10 620 0 +193 60 231 32 3864 4464 10 0 109 +194 448 404 -10 2156 2756 10 55 0 +195 481 20 20 1148 1748 10 0 969 +196 436 25 -15 4889 5489 10 546 0 +197 111 459 20 1195 1795 10 0 119 +198 389 17 -10 1223 1823 10 261 0 +199 148 208 22 1866 2466 10 0 555 +200 475 477 -10 1378 1978 10 671 0 +201 390 325 30 765 1365 10 0 802 +202 346 354 -20 3030 3630 10 976 0 +203 91 266 10 690 1290 10 0 919 +204 17 65 20 1067 1667 10 0 640 +205 391 112 -10 3761 4361 10 239 0 +206 224 203 20 53 653 10 0 27 +207 426 231 -21 3874 4474 10 677 0 +208 260 472 33 3904 4504 10 0 154 +209 265 0 10 3344 3944 10 0 799 +210 391 293 -20 663 1263 10 416 0 +211 411 421 20 1020 1620 10 0 58 +212 132 30 -10 1063 1663 10 916 0 +213 475 480 -10 1278 1878 10 59 0 +214 286 244 -18 4896 5496 10 529 0 +215 436 237 -20 446 1046 10 273 0 +216 402 284 -30 418 1018 10 402 0 +217 287 397 12 2017 2617 10 0 968 +218 272 420 -10 5303 5903 10 443 0 +219 477 120 10 1128 1728 10 0 813 +220 145 434 -20 692 1292 10 746 0 +221 33 286 -18 5944 6544 10 715 0 +222 370 262 -40 4158 4758 10 225 0 +223 393 20 20 1323 1923 10 0 112 +224 330 308 -10 4442 5042 10 853 0 +225 246 398 40 292 892 10 0 222 +226 482 184 14 4187 4787 10 0 531 +227 451 305 13 534 1134 10 0 718 +228 226 316 21 70 670 10 0 617 +229 110 459 -30 1151 1751 10 839 0 +230 244 250 10 6 606 10 0 562 +231 458 16 -20 952 1552 10 701 0 +232 390 34 -20 4001 4601 10 137 0 +233 423 214 20 627 1227 10 0 963 +234 219 215 32 46 646 10 0 476 +235 326 118 10 351 951 10 0 751 +236 365 74 24 3154 3754 10 0 129 +237 331 356 13 2607 3207 10 0 785 +238 210 398 10 577 1177 10 0 37 +239 403 93 10 1123 1723 10 0 205 +240 248 404 30 358 958 10 0 324 +241 65 62 -15 3666 4266 10 559 0 +242 460 13 -14 1047 1647 10 594 0 +243 0 293 30 875 1475 10 0 295 +244 211 248 -8 39 639 10 407 0 +245 484 174 10 818 1418 10 0 665 +246 175 352 -10 6420 7020 10 65 0 +247 455 168 -16 3227 3827 10 678 0 +248 224 191 20 84 684 10 0 356 +249 439 156 -27 1863 2463 10 493 0 +250 434 359 -23 5329 5929 10 831 0 +251 118 314 26 1110 1710 10 0 138 +252 234 246 10 19 619 10 0 467 +253 406 450 20 797 1397 10 0 499 +254 75 118 21 1396 1996 10 0 425 +255 115 395 11 3021 3621 10 0 387 +256 329 456 19 756 1356 10 0 639 +257 218 403 -24 5037 5637 10 168 0 +258 149 341 6 1376 1976 10 0 641 +259 253 74 -28 5160 5760 10 54 0 +260 436 241 -10 1069 1669 10 560 0 +261 238 203 10 135 735 10 0 198 +262 405 455 -10 1123 1723 10 82 0 +263 485 27 -30 1544 2144 10 365 0 +264 323 118 20 403 1003 10 0 804 +265 330 371 -20 1994 2594 10 311 0 +266 25 65 10 1265 1865 10 0 574 +267 406 96 20 623 1223 10 0 412 +268 49 451 20 880 1480 10 0 9 +269 307 249 -13 5266 5866 10 181 0 +270 178 135 -24 5815 6415 10 294 0 +271 299 353 34 156 756 10 0 297 +272 236 213 20 39 639 10 0 760 +273 355 177 20 257 857 10 0 215 +274 394 23 20 1375 1975 10 0 536 +275 306 235 25 57 657 10 0 351 +276 90 477 18 811 1411 10 0 924 +277 379 486 -8 2447 3047 10 724 0 +278 435 16 -10 1230 1830 10 515 0 +279 8 497 40 1391 1991 10 0 397 +280 150 484 16 2261 2861 10 0 357 +281 213 399 18 696 1296 10 0 534 +282 391 18 -10 1271 1871 10 568 0 +283 111 392 -20 4436 5036 10 358 0 +284 330 281 -25 5082 5682 10 495 0 +285 344 203 14 429 1029 10 0 951 +286 91 235 10 836 1436 10 0 823 +287 346 60 10 1045 1645 10 0 22 +288 483 27 -5 1592 2192 10 16 0 +289 382 498 10 997 1597 10 0 404 +290 457 492 7 1792 2392 10 0 409 +291 291 213 -21 4791 5391 10 854 0 +292 154 374 -23 3508 4108 10 173 0 +293 225 196 10 59 659 10 0 706 +294 94 40 24 4032 4632 10 0 270 +295 0 356 -30 4105 4705 10 243 0 +296 297 283 -20 5158 5758 10 693 0 +297 371 423 -34 544 1144 10 271 0 +298 417 217 30 514 1114 10 0 150 +299 500 228 8 2887 3487 10 0 338 +300 412 214 10 364 964 10 0 428 +301 442 289 25 524 1124 10 0 133 +302 157 269 -32 6065 6665 10 687 0 +303 440 241 -30 965 1565 10 52 0 +304 100 266 20 346 946 10 0 77 +305 111 178 18 326 926 10 0 627 +306 91 101 10 953 1553 10 0 565 +307 25 307 10 758 1358 10 0 382 +308 135 400 20 954 1554 10 0 782 +309 58 458 -30 1051 1651 10 987 0 +310 133 26 10 1007 1607 10 0 174 +311 211 386 20 266 866 10 0 265 +312 94 97 20 616 1216 10 0 596 +313 30 155 -4 4882 5482 10 526 0 +314 208 184 20 78 678 10 0 904 +315 394 333 20 537 1137 10 0 683 +316 355 180 30 309 909 10 0 731 +317 241 180 -30 6538 7138 10 344 0 +318 21 485 -20 1113 1713 10 376 0 +319 80 251 -30 974 1574 10 887 0 +320 476 61 36 1555 2155 10 0 187 +321 406 94 -20 671 1271 10 329 0 +322 364 71 -20 5154 5754 10 121 0 +323 418 221 -20 925 1525 10 426 0 +324 274 441 -30 2538 3138 10 240 0 +325 304 97 20 487 1087 10 0 413 +326 297 102 10 369 969 10 0 118 +327 250 405 -10 406 1006 10 2 0 +328 111 463 20 1046 1646 10 0 335 +329 408 279 20 640 1240 10 0 321 +330 263 418 -30 874 1474 10 906 0 +331 480 119 -30 2274 2874 10 117 0 +332 420 383 -10 3688 4288 10 184 0 +333 142 14 18 3101 3701 10 0 842 +334 73 328 20 474 1074 10 0 642 +335 50 438 -20 1107 1707 10 328 0 +336 441 7 20 1326 1926 10 0 708 +337 462 14 -20 1348 1948 10 682 0 +338 360 294 -8 5431 6031 10 299 0 +339 58 39 -10 4412 5012 10 422 0 +340 58 391 16 3289 3889 10 0 766 +341 410 285 20 531 1131 10 0 672 +342 96 97 -10 568 1168 10 618 0 +343 21 64 20 1169 1769 10 0 488 +344 238 210 30 295 895 10 0 317 +345 479 121 -20 991 1591 10 629 0 +346 200 178 -20 134 734 10 753 0 +347 216 341 19 2376 2976 10 0 130 +348 48 437 -7 2975 3575 10 980 0 +349 200 270 20 53 653 10 0 626 +350 357 181 20 358 958 10 0 26 +351 476 174 -25 1057 1657 10 275 0 +352 400 286 10 367 967 10 0 814 +353 351 481 10 1047 1647 10 0 598 +354 270 400 -15 305 905 10 370 0 +355 95 234 10 413 1013 10 0 945 +356 128 113 -20 1211 1811 10 248 0 +357 133 455 -16 2992 3592 10 280 0 +358 16 463 20 1259 1859 10 0 283 +359 59 388 20 2411 3011 10 0 417 +360 376 190 30 381 981 10 0 379 +361 481 122 30 942 1542 10 0 576 +362 266 405 20 628 1228 10 0 475 +363 374 232 33 201 801 10 0 675 +364 398 20 -20 836 1436 10 51 0 +365 481 26 30 987 1587 10 0 263 +366 63 444 -20 1279 1879 10 25 0 +367 89 290 20 430 1030 10 0 160 +368 246 314 -22 5541 6141 10 128 0 +369 40 304 -19 4339 4939 10 738 0 +370 262 369 15 277 877 10 0 354 +371 323 29 -24 4310 4910 10 633 0 +372 89 65 -30 2641 3241 10 563 0 +373 144 35 -23 659 1259 10 578 0 +374 200 265 10 370 970 10 0 466 +375 436 264 -20 446 1046 10 544 0 +376 15 457 20 1054 1654 10 0 318 +377 397 20 20 880 1480 10 0 502 +378 328 491 -18 2473 3073 10 104 0 +379 399 175 -30 2748 3348 10 360 0 +380 432 2 20 1626 2226 10 0 781 +381 63 336 20 825 1425 10 0 539 +382 6 296 -10 1039 1639 10 307 0 +383 146 376 -13 697 1297 10 547 0 +384 295 247 -19 4974 5574 10 778 0 +385 235 33 30 5108 5708 10 0 186 +386 233 204 20 49 649 10 0 864 +387 142 360 -11 5888 6488 10 255 0 +388 177 156 25 429 1029 10 0 125 +389 315 287 30 352 952 10 0 824 +390 452 172 9 2193 2793 10 0 85 +391 263 153 -5 1410 2010 10 901 0 +392 493 493 20 3186 3786 10 0 141 +393 320 283 30 202 802 10 0 771 +394 64 5 -28 4276 4876 10 411 0 +395 95 235 10 323 923 10 0 79 +396 203 211 -36 4986 5586 10 745 0 +397 16 497 -40 1463 2063 10 279 0 +398 348 348 -10 3499 4099 10 681 0 +399 485 104 -19 2938 3538 10 561 0 +400 330 147 -10 3154 3754 10 764 0 +401 443 237 -10 514 1114 10 542 0 +402 316 286 30 307 907 10 0 216 +403 335 46 -27 5127 5727 10 470 0 +404 381 495 -10 1050 1650 10 289 0 +405 364 173 -9 481 1081 10 477 0 +406 267 162 -36 5557 6157 10 48 0 +407 214 245 8 36 636 10 0 244 +408 92 234 -35 699 1299 10 508 0 +409 347 459 -7 1678 2278 10 290 0 +410 30 7 -25 4514 5114 10 935 0 +411 120 37 28 2861 3461 10 0 394 +412 397 153 -20 3290 3890 10 267 0 +413 210 29 -20 3963 4563 10 325 0 +414 87 285 30 724 1324 10 0 513 +415 132 32 -20 2898 3498 10 943 0 +416 390 294 20 709 1309 10 0 210 +417 67 451 -20 4622 5222 10 359 0 +418 24 68 20 1418 2018 10 0 735 +419 146 439 -30 797 1397 10 869 0 +420 209 212 -4 5871 6471 10 423 0 +421 6 292 -10 730 1330 10 811 0 +422 18 63 10 1116 1716 10 0 339 +423 149 98 4 4420 5020 10 0 420 +424 91 268 10 738 1338 10 0 772 +425 103 177 -21 2266 2866 10 254 0 +426 367 178 20 481 1081 10 0 323 +427 225 269 -15 4843 5443 10 934 0 +428 443 246 -10 679 1279 10 300 0 +429 306 42 -40 1667 2267 10 884 0 +430 374 306 -10 3736 4336 10 188 0 +431 413 421 10 972 1572 10 0 432 +432 470 405 -10 3463 4063 10 431 0 +433 33 278 -10 5709 6309 10 530 0 +434 149 458 -31 4415 5015 10 899 0 +435 257 57 18 4664 5264 10 0 53 +436 272 403 30 519 1119 10 0 84 +437 221 291 9 50 650 10 0 876 +438 1 101 8 4789 5389 10 0 623 +439 332 459 35 1235 1835 10 0 164 +440 220 392 20 791 1391 10 0 49 +441 253 50 -10 663 1263 10 732 0 +442 250 441 -19 2783 3383 10 656 0 +443 471 484 10 1119 1719 10 0 218 +444 480 152 26 3846 4446 10 0 570 +445 404 83 -20 954 1554 10 143 0 +446 476 94 -20 839 1439 10 896 0 +447 458 213 22 4273 4873 10 0 877 +448 215 395 20 728 1328 10 0 10 +449 85 288 20 488 1088 10 0 694 +450 179 75 13 2720 3320 10 0 836 +451 228 287 21 43 643 10 0 622 +452 397 18 10 928 1528 10 0 865 +453 238 204 20 179 779 10 0 852 +454 488 3 -20 1362 1962 10 456 0 +455 407 88 -10 1058 1658 10 670 0 +456 459 14 20 1001 1601 10 0 454 +457 120 17 30 876 1476 10 0 816 +458 235 316 2 2383 2983 10 0 494 +459 370 382 -3 3295 3895 10 710 0 +460 405 454 11 4972 5572 10 0 893 +461 17 458 10 1492 2092 10 0 489 +462 43 135 31 647 1247 10 0 748 +463 318 497 21 3175 3775 10 0 957 +464 199 268 20 54 654 10 0 590 +465 111 467 20 908 1508 10 0 689 +466 138 438 -10 909 1509 10 374 0 +467 172 314 -10 1942 2542 10 252 0 +468 494 468 -20 1170 1770 10 630 0 +469 35 303 20 586 1186 10 0 696 +470 341 59 27 2919 3519 10 0 403 +471 423 221 9 793 1393 10 0 768 +472 395 295 20 605 1205 10 0 146 +473 413 417 -30 1184 1784 10 149 0 +474 339 60 20 604 1204 10 0 769 +475 277 428 -20 1721 2321 10 362 0 +476 176 199 -32 89 689 10 234 0 +477 265 240 9 18 618 10 0 405 +478 365 190 -40 5670 6270 10 637 0 +479 133 53 20 878 1478 10 0 115 +480 387 488 20 1208 1808 10 0 98 +481 385 295 -20 269 869 10 87 0 +482 491 369 -18 2678 3278 10 95 0 +483 445 273 -10 791 1391 10 68 0 +484 195 273 22 59 659 10 0 86 +485 313 493 -19 4532 5132 10 577 0 +486 495 227 -20 1136 1736 10 514 0 +487 241 403 -20 641 1241 10 657 0 +488 30 72 -20 1486 2086 10 343 0 +489 21 487 -10 1161 1761 10 461 0 +490 324 99 -20 1112 1712 10 866 0 +491 453 318 30 1255 1855 10 0 520 +492 443 272 10 840 1440 10 0 890 +493 447 184 27 1458 2058 10 0 249 +494 366 288 -2 2495 3095 10 458 0 +495 440 284 25 3167 3767 10 0 284 +496 13 314 -10 735 1335 10 535 0 +497 72 227 -7 2015 2615 10 189 0 +498 377 385 6 3225 3825 10 0 4 +499 477 478 -20 1329 1929 10 253 0 +500 204 185 -20 413 1013 10 605 0 +501 226 191 20 132 732 10 0 730 +502 330 138 -20 4198 4798 10 377 0 +503 185 434 9 2054 2654 10 0 90 +504 483 22 10 1096 1696 10 0 110 +505 71 282 -10 2327 2927 10 728 0 +506 60 5 -20 3935 4535 10 763 0 +507 189 402 -30 1904 2504 10 967 0 +508 134 211 35 242 842 10 0 408 +509 146 313 -28 4541 5141 10 882 0 +510 21 146 21 1707 2307 10 0 614 +511 37 281 -20 1733 2333 10 993 0 +512 416 417 -30 1132 1732 10 719 0 +513 44 311 -30 1390 1990 10 414 0 +514 361 181 20 548 1148 10 0 486 +515 444 242 10 622 1222 10 0 278 +516 444 271 10 742 1342 10 0 592 +517 359 179 20 409 1009 10 0 669 +518 388 334 20 392 992 10 0 971 +519 401 164 -10 2245 2845 10 602 0 +520 499 316 -30 2247 2847 10 491 0 +521 399 106 -20 967 1567 10 579 0 +522 425 215 10 676 1276 10 0 875 +523 407 98 -30 574 1174 10 180 0 +524 406 460 -20 2637 3237 10 949 0 +525 88 95 20 841 1441 10 0 898 +526 95 64 4 2824 3424 10 0 313 +527 306 229 10 5041 5641 10 0 67 +528 273 55 20 485 1085 10 0 558 +529 384 149 18 4549 5149 10 0 214 +530 122 35 10 741 1341 10 0 433 +531 308 199 -14 5793 6393 10 226 0 +532 390 301 10 421 1021 10 0 545 +533 300 108 10 302 902 10 0 169 +534 267 400 -18 689 1289 10 281 0 +535 8 300 10 1183 1783 10 0 496 +536 105 181 -20 5885 6485 10 274 0 +537 398 325 30 693 1293 10 0 973 +538 166 247 1 84 684 10 0 988 +539 140 431 -20 588 1188 10 381 0 +540 253 118 -20 1949 2549 10 800 0 +541 359 246 18 5451 6051 10 0 178 +542 321 277 10 75 675 10 0 401 +543 168 59 6 1224 1824 10 0 652 +544 406 285 20 475 1075 10 0 375 +545 391 334 -10 484 1084 10 532 0 +546 437 19 15 3816 4416 10 0 196 +547 201 278 13 56 656 10 0 383 +548 435 267 -10 1051 1651 10 889 0 +549 245 408 -40 575 1175 10 17 0 +550 16 462 -10 1303 1903 10 12 0 +551 107 374 -10 3417 4017 10 664 0 +552 477 97 -10 891 1491 10 950 0 +553 346 57 -10 993 1593 10 819 0 +554 14 459 20 1103 1703 10 0 606 +555 102 6 -22 5594 6194 10 199 0 +556 359 287 -20 160 760 10 983 0 +557 297 131 -10 4422 5022 10 990 0 +558 282 1 -20 3930 4530 10 528 0 +559 21 70 15 2845 3445 10 0 241 +560 440 244 10 824 1424 10 0 260 +561 482 104 19 2990 3590 10 0 399 +562 120 261 -10 2933 3533 10 230 0 +563 125 29 30 893 1493 10 0 372 +564 292 32 -17 677 1277 10 929 0 +565 262 92 -10 2282 2882 10 306 0 +566 68 160 -25 4303 4903 10 907 0 +567 405 276 20 697 1297 10 0 171 +568 277 50 10 551 1151 10 0 282 +569 32 319 21 1362 1962 10 0 120 +570 344 70 -26 4343 4943 10 444 0 +571 481 84 17 1782 2382 10 0 595 +572 21 68 20 1366 1966 10 0 942 +573 441 244 -20 868 1468 10 685 0 +574 57 43 -10 3854 4454 10 266 0 +575 1 293 10 831 1431 10 0 19 +576 481 96 -30 948 1548 10 361 0 +577 471 368 19 1472 2072 10 0 485 +578 236 126 23 199 799 10 0 373 +579 406 99 20 668 1268 10 0 521 +580 303 186 -14 5177 5777 10 69 0 +581 225 369 38 186 786 10 0 722 +582 412 453 -20 948 1548 10 821 0 +583 104 349 -12 3797 4397 10 863 0 +584 173 182 25 111 711 10 0 994 +585 111 464 -20 1002 1602 10 822 0 +586 53 440 10 1052 1652 10 0 111 +587 69 336 20 632 1232 10 0 752 +588 359 182 20 597 1197 10 0 38 +589 13 459 20 1147 1747 0 0 1002 +590 244 277 -20 4965 5565 10 464 0 +591 484 177 20 766 1366 10 0 776 +592 452 206 -10 1729 2329 10 516 0 +593 22 483 -10 1004 1604 10 625 0 +594 452 110 14 1121 1721 10 0 242 +595 347 192 -17 5713 6313 10 571 0 +596 95 92 -20 771 1371 10 312 0 +597 368 311 -10 3464 4064 10 155 0 +598 479 387 -10 1350 1950 10 353 0 +599 479 169 -10 994 1594 10 958 0 +600 497 266 25 2750 3350 10 0 631 +601 66 336 10 773 1373 10 0 825 +602 376 195 10 484 1084 10 0 519 +603 401 281 20 804 1404 10 0 167 +604 441 177 23 3765 4365 10 0 926 +605 231 203 20 50 650 10 0 500 +606 21 488 -20 1205 1805 10 554 0 +607 231 204 20 361 961 10 0 961 +608 122 422 -19 5587 6187 10 140 0 +609 65 453 -11 887 1487 10 833 0 +610 206 261 10 490 1090 10 0 737 +611 466 149 -20 4504 5104 10 874 0 +612 313 119 30 623 1223 10 0 938 +613 90 274 -17 477 1077 10 817 0 +614 39 162 -21 2021 2621 10 510 0 +615 35 306 -10 678 1278 10 161 0 +616 437 15 -20 1181 1781 10 691 0 +617 307 412 -21 1375 1975 10 228 0 +618 79 291 10 595 1195 10 0 342 +619 64 437 11 3433 4033 10 0 697 +620 376 92 10 3722 4322 10 0 192 +621 129 27 10 950 1550 10 0 851 +622 196 489 -21 3881 4481 10 451 0 +623 51 286 -8 5596 6196 10 438 0 +624 20 488 10 1249 1849 10 0 812 +625 13 455 10 1003 1603 10 0 593 +626 170 347 -20 1503 2103 10 349 0 +627 92 230 -18 515 1115 10 305 0 +628 117 467 -20 718 1318 10 996 0 +629 413 217 20 416 1016 10 0 345 +630 405 450 20 753 1353 10 0 468 +631 394 322 -25 3859 4459 10 600 0 +632 125 61 -10 2207 2807 10 635 0 +633 238 123 24 2884 3484 10 0 371 +634 11 403 18 1132 1732 10 0 770 +635 89 272 10 526 1126 10 0 632 +636 304 102 -30 547 1147 10 686 0 +637 478 121 40 1035 1635 10 0 478 +638 408 84 -30 897 1497 10 66 0 +639 376 494 -19 839 1439 10 256 0 +640 20 73 -20 861 1461 10 204 0 +641 159 299 -6 3822 4422 10 258 0 +642 95 382 -20 685 1285 10 334 0 +643 352 63 -5 4473 5073 10 826 0 +644 365 274 14 170 770 10 0 729 +645 30 301 -30 870 1470 10 937 0 +646 351 5 12 1744 2344 10 0 759 +647 197 267 10 195 795 10 0 60 +648 498 171 -20 4786 5386 10 891 0 +649 468 352 9 2833 3433 10 0 70 +650 418 251 21 4547 5147 10 0 801 +651 489 437 29 2587 3187 10 0 72 +652 251 63 -6 3710 4310 10 543 0 +653 132 55 -10 829 1429 10 871 0 +654 281 96 -10 4263 4863 10 754 0 +655 333 293 -14 2228 2828 10 76 0 +656 255 487 19 1352 1952 10 0 442 +657 207 400 20 522 1122 10 0 487 +658 469 489 -20 1982 2582 10 773 0 +659 244 254 20 161 761 10 0 857 +660 233 207 -10 46 646 10 859 0 +661 441 60 -30 5595 6195 10 673 0 +662 411 379 -31 4533 5133 10 918 0 +663 178 72 23 2787 3387 10 0 34 +664 51 447 10 938 1538 10 0 551 +665 478 118 -10 1177 1777 10 245 0 +666 141 426 -20 1886 2486 10 991 0 +667 295 89 -30 2728 3328 10 786 0 +668 112 433 -23 700 1300 10 835 0 +669 320 211 -20 3730 4330 10 517 0 +670 400 103 10 782 1382 10 0 455 +671 408 453 10 892 1492 10 0 200 +672 435 180 -20 658 1258 10 341 0 +673 432 66 30 4045 4645 10 0 661 +674 374 116 -20 2109 2709 10 861 0 +675 478 102 -33 1057 1657 10 363 0 +676 335 57 30 544 1144 10 0 131 +677 385 239 21 2902 3502 10 0 207 +678 386 245 16 1676 2276 10 0 247 +679 208 396 20 466 1066 10 0 107 +680 380 489 20 1276 1876 10 0 113 +681 380 498 10 949 1549 10 0 398 +682 440 7 20 1015 1615 10 0 337 +683 434 245 -20 1127 1727 10 315 0 +684 90 232 10 606 1206 10 0 177 +685 389 334 20 436 1036 10 0 573 +686 241 205 30 232 832 10 0 636 +687 18 24 32 2273 2873 10 0 302 +688 57 183 -10 4161 4761 10 930 0 +689 59 457 -20 1097 1697 10 465 0 +690 442 243 10 914 1514 10 0 856 +691 402 281 20 760 1360 10 0 616 +692 445 237 10 562 1162 10 0 873 +693 441 273 20 889 1489 10 0 296 +694 31 175 -20 746 1346 10 449 0 +695 234 202 10 79 679 10 0 5 +696 52 303 -20 1525 2125 10 469 0 +697 167 445 -11 5408 6008 10 619 0 +698 179 286 8 1125 1725 10 0 163 +699 269 48 20 882 1482 10 0 158 +700 165 59 27 3531 4131 10 0 43 +701 461 8 20 1236 1836 10 0 231 +702 421 415 -10 701 1301 10 798 0 +703 59 459 -10 1005 1605 10 847 0 +704 24 492 10 1608 2208 10 0 61 +705 55 449 -18 814 1414 10 144 0 +706 224 192 -10 63 663 10 293 0 +707 444 269 -20 694 1294 10 74 0 +708 491 20 -20 1334 1934 10 336 0 +709 313 126 10 733 1333 10 0 57 +710 283 438 3 686 1286 10 0 459 +711 352 241 -20 2929 3529 10 89 0 +712 398 476 -10 1432 2032 10 932 0 +713 442 247 10 724 1324 10 0 41 +714 217 207 -24 5290 5890 10 911 0 +715 233 87 18 770 1370 10 0 221 +716 479 127 20 839 1439 10 0 977 +717 6 53 8 2108 2708 10 0 28 +718 478 300 -13 3318 3918 10 227 0 +719 378 493 30 887 1487 10 0 512 +720 303 78 12 420 1020 10 0 810 +721 344 62 10 1146 1746 10 0 749 +722 371 315 -38 4423 5023 10 581 0 +723 200 78 31 3731 4331 10 0 940 +724 413 391 8 628 1228 10 0 277 +725 415 216 10 465 1065 10 0 756 +726 397 57 17 5664 6264 0 0 1007 +727 293 228 19 48 648 10 0 927 +728 0 297 10 931 1531 10 0 505 +729 435 20 -14 1286 1886 10 644 0 +730 195 111 -20 3752 4352 10 501 0 +731 417 218 -30 872 1472 10 316 0 +732 340 54 10 711 1311 10 0 441 +733 132 57 -10 738 1338 10 44 0 +734 210 379 12 2595 3195 10 0 979 +735 228 260 -20 6182 6782 10 418 0 +736 399 104 -10 919 1519 10 23 0 +737 95 277 -10 858 1458 10 610 0 +738 360 284 19 2426 3026 10 0 369 +739 53 466 -9 1100 1700 10 984 0 +740 112 465 -20 957 1557 10 830 0 +741 313 391 5 358 958 10 0 828 +742 93 235 10 745 1345 10 0 18 +743 125 32 -20 798 1398 10 827 0 +744 215 282 -10 5522 6122 10 747 0 +745 224 320 36 4895 5495 10 0 396 +746 134 428 20 992 1592 10 0 220 +747 26 490 10 1659 2259 10 0 744 +748 44 115 -31 685 1285 10 462 0 +749 438 127 -10 3524 4124 10 721 0 +750 239 15 2 2175 2775 10 0 765 +751 342 54 -10 759 1359 10 235 0 +752 109 463 -20 1094 1694 10 587 0 +753 199 187 20 267 867 10 0 346 +754 201 188 10 315 915 10 0 654 +755 399 301 30 537 1137 10 0 931 +756 484 171 -10 933 1533 10 725 0 +757 272 234 -22 6121 6721 10 790 0 +758 380 350 15 3226 3826 10 0 39 +759 140 108 -12 4045 4645 10 646 0 +760 228 199 -20 297 897 10 272 0 +761 245 461 -31 2357 2957 10 860 0 +762 305 107 20 661 1261 10 0 21 +763 231 195 20 197 797 10 0 506 +764 450 265 10 625 1225 10 0 400 +765 273 149 -2 5771 6371 10 750 0 +766 12 358 -16 4657 5257 10 340 0 +767 315 121 10 572 1172 10 0 846 +768 420 213 -9 574 1174 10 471 0 +769 331 134 -20 4255 4855 10 474 0 +770 84 377 -18 3465 4065 10 634 0 +771 320 280 -30 100 700 10 393 0 +772 89 185 -10 2159 2759 10 424 0 +773 472 481 20 1066 1666 10 0 658 +774 422 420 -10 810 1410 10 892 0 +775 475 267 7 2878 3478 10 0 912 +776 470 125 -20 712 1312 10 591 0 +777 435 268 -10 1007 1607 10 894 0 +778 409 155 19 441 1041 10 0 384 +779 243 248 -20 7 607 10 176 0 +780 488 96 22 4025 4625 10 0 997 +781 341 72 -20 2979 3579 10 380 0 +782 58 449 -20 1211 1811 10 308 0 +783 16 460 20 1403 2003 10 0 858 +784 480 136 22 727 1327 10 0 985 +785 162 388 -13 4264 4864 10 237 0 +786 47 208 30 666 1266 10 0 667 +787 324 127 30 274 874 10 0 952 +788 87 96 -10 887 1487 10 923 0 +789 140 137 -33 2039 2639 10 7 0 +790 314 205 22 5867 6467 10 0 757 +791 96 346 26 501 1101 10 0 815 +792 321 280 30 77 677 10 0 20 +793 245 251 10 5 605 10 0 834 +794 436 295 11 1873 2473 10 0 36 +795 274 261 -30 6588 7188 10 855 0 +796 271 128 12 1142 1742 10 0 992 +797 275 45 20 658 1258 10 0 981 +798 422 409 10 637 1237 10 0 702 +799 146 188 -10 4700 5300 10 209 0 +800 93 96 20 662 1262 10 0 540 +801 409 255 -21 5850 6450 10 650 0 +802 449 428 -30 4747 5347 10 201 0 +803 90 285 40 865 1465 0 0 1006 +804 415 95 -20 4467 5067 10 264 0 +805 88 287 30 814 1414 10 0 97 +806 379 196 -10 536 1136 10 883 0 +807 368 452 16 2440 3040 10 0 83 +808 202 186 20 364 964 10 0 94 +809 435 11 40 949 1549 10 0 998 +810 269 46 -12 834 1434 10 720 0 +811 7 292 10 686 1286 10 0 421 +812 44 496 -10 1367 1967 10 624 0 +813 478 99 -10 1005 1605 10 219 0 +814 391 99 -10 526 1126 10 352 0 +815 132 477 -26 1069 1669 10 791 0 +816 24 65 -30 1221 1821 10 457 0 +817 130 247 17 180 780 10 0 613 +818 133 273 -20 177 777 10 868 0 +819 347 62 10 1094 1694 10 0 553 +820 404 140 -20 4795 5395 10 903 0 +821 416 420 20 919 1519 10 0 582 +822 67 335 20 727 1327 10 0 585 +823 92 270 -10 787 1387 10 286 0 +824 411 95 -30 731 1331 10 389 0 +825 132 479 -10 730 1330 10 601 0 +826 366 334 5 1401 2001 10 0 643 +827 125 39 20 681 1281 10 0 743 +828 419 422 -5 865 1465 10 741 0 +829 460 2 20 1172 1772 10 0 122 +830 67 334 20 683 1283 10 0 740 +831 448 414 23 4651 5251 10 0 250 +832 46 163 8 3464 4064 10 0 921 +833 77 465 11 804 1404 10 0 609 +834 284 319 -10 3027 3627 10 793 0 +835 102 422 23 665 1265 10 0 668 +836 240 34 -13 5998 6598 10 450 0 +837 141 428 20 535 1135 10 0 867 +838 204 269 30 49 649 10 0 126 +839 144 439 30 845 1445 10 0 229 +840 470 417 -20 2707 3307 10 71 0 +841 404 103 -30 726 1326 10 162 0 +842 5 281 -18 5246 5846 10 333 0 +843 487 320 -30 3191 3791 10 960 0 +844 398 23 -9 784 1384 10 908 0 +845 90 296 20 366 966 10 0 902 +846 386 13 -10 1108 1708 10 767 0 +847 115 465 10 809 1409 10 0 703 +848 473 475 -10 1429 2029 10 962 0 +849 275 42 -30 710 1310 10 870 0 +850 286 356 30 148 748 10 0 88 +851 15 69 -10 927 1527 10 621 0 +852 267 44 -20 783 1383 10 453 0 +853 243 399 10 699 1299 10 0 224 +854 390 249 21 2087 2687 10 0 291 +855 210 391 30 326 926 10 0 795 +856 433 15 -10 891 1491 10 690 0 +857 24 259 -20 1240 1840 10 659 0 +858 12 463 -20 1203 1803 10 783 0 +859 237 213 10 348 948 10 0 660 +860 182 480 31 1219 1819 10 0 761 +861 409 88 20 841 1441 10 0 674 +862 244 368 -20 1416 2016 10 878 0 +863 381 328 12 2629 3229 10 0 583 +864 213 185 -20 74 674 10 386 0 +865 482 141 -10 3803 4403 10 452 0 +866 319 124 20 472 1072 10 0 490 +867 141 431 -20 632 1232 10 837 0 +868 198 264 20 321 921 10 0 818 +869 69 334 30 584 1184 10 0 419 +870 299 98 30 427 1027 10 0 849 +871 240 250 10 10 610 10 0 653 +872 199 203 -23 5589 6189 10 42 0 +873 459 17 -10 1405 2005 10 692 0 +874 423 217 20 727 1327 10 0 611 +875 477 179 -10 651 1251 10 522 0 +876 213 397 -9 629 1229 10 437 0 +877 405 187 -22 4762 5362 10 447 0 +878 269 402 20 571 1171 10 0 862 +879 53 204 8 3980 4580 10 0 964 +880 13 394 -5 1250 1850 10 922 0 +881 15 68 10 971 1571 10 0 73 +882 56 268 28 4016 4616 10 0 509 +883 360 184 10 646 1246 10 0 806 +884 307 102 40 599 1199 10 0 429 +885 130 57 -16 690 1290 10 47 0 +886 250 328 24 755 1355 10 0 148 +887 91 231 30 561 1161 10 0 319 +888 479 176 20 706 1306 0 0 1003 +889 420 224 10 1476 2076 10 0 548 +890 461 182 -10 2276 2876 10 492 0 +891 418 218 20 828 1428 10 0 648 +892 419 418 10 756 1356 10 0 774 +893 336 493 -11 5732 6332 10 460 0 +894 389 300 10 375 975 10 0 777 +895 92 76 4 4316 4916 10 0 151 +896 476 102 20 1105 1705 10 0 446 +897 418 399 20 1511 2111 10 0 106 +898 109 56 -20 659 1259 10 525 0 +899 13 465 31 2854 3454 10 0 434 +900 92 232 10 467 1067 10 0 995 +901 394 47 5 1012 1612 10 0 391 +902 16 287 -20 843 1443 10 845 0 +903 399 102 20 828 1428 10 0 820 +904 143 158 -20 310 910 10 314 0 +905 18 484 -20 1060 1660 10 966 0 +906 250 411 30 512 1112 10 0 330 +907 19 273 25 3826 4426 10 0 566 +908 365 28 9 833 1433 10 0 844 +909 387 297 10 321 921 10 0 135 +910 433 447 -20 2937 3537 10 56 0 +911 214 274 24 5236 5836 10 0 714 +912 489 338 -7 5349 5949 10 775 0 +913 130 494 -10 2795 3395 10 62 0 +914 23 67 30 1317 1917 0 0 1008 +915 374 489 -20 777 1377 10 974 0 +916 126 30 10 847 1447 10 0 212 +917 112 467 10 864 1464 10 0 975 +918 489 274 31 1895 2495 10 0 662 +919 61 214 -10 1127 1727 10 203 0 +920 166 440 12 531 1131 10 0 157 +921 56 75 -8 5511 6111 10 832 0 +922 210 276 5 47 647 10 0 880 +923 80 286 10 656 1256 10 0 788 +924 17 459 -18 1448 2048 10 276 0 +925 66 448 10 781 1381 10 0 32 +926 351 128 -23 4773 5373 10 604 0 +927 352 176 -19 204 804 10 727 0 +928 490 286 29 1849 2449 10 0 136 +929 247 219 17 31 631 10 0 564 +930 86 268 10 629 1229 10 0 688 +931 398 329 -30 371 971 10 755 0 +932 272 402 10 398 998 10 0 712 +933 317 123 20 521 1121 10 0 175 +934 408 318 15 2332 2932 10 0 427 +935 66 31 25 3954 4554 10 0 410 +936 425 448 -17 2938 3538 10 8 0 +937 35 304 30 630 1230 10 0 645 +938 471 94 -30 3755 4355 10 612 0 +939 470 473 10 1484 2084 10 0 948 +940 224 56 -31 4506 5106 10 723 0 +941 343 47 20 868 1468 10 0 978 +942 52 18 -20 3188 3788 10 572 0 +943 16 68 20 1015 1615 10 0 415 +944 195 185 20 209 809 10 0 166 +945 92 236 -10 791 1391 10 355 0 +946 76 462 -17 3584 4184 10 147 0 +947 124 56 20 625 1225 10 0 31 +948 481 454 -10 1042 1642 10 939 0 +949 477 483 20 1223 1823 10 0 524 +950 481 124 10 894 1494 10 0 552 +951 389 156 -14 2622 3222 10 285 0 +952 384 16 -30 1162 1762 10 787 0 +953 492 34 5 3002 3602 10 0 132 +954 371 200 10 657 1257 10 0 159 +955 153 235 10 98 698 10 0 40 +956 428 202 -14 3375 3975 10 24 0 +957 257 391 -21 6292 6892 10 463 0 +958 421 218 10 776 1376 10 0 599 +959 206 186 -20 510 1110 10 124 0 +960 393 301 30 473 1073 10 0 843 +961 204 187 -20 461 1061 10 607 0 +962 468 475 10 953 1553 10 0 848 +963 477 122 -20 1080 1680 10 233 0 +964 100 66 -8 5359 5959 10 879 0 +965 489 27 -20 1445 2045 10 183 0 +966 12 451 20 946 1546 10 0 905 +967 197 270 30 143 743 10 0 507 +968 311 422 -12 3712 4312 10 217 0 +969 489 17 -20 1280 1880 10 195 0 +970 13 214 -18 5174 5774 10 190 0 +971 440 247 -20 772 1372 10 518 0 +972 28 467 -26 5130 5730 10 30 0 +973 388 325 -30 813 1413 10 537 0 +974 270 401 20 349 949 10 0 915 +975 5 445 -10 1004 1604 10 917 0 +976 198 271 20 97 697 10 0 202 +977 480 131 -20 2510 3110 10 716 0 +978 437 98 -20 4215 4815 10 941 0 +979 131 246 -12 3088 3688 10 734 0 +980 49 437 7 1470 2070 10 0 348 +981 270 49 -20 928 1528 10 797 0 +982 337 41 -40 3769 4369 10 172 0 +983 318 280 20 148 748 10 0 556 +984 154 392 9 386 986 10 0 739 +985 493 111 -22 1924 2524 10 784 0 +986 399 450 20 1195 1795 0 0 1001 +987 67 452 30 838 1438 10 0 309 +988 34 239 -1 636 1236 10 538 0 +989 343 276 15 96 696 10 0 165 +990 393 12 10 997 1597 10 0 557 +991 236 247 20 14 614 10 0 666 +992 340 291 -12 1642 2242 10 796 0 +993 3 292 20 782 1382 10 0 511 +994 209 68 -25 6032 6632 10 584 0 +995 18 225 -10 2525 3125 10 900 0 +996 147 435 20 740 1340 10 0 628 +997 335 99 -22 4634 5234 10 780 0 +998 485 24 -40 1045 1645 10 809 0 +999 470 475 -25 1001 1601 10 179 0 +1000 341 58 10 655 1255 10 0 103 +1001 399 450 -20 1195 1795 10 986 0 +1002 13 459 -20 1147 1747 10 589 0 +1003 479 176 -20 706 1306 10 888 0 +1004 212 186 -11 6600 7200 10 153 0 +1005 54 445 -10 992 1592 10 102 0 +1006 90 285 -40 865 1465 10 803 0 +1007 397 57 -17 5664 6264 10 726 0 +1008 23 67 -30 1317 1917 10 914 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC2102.txt b/jsprit-instances/instances/lilim/1000/LRC2102.txt new file mode 100644 index 00000000..4ef24e3a --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC2102.txt @@ -0,0 +1,1012 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 -20 0 7009 10 211 0 +2 214 394 10 0 7126 10 0 17 +3 476 483 10 1419 1539 10 0 949 +4 352 487 -13 3607 3727 10 598 0 +5 230 197 40 486 606 10 0 485 +6 175 239 23 0 7199 10 0 266 +7 133 202 33 1842 1962 10 0 799 +8 328 458 -20 3071 3191 10 821 0 +9 25 499 -10 1780 1900 10 126 0 +10 226 423 -20 788 908 10 440 0 +11 313 282 -20 654 774 10 607 0 +12 60 454 10 0 6996 10 0 359 +13 239 486 -12 0 7038 10 324 0 +14 102 264 10 535 655 10 0 77 +15 408 452 -19 0 7018 10 577 0 +16 451 62 -10 0 6999 10 148 0 +17 203 390 -10 0 7127 10 2 0 +18 92 233 10 0 7116 10 0 988 +19 7 300 30 1379 1499 10 0 696 +20 409 90 -10 1033 1153 10 523 0 +21 307 108 -20 950 1070 10 933 0 +22 347 54 10 1180 1300 10 0 96 +23 406 87 -20 1252 1372 10 861 0 +24 371 332 -10 2118 2238 10 876 0 +25 116 466 -29 1004 1124 10 668 0 +26 441 265 -10 789 909 10 771 0 +27 130 140 17 776 896 10 0 254 +28 80 117 -20 3297 3417 10 525 0 +29 421 387 -20 0 7055 10 392 0 +30 83 300 -30 0 7100 10 609 0 +31 136 52 -10 0 7046 10 530 0 +32 18 462 20 0 6960 10 0 111 +33 390 120 24 4017 4137 10 0 103 +34 188 119 44 3899 4019 10 0 420 +35 467 114 10 1504 1624 10 0 750 +36 440 292 -10 3760 3880 10 184 0 +37 268 400 20 973 1093 10 0 330 +38 391 202 14 536 656 10 0 814 +39 377 432 -19 3326 3446 10 256 0 +40 80 290 10 790 910 10 0 258 +41 439 15 20 1373 1493 10 0 183 +42 307 52 23 3682 3802 10 0 502 +43 111 192 -19 0 7124 10 536 0 +44 131 56 10 1023 1143 10 0 174 +45 88 286 -20 1010 1130 10 101 0 +46 69 414 6 0 7030 10 0 551 +47 41 232 16 821 941 10 0 317 +48 323 77 -10 5620 5740 10 534 0 +49 340 416 36 0 7086 10 0 442 +50 86 199 -20 1111 1231 10 945 0 +51 314 124 20 924 1044 10 0 723 +52 375 191 -20 667 787 10 927 0 +53 226 175 -20 0 7196 10 521 0 +54 242 106 -10 5074 5194 10 239 0 +55 417 417 10 1328 1448 10 0 802 +56 419 459 20 1265 1385 10 0 84 +57 389 11 20 0 6998 10 0 195 +58 450 416 -20 0 7015 10 986 0 +59 246 255 10 450 570 10 0 839 +60 71 333 10 775 895 10 0 160 +61 105 474 -9 1883 2003 10 984 0 +62 20 489 10 1533 1653 10 0 812 +63 388 331 20 580 700 10 0 472 +64 92 259 -20 0 7116 10 116 0 +65 200 261 10 666 786 10 0 618 +66 400 288 30 0 7120 10 0 777 +67 299 285 -40 5015 5135 10 225 0 +68 378 199 10 829 949 10 0 683 +69 325 147 -25 4747 4867 10 557 0 +70 421 386 -20 0 7056 10 897 0 +71 404 447 20 940 1060 10 0 149 +72 412 478 7 0 6995 10 0 499 +73 26 67 -15 5267 5387 10 688 0 +74 358 183 20 935 1055 10 0 573 +75 30 302 -30 1066 1186 10 869 0 +76 176 470 14 2187 2307 10 0 246 +77 96 270 -10 649 769 10 14 0 +78 243 408 -10 5735 5855 10 671 0 +79 60 29 -16 5451 5571 10 842 0 +80 34 169 11 1938 2058 10 0 772 +81 407 280 10 834 954 10 0 416 +82 277 403 10 699 819 10 0 159 +83 498 456 -30 5624 5744 10 639 0 +84 384 491 -20 1391 1511 10 56 0 +85 355 174 -10 2861 2981 10 681 0 +86 97 288 -10 5136 5256 10 847 0 +87 316 284 20 499 619 10 0 934 +88 334 403 26 638 758 10 0 443 +89 415 223 -10 1219 1339 10 492 0 +90 230 320 -11 0 7202 10 619 0 +91 432 199 -20 2554 2674 10 707 0 +92 92 18 -25 4497 4617 10 935 0 +93 273 300 30 0 7219 10 0 999 +94 269 112 -10 0 7135 10 709 0 +95 429 389 -10 1696 1816 10 894 0 +96 371 71 -10 1147 1267 10 22 0 +97 5 297 10 0 7025 10 0 185 +98 414 378 23 1979 2099 10 0 141 +99 38 15 -8 4364 4484 10 717 0 +100 2 295 -10 1223 1343 10 645 0 +101 237 254 20 333 453 10 0 45 +102 54 445 10 1232 1352 10 0 489 +103 382 110 -24 4450 4570 10 33 0 +104 438 488 18 1309 1429 10 0 463 +105 395 331 20 866 986 10 0 487 +106 230 487 -33 4518 4638 10 208 0 +107 249 407 -38 695 815 10 581 0 +108 488 26 -30 0 6948 10 849 0 +109 151 81 -10 0 7079 10 621 0 +110 483 14 -20 1453 1573 10 998 0 +111 0 422 -20 3284 3404 10 32 0 +112 429 67 -20 2929 3049 10 380 0 +113 195 464 -27 6165 6285 10 120 0 +114 356 256 19 365 485 10 0 491 +115 264 180 -13 0 7203 10 413 0 +116 94 235 20 0 7118 10 0 64 +117 474 96 -30 1027 1147 10 298 0 +118 268 52 -20 1222 1342 10 762 0 +119 44 440 -30 3155 3275 10 937 0 +120 7 382 27 0 6998 10 0 113 +121 459 53 -10 4489 4609 10 353 0 +122 491 25 10 1634 1754 0 0 1001 +123 439 243 -10 1254 1374 10 303 0 +124 210 185 20 0 7198 10 0 961 +125 150 68 23 1691 1811 10 0 632 +126 201 270 10 0 7222 10 0 9 +127 0 188 -20 3728 3848 10 206 0 +128 103 464 -4 5092 5212 10 348 0 +129 325 56 -30 3186 3306 10 612 0 +130 44 344 12 4318 4438 10 0 623 +131 418 75 -20 1792 1912 10 896 0 +132 472 57 -20 0 6980 10 223 0 +133 460 328 13 876 996 10 0 831 +134 89 270 -10 814 934 10 635 0 +135 374 190 20 573 693 10 0 778 +136 463 253 -10 4188 4308 10 560 0 +137 97 93 -20 962 1082 10 753 0 +138 163 472 -25 2614 2734 10 815 0 +139 29 336 -20 1326 1446 10 993 0 +140 84 453 -10 4892 5012 10 924 0 +141 294 421 -23 6302 6422 10 98 0 +142 343 62 -10 1430 1550 10 169 0 +143 371 193 20 0 7141 10 0 725 +144 142 372 -20 0 7112 10 152 0 +145 66 88 -10 0 7029 10 640 0 +146 395 332 -10 0 7108 10 760 0 +147 93 413 17 845 965 10 0 251 +148 267 394 10 1037 1157 10 0 16 +149 249 258 -20 0 7266 10 71 0 +150 472 129 10 0 7022 10 0 620 +151 87 3 -8 5732 5852 10 879 0 +152 62 326 20 1145 1265 10 0 144 +153 212 186 -18 6886 7006 10 415 0 +154 241 402 -10 0 7122 10 261 0 +155 439 266 -29 741 861 10 494 0 +156 79 80 -20 5528 5648 10 943 0 +157 62 453 10 1179 1299 10 0 586 +158 188 151 -12 5187 5307 10 391 0 +159 386 154 -10 0 7108 10 82 0 +160 38 301 -10 1182 1302 10 60 0 +161 192 265 10 497 617 10 0 694 +162 371 192 30 519 639 10 0 579 +163 64 294 -10 0 7083 10 355 0 +164 381 494 -22 1334 1454 10 957 0 +165 437 12 20 1318 1438 10 0 938 +166 186 135 -27 2871 2991 10 898 0 +167 459 10 10 0 6956 10 0 561 +168 175 422 24 5786 5906 10 0 311 +169 274 48 10 845 965 10 0 142 +170 488 173 -20 1115 1235 10 375 0 +171 398 97 10 836 956 10 0 670 +172 385 17 -30 3235 3355 10 981 0 +173 180 283 -10 2975 3095 10 374 0 +174 71 12 -10 1172 1292 10 44 0 +175 343 49 10 1060 1180 10 0 908 +176 248 251 20 2 122 10 0 996 +177 7 194 29 0 7025 10 0 970 +178 322 290 23 5916 6036 10 0 389 +179 410 399 25 935 1055 10 0 218 +180 398 103 -20 1114 1234 10 267 0 +181 385 285 13 0 7135 10 0 544 +182 179 497 -6 0 7017 10 913 0 +183 464 13 -20 1539 1659 10 41 0 +184 492 335 10 3313 3433 10 0 36 +185 27 464 -10 5164 5284 10 97 0 +186 231 29 -27 4905 5025 10 700 0 +187 157 38 3 4191 4311 10 0 406 +188 439 268 -17 1191 1311 10 931 0 +189 149 214 7 0 7167 0 0 1008 +190 187 73 18 1168 1288 10 0 781 +191 429 169 8 3611 3731 10 0 611 +192 350 199 21 0 7162 10 0 588 +193 60 231 -19 4104 4224 10 857 0 +194 448 404 15 2396 2516 10 0 431 +195 481 20 -20 1388 1508 10 57 0 +196 436 25 -20 5129 5249 10 517 0 +197 111 459 -30 1435 1555 10 867 0 +198 389 17 -30 1463 1583 10 787 0 +199 148 208 -30 2106 2226 10 743 0 +200 475 477 20 1618 1738 10 0 290 +201 390 325 -20 1005 1125 10 210 0 +202 346 354 8 3270 3390 10 0 631 +203 91 266 -10 930 1050 10 923 0 +204 17 65 20 1307 1427 10 0 422 +205 391 112 -5 4001 4121 10 977 0 +206 224 203 20 155 275 10 0 127 +207 426 231 -10 4114 4234 10 883 0 +208 260 472 33 4144 4264 10 0 106 +209 265 0 -14 3584 3704 10 594 0 +210 391 293 20 903 1023 10 0 201 +211 411 421 20 1260 1380 10 0 1 +212 132 30 20 0 7025 10 0 506 +213 475 480 30 0 6953 10 0 662 +214 286 244 -16 5136 5256 10 669 0 +215 436 237 -10 0 7088 10 731 0 +216 402 284 -19 658 778 10 738 0 +217 287 397 12 2257 2377 10 0 722 +218 272 420 -25 5543 5663 10 179 0 +219 477 120 10 1368 1488 10 0 429 +220 145 434 20 932 1052 10 0 335 +221 33 286 -20 6184 6304 10 367 0 +222 370 262 15 4398 4518 10 0 284 +223 393 20 20 1563 1683 10 0 132 +224 330 308 -4 4682 4802 10 430 0 +225 246 398 40 532 652 10 0 67 +226 482 184 -9 4427 4547 10 390 0 +227 451 305 -30 774 894 10 960 0 +228 226 316 -21 221 341 10 451 0 +229 110 459 30 0 7023 10 0 511 +230 244 250 10 47 167 10 0 566 +231 458 16 20 1192 1312 10 0 873 +232 390 34 7 4241 4361 10 0 661 +233 423 214 20 867 987 10 0 361 +234 219 215 32 127 247 10 0 827 +235 326 118 10 0 7122 10 0 474 +236 365 74 -27 3394 3514 10 655 0 +237 331 356 13 2847 2967 10 0 758 +238 210 398 10 817 937 10 0 734 +239 403 93 10 0 7055 10 0 54 +240 248 404 30 598 718 10 0 398 +241 65 62 -10 3906 4026 10 955 0 +242 460 13 -20 1287 1407 10 682 0 +243 0 293 30 1115 1235 10 0 634 +244 211 248 26 96 216 10 0 372 +245 484 174 10 1058 1178 10 0 493 +246 175 352 -14 6660 6780 10 76 0 +247 455 168 -10 3467 3587 10 768 0 +248 224 191 20 324 444 10 0 969 +249 439 156 2 2103 2223 10 0 519 +250 434 359 13 5569 5689 10 0 795 +251 118 314 -17 0 7128 10 147 0 +252 234 246 10 259 379 10 0 835 +253 406 450 20 1037 1157 0 0 1007 +254 75 118 -17 1636 1756 10 27 0 +255 115 395 -20 3261 3381 10 328 0 +256 329 456 19 996 1116 10 0 39 +257 218 403 -20 5277 5397 10 315 0 +258 149 341 -10 1616 1736 10 40 0 +259 253 74 -30 5400 5520 10 385 0 +260 436 241 -19 1309 1429 10 727 0 +261 238 203 10 375 495 10 0 154 +262 405 455 -27 0 7017 10 332 0 +263 485 27 10 0 6951 10 0 379 +264 323 118 20 643 763 10 0 676 +265 330 371 -20 2234 2354 10 327 0 +266 25 65 -23 1505 1625 10 6 0 +267 406 96 20 863 983 10 0 180 +268 49 451 -22 1120 1240 10 509 0 +269 307 249 -20 5506 5626 10 983 0 +270 178 135 -28 6055 6175 10 942 0 +271 299 353 34 396 516 10 0 658 +272 236 213 20 98 218 10 0 529 +273 355 177 20 497 617 10 0 316 +274 394 23 -10 1615 1735 10 732 0 +275 306 235 25 172 292 10 0 629 +276 90 477 -10 1051 1171 10 917 0 +277 379 486 22 2687 2807 10 0 460 +278 435 16 10 1470 1590 10 0 790 +279 8 497 -22 0 6929 10 484 0 +280 150 484 -20 2501 2621 10 466 0 +281 213 399 18 936 1056 10 0 803 +282 391 18 10 1511 1631 10 0 571 +283 111 392 -30 0 7076 10 782 0 +284 330 281 -15 5322 5442 10 222 0 +285 344 203 14 669 789 10 0 323 +286 91 235 10 1076 1196 10 0 811 +287 346 60 10 1285 1405 10 0 396 +288 483 27 -10 1832 1952 10 965 0 +289 382 498 10 1237 1357 10 0 546 +290 457 492 -20 2032 2152 10 200 0 +291 291 213 -15 5031 5151 10 926 0 +292 154 374 -30 0 7118 10 539 0 +293 225 196 -24 0 7215 10 748 0 +294 94 40 -15 4272 4392 10 559 0 +295 0 356 -30 4345 4465 10 689 0 +296 297 283 -9 0 7217 10 936 0 +297 371 423 10 784 904 10 0 773 +298 417 217 30 754 874 10 0 117 +299 500 228 -22 0 7024 10 784 0 +300 412 214 10 604 724 10 0 841 +301 442 289 25 764 884 10 0 807 +302 157 269 31 0 7180 10 0 868 +303 440 241 10 1205 1325 10 0 123 +304 100 266 20 586 706 10 0 503 +305 111 178 18 566 686 10 0 418 +306 91 101 10 1193 1313 10 0 462 +307 25 307 -1 998 1118 10 538 0 +308 135 400 -20 1194 1314 10 587 0 +309 58 458 10 1291 1411 10 0 507 +310 133 26 -25 0 7022 10 497 0 +311 211 386 -24 0 7133 10 168 0 +312 94 97 -20 856 976 10 808 0 +313 30 155 -8 5122 5242 10 832 0 +314 208 184 20 294 414 10 0 944 +315 394 333 20 777 897 10 0 257 +316 355 180 -20 549 669 10 273 0 +317 241 180 -16 6778 6898 10 47 0 +318 21 485 -20 1353 1473 10 366 0 +319 80 251 -10 1214 1334 10 647 0 +320 476 61 -12 1795 1915 10 646 0 +321 406 94 10 911 1031 10 0 403 +322 364 71 5 0 7062 10 0 643 +323 418 221 -14 0 7104 10 285 0 +324 274 441 12 2778 2898 10 0 13 +325 304 97 20 727 847 10 0 423 +326 297 102 -20 0 7119 10 852 0 +327 250 405 20 646 766 10 0 265 +328 111 463 20 1286 1406 10 0 255 +329 408 279 -20 0 7114 10 691 0 +330 263 418 -20 1114 1234 10 37 0 +331 480 119 -22 2514 2634 10 780 0 +332 420 383 27 3928 4048 10 0 262 +333 142 14 18 3341 3461 10 0 895 +334 73 328 20 714 834 10 0 469 +335 50 438 -20 1347 1467 10 220 0 +336 441 7 -10 0 6965 10 1000 0 +337 462 14 20 1588 1708 10 0 478 +338 360 294 -17 5671 5791 10 912 0 +339 58 39 -32 4652 4772 10 687 0 +340 58 391 -30 3529 3649 10 975 0 +341 410 285 20 0 7111 10 0 483 +342 96 97 20 808 928 10 0 995 +343 21 64 20 1409 1529 10 0 914 +344 238 210 30 0 7233 0 0 1002 +345 479 121 10 1231 1351 10 0 673 +346 200 178 20 374 494 10 0 500 +347 216 341 -8 2616 2736 10 698 0 +348 48 437 4 3215 3335 10 0 128 +349 200 270 -20 236 356 10 991 0 +350 357 181 20 598 718 10 0 591 +351 476 174 -20 1297 1417 10 875 0 +352 400 286 10 0 7120 10 0 854 +353 351 481 10 1287 1407 10 0 121 +354 270 400 10 545 665 10 0 968 +355 95 234 10 653 773 10 0 163 +356 128 113 22 1451 1571 10 0 759 +357 133 455 25 0 7038 10 0 697 +358 16 463 20 0 6958 10 0 642 +359 59 388 -10 2651 2771 10 12 0 +360 376 190 -5 621 741 10 711 0 +361 481 122 -20 0 7010 10 233 0 +362 266 405 -3 868 988 10 710 0 +363 374 232 33 441 561 10 0 455 +364 398 20 20 1076 1196 10 0 377 +365 481 26 30 1227 1347 10 0 757 +366 63 444 20 0 7005 10 0 318 +367 89 290 20 0 7109 10 0 221 +368 246 314 -6 5781 5901 10 498 0 +369 40 304 -10 0 7058 10 900 0 +370 262 369 15 0 7155 10 0 853 +371 323 29 -14 0 7042 10 564 0 +372 89 65 -26 2881 3001 10 244 0 +373 144 35 -20 0 7035 10 627 0 +374 200 265 10 610 730 10 0 173 +375 436 264 20 686 806 10 0 170 +376 15 457 -10 0 6961 10 728 0 +377 397 20 -20 0 7002 10 364 0 +378 328 491 -10 2713 2833 10 532 0 +379 399 175 -10 0 7108 10 263 0 +380 432 2 20 1866 1986 10 0 112 +381 63 336 20 0 7069 10 0 626 +382 6 296 -4 0 7026 10 919 0 +383 146 376 8 937 1057 10 0 834 +384 295 247 -20 5214 5334 10 685 0 +385 235 33 30 5348 5468 10 0 259 +386 233 204 20 217 337 10 0 706 +387 142 360 -11 6128 6248 10 785 0 +388 177 156 25 0 7155 10 0 947 +389 315 287 -23 0 7200 10 178 0 +390 452 172 9 0 7058 10 0 226 +391 263 153 12 1650 1770 10 0 158 +392 493 493 20 3426 3546 10 0 29 +393 320 283 30 442 562 10 0 401 +394 64 5 -10 0 6967 10 488 0 +395 95 235 10 563 683 10 0 887 +396 203 211 -10 5226 5346 10 287 0 +397 16 497 20 1703 1823 10 0 770 +398 348 348 -30 3739 3859 10 240 0 +399 485 104 -20 3178 3298 10 446 0 +400 330 147 -22 3394 3514 10 992 0 +401 443 237 -30 754 874 10 393 0 +402 316 286 30 547 667 10 0 567 +403 335 46 -10 0 7053 10 321 0 +404 381 495 20 1290 1410 10 0 989 +405 364 173 30 721 841 10 0 576 +406 267 162 -3 5797 5917 10 187 0 +407 214 245 8 85 205 10 0 615 +408 92 234 10 0 7116 10 0 930 +409 347 459 -20 0 7044 10 774 0 +410 30 7 -10 4754 4874 10 816 0 +411 120 37 -24 3101 3221 10 921 0 +412 397 153 -10 3530 3650 10 990 0 +413 210 29 13 4203 4323 10 0 115 +414 87 285 30 964 1084 10 0 822 +415 132 32 18 3138 3258 10 0 153 +416 390 294 -10 949 1069 10 81 0 +417 67 451 -9 0 7003 10 739 0 +418 24 68 -18 1658 1778 10 305 0 +419 146 439 -12 1037 1157 10 920 0 +420 209 212 -44 0 7219 10 34 0 +421 6 292 -20 970 1090 10 449 0 +422 18 63 -20 1356 1476 10 204 0 +423 149 98 -20 4660 4780 10 325 0 +424 91 268 -10 978 1098 10 793 0 +425 103 177 28 0 7110 10 0 881 +426 367 178 20 721 841 10 0 675 +427 225 269 30 5083 5203 10 0 590 +428 443 246 -24 919 1039 10 556 0 +429 306 42 -10 1907 2027 10 219 0 +430 374 306 4 0 7138 10 0 224 +431 413 421 -15 0 7038 10 194 0 +432 470 405 -20 0 7005 10 828 0 +433 33 278 18 5949 6069 10 0 735 +434 149 458 -18 4655 4775 10 946 0 +435 257 57 -20 4904 5024 10 665 0 +436 272 403 30 0 7120 10 0 878 +437 221 291 9 184 304 10 0 823 +438 1 101 -20 5029 5149 10 464 0 +439 332 459 35 1475 1595 10 0 824 +440 220 392 20 0 7129 10 0 10 +441 253 50 27 903 1023 10 0 820 +442 250 441 -36 0 7083 10 49 0 +443 471 484 -26 0 6953 10 88 0 +444 480 152 26 4086 4206 10 0 648 +445 404 83 -20 1194 1314 10 903 0 +446 476 94 20 0 7000 10 0 399 +447 458 213 -10 4513 4633 10 958 0 +448 215 395 20 968 1088 10 0 825 +449 85 288 20 728 848 10 0 421 +450 179 75 13 2960 3080 10 0 663 +451 228 287 21 112 232 10 0 228 +452 397 18 10 1168 1288 10 0 901 +453 238 204 20 419 539 10 0 656 +454 488 3 -30 1602 1722 10 616 0 +455 407 88 -33 1298 1418 10 363 0 +456 459 14 20 1241 1361 10 0 829 +457 120 17 30 1116 1236 10 0 543 +458 235 316 -12 0 7207 10 902 0 +459 370 382 11 3535 3655 10 0 906 +460 405 454 -22 5212 5332 10 277 0 +461 17 458 -10 1732 1852 10 625 0 +462 43 135 -10 0 7038 10 306 0 +463 318 497 -18 0 7018 10 104 0 +464 199 268 20 0 7220 10 0 438 +465 111 467 -23 0 7017 10 666 0 +466 138 438 20 1149 1269 10 0 280 +467 172 314 9 2182 2302 10 0 922 +468 494 468 -14 1410 1530 10 948 0 +469 35 303 -20 0 7053 10 334 0 +470 341 59 27 3159 3279 10 0 767 +471 423 221 9 1033 1153 10 0 692 +472 395 295 -20 845 965 10 63 0 +473 413 417 10 1424 1544 10 0 893 +474 339 60 -10 844 964 10 235 0 +475 277 428 7 0 7094 10 0 804 +476 176 199 28 299 419 10 0 904 +477 265 240 9 18 138 10 0 813 +478 365 190 -20 5910 6030 10 337 0 +479 133 53 20 0 7045 10 0 653 +480 387 488 20 1448 1568 10 0 680 +481 385 295 20 509 629 10 0 892 +482 491 369 28 2918 3038 10 0 495 +483 445 273 -20 1031 1151 10 341 0 +484 195 273 22 0 7215 10 0 279 +485 313 493 -40 4772 4892 10 5 0 +486 495 227 -37 1376 1496 10 672 0 +487 241 403 -20 0 7121 10 105 0 +488 30 72 10 1726 1846 10 0 394 +489 21 487 -10 1401 1521 10 102 0 +490 324 99 10 1352 1472 10 0 667 +491 453 318 -19 0 7060 10 114 0 +492 443 272 10 0 7080 10 0 89 +493 447 184 -10 1698 1818 10 245 0 +494 366 288 29 0 7152 10 0 155 +495 440 284 -28 0 7081 10 482 0 +496 13 314 -20 975 1095 10 830 0 +497 72 227 25 0 7095 10 0 310 +498 377 385 6 3465 3585 10 0 368 +499 477 478 -7 0 6953 10 72 0 +500 204 185 -20 0 7195 10 346 0 +501 226 191 20 372 492 10 0 701 +502 330 138 -23 4438 4558 10 42 0 +503 185 434 -20 0 7079 10 304 0 +504 483 22 -20 0 6949 10 856 0 +505 71 282 -17 2567 2687 10 817 0 +506 60 5 -20 0 6964 10 212 0 +507 189 402 -10 2144 2264 10 309 0 +508 134 211 -10 482 602 10 871 0 +509 146 313 22 0 7153 10 0 268 +510 21 146 -20 1947 2067 10 800 0 +511 37 281 -30 0 7059 10 229 0 +512 416 417 20 1372 1492 10 0 524 +513 44 311 27 1630 1750 10 0 555 +514 361 181 20 0 7144 10 0 874 +515 444 242 -10 862 982 10 542 0 +516 444 271 10 982 1102 10 0 592 +517 359 179 20 0 7144 10 0 196 +518 388 334 20 0 7113 10 0 973 +519 401 164 -2 0 7101 10 249 0 +520 499 316 -10 2487 2607 10 690 0 +521 399 106 20 1207 1327 10 0 53 +522 425 215 10 916 1036 10 0 918 +523 407 98 10 814 934 10 0 20 +524 406 460 -20 2877 2997 10 512 0 +525 88 95 20 0 7050 10 0 28 +526 95 64 4 3064 3184 10 0 964 +527 306 229 -20 5281 5401 10 599 0 +528 273 55 20 725 845 10 0 810 +529 384 149 -20 4789 4909 10 272 0 +530 122 35 10 981 1101 10 0 31 +531 308 199 -17 6033 6153 10 726 0 +532 390 301 10 661 781 10 0 378 +533 300 108 10 542 662 10 0 633 +534 267 400 10 929 1049 10 0 48 +535 8 300 10 1423 1543 10 0 836 +536 105 181 19 6125 6245 10 0 43 +537 398 325 30 933 1053 10 0 603 +538 166 247 1 276 396 10 0 307 +539 140 431 30 0 7063 10 0 292 +540 253 118 19 2189 2309 0 0 1006 +541 359 246 18 0 7165 10 0 729 +542 321 277 10 244 364 10 0 515 +543 168 59 -30 1464 1584 10 457 0 +544 406 285 -13 0 7115 10 181 0 +545 391 334 20 724 844 10 0 863 +546 437 19 -10 4056 4176 10 289 0 +547 201 278 13 166 286 10 0 837 +548 435 267 20 1291 1411 10 0 678 +549 245 408 -20 815 935 10 974 0 +550 16 462 10 0 6959 10 0 905 +551 107 374 -6 3657 3777 10 46 0 +552 477 97 -20 1131 1251 10 806 0 +553 346 57 20 1233 1353 10 0 870 +554 14 459 20 1343 1463 10 0 858 +555 102 6 -27 5834 5954 10 513 0 +556 359 287 24 0 7159 10 0 428 +557 297 131 25 4662 4782 10 0 69 +558 282 1 18 4170 4290 10 0 714 +559 21 70 15 3085 3205 10 0 294 +560 440 244 10 0 7084 10 0 136 +561 482 104 -10 3230 3350 10 167 0 +562 120 261 -30 3173 3293 10 786 0 +563 125 29 -10 1133 1253 10 916 0 +564 292 32 14 917 1037 10 0 371 +565 262 92 25 0 7116 10 0 652 +566 68 160 -10 0 7071 10 230 0 +567 405 276 -30 937 1057 10 402 0 +568 277 50 10 791 911 10 0 699 +569 32 319 21 0 7046 10 0 880 +570 344 70 24 0 7071 10 0 866 +571 481 84 -10 2022 2142 10 282 0 +572 21 68 -10 1606 1726 10 851 0 +573 441 244 -20 1108 1228 10 74 0 +574 57 43 15 0 6991 10 0 605 +575 1 293 -20 1071 1191 10 845 0 +576 481 96 -30 1188 1308 10 405 0 +577 471 368 19 1712 1832 10 0 15 +578 236 126 23 439 559 10 0 809 +579 406 99 -30 908 1028 10 162 0 +580 303 186 10 5417 5537 0 0 1009 +581 225 369 38 426 546 10 0 107 +582 412 453 -10 1188 1308 10 859 0 +583 104 349 20 4037 4157 10 0 745 +584 173 182 25 351 471 10 0 885 +585 111 464 -24 1242 1362 10 886 0 +586 53 440 -10 1292 1412 10 157 0 +587 69 336 20 0 7074 10 0 308 +588 359 182 -21 0 7146 10 192 0 +589 13 459 -30 0 6959 10 593 0 +590 244 277 -30 5205 5325 10 427 0 +591 484 177 -20 1006 1126 10 350 0 +592 452 206 -10 1969 2089 10 516 0 +593 22 483 30 1244 1364 10 0 589 +594 452 110 14 1361 1481 10 0 209 +595 347 192 -34 5953 6073 10 877 0 +596 95 92 -21 1011 1131 10 864 0 +597 368 311 -20 3704 3824 10 737 0 +598 479 387 13 1590 1710 10 0 4 +599 479 169 20 1234 1354 10 0 527 +600 497 266 25 2990 3110 0 0 1004 +601 66 336 10 1013 1133 10 0 911 +602 376 195 10 724 844 10 0 928 +603 401 281 -30 1044 1164 10 537 0 +604 441 177 -10 4005 4125 10 889 0 +605 231 203 -15 0 7224 10 574 0 +606 21 488 -10 1445 1565 10 664 0 +607 231 204 20 601 721 10 0 11 +608 122 422 3 5827 5947 10 0 679 +609 65 453 30 1127 1247 10 0 30 +610 206 261 -20 0 7229 10 703 0 +611 466 149 -8 0 7036 10 191 0 +612 313 119 30 863 983 10 0 129 +613 90 274 20 717 837 10 0 791 +614 39 162 -30 2261 2381 10 788 0 +615 35 306 -8 918 1038 10 407 0 +616 437 15 30 1421 1541 10 0 454 +617 307 412 8 1615 1735 10 0 982 +618 79 291 -10 835 955 10 65 0 +619 64 437 11 3673 3793 10 0 90 +620 376 92 -10 3962 4082 10 150 0 +621 129 27 10 1190 1310 10 0 109 +622 196 489 23 4121 4241 10 0 972 +623 51 286 -12 5836 5956 10 130 0 +624 20 488 -30 1489 1609 10 987 0 +625 13 455 10 0 6961 10 0 461 +626 170 347 -20 1743 1863 10 381 0 +627 92 230 20 755 875 10 0 373 +628 117 467 -30 958 1078 10 779 0 +629 413 217 -25 656 776 10 275 0 +630 405 450 -30 0 7021 10 719 0 +631 394 322 -8 4099 4219 10 202 0 +632 125 61 -23 2447 2567 10 125 0 +633 238 123 -10 3124 3244 10 533 0 +634 11 403 -30 1372 1492 10 243 0 +635 89 272 10 766 886 10 0 134 +636 304 102 30 0 7117 10 0 721 +637 478 121 -20 1275 1395 10 888 0 +638 408 84 10 1137 1257 10 0 736 +639 376 494 30 1079 1199 10 0 83 +640 20 73 10 1101 1221 10 0 145 +641 159 299 -20 4062 4182 10 976 0 +642 95 382 -20 0 7071 10 358 0 +643 352 63 -5 4713 4833 10 322 0 +644 365 274 14 410 530 10 0 798 +645 30 301 10 1110 1230 10 0 100 +646 351 5 12 0 7009 10 0 320 +647 197 267 10 435 555 10 0 319 +648 498 171 -26 5026 5146 10 444 0 +649 468 352 -30 0 7034 10 755 0 +650 418 251 21 4787 4907 10 0 718 +651 489 437 -30 2827 2947 10 850 0 +652 251 63 -25 3950 4070 10 565 0 +653 132 55 -20 1069 1189 10 479 0 +654 281 96 -12 4503 4623 10 796 0 +655 333 293 27 2468 2588 10 0 236 +656 255 487 -20 1592 1712 10 453 0 +657 207 400 -30 762 882 10 855 0 +658 469 489 -34 0 6950 10 271 0 +659 244 254 20 401 521 10 0 907 +660 233 207 10 165 285 10 0 708 +661 441 60 -7 5835 5955 10 232 0 +662 411 379 -30 0 7068 10 213 0 +663 178 72 -13 0 7082 10 450 0 +664 51 447 10 1178 1298 10 0 606 +665 478 118 20 1417 1537 10 0 435 +666 141 426 23 0 7067 10 0 465 +667 295 89 -10 2968 3088 10 490 0 +668 112 433 29 940 1060 10 0 25 +669 320 211 16 3970 4090 10 0 214 +670 400 103 -10 1022 1142 10 171 0 +671 408 453 10 1132 1252 10 0 78 +672 435 180 37 898 1018 10 0 486 +673 432 66 -10 4285 4405 10 345 0 +674 374 116 -5 0 7092 10 953 0 +675 478 102 -20 0 7003 10 426 0 +676 335 57 -20 784 904 10 264 0 +677 385 239 -23 3142 3262 10 801 0 +678 386 245 -20 1916 2036 10 548 0 +679 208 396 -3 0 7123 10 608 0 +680 380 489 -20 1516 1636 10 480 0 +681 380 498 10 1189 1309 10 0 85 +682 440 7 20 1255 1375 10 0 242 +683 434 245 -10 1367 1487 10 68 0 +684 90 232 -30 0 7113 10 967 0 +685 389 334 20 0 7112 10 0 384 +686 241 205 -27 0 7229 10 994 0 +687 18 24 32 2513 2633 10 0 339 +688 57 183 15 4401 4521 10 0 73 +689 59 457 30 0 6993 10 0 295 +690 442 243 10 1154 1274 10 0 520 +691 402 281 20 1000 1120 10 0 329 +692 445 237 -9 0 7079 10 471 0 +693 441 273 20 0 7082 0 0 1010 +694 31 175 -10 986 1106 10 161 0 +695 234 202 10 319 439 10 0 724 +696 52 303 -30 1765 1885 10 19 0 +697 167 445 -25 0 7063 10 357 0 +698 179 286 8 1365 1485 10 0 347 +699 269 48 -10 1122 1242 10 568 0 +700 165 59 27 3771 3891 10 0 186 +701 461 8 -20 0 6953 10 501 0 +702 421 415 -10 941 1061 10 909 0 +703 59 459 20 1245 1365 10 0 610 +704 24 492 10 1848 1968 10 0 747 +705 55 449 -10 1054 1174 10 925 0 +706 224 192 -20 280 400 10 386 0 +707 444 269 20 934 1054 10 0 91 +708 491 20 -10 1574 1694 10 660 0 +709 313 126 10 973 1093 10 0 94 +710 283 438 3 926 1046 10 0 362 +711 352 241 5 0 7172 10 0 360 +712 398 476 25 0 7004 10 0 962 +713 442 247 10 0 7082 10 0 756 +714 217 207 -18 5530 5650 10 558 0 +715 233 87 18 1010 1130 10 0 952 +716 479 127 -20 1079 1199 10 776 0 +717 6 53 8 2348 2468 10 0 99 +718 478 300 -21 0 7041 10 650 0 +719 378 493 30 1127 1247 10 0 630 +720 303 78 12 660 780 10 0 819 +721 344 62 -30 1386 1506 10 636 0 +722 371 315 -12 4663 4783 10 217 0 +723 200 78 -20 0 7095 10 51 0 +724 413 391 -10 868 988 10 695 0 +725 415 216 -20 705 825 10 143 0 +726 397 57 17 5904 6024 10 0 531 +727 293 228 19 0 7226 10 0 260 +728 0 297 10 1171 1291 10 0 376 +729 435 20 -18 0 6979 10 541 0 +730 195 111 -14 3992 4112 10 765 0 +731 417 218 10 1112 1232 10 0 215 +732 340 54 10 951 1071 10 0 274 +733 132 57 20 978 1098 10 0 789 +734 210 379 -10 2835 2955 10 238 0 +735 228 260 -18 6422 6542 10 433 0 +736 399 104 -10 0 7066 10 638 0 +737 95 277 20 1098 1218 10 0 597 +738 360 284 19 0 7159 10 0 216 +739 53 466 9 1340 1460 10 0 417 +740 112 465 10 1197 1317 10 0 860 +741 313 391 5 598 718 10 0 915 +742 93 235 10 0 7117 10 0 882 +743 125 32 30 0 7023 10 0 199 +744 215 282 -31 5762 5882 10 899 0 +745 224 320 -20 5135 5255 10 583 0 +746 134 428 20 1232 1352 10 0 752 +747 26 490 -10 1899 2019 10 704 0 +748 44 115 24 925 1045 10 0 293 +749 438 127 -7 3764 3884 10 775 0 +750 239 15 -10 2415 2535 10 35 0 +751 342 54 20 999 1119 10 0 844 +752 109 463 -20 1334 1454 10 746 0 +753 199 187 20 507 627 10 0 137 +754 201 188 10 555 675 10 0 959 +755 399 301 30 777 897 10 0 649 +756 484 171 -10 0 7028 10 713 0 +757 272 234 -30 6361 6481 10 365 0 +758 380 350 -13 3466 3586 10 237 0 +759 140 108 -22 0 7095 10 356 0 +760 228 199 10 537 657 10 0 146 +761 245 461 -17 2597 2717 10 929 0 +762 305 107 20 901 1021 10 0 118 +763 231 195 20 437 557 10 0 862 +764 450 265 -30 865 985 10 792 0 +765 273 149 14 0 7171 10 0 730 +766 12 358 7 4897 5017 10 0 818 +767 315 121 -27 0 7130 10 470 0 +768 420 213 10 814 934 10 0 247 +769 331 134 -10 0 7133 10 932 0 +770 84 377 -20 3705 3825 10 397 0 +771 320 280 10 340 460 10 0 26 +772 89 185 -11 2399 2519 10 80 0 +773 472 481 -10 1306 1426 10 297 0 +774 422 420 20 1050 1170 10 0 409 +775 475 267 7 3118 3238 10 0 749 +776 470 125 20 952 1072 10 0 716 +777 435 268 -30 1247 1367 10 66 0 +778 409 155 -20 681 801 10 135 0 +779 243 248 30 96 216 10 0 628 +780 488 96 22 0 6991 10 0 331 +781 341 72 -18 3219 3339 10 190 0 +782 58 449 30 1451 1571 10 0 283 +783 16 460 -20 1643 1763 10 966 0 +784 480 136 22 0 7018 10 0 299 +785 162 388 11 4504 4624 10 0 387 +786 47 208 30 906 1026 10 0 562 +787 324 127 30 514 634 10 0 198 +788 87 96 30 1127 1247 10 0 614 +789 140 137 -20 2279 2399 10 733 0 +790 314 205 -10 6107 6227 10 278 0 +791 96 346 -20 741 861 10 613 0 +792 321 280 30 296 416 10 0 764 +793 245 251 10 5 125 10 0 424 +794 436 295 11 2113 2233 10 0 843 +795 274 261 -13 6828 6948 10 250 0 +796 271 128 12 1382 1502 10 0 654 +797 275 45 20 0 7068 10 0 872 +798 422 409 -14 0 7040 10 644 0 +799 146 188 -33 0 7153 10 7 0 +800 93 96 20 902 1022 10 0 510 +801 409 255 23 0 7115 10 0 677 +802 449 428 -10 4987 5107 10 55 0 +803 90 285 -18 1105 1225 10 281 0 +804 415 95 -7 4707 4827 10 475 0 +805 88 287 30 1054 1174 10 0 826 +806 379 196 20 776 896 10 0 552 +807 368 452 -25 2680 2800 10 301 0 +808 202 186 20 604 724 10 0 312 +809 435 11 -23 1189 1309 10 578 0 +810 269 46 -20 1074 1194 10 528 0 +811 7 292 -10 0 7028 10 286 0 +812 44 496 -10 1607 1727 10 62 0 +813 478 99 -9 1245 1365 10 477 0 +814 391 99 -14 766 886 10 38 0 +815 132 477 25 1309 1429 10 0 138 +816 24 65 10 1461 1581 10 0 410 +817 130 247 17 0 7154 10 0 505 +818 133 273 -7 0 7155 10 766 0 +819 347 62 -12 1334 1454 10 720 0 +820 404 140 -27 5035 5155 10 441 0 +821 416 420 20 1159 1279 10 0 8 +822 67 335 -30 967 1087 10 414 0 +823 92 270 -9 1027 1147 10 437 0 +824 411 95 -35 0 7051 10 439 0 +825 132 479 -20 0 7017 10 448 0 +826 366 334 -30 1641 1761 10 805 0 +827 125 39 -32 921 1041 10 234 0 +828 419 422 20 1105 1225 10 0 432 +829 460 2 -20 1412 1532 10 456 0 +830 67 334 20 923 1043 10 0 496 +831 448 414 -13 4891 5011 10 133 0 +832 46 163 8 3704 3824 10 0 313 +833 77 465 -30 1044 1164 10 838 0 +834 284 319 -8 3267 3387 10 383 0 +835 102 422 -10 905 1025 10 252 0 +836 240 34 -10 6238 6358 10 535 0 +837 141 428 -13 775 895 10 547 0 +838 204 269 30 0 7225 10 0 833 +839 144 439 -10 1085 1205 10 59 0 +840 470 417 -10 2947 3067 10 848 0 +841 404 103 -10 966 1086 10 300 0 +842 5 281 16 0 7028 10 0 79 +843 487 320 -11 0 7027 10 794 0 +844 398 23 -20 1024 1144 10 751 0 +845 90 296 20 606 726 10 0 575 +846 386 13 10 1348 1468 10 0 985 +847 115 465 10 1049 1169 10 0 86 +848 473 475 10 1669 1789 10 0 840 +849 275 42 30 950 1070 10 0 108 +850 286 356 30 388 508 10 0 651 +851 15 69 10 1167 1287 10 0 572 +852 267 44 20 1023 1143 10 0 326 +853 243 399 -15 939 1059 10 370 0 +854 390 249 -10 0 7134 10 352 0 +855 210 391 30 566 686 10 0 657 +856 433 15 20 1131 1251 10 0 504 +857 24 259 19 0 7048 10 0 193 +858 12 463 -20 0 6955 10 554 0 +859 237 213 10 588 708 10 0 582 +860 182 480 -10 1459 1579 10 740 0 +861 409 88 20 1081 1201 10 0 23 +862 244 368 -20 0 7156 10 763 0 +863 381 328 -20 2869 2989 10 545 0 +864 213 185 21 239 359 10 0 596 +865 482 141 -24 0 7018 10 956 0 +866 319 124 -24 0 7131 10 570 0 +867 141 431 30 872 992 10 0 197 +868 198 264 -31 0 7221 10 302 0 +869 69 334 30 824 944 10 0 75 +870 299 98 -20 0 7115 10 553 0 +871 240 250 10 150 270 10 0 508 +872 199 203 -20 5829 5949 10 797 0 +873 459 17 -20 1645 1765 10 231 0 +874 423 217 -20 967 1087 10 514 0 +875 477 179 20 891 1011 10 0 351 +876 213 397 10 869 989 10 0 24 +877 405 187 34 5002 5122 10 0 595 +878 269 402 -30 811 931 10 436 0 +879 53 204 8 4220 4340 10 0 151 +880 13 394 -21 1490 1610 10 569 0 +881 15 68 -28 1211 1331 10 425 0 +882 56 268 -10 4256 4376 10 742 0 +883 360 184 10 0 7146 10 0 207 +884 307 102 -16 0 7116 10 978 0 +885 130 57 -25 930 1050 10 584 0 +886 250 328 24 995 1115 10 0 585 +887 91 231 -10 801 921 10 395 0 +888 479 176 20 946 1066 10 0 637 +889 420 224 10 1716 1836 10 0 604 +890 461 182 -20 0 7053 10 971 0 +891 418 218 -10 1068 1188 10 954 0 +892 419 418 -20 0 7036 10 481 0 +893 336 493 -10 5972 6092 10 473 0 +894 389 300 10 615 735 10 0 95 +895 92 76 -18 0 7039 10 333 0 +896 476 102 20 1345 1465 10 0 131 +897 418 399 20 1751 1871 10 0 70 +898 109 56 27 0 7035 10 0 166 +899 13 465 31 3094 3214 10 0 744 +900 92 232 10 707 827 10 0 369 +901 394 47 -10 1252 1372 10 452 0 +902 16 287 12 1083 1203 10 0 458 +903 399 102 20 1068 1188 10 0 445 +904 143 158 -28 0 7133 10 476 0 +905 18 484 -10 1300 1420 10 550 0 +906 250 411 -11 0 7113 10 459 0 +907 19 273 -20 0 7042 10 659 0 +908 365 28 -10 1073 1193 10 175 0 +909 387 297 10 561 681 10 0 702 +910 433 447 -10 3177 3297 10 939 0 +911 214 274 -10 0 7231 10 601 0 +912 489 338 17 5589 5709 10 0 338 +913 130 494 6 0 7003 10 0 182 +914 23 67 -20 1557 1677 10 343 0 +915 374 489 -5 1017 1137 10 741 0 +916 126 30 10 1087 1207 10 0 563 +917 112 467 10 1104 1224 10 0 276 +918 489 274 -10 2135 2255 10 522 0 +919 61 214 4 1367 1487 10 0 382 +920 166 440 12 771 891 10 0 419 +921 56 75 24 0 7013 10 0 411 +922 210 276 -9 0 7227 10 467 0 +923 80 286 10 896 1016 10 0 203 +924 17 459 10 1688 1808 10 0 140 +925 66 448 10 1021 1141 10 0 705 +926 351 128 15 5013 5133 10 0 291 +927 352 176 20 444 564 10 0 52 +928 490 286 -10 0 7032 10 602 0 +929 247 219 17 65 185 10 0 761 +930 86 268 -10 869 989 10 408 0 +931 398 329 17 611 731 10 0 188 +932 272 402 10 638 758 10 0 769 +933 317 123 20 761 881 10 0 21 +934 408 318 -20 0 7102 10 87 0 +935 66 31 25 4194 4314 10 0 92 +936 425 448 9 3178 3298 10 0 296 +937 35 304 30 870 990 10 0 119 +938 471 94 -20 0 7004 10 165 0 +939 470 473 10 1724 1844 10 0 910 +940 224 56 -17 0 7079 10 979 0 +941 343 47 -27 0 7051 10 951 0 +942 52 18 28 3428 3548 10 0 270 +943 16 68 20 1255 1375 10 0 156 +944 195 185 -20 449 569 10 314 0 +945 92 236 20 0 7116 10 0 50 +946 76 462 18 3824 3944 10 0 434 +947 124 56 -25 865 985 10 388 0 +948 481 454 14 1282 1402 10 0 468 +949 477 483 -10 1463 1583 10 3 0 +950 481 124 10 1134 1254 10 0 963 +951 389 156 27 2862 2982 10 0 941 +952 384 16 -18 0 7005 10 715 0 +953 492 34 5 3242 3362 10 0 674 +954 371 200 10 897 1017 10 0 891 +955 153 235 10 333 453 10 0 241 +956 428 202 24 0 7090 10 0 865 +957 257 391 22 0 7133 10 0 164 +958 421 218 10 0 7101 10 0 447 +959 206 186 -10 750 870 10 754 0 +960 393 301 30 713 833 10 0 227 +961 204 187 -20 0 7196 10 124 0 +962 468 475 -25 1193 1313 10 712 0 +963 477 122 -10 1320 1440 10 950 0 +964 100 66 -4 5599 5719 10 526 0 +965 489 27 10 1685 1805 10 0 288 +966 12 451 20 0 6963 10 0 783 +967 197 270 30 383 503 10 0 684 +968 311 422 -10 0 7092 10 354 0 +969 489 17 -20 0 6941 10 248 0 +970 13 214 -29 5414 5534 10 177 0 +971 440 247 20 0 7084 10 0 890 +972 28 467 -23 5370 5490 10 622 0 +973 388 325 -20 1053 1173 10 518 0 +974 270 401 20 0 7122 10 0 549 +975 5 445 30 0 6961 10 0 340 +976 198 271 20 337 457 10 0 641 +977 480 131 5 2750 2870 10 0 205 +978 437 98 16 4455 4575 10 0 884 +979 131 246 17 0 7155 10 0 940 +980 49 437 7 1710 1830 0 0 1003 +981 270 49 30 1168 1288 10 0 172 +982 337 41 -8 4009 4129 10 617 0 +983 318 280 20 0 7200 10 0 269 +984 154 392 9 626 746 10 0 61 +985 493 111 -10 0 6995 10 846 0 +986 399 450 20 0 7025 10 0 58 +987 67 452 30 1078 1198 10 0 624 +988 34 239 -10 876 996 10 18 0 +989 343 276 -20 0 7178 10 404 0 +990 393 12 10 0 6997 10 0 412 +991 236 247 20 210 330 10 0 349 +992 340 291 22 1882 2002 10 0 400 +993 3 292 20 1022 1142 10 0 139 +994 209 68 27 6272 6392 10 0 686 +995 18 225 -20 0 7041 10 342 0 +996 147 435 -20 0 7063 10 176 0 +997 335 99 25 4874 4994 0 0 1005 +998 485 24 20 1285 1405 10 0 110 +999 470 475 -30 0 6960 10 93 0 +1000 341 58 10 895 1015 10 0 336 +1001 491 25 -10 1634 1754 10 122 0 +1002 238 210 -30 0 7233 10 344 0 +1003 49 437 -7 1710 1830 10 980 0 +1004 497 266 -25 2990 3110 10 600 0 +1005 335 99 -25 4874 4994 10 997 0 +1006 253 118 -19 2189 2309 10 540 0 +1007 406 450 -20 1037 1157 10 253 0 +1008 149 214 -7 0 7167 10 189 0 +1009 303 186 -10 5417 5537 10 580 0 +1010 441 273 -20 0 7082 10 693 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC2103.txt b/jsprit-instances/instances/lilim/1000/LRC2103.txt new file mode 100644 index 00000000..7ea596ac --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC2103.txt @@ -0,0 +1,1016 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 18 0 7009 10 0 936 +2 214 394 -13 0 7126 10 181 0 +3 476 483 10 0 6950 10 0 200 +4 352 487 27 0 7016 10 0 434 +5 230 197 40 486 606 10 0 412 +6 175 239 -10 0 7199 10 930 0 +7 133 202 -14 1842 1962 10 319 0 +8 328 458 -25 0 7052 10 409 0 +9 25 499 10 1780 1900 10 0 279 +10 226 423 15 788 908 10 0 237 +11 313 282 20 654 774 10 0 971 +12 60 454 -20 0 6996 10 32 0 +13 239 486 3 0 7038 10 0 218 +14 102 264 10 535 655 10 0 696 +15 408 452 -10 0 7018 10 297 0 +16 451 62 -20 0 6999 10 941 0 +17 203 390 -38 0 7127 10 581 0 +18 92 233 10 0 7116 10 0 868 +19 7 300 30 1379 1499 10 0 127 +20 409 90 -20 1033 1153 10 579 0 +21 307 108 -14 950 1070 10 765 0 +22 347 54 -20 1180 1300 10 223 0 +23 406 87 -10 1252 1372 10 638 0 +24 371 332 14 2118 2238 10 0 655 +25 116 466 -20 1004 1124 10 837 0 +26 441 265 40 0 7083 10 0 828 +27 130 140 17 776 896 10 0 919 +28 80 117 -9 3297 3417 10 313 0 +29 421 387 -10 0 7055 10 82 0 +30 83 300 26 0 7100 10 0 152 +31 136 52 -30 0 7046 10 457 0 +32 18 462 20 0 6960 10 0 12 +33 390 120 -23 4017 4137 10 42 0 +34 188 119 44 3899 4019 10 0 400 +35 467 114 -5 0 7018 10 977 0 +36 440 292 -8 3760 3880 10 299 0 +37 268 400 20 973 1093 10 0 70 +38 391 202 14 0 7126 10 0 768 +39 377 432 -29 3326 3446 10 651 0 +40 80 290 10 790 910 10 0 496 +41 439 15 -30 1373 1493 10 405 0 +42 307 52 23 3682 3802 10 0 33 +43 111 192 -12 0 7124 10 904 0 +44 131 56 10 1023 1143 10 0 339 +45 88 286 10 0 7109 10 0 860 +46 69 414 6 0 7030 10 0 619 +47 41 232 16 821 941 10 0 988 +48 323 77 -10 0 7087 10 261 0 +49 340 416 -26 0 7086 10 88 0 +50 86 199 -10 0 7103 10 286 0 +51 314 124 -12 924 1044 10 391 0 +52 375 191 30 667 787 10 0 233 +53 226 175 23 0 7196 10 0 700 +54 242 106 28 0 7130 10 0 852 +55 417 417 -20 1328 1448 10 878 0 +56 419 459 20 1265 1385 10 0 974 +57 389 11 20 0 6998 10 0 661 +58 450 416 -20 0 7015 10 63 0 +59 246 255 10 0 7268 0 0 1001 +60 71 333 -20 775 895 10 449 0 +61 105 474 -18 1883 2003 10 634 0 +62 20 489 -10 1533 1653 10 102 0 +63 388 331 20 580 700 10 0 58 +64 92 259 4 0 7116 10 0 502 +65 200 261 -20 666 786 10 607 0 +66 400 288 30 0 7120 10 0 260 +67 299 285 -5 5015 5135 10 741 0 +68 378 199 -21 829 949 10 192 0 +69 325 147 -24 0 7147 10 236 0 +70 421 386 -20 0 7056 10 37 0 +71 404 447 20 940 1060 10 0 582 +72 412 478 -1 0 6995 10 265 0 +73 26 67 -20 5267 5387 10 418 0 +74 358 183 20 935 1055 10 0 709 +75 30 302 -10 1066 1186 10 618 0 +76 176 470 -20 0 7042 10 630 0 +77 96 270 -10 0 7119 10 955 0 +78 243 408 15 5735 5855 0 0 1014 +79 60 29 32 5451 5571 10 0 506 +80 34 169 -10 1938 2058 10 535 0 +81 407 280 -24 834 954 10 556 0 +82 277 403 10 699 819 10 0 29 +83 498 456 27 0 6952 10 0 499 +84 384 491 -10 1391 1511 10 289 0 +85 355 174 33 0 7145 10 0 846 +86 97 288 22 5136 5256 10 0 872 +87 316 284 20 499 619 10 0 702 +88 334 403 26 638 758 10 0 49 +89 415 223 20 1219 1339 10 0 284 +90 230 320 -20 0 7202 10 483 0 +91 432 199 7 0 7085 10 0 520 +92 92 18 8 0 6994 10 0 914 +93 273 300 30 0 7219 10 0 834 +94 269 112 19 0 7135 10 0 916 +95 429 389 -10 0 7048 10 798 0 +96 371 71 -10 1147 1267 10 1000 0 +97 5 297 -20 0 7025 10 830 0 +98 414 378 23 0 7066 10 0 758 +99 38 15 -15 4364 4484 10 559 0 +100 2 295 -20 1223 1343 10 342 0 +101 237 254 20 333 453 10 0 913 +102 54 445 10 1232 1352 10 0 62 +103 382 110 -20 4450 4570 10 528 0 +104 438 488 -30 0 6971 10 213 0 +105 395 331 20 866 986 10 0 831 +106 230 487 20 4518 4638 10 0 862 +107 249 407 -10 695 815 10 932 0 +108 488 26 -20 0 6948 10 350 0 +109 151 81 -18 0 7079 10 715 0 +110 483 14 10 1453 1573 10 0 446 +111 0 422 8 0 6971 10 0 987 +112 429 67 -33 2929 3049 10 363 0 +113 195 464 20 6165 6285 0 0 1011 +114 356 256 -10 0 7168 10 323 0 +115 264 180 33 0 7203 10 0 588 +116 94 235 20 0 7118 10 0 589 +117 474 96 -20 0 7003 10 682 0 +118 268 52 10 1222 1342 10 0 781 +119 44 440 -10 0 6994 10 161 0 +120 7 382 27 0 6998 10 0 975 +121 459 53 -10 4489 4609 10 990 0 +122 491 25 -10 0 6945 10 504 0 +123 439 243 20 1254 1374 10 0 792 +124 210 185 20 0 7198 10 0 753 +125 150 68 23 0 7067 10 0 730 +126 201 270 10 0 7222 10 0 742 +127 0 188 -30 0 7017 10 19 0 +128 103 464 -20 5092 5212 10 915 0 +129 325 56 13 0 7067 10 0 648 +130 44 344 -21 4318 4438 10 744 0 +131 418 75 11 1792 1912 10 0 978 +132 472 57 17 0 6980 10 0 444 +133 460 328 13 876 996 10 0 516 +134 89 270 10 814 934 10 0 424 +135 374 190 20 573 693 10 0 756 +136 463 253 -13 4188 4308 10 890 0 +137 97 93 20 0 7055 10 0 921 +138 163 472 9 2614 2734 10 0 246 +139 29 336 -17 1326 1446 10 979 0 +140 84 453 19 4892 5012 10 0 503 +141 294 421 -20 6302 6422 10 367 0 +142 343 62 10 1430 1550 10 0 570 +143 371 193 20 0 7141 10 0 602 +144 142 372 -17 0 7112 10 931 0 +145 66 88 2 0 7029 10 0 993 +146 395 332 10 0 7108 10 0 774 +147 93 413 17 0 7048 10 0 835 +148 267 394 10 1037 1157 10 0 761 +149 249 258 -20 0 7266 10 893 0 +150 472 129 10 0 7022 10 0 595 +151 87 3 13 5732 5852 10 0 743 +152 62 326 -26 1145 1265 10 30 0 +153 212 186 -10 6886 7006 10 533 0 +154 241 402 -12 0 7122 10 217 0 +155 439 266 10 741 861 10 0 227 +156 79 80 -26 5528 5648 10 632 0 +157 62 453 10 1179 1299 10 0 739 +158 188 151 -19 0 7158 10 857 0 +159 386 154 31 0 7108 10 0 814 +160 38 301 -26 1182 1302 10 244 0 +161 192 265 10 497 617 10 0 119 +162 371 192 30 519 639 10 0 360 +163 64 294 12 0 7083 10 0 967 +164 381 494 -25 0 6998 10 179 0 +165 437 12 -20 1318 1438 10 242 0 +166 186 135 -18 2871 2991 10 333 0 +167 459 10 10 0 6956 10 0 195 +168 175 422 24 5786 5906 10 0 324 +169 274 48 10 845 965 10 0 864 +170 488 173 20 1115 1235 10 0 527 +171 398 97 10 836 956 10 0 365 +172 385 17 40 3235 3355 10 0 531 +173 180 283 23 2975 3095 10 0 388 +174 71 12 2 1172 1292 10 0 942 +175 343 49 10 1060 1180 10 0 452 +176 248 251 -30 0 7272 10 937 0 +177 7 194 29 0 7025 10 0 356 +178 322 290 23 5916 6036 10 0 389 +179 410 399 25 935 1055 10 0 164 +180 398 103 30 0 7066 10 0 278 +181 385 285 13 0 7135 10 0 2 +182 179 497 1 0 7017 10 0 920 +183 464 13 -20 1539 1659 10 336 0 +184 492 335 10 3313 3433 10 0 843 +185 27 464 -25 5164 5284 10 815 0 +186 231 29 -20 4905 5025 10 375 0 +187 157 38 -12 0 7043 10 720 0 +188 439 268 10 1191 1311 10 0 771 +189 149 214 -8 0 7167 10 407 0 +190 187 73 -20 0 7087 10 501 0 +191 429 169 -20 3611 3731 10 288 0 +192 350 199 21 0 7162 10 0 68 +193 60 231 -10 0 7084 10 395 0 +194 448 404 -13 2396 2516 10 598 0 +195 481 20 -10 1388 1508 10 167 0 +196 436 25 -10 0 6983 10 198 0 +197 111 459 20 0 7023 10 0 752 +198 389 17 10 1463 1583 10 0 196 +199 148 208 22 0 7164 10 0 827 +200 475 477 -10 1618 1738 10 3 0 +201 390 325 30 0 7116 10 0 796 +202 346 354 8 3270 3390 0 0 1008 +203 91 266 -10 930 1050 10 647 0 +204 17 65 -20 0 6977 10 733 0 +205 391 112 -9 4001 4121 10 674 0 +206 224 203 -15 0 7221 10 688 0 +207 426 231 -5 4114 4234 10 953 0 +208 260 472 33 4144 4264 10 0 383 +209 265 0 -2 3584 3704 10 750 0 +210 391 293 -10 903 1023 10 352 0 +211 411 421 20 1260 1380 10 0 912 +212 132 30 -30 0 7025 10 563 0 +213 475 480 30 0 6953 10 0 104 +214 286 244 -18 5136 5256 10 541 0 +215 436 237 -10 0 7088 10 303 0 +216 402 284 30 0 7119 10 0 683 +217 287 397 12 2257 2377 10 0 154 +218 272 420 -3 5543 5663 10 13 0 +219 477 120 -10 1368 1488 10 950 0 +220 145 434 -26 932 1052 10 791 0 +221 33 286 11 6184 6304 10 0 923 +222 370 262 -10 4398 4518 10 777 0 +223 393 20 20 0 7004 10 0 22 +224 330 308 -20 4682 4802 10 949 0 +225 246 398 -21 0 7126 10 463 0 +226 482 184 14 0 7033 10 0 486 +227 451 305 -10 774 894 10 155 0 +228 226 316 21 221 341 10 0 507 +229 110 459 -20 0 7023 10 659 0 +230 244 250 10 0 7268 10 0 817 +231 458 16 20 1192 1312 10 0 969 +232 390 34 -30 4241 4361 10 870 0 +233 423 214 -30 867 987 10 52 0 +234 219 215 32 127 247 10 0 302 +235 326 118 -20 0 7122 10 866 0 +236 365 74 24 0 7064 10 0 69 +237 331 356 -15 2847 2967 10 10 0 +238 210 398 10 817 937 10 0 656 +239 403 93 -20 0 7055 10 521 0 +240 248 404 -20 0 7120 10 327 0 +241 65 62 15 0 7011 10 0 964 +242 460 13 20 0 6958 10 0 165 +243 0 293 30 0 7021 10 0 510 +244 211 248 26 96 216 10 0 160 +245 484 174 -20 1058 1178 10 874 0 +246 175 352 -9 6660 6780 10 138 0 +247 455 168 -10 3467 3587 10 263 0 +248 224 191 20 324 444 10 0 568 +249 439 156 -30 2103 2223 10 316 0 +250 434 359 -20 5569 5689 10 897 0 +251 118 314 -10 0 7128 10 374 0 +252 234 246 10 0 7258 10 0 536 +253 406 450 20 1037 1157 10 0 649 +254 75 118 21 1636 1756 0 0 1006 +255 115 395 -10 3261 3381 10 625 0 +256 329 456 19 996 1116 10 0 332 +257 218 403 -20 5277 5397 10 428 0 +258 149 341 6 0 7139 10 0 867 +259 253 74 -10 0 7098 10 321 0 +260 436 241 -30 1309 1429 10 66 0 +261 238 203 10 375 495 10 0 48 +262 405 455 40 0 7017 10 0 368 +263 485 27 10 0 6951 10 0 247 +264 323 118 20 643 763 10 0 564 +265 330 371 1 0 7129 10 0 72 +266 25 65 -20 1505 1625 10 943 0 +267 406 96 -20 863 983 10 517 0 +268 49 451 -20 1120 1240 10 705 0 +269 307 249 10 0 7217 0 0 1003 +270 178 135 -30 6055 6175 10 788 0 +271 299 353 -30 396 516 10 850 0 +272 236 213 20 98 218 10 0 325 +273 355 177 20 0 7147 10 0 952 +274 394 23 -20 0 7006 10 453 0 +275 306 235 25 172 292 10 0 918 +276 90 477 -10 0 6997 10 489 0 +277 379 486 22 2687 2807 10 0 387 +278 435 16 -30 1470 1590 10 180 0 +279 8 497 -10 0 6929 10 9 0 +280 150 484 -10 2501 2621 10 309 0 +281 213 399 18 936 1056 10 0 853 +282 391 18 10 1511 1631 10 0 646 +283 111 392 -19 0 7076 10 642 0 +284 330 281 -20 5322 5442 10 89 0 +285 344 203 14 0 7169 10 0 301 +286 91 235 10 1076 1196 10 0 50 +287 346 60 -8 1285 1405 10 982 0 +288 483 27 20 0 6952 10 0 191 +289 382 498 10 1237 1357 10 0 84 +290 457 492 -10 2032 2152 10 962 0 +291 291 213 -10 0 7219 10 844 0 +292 154 374 -23 0 7118 10 666 0 +293 225 196 -4 0 7215 10 423 0 +294 94 40 -10 4272 4392 10 488 0 +295 0 356 13 4345 4465 10 0 334 +296 297 283 -11 0 7217 10 459 0 +297 371 423 10 784 904 10 0 15 +298 417 217 30 754 874 10 0 636 +299 500 228 8 0 7024 10 0 36 +300 412 214 10 604 724 10 0 749 +301 442 289 -14 0 7079 10 285 0 +302 157 269 -32 0 7180 10 234 0 +303 440 241 10 0 7084 10 0 215 +304 100 266 20 586 706 10 0 613 +305 111 178 18 566 686 10 0 800 +306 91 101 -16 0 7057 10 842 0 +307 25 307 10 998 1118 10 0 569 +308 135 400 -10 0 7085 10 419 0 +309 58 458 10 1291 1411 10 0 280 +310 133 26 -26 0 7022 10 373 0 +311 211 386 20 0 7133 10 0 734 +312 94 97 20 0 7056 10 0 526 +313 30 155 9 0 7035 10 0 28 +314 208 184 -26 294 414 10 714 0 +315 394 333 20 777 897 10 0 724 +316 355 180 30 549 669 10 0 249 +317 241 180 13 0 7204 0 0 1007 +318 21 485 30 1353 1473 10 0 609 +319 80 251 14 1214 1334 10 0 7 +320 476 61 -20 1795 1915 10 708 0 +321 406 94 10 911 1031 10 0 259 +322 364 71 5 0 7062 0 0 1005 +323 418 221 10 0 7104 10 0 114 +324 274 441 -24 0 7082 10 168 0 +325 304 97 -20 727 847 10 272 0 +326 297 102 10 0 7119 10 0 652 +327 250 405 20 0 7119 10 0 240 +328 111 463 -30 1286 1406 10 539 0 +329 408 279 -10 0 7114 10 532 0 +330 263 418 -36 1114 1234 10 745 0 +331 480 119 -26 2514 2634 10 985 0 +332 420 383 -19 3928 4048 10 256 0 +333 142 14 18 0 7015 10 0 166 +334 73 328 -13 0 7081 10 295 0 +335 50 438 -20 0 7000 10 466 0 +336 441 7 20 0 6965 10 0 183 +337 462 14 20 1588 1708 10 0 669 +338 360 294 9 5671 5791 10 0 992 +339 58 39 -10 0 6989 10 44 0 +340 58 391 -20 3529 3649 10 746 0 +341 410 285 20 0 7111 10 0 492 +342 96 97 20 808 928 10 0 100 +343 21 64 20 1409 1529 10 0 410 +344 238 210 -10 0 7233 10 621 0 +345 479 121 10 1231 1351 10 0 963 +346 200 178 20 0 7187 10 0 408 +347 216 341 19 0 7177 10 0 590 +348 48 437 -20 3215 3335 10 554 0 +349 200 270 20 0 7221 10 0 461 +350 357 181 20 598 718 10 0 108 +351 476 174 30 1297 1417 10 0 775 +352 400 286 10 0 7120 10 0 210 +353 351 481 -10 0 7022 10 876 0 +354 270 400 -22 545 665 10 957 0 +355 95 234 10 653 773 10 0 972 +356 128 113 -29 0 7091 10 177 0 +357 133 455 25 0 7038 10 0 586 +358 16 463 -10 0 6958 10 747 0 +359 59 388 -30 2651 2771 10 839 0 +360 376 190 -30 621 741 10 162 0 +361 481 122 30 0 7010 10 0 673 +362 266 405 -15 868 988 10 370 0 +363 374 232 33 441 561 10 0 112 +364 398 20 20 1076 1196 10 0 901 +365 481 26 -10 0 6953 10 171 0 +366 63 444 -20 0 7005 10 376 0 +367 89 290 20 0 7109 10 0 141 +368 246 314 -40 0 7210 10 262 0 +369 40 304 -20 0 7058 10 469 0 +370 262 369 15 0 7155 10 0 362 +371 323 29 -20 0 7042 10 933 0 +372 89 65 -10 2881 3001 10 811 0 +373 144 35 26 0 7035 10 0 310 +374 200 265 10 610 730 10 0 251 +375 436 264 20 0 7088 10 0 186 +376 15 457 20 0 6961 10 0 366 +377 397 20 20 0 7002 10 0 865 +378 328 491 -30 2713 2833 10 719 0 +379 399 175 -17 0 7108 10 571 0 +380 432 2 -9 1866 1986 10 908 0 +381 63 336 20 0 7069 10 0 396 +382 6 296 -8 0 7026 10 995 0 +383 146 376 -33 0 7111 10 208 0 +384 295 247 12 0 7229 10 0 561 +385 235 33 -9 5348 5468 10 471 0 +386 233 204 20 217 337 10 0 654 +387 142 360 -22 6128 6248 10 277 0 +388 177 156 -23 0 7155 10 173 0 +389 315 287 -23 0 7200 10 178 0 +390 452 172 -37 0 7058 10 672 0 +391 263 153 12 0 7177 10 0 51 +392 493 493 -10 0 6931 10 848 0 +393 320 283 -20 442 562 10 795 0 +394 64 5 -10 0 6967 10 816 0 +395 95 235 10 563 683 10 0 193 +396 203 211 -20 5226 5346 10 381 0 +397 16 497 20 0 6934 10 0 465 +398 348 348 -30 0 7136 10 436 0 +399 485 104 -40 3178 3298 10 637 0 +400 330 147 -44 0 7144 10 34 0 +401 443 237 20 754 874 10 0 519 +402 316 286 30 547 667 10 0 639 +403 335 46 18 0 7053 10 0 729 +404 381 495 20 1290 1410 10 0 431 +405 364 173 30 721 841 10 0 41 +406 267 162 6 0 7185 10 0 787 +407 214 245 8 85 205 10 0 189 +408 92 234 -20 0 7116 10 346 0 +409 347 459 25 0 7044 10 0 8 +410 30 7 -20 4754 4874 10 343 0 +411 120 37 -27 0 7025 10 898 0 +412 397 153 -40 0 7098 10 5 0 +413 210 29 -20 4203 4323 10 548 0 +414 87 285 30 964 1084 10 0 946 +415 132 32 -20 3138 3258 10 525 0 +416 390 294 20 949 1069 10 0 567 +417 67 451 -5 0 7003 10 922 0 +418 24 68 20 0 6984 10 0 73 +419 146 439 10 0 7059 10 0 308 +420 209 212 -20 0 7219 10 587 0 +421 6 292 -10 970 1090 10 871 0 +422 18 63 10 1356 1476 10 0 717 +423 149 98 4 0 7092 10 0 293 +424 91 268 -10 978 1098 10 134 0 +425 103 177 28 0 7110 10 0 574 +426 367 178 -20 721 841 10 514 0 +427 225 269 30 0 7243 10 0 925 +428 443 246 20 919 1039 10 0 257 +429 306 42 11 0 7059 10 0 820 +430 374 306 4 0 7138 10 0 540 +431 413 421 -20 0 7038 10 404 0 +432 470 405 17 0 7005 10 0 626 +433 33 278 18 5949 6069 0 0 1013 +434 149 458 -27 4655 4775 10 4 0 +435 257 57 18 0 7081 10 0 994 +436 272 403 30 0 7120 10 0 398 +437 221 291 9 184 304 10 0 460 +438 1 101 -8 0 6984 10 832 0 +439 332 459 35 1475 1595 10 0 968 +440 220 392 -20 0 7129 10 679 0 +441 253 50 27 903 1023 0 0 1009 +442 250 441 5 0 7083 10 0 986 +443 471 484 -20 0 6953 10 773 0 +444 480 152 -17 4086 4206 10 132 0 +445 404 83 -10 0 7047 10 455 0 +446 476 94 -10 0 7000 10 110 0 +447 458 213 -31 4513 4633 10 592 0 +448 215 395 -30 0 7125 10 855 0 +449 85 288 20 728 848 10 0 60 +450 179 75 -20 0 7086 10 479 0 +451 228 287 21 112 232 10 0 886 +452 397 18 -10 1168 1288 10 175 0 +453 238 204 20 419 539 10 0 274 +454 488 3 3 0 6931 10 0 965 +455 407 88 10 0 7049 10 0 445 +456 459 14 20 0 6959 10 0 616 +457 120 17 30 0 7008 10 0 31 +458 235 316 -20 0 7207 10 707 0 +459 370 382 11 3535 3655 10 0 296 +460 405 454 -9 5212 5332 10 437 0 +461 17 458 -20 0 6962 10 349 0 +462 43 135 31 0 7038 10 0 851 +463 318 497 21 0 7018 10 0 225 +464 199 268 -10 0 7220 10 645 0 +465 111 467 -20 0 7017 10 397 0 +466 138 438 20 1149 1269 10 0 335 +467 172 314 -40 2182 2302 10 803 0 +468 494 468 31 1410 1530 10 0 840 +469 35 303 20 0 7053 10 0 369 +470 341 59 -20 3159 3279 10 553 0 +471 423 221 9 0 7099 10 0 385 +472 395 295 20 845 965 10 0 801 +473 413 417 -7 0 7041 10 475 0 +474 339 60 -20 844 964 10 763 0 +475 277 428 7 0 7094 10 0 473 +476 176 199 -22 0 7185 10 509 0 +477 265 240 9 18 138 10 0 529 +478 365 190 -20 5910 6030 10 841 0 +479 133 53 20 0 7045 10 0 450 +480 387 488 20 1448 1568 10 0 821 +481 385 295 20 509 629 10 0 495 +482 491 369 28 0 7006 10 0 608 +483 445 273 20 1031 1151 10 0 90 +484 195 273 -29 0 7215 10 505 0 +485 313 493 -20 4772 4892 10 657 0 +486 495 227 -14 1376 1496 10 226 0 +487 241 403 -11 0 7121 10 794 0 +488 30 72 10 1726 1846 10 0 294 +489 21 487 10 0 6945 10 0 276 +490 324 99 -10 1352 1472 10 713 0 +491 453 318 -14 0 7060 10 644 0 +492 443 272 -20 0 7080 10 341 0 +493 447 184 -10 0 7067 10 522 0 +494 366 288 -19 0 7152 10 738 0 +495 440 284 -20 0 7081 10 481 0 +496 13 314 -10 975 1095 10 40 0 +497 72 227 -10 0 7095 10 754 0 +498 377 385 6 3465 3585 10 0 826 +499 477 478 -27 0 6953 10 83 0 +500 204 185 -10 0 7195 10 959 0 +501 226 191 20 372 492 10 0 190 +502 330 138 -4 4438 4558 10 64 0 +503 185 434 -19 0 7079 10 140 0 +504 483 22 10 0 6949 10 0 122 +505 71 282 29 2567 2687 10 0 484 +506 60 5 -32 0 6964 10 79 0 +507 189 402 -21 0 7111 10 228 0 +508 134 211 35 0 7152 10 0 947 +509 146 313 22 0 7153 10 0 476 +510 21 146 -30 1947 2067 10 243 0 +511 37 281 -28 0 7059 10 882 0 +512 416 417 20 1372 1492 10 0 662 +513 44 311 27 1630 1750 10 0 562 +514 361 181 20 0 7144 10 0 426 +515 444 242 10 0 7080 10 0 558 +516 444 271 -13 982 1102 10 133 0 +517 359 179 20 0 7144 10 0 267 +518 388 334 20 0 7113 10 0 712 +519 401 164 -20 0 7101 10 401 0 +520 499 316 -7 0 7017 10 91 0 +521 399 106 20 0 7067 10 0 239 +522 425 215 10 916 1036 10 0 493 +523 407 98 10 0 7056 10 0 804 +524 406 460 2 2877 2997 10 0 910 +525 88 95 20 0 7050 10 0 415 +526 95 64 -20 3064 3184 10 312 0 +527 306 229 -20 0 7215 10 170 0 +528 273 55 20 725 845 10 0 103 +529 384 149 -9 0 7107 10 477 0 +530 122 35 10 0 7024 10 0 663 +531 308 199 -40 6033 6153 10 172 0 +532 390 301 10 661 781 10 0 329 +533 300 108 10 542 662 10 0 153 +534 267 400 10 929 1049 10 0 710 +535 8 300 10 1423 1543 10 0 80 +536 105 181 -10 0 7114 10 252 0 +537 398 325 -10 0 7109 10 973 0 +538 166 247 1 276 396 10 0 615 +539 140 431 30 0 7063 10 0 328 +540 253 118 -4 2189 2309 10 430 0 +541 359 246 18 0 7165 10 0 214 +542 321 277 10 244 364 10 0 692 +543 168 59 6 1464 1584 10 0 605 +544 406 285 -10 0 7115 10 894 0 +545 391 334 20 724 844 10 0 681 +546 437 19 15 4056 4176 10 0 726 +547 201 278 13 166 286 10 0 664 +548 435 267 20 0 7089 10 0 413 +549 245 408 -30 0 7116 10 906 0 +550 16 462 -30 0 6959 10 689 0 +551 107 374 8 0 7085 10 0 782 +552 477 97 10 1131 1251 10 0 665 +553 346 57 20 0 7059 10 0 470 +554 14 459 20 0 6959 10 0 348 +555 102 6 3 0 6989 10 0 695 +556 359 287 24 0 7159 10 0 81 +557 297 131 25 0 7147 10 0 643 +558 282 1 -10 4170 4290 10 515 0 +559 21 70 15 3085 3205 10 0 99 +560 440 244 -12 0 7084 10 631 0 +561 482 104 -12 3230 3350 10 384 0 +562 120 261 -27 3173 3293 10 513 0 +563 125 29 30 1133 1253 10 0 212 +564 292 32 -20 0 7052 10 264 0 +565 262 92 -10 0 7116 10 760 0 +566 68 160 21 0 7071 10 0 653 +567 405 276 -20 0 7117 10 416 0 +568 277 50 -20 0 7073 10 248 0 +569 32 319 -10 0 7046 10 307 0 +570 344 70 -10 0 7071 10 142 0 +571 481 84 17 2022 2142 10 0 379 +572 21 68 20 1606 1726 10 0 640 +573 441 244 10 0 7083 10 0 951 +574 57 43 -28 0 6991 10 425 0 +575 1 293 10 1071 1191 10 0 879 +576 481 96 20 0 6997 10 0 854 +577 471 368 19 1712 1832 10 0 807 +578 236 126 23 439 559 10 0 759 +579 406 99 20 908 1028 10 0 20 +580 303 186 10 5417 5537 0 0 1012 +581 225 369 38 426 546 10 0 17 +582 412 453 -20 0 7015 10 71 0 +583 104 349 20 0 7098 10 0 668 +584 173 182 25 0 7172 10 0 767 +585 111 464 -10 1242 1362 10 847 0 +586 53 440 -25 1292 1412 10 357 0 +587 69 336 20 0 7074 10 0 420 +588 359 182 -33 0 7146 10 115 0 +589 13 459 -20 0 6959 10 116 0 +590 244 277 -19 0 7247 10 347 0 +591 484 177 20 1006 1126 10 0 599 +592 452 206 31 1969 2089 10 0 447 +593 22 483 30 1244 1364 10 0 905 +594 452 110 -10 1361 1481 10 675 0 +595 347 192 -10 5953 6073 10 150 0 +596 95 92 -18 0 7053 10 614 0 +597 368 311 -25 0 7142 10 802 0 +598 479 387 13 1590 1710 10 0 194 +599 479 169 -20 1234 1354 10 591 0 +600 497 266 -20 0 7027 10 806 0 +601 66 336 -7 0 7071 10 766 0 +602 376 195 -20 724 844 10 143 0 +603 401 281 20 1044 1164 10 0 731 +604 441 177 -20 0 7070 10 629 0 +605 231 203 -6 0 7224 10 543 0 +606 21 488 10 1445 1565 10 0 825 +607 231 204 20 601 721 10 0 65 +608 122 422 -28 5827 5947 10 482 0 +609 65 453 -30 0 7000 10 318 0 +610 206 261 -14 0 7229 10 623 0 +611 466 149 -22 0 7036 10 780 0 +612 313 119 30 0 7129 10 0 926 +613 90 274 -20 717 837 10 304 0 +614 39 162 18 2261 2381 10 0 596 +615 35 306 -1 918 1038 10 538 0 +616 437 15 -20 1421 1541 10 456 0 +617 307 412 -20 1615 1735 10 693 0 +618 79 291 10 835 955 10 0 75 +619 64 437 -6 3673 3793 10 46 0 +620 376 92 -30 3962 4082 10 676 0 +621 129 27 10 1190 1310 10 0 344 +622 196 489 23 4121 4241 0 0 1004 +623 51 286 14 0 7072 10 0 610 +624 20 488 10 1489 1609 10 0 984 +625 13 455 10 0 6961 10 0 255 +626 170 347 -17 0 7149 10 432 0 +627 92 230 20 0 7115 10 0 772 +628 117 467 10 958 1078 10 0 740 +629 413 217 20 0 7108 10 0 604 +630 405 450 20 0 7021 10 0 76 +631 394 322 12 0 7114 10 0 560 +632 125 61 26 2447 2567 10 0 156 +633 238 123 24 3124 3244 10 0 686 +634 11 403 18 0 6991 10 0 61 +635 89 272 10 0 7112 10 0 641 +636 304 102 -30 0 7117 10 298 0 +637 478 121 40 1275 1395 10 0 399 +638 408 84 10 1137 1257 10 0 23 +639 376 494 -30 1079 1199 10 402 0 +640 20 73 -20 0 6984 10 572 0 +641 159 299 -10 4062 4182 10 635 0 +642 95 382 19 0 7071 10 0 283 +643 352 63 -25 0 7061 10 557 0 +644 365 274 14 410 530 10 0 491 +645 30 301 10 0 7049 10 0 464 +646 351 5 -10 0 7009 10 282 0 +647 197 267 10 0 7219 10 0 203 +648 498 171 -13 5026 5146 10 129 0 +649 468 352 -20 0 7034 10 253 0 +650 418 251 -20 4787 4907 10 875 0 +651 489 437 29 0 6971 10 0 39 +652 251 63 -10 3950 4070 10 326 0 +653 132 55 -21 1069 1189 10 566 0 +654 281 96 -20 0 7117 10 386 0 +655 333 293 -14 2468 2588 10 24 0 +656 255 487 -10 0 7037 10 238 0 +657 207 400 20 762 882 10 0 485 +658 469 489 -30 0 6950 10 999 0 +659 244 254 20 401 521 10 0 229 +660 233 207 10 0 7228 10 0 737 +661 441 60 -20 5835 5955 10 57 0 +662 411 379 -20 0 7068 10 512 0 +663 178 72 -10 0 7082 10 530 0 +664 51 447 -13 1178 1298 10 547 0 +665 478 118 -10 1417 1537 10 552 0 +666 141 426 23 0 7067 10 0 292 +667 295 89 -20 0 7107 10 927 0 +668 112 433 -20 940 1060 10 583 0 +669 320 211 -20 3970 4090 10 337 0 +670 400 103 10 1022 1142 10 0 884 +671 408 453 10 0 7017 10 0 722 +672 435 180 37 898 1018 10 0 390 +673 432 66 -30 0 7016 10 361 0 +674 374 116 9 0 7092 10 0 205 +675 478 102 10 0 7003 10 0 594 +676 335 57 30 784 904 10 0 620 +677 385 239 21 3142 3262 10 0 983 +678 386 245 -10 1916 2036 10 889 0 +679 208 396 20 0 7123 10 0 440 +680 380 489 -10 1516 1636 10 892 0 +681 380 498 -20 1189 1309 10 545 0 +682 440 7 20 1255 1375 10 0 117 +683 434 245 -30 0 7090 10 216 0 +684 90 232 10 0 7113 10 0 704 +685 389 334 -12 0 7112 10 863 0 +686 241 205 -24 0 7229 10 633 0 +687 18 24 32 0 6951 10 0 935 +688 57 183 15 0 7070 10 0 206 +689 59 457 30 0 6993 10 0 550 +690 442 243 -20 1154 1274 10 691 0 +691 402 281 20 1000 1120 10 0 690 +692 445 237 -10 0 7079 10 542 0 +693 441 273 20 0 7082 10 0 617 +694 31 175 24 986 1106 10 0 902 +695 234 202 -3 0 7224 10 555 0 +696 52 303 -10 1765 1885 10 14 0 +697 167 445 -10 0 7063 10 917 0 +698 179 286 8 0 7195 10 0 997 +699 269 48 20 0 7072 10 0 721 +700 165 59 -23 0 7065 10 53 0 +701 461 8 -20 0 6953 10 873 0 +702 421 415 -20 941 1061 10 87 0 +703 59 459 -20 1245 1365 10 966 0 +704 24 492 -10 1848 1968 10 684 0 +705 55 449 20 1054 1174 10 0 268 +706 224 192 10 280 400 10 0 789 +707 444 269 20 934 1054 10 0 458 +708 491 20 20 1574 1694 10 0 320 +709 313 126 -20 973 1093 10 74 0 +710 283 438 -10 926 1046 10 534 0 +711 352 241 5 0 7172 10 0 896 +712 398 476 -20 0 7004 10 518 0 +713 442 247 10 0 7082 10 0 490 +714 217 207 26 0 7220 10 0 314 +715 233 87 18 1010 1130 10 0 109 +716 479 127 -20 1079 1199 10 888 0 +717 6 53 -10 0 6961 10 422 0 +718 478 300 12 0 7041 10 0 764 +719 378 493 30 0 7000 10 0 378 +720 303 78 12 660 780 10 0 187 +721 344 62 -20 1386 1506 10 699 0 +722 371 315 -10 4663 4783 10 671 0 +723 200 78 -20 0 7095 10 762 0 +724 413 391 -20 868 988 10 315 0 +725 415 216 10 705 825 10 0 776 +726 397 57 -15 5904 6024 10 546 0 +727 293 228 -10 0 7226 10 883 0 +728 0 297 -24 0 7020 10 748 0 +729 435 20 -18 0 6979 10 403 0 +730 195 111 -23 0 7125 10 125 0 +731 417 218 -20 1112 1232 10 603 0 +732 340 54 -17 951 1071 10 929 0 +733 132 57 20 978 1098 10 0 204 +734 210 379 -20 0 7139 10 311 0 +735 228 260 -20 0 7250 10 818 0 +736 399 104 -30 0 7066 10 849 0 +737 95 277 -10 1098 1218 10 660 0 +738 360 284 19 0 7159 10 0 494 +739 53 466 -10 1340 1460 10 157 0 +740 112 465 -10 1197 1317 10 628 0 +741 313 391 5 598 718 10 0 67 +742 93 235 -10 0 7117 10 126 0 +743 125 32 -13 0 7023 10 151 0 +744 215 282 21 0 7227 10 0 130 +745 224 320 36 0 7200 10 0 330 +746 134 428 20 1232 1352 10 0 340 +747 26 490 10 0 6946 10 0 358 +748 44 115 24 925 1045 10 0 728 +749 438 127 -10 3764 3884 10 300 0 +750 239 15 2 2415 2535 10 0 209 +751 342 54 -20 0 7058 10 797 0 +752 109 463 -20 1334 1454 10 197 0 +753 199 187 -20 507 627 10 124 0 +754 201 188 10 0 7195 10 0 497 +755 399 301 -30 777 897 10 960 0 +756 484 171 -20 0 7028 10 135 0 +757 272 234 26 6361 6481 0 0 1010 +758 380 350 -23 0 7110 10 98 0 +759 140 108 -23 0 7095 10 578 0 +760 228 199 10 537 657 10 0 565 +761 245 461 -10 0 7063 10 148 0 +762 305 107 20 901 1021 10 0 723 +763 231 195 20 437 557 10 0 474 +764 450 265 -12 0 7074 10 718 0 +765 273 149 14 0 7171 10 0 21 +766 12 358 7 4897 5017 10 0 601 +767 315 121 -25 0 7130 10 584 0 +768 420 213 -14 814 934 10 38 0 +769 331 134 -20 0 7133 10 810 0 +770 84 377 -15 3705 3825 10 880 0 +771 320 280 -10 0 7198 10 188 0 +772 89 185 -20 2399 2519 10 627 0 +773 472 481 20 1306 1426 10 0 443 +774 422 420 -10 0 7033 10 146 0 +775 475 267 -30 0 7049 10 351 0 +776 470 125 -10 952 1072 10 725 0 +777 435 268 10 1247 1367 10 0 222 +778 409 155 -30 0 7089 10 824 0 +779 243 248 30 96 216 10 0 799 +780 488 96 22 0 6991 10 0 611 +781 341 72 -10 3219 3339 10 118 0 +782 58 449 -8 1451 1571 10 551 0 +783 16 460 20 0 6960 10 0 833 +784 480 136 22 0 7018 10 0 790 +785 162 388 -10 4504 4624 10 924 0 +786 47 208 -25 0 7067 10 907 0 +787 324 127 -6 514 634 10 406 0 +788 87 96 30 0 7050 10 0 270 +789 140 137 -10 2279 2399 10 706 0 +790 314 205 -22 6107 6227 10 784 0 +791 96 346 26 741 861 10 0 220 +792 321 280 -20 0 7197 10 123 0 +793 245 251 10 5 125 10 0 838 +794 436 295 11 0 7083 10 0 487 +795 274 261 20 0 7248 10 0 393 +796 271 128 -30 1382 1502 10 201 0 +797 275 45 20 0 7068 10 0 751 +798 422 409 10 0 7040 10 0 95 +799 146 188 -30 0 7153 10 779 0 +800 93 96 -18 0 7055 10 305 0 +801 409 255 -20 0 7115 10 472 0 +802 449 428 25 0 7008 10 0 597 +803 90 285 40 1105 1225 10 0 467 +804 415 95 -10 0 7048 10 523 0 +805 88 287 30 0 7108 10 0 899 +806 379 196 20 776 896 10 0 600 +807 368 452 -19 2680 2800 10 577 0 +808 202 186 20 604 724 10 0 887 +809 435 11 -20 1189 1309 10 861 0 +810 269 46 20 1074 1194 10 0 769 +811 7 292 10 0 7028 10 0 372 +812 44 496 32 1607 1727 10 0 858 +813 478 99 10 1245 1365 10 0 938 +814 391 99 -31 0 7068 10 159 0 +815 132 477 25 1309 1429 10 0 185 +816 24 65 10 1461 1581 10 0 394 +817 130 247 -10 0 7154 10 230 0 +818 133 273 20 0 7155 10 0 735 +819 347 62 -30 0 7063 10 981 0 +820 404 140 -11 5035 5155 10 429 0 +821 416 420 -20 0 7037 10 480 0 +822 67 335 -20 967 1087 10 976 0 +823 92 270 -10 0 7115 10 859 0 +824 411 95 30 0 7051 10 0 778 +825 132 479 -10 0 7017 10 606 0 +826 366 334 -6 0 7131 10 498 0 +827 125 39 -22 921 1041 10 199 0 +828 419 422 -40 1105 1225 10 26 0 +829 460 2 -20 1412 1532 10 856 0 +830 67 334 20 923 1043 10 0 97 +831 448 414 -20 0 7017 10 105 0 +832 46 163 8 0 7053 10 0 438 +833 77 465 -20 1044 1164 10 783 0 +834 284 319 -30 0 7198 10 93 0 +835 102 422 -17 0 7048 10 147 0 +836 240 34 -20 6238 6358 10 903 0 +837 141 428 20 775 895 10 0 25 +838 204 269 -10 0 7225 10 793 0 +839 144 439 30 1085 1205 10 0 359 +840 470 417 -31 2947 3067 10 468 0 +841 404 103 20 0 7062 10 0 478 +842 5 281 16 0 7028 10 0 306 +843 487 320 -10 0 7027 10 184 0 +844 398 23 10 0 7004 10 0 291 +845 90 296 20 606 726 10 0 980 +846 386 13 -33 0 7001 10 85 0 +847 115 465 10 1049 1169 10 0 585 +848 473 475 10 0 6958 10 0 392 +849 275 42 30 0 7065 10 0 736 +850 286 356 30 388 508 10 0 271 +851 15 69 -31 1167 1287 10 462 0 +852 267 44 -28 0 7068 10 54 0 +853 243 399 -18 939 1059 10 281 0 +854 390 249 -20 0 7134 10 576 0 +855 210 391 30 566 686 10 0 448 +856 433 15 20 1131 1251 10 0 829 +857 24 259 19 0 7048 10 0 158 +858 12 463 -32 0 6955 10 812 0 +859 237 213 10 588 708 10 0 823 +860 182 480 -10 1459 1579 10 45 0 +861 409 88 20 0 7048 10 0 809 +862 244 368 -20 0 7156 10 106 0 +863 381 328 12 0 7122 10 0 685 +864 213 185 -10 0 7200 10 169 0 +865 482 141 -20 0 7018 10 377 0 +866 319 124 20 0 7131 10 0 235 +867 141 431 -6 872 992 10 258 0 +868 198 264 -10 0 7221 10 18 0 +869 69 334 -20 824 944 10 991 0 +870 299 98 30 0 7115 10 0 232 +871 240 250 10 150 270 10 0 421 +872 199 203 -22 5829 5949 10 86 0 +873 459 17 20 0 6961 10 0 701 +874 423 217 20 967 1087 10 0 245 +875 477 179 20 891 1011 10 0 650 +876 213 397 10 869 989 10 0 353 +877 405 187 34 5002 5122 10 0 954 +878 269 402 20 811 931 10 0 55 +879 53 204 -10 4220 4340 10 575 0 +880 13 394 15 1490 1610 10 0 770 +881 15 68 -40 1211 1331 10 885 0 +882 56 268 28 4256 4376 10 0 511 +883 360 184 10 0 7146 10 0 727 +884 307 102 -10 0 7116 10 670 0 +885 130 57 40 930 1050 10 0 881 +886 250 328 -21 995 1115 10 451 0 +887 91 231 -20 801 921 10 808 0 +888 479 176 20 946 1066 10 0 716 +889 420 224 10 1716 1836 10 0 678 +890 461 182 13 0 7053 10 0 136 +891 418 218 -10 0 7103 10 958 0 +892 419 418 10 0 7036 10 0 680 +893 336 493 20 0 7017 10 0 149 +894 389 300 10 615 735 10 0 544 +895 92 76 -21 0 7039 10 970 0 +896 476 102 -5 1345 1465 10 711 0 +897 418 399 20 1751 1871 10 0 250 +898 109 56 27 0 7035 10 0 411 +899 13 465 -30 3094 3214 10 805 0 +900 92 232 -20 0 7115 10 944 0 +901 394 47 -20 0 7026 10 364 0 +902 16 287 -24 1083 1203 10 694 0 +903 399 102 20 1068 1188 10 0 836 +904 143 158 12 0 7133 10 0 43 +905 18 484 -30 1300 1420 10 593 0 +906 250 411 30 0 7113 10 0 549 +907 19 273 25 0 7042 10 0 786 +908 365 28 9 1073 1193 10 0 380 +909 387 297 -15 561 681 10 989 0 +910 433 447 -2 0 7006 10 524 0 +911 214 274 24 0 7231 10 0 996 +912 489 338 -20 5589 5709 10 211 0 +913 130 494 -20 0 7003 10 101 0 +914 23 67 -8 1557 1677 10 92 0 +915 374 489 20 1017 1137 10 0 128 +916 126 30 -19 0 7022 10 94 0 +917 112 467 10 0 7017 10 0 697 +918 489 274 -25 2135 2255 10 275 0 +919 61 214 -17 1367 1487 10 27 0 +920 166 440 -1 0 7067 10 182 0 +921 56 75 -20 0 7013 10 137 0 +922 210 276 5 0 7227 10 0 417 +923 80 286 -11 0 7101 10 221 0 +924 17 459 10 1688 1808 10 0 785 +925 66 448 -30 1021 1141 10 427 0 +926 351 128 -30 5013 5133 10 612 0 +927 352 176 20 0 7148 10 0 667 +928 490 286 29 0 7032 10 0 956 +929 247 219 17 65 185 10 0 732 +930 86 268 10 0 7110 10 0 6 +931 398 329 17 611 731 10 0 144 +932 272 402 10 638 758 10 0 107 +933 317 123 20 761 881 10 0 371 +934 408 318 15 0 7102 10 0 940 +935 66 31 -32 4194 4314 10 687 0 +936 425 448 -18 3178 3298 10 1 0 +937 35 304 30 870 990 10 0 176 +938 471 94 -10 0 7004 10 813 0 +939 470 473 10 0 6961 10 0 948 +940 224 56 -15 0 7079 10 934 0 +941 343 47 20 0 7051 10 0 16 +942 52 18 -2 3428 3548 10 174 0 +943 16 68 20 0 6978 10 0 266 +944 195 185 20 449 569 10 0 900 +945 92 236 -30 0 7116 10 961 0 +946 76 462 -30 3824 3944 10 414 0 +947 124 56 -35 865 985 10 508 0 +948 481 454 -10 1282 1402 10 939 0 +949 477 483 20 1463 1583 10 0 224 +950 481 124 10 1134 1254 10 0 219 +951 389 156 -10 0 7107 10 573 0 +952 384 16 -20 0 7005 10 273 0 +953 492 34 5 3242 3362 10 0 207 +954 371 200 -34 0 7144 10 877 0 +955 153 235 10 333 453 10 0 77 +956 428 202 -29 0 7090 10 928 0 +957 257 391 22 0 7133 10 0 354 +958 421 218 10 0 7101 10 0 891 +959 206 186 10 0 7197 10 0 500 +960 393 301 30 713 833 10 0 755 +961 204 187 30 0 7196 10 0 945 +962 468 475 10 0 6961 10 0 290 +963 477 122 -10 1320 1440 10 345 0 +964 100 66 -15 5599 5719 10 241 0 +965 489 27 -3 0 6948 10 454 0 +966 12 451 20 0 6963 10 0 703 +967 197 270 -12 0 7218 10 163 0 +968 311 422 -35 0 7092 10 439 0 +969 489 17 -20 0 6941 10 231 0 +970 13 214 21 0 7035 10 0 895 +971 440 247 -20 0 7084 10 11 0 +972 28 467 -10 5370 5490 10 355 0 +973 388 325 10 0 7117 10 0 537 +974 270 401 -20 0 7122 10 56 0 +975 5 445 -27 0 6961 10 120 0 +976 198 271 20 337 457 10 0 822 +977 480 131 5 2750 2870 10 0 35 +978 437 98 -11 4455 4575 10 131 0 +979 131 246 17 0 7155 10 0 139 +980 49 437 -20 1710 1830 10 845 0 +981 270 49 30 0 7073 10 0 819 +982 337 41 8 0 7048 10 0 287 +983 318 280 -21 0 7200 10 677 0 +984 154 392 -10 0 7103 10 624 0 +985 493 111 26 0 6995 10 0 331 +986 399 450 -5 0 7025 10 442 0 +987 67 452 -8 1078 1198 10 111 0 +988 34 239 -16 876 996 10 47 0 +989 343 276 15 0 7178 10 0 909 +990 393 12 10 0 6997 10 0 121 +991 236 247 20 0 7260 10 0 869 +992 340 291 -9 0 7176 10 338 0 +993 3 292 -2 1022 1142 10 145 0 +994 209 68 -18 6272 6392 10 435 0 +995 18 225 8 0 7041 10 0 382 +996 147 435 -24 0 7063 10 911 0 +997 335 99 -8 4874 4994 10 698 0 +998 485 24 20 1285 1405 0 0 1002 +999 470 475 30 0 6960 10 0 658 +1000 341 58 10 895 1015 10 0 96 +1001 246 255 -10 0 7268 10 59 0 +1002 485 24 -20 1285 1405 10 998 0 +1003 307 249 -10 0 7217 10 269 0 +1004 196 489 -23 4121 4241 10 622 0 +1005 364 71 -5 0 7062 10 322 0 +1006 75 118 -21 1636 1756 10 254 0 +1007 241 180 -13 0 7204 10 317 0 +1008 346 354 -8 3270 3390 10 202 0 +1009 253 50 -27 903 1023 10 441 0 +1010 272 234 -26 6361 6481 10 757 0 +1011 195 464 -20 6165 6285 10 113 0 +1012 303 186 -10 5417 5537 10 580 0 +1013 33 278 -18 5949 6069 10 433 0 +1014 243 408 -15 5735 5855 10 78 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC2104.txt b/jsprit-instances/instances/lilim/1000/LRC2104.txt new file mode 100644 index 00000000..6746abcb --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC2104.txt @@ -0,0 +1,1014 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 18 0 7009 10 0 431 +2 214 394 10 0 7126 10 0 257 +3 476 483 10 0 6950 10 0 262 +4 352 487 -10 0 7016 10 161 0 +5 230 197 40 0 7218 10 0 172 +6 175 239 -17 0 7199 10 979 0 +7 133 202 -12 0 7148 10 339 0 +8 328 458 -20 0 7052 10 828 0 +9 25 499 -10 1780 1900 10 853 0 +10 226 423 15 788 908 10 0 389 +11 313 282 -30 0 7204 10 436 0 +12 60 454 -20 0 6996 10 465 0 +13 239 486 3 0 7038 10 0 968 +14 102 264 -26 535 655 10 244 0 +15 408 452 10 0 7018 10 0 651 +16 451 62 -20 0 6999 10 121 0 +17 203 390 -12 0 7127 10 734 0 +18 92 233 10 0 7116 10 0 286 +19 7 300 30 1379 1499 10 0 937 +20 409 90 -10 1033 1153 10 660 0 +21 307 108 10 950 1070 10 0 567 +22 347 54 -6 1180 1300 10 643 0 +23 406 87 10 1252 1372 10 0 405 +24 371 332 -16 0 7128 10 678 0 +25 116 466 20 1004 1124 10 0 975 +26 441 265 40 0 7083 10 0 188 +27 130 140 17 0 7112 10 0 508 +28 80 117 24 0 7059 10 0 565 +29 421 387 -28 0 7055 10 482 0 +30 83 300 26 0 7100 10 0 696 +31 136 52 -23 0 7046 10 42 0 +32 18 462 20 0 6960 10 0 168 +33 390 120 -20 0 7083 10 517 0 +34 188 119 44 3899 4019 0 0 1010 +35 467 114 -20 0 7018 10 576 0 +36 440 292 -18 0 7080 10 95 0 +37 268 400 20 0 7123 10 0 107 +38 391 202 14 0 7126 10 0 716 +39 377 432 -9 3326 3446 10 936 0 +40 80 290 -20 0 7100 10 116 0 +41 439 15 20 0 6973 10 0 708 +42 307 52 23 0 7068 10 0 31 +43 111 192 11 0 7124 10 0 803 +44 131 56 10 0 7047 10 0 558 +45 88 286 -10 0 7109 10 230 0 +46 69 414 -8 0 7030 10 111 0 +47 41 232 16 821 941 10 0 127 +48 323 77 36 0 7087 10 0 749 +49 340 416 36 0 7086 10 0 283 +50 86 199 -20 0 7103 10 733 0 +51 314 124 20 0 7133 10 0 400 +52 375 191 -20 0 7136 10 386 0 +53 226 175 -10 0 7196 10 374 0 +54 242 106 -27 0 7130 10 994 0 +55 417 417 -25 1328 1448 10 179 0 +56 419 459 20 1265 1385 10 0 370 +57 389 11 -20 0 6998 10 474 0 +58 450 416 25 0 7015 10 0 774 +59 246 255 10 0 7268 10 0 609 +60 71 333 10 0 7077 10 0 993 +61 105 474 27 1883 2003 10 0 668 +62 20 489 10 0 6943 10 0 434 +63 388 331 -30 580 700 10 402 0 +64 92 259 -19 0 7116 10 536 0 +65 200 261 10 0 7223 10 0 293 +66 400 288 -21 0 7120 10 854 0 +67 299 285 3 0 7214 10 0 98 +68 378 199 10 0 7137 10 0 977 +69 325 147 -20 0 7147 10 591 0 +70 421 386 -31 0 7056 10 918 0 +71 404 447 20 940 1060 10 0 72 +72 412 478 -20 0 6995 10 71 0 +73 26 67 -10 5267 5387 10 618 0 +74 358 183 20 0 7147 10 0 222 +75 30 302 10 1066 1186 10 0 817 +76 176 470 14 0 7042 10 0 295 +77 96 270 20 0 7119 10 0 160 +78 243 408 -7 5735 5855 10 475 0 +79 60 29 32 5451 5571 10 0 864 +80 34 169 11 1938 2058 10 0 947 +81 407 280 -17 834 954 10 931 0 +82 277 403 10 0 7119 10 0 271 +83 498 456 27 0 6952 10 0 802 +84 384 491 -5 1391 1511 10 741 0 +85 355 174 33 0 7145 10 0 757 +86 97 288 -20 5136 5256 10 106 0 +87 316 284 -10 0 7200 10 354 0 +88 334 403 26 0 7100 10 0 949 +89 415 223 -23 0 7107 10 173 0 +90 230 320 8 0 7202 0 0 1001 +91 432 199 7 0 7085 10 0 361 +92 92 18 -14 0 6994 10 394 0 +93 273 300 -10 0 7219 10 889 0 +94 269 112 19 0 7135 0 0 1005 +95 429 389 18 0 7048 10 0 36 +96 371 71 21 1147 1267 10 0 721 +97 5 297 10 0 7025 10 0 513 +98 414 378 -3 0 7066 10 67 0 +99 38 15 -20 4364 4484 10 212 0 +100 2 295 -10 0 7022 10 461 0 +101 237 254 20 333 453 10 0 610 +102 54 445 10 0 6998 10 0 924 +103 382 110 -10 0 7082 10 552 0 +104 438 488 -14 0 6971 10 948 0 +105 395 331 -10 0 7108 10 352 0 +106 230 487 20 0 7037 10 0 86 +107 249 407 -20 695 815 10 37 0 +108 488 26 -20 0 6948 10 829 0 +109 151 81 28 0 7079 10 0 759 +110 483 14 10 0 6943 10 0 122 +111 0 422 8 0 6971 10 0 46 +112 429 67 -10 0 7019 10 1000 0 +113 195 464 -11 0 7054 10 825 0 +114 356 256 19 0 7168 10 0 284 +115 264 180 33 0 7203 10 0 142 +116 94 235 20 0 7118 10 0 40 +117 474 96 -30 0 7003 10 365 0 +118 268 52 -15 0 7076 10 730 0 +119 44 440 24 0 6994 10 0 698 +120 7 382 -10 0 6998 10 309 0 +121 459 53 20 0 6987 10 0 16 +122 491 25 -10 0 6945 10 110 0 +123 439 243 -20 1254 1374 10 375 0 +124 210 185 -3 0 7198 10 555 0 +125 150 68 -20 0 7067 10 613 0 +126 201 270 -10 0 7222 10 625 0 +127 0 188 -16 0 7017 10 47 0 +128 103 464 -10 0 7015 10 917 0 +129 325 56 13 0 7067 10 0 336 +130 44 344 -16 0 7048 10 807 0 +131 418 75 -5 1792 1912 10 953 0 +132 472 57 17 0 6980 10 0 965 +133 460 328 13 876 996 10 0 164 +134 89 270 -10 0 7112 10 203 0 +135 374 190 20 0 7137 10 0 235 +136 463 253 -27 4188 4308 10 493 0 +137 97 93 -16 0 7055 10 372 0 +138 163 472 9 0 7036 10 0 182 +139 29 336 -30 0 7037 10 867 0 +140 84 453 -31 4892 5012 10 899 0 +141 294 421 -30 6302 6422 10 240 0 +142 343 62 -33 0 7065 10 115 0 +143 371 193 20 0 7141 10 0 950 +144 142 372 -24 0 7112 10 633 0 +145 66 88 -20 0 7029 10 525 0 +146 395 332 -20 0 7108 10 927 0 +147 93 413 -10 0 7048 10 704 0 +148 267 394 -19 1037 1157 10 256 0 +149 249 258 30 0 7266 10 0 311 +150 472 129 10 0 7022 10 0 903 +151 87 3 -30 5732 5852 10 414 0 +152 62 326 -20 0 7072 10 381 0 +153 212 186 -20 0 7200 10 343 0 +154 241 402 11 0 7122 10 0 327 +155 439 266 10 0 7085 10 0 629 +156 79 80 -20 5528 5648 10 204 0 +157 62 453 10 1179 1299 10 0 664 +158 188 151 -18 0 7158 10 333 0 +159 386 154 -10 0 7108 10 175 0 +160 38 301 -20 0 7056 10 77 0 +161 192 265 10 497 617 10 0 4 +162 371 192 30 519 639 10 0 956 +163 64 294 -10 0 7083 10 601 0 +164 381 494 -13 0 6998 10 133 0 +165 437 12 -17 1318 1438 10 571 0 +166 186 135 -20 2871 2991 10 707 0 +167 459 10 10 0 6956 10 0 776 +168 175 422 -20 5786 5906 10 32 0 +169 274 48 -20 0 7071 10 797 0 +170 488 173 20 0 7024 10 0 594 +171 398 97 -20 836 956 10 514 0 +172 385 17 -40 3235 3355 10 5 0 +173 180 283 23 2975 3095 10 0 89 +174 71 12 2 1172 1292 10 0 743 +175 343 49 10 0 7053 10 0 159 +176 248 251 20 0 7272 10 0 799 +177 7 194 -29 0 7025 10 505 0 +178 322 290 23 0 7192 10 0 494 +179 410 399 25 935 1055 10 0 55 +180 398 103 30 0 7066 10 0 502 +181 385 285 -10 0 7135 10 532 0 +182 179 497 -9 0 7017 10 138 0 +183 464 13 20 1539 1659 10 0 969 +184 492 335 -37 0 7018 10 672 0 +185 27 464 -20 5164 5284 10 440 0 +186 231 29 14 0 7053 10 0 209 +187 157 38 3 0 7043 10 0 652 +188 439 268 -40 1191 1311 10 26 0 +189 149 214 -18 0 7167 10 590 0 +190 187 73 18 0 7087 10 0 450 +191 429 169 -24 3611 3731 10 570 0 +192 350 199 21 0 7162 10 0 674 +193 60 231 -12 0 7084 10 902 0 +194 448 404 15 0 7024 10 0 213 +195 481 20 20 0 6949 10 0 456 +196 436 25 -12 0 6983 10 646 0 +197 111 459 20 0 7023 10 0 946 +198 389 17 -30 1463 1583 10 445 0 +199 148 208 -23 0 7164 10 578 0 +200 475 477 20 0 6955 10 0 460 +201 390 325 -30 0 7116 10 537 0 +202 346 354 -10 3270 3390 10 954 0 +203 91 266 10 0 7115 10 0 134 +204 17 65 20 0 6977 10 0 156 +205 391 112 24 0 7077 10 0 321 +206 224 203 -36 0 7221 10 368 0 +207 426 231 -20 0 7097 10 416 0 +208 260 472 -10 0 7052 10 492 0 +209 265 0 -14 3584 3704 10 186 0 +210 391 293 20 0 7127 10 0 516 +211 411 421 -20 0 7040 10 773 0 +212 132 30 20 0 7025 10 0 99 +213 475 480 -15 0 6953 10 194 0 +214 286 244 31 0 7238 10 0 303 +215 436 237 20 0 7088 0 0 1006 +216 402 284 30 0 7119 10 0 556 +217 287 397 -20 0 7123 10 974 0 +218 272 420 -10 5543 5663 10 289 0 +219 477 120 10 0 7013 10 0 670 +220 145 434 20 0 7063 10 0 509 +221 33 286 11 0 7055 10 0 408 +222 370 262 -20 4398 4518 10 74 0 +223 393 20 -20 0 7004 10 806 0 +224 330 308 24 0 7176 10 0 764 +225 246 398 40 0 7126 10 0 906 +226 482 184 -10 0 7033 10 602 0 +227 451 305 13 0 7066 10 0 250 +228 226 316 21 221 341 10 0 581 +229 110 459 -20 0 7023 10 679 0 +230 244 250 10 0 7268 10 0 45 +231 458 16 -20 1192 1312 10 446 0 +232 390 34 7 4241 4361 10 0 236 +233 423 214 20 867 987 10 0 648 +234 219 215 32 0 7228 10 0 744 +235 326 118 -20 0 7122 10 135 0 +236 365 74 -7 0 7064 10 232 0 +237 331 356 13 2847 2967 10 0 398 +238 210 398 10 817 937 10 0 586 +239 403 93 -20 0 7055 10 426 0 +240 248 404 30 0 7120 10 0 141 +241 65 62 15 0 7011 10 0 305 +242 460 13 -30 0 6958 10 616 0 +243 0 293 -30 0 7021 10 782 0 +244 211 248 26 96 216 10 0 14 +245 484 174 10 1058 1178 10 0 331 +246 175 352 12 0 7148 10 0 255 +247 455 168 21 0 7054 10 0 520 +248 224 191 -24 0 7210 10 886 0 +249 439 156 -30 0 7063 10 676 0 +250 434 359 -13 0 7061 10 227 0 +251 118 314 26 0 7128 10 0 847 +252 234 246 10 0 7258 10 0 420 +253 406 450 20 1037 1157 10 0 582 +254 75 118 21 1636 1756 10 0 748 +255 115 395 -12 0 7076 10 246 0 +256 329 456 19 996 1116 10 0 148 +257 218 403 -10 0 7118 10 2 0 +258 149 341 6 0 7139 10 0 383 +259 253 74 -2 0 7098 10 750 0 +260 436 241 20 1309 1429 10 0 388 +261 238 203 10 375 495 10 0 413 +262 405 455 -10 0 7017 10 3 0 +263 485 27 10 0 6951 10 0 873 +264 323 118 20 0 7124 10 0 866 +265 330 371 -25 0 7129 10 712 0 +266 25 65 -16 1505 1625 10 988 0 +267 406 96 20 0 7055 10 0 322 +268 49 451 -20 0 6990 10 583 0 +269 307 249 -30 0 7217 10 360 0 +270 178 135 -20 0 7139 10 868 0 +271 299 353 -10 0 7160 10 82 0 +272 236 213 20 0 7235 10 0 706 +273 355 177 20 0 7147 10 0 531 +274 394 23 20 0 7006 10 0 901 +275 306 235 25 172 292 10 0 843 +276 90 477 18 0 6997 10 0 280 +277 379 486 -10 0 7006 10 892 0 +278 435 16 -40 1470 1590 10 809 0 +279 8 497 40 0 6929 10 0 397 +280 150 484 -18 2501 2621 10 276 0 +281 213 399 18 936 1056 10 0 419 +282 391 18 10 0 7003 10 0 620 +283 111 392 -36 0 7076 10 49 0 +284 330 281 -19 5322 5442 10 114 0 +285 344 203 14 0 7169 10 0 665 +286 91 235 -10 0 7115 10 18 0 +287 346 60 -20 0 7062 10 607 0 +288 483 27 -20 0 6952 10 729 0 +289 382 498 10 0 6994 10 0 218 +290 457 492 -20 0 6956 10 630 0 +291 291 213 -18 0 7219 10 529 0 +292 154 374 36 0 7118 10 0 427 +293 225 196 -10 0 7215 10 65 0 +294 94 40 24 0 7013 10 0 410 +295 0 356 -14 4345 4465 10 76 0 +296 297 283 28 0 7217 10 0 693 +297 371 423 10 0 7063 10 0 443 +298 417 217 30 0 7104 10 0 675 +299 500 228 -20 0 7024 10 971 0 +300 412 214 -21 0 7109 10 650 0 +301 442 289 25 0 7079 10 0 549 +302 157 269 -30 0 7180 10 967 0 +303 440 241 -31 0 7084 10 214 0 +304 100 266 20 586 706 10 0 421 +305 111 178 -15 0 7118 10 241 0 +306 91 101 -18 0 7057 10 614 0 +307 25 307 -20 998 1118 10 615 0 +308 135 400 20 0 7085 10 0 503 +309 58 458 10 1291 1411 10 0 120 +310 133 26 -20 0 7022 10 312 0 +311 211 386 -30 0 7133 10 149 0 +312 94 97 20 0 7056 10 0 310 +313 30 155 -10 0 7035 10 635 0 +314 208 184 -10 0 7196 10 959 0 +315 394 333 -30 0 7108 10 960 0 +316 355 180 -30 0 7148 10 787 0 +317 241 180 -28 0 7204 10 836 0 +318 21 485 -20 0 6946 10 783 0 +319 80 251 -26 1214 1334 10 791 0 +320 476 61 36 0 6980 10 0 504 +321 406 94 -24 0 7054 10 205 0 +322 364 71 -20 0 7062 10 267 0 +323 418 221 10 0 7104 10 0 351 +324 274 441 -21 0 7082 10 463 0 +325 304 97 -6 0 7112 10 406 0 +326 297 102 10 0 7119 10 0 636 +327 250 405 -11 0 7119 10 154 0 +328 111 463 20 1286 1406 10 0 585 +329 408 279 20 0 7114 10 0 540 +330 263 418 25 1114 1234 10 0 617 +331 480 119 -10 2514 2634 10 245 0 +332 420 383 -25 0 7059 10 662 0 +333 142 14 18 0 7015 10 0 158 +334 73 328 20 0 7081 10 0 575 +335 50 438 20 0 7000 10 0 496 +336 441 7 -13 0 6965 10 129 0 +337 462 14 -22 1588 1708 10 780 0 +338 360 294 -14 0 7156 10 597 0 +339 58 39 12 0 6989 10 0 7 +340 58 391 -10 3529 3649 10 353 0 +341 410 285 -20 0 7111 10 545 0 +342 96 97 20 0 7057 0 0 1002 +343 21 64 20 1409 1529 10 0 153 +344 238 210 30 0 7233 10 0 720 +345 479 121 -10 0 7012 10 963 0 +346 200 178 20 0 7187 10 0 723 +347 216 341 -20 0 7177 10 858 0 +348 48 437 -5 3215 3335 10 417 0 +349 200 270 -21 0 7221 10 451 0 +350 357 181 -20 598 718 10 605 0 +351 476 174 -10 0 7036 10 323 0 +352 400 286 10 0 7120 10 0 105 +353 351 481 10 0 7022 10 0 340 +354 270 400 10 0 7123 10 0 87 +355 95 234 10 653 773 10 0 805 +356 128 113 22 0 7091 10 0 621 +357 133 455 -10 0 7038 10 747 0 +358 16 463 20 0 6958 10 0 925 +359 59 388 20 2651 2771 10 0 642 +360 376 190 30 0 7135 10 0 269 +361 481 122 -7 0 7010 10 91 0 +362 266 405 -20 868 988 10 448 0 +363 374 232 33 0 7149 10 0 522 +364 398 20 -20 0 7001 10 377 0 +365 481 26 30 0 6953 10 0 117 +366 63 444 20 0 7005 10 0 697 +367 89 290 20 0 7109 10 0 838 +368 246 314 36 0 7210 10 0 206 +369 40 304 -19 0 7058 10 857 0 +370 262 369 -20 0 7155 10 56 0 +371 323 29 7 0 7042 10 0 701 +372 89 65 16 0 7029 10 0 137 +373 144 35 26 0 7035 0 0 1004 +374 200 265 10 0 7222 10 0 53 +375 436 264 20 0 7088 10 0 123 +376 15 457 20 0 6961 10 0 550 +377 397 20 20 0 7002 10 0 364 +378 328 491 -35 2713 2833 10 439 0 +379 399 175 13 0 7108 10 0 579 +380 432 2 20 0 6967 10 0 856 +381 63 336 20 0 7069 10 0 152 +382 6 296 -20 0 7026 10 737 0 +383 146 376 -6 0 7111 10 258 0 +384 295 247 -10 0 7229 10 909 0 +385 235 33 -18 5348 5468 10 715 0 +386 233 204 20 217 337 10 0 52 +387 142 360 -20 6128 6248 10 659 0 +388 177 156 -20 0 7155 10 260 0 +389 315 287 -15 0 7200 10 10 0 +390 452 172 -10 0 7058 10 958 0 +391 263 153 -40 0 7177 10 885 0 +392 493 493 -23 0 6931 10 831 0 +393 320 283 -31 0 7197 10 592 0 +394 64 5 14 0 6967 10 0 92 +395 95 235 10 563 683 10 0 510 +396 203 211 -10 0 7213 10 640 0 +397 16 497 -40 0 6934 10 279 0 +398 348 348 -13 0 7136 10 237 0 +399 485 104 -3 0 6998 10 454 0 +400 330 147 -20 0 7144 10 51 0 +401 443 237 20 754 874 10 0 486 +402 316 286 30 547 667 10 0 63 +403 335 46 -10 0 7053 10 533 0 +404 381 495 -7 1290 1410 10 775 0 +405 364 173 -10 0 7137 10 23 0 +406 267 162 6 0 7185 10 0 325 +407 214 245 -20 0 7238 10 627 0 +408 92 234 -11 0 7116 10 221 0 +409 347 459 25 0 7044 10 0 608 +410 30 7 -24 4754 4874 10 294 0 +411 120 37 -20 0 7025 10 943 0 +412 397 153 -10 0 7098 10 846 0 +413 210 29 -10 0 7050 10 261 0 +414 87 285 30 0 7108 10 0 151 +415 132 32 18 3138 3258 10 0 964 +416 390 294 20 0 7128 10 0 207 +417 67 451 5 0 7003 10 0 348 +418 24 68 -8 0 6984 10 832 0 +419 146 439 -18 0 7059 10 281 0 +420 209 212 -10 0 7219 10 252 0 +421 6 292 -20 0 7027 10 304 0 +422 18 63 10 0 6977 10 0 935 +423 149 98 -10 0 7092 10 816 0 +424 91 268 10 0 7114 10 0 907 +425 103 177 28 0 7110 10 0 449 +426 367 178 20 721 841 10 0 239 +427 225 269 -36 0 7243 10 292 0 +428 443 246 20 0 7081 10 0 560 +429 306 42 11 0 7059 10 0 568 +430 374 306 4 0 7138 10 0 655 +431 413 421 -18 0 7038 10 1 0 +432 470 405 17 0 7005 10 0 468 +433 33 278 18 5949 6069 10 0 900 +434 149 458 -10 4655 4775 10 62 0 +435 257 57 18 0 7081 10 0 699 +436 272 403 30 0 7120 10 0 11 +437 221 291 -32 0 7224 10 789 0 +438 1 101 -8 0 6984 10 995 0 +439 332 459 35 1475 1595 10 0 378 +440 220 392 20 0 7129 10 0 185 +441 253 50 -10 0 7074 10 859 0 +442 250 441 -9 0 7083 10 984 0 +443 471 484 -10 0 6953 10 297 0 +444 480 152 -20 0 7024 10 891 0 +445 404 83 30 0 7047 10 0 198 +446 476 94 20 0 7000 10 0 231 +447 458 213 22 4513 4633 10 0 973 +448 215 395 20 0 7125 10 0 362 +449 85 288 -28 0 7105 10 425 0 +450 179 75 -18 0 7086 10 190 0 +451 228 287 21 0 7231 10 0 349 +452 397 18 -25 1168 1288 10 557 0 +453 238 204 20 0 7227 10 0 528 +454 488 3 3 0 6931 10 0 399 +455 407 88 10 0 7049 0 0 1007 +456 459 14 -20 0 6959 10 195 0 +457 120 17 -32 0 7008 10 687 0 +458 235 316 -12 0 7207 10 920 0 +459 370 382 11 0 7096 10 0 834 +460 405 454 -20 0 7018 10 200 0 +461 17 458 10 0 6962 10 0 100 +462 43 135 -23 0 7038 10 663 0 +463 318 497 21 0 7018 10 0 324 +464 199 268 20 0 7220 10 0 785 +465 111 467 20 0 7017 10 0 12 +466 138 438 20 1149 1269 10 0 815 +467 172 314 9 0 7174 10 0 837 +468 494 468 -17 0 6947 10 432 0 +469 35 303 -16 0 7053 10 842 0 +470 341 59 27 0 7063 10 0 673 +471 423 221 -10 0 7099 10 713 0 +472 395 295 -20 0 7123 10 481 0 +473 413 417 10 0 7041 10 0 724 +474 339 60 20 0 7065 10 0 57 +475 277 428 7 0 7094 10 0 78 +476 176 199 28 0 7185 10 0 478 +477 265 240 9 18 138 10 0 875 +478 365 190 -28 5910 6030 10 476 0 +479 133 53 -4 0 7045 10 526 0 +480 387 488 20 1448 1568 10 0 598 +481 385 295 20 0 7132 10 0 472 +482 491 369 28 0 7006 10 0 29 +483 445 273 20 1031 1151 10 0 584 +484 195 273 22 0 7215 10 0 976 +485 313 493 20 4772 4892 10 0 957 +486 495 227 -20 0 7028 10 401 0 +487 241 403 10 0 7121 10 0 878 +488 30 72 -20 0 6992 10 753 0 +489 21 487 10 0 6945 10 0 624 +490 324 99 10 0 7106 10 0 561 +491 453 318 -5 0 7060 10 711 0 +492 443 272 10 0 7080 10 0 208 +493 447 184 27 0 7067 10 0 136 +494 366 288 -23 0 7152 10 178 0 +495 440 284 -9 0 7081 10 649 0 +496 13 314 -20 0 7029 10 335 0 +497 72 227 -14 0 7095 10 623 0 +498 377 385 -20 3465 3585 10 821 0 +499 477 478 -20 0 6953 10 910 0 +500 204 185 20 0 7195 10 0 852 +501 226 191 -20 372 492 10 763 0 +502 330 138 -30 4438 4558 10 180 0 +503 185 434 -20 0 7079 10 308 0 +504 483 22 -36 0 6949 10 320 0 +505 71 282 29 0 7093 10 0 177 +506 60 5 18 0 6964 10 0 574 +507 189 402 -11 0 7111 10 619 0 +508 134 211 -17 0 7152 10 27 0 +509 146 313 -20 0 7153 10 220 0 +510 21 146 -10 0 7023 10 395 0 +511 37 281 -10 0 7059 10 535 0 +512 416 417 -20 1372 1492 10 915 0 +513 44 311 -10 1630 1750 10 97 0 +514 361 181 20 0 7144 10 0 171 +515 444 242 -18 0 7080 10 541 0 +516 444 271 -20 982 1102 10 210 0 +517 359 179 20 0 7144 10 0 33 +518 388 334 20 0 7113 10 0 542 +519 401 164 13 0 7101 10 0 820 +520 499 316 -21 0 7017 10 247 0 +521 399 106 -30 0 7067 10 824 0 +522 425 215 -33 0 7096 10 363 0 +523 407 98 10 0 7056 10 0 861 +524 406 460 -10 0 7013 10 939 0 +525 88 95 20 0 7050 10 0 145 +526 95 64 4 3064 3184 10 0 479 +527 306 229 10 0 7215 10 0 637 +528 273 55 -20 725 845 10 453 0 +529 384 149 18 0 7107 10 0 291 +530 122 35 10 0 7024 10 0 942 +531 308 199 -20 6033 6153 10 273 0 +532 390 301 10 661 781 10 0 181 +533 300 108 10 542 662 10 0 403 +534 267 400 -36 929 1049 10 745 0 +535 8 300 10 1423 1543 10 0 511 +536 105 181 19 0 7114 10 0 64 +537 398 325 30 0 7109 10 0 201 +538 166 247 1 276 396 10 0 645 +539 140 431 30 0 7063 10 0 835 +540 253 118 -20 2189 2309 10 329 0 +541 359 246 18 0 7165 10 0 515 +542 321 277 -20 0 7199 10 518 0 +543 168 59 6 0 7067 10 0 563 +544 406 285 20 0 7115 10 0 548 +545 391 334 20 724 844 10 0 341 +546 437 19 -10 0 6977 10 844 0 +547 201 278 13 0 7218 10 0 641 +548 435 267 -20 0 7089 10 544 0 +549 245 408 -25 0 7116 10 301 0 +550 16 462 -20 0 6959 10 376 0 +551 107 374 -25 0 7085 10 862 0 +552 477 97 10 1131 1251 10 0 103 +553 346 57 20 0 7059 10 0 726 +554 14 459 -10 0 6959 10 905 0 +555 102 6 3 0 6989 10 0 124 +556 359 287 -30 0 7159 10 216 0 +557 297 131 25 0 7147 10 0 452 +558 282 1 -10 0 7023 10 44 0 +559 21 70 -10 3085 3205 10 881 0 +560 440 244 -20 0 7084 10 428 0 +561 482 104 -10 0 7000 10 490 0 +562 120 261 5 0 7144 10 0 930 +563 125 29 -6 1133 1253 10 543 0 +564 292 32 14 0 7052 10 0 632 +565 262 92 -24 0 7116 10 28 0 +566 68 160 21 0 7071 10 0 742 +567 405 276 -10 0 7117 10 21 0 +568 277 50 -11 0 7073 10 429 0 +569 32 319 -7 0 7046 10 766 0 +570 344 70 24 0 7071 10 0 191 +571 481 84 17 0 6990 10 0 165 +572 21 68 -8 1606 1726 10 879 0 +573 441 244 10 0 7083 10 0 604 +574 57 43 -18 0 6991 10 506 0 +575 1 293 -20 1071 1191 10 334 0 +576 481 96 20 0 6997 10 0 35 +577 471 368 19 0 7024 10 0 718 +578 236 126 23 0 7150 10 0 199 +579 406 99 -13 908 1028 10 379 0 +580 303 186 -10 5417 5537 10 736 0 +581 225 369 -21 426 546 10 228 0 +582 412 453 -20 0 7015 10 253 0 +583 104 349 20 0 7098 10 0 268 +584 173 182 -20 0 7172 10 483 0 +585 111 464 -20 1242 1362 10 328 0 +586 53 440 -10 1292 1412 10 238 0 +587 69 336 -31 0 7074 10 860 0 +588 359 182 -10 0 7146 10 767 0 +589 13 459 -24 0 6959 10 911 0 +590 244 277 18 0 7247 10 0 189 +591 484 177 20 1006 1126 10 0 69 +592 452 206 31 0 7068 10 0 393 +593 22 483 -10 1244 1364 10 740 0 +594 452 110 -20 0 7029 10 170 0 +595 347 192 -21 5953 6073 10 661 0 +596 95 92 20 0 7053 10 0 849 +597 368 311 14 0 7142 10 0 338 +598 479 387 -20 1590 1710 10 480 0 +599 479 169 -10 0 7032 10 692 0 +600 497 266 -10 0 7027 10 690 0 +601 66 336 10 0 7071 10 0 163 +602 376 195 10 724 844 10 0 226 +603 401 281 -30 0 7120 10 612 0 +604 441 177 -10 0 7070 10 573 0 +605 231 203 20 0 7224 10 0 350 +606 21 488 10 0 6944 10 0 739 +607 231 204 20 0 7225 10 0 287 +608 122 422 -25 0 7060 10 409 0 +609 65 453 -10 0 7000 10 59 0 +610 206 261 -20 0 7229 10 101 0 +611 466 149 -10 0 7036 10 731 0 +612 313 119 30 0 7129 10 0 603 +613 90 274 20 717 837 10 0 125 +614 39 162 18 2261 2381 10 0 306 +615 35 306 20 918 1038 10 0 307 +616 437 15 30 0 6974 10 0 242 +617 307 412 -25 1615 1735 10 330 0 +618 79 291 10 835 955 10 0 73 +619 64 437 11 0 7011 10 0 507 +620 376 92 -10 3962 4082 10 282 0 +621 129 27 -22 1190 1310 10 356 0 +622 196 489 -10 0 7029 10 628 0 +623 51 286 14 0 7072 10 0 497 +624 20 488 -10 1489 1609 10 489 0 +625 13 455 10 0 6961 10 0 126 +626 170 347 -10 0 7149 10 955 0 +627 92 230 20 0 7115 10 0 407 +628 117 467 10 0 7020 10 0 622 +629 413 217 -10 0 7108 10 155 0 +630 405 450 20 0 7021 10 0 290 +631 394 322 12 0 7114 10 0 826 +632 125 61 -14 0 7048 10 564 0 +633 238 123 24 3124 3244 10 0 144 +634 11 403 18 0 6991 10 0 913 +635 89 272 10 0 7112 10 0 313 +636 304 102 -10 0 7117 10 326 0 +637 478 121 -10 1275 1395 10 527 0 +638 408 84 10 1137 1257 10 0 997 +639 376 494 30 1079 1199 10 0 719 +640 20 73 10 0 6984 10 0 396 +641 159 299 -13 4062 4182 10 547 0 +642 95 382 -20 0 7071 10 359 0 +643 352 63 6 0 7061 10 0 22 +644 365 274 -20 0 7157 10 685 0 +645 30 301 -1 0 7049 10 538 0 +646 351 5 12 0 7009 10 0 196 +647 197 267 10 0 7219 10 0 735 +648 498 171 -20 0 7014 10 233 0 +649 468 352 9 0 7034 10 0 495 +650 418 251 21 4787 4907 10 0 300 +651 489 437 -10 0 6971 10 15 0 +652 251 63 -3 3950 4070 10 187 0 +653 132 55 -13 1069 1189 10 940 0 +654 281 96 1 0 7117 10 0 916 +655 333 293 -4 0 7181 10 430 0 +656 255 487 19 0 7037 10 0 869 +657 207 400 20 762 882 10 0 839 +658 469 489 -30 0 6950 10 850 0 +659 244 254 20 401 521 10 0 387 +660 233 207 10 0 7228 10 0 20 +661 441 60 21 0 7005 10 0 595 +662 411 379 25 0 7068 10 0 332 +663 178 72 23 0 7082 10 0 462 +664 51 447 -10 0 6994 10 157 0 +665 478 118 -14 1417 1537 10 285 0 +666 141 426 23 0 7067 10 0 710 +667 295 89 23 0 7107 10 0 898 +668 112 433 -27 0 7045 10 61 0 +669 320 211 16 0 7194 10 0 756 +670 400 103 -10 0 7064 10 219 0 +671 408 453 10 0 7017 10 0 897 +672 435 180 37 0 7077 10 0 184 +673 432 66 -27 0 7016 10 470 0 +674 374 116 -21 0 7092 10 192 0 +675 478 102 -30 0 7003 10 298 0 +676 335 57 30 784 904 10 0 249 +677 385 239 -10 0 7139 10 883 0 +678 386 245 16 0 7138 10 0 24 +679 208 396 20 0 7123 10 0 229 +680 380 489 20 1516 1636 10 0 761 +681 380 498 -30 1189 1309 10 702 0 +682 440 7 -20 1255 1375 10 896 0 +683 434 245 -10 0 7090 10 777 0 +684 90 232 -10 0 7113 10 871 0 +685 389 334 20 0 7112 10 0 644 +686 241 205 30 0 7229 0 0 1012 +687 18 24 32 0 6951 10 0 457 +688 57 183 15 0 7070 10 0 772 +689 59 457 -34 0 6993 10 972 0 +690 442 243 10 0 7082 10 0 600 +691 402 281 20 0 7119 10 0 755 +692 445 237 10 0 7079 10 0 599 +693 441 273 -28 0 7082 10 296 0 +694 31 175 24 986 1106 10 0 914 +695 234 202 -10 0 7224 10 760 0 +696 52 303 -26 1765 1885 10 30 0 +697 167 445 -20 0 7063 10 366 0 +698 179 286 -24 0 7195 10 119 0 +699 269 48 -18 0 7072 10 435 0 +700 165 59 27 0 7065 10 0 827 +701 461 8 -7 0 6953 10 371 0 +702 421 415 30 941 1061 10 0 681 +703 59 459 -20 0 6991 10 966 0 +704 24 492 10 0 6943 10 0 147 +705 55 449 -30 0 6996 10 987 0 +706 224 192 -20 280 400 10 272 0 +707 444 269 20 934 1054 10 0 166 +708 491 20 -20 1574 1694 10 41 0 +709 313 126 -20 973 1093 10 762 0 +710 283 438 -23 0 7084 10 666 0 +711 352 241 5 0 7172 10 0 491 +712 398 476 25 0 7004 10 0 265 +713 442 247 10 0 7082 10 0 471 +714 217 207 26 0 7220 10 0 981 +715 233 87 18 1010 1130 10 0 385 +716 479 127 -14 0 7015 10 38 0 +717 6 53 8 0 6961 10 0 872 +718 478 300 -19 0 7041 10 577 0 +719 378 493 -30 0 7000 10 639 0 +720 303 78 -30 0 7095 10 344 0 +721 344 62 -21 1386 1506 10 96 0 +722 371 315 18 0 7137 10 0 738 +723 200 78 -20 0 7095 10 346 0 +724 413 391 -10 0 7059 10 473 0 +725 415 216 -19 705 825 10 727 0 +726 397 57 -20 0 7032 10 553 0 +727 293 228 19 0 7226 10 0 725 +728 0 297 -20 0 7020 10 996 0 +729 435 20 20 0 6979 10 0 288 +730 195 111 15 0 7125 10 0 118 +731 417 218 10 1112 1232 10 0 611 +732 340 54 -14 951 1071 10 765 0 +733 132 57 20 978 1098 10 0 50 +734 210 379 12 0 7139 10 0 17 +735 228 260 -10 0 7250 10 647 0 +736 399 104 10 0 7066 10 0 580 +737 95 277 20 1098 1218 10 0 382 +738 360 284 -18 0 7159 10 722 0 +739 53 466 -10 0 6982 10 606 0 +740 112 465 10 0 7019 10 0 593 +741 313 391 5 0 7120 10 0 84 +742 93 235 -21 0 7117 10 566 0 +743 125 32 -2 0 7023 10 174 0 +744 215 282 -32 0 7227 10 234 0 +745 224 320 36 0 7200 10 0 534 +746 134 428 20 0 7062 10 0 818 +747 26 490 10 0 6946 10 0 357 +748 44 115 -21 0 7028 10 254 0 +749 438 127 -36 0 7050 10 48 0 +750 239 15 2 0 7039 10 0 259 +751 342 54 -40 0 7058 10 884 0 +752 109 463 30 1334 1454 10 0 770 +753 199 187 20 507 627 10 0 488 +754 201 188 -30 0 7195 10 779 0 +755 399 301 -20 0 7117 10 691 0 +756 484 171 -16 0 7028 10 669 0 +757 272 234 -33 0 7247 10 85 0 +758 380 350 15 0 7110 10 0 794 +759 140 108 -28 0 7095 10 109 0 +760 228 199 10 537 657 10 0 695 +761 245 461 -20 0 7063 10 680 0 +762 305 107 20 901 1021 10 0 709 +763 231 195 20 0 7216 10 0 501 +764 450 265 -24 0 7074 10 224 0 +765 273 149 14 0 7171 10 0 732 +766 12 358 7 4897 5017 10 0 569 +767 315 121 10 0 7130 10 0 588 +768 420 213 10 0 7101 10 0 888 +769 331 134 -15 0 7133 10 926 0 +770 84 377 -30 3705 3825 10 752 0 +771 320 280 10 0 7198 10 0 983 +772 89 185 -15 2399 2519 10 688 0 +773 472 481 20 0 6954 10 0 211 +774 422 420 -25 0 7033 10 58 0 +775 475 267 7 0 7049 10 0 404 +776 470 125 -10 952 1072 10 167 0 +777 435 268 10 0 7089 10 0 683 +778 409 155 -20 0 7089 10 952 0 +779 243 248 30 0 7267 10 0 754 +780 488 96 22 0 6991 10 0 337 +781 341 72 9 0 7075 10 0 908 +782 58 449 30 1451 1571 10 0 243 +783 16 460 20 0 6960 10 0 318 +784 480 136 -14 0 7018 10 865 0 +785 162 388 -20 4504 4624 10 464 0 +786 47 208 30 0 7067 10 0 919 +787 324 127 30 0 7131 10 0 316 +788 87 96 -20 0 7050 10 944 0 +789 140 137 32 2279 2399 10 0 437 +790 314 205 -10 0 7196 10 990 0 +791 96 346 26 741 861 10 0 319 +792 321 280 -15 0 7197 10 989 0 +793 245 251 10 0 7269 10 0 823 +794 436 295 -15 0 7083 10 758 0 +795 274 261 -12 0 7248 10 863 0 +796 271 128 12 0 7151 10 0 895 +797 275 45 20 0 7068 10 0 169 +798 422 409 -11 0 7040 10 840 0 +799 146 188 -20 0 7153 10 176 0 +800 93 96 -20 0 7055 10 991 0 +801 409 255 23 0 7115 10 0 877 +802 449 428 -27 0 7008 10 83 0 +803 90 285 -11 0 7111 10 43 0 +804 415 95 15 0 7048 10 0 814 +805 88 287 -10 0 7108 10 355 0 +806 379 196 20 776 896 10 0 223 +807 368 452 16 2680 2800 10 0 130 +808 202 186 -30 604 724 10 961 0 +809 435 11 40 1189 1309 10 0 278 +810 269 46 20 1074 1194 10 0 929 +811 7 292 10 0 7028 10 0 882 +812 44 496 -11 1607 1727 10 833 0 +813 478 99 -26 0 7001 10 985 0 +814 391 99 -15 0 7068 10 804 0 +815 132 477 -20 1309 1429 10 466 0 +816 24 65 10 1461 1581 10 0 423 +817 130 247 -10 0 7154 10 75 0 +818 133 273 -20 0 7155 10 746 0 +819 347 62 10 0 7063 0 0 1011 +820 404 140 -13 0 7085 10 519 0 +821 416 420 20 0 7037 10 0 498 +822 67 335 20 0 7073 10 0 923 +823 92 270 -10 0 7115 10 793 0 +824 411 95 30 0 7051 10 0 521 +825 132 479 11 0 7017 10 0 113 +826 366 334 -12 0 7131 10 631 0 +827 125 39 -27 921 1041 10 700 0 +828 419 422 20 1105 1225 10 0 8 +829 460 2 20 1412 1532 10 0 108 +830 67 334 -20 923 1043 10 845 0 +831 448 414 23 0 7017 10 0 392 +832 46 163 8 0 7053 10 0 418 +833 77 465 11 1044 1164 10 0 812 +834 284 319 -11 0 7198 10 459 0 +835 102 422 -30 0 7048 10 539 0 +836 240 34 28 6238 6358 10 0 317 +837 141 428 -9 775 895 10 467 0 +838 204 269 -20 0 7225 10 367 0 +839 144 439 -20 0 7058 10 657 0 +840 470 417 11 2947 3067 10 0 798 +841 404 103 -16 0 7062 10 978 0 +842 5 281 16 0 7028 10 0 469 +843 487 320 -25 0 7027 10 275 0 +844 398 23 10 0 7004 10 0 546 +845 90 296 20 606 726 10 0 830 +846 386 13 10 0 7001 10 0 412 +847 115 465 -26 0 7021 10 251 0 +848 473 475 10 0 6958 10 0 986 +849 275 42 -20 0 7065 10 596 0 +850 286 356 30 0 7163 10 0 658 +851 15 69 -21 1167 1287 10 970 0 +852 267 44 -20 0 7068 10 500 0 +853 243 399 10 939 1059 10 0 9 +854 390 249 21 0 7134 10 0 66 +855 210 391 30 566 686 10 0 932 +856 433 15 -20 0 6977 10 380 0 +857 24 259 19 0 7048 10 0 369 +858 12 463 20 0 6955 10 0 347 +859 237 213 10 0 7235 10 0 441 +860 182 480 31 1459 1579 10 0 587 +861 409 88 -10 0 7048 10 523 0 +862 244 368 25 0 7156 10 0 551 +863 381 328 12 0 7122 10 0 795 +864 213 185 -32 0 7200 10 79 0 +865 482 141 14 0 7018 10 0 784 +866 319 124 -20 0 7131 10 264 0 +867 141 431 30 0 7063 10 0 139 +868 198 264 20 0 7221 10 0 270 +869 69 334 -19 0 7075 10 656 0 +870 299 98 30 0 7115 10 0 982 +871 240 250 10 150 270 10 0 684 +872 199 203 -8 5829 5949 10 717 0 +873 459 17 -10 0 6961 10 263 0 +874 423 217 20 0 7098 10 0 992 +875 477 179 -9 891 1011 10 477 0 +876 213 397 10 869 989 10 0 880 +877 405 187 -23 5002 5122 10 801 0 +878 269 402 -10 811 931 10 487 0 +879 53 204 8 0 7072 10 0 572 +880 13 394 -10 1490 1610 10 876 0 +881 15 68 10 0 6977 10 0 559 +882 56 268 -10 4256 4376 10 811 0 +883 360 184 10 0 7146 10 0 677 +884 307 102 40 0 7116 10 0 751 +885 130 57 40 0 7047 10 0 391 +886 250 328 24 995 1115 10 0 248 +887 91 231 30 0 7114 10 0 945 +888 479 176 -10 946 1066 10 768 0 +889 420 224 10 1716 1836 10 0 93 +890 461 182 13 0 7053 10 0 928 +891 418 218 20 0 7103 10 0 444 +892 419 418 10 0 7036 10 0 277 +893 336 493 20 0 7017 0 0 1003 +894 389 300 10 0 7127 0 0 1009 +895 92 76 -12 0 7039 10 796 0 +896 476 102 20 0 7004 10 0 682 +897 418 399 -10 0 7050 10 671 0 +898 109 56 -23 0 7035 10 667 0 +899 13 465 31 3094 3214 10 0 140 +900 92 232 -18 0 7115 10 433 0 +901 394 47 -20 0 7026 10 274 0 +902 16 287 12 1083 1203 10 0 193 +903 399 102 -10 0 7064 10 150 0 +904 143 158 12 0 7133 10 0 921 +905 18 484 10 1300 1420 10 0 554 +906 250 411 -40 0 7113 10 225 0 +907 19 273 -10 0 7042 10 424 0 +908 365 28 -9 1073 1193 10 781 0 +909 387 297 10 561 681 10 0 384 +910 433 447 20 0 7006 10 0 499 +911 214 274 24 0 7231 10 0 589 +912 489 338 17 5589 5709 10 0 934 +913 130 494 -18 0 7003 10 634 0 +914 23 67 -24 0 6983 10 694 0 +915 374 489 20 0 7005 10 0 512 +916 126 30 -1 0 7022 10 654 0 +917 112 467 10 0 7017 10 0 128 +918 489 274 31 0 7034 10 0 70 +919 61 214 -30 0 7082 10 786 0 +920 166 440 12 0 7067 10 0 458 +921 56 75 -12 0 7013 10 904 0 +922 210 276 5 0 7227 10 0 980 +923 80 286 -20 0 7101 10 822 0 +924 17 459 -10 1688 1808 10 102 0 +925 66 448 -20 0 7004 10 358 0 +926 351 128 15 0 7116 10 0 769 +927 352 176 20 0 7148 10 0 146 +928 490 286 -13 0 7032 10 890 0 +929 247 219 -20 0 7243 10 810 0 +930 86 268 -5 0 7110 10 562 0 +931 398 329 17 611 731 10 0 81 +932 272 402 -30 638 758 10 855 0 +933 317 123 20 761 881 0 0 1008 +934 408 318 -17 0 7102 10 912 0 +935 66 31 -10 4194 4314 10 422 0 +936 425 448 9 3178 3298 10 0 39 +937 35 304 -30 0 7053 10 19 0 +938 471 94 30 0 7004 10 0 998 +939 470 473 10 0 6961 10 0 524 +940 224 56 13 0 7079 10 0 653 +941 343 47 20 0 7051 10 0 951 +942 52 18 -10 0 6969 10 530 0 +943 16 68 20 0 6978 10 0 411 +944 195 185 20 0 7189 10 0 788 +945 92 236 -30 0 7116 10 887 0 +946 76 462 -20 3824 3944 10 197 0 +947 124 56 -11 0 7043 10 80 0 +948 481 454 14 1282 1402 10 0 104 +949 477 483 -26 1463 1583 10 88 0 +950 481 124 -20 1134 1254 10 143 0 +951 389 156 -20 0 7107 10 941 0 +952 384 16 20 0 7005 10 0 778 +953 492 34 5 0 6950 10 0 131 +954 371 200 10 0 7144 10 0 202 +955 153 235 10 0 7176 10 0 626 +956 428 202 -30 0 7090 10 162 0 +957 257 391 -20 0 7133 10 485 0 +958 421 218 10 0 7101 10 0 390 +959 206 186 10 0 7197 10 0 314 +960 393 301 30 0 7123 10 0 315 +961 204 187 30 0 7196 10 0 808 +962 468 475 10 0 6961 10 0 999 +963 477 122 10 0 7014 10 0 345 +964 100 66 -18 5599 5719 10 415 0 +965 489 27 -17 0 6948 10 132 0 +966 12 451 20 0 6963 10 0 703 +967 197 270 30 0 7218 10 0 302 +968 311 422 -3 0 7092 10 13 0 +969 489 17 -20 0 6941 10 183 0 +970 13 214 21 0 7035 10 0 851 +971 440 247 20 0 7084 10 0 299 +972 28 467 34 0 6964 10 0 689 +973 388 325 -22 0 7117 10 447 0 +974 270 401 20 0 7122 10 0 217 +975 5 445 -20 0 6961 10 25 0 +976 198 271 -22 0 7218 10 484 0 +977 480 131 -10 2750 2870 10 68 0 +978 437 98 16 0 7034 10 0 841 +979 131 246 17 0 7155 10 0 6 +980 49 437 -5 1710 1830 10 922 0 +981 270 49 -26 0 7073 10 714 0 +982 337 41 -30 0 7048 10 870 0 +983 318 280 -10 0 7200 10 771 0 +984 154 392 9 0 7103 10 0 442 +985 493 111 26 0 6995 10 0 813 +986 399 450 -10 0 7025 10 848 0 +987 67 452 30 1078 1198 10 0 705 +988 34 239 16 876 996 10 0 266 +989 343 276 15 0 7178 10 0 792 +990 393 12 10 0 6997 10 0 790 +991 236 247 20 0 7260 10 0 800 +992 340 291 -20 0 7176 10 874 0 +993 3 292 -10 0 7024 10 60 0 +994 209 68 27 6272 6392 10 0 54 +995 18 225 8 0 7041 10 0 438 +996 147 435 20 0 7063 10 0 728 +997 335 99 -10 0 7101 10 638 0 +998 485 24 -30 1285 1405 10 938 0 +999 470 475 -10 0 6960 10 962 0 +1000 341 58 10 0 7062 10 0 112 +1001 230 320 -8 0 7202 10 90 0 +1002 96 97 -20 0 7057 10 342 0 +1003 336 493 -20 0 7017 10 893 0 +1004 144 35 -26 0 7035 10 373 0 +1005 269 112 -19 0 7135 10 94 0 +1006 436 237 -20 0 7088 10 215 0 +1007 407 88 -10 0 7049 10 455 0 +1008 317 123 -20 761 881 10 933 0 +1009 389 300 -10 0 7127 10 894 0 +1010 188 119 -44 3899 4019 10 34 0 +1011 347 62 -10 0 7063 10 819 0 +1012 241 205 -30 0 7229 10 686 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC2105.txt b/jsprit-instances/instances/lilim/1000/LRC2105.txt new file mode 100644 index 00000000..0f198e72 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC2105.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 -15 3544 3711 10 370 0 +2 214 394 10 852 1113 10 0 49 +3 476 483 -20 1298 1660 10 773 0 +4 352 487 -1 3617 3718 10 265 0 +5 230 197 40 542 551 10 0 753 +6 175 239 23 109 498 10 0 270 +7 133 202 33 1636 2168 10 0 433 +8 328 458 -10 3111 3152 10 601 0 +9 25 499 -20 1665 2014 10 25 0 +10 226 423 -40 627 1069 10 17 0 +11 313 282 20 581 847 10 0 389 +12 60 454 -10 1292 1607 10 230 0 +13 239 486 -12 5778 6199 10 130 0 +14 102 264 10 331 858 10 0 40 +15 408 452 10 918 1379 10 0 468 +16 451 62 5 1059 1320 10 0 616 +17 203 390 40 623 766 10 0 10 +18 92 233 10 777 1134 10 0 97 +19 7 300 30 1340 1539 10 0 614 +20 409 90 20 995 1190 10 0 576 +21 307 108 10 841 1178 10 0 282 +22 347 54 10 1197 1284 10 0 198 +23 406 87 10 1225 1398 10 0 674 +24 371 332 -20 2054 2302 10 691 0 +25 116 466 20 895 1233 10 0 9 +26 441 265 40 694 1004 10 0 603 +27 130 140 17 794 879 10 0 800 +28 80 117 -27 3274 3439 10 898 0 +29 421 387 15 3070 3460 10 0 83 +30 83 300 26 1821 2297 10 0 292 +31 136 52 10 1109 1353 10 0 723 +32 18 462 20 1627 1675 10 0 86 +33 390 120 24 3770 4383 10 0 529 +34 188 119 -6 3916 4002 10 543 0 +35 467 114 -33 1465 1662 10 363 0 +36 440 292 -17 3704 3936 10 931 0 +37 268 400 -24 926 1140 10 886 0 +38 391 202 14 402 790 10 0 768 +39 377 432 20 3344 3428 0 0 1004 +40 80 290 -10 536 1164 10 14 0 +41 439 15 -20 1391 1474 10 446 0 +42 307 52 -10 3556 3927 10 709 0 +43 111 192 -17 4737 4979 10 979 0 +44 131 56 -31 885 1281 10 462 0 +45 88 286 10 1007 1132 10 0 957 +46 69 414 -26 4851 5375 10 251 0 +47 41 232 -10 852 911 10 252 0 +48 323 77 -14 5647 5713 10 186 0 +49 340 416 -10 1196 1492 10 2 0 +50 86 199 23 998 1344 10 0 921 +51 314 124 -40 942 1025 10 884 0 +52 375 191 30 565 889 10 0 517 +53 226 175 -3 6692 6978 10 99 0 +54 242 106 28 5009 5258 10 0 580 +55 417 417 10 1168 1608 10 0 897 +56 419 459 20 1109 1542 10 0 848 +57 389 11 -9 1163 1544 10 908 0 +58 450 416 -10 2240 2494 10 939 0 +59 246 255 10 359 661 10 0 101 +60 71 333 10 606 1065 10 0 642 +61 105 474 -20 1918 1968 10 376 0 +62 20 489 -29 1585 1601 10 668 0 +63 388 331 -20 514 766 10 87 0 +64 92 259 4 1455 1861 10 0 73 +65 200 261 10 467 985 10 0 185 +66 400 288 30 421 817 10 0 973 +67 299 285 3 4840 5311 10 0 296 +68 378 199 10 719 1058 10 0 824 +69 325 147 14 4556 5058 10 0 94 +70 421 386 -14 3168 3547 10 948 0 +71 404 447 -34 949 1051 10 271 0 +72 412 478 -30 3771 4027 10 719 0 +73 26 67 -4 5266 5389 10 64 0 +74 358 183 20 742 1247 10 0 874 +75 30 302 10 1005 1248 10 0 820 +76 176 470 -10 2087 2406 10 925 0 +77 96 270 20 516 901 10 0 366 +78 243 408 -7 5747 5842 10 218 0 +79 60 29 -26 5365 5657 10 632 0 +80 34 169 -30 1896 2099 10 100 0 +81 407 280 10 764 1025 10 0 188 +82 277 403 10 687 830 10 0 436 +83 498 456 -15 5482 5885 10 29 0 +84 384 491 -10 1436 1465 10 549 0 +85 355 174 33 2900 2943 10 0 400 +86 97 288 -20 4927 5466 10 32 0 +87 316 284 20 464 654 10 0 63 +88 334 403 26 589 807 10 0 253 +89 415 223 20 1266 1292 10 0 655 +90 230 320 8 4768 4889 10 0 744 +91 432 199 -10 2414 2814 10 725 0 +92 92 18 8 4381 4733 10 0 151 +93 273 300 30 144 296 10 0 630 +94 269 112 -14 4961 5261 10 69 0 +95 429 389 18 1521 1992 10 0 98 +96 371 71 21 1126 1288 10 0 259 +97 5 297 -10 1075 1695 10 18 0 +98 414 378 -18 1958 2121 10 95 0 +99 38 15 3 4342 4507 10 0 53 +100 2 295 30 1160 1406 10 0 80 +101 237 254 -10 342 444 10 59 0 +102 54 445 10 1192 1392 10 0 461 +103 382 110 -20 4414 4605 10 818 0 +104 438 488 -10 1344 1393 10 582 0 +105 395 331 20 663 1189 10 0 828 +106 230 487 -20 4398 4759 10 334 0 +107 249 407 10 627 884 10 0 277 +108 488 26 30 1734 1848 0 0 1005 +109 151 81 -23 5996 6588 10 410 0 +110 483 14 -20 1355 1671 10 998 0 +111 0 422 -10 3162 3526 10 534 0 +112 429 67 -10 2817 3161 10 552 0 +113 195 464 -10 6109 6341 10 923 0 +114 356 256 19 184 665 10 0 483 +115 264 180 -14 6725 6840 10 765 0 +116 94 235 20 476 858 10 0 319 +117 474 96 -10 981 1194 10 670 0 +118 268 52 -10 1263 1302 10 169 0 +119 44 440 -10 3085 3344 10 876 0 +120 7 382 -10 2940 3344 10 853 0 +121 459 53 -13 4449 4649 10 379 0 +122 491 25 -10 1634 1755 10 326 0 +123 439 243 -20 1088 1540 10 707 0 +124 210 185 20 106 505 10 0 895 +125 150 68 -20 1614 1888 10 525 0 +126 201 270 10 145 359 10 0 463 +127 0 188 -30 3516 4060 10 229 0 +128 103 464 -25 5121 5182 10 696 0 +129 325 56 -23 3175 3316 10 667 0 +130 44 344 12 4295 4461 10 0 13 +131 418 75 -20 1732 1972 10 165 0 +132 472 57 -25 5214 5265 10 275 0 +133 460 328 -20 913 959 10 401 0 +134 89 270 -30 793 955 10 344 0 +135 374 190 -20 589 677 10 273 0 +136 463 253 -10 4066 4430 10 798 0 +137 97 93 20 946 1097 10 0 415 +138 163 472 -40 2615 2733 10 279 0 +139 29 336 22 1237 1535 10 0 168 +140 84 453 -23 4814 5089 10 622 0 +141 294 421 -9 6224 6500 10 936 0 +142 343 62 10 1463 1517 10 0 952 +143 371 193 20 349 722 10 0 321 +144 142 372 18 561 743 10 0 318 +145 66 88 -32 3234 3524 10 687 0 +146 395 332 10 805 959 10 0 431 +147 93 413 17 771 1039 10 0 703 +148 267 394 -10 999 1194 10 487 0 +149 249 258 30 546 588 10 0 467 +150 472 129 -20 914 1227 10 776 0 +151 87 3 -8 5714 5871 10 92 0 +152 62 326 -20 1043 1368 10 607 0 +153 212 186 -10 6884 7008 10 382 0 +154 241 402 -13 3968 4350 10 181 0 +155 439 266 -30 685 916 10 960 0 +156 79 80 -24 5530 5647 10 694 0 +157 62 453 10 1115 1362 10 0 739 +158 188 151 -29 4940 5554 10 759 0 +159 386 154 -30 4258 4669 10 243 0 +160 38 301 20 1055 1429 10 0 919 +161 192 265 10 467 646 10 0 825 +162 371 192 30 421 738 10 0 514 +163 64 294 -20 4280 4650 10 501 0 +164 381 494 10 1227 1561 10 0 392 +165 437 12 20 1202 1554 10 0 131 +166 186 135 24 2647 3214 10 0 396 +167 459 10 -10 1319 1481 10 452 0 +168 175 422 -22 5728 5963 10 139 0 +169 274 48 10 740 1070 10 0 118 +170 488 173 20 1062 1288 10 0 637 +171 398 97 10 791 1000 10 0 579 +172 385 17 40 3287 3304 10 0 940 +173 180 283 -20 2915 3155 10 993 0 +174 71 12 -28 1082 1382 10 476 0 +175 343 49 -10 909 1331 10 732 0 +176 248 251 20 2 46 10 0 628 +177 7 194 -21 3761 3970 10 228 0 +178 322 290 -25 5932 6020 10 802 0 +179 410 399 -20 857 1134 10 518 0 +180 398 103 -20 1052 1296 10 233 0 +181 385 285 13 3394 3670 10 0 154 +182 179 497 -10 5558 5850 10 959 0 +183 464 13 20 1519 1680 10 0 191 +184 492 335 -29 3168 3578 10 928 0 +185 27 464 -10 5092 5357 10 65 0 +186 231 29 14 4832 5098 10 0 48 +187 157 38 -13 4034 4469 10 450 0 +188 439 268 -10 1136 1366 10 81 0 +189 149 214 -20 1779 2197 10 220 0 +190 187 73 -20 915 1541 10 312 0 +191 429 169 -20 3411 3932 10 183 0 +192 350 199 -10 4635 5097 10 963 0 +193 60 231 -24 3887 4441 10 633 0 +194 448 404 15 2239 2673 10 0 651 +195 481 20 -20 1304 1591 10 941 0 +196 436 25 -22 5116 5262 10 780 0 +197 111 459 -30 1237 1753 10 539 0 +198 389 17 -10 1271 1775 10 22 0 +199 148 208 -9 2026 2306 10 437 0 +200 475 477 -10 1512 1845 10 671 0 +201 390 325 30 893 1238 10 0 537 +202 346 354 -20 3153 3507 10 548 0 +203 91 266 10 665 1316 10 0 697 +204 17 65 20 1304 1430 10 0 422 +205 391 112 -31 3790 4333 10 592 0 +206 224 203 20 67 363 10 0 394 +207 426 231 -10 4160 4187 10 533 0 +208 260 472 -12 4118 4289 10 324 0 +209 265 0 -20 3428 3861 10 866 0 +210 391 293 20 891 1035 10 0 567 +211 411 421 20 1179 1461 10 0 577 +212 132 30 20 1111 1615 10 0 789 +213 475 480 -20 1326 1829 10 949 0 +214 286 244 -15 5019 5372 10 926 0 +215 436 237 20 742 749 10 0 692 +216 402 284 30 535 902 10 0 516 +217 287 397 12 2144 2490 0 0 1008 +218 272 420 7 5443 5763 10 0 78 +219 477 120 -30 1223 1634 10 361 0 +220 145 434 20 852 1131 10 0 189 +221 33 286 -10 6203 6284 10 419 0 +222 370 262 15 4413 4503 10 0 284 +223 393 20 -20 1408 1838 10 264 0 +224 330 308 -10 4513 4971 10 771 0 +225 246 398 40 498 686 10 0 256 +226 482 184 14 4448 4527 10 0 726 +227 451 305 13 773 895 10 0 889 +228 226 316 21 112 449 10 0 177 +229 110 459 30 1312 1589 10 0 127 +230 244 250 10 6 436 10 0 12 +231 458 16 -12 1041 1464 10 720 0 +232 390 34 -14 4218 4385 10 594 0 +233 423 214 20 723 1131 10 0 180 +234 219 215 32 122 253 10 0 653 +235 326 118 10 391 912 10 0 322 +236 365 74 -20 3219 3689 10 474 0 +237 331 356 13 2745 3070 10 0 398 +238 210 398 10 690 1064 10 0 585 +239 403 93 -10 1400 1446 10 455 0 +240 248 404 30 319 996 10 0 354 +241 65 62 -15 3741 4190 10 574 0 +242 460 13 20 1226 1468 10 0 299 +243 0 293 30 954 1396 10 0 159 +244 211 248 26 137 175 10 0 980 +245 484 174 -10 923 1313 10 522 0 +246 175 352 -34 6541 6900 10 972 0 +247 455 168 21 3445 3610 10 0 604 +248 224 191 20 244 523 10 0 555 +249 439 156 2 2099 2227 10 0 749 +250 434 359 -4 5493 5765 10 658 0 +251 118 314 26 1300 1520 10 0 46 +252 234 246 10 308 329 10 0 47 +253 406 450 -26 1056 1137 10 88 0 +254 75 118 21 1637 1755 10 0 510 +255 115 395 -20 3254 3387 10 705 0 +256 329 456 -40 843 1270 10 225 0 +257 218 403 15 5277 5397 10 0 368 +258 149 341 -20 1469 1883 10 465 0 +259 253 74 -21 5293 5628 10 96 0 +260 436 241 -10 1213 1524 10 560 0 +261 238 203 -17 366 505 10 929 0 +262 405 455 40 1410 1437 10 0 650 +263 485 27 10 1684 2003 10 0 977 +264 323 118 20 601 806 10 0 223 +265 330 371 1 2182 2406 10 0 4 +266 25 65 10 1491 1639 10 0 488 +267 406 96 20 768 1078 10 0 938 +268 49 451 -11 1173 1187 10 833 0 +269 307 249 -10 5499 5634 10 504 0 +270 178 135 -23 6095 6136 10 6 0 +271 299 353 34 316 596 10 0 71 +272 236 213 20 87 230 10 0 605 +273 355 177 20 471 642 10 0 135 +274 394 23 -20 1486 1865 10 762 0 +275 306 235 25 57 703 10 0 132 +276 90 477 18 852 1370 10 0 858 +277 379 486 -10 2708 2786 10 107 0 +278 435 16 -20 1475 1584 10 841 0 +279 8 497 40 1437 1945 10 0 138 +280 150 484 -30 2350 2772 10 987 0 +281 213 399 18 939 1053 10 0 353 +282 391 18 -10 1387 1755 10 21 0 +283 111 392 -20 4604 4868 10 589 0 +284 330 281 -15 5310 5453 10 222 0 +285 344 203 14 613 846 10 0 561 +286 91 235 10 938 1334 10 0 964 +287 346 60 10 1203 1487 10 0 429 +288 483 27 20 1618 2166 10 0 600 +289 382 498 -10 1154 1440 10 681 0 +290 457 492 -10 2028 2157 10 962 0 +291 291 213 -25 4911 5271 10 997 0 +292 154 374 -26 3703 3912 10 30 0 +293 225 196 10 59 559 10 0 306 +294 94 40 -25 4262 4402 10 935 0 +295 0 356 -10 4154 4656 10 424 0 +296 297 283 -3 5314 5601 10 67 0 +297 371 423 -5 539 1149 10 741 0 +298 417 217 30 553 1075 10 0 570 +299 500 228 -20 3033 3342 10 242 0 +300 412 214 10 454 873 10 0 591 +301 442 289 25 754 893 10 0 351 +302 157 269 -6 6297 6433 10 913 0 +303 440 241 10 1153 1378 10 0 968 +304 100 266 20 505 787 10 0 880 +305 111 178 18 443 810 10 0 827 +306 91 101 -10 1112 1394 10 293 0 +307 25 307 -10 897 1218 10 871 0 +308 135 400 20 1217 1291 10 0 466 +309 58 458 -20 1304 1398 10 449 0 +310 133 26 10 1179 1434 10 0 413 +311 211 386 20 349 783 10 0 867 +312 94 97 20 821 1012 10 0 190 +313 30 155 -12 5008 5355 10 902 0 +314 208 184 20 161 547 10 0 584 +315 394 333 -20 792 881 10 685 0 +316 355 180 -20 422 796 10 927 0 +317 241 180 -27 6567 7109 10 994 0 +318 21 485 -18 1346 1481 10 144 0 +319 80 251 -20 1187 1362 10 116 0 +320 476 61 -20 1779 1931 10 701 0 +321 406 94 -20 848 1095 10 143 0 +322 364 71 -10 5357 5551 10 235 0 +323 418 221 10 1088 1362 10 0 683 +324 274 441 12 2753 2923 10 0 208 +325 304 97 20 612 963 10 0 708 +326 297 102 10 472 866 10 0 122 +327 250 405 20 501 912 10 0 974 +328 111 463 -20 1342 1351 10 448 0 +329 408 279 -20 863 1016 10 375 0 +330 263 418 25 1120 1228 10 0 617 +331 480 119 -20 2433 2715 10 364 0 +332 420 383 -10 3941 4035 10 443 0 +333 142 14 -30 3293 3509 10 457 0 +334 73 328 20 689 859 10 0 106 +335 50 438 -20 1401 1413 10 613 0 +336 441 7 20 1487 1765 10 0 836 +337 462 14 -30 1575 1722 10 676 0 +338 360 294 -25 5437 6025 10 662 0 +339 58 39 -21 4640 4783 10 864 0 +340 58 391 -4 3460 3718 10 348 0 +341 410 285 -20 632 1029 10 544 0 +342 96 97 20 750 987 10 0 730 +343 21 64 -35 1396 1542 10 508 0 +344 238 210 30 435 756 10 0 134 +345 479 121 -10 1212 1369 10 950 0 +346 200 178 -10 293 576 10 706 0 +347 216 341 -10 2471 2880 10 575 0 +348 48 437 4 3242 3307 10 0 340 +349 200 270 20 53 538 10 0 608 +350 357 181 -19 594 722 10 727 0 +351 476 174 -25 1305 1409 10 301 0 +352 400 286 10 389 945 10 0 777 +353 351 481 -18 1187 1507 10 281 0 +354 270 400 -30 530 680 10 240 0 +355 95 234 10 664 762 10 0 684 +356 128 113 22 1246 1775 10 0 652 +357 133 455 25 3111 3472 10 0 509 +358 16 463 -10 1490 1629 10 606 0 +359 59 388 -35 2497 2925 10 439 0 +360 376 190 30 550 812 10 0 502 +361 481 122 30 1175 1309 10 0 219 +362 266 405 20 801 1055 10 0 893 +363 374 232 33 344 658 10 0 35 +364 398 20 20 886 1386 10 0 331 +365 481 26 -30 1133 1441 10 870 0 +366 63 444 -20 1466 1693 10 77 0 +367 89 290 20 590 870 10 0 634 +368 246 314 -15 5665 6018 10 257 0 +369 40 304 -30 4565 4713 10 414 0 +370 262 369 15 440 715 10 0 1 +371 323 29 -12 4456 4763 10 646 0 +372 89 65 16 2798 3084 10 0 526 +373 144 35 26 937 980 10 0 885 +374 200 265 10 458 882 10 0 610 +375 436 264 20 623 869 10 0 329 +376 15 457 20 1172 1536 10 0 61 +377 397 20 20 987 1373 10 0 456 +378 328 491 21 2634 2912 10 0 485 +379 399 175 13 2965 3130 10 0 121 +380 432 2 -10 1812 2041 10 813 0 +381 63 336 -26 972 1278 10 791 0 +382 6 296 10 1167 1512 10 0 153 +383 146 376 8 845 1150 10 0 489 +384 295 247 -6 5090 5457 10 643 0 +385 235 33 30 5333 5483 10 0 406 +386 233 204 20 57 497 10 0 849 +387 142 360 -30 6110 6265 10 869 0 +388 177 156 25 498 959 10 0 904 +389 315 287 -20 627 678 10 11 0 +390 452 172 9 2314 2672 10 0 804 +391 263 153 -10 1588 1831 10 660 0 +392 493 493 -10 3321 3651 10 164 0 +393 320 283 30 370 634 10 0 472 +394 64 5 -20 4350 4801 10 206 0 +395 95 235 -30 500 746 10 779 0 +396 203 211 -24 5131 5441 10 166 0 +397 16 497 -10 1684 1841 10 624 0 +398 348 348 -13 3729 3869 10 237 0 +399 485 104 21 3230 3246 10 0 444 +400 330 147 -33 3292 3616 10 85 0 +401 443 237 20 589 1038 10 0 133 +402 316 286 30 383 831 10 0 821 +403 335 46 -10 5213 5641 10 819 0 +404 381 495 20 1332 1367 10 0 432 +405 364 173 30 756 806 10 0 769 +406 267 162 -30 5688 6026 10 385 0 +407 214 245 8 114 177 10 0 937 +408 92 234 -10 852 1146 10 859 0 +409 347 459 25 1826 2129 10 0 910 +410 30 7 23 4625 5004 10 0 109 +411 120 37 -10 3060 3263 10 621 0 +412 397 153 29 3475 3704 10 0 978 +413 210 29 -10 4253 4273 10 310 0 +414 87 285 30 1018 1030 10 0 369 +415 132 32 -20 3085 3311 10 137 0 +416 390 294 -20 991 1027 10 983 0 +417 67 451 -13 4872 4973 10 434 0 +418 24 68 20 1537 1899 10 0 572 +419 146 439 10 939 1254 10 0 221 +420 209 212 -28 6068 6275 10 942 0 +421 6 292 -10 925 1135 10 728 0 +422 18 63 -20 1375 1457 10 204 0 +423 149 98 -20 4624 4817 10 943 0 +424 91 268 10 845 1232 10 0 295 +425 103 177 -30 2551 2580 10 752 0 +426 367 178 20 592 971 10 0 891 +427 225 269 -36 5068 5219 10 745 0 +428 443 246 20 899 1058 10 0 515 +429 306 42 -10 1911 2022 10 287 0 +430 374 306 -24 4026 4046 10 556 0 +431 413 421 -10 1265 1278 10 146 0 +432 470 405 -20 3553 3973 10 404 0 +433 33 278 -33 5978 6039 10 7 0 +434 149 458 13 4513 4917 10 0 417 +435 257 57 -5 4813 5115 10 901 0 +436 272 403 -10 757 880 10 82 0 +437 221 291 9 50 467 10 0 199 +438 1 101 8 4853 5326 0 0 1006 +439 332 459 35 1424 1645 10 0 359 +440 220 392 20 1011 1172 10 0 619 +441 253 50 -20 939 986 10 797 0 +442 250 441 -20 2981 3184 10 746 0 +443 471 484 10 1389 1450 10 0 332 +444 480 152 -21 4000 4293 10 399 0 +445 404 83 -10 1192 1315 10 883 0 +446 476 94 20 989 1289 10 0 41 +447 458 213 -12 4557 4588 10 718 0 +448 215 395 20 751 1304 10 0 328 +449 85 288 20 521 1055 10 0 309 +450 179 75 13 2859 3181 10 0 187 +451 228 287 21 43 366 10 0 623 +452 397 18 10 1072 1384 10 0 167 +453 238 204 20 437 522 10 0 887 +454 488 3 -20 1620 1705 10 856 0 +455 407 88 10 1108 1607 10 0 239 +456 459 14 -20 1231 1371 10 377 0 +457 120 17 30 1087 1265 10 0 333 +458 235 316 -23 2479 2887 10 666 0 +459 370 382 -6 3380 3810 10 498 0 +460 405 454 -23 5201 5343 10 831 0 +461 17 458 -10 1757 1828 10 102 0 +462 43 135 31 717 1178 10 0 44 +463 318 497 -10 3394 3557 10 126 0 +464 199 268 -22 335 355 10 484 0 +465 111 467 20 1148 1268 10 0 258 +466 138 438 -20 1092 1326 10 308 0 +467 172 314 -30 2081 2403 10 149 0 +468 494 468 -10 1384 1555 10 15 0 +469 35 303 20 692 1079 0 0 1001 +470 341 59 27 3041 3398 10 0 654 +471 423 221 -20 960 1226 10 588 0 +472 395 295 -30 708 1103 10 393 0 +473 413 417 10 1257 1712 10 0 918 +474 339 60 20 541 1266 10 0 236 +475 277 428 7 1860 2182 10 0 761 +476 176 199 28 97 621 10 0 174 +477 265 240 9 18 199 10 0 903 +478 365 190 22 5745 6194 10 0 790 +479 133 53 20 1057 1298 10 0 851 +480 387 488 20 1307 1709 10 0 807 +481 385 295 -15 229 909 10 989 0 +482 491 369 28 2865 3091 10 0 843 +483 445 273 -19 919 1263 10 114 0 +484 195 273 22 221 255 10 0 464 +485 313 493 -21 4800 4865 10 378 0 +486 495 227 -10 1361 1511 10 492 0 +487 241 403 10 754 1127 10 0 148 +488 30 72 -10 1684 1889 10 266 0 +489 21 487 -8 1340 1583 10 383 0 +490 324 99 10 1198 1626 10 0 540 +491 453 318 -20 1309 1800 10 693 0 +492 443 272 10 1067 1213 10 0 486 +493 447 184 27 1551 1965 10 0 673 +494 366 288 -22 2750 2839 10 992 0 +495 440 284 25 3366 3567 10 0 595 +496 13 314 -10 887 1183 10 811 0 +497 72 227 -30 2297 2333 10 839 0 +498 377 385 6 3416 3634 10 0 459 +499 477 478 20 1442 1816 10 0 840 +500 204 185 20 604 823 10 0 823 +501 226 191 20 266 598 10 0 163 +502 330 138 -30 4447 4549 10 360 0 +503 185 434 9 2185 2523 10 0 507 +504 483 22 10 1373 1419 10 0 269 +505 71 282 29 2538 2715 10 0 770 +506 60 5 -10 4161 4309 10 816 0 +507 189 402 -9 2086 2322 10 503 0 +508 134 211 35 508 576 10 0 343 +509 146 313 -25 4758 4925 10 357 0 +510 21 146 -21 1947 2067 10 254 0 +511 37 281 -20 1932 2134 10 737 0 +512 416 417 20 1310 1554 10 0 794 +513 44 311 -30 1423 1956 10 805 0 +514 361 181 -30 789 908 10 162 0 +515 444 242 -20 913 931 10 428 0 +516 444 271 -30 835 1250 10 216 0 +517 359 179 -30 422 995 10 52 0 +518 388 334 20 538 847 10 0 179 +519 401 164 -20 2414 2676 10 599 0 +520 499 316 18 2514 2580 10 0 801 +521 399 106 -10 1145 1389 10 958 0 +522 425 215 10 873 1079 10 0 245 +523 407 98 10 810 939 10 0 675 +524 406 460 -30 2870 3003 10 906 0 +525 88 95 20 1016 1266 10 0 125 +526 95 64 -16 2884 3364 10 372 0 +527 306 229 10 5318 5365 0 0 1003 +528 273 55 20 783 788 10 0 796 +529 384 149 -24 4614 5083 10 33 0 +530 122 35 10 991 1090 10 0 559 +531 308 199 14 6030 6156 10 0 757 +532 390 301 10 626 815 10 0 713 +533 300 108 10 366 838 10 0 207 +534 267 400 10 828 1150 10 0 111 +535 8 300 -16 1382 1585 10 988 0 +536 105 181 -16 5916 6453 10 772 0 +537 398 325 -30 832 1155 10 201 0 +538 166 247 1 138 535 10 0 783 +539 140 431 30 604 1172 10 0 197 +540 253 118 -10 2082 2417 10 490 0 +541 359 246 -17 5651 5852 10 834 0 +542 321 277 10 187 421 10 0 597 +543 168 59 6 1381 1668 10 0 34 +544 406 285 20 537 1012 10 0 341 +545 391 334 20 657 911 10 0 986 +546 437 19 -37 3931 4301 10 672 0 +547 201 278 13 82 370 10 0 735 +548 435 267 20 1149 1553 10 0 202 +549 245 408 10 788 963 10 0 84 +550 16 462 10 1423 1783 10 0 704 +551 107 374 -25 3598 3837 10 862 0 +552 477 97 10 894 1488 10 0 112 +553 346 57 20 1253 1333 10 0 721 +554 14 459 -30 1297 1508 10 593 0 +555 102 6 -20 5675 6113 10 248 0 +556 359 287 24 310 610 10 0 430 +557 297 131 -10 4602 4842 10 731 0 +558 282 1 18 4124 4335 10 0 982 +559 21 70 -10 2918 3372 10 530 0 +560 440 244 10 1024 1225 10 0 260 +561 482 104 -14 3152 3427 10 285 0 +562 120 261 5 3134 3332 0 0 1002 +563 125 29 -30 1181 1205 10 788 0 +564 292 32 14 896 1057 10 0 714 +565 262 92 -10 2505 2658 10 1000 0 +566 68 160 21 4528 4679 10 0 799 +567 405 276 -20 732 1262 10 210 0 +568 277 50 -10 775 927 10 695 0 +569 32 319 -10 1494 1830 10 742 0 +570 344 70 -30 4580 4705 10 298 0 +571 481 84 -20 1876 2288 10 873 0 +572 21 68 -20 1539 1793 10 418 0 +573 441 244 -10 1051 1286 10 764 0 +574 57 43 15 4133 4175 10 0 241 +575 1 293 10 906 1357 10 0 347 +576 481 96 -20 1078 1418 10 20 0 +577 471 368 -20 1609 1936 10 211 0 +578 236 126 23 445 554 10 0 852 +579 406 99 -10 901 1035 10 171 0 +580 303 186 -28 5394 5559 10 54 0 +581 225 369 38 283 689 10 0 995 +582 412 453 10 1103 1394 10 0 104 +583 104 349 -20 3929 4265 10 763 0 +584 173 182 -20 176 645 10 314 0 +585 111 464 -10 1066 1539 10 238 0 +586 53 440 -20 1137 1567 10 615 0 +587 69 336 -30 785 1079 10 838 0 +588 359 182 20 723 1070 10 0 471 +589 13 459 20 1270 1624 10 0 283 +590 244 277 -18 5089 5441 10 946 0 +591 484 177 -10 873 1259 10 300 0 +592 452 206 31 1813 2244 10 0 205 +593 22 483 30 1170 1437 10 0 554 +594 452 110 14 1291 1551 10 0 232 +595 347 192 -25 5900 6125 10 495 0 +596 95 92 -20 1064 1078 10 944 0 +597 368 311 -10 3621 3907 10 542 0 +598 479 387 -10 1349 1950 10 892 0 +599 479 169 20 1084 1504 10 0 519 +600 497 266 -20 2806 3294 10 288 0 +601 66 336 10 907 1239 10 0 8 +602 376 195 10 745 822 10 0 682 +603 401 281 -40 858 1350 10 26 0 +604 441 177 -21 3857 4273 10 247 0 +605 231 203 -20 160 493 10 272 0 +606 21 488 10 1426 1585 10 0 358 +607 231 204 20 436 885 10 0 152 +608 122 422 -20 5754 6021 10 349 0 +609 65 453 -23 999 1375 10 835 0 +610 206 261 -10 602 978 10 374 0 +611 466 149 -20 4698 4910 10 806 0 +612 313 119 -20 855 992 10 933 0 +613 90 274 20 667 887 10 0 335 +614 39 162 -30 2240 2402 10 19 0 +615 35 306 20 895 1060 10 0 586 +616 437 15 -5 1337 1625 10 16 0 +617 307 412 -25 1534 1815 10 330 0 +618 79 291 10 776 1015 10 0 924 +619 64 437 -20 3539 3927 10 440 0 +620 376 92 -20 3768 4276 10 716 0 +621 129 27 10 1124 1377 10 0 411 +622 196 489 23 4070 4291 10 0 140 +623 51 286 -21 5720 6072 10 451 0 +624 20 488 10 1530 1569 10 0 397 +625 13 455 -30 1036 1570 10 975 0 +626 170 347 15 1780 1827 10 0 899 +627 92 230 20 733 897 10 0 907 +628 117 467 -20 967 1069 10 176 0 +629 413 217 20 649 783 10 0 875 +630 405 450 -30 881 1224 10 93 0 +631 394 322 12 4021 4297 10 0 722 +632 125 61 26 2347 2667 10 0 79 +633 238 123 24 3039 3329 10 0 193 +634 11 403 -20 1333 1531 10 367 0 +635 89 272 -10 587 1066 10 760 0 +636 304 102 30 462 1232 10 0 781 +637 478 121 -20 1270 1399 10 170 0 +638 408 84 -10 1156 1239 10 954 0 +639 376 494 30 1051 1226 10 0 712 +640 20 73 10 1030 1292 10 0 881 +641 159 299 12 4057 4187 10 0 882 +642 95 382 -10 838 1132 10 60 0 +643 352 63 6 4670 4875 10 0 384 +644 365 274 14 406 534 10 0 711 +645 30 301 -20 1041 1300 10 991 0 +646 351 5 12 1861 2227 10 0 371 +647 197 267 10 377 613 10 0 868 +648 498 171 -20 4896 5275 10 729 0 +649 468 352 -20 3042 3223 10 774 0 +650 418 251 -40 4798 4897 10 262 0 +651 489 437 -15 2771 3003 10 194 0 +652 251 63 -22 3841 4178 10 356 0 +653 132 55 -32 1005 1253 10 234 0 +654 281 96 -27 4558 4568 10 470 0 +655 333 293 -20 2412 2644 10 89 0 +656 255 487 -30 1527 1776 10 967 0 +657 207 400 -30 612 1032 10 855 0 +658 469 489 4 2204 2359 10 0 250 +659 244 254 20 278 645 10 0 915 +660 233 207 10 46 672 10 0 391 +661 441 60 -14 5744 6045 10 865 0 +662 411 379 25 4704 4963 10 0 338 +663 178 72 23 2968 3206 10 0 700 +664 51 447 10 1096 1379 10 0 905 +665 478 118 20 1354 1601 10 0 951 +666 141 426 23 1993 2378 10 0 458 +667 295 89 23 2908 3148 10 0 129 +668 112 433 29 879 1122 10 0 62 +669 320 211 16 3835 4226 10 0 877 +670 400 103 10 963 1201 10 0 117 +671 408 453 10 922 1462 10 0 200 +672 435 180 37 852 1064 10 0 546 +673 432 66 -27 4225 4464 10 493 0 +674 374 116 -10 2285 2532 10 23 0 +675 478 102 -10 1096 1618 10 523 0 +676 335 57 30 768 919 10 0 337 +677 385 239 21 3141 3263 10 0 758 +678 386 245 -20 1718 2233 10 971 0 +679 208 396 20 457 1074 10 0 996 +680 380 489 -20 1454 1698 10 878 0 +681 380 498 10 1135 1363 10 0 289 +682 440 7 -10 1146 1484 10 602 0 +683 434 245 -10 1356 1498 10 323 0 +684 90 232 -10 804 1009 10 355 0 +685 389 334 20 549 924 10 0 315 +686 241 205 30 348 715 10 0 961 +687 18 24 32 2499 2648 10 0 145 +688 57 183 -8 4421 4501 10 879 0 +689 59 457 -20 1241 1553 10 845 0 +690 442 243 10 1068 1361 10 0 738 +691 402 281 20 874 1246 10 0 24 +692 445 237 -20 733 990 10 215 0 +693 441 273 20 986 1392 10 0 491 +694 31 175 24 958 1135 10 0 156 +695 234 202 10 290 467 10 0 568 +696 52 303 25 1809 1840 10 0 128 +697 167 445 -10 5539 5878 10 203 0 +698 179 286 -10 1169 1680 10 917 0 +699 269 48 20 999 1365 10 0 981 +700 165 59 -23 3758 3904 10 663 0 +701 461 8 20 1426 1647 10 0 320 +702 421 415 -8 924 1078 10 724 0 +703 59 459 -17 1186 1425 10 147 0 +704 24 492 -10 1680 2135 10 550 0 +705 55 449 20 1011 1217 10 0 255 +706 224 192 10 63 654 10 0 346 +707 444 269 20 888 1100 10 0 123 +708 491 20 -20 1526 1742 10 325 0 +709 313 126 10 803 1262 10 0 42 +710 283 438 -10 941 1031 10 932 0 +711 352 241 -14 3027 3432 10 644 0 +712 398 476 -30 1624 1841 10 639 0 +713 442 247 -10 819 1230 10 532 0 +714 217 207 -14 5535 5645 10 564 0 +715 233 87 18 938 1203 10 0 810 +716 479 127 20 1108 1171 10 0 620 +717 6 53 8 2404 2411 10 0 872 +718 478 300 12 3459 3778 10 0 447 +719 378 493 30 1166 1209 10 0 72 +720 303 78 12 680 759 10 0 231 +721 344 62 -20 1327 1565 10 553 0 +722 371 315 -12 4543 4904 10 631 0 +723 200 78 -10 3906 4155 10 31 0 +724 413 391 8 881 975 10 0 702 +725 415 216 10 722 809 10 0 91 +726 397 57 -14 5861 6067 10 226 0 +727 293 228 19 48 345 10 0 350 +728 0 297 10 1060 1403 10 0 421 +729 435 20 20 1570 1602 10 0 648 +730 195 111 -20 3998 4106 10 342 0 +731 417 218 10 920 1425 10 0 557 +732 340 54 10 933 1089 10 0 175 +733 132 57 -20 934 1142 10 947 0 +734 210 379 -30 2704 3086 10 782 0 +735 228 260 -13 6297 6667 10 547 0 +736 399 104 -20 1096 1342 10 861 0 +737 95 277 20 1075 1240 10 0 511 +738 360 284 -10 2611 2842 10 690 0 +739 53 466 -10 1200 1600 10 157 0 +740 112 465 -12 1144 1369 10 920 0 +741 313 391 5 450 867 10 0 297 +742 93 235 10 844 1246 10 0 569 +743 125 32 -24 908 1287 10 748 0 +744 215 282 -8 5795 5849 10 90 0 +745 224 320 36 5091 5298 10 0 427 +746 134 428 20 1141 1444 10 0 442 +747 26 490 -32 1753 2165 10 812 0 +748 44 115 24 698 1272 10 0 743 +749 438 127 -2 3629 4018 10 249 0 +750 239 15 -10 2260 2691 10 846 0 +751 342 54 20 1040 1079 10 0 844 +752 109 463 30 1298 1491 10 0 425 +753 199 187 -40 544 589 10 5 0 +754 201 188 10 354 876 10 0 930 +755 399 301 30 546 1128 10 0 826 +756 484 171 -22 1214 1252 10 784 0 +757 272 234 -14 6289 6554 10 531 0 +758 380 350 -21 3422 3629 10 677 0 +759 140 108 29 4296 4394 10 0 158 +760 228 199 10 412 783 10 0 635 +761 245 461 -7 2497 2818 10 475 0 +762 305 107 20 740 1182 10 0 274 +763 231 195 20 443 551 10 0 583 +764 450 265 10 744 1107 10 0 573 +765 273 149 14 6032 6110 10 0 115 +766 12 358 -40 4917 4997 10 803 0 +767 315 121 -30 784 960 10 787 0 +768 420 213 -14 807 942 10 38 0 +769 331 134 -30 4375 4735 10 405 0 +770 84 377 -29 3577 3953 10 505 0 +771 320 280 10 382 418 10 0 224 +772 89 185 16 2326 2593 10 0 536 +773 472 481 20 1239 1494 10 0 3 +774 422 420 20 1000 1221 10 0 649 +775 475 267 -10 2930 3427 10 990 0 +776 470 125 20 861 1164 10 0 150 +777 435 268 -10 1238 1375 10 352 0 +778 409 155 19 596 886 10 0 814 +779 243 248 30 55 257 10 0 395 +780 488 96 22 3991 4659 10 0 196 +781 341 72 -30 3109 3450 10 636 0 +782 58 449 30 1178 1843 10 0 734 +783 16 460 -1 1573 1833 10 538 0 +784 480 136 22 901 1152 10 0 756 +785 162 388 11 4532 4597 10 0 911 +786 47 208 -10 832 1099 10 955 0 +787 324 127 30 529 619 10 0 767 +788 87 96 30 1056 1319 10 0 563 +789 140 137 -20 2215 2462 10 212 0 +790 314 205 -22 6032 6302 10 478 0 +791 96 346 26 647 954 10 0 381 +792 321 280 30 228 484 10 0 894 +793 245 251 10 8 113 10 0 830 +794 436 295 -20 1919 2428 10 512 0 +795 274 261 -17 6568 7207 10 912 0 +796 271 128 -20 1339 1546 10 528 0 +797 275 45 20 909 1008 10 0 441 +798 422 409 10 818 1056 10 0 136 +799 146 188 -21 4953 5046 10 566 0 +800 93 96 -17 847 1077 10 27 0 +801 409 255 -18 5984 6316 10 520 0 +802 449 428 25 4907 5188 10 0 178 +803 90 285 40 1101 1228 10 0 766 +804 415 95 -9 4615 4918 10 390 0 +805 88 287 30 961 1266 10 0 513 +806 379 196 20 740 933 10 0 611 +807 368 452 -20 2696 2784 10 480 0 +808 202 186 20 584 745 10 0 900 +809 435 11 40 1158 1340 10 0 985 +810 269 46 -18 1079 1189 10 715 0 +811 7 292 10 940 1033 10 0 496 +812 44 496 32 1625 1709 10 0 747 +813 478 99 10 1077 1533 10 0 380 +814 391 99 -19 596 1057 10 778 0 +815 132 477 -20 1363 1375 10 822 0 +816 24 65 10 1415 1628 10 0 506 +817 130 247 17 333 627 10 0 857 +818 133 273 20 231 723 10 0 103 +819 347 62 10 1126 1661 10 0 403 +820 404 140 -10 4984 5206 10 75 0 +821 416 420 -30 1150 1287 10 402 0 +822 67 335 20 878 1177 10 0 815 +823 92 270 -20 922 1253 10 500 0 +824 411 95 -10 827 1236 10 68 0 +825 132 479 -10 731 1329 10 161 0 +826 366 334 -30 1491 1911 10 755 0 +827 125 39 -18 792 1170 10 305 0 +828 419 422 -20 1055 1274 10 105 0 +829 460 2 20 1318 1626 10 0 965 +830 67 334 -10 734 1232 10 793 0 +831 448 414 23 4871 5031 10 0 460 +832 46 163 -20 3724 3804 10 945 0 +833 77 465 11 946 1261 10 0 268 +834 284 319 17 3152 3502 10 0 541 +835 102 422 23 784 1146 10 0 609 +836 240 34 -20 6068 6528 10 336 0 +837 141 428 20 632 1038 10 0 847 +838 204 269 30 93 305 10 0 587 +839 144 439 30 1065 1224 10 0 497 +840 470 417 -20 2891 3123 10 499 0 +841 404 103 20 920 1132 10 0 278 +842 5 281 -21 5513 5579 10 970 0 +843 487 320 -28 3288 3693 10 482 0 +844 398 23 -20 988 1179 10 751 0 +845 90 296 20 587 745 10 0 689 +846 386 13 10 1148 1668 10 0 750 +847 115 465 -20 991 1227 10 837 0 +848 473 475 -20 1640 1818 10 56 0 +849 275 42 -20 750 1271 10 386 0 +850 286 356 30 437 459 10 0 999 +851 15 69 -20 1022 1431 10 479 0 +852 267 44 -23 878 1289 10 578 0 +853 243 399 10 895 1103 10 0 120 +854 390 249 -10 2311 2462 10 909 0 +855 210 391 30 539 714 10 0 657 +856 433 15 20 1077 1306 10 0 454 +857 24 259 -17 1495 1586 10 817 0 +858 12 463 -18 1468 1538 10 276 0 +859 237 213 10 441 855 10 0 408 +860 182 480 -20 1450 1589 10 976 0 +861 409 88 20 955 1327 10 0 736 +862 244 368 25 1675 1757 10 0 551 +863 381 328 -15 2700 3159 10 934 0 +864 213 185 21 137 461 10 0 339 +865 482 141 14 3839 4367 10 0 661 +866 319 124 20 684 860 10 0 209 +867 141 431 -20 785 1079 10 311 0 +868 198 264 -10 306 936 10 647 0 +869 69 334 30 691 1078 10 0 387 +870 299 98 30 648 806 10 0 365 +871 240 250 10 10 451 10 0 307 +872 199 203 -8 5813 5966 10 717 0 +873 459 17 20 1490 1921 10 0 571 +874 423 217 -20 876 1178 10 74 0 +875 477 179 -20 773 1129 10 629 0 +876 213 397 10 837 1022 10 0 119 +877 405 187 -16 4932 5193 10 669 0 +878 269 402 20 720 1022 10 0 680 +879 53 204 8 4080 4480 10 0 688 +880 13 394 -20 1412 1689 10 304 0 +881 15 68 -10 979 1563 10 640 0 +882 56 268 -12 4146 4486 10 641 0 +883 360 184 10 894 998 10 0 445 +884 307 102 40 831 967 10 0 51 +885 130 57 -26 955 1024 10 373 0 +886 250 328 24 907 1202 10 0 37 +887 91 231 -20 709 1012 10 453 0 +888 479 176 20 989 1023 10 0 890 +889 420 224 -13 1713 1839 10 227 0 +890 461 182 -20 2359 2793 10 888 0 +891 418 218 -20 973 1284 10 426 0 +892 419 418 10 911 1200 10 0 598 +893 336 493 -20 5941 6123 10 362 0 +894 389 300 -30 502 848 10 792 0 +895 92 76 -20 4328 4903 10 124 0 +896 476 102 20 1244 1566 10 0 953 +897 418 399 -10 1641 1981 10 55 0 +898 109 56 27 890 1029 10 0 28 +899 13 465 -15 3036 3272 10 626 0 +900 92 232 -20 568 966 10 808 0 +901 394 47 5 1043 1580 10 0 435 +902 16 287 12 812 1475 10 0 313 +903 399 102 -9 931 1326 10 477 0 +904 143 158 -25 560 660 10 388 0 +905 18 484 -10 1266 1454 10 664 0 +906 250 411 30 699 924 10 0 524 +907 19 273 -20 4049 4203 10 627 0 +908 365 28 9 933 1332 10 0 57 +909 387 297 10 554 687 10 0 854 +910 433 447 -25 3145 3328 10 409 0 +911 214 274 -11 5288 5784 10 785 0 +912 489 338 17 5469 5828 10 0 795 +913 130 494 6 2901 3289 10 0 302 +914 23 67 -10 1591 1642 10 916 0 +915 374 489 -20 802 1352 10 659 0 +916 126 30 10 1029 1265 10 0 914 +917 112 467 10 1040 1287 10 0 698 +918 489 274 -10 2090 2300 10 473 0 +919 61 214 -20 1103 1751 10 160 0 +920 166 440 12 761 900 10 0 740 +921 56 75 -23 5526 6095 10 50 0 +922 210 276 5 51 331 10 0 984 +923 80 286 10 884 1027 10 0 113 +924 17 459 -10 1682 1814 10 618 0 +925 66 448 10 779 1383 10 0 76 +926 351 128 15 4970 5175 10 0 214 +927 352 176 20 273 736 10 0 316 +928 490 286 29 2021 2276 10 0 184 +929 247 219 17 31 248 10 0 261 +930 86 268 -10 737 1121 10 754 0 +931 398 329 17 297 1045 10 0 36 +932 272 402 10 535 861 10 0 710 +933 317 123 20 595 1046 10 0 612 +934 408 318 15 2547 2718 10 0 863 +935 66 31 25 4039 4469 10 0 294 +936 425 448 9 3072 3403 10 0 141 +937 35 304 -8 927 933 10 407 0 +938 471 94 -20 3752 4358 10 267 0 +939 470 473 10 1667 1900 10 0 58 +940 224 56 -40 4480 5131 10 172 0 +941 343 47 20 906 1430 10 0 195 +942 52 18 28 3370 3605 10 0 420 +943 16 68 20 1246 1384 10 0 423 +944 195 185 20 388 629 10 0 596 +945 92 236 20 1020 1161 10 0 832 +946 76 462 18 3612 4156 10 0 590 +947 124 56 20 808 1043 10 0 733 +948 481 454 14 1159 1524 10 0 70 +949 477 483 20 1201 1846 10 0 213 +950 481 124 10 1004 1383 10 0 345 +951 389 156 -20 2729 3115 10 665 0 +952 384 16 -10 1263 1662 10 142 0 +953 492 34 -20 3102 3503 10 896 0 +954 371 200 10 942 973 10 0 638 +955 153 235 10 128 658 10 0 786 +956 428 202 -10 3290 4061 10 969 0 +957 257 391 -10 6432 6752 10 45 0 +958 421 218 10 889 1264 10 0 521 +959 206 186 10 699 921 10 0 182 +960 393 301 30 648 897 10 0 155 +961 204 187 -30 670 852 10 686 0 +962 468 475 10 1182 1325 10 0 290 +963 477 122 10 1085 1675 10 0 192 +964 100 66 -10 5437 5881 10 286 0 +965 489 27 -20 1697 1793 10 829 0 +966 12 451 20 1036 1457 0 0 1007 +967 197 270 30 422 463 10 0 656 +968 311 422 -10 3905 4118 10 303 0 +969 489 17 10 1345 1815 10 0 956 +970 13 214 21 5329 5620 10 0 842 +971 440 247 20 975 1169 10 0 678 +972 28 467 34 5219 5641 10 0 246 +973 388 325 -30 1054 1172 10 66 0 +974 270 401 -20 563 736 10 327 0 +975 5 445 30 1095 1513 10 0 625 +976 198 271 20 142 653 10 0 860 +977 480 131 -10 2590 3031 10 263 0 +978 437 98 -29 4457 4573 10 412 0 +979 131 246 17 3262 3514 10 0 43 +980 49 437 -26 1640 1899 10 244 0 +981 270 49 -20 1219 1237 10 699 0 +982 337 41 -18 3875 4263 10 558 0 +983 318 280 20 285 611 10 0 416 +984 154 392 -5 652 720 10 922 0 +985 493 111 -40 2141 2307 10 809 0 +986 399 450 -20 1374 1616 10 545 0 +987 67 452 30 840 1436 10 0 280 +988 34 239 16 690 1181 10 0 535 +989 343 276 15 224 548 10 0 481 +990 393 12 10 1004 1589 10 0 775 +991 236 247 20 184 356 10 0 645 +992 340 291 22 1910 1974 10 0 494 +993 3 292 20 972 1192 10 0 173 +994 209 68 27 6181 6484 10 0 317 +995 18 225 -38 2818 2833 10 581 0 +996 147 435 -20 943 1138 10 679 0 +997 335 99 25 4803 5064 10 0 291 +998 485 24 20 1269 1421 10 0 110 +999 470 475 -30 1115 1488 10 850 0 +1000 341 58 10 688 1222 10 0 565 +1001 35 303 -20 692 1079 10 469 0 +1002 120 261 -5 3134 3332 10 562 0 +1003 306 229 -10 5318 5365 10 527 0 +1004 377 432 -20 3344 3428 10 39 0 +1005 488 26 -30 1734 1848 10 108 0 +1006 1 101 -8 4853 5326 10 438 0 +1007 12 451 -20 1036 1457 10 966 0 +1008 287 397 -12 2144 2490 10 217 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC2106.txt b/jsprit-instances/instances/lilim/1000/LRC2106.txt new file mode 100644 index 00000000..627cf859 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC2106.txt @@ -0,0 +1,1010 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 -10 3508 3748 10 582 0 +2 214 394 10 862 1102 10 0 752 +3 476 483 -20 1359 1599 10 341 0 +4 352 487 -20 3547 3787 10 211 0 +5 230 197 40 426 666 10 0 735 +6 175 239 -8 183 423 10 407 0 +7 133 202 33 1782 2022 10 0 789 +8 328 458 17 3011 3251 10 0 631 +9 25 499 -40 1720 1960 10 279 0 +10 226 423 15 728 968 10 0 473 +11 313 282 20 594 834 10 0 520 +12 60 454 -11 1329 1569 10 833 0 +13 239 486 -11 5868 6108 10 785 0 +14 102 264 10 475 715 10 0 930 +15 408 452 10 1028 1268 10 0 658 +16 451 62 5 1069 1309 10 0 765 +17 203 390 40 575 815 10 0 509 +18 92 233 10 835 1075 10 0 319 +19 7 300 30 1319 1559 10 0 359 +20 409 90 20 973 1213 10 0 391 +21 307 108 -23 890 1130 10 578 0 +22 347 54 10 1120 1360 10 0 158 +23 406 87 10 1192 1432 10 0 652 +24 371 332 -5 2058 2298 10 826 0 +25 116 466 -20 944 1184 10 220 0 +26 441 265 40 729 969 10 0 756 +27 130 140 -12 716 956 10 904 0 +28 80 117 -30 3237 3477 10 914 0 +29 421 387 -7 3145 3385 10 475 0 +30 83 300 26 1939 2179 10 0 168 +31 136 52 -10 1111 1351 10 293 0 +32 18 462 -20 1531 1771 10 358 0 +33 390 120 24 3957 4197 10 0 529 +34 188 119 -27 3839 4079 10 700 0 +35 467 114 -14 1444 1684 10 594 0 +36 440 292 -20 3700 3940 10 548 0 +37 268 400 20 913 1153 10 0 229 +38 391 202 -19 476 716 10 114 0 +39 377 432 -10 3266 3506 10 754 0 +40 80 290 -20 730 970 10 77 0 +41 439 15 -30 1313 1553 10 676 0 +42 307 52 -10 3622 3862 10 278 0 +43 111 192 11 4738 4978 10 0 536 +44 131 56 10 963 1203 10 0 204 +45 88 286 -10 950 1190 10 923 0 +46 69 414 6 4993 5233 10 0 140 +47 41 232 16 761 1001 10 0 653 +48 323 77 36 5560 5800 10 0 115 +49 340 416 -10 1224 1464 10 932 0 +50 86 199 -17 1051 1291 10 817 0 +51 314 124 20 864 1104 10 0 614 +52 375 191 30 607 847 10 0 360 +53 226 175 -27 6715 6955 10 994 0 +54 242 106 -19 5014 5254 10 94 0 +55 417 417 -40 1268 1508 10 225 0 +56 419 459 -20 1205 1445 10 828 0 +57 389 11 -30 1233 1473 10 117 0 +58 450 416 25 2247 2487 10 0 72 +59 246 255 10 390 630 10 0 766 +60 71 333 -20 715 955 10 334 0 +61 105 474 27 1823 2063 10 0 641 +62 20 489 10 1473 1713 10 0 182 +63 388 331 20 520 760 10 0 518 +64 92 259 4 1538 1778 10 0 412 +65 200 261 10 606 846 10 0 868 +66 400 288 30 499 739 10 0 81 +67 299 285 -10 4955 5195 10 148 0 +68 378 199 -20 769 1009 10 514 0 +69 325 147 -11 4687 4927 10 131 0 +70 421 386 29 3237 3477 10 0 224 +71 404 447 20 880 1120 10 0 499 +72 412 478 -25 3779 4019 10 58 0 +73 26 67 15 5207 5447 10 0 964 +74 358 183 -20 875 1115 10 350 0 +75 30 302 -20 1006 1246 10 830 0 +76 176 470 -10 2127 2367 10 917 0 +77 96 270 20 589 829 10 0 40 +78 243 408 15 5675 5915 10 0 218 +79 60 29 -18 5391 5631 10 506 0 +80 34 169 11 1878 2118 10 0 221 +81 407 280 -30 774 1014 10 66 0 +82 277 403 -26 639 879 10 88 0 +83 498 456 -25 5564 5804 10 662 0 +84 384 491 -20 1331 1571 10 986 0 +85 355 174 -30 2801 3041 10 351 0 +86 97 288 -12 5076 5316 10 163 0 +87 316 284 20 439 679 10 0 890 +88 334 403 26 578 818 10 0 82 +89 415 223 -19 1159 1399 10 727 0 +90 230 320 -20 4708 4948 10 268 0 +91 432 199 7 2494 2734 10 0 711 +92 92 18 8 4437 4677 10 0 410 +93 273 300 30 100 340 10 0 850 +94 269 112 19 4991 5231 10 0 54 +95 429 389 -20 1636 1876 10 472 0 +96 371 71 -20 1087 1327 10 751 0 +97 5 297 -10 1265 1505 10 645 0 +98 414 378 23 1919 2159 10 0 136 +99 38 15 -20 4304 4544 10 943 0 +100 2 295 -10 1163 1403 10 307 0 +101 237 254 20 273 513 10 0 511 +102 54 445 10 1172 1412 10 0 366 +103 382 110 24 4390 4630 10 0 769 +104 438 488 18 1249 1489 10 0 432 +105 395 331 20 806 1046 10 0 918 +106 230 487 -29 4458 4698 10 968 0 +107 249 407 -10 635 875 10 238 0 +108 488 26 -40 1671 1911 10 809 0 +109 151 81 -8 6172 6412 10 438 0 +110 483 14 10 1393 1633 10 0 580 +111 0 422 -30 3224 3464 10 318 0 +112 429 67 16 2869 3109 10 0 470 +113 195 464 -32 6105 6345 10 812 0 +114 356 256 19 305 545 10 0 38 +115 264 180 -36 6663 6903 10 48 0 +116 94 235 20 547 787 10 0 408 +117 474 96 30 967 1207 10 0 57 +118 268 52 10 1162 1402 10 0 879 +119 44 440 -8 3095 3335 10 383 0 +120 7 382 27 3022 3262 10 0 434 +121 459 53 -10 4429 4669 10 954 0 +122 491 25 -20 1574 1814 10 682 0 +123 439 243 -30 1194 1434 10 216 0 +124 210 185 -20 185 425 10 206 0 +125 150 68 -20 1631 1871 10 137 0 +126 201 270 10 132 372 10 0 304 +127 0 188 -30 3668 3908 10 981 0 +128 103 464 -10 5032 5272 10 747 0 +129 325 56 13 3126 3366 10 0 714 +130 44 344 12 4258 4498 10 0 295 +131 418 75 11 1732 1972 10 0 69 +132 472 57 -7 5119 5359 10 775 0 +133 460 328 13 816 1056 10 0 939 +134 89 270 10 754 994 10 0 805 +135 374 190 -25 513 753 10 275 0 +136 463 253 -23 4128 4368 10 98 0 +137 97 93 20 902 1142 10 0 125 +138 163 472 -11 2554 2794 10 825 0 +139 29 336 22 1266 1506 10 0 583 +140 84 453 -6 4832 5072 10 46 0 +141 294 421 -20 6242 6482 10 893 0 +142 343 62 -20 1370 1610 10 267 0 +143 371 193 20 415 655 10 0 824 +144 142 372 18 532 772 10 0 550 +145 66 88 -10 3259 3499 10 530 0 +146 395 332 10 762 1002 10 0 491 +147 93 413 17 785 1025 10 0 624 +148 267 394 10 977 1217 10 0 67 +149 249 258 30 447 687 10 0 777 +150 472 129 10 950 1190 10 0 646 +151 87 3 -28 5672 5912 10 942 0 +152 62 326 -29 1085 1325 10 668 0 +153 212 186 -19 6826 7066 10 540 0 +154 241 402 -10 4039 4279 10 876 0 +155 439 266 10 681 921 10 0 379 +156 79 80 -30 5468 5708 10 563 0 +157 62 453 10 1119 1359 10 0 634 +158 188 151 -10 5127 5367 10 22 0 +159 386 154 -18 4344 4584 10 502 0 +160 38 301 20 1122 1362 10 0 551 +161 192 265 -20 437 677 10 464 0 +162 371 192 30 459 699 10 0 778 +163 64 294 12 4345 4585 10 0 86 +164 381 494 -20 1274 1514 10 404 0 +165 437 12 20 1258 1498 10 0 365 +166 186 135 24 2811 3051 10 0 749 +167 459 10 10 1280 1520 10 0 288 +168 175 422 -26 5726 5966 10 30 0 +169 274 48 -30 785 1025 10 787 0 +170 488 173 -20 1055 1295 10 983 0 +171 398 97 10 776 1016 10 0 455 +172 385 17 -10 3175 3415 10 675 0 +173 180 283 -10 2915 3155 10 424 0 +174 71 12 -20 1112 1352 10 947 0 +175 343 49 10 1000 1240 10 0 844 +176 248 251 20 2 242 10 0 642 +177 7 194 29 3745 3985 10 0 433 +178 322 290 -12 5856 6096 10 648 0 +179 410 399 -15 875 1115 10 989 0 +180 398 103 -20 1054 1294 10 814 0 +181 385 285 -15 3412 3652 10 758 0 +182 179 497 -10 5584 5824 10 62 0 +183 464 13 -20 1479 1719 10 337 0 +184 492 335 -9 3253 3493 10 649 0 +185 27 464 21 5104 5344 10 0 697 +186 231 29 -25 4845 5085 10 584 0 +187 157 38 -26 4131 4371 10 632 0 +188 439 268 10 1131 1371 10 0 284 +189 149 214 7 1868 2108 10 0 400 +190 187 73 18 1108 1348 10 0 832 +191 429 169 -10 3551 3791 10 742 0 +192 350 199 21 4746 4986 10 0 214 +193 60 231 -8 4044 4284 10 698 0 +194 448 404 15 2336 2576 0 0 1002 +195 481 20 20 1328 1568 10 0 969 +196 436 25 -30 5069 5309 10 938 0 +197 111 459 -10 1375 1615 10 419 0 +198 389 17 10 1403 1643 10 0 403 +199 148 208 -10 2046 2286 10 900 0 +200 475 477 -20 1558 1798 10 949 0 +201 390 325 30 945 1185 10 0 603 +202 346 354 -10 3210 3450 10 853 0 +203 91 266 -30 870 1110 10 967 0 +204 17 65 -10 1247 1487 10 44 0 +205 391 112 -40 3941 4181 10 637 0 +206 224 203 20 95 335 10 0 124 +207 426 231 -20 4054 4294 10 545 0 +208 260 472 33 4084 4324 10 0 622 +209 265 0 -20 3524 3764 10 629 0 +210 391 293 20 843 1083 10 0 691 +211 411 421 20 1200 1440 10 0 4 +212 132 30 20 1243 1483 10 0 259 +213 475 480 30 1458 1698 10 0 332 +214 286 244 -21 5076 5316 10 192 0 +215 436 237 -33 626 866 10 363 0 +216 402 284 30 598 838 10 0 123 +217 287 397 -10 2197 2437 10 740 0 +218 272 420 -15 5483 5723 10 78 0 +219 477 120 -20 1308 1548 10 553 0 +220 145 434 20 872 1112 10 0 25 +221 33 286 -11 6124 6364 10 80 0 +222 370 262 15 4338 4578 10 0 296 +223 393 20 20 1503 1743 10 0 654 +224 330 308 -29 4622 4862 10 70 0 +225 246 398 40 472 712 10 0 55 +226 482 184 14 4367 4607 10 0 795 +227 451 305 13 714 954 10 0 630 +228 226 316 21 161 401 10 0 628 +229 110 459 -20 1331 1571 10 37 0 +230 244 250 10 6 246 10 0 871 +231 458 16 -20 1132 1372 10 856 0 +232 390 34 -17 4181 4421 10 571 0 +233 423 214 -10 807 1047 10 522 0 +234 219 215 32 67 307 10 0 788 +235 326 118 10 531 771 10 0 561 +236 365 74 -12 3334 3574 10 720 0 +237 331 356 -20 2787 3027 10 448 0 +238 210 398 10 757 997 10 0 107 +239 403 93 10 1303 1543 10 0 750 +240 248 404 30 538 778 10 0 485 +241 65 62 -25 3846 4086 10 388 0 +242 460 13 20 1227 1467 10 0 320 +243 0 293 -12 1055 1295 10 902 0 +244 211 248 -10 39 279 10 252 0 +245 484 174 10 998 1238 10 0 446 +246 175 352 -20 6600 6840 10 387 0 +247 455 168 -10 3407 3647 10 958 0 +248 224 191 20 264 504 10 0 940 +249 439 156 2 2043 2283 10 0 951 +250 434 359 -11 5509 5749 10 460 0 +251 118 314 -20 1290 1530 10 449 0 +252 234 246 10 199 439 10 0 244 +253 406 450 -20 977 1217 10 544 0 +254 75 118 -20 1576 1816 10 933 0 +255 115 395 -20 3201 3441 10 705 0 +256 329 456 19 936 1176 10 0 681 +257 218 403 15 5217 5457 10 0 368 +258 149 341 -10 1556 1796 10 647 0 +259 253 74 -20 5340 5580 10 212 0 +260 436 241 -9 1249 1489 10 471 0 +261 238 203 10 315 555 10 0 686 +262 405 455 -10 1303 1543 10 431 0 +263 485 27 -20 1724 1964 10 873 0 +264 323 118 20 583 823 10 0 638 +265 330 371 -10 2174 2414 10 585 0 +266 25 65 -30 1445 1685 10 457 0 +267 406 96 20 803 1043 10 0 142 +268 49 451 20 1060 1300 10 0 90 +269 307 249 -29 5446 5686 10 928 0 +270 178 135 -10 5995 6235 10 819 0 +271 299 353 34 336 576 10 0 436 +272 236 213 20 39 279 10 0 612 +273 355 177 20 437 677 10 0 854 +274 394 23 20 1555 1795 10 0 429 +275 306 235 25 112 352 10 0 135 +276 90 477 18 991 1231 10 0 357 +277 379 486 -21 2627 2867 10 378 0 +278 435 16 10 1410 1650 10 0 42 +279 8 497 40 1571 1811 10 0 9 +280 150 484 -30 2441 2681 10 782 0 +281 213 399 18 876 1116 10 0 466 +282 391 18 10 1451 1691 10 0 406 +283 111 392 -10 4616 4856 10 606 0 +284 330 281 -10 5262 5502 10 188 0 +285 344 203 14 609 849 10 0 841 +286 91 235 -20 1016 1256 10 627 0 +287 346 60 10 1225 1465 10 0 490 +288 483 27 -10 1772 2012 10 167 0 +289 382 498 -20 1177 1417 10 753 0 +290 457 492 -30 1972 2212 10 999 0 +291 291 213 23 4971 5211 10 0 384 +292 154 374 -10 3688 3928 10 925 0 +293 225 196 10 163 403 10 0 31 +294 94 40 -10 4212 4452 10 851 0 +295 0 356 -12 4285 4525 10 130 0 +296 297 283 -15 5338 5578 10 222 0 +297 371 423 10 724 964 10 0 398 +298 417 217 30 694 934 10 0 515 +299 500 228 -10 3067 3307 10 883 0 +300 412 214 10 544 784 10 0 692 +301 442 289 25 704 944 10 0 724 +302 157 269 -20 6245 6485 10 763 0 +303 440 241 -10 1145 1385 10 573 0 +304 100 266 -10 526 766 10 126 0 +305 111 178 18 506 746 10 0 748 +306 91 101 10 1133 1373 10 0 310 +307 25 307 10 938 1178 10 0 100 +308 135 400 20 1134 1374 10 0 815 +309 58 458 10 1231 1471 10 0 745 +310 133 26 -10 1187 1427 10 306 0 +311 211 386 20 446 686 10 0 657 +312 94 97 20 796 1036 10 0 881 +313 30 155 -20 5062 5302 10 762 0 +314 208 184 20 234 474 10 0 988 +315 394 333 20 717 957 10 0 577 +316 355 180 30 489 729 10 0 874 +317 241 180 -28 6718 6958 10 411 0 +318 21 485 30 1293 1533 10 0 111 +319 80 251 -10 1154 1394 10 18 0 +320 476 61 -20 1735 1975 10 242 0 +321 406 94 10 851 1091 10 0 523 +322 364 71 -20 5334 5574 10 716 0 +323 418 221 10 1105 1345 10 0 934 +324 274 441 12 2718 2958 10 0 597 +325 304 97 20 667 907 10 0 797 +326 297 102 10 549 789 10 0 810 +327 250 405 -15 586 826 10 370 0 +328 111 463 20 1226 1466 10 0 465 +329 408 279 20 820 1060 10 0 707 +330 263 418 -10 1054 1294 10 549 0 +331 480 119 -20 2454 2694 10 701 0 +332 420 383 -30 3868 4108 10 213 0 +333 142 14 -4 3281 3521 10 526 0 +334 73 328 20 654 894 10 0 60 +335 50 438 20 1287 1527 10 0 586 +336 441 7 20 1506 1746 10 0 546 +337 462 14 20 1528 1768 10 0 183 +338 360 294 -18 5611 5851 10 541 0 +339 58 39 12 4592 4832 10 0 921 +340 58 391 -27 3469 3709 10 513 0 +341 410 285 20 711 951 10 0 3 +342 96 97 20 748 988 10 0 743 +343 21 64 -26 1349 1589 10 373 0 +344 238 210 30 475 715 0 0 1001 +345 479 121 10 1171 1411 10 0 781 +346 200 178 20 314 554 10 0 525 +347 216 341 -20 2556 2796 10 845 0 +348 48 437 -10 3155 3395 10 924 0 +349 200 270 20 176 416 10 0 367 +350 357 181 20 538 778 10 0 74 +351 476 174 30 1237 1477 10 0 85 +352 400 286 10 547 787 10 0 486 +353 351 481 -30 1227 1467 10 719 0 +354 270 400 10 485 725 10 0 680 +355 95 234 -10 593 833 10 955 0 +356 128 113 -20 1391 1631 10 699 0 +357 133 455 -18 3172 3412 10 276 0 +358 16 463 20 1439 1679 10 0 32 +359 59 388 -30 2591 2831 10 19 0 +360 376 190 -30 561 801 10 52 0 +361 481 122 30 1122 1362 10 0 558 +362 266 405 20 808 1048 10 0 839 +363 374 232 33 381 621 10 0 215 +364 398 20 20 1016 1256 10 0 377 +365 481 26 -20 1167 1407 10 165 0 +366 63 444 -10 1459 1699 10 102 0 +367 89 290 -20 610 850 10 349 0 +368 246 314 -15 5721 5961 10 257 0 +369 40 304 16 4519 4759 10 0 744 +370 262 369 15 457 697 10 0 327 +371 323 29 7 4490 4730 0 0 1004 +372 89 65 16 2821 3061 10 0 415 +373 144 35 26 839 1079 10 0 343 +374 200 265 10 550 790 10 0 791 +375 436 264 -10 626 866 10 771 0 +376 15 457 -30 1234 1474 10 975 0 +377 397 20 -20 1060 1300 10 364 0 +378 328 491 21 2653 2893 10 0 277 +379 399 175 -10 2928 3168 10 155 0 +380 432 2 20 1806 2046 10 0 643 +381 63 336 -5 1005 1245 10 922 0 +382 6 296 -10 1219 1459 10 421 0 +383 146 376 8 877 1117 10 0 119 +384 295 247 -23 5154 5394 10 291 0 +385 235 33 -20 5288 5528 10 479 0 +386 233 204 -10 157 397 10 660 0 +387 142 360 20 6068 6308 10 0 246 +388 177 156 25 609 849 10 0 241 +389 315 287 -30 532 772 10 402 0 +390 452 172 9 2373 2613 10 0 677 +391 263 153 -20 1590 1830 10 20 0 +392 493 493 -29 3366 3606 10 651 0 +393 320 283 30 382 622 10 0 960 +394 64 5 -15 4456 4696 10 559 0 +395 95 235 -20 503 743 10 991 0 +396 203 211 -20 5166 5406 10 896 0 +397 16 497 -10 1643 1883 10 905 0 +398 348 348 -10 3679 3919 10 297 0 +399 485 104 -3 3118 3358 10 454 0 +400 330 147 -7 3334 3574 10 189 0 +401 443 237 20 694 934 10 0 901 +402 316 286 30 487 727 10 0 389 +403 335 46 -10 5307 5547 10 198 0 +404 381 495 20 1230 1470 10 0 164 +405 364 173 30 661 901 10 0 678 +406 267 162 -10 5737 5977 10 282 0 +407 214 245 8 36 276 10 0 6 +408 92 234 -20 879 1119 10 116 0 +409 347 459 25 1858 2098 10 0 807 +410 30 7 -8 4694 4934 10 92 0 +411 120 37 28 3041 3281 10 0 317 +412 397 153 -4 3470 3710 10 64 0 +413 210 29 -20 4143 4383 10 944 0 +414 87 285 -20 904 1144 10 976 0 +415 132 32 -16 3078 3318 10 372 0 +416 390 294 -17 889 1129 10 931 0 +417 67 451 -31 4802 5042 10 899 0 +418 24 68 -20 1598 1838 10 572 0 +419 146 439 10 977 1217 10 0 197 +420 209 212 -20 6051 6291 10 872 0 +421 6 292 10 910 1150 10 0 382 +422 18 63 -40 1296 1536 10 885 0 +423 149 98 4 4600 4840 10 0 895 +424 91 268 10 918 1158 10 0 173 +425 103 177 -25 2446 2686 10 497 0 +426 367 178 20 661 901 10 0 600 +427 225 269 -22 5023 5263 10 484 0 +428 443 246 -20 859 1099 10 483 0 +429 306 42 -20 1847 2087 10 274 0 +430 374 306 -6 3916 4156 10 498 0 +431 413 421 10 1152 1392 10 0 262 +432 470 405 -18 3643 3883 10 104 0 +433 33 278 -29 5889 6129 10 177 0 +434 149 458 -27 4595 4835 10 120 0 +435 257 57 -21 4844 5084 10 864 0 +436 272 403 -34 699 939 10 271 0 +437 221 291 9 124 364 10 0 847 +438 1 101 8 4969 5209 10 0 109 +439 332 459 -20 1415 1655 10 808 0 +440 220 392 20 971 1211 10 0 834 +441 253 50 27 843 1083 10 0 445 +442 250 441 -8 2963 3203 10 761 0 +443 471 484 -10 1299 1539 10 671 0 +444 480 152 -10 4026 4266 10 731 0 +445 404 83 -27 1134 1374 10 441 0 +446 476 94 -10 1019 1259 10 245 0 +447 458 213 -23 4453 4693 10 667 0 +448 215 395 20 908 1148 10 0 237 +449 85 288 20 668 908 10 0 251 +450 179 75 -10 2900 3140 10 670 0 +451 228 287 21 52 292 10 0 867 +452 397 18 -10 1108 1348 10 1000 0 +453 238 204 20 359 599 10 0 710 +454 488 3 3 1542 1782 10 0 399 +455 407 88 -10 1238 1478 10 171 0 +456 459 14 20 1181 1421 10 0 965 +457 120 17 30 1056 1296 10 0 266 +458 235 316 -20 2563 2803 10 818 0 +459 370 382 11 3475 3715 10 0 722 +460 405 454 11 5152 5392 10 0 250 +461 17 458 -30 1672 1912 10 593 0 +462 43 135 31 827 1067 10 0 596 +463 318 497 -20 3355 3595 10 480 0 +464 199 268 20 225 465 10 0 161 +465 111 467 -20 1088 1328 10 328 0 +466 138 438 -18 1089 1329 10 281 0 +467 172 314 9 2122 2362 10 0 979 +468 494 468 31 1350 1590 10 0 910 +469 35 303 20 766 1006 10 0 505 +470 341 59 -16 3099 3339 10 112 0 +471 423 221 9 973 1213 10 0 260 +472 395 295 20 785 1025 10 0 95 +473 413 417 -15 1364 1604 10 10 0 +474 339 60 20 784 1024 10 0 941 +475 277 428 7 1901 2141 10 0 29 +476 176 199 -10 239 479 10 706 0 +477 265 240 9 18 258 10 0 865 +478 365 190 -17 5850 6090 10 726 0 +479 133 53 20 1058 1298 10 0 385 +480 387 488 20 1388 1628 10 0 463 +481 385 295 20 449 689 10 0 669 +482 491 369 -20 2858 3098 10 693 0 +483 445 273 20 971 1211 10 0 428 +484 195 273 22 118 358 10 0 427 +485 313 493 -30 4712 4952 10 240 0 +486 495 227 -10 1316 1556 10 352 0 +487 241 403 -10 821 1061 10 534 0 +488 30 72 -10 1666 1906 10 640 0 +489 21 487 10 1341 1581 10 0 783 +490 324 99 -10 1292 1532 10 287 0 +491 453 318 -10 1435 1675 10 146 0 +492 443 272 10 1020 1260 10 0 599 +493 447 184 27 1638 1878 10 0 527 +494 366 288 -20 2675 2915 10 891 0 +495 440 284 -11 3347 3587 10 794 0 +496 13 314 -30 915 1155 10 937 0 +497 72 227 25 2195 2435 10 0 425 +498 377 385 6 3405 3645 10 0 430 +499 477 478 -20 1509 1749 10 71 0 +500 204 185 20 593 833 10 0 915 +501 226 191 20 312 552 10 0 636 +502 330 138 18 4378 4618 10 0 159 +503 185 434 -30 2234 2474 10 689 0 +504 483 22 10 1276 1516 10 0 926 +505 71 282 -20 2507 2747 10 469 0 +506 60 5 18 4115 4355 10 0 79 +507 189 402 -30 2084 2324 10 609 0 +508 134 211 35 422 662 10 0 836 +509 146 313 -40 4721 4961 10 17 0 +510 21 146 -30 1887 2127 10 870 0 +511 37 281 -20 1913 2153 10 101 0 +512 416 417 -20 1312 1552 10 679 0 +513 44 311 27 1570 1810 10 0 340 +514 361 181 20 728 968 10 0 68 +515 444 242 -30 802 1042 10 298 0 +516 444 271 10 922 1162 10 0 764 +517 359 179 20 589 829 10 0 588 +518 388 334 -20 572 812 10 63 0 +519 401 164 -10 2425 2665 10 713 0 +520 499 316 -20 2427 2667 10 11 0 +521 399 106 20 1147 1387 10 0 730 +522 425 215 10 856 1096 10 0 233 +523 407 98 -10 754 994 10 321 0 +524 406 460 -25 2817 3057 10 712 0 +525 88 95 -20 1021 1261 10 346 0 +526 95 64 4 3004 3244 10 0 333 +527 306 229 -27 5221 5461 10 493 0 +528 273 55 -10 665 905 10 568 0 +529 384 149 -24 4729 4969 10 33 0 +530 122 35 10 921 1161 10 0 145 +531 308 199 -22 5973 6213 10 790 0 +532 390 301 -30 601 841 10 792 0 +533 300 108 -10 482 722 10 695 0 +534 267 400 10 869 1109 10 0 487 +535 8 300 10 1363 1603 10 0 569 +536 105 181 -11 6065 6305 10 43 0 +537 398 325 30 873 1113 10 0 755 +538 166 247 1 216 456 10 0 887 +539 140 431 -38 768 1008 10 581 0 +540 253 118 19 2129 2369 10 0 153 +541 359 246 18 5631 5871 10 0 338 +542 321 277 10 184 424 10 0 948 +543 168 59 6 1404 1644 10 0 772 +544 406 285 20 655 895 10 0 253 +545 391 334 20 664 904 10 0 207 +546 437 19 -20 3996 4236 10 336 0 +547 201 278 13 106 346 10 0 625 +548 435 267 20 1231 1471 10 0 36 +549 245 408 10 755 995 10 0 330 +550 16 462 -18 1483 1723 10 144 0 +551 107 374 -20 3597 3837 10 160 0 +552 477 97 10 1071 1311 10 0 846 +553 346 57 20 1173 1413 10 0 219 +554 14 459 -10 1283 1523 10 601 0 +555 102 6 -20 5774 6014 10 827 0 +556 359 287 24 340 580 10 0 592 +557 297 131 -10 4602 4842 10 963 0 +558 282 1 -30 4110 4350 10 361 0 +559 21 70 15 3025 3265 10 0 394 +560 440 244 10 1004 1244 10 0 674 +561 482 104 -10 3170 3410 10 235 0 +562 120 261 -12 3113 3353 10 734 0 +563 125 29 30 1073 1313 10 0 156 +564 292 32 -20 857 1097 10 852 0 +565 262 92 -10 2462 2702 10 736 0 +566 68 160 -8 4483 4723 10 995 0 +567 405 276 -20 877 1117 10 685 0 +568 277 50 10 731 971 10 0 528 +569 32 319 -10 1542 1782 10 535 0 +570 344 70 24 4523 4763 10 0 997 +571 481 84 17 1962 2202 10 0 232 +572 21 68 20 1546 1786 10 0 418 +573 441 244 10 1048 1288 10 0 303 +574 57 43 -27 4034 4274 10 898 0 +575 1 293 -20 1011 1251 10 993 0 +576 481 96 -20 1128 1368 10 888 0 +577 471 368 -20 1652 1892 10 315 0 +578 236 126 23 379 619 10 0 21 +579 406 99 -10 848 1088 10 602 0 +580 303 186 -10 5357 5597 10 110 0 +581 225 369 38 366 606 10 0 539 +582 412 453 10 1128 1368 10 0 1 +583 104 349 -22 3977 4217 10 139 0 +584 173 182 25 291 531 10 0 186 +585 111 464 10 1182 1422 10 0 265 +586 53 440 -20 1232 1472 10 335 0 +587 69 336 20 812 1052 10 0 615 +588 359 182 -20 777 1017 10 517 0 +589 13 459 20 1327 1567 10 0 858 +590 244 277 18 5145 5385 0 0 1005 +591 484 177 -10 946 1186 10 725 0 +592 452 206 -24 1909 2149 10 556 0 +593 22 483 30 1184 1424 10 0 461 +594 452 110 14 1301 1541 10 0 35 +595 347 192 18 5893 6133 0 0 1003 +596 95 92 -31 951 1191 10 462 0 +597 368 311 -12 3644 3884 10 324 0 +598 479 387 13 1530 1770 10 0 897 +599 479 169 -10 1174 1414 10 492 0 +600 497 266 -20 2930 3170 10 426 0 +601 66 336 10 953 1193 10 0 554 +602 376 195 10 664 904 10 0 579 +603 401 281 -30 984 1224 10 201 0 +604 441 177 -24 3945 4185 10 633 0 +605 231 203 20 206 446 10 0 688 +606 21 488 10 1385 1625 10 0 283 +607 231 204 20 541 781 10 0 760 +608 122 422 -34 5767 6007 10 972 0 +609 65 453 30 1067 1307 10 0 507 +610 206 261 10 670 910 10 0 639 +611 466 149 16 4684 4924 10 0 877 +612 313 119 -20 803 1043 10 272 0 +613 90 274 20 657 897 10 0 635 +614 39 162 -20 2201 2441 10 51 0 +615 35 306 -20 858 1098 10 587 0 +616 437 15 -9 1361 1601 10 908 0 +617 307 412 -17 1555 1795 10 929 0 +618 79 291 10 775 1015 10 0 803 +619 64 437 -10 3613 3853 10 704 0 +620 376 92 -20 3902 4142 10 665 0 +621 129 27 -24 1130 1370 10 694 0 +622 196 489 -33 4061 4301 10 208 0 +623 51 286 14 5776 6016 0 0 1007 +624 20 488 -17 1429 1669 10 147 0 +625 13 455 -13 1183 1423 10 547 0 +626 170 347 -20 1683 1923 10 823 0 +627 92 230 20 695 935 10 0 286 +628 117 467 -21 898 1138 10 228 0 +629 413 217 20 596 836 10 0 209 +630 405 450 -13 933 1173 10 227 0 +631 394 322 -17 4039 4279 10 8 0 +632 125 61 26 2387 2627 10 0 187 +633 238 123 24 3064 3304 10 0 604 +634 11 403 -10 1312 1552 10 157 0 +635 89 272 -20 706 946 10 613 0 +636 304 102 -20 727 967 10 501 0 +637 478 121 40 1215 1455 10 0 205 +638 408 84 -20 1077 1317 10 264 0 +639 376 494 -10 1019 1259 10 610 0 +640 20 73 10 1041 1281 10 0 488 +641 159 299 -27 4002 4242 10 61 0 +642 95 382 -20 865 1105 10 176 0 +643 352 63 -20 4653 4893 10 380 0 +644 365 274 14 350 590 10 0 798 +645 30 301 10 1050 1290 10 0 97 +646 351 5 -10 1924 2164 10 150 0 +647 197 267 10 375 615 10 0 258 +648 498 171 12 4966 5206 10 0 178 +649 468 352 9 3013 3253 10 0 184 +650 418 251 -21 4727 4967 10 843 0 +651 489 437 29 2767 3007 10 0 392 +652 251 63 -10 3890 4130 10 23 0 +653 132 55 -16 1009 1249 10 47 0 +654 281 96 -20 4443 4683 10 223 0 +655 333 293 27 2408 2648 10 0 757 +656 255 487 -20 1532 1772 10 878 0 +657 207 400 -20 702 942 10 311 0 +658 469 489 -10 2162 2402 10 15 0 +659 244 254 20 341 581 10 0 728 +660 233 207 10 105 345 10 0 386 +661 441 60 -22 5775 6015 10 780 0 +662 411 379 25 4713 4953 10 0 83 +663 178 72 -12 2967 3207 10 796 0 +664 51 447 -20 1118 1358 10 837 0 +665 478 118 20 1357 1597 10 0 620 +666 141 426 -30 2066 2306 10 987 0 +667 295 89 23 2908 3148 10 0 447 +668 112 433 29 880 1120 10 0 152 +669 320 211 -20 3910 4150 10 481 0 +670 400 103 10 962 1202 10 0 450 +671 408 453 10 1072 1312 10 0 443 +672 435 180 -10 838 1078 10 768 0 +673 432 66 -5 4225 4465 10 953 0 +674 374 116 -10 2289 2529 10 560 0 +675 478 102 10 1237 1477 10 0 172 +676 335 57 30 724 964 10 0 41 +677 385 239 -9 3082 3322 10 390 0 +678 386 245 -30 1856 2096 10 405 0 +679 208 396 20 646 886 10 0 512 +680 380 489 -10 1456 1696 10 354 0 +681 380 498 -19 1129 1369 10 256 0 +682 440 7 20 1195 1435 10 0 122 +683 434 245 10 1307 1547 10 0 863 +684 90 232 10 786 1026 10 0 945 +685 389 334 20 616 856 10 0 567 +686 241 205 -10 412 652 10 261 0 +687 18 24 32 2453 2693 10 0 717 +688 57 183 -20 4341 4581 10 605 0 +689 59 457 30 1277 1517 10 0 503 +690 442 243 -20 1094 1334 10 971 0 +691 402 281 -20 940 1180 10 210 0 +692 445 237 -10 742 982 10 300 0 +693 441 273 20 1069 1309 10 0 482 +694 31 175 24 926 1166 10 0 621 +695 234 202 10 259 499 10 0 533 +696 52 303 -20 1705 1945 10 822 0 +697 167 445 -21 5588 5828 10 185 0 +698 179 286 8 1305 1545 10 0 193 +699 269 48 20 1062 1302 10 0 356 +700 165 59 27 3711 3951 10 0 34 +701 461 8 20 1416 1656 10 0 331 +702 421 415 30 881 1121 10 0 936 +703 59 459 -12 1185 1425 10 920 0 +704 24 492 10 1788 2028 10 0 619 +705 55 449 20 994 1234 10 0 255 +706 224 192 10 220 460 10 0 476 +707 444 269 -20 874 1114 10 329 0 +708 491 20 20 1514 1754 10 0 804 +709 313 126 -40 913 1153 10 884 0 +710 283 438 -20 866 1106 10 453 0 +711 352 241 -7 3109 3349 10 91 0 +712 398 476 25 1612 1852 10 0 524 +713 442 247 10 904 1144 10 0 519 +714 217 207 -13 5470 5710 10 129 0 +715 233 87 18 950 1190 10 0 842 +716 479 127 20 1019 1259 10 0 322 +717 6 53 -32 2288 2528 10 687 0 +718 478 300 -10 3498 3738 10 973 0 +719 378 493 30 1067 1307 10 0 353 +720 303 78 12 600 840 10 0 236 +721 344 62 10 1326 1566 10 0 723 +722 371 315 -11 4603 4843 10 459 0 +723 200 78 -10 3911 4151 10 721 0 +724 413 391 -25 808 1048 10 301 0 +725 415 216 10 645 885 10 0 591 +726 397 57 17 5844 6084 10 0 478 +727 293 228 19 73 313 10 0 89 +728 0 297 -20 1111 1351 10 659 0 +729 435 20 -10 1466 1706 10 813 0 +730 195 111 -20 3932 4172 10 521 0 +731 417 218 10 1052 1292 10 0 444 +732 340 54 -30 891 1131 10 849 0 +733 132 57 20 918 1158 10 0 935 +734 210 379 12 2775 3015 10 0 562 +735 228 260 -40 6362 6602 10 5 0 +736 399 104 10 1099 1339 10 0 565 +737 95 277 20 1038 1278 10 0 882 +738 360 284 -22 2606 2846 10 992 0 +739 53 466 9 1280 1520 10 0 980 +740 112 465 10 1137 1377 10 0 217 +741 313 391 5 538 778 10 0 746 +742 93 235 10 925 1165 10 0 191 +743 125 32 -20 978 1218 10 342 0 +744 215 282 -16 5702 5942 10 369 0 +745 224 320 -10 5075 5315 10 309 0 +746 134 428 -5 1172 1412 10 741 0 +747 26 490 10 1839 2079 10 0 128 +748 44 115 -18 865 1105 10 305 0 +749 438 127 -24 3704 3944 10 166 0 +750 239 15 -10 2355 2595 10 239 0 +751 342 54 20 939 1179 10 0 96 +752 109 463 -10 1274 1514 10 2 0 +753 199 187 20 447 687 10 0 289 +754 201 188 10 495 735 10 0 39 +755 399 301 -30 717 957 10 537 0 +756 484 171 -40 1113 1353 10 26 0 +757 272 234 -27 6301 6541 10 655 0 +758 380 350 15 3406 3646 10 0 181 +759 140 108 29 4225 4465 10 0 799 +760 228 199 -20 477 717 10 607 0 +761 245 461 8 2537 2777 10 0 442 +762 305 107 20 841 1081 10 0 313 +763 231 195 20 377 617 10 0 302 +764 450 265 -10 805 1045 10 516 0 +765 273 149 -5 5951 6191 10 16 0 +766 12 358 -10 4837 5077 10 59 0 +767 315 121 10 752 992 10 0 970 +768 420 213 10 754 994 10 0 672 +769 331 134 -24 4435 4675 10 103 0 +770 84 377 -19 3645 3885 10 857 0 +771 320 280 10 280 520 10 0 375 +772 89 185 -6 2339 2579 10 543 0 +773 472 481 20 1246 1486 10 0 962 +774 422 420 -10 990 1230 10 892 0 +775 475 267 7 3058 3298 10 0 132 +776 470 125 -22 892 1132 10 784 0 +777 435 268 -30 1187 1427 10 149 0 +778 409 155 -30 621 861 10 162 0 +779 243 248 30 36 276 10 0 919 +780 488 96 22 4205 4445 10 0 661 +781 341 72 -10 3159 3399 10 345 0 +782 58 449 30 1391 1631 10 0 280 +783 16 460 -10 1583 1823 10 489 0 +784 480 136 22 907 1147 10 0 776 +785 162 388 11 4444 4684 10 0 13 +786 47 208 30 846 1086 10 0 800 +787 324 127 30 454 694 10 0 169 +788 87 96 -32 1067 1307 10 234 0 +789 140 137 -33 2219 2459 10 7 0 +790 314 205 22 6047 6287 10 0 531 +791 96 346 -10 681 921 10 374 0 +792 321 280 30 236 476 10 0 532 +793 245 251 10 5 245 10 0 838 +794 436 295 11 2053 2293 10 0 495 +795 274 261 -14 6768 7008 10 226 0 +796 271 128 12 1322 1562 10 0 663 +797 275 45 -20 838 1078 10 325 0 +798 422 409 -14 817 1057 10 644 0 +799 146 188 -29 4880 5120 10 759 0 +800 93 96 -30 842 1082 10 786 0 +801 409 255 -11 6030 6270 10 840 0 +802 449 428 -10 4927 5167 10 848 0 +803 90 285 -10 1045 1285 10 618 0 +804 415 95 -20 4647 4887 10 708 0 +805 88 287 -10 994 1234 10 134 0 +806 379 196 -20 716 956 10 927 0 +807 368 452 -25 2620 2860 10 409 0 +808 202 186 20 544 784 10 0 439 +809 435 11 40 1129 1369 10 0 108 +810 269 46 -10 1014 1254 10 326 0 +811 7 292 -30 866 1106 10 869 0 +812 44 496 32 1547 1787 10 0 113 +813 478 99 10 1185 1425 10 0 729 +814 391 99 20 706 946 10 0 180 +815 132 477 -20 1249 1489 10 308 0 +816 24 65 -10 1401 1641 10 916 0 +817 130 247 17 360 600 10 0 50 +818 133 273 20 357 597 10 0 458 +819 347 62 10 1274 1514 10 0 270 +820 404 140 -5 4975 5215 10 977 0 +821 416 420 -20 1099 1339 10 974 0 +822 67 335 20 907 1147 10 0 696 +823 92 270 20 967 1207 10 0 626 +824 411 95 -20 911 1151 10 143 0 +825 132 479 11 910 1150 10 0 138 +826 366 334 5 1581 1821 10 0 24 +827 125 39 20 861 1101 10 0 555 +828 419 422 20 1045 1285 10 0 56 +829 460 2 -20 1352 1592 10 998 0 +830 67 334 20 863 1103 10 0 75 +831 448 414 23 4831 5071 10 0 912 +832 46 163 -18 3644 3884 10 190 0 +833 77 465 11 984 1224 10 0 12 +834 284 319 -20 3207 3447 10 440 0 +835 102 422 23 845 1085 10 0 966 +836 240 34 -35 6178 6418 10 508 0 +837 141 428 20 715 955 10 0 664 +838 204 269 -10 79 319 10 793 0 +839 144 439 -20 1025 1265 10 362 0 +840 470 417 11 2887 3127 10 0 801 +841 404 103 -14 906 1146 10 285 0 +842 5 281 -18 5426 5666 10 715 0 +843 487 320 21 3371 3611 10 0 650 +844 398 23 -10 964 1204 10 175 0 +845 90 296 20 546 786 10 0 347 +846 386 13 -10 1288 1528 10 552 0 +847 115 465 -9 989 1229 10 437 0 +848 473 475 10 1609 1849 10 0 802 +849 275 42 30 890 1130 10 0 732 +850 286 356 -30 328 568 10 93 0 +851 15 69 10 1107 1347 10 0 294 +852 267 44 20 963 1203 10 0 564 +853 243 399 10 879 1119 10 0 202 +854 390 249 -20 2267 2507 10 273 0 +855 210 391 30 506 746 10 0 906 +856 433 15 20 1071 1311 10 0 231 +857 24 259 19 1420 1660 10 0 770 +858 12 463 -20 1383 1623 10 589 0 +859 237 213 10 528 768 10 0 959 +860 182 480 31 1399 1639 10 0 862 +861 409 88 -20 1021 1261 10 903 0 +862 244 368 -31 1596 1836 10 860 0 +863 381 328 -10 2809 3049 10 683 0 +864 213 185 21 179 419 10 0 435 +865 482 141 -9 3983 4223 10 477 0 +866 319 124 20 652 892 10 0 990 +867 141 431 -21 812 1052 10 451 0 +868 198 264 -10 501 741 10 65 0 +869 69 334 30 764 1004 10 0 811 +870 299 98 30 607 847 10 0 510 +871 240 250 -10 90 330 10 230 0 +872 199 203 20 5769 6009 10 0 420 +873 459 17 20 1585 1825 10 0 263 +874 423 217 -30 907 1147 10 316 0 +875 477 179 20 831 1071 10 0 950 +876 213 397 10 809 1049 10 0 154 +877 405 187 -16 4942 5182 10 611 0 +878 269 402 20 751 991 10 0 656 +879 53 204 -10 4160 4400 10 118 0 +880 13 394 -20 1430 1670 10 996 0 +881 15 68 -20 1151 1391 10 312 0 +882 56 268 -20 4196 4436 10 737 0 +883 360 184 10 826 1066 10 0 299 +884 307 102 40 779 1019 10 0 709 +885 130 57 40 870 1110 10 0 422 +886 250 328 -30 935 1175 10 961 0 +887 91 231 -1 741 981 10 538 0 +888 479 176 20 886 1126 10 0 576 +889 420 224 10 1656 1896 10 0 956 +890 461 182 -20 2456 2696 10 87 0 +891 418 218 20 1008 1248 10 0 494 +892 419 418 10 936 1176 10 0 774 +893 336 493 20 5912 6152 10 0 141 +894 389 300 -10 555 795 10 909 0 +895 92 76 -4 4496 4736 10 423 0 +896 476 102 20 1285 1525 10 0 396 +897 418 399 -13 1691 1931 10 598 0 +898 109 56 27 839 1079 10 0 574 +899 13 465 31 3034 3274 10 0 417 +900 92 232 10 647 887 10 0 199 +901 394 47 -20 1192 1432 10 401 0 +902 16 287 12 1023 1263 10 0 243 +903 399 102 20 1008 1248 10 0 861 +904 143 158 12 490 730 10 0 27 +905 18 484 10 1240 1480 10 0 397 +906 250 411 -30 692 932 10 855 0 +907 19 273 25 4006 4246 10 0 911 +908 365 28 9 1013 1253 10 0 616 +909 387 297 10 501 741 10 0 894 +910 433 447 -31 3117 3357 10 468 0 +911 214 274 -25 5416 5656 10 907 0 +912 489 338 -23 5529 5769 10 831 0 +913 130 494 -9 2975 3215 10 984 0 +914 23 67 30 1497 1737 10 0 28 +915 374 489 -20 957 1197 10 500 0 +916 126 30 10 1027 1267 10 0 816 +917 112 467 10 1044 1284 10 0 76 +918 489 274 -20 2075 2315 10 105 0 +919 61 214 -30 1307 1547 10 779 0 +920 166 440 12 711 951 10 0 703 +921 56 75 -12 5691 5931 10 339 0 +922 210 276 5 71 311 10 0 381 +923 80 286 10 836 1076 10 0 45 +924 17 459 10 1628 1868 10 0 348 +925 66 448 10 961 1201 10 0 292 +926 351 128 -10 4953 5193 10 504 0 +927 352 176 20 384 624 10 0 806 +928 490 286 29 2029 2269 10 0 269 +929 247 219 17 31 271 10 0 617 +930 86 268 -10 809 1049 10 14 0 +931 398 329 17 551 791 10 0 416 +932 272 402 10 578 818 10 0 49 +933 317 123 20 701 941 10 0 254 +934 408 318 -10 2512 2752 10 323 0 +935 66 31 -20 4134 4374 10 733 0 +936 425 448 -30 3118 3358 10 702 0 +937 35 304 30 810 1050 10 0 496 +938 471 94 30 3935 4175 10 0 196 +939 470 473 -13 1664 1904 10 133 0 +940 224 56 -20 4686 4926 10 248 0 +941 343 47 -20 1048 1288 10 474 0 +942 52 18 28 3368 3608 10 0 151 +943 16 68 20 1195 1435 10 0 99 +944 195 185 20 389 629 10 0 413 +945 92 236 -10 971 1211 10 684 0 +946 76 462 18 3764 4004 0 0 1006 +947 124 56 20 805 1045 10 0 174 +948 481 454 -10 1222 1462 10 542 0 +949 477 483 20 1403 1643 10 0 200 +950 481 124 -20 1074 1314 10 875 0 +951 389 156 -2 2802 3042 10 249 0 +952 384 16 20 1342 1582 10 0 982 +953 492 34 5 3182 3422 10 0 673 +954 371 200 10 837 1077 10 0 121 +955 153 235 10 273 513 10 0 355 +956 428 202 -10 3555 3795 10 889 0 +957 257 391 22 6472 6712 0 0 1008 +958 421 218 10 956 1196 10 0 247 +959 206 186 -10 690 930 10 859 0 +960 393 301 -30 653 893 10 393 0 +961 204 187 30 641 881 10 0 886 +962 468 475 -20 1133 1373 10 773 0 +963 477 122 10 1260 1500 10 0 557 +964 100 66 -15 5539 5779 10 73 0 +965 489 27 -20 1625 1865 10 456 0 +966 12 451 -23 1126 1366 10 835 0 +967 197 270 30 323 563 10 0 203 +968 311 422 29 3892 4132 10 0 106 +969 489 17 -20 1460 1700 10 195 0 +970 13 214 -10 5354 5594 10 767 0 +971 440 247 20 952 1192 10 0 690 +972 28 467 34 5310 5550 10 0 608 +973 388 325 10 993 1233 10 0 718 +974 270 401 20 529 769 10 0 821 +975 5 445 30 1184 1424 10 0 376 +976 198 271 20 277 517 10 0 414 +977 480 131 5 2690 2930 10 0 820 +978 437 98 -26 4395 4635 10 985 0 +979 131 246 -9 3268 3508 10 467 0 +980 49 437 -9 1650 1890 10 739 0 +981 270 49 30 1108 1348 10 0 127 +982 337 41 -20 3949 4189 10 952 0 +983 318 280 20 328 568 10 0 170 +984 154 392 9 566 806 10 0 913 +985 493 111 26 2104 2344 10 0 978 +986 399 450 20 1375 1615 10 0 84 +987 67 452 30 1018 1258 10 0 666 +988 34 239 -20 816 1056 10 314 0 +989 343 276 15 266 506 10 0 179 +990 393 12 -20 1177 1417 10 866 0 +991 236 247 20 150 390 10 0 395 +992 340 291 22 1822 2062 10 0 738 +993 3 292 20 962 1202 10 0 575 +994 209 68 27 6212 6452 10 0 53 +995 18 225 8 2705 2945 10 0 566 +996 147 435 20 920 1160 10 0 880 +997 335 99 -24 4814 5054 10 570 0 +998 485 24 20 1225 1465 10 0 829 +999 470 475 30 1181 1421 10 0 290 +1000 341 58 10 835 1075 10 0 452 +1001 238 210 -30 475 715 10 344 0 +1002 448 404 -15 2336 2576 10 194 0 +1003 347 192 -18 5893 6133 10 595 0 +1004 323 29 -7 4490 4730 10 371 0 +1005 244 277 -18 5145 5385 10 590 0 +1006 76 462 -18 3764 4004 10 946 0 +1007 51 286 -14 5776 6016 10 623 0 +1008 257 391 -22 6472 6712 10 957 0 diff --git a/jsprit-instances/instances/lilim/1000/LRC2107.txt b/jsprit-instances/instances/lilim/1000/LRC2107.txt new file mode 100644 index 00000000..e6be2c26 --- /dev/null +++ b/jsprit-instances/instances/lilim/1000/LRC2107.txt @@ -0,0 +1,1012 @@ +250 1000 1 +0 250 250 0 0 7284 0 0 0 +1 440 436 18 3440 3815 10 0 432 +2 214 394 10 776 1189 10 0 218 +3 476 483 10 1237 1722 10 0 949 +4 352 487 27 3511 3824 10 0 78 +5 230 197 40 451 642 10 0 429 +6 175 239 23 163 444 10 0 627 +7 133 202 33 1554 2251 10 0 832 +8 328 458 17 3046 3216 10 0 485 +9 25 499 10 1591 2088 10 0 111 +10 226 423 15 639 1056 10 0 276 +11 313 282 20 580 848 10 0 738 +12 60 454 10 1389 1510 10 0 280 +13 239 486 -33 5916 6061 10 208 0 +14 102 264 10 395 795 10 0 635 +15 408 452 -25 1028 1269 10 179 0 +16 451 62 -14 1044 1335 10 285 0 +17 203 390 40 362 1027 10 0 837 +18 92 233 -10 668 1242 10 742 0 +19 7 300 30 1081 1797 10 0 193 +20 409 90 20 946 1240 10 0 861 +21 307 108 10 689 1330 10 0 889 +22 347 54 -10 1000 1481 10 455 0 +23 406 87 -10 1065 1559 10 731 0 +24 371 332 14 1962 2395 10 0 494 +25 116 466 20 858 1270 10 0 102 +26 441 265 40 621 1077 10 0 577 +27 130 140 17 696 976 10 0 525 +28 80 117 -20 3157 3556 10 418 0 +29 421 387 15 3093 3436 10 0 495 +30 83 300 -20 1767 2350 10 160 0 +31 136 52 10 1149 1312 10 0 836 +32 18 462 -29 1550 1752 10 668 0 +33 390 120 -2 3978 4175 10 249 0 +34 188 119 -21 3723 4195 10 96 0 +35 467 114 -10 1340 1788 10 883 0 +36 440 292 24 3697 3944 10 0 67 +37 268 400 20 856 1210 10 0 49 +38 391 202 14 366 825 10 0 471 +39 377 432 20 3079 3693 10 0 332 +40 80 290 10 761 939 10 0 551 +41 439 15 20 1356 1509 10 0 726 +42 307 52 -10 3583 3901 10 118 0 +43 111 192 -18 4842 4873 10 283 0 +44 131 56 10 762 1405 10 0 916 +45 88 286 10 801 1338 10 0 823 +46 69 414 6 4975 5251 10 0 246 +47 41 232 16 686 1076 10 0 694 +48 323 77 36 5536 5825 10 0 406 +49 340 416 -20 1181 1508 10 37 0 +50 86 199 -30 1063 1280 10 805 0 +51 314 124 20 865 1103 10 0 643 +52 375 191 30 567 888 10 0 245 +53 226 175 -20 6675 6995 10 947 0 +54 242 106 -40 4966 5302 10 884 0 +55 417 417 10 1252 1525 10 0 843 +56 419 459 20 1300 1351 10 0 962 +57 389 11 -30 1153 1554 10 870 0 +58 450 416 -14 2212 2522 10 948 0 +59 246 255 10 419 601 10 0 581 +60 71 333 10 593 1078 10 0 569 +61 105 474 27 1800 2085 10 0 163 +62 20 489 10 1444 1743 10 0 119 +63 388 331 20 418 862 10 0 527 +64 92 259 -10 1522 1794 10 575 0 +65 200 261 10 567 885 10 0 746 +66 400 288 -20 453 784 10 481 0 +67 299 285 -24 4924 5227 10 36 0 +68 378 199 -33 627 1151 10 363 0 +69 325 147 -18 4469 5144 10 520 0 +70 421 386 -23 3192 3523 10 98 0 +71 404 447 20 756 1244 10 0 582 +72 412 478 -11 3529 4268 10 840 0 +73 26 67 -20 4976 5678 10 800 0 +74 358 183 20 685 1304 10 0 514 +75 30 302 -20 1054 1198 10 587 0 +76 176 470 -10 1951 2543 10 610 0 +77 96 270 -20 507 911 10 349 0 +78 243 408 -27 5724 5866 10 4 0 +79 60 29 32 5293 5729 10 0 964 +80 34 169 11 1784 2211 10 0 505 +81 407 280 10 798 990 10 0 412 +82 277 403 10 607 911 10 0 281 +83 498 456 -11 5636 5732 10 460 0 +84 384 491 20 1272 1630 10 0 277 +85 355 174 33 2858 2984 10 0 222 +86 97 288 -7 4865 5527 10 766 0 +87 316 284 20 311 806 10 0 389 +88 334 403 26 611 786 10 0 630 +89 415 223 20 1100 1459 10 0 638 +90 230 320 -20 4774 4883 10 101 0 +91 432 199 -10 2408 2820 10 690 0 +92 92 18 8 4257 4856 10 0 438 +93 273 300 30 122 319 10 0 850 +94 269 112 -7 4864 5357 10 232 0 +95 429 389 -20 1680 1833 10 512 0 +96 371 71 21 1131 1283 10 0 34 +97 5 297 10 1318 1451 10 0 127 +98 414 378 23 1713 2365 10 0 70 +99 38 15 -20 4277 4572 10 943 0 +100 2 295 -30 1103 1463 10 869 0 +101 237 254 20 332 454 10 0 90 +102 54 445 -20 1234 1350 10 25 0 +103 382 110 -5 4301 4718 10 977 0 +104 438 488 -10 1223 1515 10 431 0 +105 395 331 20 671 1182 10 0 713 +106 230 487 20 4381 4776 10 0 168 +107 249 407 -9 444 1066 10 437 0 +108 488 26 -20 1758 1825 10 682 0 +109 151 81 -3 6056 6527 10 555 0 +110 483 14 -20 1252 1774 10 165 0 +111 0 422 -10 3212 3477 10 9 0 +112 429 67 16 2914 3064 10 0 236 +113 195 464 -7 5976 6474 10 697 0 +114 356 256 19 269 580 10 0 515 +115 264 180 -31 6555 7011 10 592 0 +116 94 235 20 514 820 10 0 414 +117 474 96 30 1003 1171 10 0 665 +118 268 52 10 1056 1509 10 0 42 +119 44 440 -10 2826 3604 10 62 0 +120 7 382 -10 2977 3307 10 905 0 +121 459 53 -30 4264 4834 10 365 0 +122 491 25 -3 1452 1937 10 454 0 +123 439 243 -20 1131 1497 10 428 0 +124 210 185 20 245 365 10 0 125 +125 150 68 -20 1452 2051 10 124 0 +126 201 270 10 111 393 10 0 510 +127 0 188 -10 3690 3886 10 97 0 +128 103 464 -40 5037 5266 10 279 0 +129 325 56 -20 3053 3439 10 607 0 +130 44 344 -20 4205 4550 10 465 0 +131 418 75 -20 1545 2158 10 952 0 +132 472 57 -20 4955 5524 10 701 0 +133 460 328 13 552 1321 10 0 598 +134 89 270 10 711 1037 10 0 424 +135 374 190 20 286 981 10 0 672 +136 463 253 -20 4056 4440 10 386 0 +137 97 93 20 921 1122 10 0 204 +138 163 472 -9 2452 2895 10 503 0 +139 29 336 -20 1194 1578 10 334 0 +140 84 453 19 4914 4989 10 0 387 +141 294 421 26 6271 6453 10 0 957 +142 343 62 -19 1251 1729 10 727 0 +143 371 193 20 421 649 10 0 486 +144 142 372 18 409 895 10 0 839 +145 66 88 2 3092 3665 10 0 241 +146 395 332 10 669 1095 10 0 502 +147 93 413 -26 793 1017 10 791 0 +148 267 394 10 998 1196 10 0 826 +149 249 258 30 285 849 10 0 354 +150 472 129 10 770 1370 10 0 571 +151 87 3 -23 5575 6009 10 410 0 +152 62 326 20 986 1425 10 0 243 +153 212 186 -24 6634 7200 10 921 0 +154 241 402 -20 3875 4443 10 737 0 +155 439 266 10 632 970 10 0 492 +156 79 80 -12 5466 5711 10 339 0 +157 62 453 10 988 1490 10 0 554 +158 188 151 7 5022 5471 10 0 714 +159 386 154 -20 4257 4670 10 329 0 +160 38 301 20 1079 1406 10 0 30 +161 192 265 -30 374 740 10 838 0 +162 371 192 30 491 668 10 0 806 +163 64 294 -27 4217 4713 10 61 0 +164 381 494 -10 1275 1512 10 238 0 +165 437 12 20 1259 1498 10 0 110 +166 186 135 -9 2759 3103 10 477 0 +167 459 10 -20 1282 1518 10 829 0 +168 175 422 -20 5685 6006 10 106 0 +169 274 48 10 663 1147 10 0 364 +170 488 173 20 1136 1214 10 0 795 +171 398 97 -20 691 1101 10 927 0 +172 385 17 40 2988 3603 10 0 447 +173 180 283 -31 2878 3191 10 860 0 +174 71 12 -27 923 1540 10 898 0 +175 343 49 10 840 1399 10 0 616 +176 248 251 20 2 174 10 0 464 +177 7 194 -16 3728 4003 10 772 0 +178 322 290 -9 5765 6186 10 338 0 +179 410 399 25 850 1141 10 0 15 +180 398 103 30 835 1513 10 0 321 +181 385 285 13 3243 3821 10 0 722 +182 179 497 1 5551 5858 10 0 893 +183 464 13 -20 1391 1808 10 856 0 +184 492 335 10 3250 3496 10 0 296 +185 27 464 -5 5107 5341 10 922 0 +186 231 29 -31 4704 5226 10 723 0 +187 157 38 3 4044 4458 10 0 994 +188 439 268 -20 1079 1422 10 315 0 +189 149 214 -20 1859 2117 10 822 0 +190 187 73 -10 1025 1432 10 621 0 +191 429 169 -31 3651 3691 10 918 0 +192 350 199 -19 4513 5218 10 778 0 +193 60 231 -30 3993 4335 10 19 0 +194 448 404 15 2268 2643 10 0 392 +195 481 20 20 1055 1840 10 0 242 +196 436 25 -20 4991 5387 10 474 0 +197 111 459 20 1305 1684 10 0 562 +198 389 17 10 1237 1808 10 0 282 +199 148 208 22 1941 2391 10 0 882 +200 475 477 -10 1538 1818 10 671 0 +201 390 325 -20 977 1153 10 210 0 +202 346 354 -15 3117 3543 10 758 0 +203 91 266 -10 751 1230 10 955 0 +204 17 65 -20 1176 1559 10 137 0 +205 391 112 -30 3924 4198 10 612 0 +206 224 203 20 71 358 10 0 248 +207 426 231 -23 4123 4225 10 604 0 +208 260 472 33 4122 4286 10 0 13 +209 265 0 -27 3450 3838 10 470 0 +210 391 293 20 648 1278 10 0 201 +211 411 421 20 1053 1586 10 0 213 +212 132 30 20 1173 1553 10 0 700 +213 475 480 -20 1308 1847 10 211 0 +214 286 244 -8 4901 5490 10 299 0 +215 436 237 -10 546 946 10 725 0 +216 402 284 -30 561 875 10 393 0 +217 287 397 12 2117 2518 10 0 745 +218 272 420 -10 5441 5766 10 2 0 +219 477 120 -10 1120 1736 10 552 0 +220 145 434 20 743 1241 10 0 880 +221 33 286 -16 6026 6461 10 842 0 +222 370 262 -33 4326 4589 10 85 0 +223 393 20 -10 1421 1824 10 239 0 +224 330 308 -10 4683 4800 10 473 0 +225 246 398 40 395 790 10 0 448 +226 482 184 -12 4360 4615 10 646 0 +227 451 305 13 658 1009 10 0 649 +228 226 316 21 70 528 10 0 917 +229 110 459 30 1155 1747 10 0 475 +230 244 250 10 10 204 10 0 862 +231 458 16 20 1052 1453 0 0 1003 +232 390 34 7 4077 4526 10 0 94 +233 423 214 -20 644 1210 10 401 0 +234 219 215 32 46 590 10 0 881 +235 326 118 10 548 755 10 0 553 +236 365 74 -16 3270 3637 10 112 0 +237 331 356 -19 2869 2945 10 656 0 +238 210 398 10 700 1053 10 0 164 +239 403 93 10 1118 1728 10 0 223 +240 248 404 30 503 812 10 0 906 +241 65 62 -2 3612 4320 10 145 0 +242 460 13 -20 1225 1469 10 195 0 +243 0 293 -20 1105 1246 10 152 0 +244 211 248 26 39 445 10 0 761 +245 484 174 -30 1049 1187 10 52 0 +246 175 352 -6 6469 6971 10 46 0 +247 455 168 -25 3357 3698 10 600 0 +248 224 191 -20 119 649 10 206 0 +249 439 156 2 1843 2484 10 0 33 +250 434 359 -15 5577 5681 10 934 0 +251 118 314 26 1220 1601 10 0 258 +252 234 246 10 214 423 10 0 900 +253 406 450 20 922 1272 10 0 939 +254 75 118 21 1560 1832 10 0 340 +255 115 395 -11 3188 3454 10 825 0 +256 329 456 -10 972 1141 10 932 0 +257 218 403 -2 5149 5525 10 524 0 +258 149 341 -26 1433 1919 10 251 0 +259 253 74 -10 5165 5755 10 846 0 +260 436 241 -20 1293 1445 10 518 0 +261 238 203 10 148 722 10 0 961 +262 405 455 -30 1251 1595 10 702 0 +263 485 27 -10 1772 1916 10 1000 0 +264 323 118 -20 497 910 10 273 0 +265 330 371 1 2104 2484 10 0 979 +266 25 65 -30 1344 1787 10 779 0 +267 406 96 20 875 972 10 0 521 +268 49 451 -10 1063 1296 10 925 0 +269 307 249 -21 5462 5670 10 650 0 +270 178 135 -15 5971 6259 10 559 0 +271 299 353 34 172 740 10 0 986 +272 236 213 20 86 230 10 0 453 +273 355 177 20 454 659 10 0 264 +274 394 23 20 1563 1787 10 0 390 +275 306 235 25 93 371 10 0 820 +276 90 477 -15 944 1278 10 10 0 +277 379 486 -20 2448 3046 10 84 0 +278 435 16 10 1406 1653 10 0 444 +279 8 497 40 1497 1884 10 0 128 +280 150 484 -10 2534 2587 10 12 0 +281 213 399 -10 785 1207 10 82 0 +282 391 18 -10 1483 1659 10 198 0 +283 111 392 18 4633 4839 10 0 43 +284 330 281 -27 5204 5559 10 951 0 +285 344 203 14 682 776 10 0 16 +286 91 235 10 902 1371 10 0 698 +287 346 60 -20 1149 1541 10 903 0 +288 483 27 -9 1709 2074 10 908 0 +289 382 498 -30 889 1705 10 639 0 +290 457 492 -10 1907 2277 10 848 0 +291 291 213 -10 4758 5424 10 771 0 +292 154 374 -25 3537 4078 10 497 0 +293 225 196 10 201 365 10 0 652 +294 94 40 -10 4223 4441 10 640 0 +295 0 356 -30 4244 4565 10 782 0 +296 297 283 -10 5205 5711 10 184 0 +297 371 423 10 750 939 10 0 828 +298 417 217 -20 638 991 10 629 0 +299 500 228 8 3013 3361 10 0 214 +300 412 214 10 518 810 10 0 522 +301 442 289 25 696 952 10 0 973 +302 157 269 -18 6198 6532 10 433 0 +303 440 241 -10 1201 1330 10 560 0 +304 100 266 20 592 700 10 0 613 +305 111 178 18 461 791 10 0 395 +306 91 101 -14 1056 1449 10 496 0 +307 25 307 -20 905 1210 10 830 0 +308 135 400 -8 1104 1404 10 383 0 +309 58 458 -30 1093 1610 10 867 0 +310 133 26 -30 1259 1354 10 563 0 +311 211 386 20 396 736 10 0 586 +312 94 97 20 754 1078 10 0 717 +313 30 155 9 4973 5391 0 0 1004 +314 208 184 -21 258 450 10 864 0 +315 394 333 20 598 1076 10 0 188 +316 355 180 30 461 756 10 0 866 +317 241 180 13 6824 6853 0 0 1005 +318 21 485 30 1287 1540 10 0 417 +319 80 251 14 1008 1540 10 0 434 +320 476 61 -20 1595 2114 10 588 0 +321 406 94 -30 748 1194 10 180 0 +322 364 71 -10 5202 5706 10 323 0 +323 418 221 10 1138 1311 10 0 322 +324 274 441 -12 2570 3106 10 734 0 +325 304 97 -10 462 1113 10 326 0 +326 297 102 10 519 819 10 0 325 +327 250 405 20 574 839 10 0 710 +328 111 463 20 1139 1554 10 0 834 +329 408 279 20 782 1097 10 0 159 +330 263 418 25 1106 1242 10 0 459 +331 480 119 7 2306 2842 10 0 938 +332 420 383 -20 3879 4096 10 39 0 +333 142 14 18 3107 3695 10 0 413 +334 73 328 20 583 965 10 0 139 +335 50 438 -12 1396 1418 10 920 0 +336 441 7 20 1404 1849 10 0 873 +337 462 14 -10 1231 2066 10 452 0 +338 360 294 9 5625 5836 10 0 178 +339 58 39 12 4673 4750 10 0 156 +340 58 391 -21 3388 3791 10 254 0 +341 410 285 -20 730 931 10 472 0 +342 96 97 20 735 1002 10 0 422 +343 21 64 20 1275 1663 10 0 914 +344 238 210 -20 142 1049 10 763 0 +345 479 121 -10 1140 1442 10 950 0 +346 200 178 -10 97 772 10 660 0 +347 216 341 19 2330 3022 10 0 442 +348 48 437 -30 3128 3422 10 609 0 +349 200 270 20 144 448 10 0 77 +350 357 181 20 519 796 10 0 730 +351 476 174 30 1340 1374 10 0 677 +352 400 286 -10 530 804 10 532 0 +353 351 481 -21 1148 1547 10 451 0 +354 270 400 -30 530 681 10 149 0 +355 95 234 10 498 928 10 0 622 +356 128 113 -20 1346 1675 10 976 0 +357 133 455 -9 3054 3530 10 739 0 +358 16 463 -30 1523 1596 10 975 0 +359 59 388 20 2556 2866 10 0 509 +360 376 190 30 617 745 10 0 602 +361 481 122 -20 1095 1388 10 896 0 +362 266 405 20 808 1049 10 0 480 +363 374 232 33 213 789 10 0 68 +364 398 20 -10 866 1406 10 169 0 +365 481 26 30 1189 1385 10 0 121 +366 63 444 -30 1393 1766 10 689 0 +367 89 290 20 516 945 10 0 618 +368 246 314 -25 5788 5895 10 409 0 +369 40 304 -20 4392 4885 10 583 0 +370 262 369 15 388 767 10 0 974 +371 323 29 7 4461 4759 10 0 557 +372 89 65 16 2827 3055 10 0 895 +373 144 35 26 917 1001 10 0 543 +374 200 265 10 666 674 10 0 744 +375 436 264 20 643 849 10 0 707 +376 15 457 20 1102 1606 10 0 489 +377 397 20 -20 1086 1274 10 528 0 +378 328 491 -30 2517 3030 10 719 0 +379 399 175 -10 2861 3234 10 768 0 +380 432 2 -22 1782 2071 10 784 0 +381 63 336 20 912 1338 10 0 425 +382 6 296 10 1285 1394 10 0 536 +383 146 376 8 951 1044 10 0 308 +384 295 247 -20 5054 5493 10 971 0 +385 235 33 -13 5338 5478 10 940 0 +386 233 204 20 164 390 10 0 136 +387 142 360 -19 6087 6289 10 140 0 +388 177 156 25 535 923 10 0 663 +389 315 287 -20 534 770 10 87 0 +390 452 172 -20 2295 2691 10 274 0 +391 263 153 -12 1484 1936 10 796 0 +392 493 493 -15 3294 3678 10 194 0 +393 320 283 30 389 616 10 0 216 +394 64 5 -10 4361 4791 10 488 0 +395 95 235 -18 595 651 10 305 0 +396 203 211 -10 5103 5469 10 811 0 +397 16 497 -23 1509 2017 10 835 0 +398 348 348 -12 3555 4043 10 863 0 +399 485 104 21 3106 3369 10 0 804 +400 330 147 -9 3126 3782 10 781 0 +401 443 237 20 679 948 10 0 233 +402 316 286 30 451 762 10 0 655 +403 335 46 -24 5325 5529 10 570 0 +404 381 495 20 1242 1458 10 0 439 +405 364 173 30 533 1029 10 0 675 +406 267 162 -36 5620 6094 10 48 0 +407 214 245 8 36 426 10 0 626 +408 92 234 10 784 1215 10 0 923 +409 347 459 25 1738 2218 10 0 368 +410 30 7 23 4566 5063 10 0 151 +411 120 37 -26 2908 3415 10 632 0 +412 397 153 -10 3417 3763 10 81 0 +413 210 29 -18 4231 4295 10 333 0 +414 87 285 -20 998 1051 10 116 0 +415 132 32 -30 3058 3338 10 743 0 +416 390 294 -15 655 1363 10 989 0 +417 67 451 -30 4649 5196 10 318 0 +418 24 68 20 1575 1860 10 0 28 +419 146 439 10 1007 1187 10 0 815 +420 209 212 -20 5942 6401 10 872 0 +421 6 292 -17 816 1244 10 817 0 +422 18 63 -20 1052 1780 10 342 0 +423 149 98 -20 4701 4740 10 517 0 +424 91 268 -10 850 1227 10 134 0 +425 103 177 -20 2428 2704 10 381 0 +426 367 178 -10 473 1090 10 709 0 +427 225 269 -12 5055 5232 10 641 0 +428 443 246 20 820 1137 10 0 123 +429 306 42 -40 1734 2200 10 5 0 +430 374 306 4 3857 4216 10 0 597 +431 413 421 10 1164 1379 10 0 104 +432 470 405 -18 3538 3988 10 1 0 +433 33 278 18 5843 6175 10 0 302 +434 149 458 -14 4528 4903 10 319 0 +435 257 57 -27 4809 5118 10 493 0 +436 272 403 30 630 1008 10 0 876 +437 221 291 9 81 408 10 0 107 +438 1 101 -8 4863 5316 10 92 0 +439 332 459 -20 1379 1691 10 404 0 +440 220 392 -20 889 1293 10 878 0 +441 253 50 -20 683 1243 10 500 0 +442 250 441 -19 2868 3298 10 347 0 +443 471 484 10 1255 1583 10 0 651 +444 480 152 -10 3932 4361 10 278 0 +445 404 83 -20 1001 1506 10 579 0 +446 476 94 20 988 1290 10 0 978 +447 458 213 -40 4452 4694 10 172 0 +448 215 395 -40 980 1076 10 225 0 +449 85 288 -1 647 929 10 538 0 +450 179 75 -30 2820 3219 10 457 0 +451 228 287 21 43 405 10 0 353 +452 397 18 10 1085 1371 10 0 337 +453 238 204 -20 205 753 10 272 0 +454 488 3 3 1459 1865 10 0 122 +455 407 88 10 1194 1521 10 0 22 +456 459 14 -12 1007 1595 10 720 0 +457 120 17 30 972 1381 10 0 450 +458 235 316 2 2492 2875 10 0 968 +459 370 382 -25 3524 3666 10 330 0 +460 405 454 11 5122 5421 10 0 83 +461 17 458 10 1489 2095 0 0 1008 +462 43 135 31 665 1230 10 0 770 +463 318 497 -16 3366 3584 10 807 0 +464 199 268 -20 123 567 10 176 0 +465 111 467 20 1012 1404 10 0 130 +466 138 438 20 1070 1349 10 0 911 +467 172 314 -35 1981 2502 10 508 0 +468 494 468 -20 1260 1679 10 821 0 +469 35 303 20 624 1148 10 0 786 +470 341 59 27 3060 3379 10 0 209 +471 423 221 -14 964 1222 10 38 0 +472 395 295 20 579 1231 10 0 341 +473 413 417 10 1358 1610 10 0 224 +474 339 60 20 686 1121 10 0 196 +475 277 428 -30 1848 2194 10 229 0 +476 176 199 28 187 531 10 0 788 +477 265 240 9 18 385 10 0 166 +478 365 190 -10 5646 6293 10 504 0 +479 133 53 -10 799 1556 10 754 0 +480 387 488 -20 1344 1672 10 362 0 +481 385 295 20 474 664 10 0 66 +482 491 369 -14 2712 3245 10 644 0 +483 445 273 -10 873 1309 10 516 0 +484 195 273 22 188 288 10 0 799 +485 313 493 -17 4659 5005 10 8 0 +486 495 227 -20 1164 1707 10 143 0 +487 241 403 10 710 1172 10 0 549 +488 30 72 10 1637 1935 10 0 394 +489 21 487 -20 1425 1498 10 376 0 +490 324 99 10 1131 1692 10 0 667 +491 453 318 -10 1397 1713 10 958 0 +492 443 272 -10 876 1405 10 155 0 +493 447 184 27 1633 1882 10 0 435 +494 366 288 -14 2631 2959 10 24 0 +495 440 284 -15 3205 3728 10 29 0 +496 13 314 14 864 1206 10 0 306 +497 72 227 25 2173 2457 10 0 292 +498 377 385 6 3392 3657 10 0 831 +499 477 478 20 1452 1807 10 0 936 +500 204 185 20 548 878 10 0 441 +501 226 191 20 293 571 10 0 827 +502 330 138 -10 4306 4691 10 146 0 +503 185 434 9 2081 2627 10 0 138 +504 483 22 10 1310 1483 10 0 478 +505 71 282 -11 2495 2759 10 80 0 +506 60 5 -28 4221 4248 10 942 0 +507 189 402 -10 1923 2486 10 847 0 +508 134 211 35 348 736 10 0 467 +509 146 313 -20 4647 5036 10 359 0 +510 21 146 -10 1992 2023 10 126 0 +511 37 281 -25 1817 2249 10 696 0 +512 416 417 20 1211 1653 10 0 95 +513 44 311 -20 1521 1858 10 818 0 +514 361 181 -20 606 1090 10 74 0 +515 444 242 -19 810 1034 10 114 0 +516 444 271 10 860 1225 10 0 483 +517 359 179 20 367 1051 10 0 423 +518 388 334 20 589 795 10 0 260 +519 401 164 -21 2503 2587 10 854 0 +520 499 316 18 2325 2769 10 0 69 +521 399 106 -20 1095 1439 10 267 0 +522 425 215 -10 920 1032 10 300 0 +523 407 98 10 683 1066 10 0 721 +524 406 460 2 2898 2976 10 0 257 +525 88 95 -17 999 1284 10 27 0 +526 95 64 -12 2951 3296 10 904 0 +527 306 229 -20 5066 5616 10 63 0 +528 273 55 20 649 921 10 0 377 +529 384 149 -19 4712 4986 10 561 0 +530 122 35 -10 916 1165 10 653 0 +531 308 199 -30 5998 6188 10 673 0 +532 390 301 10 616 825 10 0 352 +533 300 108 10 497 708 10 0 765 +534 267 400 10 789 1189 0 0 1002 +535 8 300 -10 1192 1774 10 647 0 +536 105 181 -10 5957 6412 10 382 0 +537 398 325 -20 805 1181 10 685 0 +538 166 247 1 250 423 10 0 449 +539 140 431 30 621 1154 10 0 752 +540 253 118 19 2215 2283 10 0 565 +541 359 246 -12 5557 5946 10 648 0 +542 321 277 10 124 484 10 0 631 +543 168 59 -26 1392 1657 10 373 0 +544 406 285 20 683 866 10 0 724 +545 391 334 20 677 891 10 0 567 +546 437 19 -20 3802 4429 10 708 0 +547 201 278 13 105 346 10 0 858 +548 435 267 -24 1140 1562 10 556 0 +549 245 408 -10 717 1033 10 487 0 +550 16 462 -19 1282 1924 10 642 0 +551 107 374 -10 3662 3772 10 40 0 +552 477 97 10 924 1458 10 0 219 +553 346 57 -10 1210 1375 10 235 0 +554 14 459 -10 1395 1411 10 157 0 +555 102 6 3 5692 6095 10 0 109 +556 359 287 24 308 612 10 0 548 +557 297 131 -7 4556 4888 10 371 0 +558 282 1 -10 4122 4337 10 954 0 +559 21 70 15 2853 3437 10 0 270 +560 440 244 10 691 1557 10 0 303 +561 482 104 19 3082 3498 10 0 529 +562 120 261 -20 3015 3452 10 197 0 +563 125 29 30 1005 1381 10 0 310 +564 292 32 -10 756 1198 10 760 0 +565 262 92 -19 2536 2628 10 540 0 +566 68 160 -15 4271 4936 10 688 0 +567 405 276 -20 941 1053 10 545 0 +568 277 50 10 814 888 10 0 965 +569 32 319 -10 1470 1855 10 60 0 +570 344 70 24 4346 4940 10 0 403 +571 481 84 -10 1937 2227 10 150 0 +572 21 68 20 1474 1857 10 0 935 +573 441 244 -20 1023 1313 10 691 0 +574 57 43 -25 3985 4322 10 584 0 +575 1 293 10 1074 1189 10 0 64 +576 481 96 20 1131 1365 10 0 963 +577 471 368 -40 1560 1985 10 26 0 +578 236 126 23 209 790 10 0 852 +579 406 99 20 741 1196 10 0 445 +580 303 186 -7 5205 5749 10 775 0 +581 225 369 -10 340 632 10 59 0 +582 412 453 -20 1083 1413 10 71 0 +583 104 349 20 3975 4219 10 0 369 +584 173 182 25 222 599 10 0 574 +585 111 464 10 1076 1529 10 0 740 +586 53 440 -20 1173 1532 10 311 0 +587 69 336 20 823 1042 10 0 75 +588 359 182 20 680 1113 10 0 320 +589 13 459 20 1278 1616 10 0 593 +590 244 277 -10 4916 5614 10 793 0 +591 484 177 -10 938 1195 10 692 0 +592 452 206 31 1745 2313 10 0 115 +593 22 483 -20 1075 1533 10 589 0 +594 452 110 14 1171 1671 10 0 780 +595 347 192 -40 5705 6320 10 809 0 +596 95 92 20 903 1239 10 0 816 +597 368 311 -4 3605 3924 10 430 0 +598 479 387 -13 1493 1807 10 133 0 +599 479 169 20 1014 1574 10 0 711 +600 497 266 25 2876 3225 10 0 247 +601 66 336 10 931 1215 10 0 857 +602 376 195 -30 572 996 10 360 0 +603 401 281 -30 783 1426 10 792 0 +604 441 177 23 4041 4088 10 0 207 +605 231 203 20 204 448 10 0 695 +606 21 488 10 1300 1710 10 0 812 +607 231 204 20 433 888 10 0 129 +608 122 422 3 5711 6064 0 0 1007 +609 65 453 30 991 1382 10 0 348 +610 206 261 10 499 1080 10 0 76 +611 466 149 -2 4463 5145 10 749 0 +612 313 119 30 670 1176 10 0 205 +613 90 274 -20 597 958 10 304 0 +614 39 162 -16 2135 2507 10 988 0 +615 35 306 -30 710 1246 10 937 0 +616 437 15 -10 1445 1517 10 175 0 +617 307 412 8 1527 1822 10 0 992 +618 79 291 -20 745 1046 10 367 0 +619 64 437 -10 3560 3905 10 624 0 +620 376 92 -10 3735 4310 10 990 0 +621 129 27 10 1248 1253 10 0 190 +622 196 489 -10 3997 4365 10 355 0 +623 51 286 -10 5589 6202 10 628 0 +624 20 488 10 1293 1806 10 0 619 +625 13 455 -20 1082 1524 10 659 0 +626 170 347 -8 1755 1852 10 407 0 +627 92 230 -23 474 1156 10 6 0 +628 117 467 10 855 1181 10 0 623 +629 413 217 20 603 830 10 0 298 +630 405 450 -26 880 1226 10 88 0 +631 394 322 -10 3944 4375 10 542 0 +632 125 61 26 2215 2799 10 0 411 +633 238 123 -2 2925 3444 10 750 0 +634 11 403 -11 1333 1531 10 833 0 +635 89 272 -10 679 974 10 14 0 +636 304 102 30 803 891 10 0 762 +637 478 121 40 1267 1403 10 0 729 +638 408 84 -20 982 1413 10 89 0 +639 376 494 30 870 1408 10 0 289 +640 20 73 10 1046 1276 10 0 294 +641 159 299 12 3916 4328 10 0 427 +642 95 382 19 639 1331 10 0 550 +643 352 63 -20 4556 4990 10 51 0 +644 365 274 14 265 675 10 0 482 +645 30 301 10 1090 1250 10 0 993 +646 351 5 12 1867 2221 10 0 226 +647 197 267 10 429 560 10 0 535 +648 498 171 12 4950 5221 10 0 541 +649 468 352 -13 2696 3570 10 227 0 +650 418 251 21 4579 5116 10 0 269 +651 489 437 -10 2732 3042 10 443 0 +652 251 63 -10 3765 4254 10 293 0 +653 132 55 10 925 1333 10 0 530 +654 281 96 -8 4204 4922 10 982 0 +655 333 293 -30 2418 2639 10 402 0 +656 255 487 19 1254 2050 10 0 237 +657 207 400 20 716 929 10 0 703 +658 469 489 -30 2064 2499 10 999 0 +659 244 254 20 174 749 10 0 625 +660 233 207 10 79 372 10 0 346 +661 441 60 -10 5715 6075 10 732 0 +662 411 379 25 4740 4926 10 0 802 +663 178 72 -25 2793 3382 10 388 0 +664 51 447 10 1096 1380 10 0 972 +665 478 118 -30 1371 1583 10 117 0 +666 141 426 -7 1973 2399 10 980 0 +667 295 89 -10 2763 3293 10 490 0 +668 112 433 29 879 1121 10 0 32 +669 320 211 -30 3857 4204 10 849 0 +670 400 103 10 902 1263 10 0 901 +671 408 453 10 946 1439 10 0 200 +672 435 180 -20 752 1164 10 135 0 +673 432 66 30 4321 4369 10 0 531 +674 374 116 9 2292 2525 10 0 997 +675 478 102 -30 1099 1615 10 405 0 +676 335 57 -17 639 1049 10 929 0 +677 385 239 -30 3021 3384 10 351 0 +678 386 245 -11 1777 2174 10 794 0 +679 208 396 -30 605 927 10 855 0 +680 380 489 20 1546 1606 10 0 712 +681 380 498 -20 1089 1410 10 915 0 +682 440 7 20 1208 1422 10 0 108 +683 434 245 -20 1359 1494 10 693 0 +684 90 232 -10 794 1019 10 871 0 +685 389 334 20 525 947 10 0 537 +686 241 205 30 398 665 10 0 808 +687 18 24 -10 2428 2719 10 851 0 +688 57 183 15 4284 4638 10 0 566 +689 59 457 30 1179 1615 10 0 366 +690 442 243 10 933 1495 10 0 91 +691 402 281 20 777 1344 10 0 573 +692 445 237 10 739 985 10 0 591 +693 441 273 20 1082 1297 10 0 683 +694 31 175 -16 782 1310 10 47 0 +695 234 202 -20 205 552 10 605 0 +696 52 303 25 1549 2100 10 0 511 +697 167 445 7 5566 5850 10 0 113 +698 179 286 -10 1396 1453 10 286 0 +699 269 48 -18 959 1406 10 715 0 +700 165 59 -20 3397 4266 10 212 0 +701 461 8 20 1256 1816 10 0 132 +702 421 415 30 772 1231 10 0 262 +703 59 459 -20 1125 1485 10 657 0 +704 24 492 -10 1873 1943 10 747 0 +705 55 449 20 874 1355 10 0 966 +706 224 192 10 131 549 10 0 885 +707 444 269 -20 680 1309 10 375 0 +708 491 20 20 1528 1740 10 0 546 +709 313 126 10 919 1147 10 0 426 +710 283 438 -20 706 1265 10 327 0 +711 352 241 -20 3175 3283 10 599 0 +712 398 476 -20 1552 1912 10 680 0 +713 442 247 -20 893 1156 10 105 0 +714 217 207 -7 5550 5629 10 158 0 +715 233 87 18 925 1215 10 0 699 +716 479 127 20 919 1359 10 0 757 +717 6 53 -20 2227 2588 10 312 0 +718 478 300 -10 3388 3849 10 894 0 +719 378 493 30 983 1392 10 0 378 +720 303 78 12 439 1001 10 0 456 +721 344 62 -10 1310 1581 10 523 0 +722 371 315 -13 4425 5022 10 181 0 +723 200 78 31 3880 4181 10 0 186 +724 413 391 -20 677 1179 10 544 0 +725 415 216 10 546 985 10 0 215 +726 397 57 -20 5634 6294 10 41 0 +727 293 228 19 48 480 10 0 142 +728 0 297 10 798 1665 10 0 907 +729 435 20 -40 1388 1783 10 637 0 +730 195 111 -20 3892 4213 10 350 0 +731 417 218 10 1109 1235 10 0 23 +732 340 54 10 797 1226 10 0 661 +733 132 57 -10 780 1296 10 959 0 +734 210 379 12 2398 3393 10 0 324 +735 228 260 -6 6312 6653 10 913 0 +736 399 104 10 952 1486 0 0 1006 +737 95 277 20 1111 1204 10 0 154 +738 360 284 -20 2480 2973 10 11 0 +739 53 466 9 1262 1538 10 0 357 +740 112 465 -10 907 1606 10 585 0 +741 313 391 5 630 687 10 0 774 +742 93 235 10 876 1213 10 0 18 +743 125 32 30 827 1369 10 0 415 +744 215 282 -10 5485 6158 10 374 0 +745 224 320 -12 5043 5347 10 217 0 +746 134 428 -10 1014 1570 10 65 0 +747 26 490 10 1705 2214 10 0 704 +748 44 115 -20 716 1255 10 845 0 +749 438 127 2 3760 3887 10 0 611 +750 239 15 2 2299 2651 10 0 633 +751 342 54 20 860 1259 10 0 969 +752 109 463 -30 1277 1511 10 539 0 +753 199 187 20 363 770 10 0 944 +754 201 188 10 558 672 10 0 479 +755 399 301 30 616 1058 0 0 1009 +756 484 171 -20 1146 1320 10 875 0 +757 272 234 -20 6371 6472 10 716 0 +758 380 350 15 3359 3692 10 0 202 +759 140 108 -30 4193 4497 10 787 0 +760 228 199 10 384 810 10 0 564 +761 245 461 -26 2449 2866 10 244 0 +762 305 107 -30 619 1302 10 636 0 +763 231 195 20 360 634 10 0 344 +764 450 265 10 748 1102 10 0 897 +765 273 149 -10 5816 6325 10 533 0 +766 12 358 7 4828 5086 10 0 86 +767 315 121 10 705 1040 10 0 824 +768 420 213 10 646 1102 10 0 379 +769 331 134 -24 4423 4687 10 956 0 +770 84 377 -31 3552 3978 10 462 0 +771 320 280 10 248 552 10 0 291 +772 89 185 16 2186 2733 10 0 177 +773 472 481 20 1165 1567 10 0 801 +774 422 420 -5 845 1376 10 741 0 +775 475 267 7 3093 3264 10 0 580 +776 470 125 20 833 1191 0 0 1010 +777 435 268 10 1192 1421 10 0 928 +778 409 155 19 449 1033 10 0 192 +779 243 248 30 7 442 10 0 266 +780 488 96 -14 4143 4507 10 594 0 +781 341 72 9 3164 3395 10 0 400 +782 58 449 30 1425 1597 10 0 295 +783 16 460 -30 1378 2028 10 987 0 +784 480 136 22 1006 1048 10 0 380 +785 162 388 11 4532 4596 0 0 1001 +786 47 208 -20 698 1233 10 469 0 +787 324 127 30 293 856 10 0 759 +788 87 96 -28 1142 1232 10 476 0 +789 140 137 32 2224 2454 10 0 879 +790 314 205 -10 5963 6371 10 813 0 +791 96 346 26 623 979 10 0 147 +792 321 280 30 276 435 10 0 603 +793 245 251 10 5 513 10 0 590 +794 436 295 11 2040 2306 10 0 678 +795 274 261 -20 6692 7083 10 170 0 +796 271 128 12 1248 1637 10 0 391 +797 275 45 -30 718 1198 10 981 0 +798 422 409 10 593 1281 10 0 892 +799 146 188 -22 4865 5135 10 484 0 +800 93 96 20 745 1179 10 0 73 +801 409 255 -20 5916 6383 10 773 0 +802 449 428 -25 4989 5106 10 662 0 +803 90 285 40 834 1496 10 0 919 +804 415 95 -21 4612 4921 10 399 0 +805 88 287 30 985 1242 10 0 50 +806 379 196 -30 635 1037 10 162 0 +807 368 452 16 2676 2804 10 0 463 +808 202 186 -30 446 883 10 686 0 +809 435 11 40 1111 1387 10 0 595 +810 269 46 -10 911 1357 10 859 0 +811 7 292 10 912 1060 10 0 396 +812 44 496 -10 1339 1996 10 606 0 +813 478 99 10 1096 1514 10 0 790 +814 391 99 -20 692 960 10 933 0 +815 132 477 -10 1293 1446 10 419 0 +816 24 65 -20 1378 1665 10 596 0 +817 130 247 17 363 598 10 0 421 +818 133 273 20 428 526 10 0 513 +819 347 62 -20 1306 1482 10 841 0 +820 404 140 -25 4915 5275 10 275 0 +821 416 420 20 1063 1374 10 0 468 +822 67 335 20 688 1367 10 0 189 +823 92 270 -10 1011 1164 10 45 0 +824 411 95 -10 797 1265 10 767 0 +825 132 479 11 1014 1047 10 0 255 +826 366 334 -10 1525 1877 10 148 0 +827 125 39 -20 870 1092 10 501 0 +828 419 422 -10 955 1375 10 297 0 +829 460 2 20 1227 1717 10 0 167 +830 67 334 20 913 1054 10 0 307 +831 448 414 -6 4836 5066 10 498 0 +832 46 163 -33 3618 3911 10 7 0 +833 77 465 11 785 1422 10 0 634 +834 284 319 -20 3028 3626 10 328 0 +835 102 422 23 659 1270 10 0 397 +836 240 34 -10 6237 6360 10 31 0 +837 141 428 -40 683 986 10 17 0 +838 204 269 30 85 314 10 0 161 +839 144 439 -18 874 1415 10 144 0 +840 470 417 11 2809 3206 10 0 72 +841 404 103 20 724 1328 10 0 819 +842 5 281 16 5418 5675 10 0 221 +843 487 320 -10 3252 3730 10 55 0 +844 398 23 -20 853 1315 10 941 0 +845 90 296 20 499 833 10 0 748 +846 386 13 10 1268 1548 10 0 259 +847 115 465 10 923 1296 10 0 507 +848 473 475 10 1494 1965 10 0 290 +849 275 42 30 907 1114 10 0 669 +850 286 356 -30 310 585 10 93 0 +851 15 69 10 1175 1278 10 0 687 +852 267 44 -23 694 1473 10 578 0 +853 243 399 -24 821 1176 10 886 0 +854 390 249 21 2206 2567 10 0 519 +855 210 391 30 458 794 10 0 679 +856 433 15 20 974 1408 10 0 183 +857 24 259 -10 1364 1716 10 601 0 +858 12 463 -13 1287 1720 10 547 0 +859 237 213 10 577 718 10 0 810 +860 182 480 31 1326 1712 10 0 173 +861 409 88 -20 858 1424 10 20 0 +862 244 368 -10 1521 1911 10 230 0 +863 381 328 12 2580 3279 10 0 398 +864 213 185 21 74 651 10 0 314 +865 482 141 -26 3989 4217 10 985 0 +866 319 124 -30 629 915 10 316 0 +867 141 431 30 852 1011 10 0 309 +868 198 264 20 595 647 10 0 984 +869 69 334 30 616 1152 10 0 100 +870 299 98 30 507 947 10 0 57 +871 240 250 10 29 390 10 0 684 +872 199 203 20 5638 6140 10 0 420 +873 459 17 -20 1531 1879 10 336 0 +874 423 217 20 902 1152 10 0 888 +875 477 179 20 628 1274 10 0 756 +876 213 397 -30 804 1055 10 436 0 +877 405 187 -15 4778 5347 10 926 0 +878 269 402 20 800 943 10 0 440 +879 53 204 -32 4163 4397 10 789 0 +880 13 394 -20 1519 1581 10 220 0 +881 15 68 -32 882 1660 10 234 0 +882 56 268 -22 4142 4489 10 199 0 +883 360 184 10 793 1099 10 0 35 +884 307 102 40 719 1079 10 0 54 +885 130 57 -10 882 1098 10 706 0 +886 250 328 24 934 1175 10 0 853 +887 91 231 -20 608 1114 10 991 0 +888 479 176 -20 820 1191 10 874 0 +889 420 224 -10 1547 2004 10 21 0 +890 461 182 -20 2345 2807 10 891 0 +891 418 218 20 919 1338 10 0 890 +892 419 418 -10 957 1154 10 798 0 +893 336 493 -1 5857 6207 10 182 0 +894 389 300 10 426 924 10 0 718 +895 92 76 -16 4538 4693 10 372 0 +896 476 102 20 1237 1572 10 0 361 +897 418 399 -10 1589 2033 10 764 0 +898 109 56 27 691 1228 10 0 174 +899 13 465 31 2954 3354 10 0 946 +900 92 232 -10 550 983 10 252 0 +901 394 47 -10 1305 1318 10 670 0 +902 16 287 -30 964 1323 10 967 0 +903 399 102 20 1018 1238 10 0 287 +904 143 158 12 468 753 10 0 526 +905 18 484 10 1308 1412 10 0 120 +906 250 411 -30 598 1025 10 240 0 +907 19 273 -10 3922 4331 10 728 0 +908 365 28 9 841 1425 10 0 288 +909 387 297 10 389 853 10 0 960 +910 433 447 20 2755 3718 10 0 912 +911 214 274 -20 5385 5688 10 466 0 +912 489 338 -20 5473 5825 10 910 0 +913 130 494 6 2988 3202 10 0 735 +914 23 67 -20 1443 1790 10 343 0 +915 374 489 20 916 1239 10 0 681 +916 126 30 -10 858 1436 10 44 0 +917 112 467 -21 1036 1292 10 228 0 +918 489 274 31 2040 2350 10 0 191 +919 61 214 -40 1221 1633 10 803 0 +920 166 440 12 526 1136 10 0 335 +921 56 75 24 5453 6168 10 0 153 +922 210 276 5 47 492 10 0 185 +923 80 286 -10 829 1082 10 408 0 +924 17 459 -20 1606 1891 10 996 0 +925 66 448 10 876 1287 10 0 268 +926 351 128 15 4802 5343 10 0 877 +927 352 176 20 311 697 10 0 171 +928 490 286 -10 1997 2300 10 777 0 +929 247 219 17 31 369 10 0 676 +930 86 268 -20 681 1176 10 945 0 +931 398 329 -20 597 746 10 983 0 +932 272 402 10 500 896 10 0 256 +933 317 123 20 546 1096 10 0 814 +934 408 318 15 2463 2802 10 0 250 +935 66 31 -20 4157 4350 10 572 0 +936 425 448 -20 3144 3331 10 499 0 +937 35 304 30 785 1075 10 0 615 +938 471 94 -7 4045 4066 10 331 0 +939 470 473 -20 1707 1860 10 253 0 +940 224 56 13 4660 4952 10 0 385 +941 343 47 20 931 1404 10 0 844 +942 52 18 28 3268 3707 10 0 506 +943 16 68 20 1278 1352 10 0 99 +944 195 185 -20 390 627 10 753 0 +945 92 236 20 739 1443 10 0 930 +946 76 462 -31 3753 4015 10 899 0 +947 124 56 20 713 1138 10 0 53 +948 481 454 14 1167 1517 10 0 58 +949 477 483 -10 1359 1687 10 3 0 +950 481 124 10 911 1477 10 0 345 +951 389 156 27 2806 3038 10 0 284 +952 384 16 20 1264 1661 10 0 131 +953 492 34 -20 3153 3451 10 998 0 +954 371 200 10 802 1113 10 0 558 +955 153 235 10 256 530 10 0 203 +956 428 202 24 3405 3945 10 0 769 +957 257 391 -26 6313 6871 10 141 0 +958 421 218 10 635 1517 10 0 491 +959 206 186 10 407 1214 10 0 733 +960 393 301 -10 663 883 10 909 0 +961 204 187 -10 497 1025 10 261 0 +962 468 475 -20 989 1518 10 56 0 +963 477 122 -20 1321 1439 10 576 0 +964 100 66 -32 5415 5902 10 79 0 +965 489 27 -10 1404 2086 10 568 0 +966 12 451 -20 1102 1390 10 705 0 +967 197 270 30 270 616 10 0 902 +968 311 422 -2 3787 4236 10 458 0 +969 489 17 -20 1338 1822 10 751 0 +970 13 214 -8 5360 5589 10 995 0 +971 440 247 20 811 1333 10 0 384 +972 28 467 -10 5236 5625 10 664 0 +973 388 325 -25 1080 1147 10 301 0 +974 270 401 -15 310 989 10 370 0 +975 5 445 30 1193 1414 10 0 358 +976 198 271 20 198 597 10 0 356 +977 480 131 5 2670 2950 10 0 103 +978 437 98 -20 4255 4774 10 446 0 +979 131 246 -1 3070 3706 10 265 0 +980 49 437 7 1320 2220 10 0 666 +981 270 49 30 1075 1381 10 0 797 +982 337 41 8 3917 4222 10 0 654 +983 318 280 20 153 742 10 0 931 +984 154 392 -20 411 961 10 868 0 +985 493 111 26 2069 2379 10 0 865 +986 399 450 -34 1312 1677 10 271 0 +987 67 452 30 940 1336 10 0 783 +988 34 239 16 840 1031 10 0 614 +989 343 276 15 109 664 10 0 416 +990 393 12 10 1149 1445 10 0 620 +991 236 247 20 178 362 10 0 887 +992 340 291 -8 1722 2162 10 617 0 +993 3 292 -10 1018 1146 10 645 0 +994 209 68 -3 6108 6556 10 187 0 +995 18 225 8 2704 2947 10 0 970 +996 147 435 20 859 1221 10 0 924 +997 335 99 -9 4797 5070 10 674 0 +998 485 24 20 1059 1630 10 0 953 +999 470 475 30 1115 1487 10 0 658 +1000 341 58 10 856 1053 10 0 263 +1001 162 388 -11 4532 4596 10 785 0 +1002 267 400 -10 789 1189 10 534 0 +1003 458 16 -20 1052 1453 10 231 0 +1004 30 155 -9 4973 5391 10 313 0 +1005 241 180 -13 6824 6853 10 317 0 +1006 399 104 -10 952 1486 10 736 0 +1007 122 422 -3 5711 6064 10 608 0 +1008 17 458 -10 1489 2095 10 461 0 +1009 399 301 -30 616 1058 10 755 0 +1010 470 125 -20 833 1191 10 776 0 diff --git a/jsprit-instances/src/main/java/readers/ChristofidesReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/ChristofidesReader.java similarity index 92% rename from jsprit-instances/src/main/java/readers/ChristofidesReader.java rename to jsprit-instances/src/main/java/jsprit/instance/reader/ChristofidesReader.java index 75c6d000..1ad414d9 100644 --- a/jsprit-instances/src/main/java/readers/ChristofidesReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/ChristofidesReader.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import java.io.BufferedReader; @@ -22,18 +22,17 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; + import org.apache.log4j.Logger; -import readers.ChristofidesReader; -import util.Coordinate; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; /** * Reader that reads Christophides, Mingozzi and Toth instances. diff --git a/jsprit-instances/src/main/java/readers/CordeauReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/CordeauReader.java similarity index 93% rename from jsprit-instances/src/main/java/readers/CordeauReader.java rename to jsprit-instances/src/main/java/jsprit/instance/reader/CordeauReader.java index b738d02c..77d1214a 100644 --- a/jsprit-instances/src/main/java/readers/CordeauReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/CordeauReader.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import java.io.BufferedReader; @@ -24,19 +24,18 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.vehicle.PenaltyVehicleType; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleImpl.Builder; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; + import org.apache.log4j.Logger; -import readers.CordeauReader; -import util.Coordinate; -import basics.VehicleRoutingProblem.FleetSize; -import basics.route.PenaltyVehicleType; -import basics.route.VehicleImpl; -import basics.route.VehicleImpl.Builder; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; -import basics.Service; -import basics.VehicleRoutingProblem; /** * Reader that reads instances developed by: diff --git a/jsprit-instances/src/main/java/readers/FigliozziReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/FigliozziReader.java similarity index 92% rename from jsprit-instances/src/main/java/readers/FigliozziReader.java rename to jsprit-instances/src/main/java/jsprit/instance/reader/FigliozziReader.java index 02dff2c4..5ead2c58 100644 --- a/jsprit-instances/src/main/java/readers/FigliozziReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/FigliozziReader.java @@ -14,26 +14,25 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import java.util.List; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Builder; +import jsprit.core.problem.cost.VehicleRoutingTransportCosts; +import jsprit.core.problem.driver.Driver; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.util.CrowFlyCosts; +import jsprit.core.util.Locations; + import org.apache.log4j.Logger; -import util.CrowFlyCosts; -import util.Locations; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.Builder; -import basics.costs.VehicleRoutingTransportCosts; -import basics.route.Driver; -import basics.route.Vehicle; public class FigliozziReader { public static class TDCosts implements VehicleRoutingTransportCosts { - private static Logger log = Logger.getLogger(TDCosts.class); - private List timeBins; private List speed; diff --git a/jsprit-instances/src/main/java/jsprit/instance/reader/LiLimReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/LiLimReader.java new file mode 100644 index 00000000..e5a755f9 --- /dev/null +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/LiLimReader.java @@ -0,0 +1,223 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3.0 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + ******************************************************************************/ +package jsprit.instance.reader; + + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.Builder; +import jsprit.core.problem.job.Shipment; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; +import jsprit.core.util.Locations; + +import org.apache.log4j.Logger; + + +/** + * test instances for the capacitated vrp with pickup and deliveries and time windows. + * instances are from li and lim and can be found at: + * http://www.top.sintef.no/vrp/benchmarks.html + * @author stefan schroeder + * + */ + + +public class LiLimReader { + + static class MyLocations implements Locations{ + + private Map locations = new HashMap(); + + public void addLocation(String id, Coordinate coord){ + locations.put(id, coord); + } + + @Override + public Coordinate getCoord(String id) { + return locations.get(id); + } + } + + static class CustomerData{ + public Coordinate coord; + public double start; + public double end; + public double serviceTime; + + public CustomerData(Coordinate coord, double start, double end, double serviceTime) { + super(); + this.coord = coord; + this.start = start; + this.end = end; + this.serviceTime = serviceTime; + } + } + + static class Relation{ + public String from; + public String to; + public int demand; + public Relation(String from, String to, int demand) { + super(); + this.from = from; + this.to = to; + this.demand = demand; + } + + } + + private static Logger logger = Logger.getLogger(LiLimReader.class); + + private VehicleRoutingProblem.Builder vrpBuilder; + + private int vehicleCapacity; + + private String depotId; + + private Map customers; + + private Collection relations; + + private double depotOpeningTime; + + private double depotClosingTime; + + private int fixCosts = 0; + + public LiLimReader(Builder vrpBuilder) { + customers = new HashMap(); + relations = new ArrayList(); + this.vrpBuilder = vrpBuilder; + } + + public LiLimReader(Builder builder, int fixCosts) { + customers = new HashMap(); + relations = new ArrayList(); + this.vrpBuilder = builder; + this.fixCosts = fixCosts; + } + + public void read(String filename){ + readShipments(filename); + buildShipments(); + VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("type", vehicleCapacity) + .setCostPerDistance(1.0).setFixedCost(fixCosts).build(); + Vehicle vehicle = VehicleImpl.Builder.newInstance("vehicle") + .setEarliestStart(depotOpeningTime).setLatestArrival(depotClosingTime) + .setLocationCoord(customers.get(depotId).coord).setType(type).build(); + vrpBuilder.addVehicle(vehicle); + } + + private void buildShipments() { + Integer counter = 0; + for(Relation rel : relations){ + counter++; + String from = rel.from; + String to = rel.to; + int demand = rel.demand; + Shipment s = Shipment.Builder.newInstance(counter.toString(), demand) + .setPickupCoord(customers.get(from).coord).setPickupServiceTime(customers.get(from).serviceTime) + .setPickupTimeWindow(TimeWindow.newInstance(customers.get(from).start, customers.get(from).end)) + .setDeliveryCoord(customers.get(to).coord).setDeliveryServiceTime(customers.get(to).serviceTime) + .setDeliveryTimeWindow(TimeWindow.newInstance(customers.get(to).start, customers.get(to).end)).build(); + vrpBuilder.addJob(s); + } + + } + + private BufferedReader getReader(String file) { + BufferedReader reader = null; + try { + reader = new BufferedReader(new FileReader(file)); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + logger.error(e1); + System.exit(1); + } + return reader; + } + + private void readShipments(String file) { + BufferedReader reader = getReader(file); + String line = null; + boolean firstLine = true; + try { + while((line = reader.readLine()) != null){ + line = line.replace("\r", ""); + line = line.trim(); + String[] tokens = line.split("\t"); + if(firstLine){ + int vehicleCapacity = getInt(tokens[1]); + this.vehicleCapacity = vehicleCapacity; + firstLine = false; + continue; + } + else{ + String customerId = tokens[0]; + Coordinate coord = makeCoord(tokens[1], tokens[2]); + int demand = getInt(tokens[3]); + double startTimeWindow = getDouble(tokens[4]); + double endTimeWindow = getDouble(tokens[5]); + double serviceTime = getDouble(tokens[6]); +// vrpBuilder.addLocation(customerId, coord); + customers.put(customerId, new CustomerData(coord,startTimeWindow,endTimeWindow, serviceTime)); + if(customerId.equals("0")){ + depotId = customerId; + depotOpeningTime = startTimeWindow; + depotClosingTime = endTimeWindow; + } + if(demand > 0){ + relations.add(new Relation(customerId,tokens[8],demand)); + } + } + } + reader.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + private Coordinate makeCoord(String xString, String yString) { + double x = Double.parseDouble(xString); + double y = Double.parseDouble(yString); + return new Coordinate(x,y); + } + + private double getDouble(String string) { + return Double.parseDouble(string); + } + + private int getInt(String string) { + return Integer.parseInt(string); + } + + +} diff --git a/jsprit-instances/src/main/java/readers/LuiShenReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/LuiShenReader.java similarity index 91% rename from jsprit-instances/src/main/java/readers/LuiShenReader.java rename to jsprit-instances/src/main/java/jsprit/instance/reader/LuiShenReader.java index 4c5e2022..67e374d3 100644 --- a/jsprit-instances/src/main/java/readers/LuiShenReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/LuiShenReader.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import java.io.BufferedReader; @@ -22,20 +22,19 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetComposition; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; + import org.apache.log4j.Logger; -import readers.LuiShenReader; -import util.Coordinate; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetComposition; -import basics.VehicleRoutingProblem.FleetSize; -import basics.route.TimeWindow; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; public class LuiShenReader { diff --git a/jsprit-instances/src/main/java/readers/SolomonReader.java b/jsprit-instances/src/main/java/jsprit/instance/reader/SolomonReader.java similarity index 92% rename from jsprit-instances/src/main/java/readers/SolomonReader.java rename to jsprit-instances/src/main/java/jsprit/instance/reader/SolomonReader.java index d9bc15d1..a03e0d79 100644 --- a/jsprit-instances/src/main/java/readers/SolomonReader.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/SolomonReader.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import java.io.BufferedReader; @@ -22,19 +22,18 @@ import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.solution.route.activity.TimeWindow; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.core.problem.vehicle.VehicleImpl; +import jsprit.core.problem.vehicle.VehicleTypeImpl; +import jsprit.core.util.Coordinate; + import org.apache.log4j.Logger; -import readers.SolomonReader; -import util.Coordinate; -import basics.route.TimeWindow; -import basics.route.Vehicle; -import basics.route.VehicleImpl; -import basics.route.VehicleType; -import basics.route.VehicleTypeImpl; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; /** * Reader that reads the well-known solomon-instances. diff --git a/jsprit-instances/src/main/java/readers/Taillard.java b/jsprit-instances/src/main/java/jsprit/instance/reader/Taillard.java similarity index 99% rename from jsprit-instances/src/main/java/readers/Taillard.java rename to jsprit-instances/src/main/java/jsprit/instance/reader/Taillard.java index 498d3156..0367806a 100644 --- a/jsprit-instances/src/main/java/readers/Taillard.java +++ b/jsprit-instances/src/main/java/jsprit/instance/reader/Taillard.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; //package instances; // //import java.io.BufferedReader; diff --git a/jsprit-instances/src/main/java/util/Instances.java b/jsprit-instances/src/main/java/jsprit/instance/util/Instances.java similarity index 98% rename from jsprit-instances/src/main/java/util/Instances.java rename to jsprit-instances/src/main/java/jsprit/instance/util/Instances.java index 93e14f96..8efe9b4f 100644 --- a/jsprit-instances/src/main/java/util/Instances.java +++ b/jsprit-instances/src/main/java/jsprit/instance/util/Instances.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package util; +package jsprit.instance.util; import java.io.BufferedReader; import java.io.File; @@ -26,10 +26,12 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import readers.ChristofidesReader; -import readers.CordeauReader; -import readers.SolomonReader; -import basics.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.util.BenchmarkInstance; +import jsprit.instance.reader.ChristofidesReader; +import jsprit.instance.reader.CordeauReader; +import jsprit.instance.reader.SolomonReader; + public class Instances { diff --git a/jsprit-instances/src/main/java/readers/LiLim.java b/jsprit-instances/src/main/java/readers/LiLim.java deleted file mode 100644 index 70506407..00000000 --- a/jsprit-instances/src/main/java/readers/LiLim.java +++ /dev/null @@ -1,219 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2013 Stefan Schroeder - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see . - ******************************************************************************/ -package readers; -//package instances; -// -//import java.io.BufferedReader; -//import java.io.IOException; -//import java.util.ArrayList; -//import java.util.Collection; -//import java.util.HashMap; -//import java.util.Map; -// -//import org.apache.log4j.Level; -//import org.apache.log4j.Logger; -//import org.matsim.contrib.freight.vrp.algorithms.rr.RuinAndRecreate; -//import org.matsim.contrib.freight.vrp.basics.Job; -//import org.matsim.contrib.freight.vrp.basics.Shipment; -//import org.matsim.contrib.freight.vrp.basics.VehicleRoutingProblem; -//import org.matsim.contrib.freight.vrp.basics.VrpBuilder; -//import org.matsim.contrib.freight.vrp.utils.Coordinate; -//import org.matsim.contrib.freight.vrp.utils.CrowFlyCosts; -//import org.matsim.contrib.freight.vrp.utils.Locations; -//import org.matsim.core.utils.io.IOUtils; -// -///** -// * test instances for the capacitated vrp with pickup and deliveries and time windows. -// * instances are from li and lim and can be found at: -// * http://www.top.sintef.no/vrp/benchmarks.html -// * @author stefan schroeder -// * -// */ -// -// -//public class LiLim { -// -// static class MyLocations implements Locations{ -// -// private Map locations = new HashMap(); -// -// public void addLocation(String id, Coordinate coord){ -// locations.put(id, coord); -// } -// -// @Override -// public Coordinate getCoord(String id) { -// return locations.get(id); -// } -// } -// -// static class CustomerData{ -// public double start; -// public double end; -// public double serviceTime; -// public CustomerData(double start, double end, double serviceTime) { -// super(); -// this.start = start; -// this.end = end; -// this.serviceTime = serviceTime; -// } -// } -// -// static class Relation{ -// public String from; -// public String to; -// public int demand; -// public Relation(String from, String to, int demand) { -// super(); -// this.from = from; -// this.to = to; -// this.demand = demand; -// } -// -// } -// -// private static Logger logger = Logger.getLogger(Christophides.class); -// -// private VrpBuilder vrpBuilder; -// -//// private Locations locations; -// -// private String fileNameOfInstance; -// -// private int vehicleCapacity; -// -// private String depotId; -// -// private Map data; -// -// private Collection relations; -// -// private String instanceName; -// public LiLim(String fileNameOfInstance, String instanceName) { -// this.fileNameOfInstance = fileNameOfInstance; -// this.instanceName = instanceName; -// data = new HashMap(); -// relations = new ArrayList(); -// } -// -// public static void main(String[] args) { -// Logger.getRootLogger().setLevel(Level.INFO); -// LiLim liLim = new LiLim("/Users/stefan/Documents/workspace/VehicleRouting/instances/cvrppdtw_lilim/pdp100/lc205.txt", "lc205"); -// liLim.run(); -// } -// -// public void run(){ -// MyLocations myLocations = new MyLocations(); -// Collection jobs = new ArrayList(); -// readLocationsAndJobs(myLocations); -// buildJobs(jobs); -// VrpBuilder vrpBuilder = new VrpBuilder(new CrowFlyCosts(myLocations)); -// for(Job j : jobs){ -// vrpBuilder.addJob(j); -// } -// for(int i=0;i<20;i++){ -// vrpBuilder.addVehicle(VrpUtils.createVehicle("" + (i+1), depotId, vehicleCapacity, "standard",100.0,1.0,1.0)); -// } -// RuinAndRecreate algo = createAlgo(vrpBuilder.build()); -// algo.run(); -// } -// -// private void buildJobs(Collection jobs) { -// Integer counter = 0; -// for(Relation rel : relations){ -// counter++; -// String from = rel.from; -// String to = rel.to; -// Shipment s = VrpUtils.createShipment(counter.toString(), from, to, rel.demand, -// VrpUtils.createTimeWindow(data.get(from).start, data.get(from).end), -// VrpUtils.createTimeWindow(data.get(to).start, data.get(to).end)); -// s.setPickupServiceTime(data.get(from).serviceTime); -// s.setDeliveryServiceTime(data.get(to).serviceTime); -// jobs.add(s); -// } -// -// } -// -// private RuinAndRecreate createAlgo(VehicleRoutingProblem vrp) { -//// PickupAndDeliveryTourWithTimeWindowsAlgoFactory factory = new PickupAndDeliveryTourWithTimeWindowsAlgoFactory(); -//// factory.setIterations(100); -//// factory.setWarmUp(10); -//// RuinAndRecreateChartListener chartListener = new RuinAndRecreateChartListener(); -//// chartListener.setFilename("vrp/liLim/"+instanceName+".png"); -//// RuinAndRecreateReport report = new RuinAndRecreateReport(); -//// factory.addRuinAndRecreateListener(chartListener); -//// factory.addRuinAndRecreateListener(report); -//// return factory.createAlgorithm(vrp); -// return null; -// } -// -// private void readLocationsAndJobs(MyLocations locs) { -// BufferedReader reader = IOUtils.getBufferedReader(fileNameOfInstance); -// String line = null; -// boolean firstLine = true; -// try { -// while((line = reader.readLine()) != null){ -// line = line.replace("\r", ""); -// line = line.trim(); -// String[] tokens = line.split("\t"); -// if(firstLine){ -// int vehicleCapacity = getInt(tokens[1]); -// this.vehicleCapacity = vehicleCapacity; -// firstLine = false; -// continue; -// } -// else{ -// String customerId = tokens[0]; -// Coordinate coord = makeCoord(tokens[1], tokens[2]); -// if(customerId.equals("0")){ -// depotId = customerId; -// } -// int demand = getInt(tokens[3]); -// double startTimeWindow = getDouble(tokens[4]); -// double endTimeWindow = getDouble(tokens[5]); -// double serviceTime = getDouble(tokens[6]); -// locs.addLocation(customerId, coord); -// data.put(customerId, new CustomerData(startTimeWindow,endTimeWindow,serviceTime)); -// if(demand > 0){ -// relations.add(new Relation(customerId,tokens[8],demand)); -// } -// } -// } -// reader.close(); -// } catch (IOException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// -// } -// -// private Coordinate makeCoord(String xString, String yString) { -// double x = Double.parseDouble(xString); -// double y = Double.parseDouble(yString); -// return new Coordinate(x,y); -// } -// -// private double getDouble(String string) { -// return Double.parseDouble(string); -// } -// -// private int getInt(String string) { -// return Integer.parseInt(string); -// } -// -// -//} diff --git a/jsprit-instances/src/test/java/readers/ChristophidesReaderTest.java b/jsprit-instances/src/test/java/jsprit/instance/reader/ChristophidesReaderTest.java similarity index 93% rename from jsprit-instances/src/test/java/readers/ChristophidesReaderTest.java rename to jsprit-instances/src/test/java/jsprit/instance/reader/ChristophidesReaderTest.java index a03cfeab..008899c2 100644 --- a/jsprit-instances/src/test/java/readers/ChristophidesReaderTest.java +++ b/jsprit-instances/src/test/java/jsprit/instance/reader/ChristophidesReaderTest.java @@ -14,16 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import static org.junit.Assert.assertEquals; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.instance.reader.ChristofidesReader; import org.junit.Test; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.route.Vehicle; public class ChristophidesReaderTest { diff --git a/jsprit-instances/src/test/java/readers/CordeauReaderTest.java b/jsprit-instances/src/test/java/jsprit/instance/reader/CordeauReaderTest.java similarity index 95% rename from jsprit-instances/src/test/java/readers/CordeauReaderTest.java rename to jsprit-instances/src/test/java/jsprit/instance/reader/CordeauReaderTest.java index f5cd0fe3..35f2304f 100644 --- a/jsprit-instances/src/test/java/readers/CordeauReaderTest.java +++ b/jsprit-instances/src/test/java/jsprit/instance/reader/CordeauReaderTest.java @@ -14,17 +14,18 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.instance.reader.CordeauReader; import org.junit.Test; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.route.Vehicle; public class CordeauReaderTest { diff --git a/jsprit-instances/src/test/java/readers/LuiShenReaderTest.java b/jsprit-instances/src/test/java/jsprit/instance/reader/LuiShenReaderTest.java similarity index 88% rename from jsprit-instances/src/test/java/readers/LuiShenReaderTest.java rename to jsprit-instances/src/test/java/jsprit/instance/reader/LuiShenReaderTest.java index 20c87bf6..651cb7bf 100644 --- a/jsprit-instances/src/test/java/readers/LuiShenReaderTest.java +++ b/jsprit-instances/src/test/java/jsprit/instance/reader/LuiShenReaderTest.java @@ -14,16 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import static org.junit.Assert.assertEquals; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetComposition; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.instance.reader.LuiShenReader; import org.junit.Before; import org.junit.Test; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetComposition; -import basics.VehicleRoutingProblem.FleetSize; public class LuiShenReaderTest { diff --git a/jsprit-instances/src/test/java/readers/SolomonReaderTest.java b/jsprit-instances/src/test/java/jsprit/instance/reader/SolomonReaderTest.java similarity index 94% rename from jsprit-instances/src/test/java/readers/SolomonReaderTest.java rename to jsprit-instances/src/test/java/jsprit/instance/reader/SolomonReaderTest.java index 9ad40926..ade886d0 100644 --- a/jsprit-instances/src/test/java/readers/SolomonReaderTest.java +++ b/jsprit-instances/src/test/java/jsprit/instance/reader/SolomonReaderTest.java @@ -14,16 +14,17 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . ******************************************************************************/ -package readers; +package jsprit.instance.reader; import static org.junit.Assert.assertEquals; +import jsprit.core.problem.VehicleRoutingProblem; +import jsprit.core.problem.VehicleRoutingProblem.FleetSize; +import jsprit.core.problem.job.Service; +import jsprit.core.problem.vehicle.Vehicle; +import jsprit.instance.reader.SolomonReader; import org.junit.Test; -import basics.Service; -import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.FleetSize; -import basics.route.Vehicle; public class SolomonReaderTest {