Altair 像往常一样在平面上玩点。在某个时刻,他发现了一个可以和你一起玩的新游戏。
他在二维平面上制作了一个有 $k$ 条边的凸多边形。这个多边形有一个非常好的性质:没有任意两条边是平行的。然后,他将多边形的每一条边延长为直线,并求出了每一对直线之间的交点。
现在他把得到的这些点交给你。你需要找出最初的多边形。
输入格式
第一行包含一个整数 $n$ ($1 \le n \le 200$):点的数量。
接下来的 $n$ 行,每行包含四个整数 $p_x, q_x, p_y, q_y$ ($-10^6 \le p_x, p_y \le 10^6, 1 \le q_x, q_y \le 10^6$):第 $i$ 个点的坐标。$X$ 坐标等于 $p_x/q_x$,$Y$ 坐标等于 $p_y/q_y$。保证 $p_x$ 和 $q_x$ 互质,$p_y$ 和 $q_y$ 互质。
保证该多边形可以由给定的点唯一确定。
输出格式
第一行输出一个整数 $k$:多边形的边数。
你可以以任意顺序输出多边形的顶点。
接下来的 $k$ 行,每行包含四个整数 $p_x, q_x, p_y, q_y$ ($-10^6 \le p_x, p_y \le 10^6, 1 \le q_x, q_y \le 10^6$):多边形顶点的坐标。$X$ 坐标等于 $p_x/q_x$,$Y$ 坐标等于 $p_y/q_y$。$p_x$ 和 $q_x$ 必须互质,$p_y$ 和 $q_y$ 必须互质。
样例
输入 1
6 1 1 2 1 12 5 24 5 0 1 0 1 3 1 3 1 -3 1 0 1 4 1 0 1
输出 1
4 0 1 0 1 1 1 2 1 3 1 3 1 4 1 0 1