ГЛАВА 4 СЕТЕВАЯ ТРАНСПОРТНАЯ ЗАДАЧА 4.1. Постановка задачи и ее математическая модель В больших задачах, связанных с планированием перевозок массовых грузов, например, строительных материалов, в масштабе Тюменской области или угля в масштабе всей России, как правило, имеются сотни пунктов производства и порядка тысячи пунктов потребления. Если планирование таких перевозок осуществлять на основе транспортной задачи в матричной постановке, то потребуется предварительно рассчитать затраты ci j , связанные с перевозкой единицы груза из каждого пункта производства в каждый пункт потребления. А это означает, что соответствующая матрица затрат будет содержать сотни тысяч элементов. Подготовка столь обширной исходной информации, а также ее хранение и практическое использование в процессе счета связаны с большими, порой непреодолимыми, трудностями. Между тем реальные перевозки массовых грузов осуществляются, как правило, по железнодорожным или автодорожным сетям. Число участков (дорог) в таких сетях обычно лишь немногим превосходит количество связываемых пунктов. Поэтому естественно попытаться поставить задачу таким образом, чтобы в ней использовалась лишь информация о затратах по перевозке единицы продукта по каждому участку сети. Тогда при тех же сотнях пунктов производства и порядка тысячи пунктов потребления исходная информация о затратах будет содержать лишь две-три тысячи величин. Отметим еще, что в сетевой постановке ограничения по пропускным способностям отдельных участков сети учитываются с помощью стандартных приемов, таких, как алгоритмический учет двусторонних ограничений в задаче линейного программирования. Предположим теперь, что имеющиеся пункты производства и потребления расположены на некоторой транспортной сети, состоящей из n коммуникаций, связывающих между собой m пунктов, для большинства которых име216 ется возможность как ввозить, так и вывозить продукцию. Т. е. имеется транспортная сеть (нефтегазопроводы, железные или автомобильные дороги, телефонная сеть, сеть Интернет и др.), по которой перевозится однородная продукция (нефть, газ, уголь, строительные материалы, оборудование, информация). Для наглядности транспортную сеть изобразим графически. Для этого отведем каждому пункту сети некоторую точку плоскости, такие точки будем называть вершинами, а участки сети (коммуникации) будем изображать линиями и называть ребрами. Естественно, что при графическом изображении транспортной сети реальный масштаб не соблюдается. 7 3 10 74 35 4 1 6 3 8 5 0 1 4 2 10 -35 -82 2 8 4 4 5 2 -26 48 2 -52 5 11 1 6 7 -29 9 9 67 Рис. 4.1 На рис. 4.1 изображен неориентированный связный граф, где вершины изображены кружками, разделенными на две части. В верхней части находится номер i , в нижней - вещественное число bi . Если bi 0 , то это означает, что вершина i отвечает пункту производства с объемом производства bi единиц. Если bi 0 , то вершина i отвечает пункту потребления с объемом потребления | bi | единиц. Наконец, в случае bi = 0 , в соответствующем пункте рассматриваемый продукт не производится и не потребляется. Такие пункты используют- 217 ся только при транзитных перевозках. Нумерацию вершин будем вести слева направо, сверху вниз. Каждому ребру r поставлено в соответствие положительное число cr , которое может быть интерпретировано либо как расстояние, либо как стоимость перевозки единицы продукции из пункта i r в пункт j r по соответствующему участку сети ( ir , jr ) , если считать, что стоимость не зависит от направления перевозки. В нашем случае ребро отождествляется с неупорядоченной парой ir , jr , по которой номер ребра может быть однозначно определен. Поставки груза из вершины ir в вершину jr будем называть перевозками и на транспортной сети изображать стрелками, в кружке будем указывать количество перевозимого груза xr , а стрелкой - направление движения. К примеру, так: xr ir ñr Ш Ш Ш Ш jr Предполагается, что суммарный объем производства совпадает с суммарным объемом потребления. m bi = 0 (4.1) i =1 Целью задачи является удовлетворение потребностей всех потребителей за счет продукции, имеющейся у поставщиков при минимальных транспортных расходах, т.е. задача состоит в отыскании n -мерного вектора 218 X = ( x1 , x2 ,..., xn ) , xr 0, r = 1, n, (4.2) который определяет наименьшее значение целевой функции n f ( x) = cr xr . (4.3) r =1 В дальнейшем для сокращения записи неупорядоченной пары ir , jr будем использовать запись ( i, j ) èëè ( j , i ) . Это необходимо для компактной записи двойственной задачи и удобства изложения метода потенциалов. Каждой вершине i = 1, 2,..., m сопоставим переменную i . Из этих переменных составим вектор (1, 2 ,..., m ) . Тогда двойственная задача будет со- стоять в определении m -мерного вектора Y = (1 , 2 ,..., m ) (4.4) максимизирующего линейную функцию (Y ) = m bii , (4.5) i =1 при ограничениях i − j ci j . (4.6) Различия между транспортными задачами в матричной и сетевой постановках весьма незначительны и методы их решения основаны на одних и тех же идеях. Заметим, что если транспортная сеть является связной, то всегда можно построить допустимый план перевозок. Сеть называется связной, если в ней нет изолированных вершин, т.е. все вершины связаны между собой ребрами, по которым можно из любой вершины попасть в любую другую. 4.2. Метод потенциалов 219 Процесс решения транспортной задачи на сети методом потенциалов состоит из конечного числа итераций. Изложение метода проводится в предположении о невырожденности задачи, при условии, что опорный план построен. 4.2.1. Построение пробного опорного плана Никаких особых рекомендаций для построения пробного опорного плана не существует, поэтому можно начинать с любой вершины. Если начальная вершина соответствует пункту производства, то продукция из нее вывозится, и, следовательно, она является началом стрелки, которая должна входить в одну из смежных вершин. Если же начальная вершина является потребителем, то продукция в нее ввозится и поэтому она должна быть концом стрелки, выходящей из любой смежной вершины. В результате получим начальный опорный план, который должен удовлетворять следующим требованиям: 1. Все запасы должны быть вывезены, а потребности удовлетворены. 2. Все вершины должны быть задействованы, то есть в каждую вершину груз должен либо ввозиться, либо вывозиться из нее, либо ввозиться и вывозиться. 3. Число базисных ребер должно быть на единицу меньше числа вершин. 4. Базисные перевозки не должны образовывать циклов. Требования 2 – 4 означают, что опорный план должен быть деревом, т. е. конечным связным графом, не содержащим циклов. 4.2.2. Вычисление потенциалов Для полученного опорного плана в каждой вершине вычисляются потенциалы. Один из потенциалов задается произвольно, остальные вычисляются по базисным ребрам. Пусть i, j - базисное ребро, зададим вершине i потенциал равный i , затем идем по базисному ребру, вычисляем потенциал j . Для это- го к известному потенциалу прибавим тариф ci j , если перевозка направлена от вершины i к вершине j и вычтем тариф, если перевозка направлена от j к i . Получим формулы для вычисления потенциалов: 220 j = i + ci j (4.7) j = i − ci j (4.8) 4.2.3. Проверка плана на оптимальность Имея ввиду найденные в п.2 потенциалы, для всех небазисных ребер вычисляются оценки: из абсолютной величины разности потенциалов вычитается стоимость перевозки единицы продукции ci j по заданному участку сети. i j = i − j − ci j (4.9) или, что то же самое, из большего потенциала вычитается меньший, а из полученной разности вычитается тариф. Если положительных оценок нет, рассматриваемое опорное решение оптимально, процесс окончен. Если имеются положительные оценки, то план не является оптимальным и его можно улучшить. Для улучшения плана перейдем к п. 4. Примечание к п.3. Оценки можно записывать около соответствующих ребер. В отличие от других показателей каждую оценку можно заключить в треугольник так, чтобы одна вершина касалась указанного ребра. 4.2.4. Построение нового плана Выбираем наибольшую положительную оценку. Пусть это будет i0 i1 = max i j 0 и i0 i1 . Ребро ( i0 , i1 ) объявляем разрешающим. Для улучшения плана следует увеличить перевозку по ребру ( i0 , i1 ) . Будущая перевозка по разрешающему ребру должна быть направлена от меньшего потенциала к большему, т.е. от i0 к i1 . Будущую перевозку назовем разрешающей стрелкой и изобразим так . Начиная от вершины i0 , строим цикл пересчета, который является последовательностью базисных ребер, замыкающейся на разрешающем ребре. Такой цикл всегда можно построить, причем только один. 221 Для определения величины корректировки плана необходимо выписать ребра, принадлежащие циклу, с указанием объемов и направления перевозок. (4.10) Величина корректировки плана равна минимальному значению перевозки из тех перевозок цикла, которые направлены против разрешающей стрелки. = min xi +1, i (4.11) 1 s Вносим изменения в план: перевозки, направленные против разрешающей стрелки уменьшаем на величину ; перевозки, совпадающие по направлению с разрешающей стрелкой, и перевозку по коммуникации ( i0 , i1 ) увеличи- ваем на эту же величину; перевозки, не вошедшие в цикл пересчета, оставляем без изменения. Ребро ( i0 , i1 ) включается в базис, в то же время ребро ( i +1 , i ) , на котором достигается величина , исключается из базиса. Общее количество базисных ребер сохраняется. Получим новый опорный план. Значение функции при этом будет равно f = f − i 0 , i1 В формуле (4.11) оценка (4.12) i0 , i1 0, величина корректировки 0, следова- тельно, значение функции уменьшится на величину = i 0 , i1 (4.13) Вернуться к п. 2, имея ввиду новое опорное решение. Пример 4.1. Найти оптимальный план транспортной задачи на сети, определяемой рис. 4.1, в каждой вершине которой записан номер i и объем производства-потребления bi , на каждом ребре указаны транспортные расходы. 222 Кроме того, введем вспомогательные обозначения: перевозки xij запишем около соответствующего ребра в кружок со стрелкой, указывающей , потенциалы i проставим у каждой вершины i и заклю- направление xi j чим в рамку шi ; оценки i j выпишем отдельно около небазисных ребер и об- ij . ведем треугольником Последовательность вычисления и записи величин xij , i , ij на схеме соответствует последовательности, указанной в алгоритме, то есть сначала вычисляются xi j , затем - i , наконец ij . Процесс решения задачи начинается с построения опорного плана. На рис. 4.2 показан пробный опорный план. Опишем, как он был построен. План X 0 . 7 3 74 74 1 35 10 4 6 35 3 8 5 45 0 1 -35 29 -82 4 4 37 63 2 8 15 5 10 4 2 0 -52 11 48 5 2 1 67 2 -26 6 7 -29 9 9 67 Рис. 4.2 Произвольно, в качестве точки отсчета был выбран пункт 3, который является поставщиком, с запасами в 74 единицы продукции. Из третьего в пятый пункт отправляем 74 единицы груза, затем из пятого везем 45 единиц в первый и 29 единиц в шестой. Из девятого отправим 67 единиц в восьмой, потребности 223 которого составляют 52 единицы; остатки в 15 единиц отправим в четвертый пункт. Теперь в четвертом пункте накопилось 63 единицы, которые можно перевезти во второй и далее 37 единиц в первый пункт. Из седьмого пункта перевезем 35 единиц в десятый. Перевозки, определенные для различных участков сети, на рис. 4.2 помещены в кружок со стрелкой, которая показывает направление перемещения груза. В результате проведенных операций все запасы вывезены, потребности всех потребителей удовлетворены, но с формальной точки зрения построение опорного плана еще не закончено, так как он не является деревом и состоит из двух связных компонент. Число базисных ребер здесь равно 8, а их должно быть 9, так как число вершин 10. Следовательно, на одном из ребер нужно включить фиктивную (нулевую) перевозку любого направления, но таким образом, чтобы не образовался цикл. Такую перевозку целесообразно направить из 8-й вершины в 10-ю. Это обусловлено минимальной стоимостью из всех возможных вариантов фиктивных поставок. Заметим также, что для транспортной задачи на сети не существует особых алгоритмов построения пробного опорного плана, которые в той или иной степени обеспечивали бы их приближение к оптимальному плану. Поэтому можно лишь дать практический совет, заключающийся в том, что при составлении опорного плана следует загрузить ребра с меньшими значениями удельных стоимостей, но выполнить это условие для начального плана достаточно трудно. Итак, полученный план является опорным, так как удовлетворяет всем требованиям опорного плана. Значение функции, которое соответствует построенному плану равно f 0 = 5 37 + 2 63 + 2 45 + 74 + 4 15 + 5 29 + 67 + 8 35 = 1027 . Проверка плана на оптимальность осуществляется с помощью потенциалов. Процесс вычисления потенциалов и порядок их записи в транспортной сети мы покажем на рис. 4.3. 224 Одной из вершин (например, 3) зададим произвольное значение потенциала 3 = 0. Запишем его около вершины 3 и обведем в рамку. -14 0 7 3 74 10 4 74 1 35 1 6 8 -6 5 45 3 0 1 -35 29 4 4 37 37 63 2 8 15 -26 0 -52 11 48 5 2 -8 1 -4 2 10 4 2 -82 5 35 3 67 6 7 -29 9 9 67 6 -2 Рис. 4.3 -9 Затем, двигаясь по базисным ребрам, вычисляем потенциалы остальных вершин. Так, вершины 3 и 5 являются смежными, причем перевозка направлена 5 = 3 + c3,5 = 0 + 1 = 1. Коммуникации от 3–й вершины к 5–й, следовательно (5,1) и (5,6) так же являются базисными, при этом груз отправлен из 5-й вершины в 1-ю и в 6-ю. Потенциал пятой вершины 5 известен, поэтому потенциалы искомых вершин вычисляются прибавлением тарифов к известному потенциалу: 1 = 5 + c5,1 = 1 + 2 = 3 и 6 = 5 + c5,6 = 1 + 5 = 6 . Коммуникация (1,2) так же являются базисной, но здесь перевозка направлена от 2-й вершины в 1ю, поэтому для определения искомого потенциала необходимо из известного потенциала вычесть тариф: 2 = 1 − c2,1 = 3 − 5 = −2. Далее, двигаясь по ба- зисному ребру из 2-й вершины в 4-ю против движения груза, определяем потенциал 4 = 2 − c4,2 = −2 − 2 = −4 . 225 Аналогично находим остальные потенциалы: 7 = 10 − c7,10 = −6 − 8 = −14, 9 = 8 − c8,9 = −8 − 1 = −9. После вычисления потенциалов находим оценки для небазисных ребер: (3,4), (3,7), (5,7), (5,10), (2,6), (6,9), (9,10). Они определяются по формуле (4.9) и равны соответственно: 3,4 = 4 − 3 = −4 − 0 − 6 = −2, 3,7 = 3 − 7 = 0 + 14 − 10 = 4, 5,7 = 5 − 7 = 1 + 14 − 3 = 12, 5,10 = 5 − 10 = 1 + 6 − 4 = 3, 2,6 = 2 − 6 = −2 − 6 − 7 = 1, 6,9 = 6 − 9 = 6 + 9 − 9 = 6, 9,10 = 9 − 10 = −9 + 6 − 11 = −8. Как видим, имеются положительные оценки, следовательно, построенный опорный план не является оптимальным и его можно улучшить. Наибольшая оценка 5,7 = max ( 3,7 = 4; 5,7 = 12; 5,10 = 3; 2,6 = 1; 6,9 = 6 ) = 12 . Ребро (7,5), объявляем разрешающим, направляем разрешающую стрелку (пока пустую) от вершины с меньшим потенциалом к вершине с большим потенциалом, т.е. от 7–й вершины к 5–й (на рис. 4.4 разрешающая стрелка намечена пунктиром). Для улучшения плана строим цикл пересчета, замыкающийся на ребре (7,5). Цикл пересчета на рис. 4.4 также намечен пунктирной линией. Во второй строке выписываем ребра, принадлежащие циклу пересчета. В первой строке, над ребрами с помощью стрелок укажем направление перевозок, а в третьей строке – объем перевозимого груза. В четвертой строке полученной конструкции запишем ющей стрелкой и + , если направление перевозки совпадает с разреша- − , в противном случае. → → → Ц : ( 7,5) ( 5,1) (1, 2 ) ( 2, 4 ) ( 4,8 ) (8,10 ) (10, 7 ) + 45 37 63 + − − 226 15 − 0 + 35 − Дальнейший ход решения задачи предусматривает изменение в распределении поставок. Определяем величину корректировки плана . Поскольку перевозки x2, 1 , x4, 2 , x8, 4 , x7, 10 направлены против разрешающей стрелки, величина полагается равной меньшей из них = min ( 37, 63, 15,35) = 15. -14 0 7 3 74 10 4 74 1 35 1 6 8 -6 5 45 3 0 1 10 4 2 -35 29 -82 4 37 63 4 48 5 2 2 8 15 5 35 3 0 -52 -8 11 1 -4 67 6 2 -26 7 -29 9 9 67 6 -2 Рис. 4.4 -9 Вносим изменение в план X 0 : перевозки из цикла, направленные против разрешающей стрелки уменьшим на ; перевозки из цикла, совпадающие по направлению с разрешающей стрелкой и перевозку по коммуникации (7,5) увеличим на эту же величину; перевозки, не вошедшие в цикл пересчета, остаются без изменения. Получим новые значения перевозок: x7,5 = 15, x5,1 = 60, x2,1 = 22, x4,2 = 48, x8,10 = 15, x7,10 = 20 . Улучшенный план X 1 представлен на рис. 4.5. Для того чтобы проследить за изменением целевой функции найдем величину «приращения» (в данном случае величину убывания). = 7, 5 = 15 12 = 180. 227 Переходим к новому опорному плану, значение функции при этом и будет равным f1 = f 0 − = 1027 − 180 = 847. уменьшится на величину План X 1 . -2 0 7 3 74 74 1 10 4 35 15 1 6 60 3 8 6 5 0 1 4 10 2 -35 29 -82 2 8 4 22 5 48 4 -52 -26 15 0 11 48 5 2 4 1 -4 2 20 3 67 6 7 -29 9 9 67 6 -2 3 Рис. 4.5 Значение функции f1 для контроля вычисляем непосредственно по формуле (4.3): f1 = 1 74 + 3 15 + 8 20 + 2 60 + 5 29 + 5 22 + 2 48 + 2 15 + 1 67 = 847. Как видим, результаты совпадают. Проведем вторую итерацию. План X 1 вновь подвергаем проверке на оптимальность. Опуская выкладки, аналогичные тем, которые приводились в первой итерации, вычисляем потенциалы и оценки. Результаты вычислений записываем непосредственно на схеме, изображенной на рис. 4.5. Пусть 3 = 0, тогда 5 = 0 + 1 = 1; 1 = 1 + 2 = 3; 6 = 1 + 5 = 6; 2 = 3 − 5 = −2; 4 = −2 − 2 = −4; 7 = 1 − 3 = −2; 10 = −2 + 8 = 6; 8 = 6 − 2 = 4; 9 = 4 − 1 = 3. 228 Для небазисных ребер (3,4), (3,7), (4,8), (5,10), (2,6), (6,9), (9,10) вычислим оценки: 3,4 = −4 − 0 − 6 = −2, 3,7 = 0 + 2 − 10 = −8, 4,8 = −4 − 4 − 4 = 4, 5,10 = 1 − 6 − 4 = 1, 2,6 = −2 − 6 − 7 = 1, 6,9 = 6 − 3 − 9 = −6, 9,10 = 3 − 6 − 11 = −8. Среди оценок имеются положительные оценки, план X 1 не является оптимальным. Причем наибольшая положительная оценка соответствует коммуникации (4, 8), только что вышедшей из базиса. Это свидетельствует о том, что мы не только не то количество груза везли, но еще и не в ту сторону. Улучшение плана будем проводить за счет увеличения перевозки x4,8 . Построим цикл пересчета, замыкающийся на коммуникации (4, 8) → → → Ц : ( 4,8 ) (8,10 ) (10, 7 ) ( 7,5) 15 + + 20 − 15 + → (5,1) (1, 2 ) ( 2, 4 ) 60 + 22 − 48 − . Величина корректировки плана определяется минимальной перевозкой из тех перевозок цикла пересчета, которые направлены против разрешающей стрелки = min ( 20, 22, 48) = 20 . Корректируем план X 1 : перевозку x4,8 включим в базис, а перевозку x7,10 исключим из базиса. Получим новые значения перевозок из цикла: x7,5 = 35, x5,1 = 80, x2,1 = 2, x4,2 = 28, x4,8 = 20, x8,10 = 35 . Перевозки, не вошедшие в цикл пересчета, остаются без изменения. Новый более экономный план X 2 представлен на рис.4.6. План X 2 . -2 0 7 3 74 1 74 6 80 3 10 4 1 -82 2 3 8 5 0 1 35 35 4 229 2 10 -35 29 8 2 35 Значение функции f 2 = 767 . Для плана X 2 потенциалы рассчитываем непосредственно на схеме и записываем их около своих вершин (рис. 4.6). Для небазисных ребер находим оценки: 3,4 = −2, 3,7 = −8, 7,10 = −4, 5,10 = −3, 2,6 = 1, 6,9 = −2, 9,10 = −8. Строим цикл пересчета → → Ц : ( 2, 6 ) ( 6,5 ) ( 5,1) (1, 2 ) , 29 80 2 − + − + откуда величина корректировки = min ( 29, 2 ) = 2. Вносим изменение в план X 2 : перевозки x5,6 , x2,1 уменьшим на = 2 , а перевозки x5,1 и x2,6 увеличим на эту же величину. После корректировки получим план X 3 (рис. 4.7). План X 3 . -2 0 7 3 74 1 74 82 -82 2 35 3 8 5 0 1 35 1 6 3 10 4 4 230 3 10 -35 27 8 2 35 Вычислив потенциалы и 3,7 = −8, 7,10 = −3, 5,10 = −2, оценки: 3,4 = −3, 1,2 = −1, 6,9 = −3, 9,10 = −8 убеждаемся в том, что план X 3 оптимален. Минимальные издержки на перевозку всей продукции составляют величину равную 765. Для контроля вычислим значение функции двойственной задачи 10 ( ) = bii = −82 3 − 26 ( −1) + 74 0 + 48 ( −3) + 0 1 − 29 6 + i =1 +35 ( −2 ) + 67 0 − 35 3 = −765. Дерево, соответствующее оптимальному решению транспортной задачи на сети имеет вид: (рис.4.7). -2 0 7 3 35 74 35 74 1 1 0 2 1 3 5 82 3 10 4 28 48 2 2 8 20 4 5231 -3 -26 -35 27 -82 2 3 -52 1 35 0 1 67 6 7 -29 9 Примечания. В процессе решения сетевой задачи могут возникнуть следующие ситуации: 1) при построении пробного плана число базисных ребер меньше, чем m − 1 ; 2) несколько наибольших положительных оценок; 3) величина корректировки достигается на нескольких перевозках; 4) в оптимальном плане нулевые оценки соответствуют небазисным ребрам; 5) наибольшая положительная оценка находится на ребре только что вышедшем из базиса. В первом случае в базис вводятся фиктивные перевозки, получается вырожденный опорный план. Зацикливание при решении сетевой задачи происходит крайне редко, поэтому с базисными нулями можно обращаться также как и с положительными перевозками. Во втором случае выбор разрешающего ребра произволен, но чаще из всех претендентов выбирают то ребро, которому соответствует меньшая удельная стоимость перевозки. В третьем – из базиса можно исключить только одно ребро, поэтому выводят ребро с большей удельной стоимостью перевозки. Остальным претендентам будут соответствовать базисные нули, при этом направление фиктивных перевозок должно оставаться прежним. Четвертая ситуация свидетельствует о том, что наряду с полученным оптимальным планом существуют альтернативные оптимальные планы. В пятом случае говорят, что мы не только не то количество груза везем, но еще и не в ту сторону. Разрешающая стрелка должна быть направлена в про232 тивоположную сторону по отношению к перевозке, только что вышедшей из базиса предыдущего опорного плана. Задачи 601 – 700 Ниже приведено 100 вариантов транспортной задачи в сетевой постановке. Каждая задача изображена в виде неориентированного связного графа. На ребрах записаны значения удельных стоимостей cr , на вершинах (в кружках) – значения запасов-потребностей bi . Построить пробный допустимый план, проверить его на оптимальность. В случае необходимости довести до оптимального плана методом потенциалов. 233 625 30 30 5 6 9 -10 -32 9 0 30 2 8 -28 5 9 6 6 37 5 9 -43 5 52 8 7 3 12 -48 12 626 14 13 23 3 27 21 22 2 -25 18 0 16 14 24 2 25 3 20 10 -70 9 20 2 10 26 12 -45 10 5 18 -38 627 12 2 37 3 10 9 -16 42 40 20 22 15 14 2 2 1 0 4 10 -14 14 4 6 8 -34 19 -25 234 3 1 8 -29 42 628 5 -8 13 4 1 2 26 -53 12 -20 -30 2 14 3 11 7 16 18 2 -5 15 0 6 3 5 -19 2 1 63 14 26 629 -10 8 14 -24 17 39 4 7 8 -36 0 6 10 12 2 1 5 -41 4 9 -18 22 2 1 68 17 40 3 0 18 9 12 3 4 12 -50 40 13 -15 14 -34 4 630 2 -35 9 18 8 32 19 3 3 0 52 0 4 5 6 21 -41 4 15 -19 8 11 2 -6 235 22 26 35 -22 11 631 68 9 29 19 16 29 -44 6 12 -34 3 8 6 0 4 -50 18 3 5 13 4 8 3 60 -70 2 43 17 -15 632 -24 24 36 40 18 -60 13 12 2 17 33 7 2 -16 11 47 -42 2 -19 21 50 633 9 15 5 35 -10 10 -36 3 9 21 7 13 3 -60 18 5 3 21 33 6 9 8 4 28 1 -15 6 8 -31 10 15 4 14 0 19 20 -33 50 10 0 236 -42 19 634 9 38 -26 18 18 19 25 -50 5 36 17 6 21 -36 13 2 60 9 11 2 5 8 3 9 0 12 11 -39 3 -29 635 -18 54 12 5 6 15 14 -30 16 3 12 8 12 7 51 4 -32 -40 2 18 14 -20 20 3 -19 0 13 60 14 8 -20 14 -28 7 19 40 636 3 18 -27 17 60 4 11 1 22 8 6 -33 19 5 3 15 -50 3 0 25 14 7 4 12 -18 237 637 -13 39 5 10 4 1 15 -10 20 13 9 3 33 3 -18 11 8 -9 2 2 16 6 2 3 12 14 15 10 0 -5 7 13 9 -41 -21 15 638 -18 13 -38 6 12 14 0 5 6 1 -17 3 48 10 -27 3 1 12 1 3 0 7 29 2 14 10 40 -7 639 -10 9 11 30 -50 12 24 28 13 22 -13 15 4 12 -39 3 -16 2 3 5 15 0 4 6 -20 8 2 4 -30 4 34 1 -8 9 238 10 47 -30 640 4 -43 5 -45 30 31 45 10 26 15 5 6 15 1 2 -10 0 16 18 10 6 4 3 40 20 25 9 -20 13 6 -15 641 -13 22 4 -6 4 3 5 2 8 18 4 -29 15 3 8 0 17 10 6 8 6 5 16 7 4 -17 13 5 3 16 -28 4 9 9 4 4 12 8 -4 10 31 38 5 3 21 0 15 10 12 19 20 16 -36 16 -26 7 3 11 18 30 -18 7 10 14 642 22 29 -19 -18 18 239 643 -24 29 25 -39 7 20 30 16 10 3 40 6 30 3 0 15 13 26 7 15 6 -40 14 -32 4 4 13 16 35 -10 1 20 -18 644 10 -26 7 16 13 16 22 25 26 -20 20 15 2 6 19 0 3 16 20 -27 17 40 4 13 15 10 8 -23 10 9 -31 -19 645 14 24 3 5 24 4 18 24 6 0 10 -30 2 33 3 -18 -14 15 16 9 8 22 -16 17 18 25 30 26 240 20 -19 20 646 -29 34 20 21 3 -10 9 50 13 20 15 3 3 -30 7 18 4 8 0 6 4 18 18 10 13 18 -6 5 12 -25 -30 647 28 30 10 21 16 -20 1 2 3 3 3 9 14 -61 10 6 17 0 26 30 -11 -14 2 9 4 15 13 5 -17 7 24 648 -15 15 -20 6 26 39 36 -10 5 6 -10 3 21 16 -10 8 2 0 16 20 3 -20 2 4 10 -23 30 8 6 18 241 18 24 649 42 6 3 38 20 13 -18 2 20 3 0 4 12 4 5 -39 14 30 28 1 3 -27 -21 16 14 -25 2 18 -24 650 -11 33 3 26 -9 10 2 -40 23 20 15 1 19 8 19 29 31 0 4 -28 3 1 23 16 24 50 15 17 4 -30 30 -38 651 -16 10 -25 12 17 20 5 3 10 50 5 -17 -40 1 5 15 8 13 20 10 9 14 25 0 2 21 2 1 13 26 -38 242 29 655 -50 24 14 10 26 10 1 22 18 17 24 18 1 6 -11 8 7 13 -36 3 19 3 11 5 -26 4 0 -8 -19 52 12 656 -30 -29 18 -28 29 9 2 16 31 48 4 19 0 24 18 -16 -26 2 3 7 5 10 14 35 15 34 25 3 -32 657 20 -31 8 8 8 13 30 30 18 41 25 7 16 -50 26 6 0 21 5 -12 16 20 3 16 7 -10 5 -28 18 12 -22 243 16