eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків

Жук2

Навколо нас існує велика кількість задач на навігацію. Ця задача про алгоритм, який називається \textbf{Жук2}. \textbf{Жук}-алгоритми вирішують наступну навігаційную задачу. Є двомірна карта, яка містить перепони довільної форми, а також старт і финиш. Є "агент", який стоїт у початковій точці \textbf{S}, і його завдання полягає у тому, щоб дістатись до кінцевої точки \textbf{F}. Він знає координати кінцевої точки, і у довільний момент часу може визначити свої координатм. Агент має \textbf{O}(\textbf{1}) пам'яті, тому не може зберігати карту перешкод. Інформацію про зовнішній світ він може отримати, лише визначивши чи дотикається він перепони. Агент може рухатись вздовж перепон, слідуючи по їх границям. Задача агента полягає у тому щоб досягнути фінішу чи повідомити, що це зробити неможливо. Алгоритм \textbf{Жук2}, який належить множині \textbf{Жук-}алгоритмів, працює наступним чином: \textbf{1}. Рухаємся до \textbf{F} доки не буде мати місце одна з наступних умов: \begin{itemize} \item Досягнута кінцева точка. Алгоритм зупиняється. \item Зустріли перепону. Переходим до кроку \textbf{2}. \end{itemize} \textbf{2}. Позначимо поточну точку через \textbf{H}. Рухаємось навколо перепони за годинниковою стрілою доки не буде матиь місце одна з умов: \begin{itemize} \item Доягнута кінцева точка. Алгоритм зупиняється. \item Досягнута точка \textbf{H}. Тоді кінцева точка не досяжна. Алгоритм зупиняється. \item Досягнута точка \textbf{L}, яка лежить на прямій \textbf{SF}, \textbf{|LF|} < \textbf{|HF|} і при цьому можна рухатись у напрямку до \textbf{F}, не потрапивши відразу на перепону. У цьому випадку переходимо до кроку \textbf{1}. \end{itemize} \includegraphics{https://static.e-olymp.com/content/cd/cda7c02c89b054e054c4142163478d006d73fe04.jpg} Можна довести коректність алгоритму. Тобто той факт, що агент або досягне кінцевої точки за скінчений час (дожина результуючого шляху скінченна), або повідомить, що кінцева точка не досяжна за скінчений час. За заданою множиною перепон, а також координатам початкової та кінцевої точки, потрібно визначити довжину шляху, який пройде агент згідно алгоритму \textbf{Жук2}. \InputFile Перший рядок містить п'ять цілих чисел \textbf{n}, \textbf{x_S}, \textbf{y_S}, \textbf{x_F}, \textbf{y_F} - кількість перепон та координати початкової і кінцевої точки. Вхідні дані, що задишились, описують перепони. Опис кожної перепони починається з кількості вершин \textbf{m} (\textbf{m }≥ \textbf{3}) у ній. Наступні \textbf{m} рядків описують цілочисельні координати \textbf{x_i}, \textbf{y_i }вершин перепон у порядку їх обходу за годинниковою стрілкою. Перепони не мають самоперетинів та самодотиків. Загальна кількість вершин у всіх перепонах не перевищує \textbf{300000}. Жодна з координат по модулю не більша \textbf{10^6}. Жодна з вершин перепон не лежить на прямій \textbf{SF}. Початкова та кінцева точки лежать строго поза перепонами. Ніякі дві перепони не мають спільної точки. Для довільних двох точок \textbf{A} та \textbf{B}, у яки перепони перетинають пряму \textbf{SF}, виконується або \textbf{|AF| = |BF|}, або \textbf{||AF| - |BF||} > \textbf{10^\{-6\}}. \OutputFile Вивести довжину шляху, пройденого агентом згідно описаного алгоритму. Допустима помилка порядку \textbf{10^\{-6\}}.
Ліміт часу 3 секунди
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
1 0 2 6 2
8
1 0
1 3
2 3
2 1
4 1
4 3
5 3
5 0
Вихідні дані #1
10.0