Трёхмерный пинбол в невесомости
Корпорация "Пинбол’Ко", занимающаяся изготовлением игровых автоматов, разработала концепцию новой игры. Автомат называется "Трехмерный пинбол в невесомости". Игра проходит внутри прямоугольного параллелепипеда со сторонами A, B и C, причем в нем сохраняется полная невесомость. Задача игрока – запустить шарик из определенной начальной точки в каком-либо направлении в свободный полет так, чтобы он задел как можно большее число разных стенок параллелепипеда и постараться при этом попасть в бонусную точку. Бонусная точка появляется лишь в том случае, если шарик ударился обо все стенки, но игроку заранее известно место ее появления. При полете шарик не теряет скорости, а при касании стенок отражается от них (происходит абсолютно упругое столкновение). За каждое касание стенки, которой шарик не касался до этого, игроку начисляется P очков. Игра заканчивается, если шарик повторно касается какой-либо стенки или прилетает в появившуюся бонусную точку. Причем во втором случае игроку начисляется дополнительный бонус. Величина этого бонуса – P/D, где D – дистанция, пройденная шариком за весь полет. Создателей игры заинтересовал вопрос – какой максимальный бонус можно получить при заданных размерах игрового параллелепипеда и заданных начальной и бонусной точке. Для этого очевидно понадобится программа. Узнав, что Ваня в данный момент занят, и не хочет отвлекаться на такие пустяковые услуги, инженеры "Пинбол’Ко" очень расстроились. Но до них дошли слухи, что в "Кроне" собрались талантливые программисты, и они решили обратиться за помощью к вам.
Итак, ваша задача – по заданным параметрам прямоугольного параллелепипеда, начальному местоположению шарика в нем (для простоты будем считать шарик точкой), а также координатам места появления бонусной точки, вычислить максимальный бонус, который можно получить, запустив шарик в каком-либо направлении.
Начало координат выбрано так, что совпадает с одной из вершин прямоугольного параллелепипеда, в котором происходит игра, а оси координат направлены к трем вершинам, имеющим с ней общие грани. При ударении об стенку, шарик меняет вектор своего движения по закону отражения. Если шарик сталкивается с гранью, то считается, что он столкнулся сразу с 2-мя сторонами, которые соединены этой гранью. Соответственно, он отражается от них обоих и игроку начисляется бонус как за попадание в 2 стенки (но если шарик до этого уже сталкивался хоть с одной из этих двух стенок, то игра заканчивается, а бонус за это столкновение не начисляется). Столкновение с вершиной параллелепипеда считается столкновением сразу с 3-мя сторонами, которым эта вершина принадлежит. В этом случае, так же как и в предыдущем - если шарик уже сталкивался хоть с одной из стенок, которым принадлежит вершина, которую он задел - игра заканчивается, а бонус за это столкновение не начисляется.
Входные данные
В первой строке входного файла заданы 3 целых положительных числа – A, B и C (2 ≤ A, B, C ≤ 1000). Длины прямоугольного параллелепипеда по направлениям OX, OY и OZ соответственно.
Во второй строке заданы три целых положительных числа – X_1, Y_1 и Z_1, задающие координаты начального нахождения шарика в параллелепипеде.
В третьей строке заданы три целых положительных числа – X_B, Y_B и Z_B, задающие координаты места появления бонусной точки. Все координаты находятся в пределах 0 < X < A, 0 < Y < B, 0 < Z < C.
В четвертой строке записано единственное целое положительное число – величина бонуса P (1 ≤ P ≤ 1000).
Выходные данные
В первую строку выходного файла вывести единственное число - максимально возможный бонус, который можно набрать при заданных параметрах игры, округленный до 4-х знаков после запятой.