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

Опукла оболонка точок гратки

Опукла оболонка точок гратки

\textit{Точкою гратки }будемо називати точку з цілочисельними координатами. \textit{Многокутником гратки} будемо називати многокугтник, усі вершини якого є точками гратки. Многокутник називається \textit{опуклим}, якщо відрізок, що з'єднує дві довільні його точки, лежить всередині (або на границі) многокутника. Або що те ж саме, що кожен внутрішній кут многокутника менший \textbf{180} градусів. Множиною \textbf{S} точок гратки \textit{опуклої оболонки} називається наименший опуклий многокутник (многуктник гратки), який міститу у собі усі точки множини. (Вершини опуклої оболонки повинні належати множині точок гратки \textbf{S}). Якщо усі точки лежать на одній прямій, то їх опуклою оболонкою буде відрізок (\textit{вироджений} многокутник -- як показано на самому правому рисунку). На рисунках нижче точки множини відмічено жирними точками, вершини опуклої оболонки - позначено \textbf{X}, а опуклу оболонку відображено у вигляді відрізків, які з'єднуть її вершины. Не усі точки на опуклій оболонці є їївершинами. \includegraphics{https://static.e-olymp.com/content/ff/ffeb9792655090791b473be62e79c217de879e55.jpg} Вершини многокутника гратки знаходяться у \textit{стандартному порядку}, якщо: a) Перша вершина має найбільшу \textbf{y} координату. Якщо дві вершини мають одинакову \textbf{y} координату, то пешою вважається та, у якій \textbf{x} менше. b) Вершини многокутника задаються за годинниковою стрілкою. Напишіть програму, яка читає множину точок гратки і виводить вершини опуклої оболонки у \textit{стандартному порядку}. \InputFile Перший рядок містить єдине ціле число \textbf{P}, (\textbf{1} ≤ \textbf{P} ≤ \textbf{1000}) - кількість тестів. Перший рядок кожного тесту містить його номер, пропуск і кількість точок \textbf{N} (\textbf{3} ≤ \textbf{N} ≤ \textbf{50}) у множині. Далі задано точки множини, не більш \textbf{5} точок у кожному рядку (останній рядок може містити і менше). Кожна точка задається двома цілими числами, відокремлених пропуском, які описують її \textbf{x} та \textbf{y} координату. \OutputFile Для кожного тесту потрібно вивести декілька рядків. Перший рядок містить номер тесту і кількість вершин в опуклій оболонці. Далі йдуть вершини опуклої оболонки у стандартному порядку, по одній вершині у рядку. Кожен рядок містить \textbf{x} та \textbf{y} координату вершини, відокремлені пропуском.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
4
1 25
2 1 7 1 1 2 9 2 1 3
10 3 1 4 10 4 1 5 10 5
2 6 10 6 2 7 9 7 3 8
8 8 4 9 7 9 6 2 3 3
5 4 7 5 8 6 4 6 3 7
2 30
3 9 6 9 3 8 9 8 3 7
12 7 2 6 12 6 2 5 12 5
2 4 12 4 1 3 11 3 1 2
11 2 1 1 11 1 1 0 10 0
4 -1 10 -1 7 -2 10 -2 5 0
7 3 4 5 6 8 3 1 2 6
3 3
3 1 2 2 1 3
4 6
1 3 19 1 4 2 2 1 11 2
10 1
Вихідні дані #1
1 10
4 9
7 9
10 6
10 3
9 2
7 1
2 1
1 2
1 5
2 7
2 8
3 9
6 9
12 7
12 4
10 -2
7 -2
1 0
1 3
3 2
1 3
3 1
4 4
1 3
11 2
19 1
2 1