连点成线
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

~~~~~~小红有一个 n \times n 大小的格子棋盘,我们使用 (i,j) 表示棋盘中从上往下数第 i 行和从左往右数第 j 列的单元格。棋盘上有 m 个棋子,第 i 个棋子的坐标是 (x_i,y_i)
~~~~~~对于一对棋子 ij ,如果满足 x_i=x_j 或者 y_i=y_j ,则两个棋子之间可以连线。
~~~~~~小红有点无聊,于是她把能连的线都连上了。现在,她想知道,最长的那条线,长度是多少。
~~~~~~特别地,如果连线数量为 0 ,则输出 0

输入描述:

~~~~~~第一行输入两个整数 n\ (\ 1 \leq n \leq 10^5\ )m\ \big(1 \leq m \leq \min\{10^5,n^2\}\big) 代表棋盘大小、棋子数量。
~~~~~~随后 m 行,每行输入两个整数 x_i,y_i\ (\ 1 \leq x_i,y_i \leq n\ ) 代表第 i 个棋子的坐标。保证不会出现重复的坐标。

输出描述:

~~~~~~输出一个整数,代表最长连线的长度。
示例1

输入

复制
5 4
1 1
1 3
2 1
1 5

输出

复制
4

说明

~~~~~~如下图所示,(1,1)(1,5) 的连线是最长的(使用绿色标注),长度为 4
~~~~~~
示例2

输入

复制
8 8
1 6
2 2
3 7
4 1
5 4
6 8
7 5
8 3

输出

复制
0

说明

~~~~~~这是一个经典的 8 皇后棋盘,任何行和列都只有一颗棋子。无法连线,答案为 0 。
~~~~~~