Người bạn của bạn đang phát triển một tựa game mới. Anh ấy đã quyết định cách thế giới trong game sẽ hoạt động - nó sẽ bao gồm \(n\) điểm (vị trí) được nối với nhau bằng \(m\) đường đi hai chiều. Các đường đi được thiết kế sao cho có thể đi từ bất kỳ điểm nào đến bất kỳ điểm nào khác.
Tất nhiên, một số đường đi nên được canh gác bởi quái vật (nếu người chơi chỉ có thể đi lại tự do thì game sẽ không vui, đúng không?). Một số đường đi quan trọng sẽ được canh gác bởi những con quái vật cực kỳ đáng sợ, buộc người chơi phải chuẩn bị trước khi đối mặt và phát triển chiến thuật để đánh bại chúng. Những con quái vật đặc biệt như vậy được gọi là boss. Bạn của bạn muốn bạn giúp anh ấy đặt các boss ở những đoạn đường quan trọng.
Trò chơi sẽ bắt đầu từ một vị trí \(s\) và kết thúc tại vị trí \(t\), nhưng các vị trí này chưa được chọn. Sau khi chọn \(s\) và \(t\), bạn của bạn sẽ đặt boss trên mỗi đoạn đường sao cho bắt khả dịch chuyển từ \(s\) đến \(t\) sẽ bị chặn nếu không đi qua đoạn đường đó. Điều này nghĩa là boss được đặt trên những cạnh cầu (bridge edges) trong đồ thị.
Anh ấy muốn đặt số lượng boss nhiều nhất có thể (để game khó hơn và thú vị hơn), và nhờ bạn tìm giúp anh ấy số lượng boss tối đa có thể đặt, khi xét tất cả các cặp điểm \(s\) và \(t\) khác nhau có thể.
Dữ liệu vào
- Dòng đầu gồm hai số nguyên \(n\) và \(m\) (\(2 \le n \le 3 \cdot 10^5\), \(n-1 \le m \le 3 \cdot 10^5\)) là số lượng điểm và số lượng đường đi.
- Sau đó là \(m\) dòng, mỗi dòng gồm hai số nguyên \(x\) và \(y\) (\(1 \le x, y \le n\), \(x \ne y\)), biểu diễn một đường đi hai chiều nối hai vị trí \(x\) và \(y\).
- Cam đoan rằng không có hai điểm nào được kết nối trực tiếp bởi nhiều hơn một đường đi, và bất kỳ vị trí nào cũng có thể đi đến bất kỳ vị trí nào khác.
Dữ liệu vào
- In ra một số nguyên - là số lượng boss tối đa có thể đặt (đặt trên các cạnh bridge), xét tất cả các cặp \(s, t\) có thể.
Input 1
5 5
1 2
2 3
3 1
4 1
5 2
Output 1
2
Input 2
4 3
1 2
4 3
3 2
Output 2
3
Nhận xét