Задачі
Опукла оболонка точок гратки
Опукла оболонка точок гратки
\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
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