Задачи
Выпуклая оболочка решеточных точек
Выпуклая оболочка решеточных точек
\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