import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
        int[] edge_count = new int[n+1];
        
        for (int i=0; i<n+1; i++) {
            graph.add(new ArrayList<>());
        }
        
        for (int i=0; i<m; i++) {
            st = new StringTokenizer(br.readLine());
            int v = Integer.parseInt(st.nextToken());
            int u = Integer.parseInt(st.nextToken());
            graph.get(v).add(u);
            graph.get(u).add(v);
            edge_count[v] += 1;
            edge_count[u] += 1;
        }

        ArrayList<Integer> non2List = new ArrayList<>();
        for (int i=1; i<n+1; i++) {
            if(edge_count[i] != 2) non2List.add(i);
        }

        // for (int i=1; i<n+1; i++) {
        //     System.out.print(edge_count[i] + " ");
        //     System.out.println(graph.get(i));
        // }

        int max_value = 0;
        boolean[] visited = new boolean[n+1];
        
        for (int non_2 : non2List) { 
            visited[non_2] = true;
            for (int neighbor : graph.get(non_2)) {
                
                int dist = 1;
                // boolean[] visited = new boolean[n+1]; 너무 크니 prev를 쓰자
                int prev = non_2;
                int cur = neighbor;
                
                while(edge_count[cur] == 2) {

                    visited[cur] = true;
                    int next = -1;
                    
                    for (int option : graph.get(cur)) {
                        if (option != prev) {
                            next = option;    
                        }
                    }
                    dist ++;
                    prev = cur;
                    cur = next;
                }
                max_value = Math.max(max_value, dist);
            }
        }

        

        for (int i=1; i<n+1; i++) {
            if(!visited[i]) {
                int cur = i;
                int dist = 0;
                int prev = -1;
                
                while(!visited[cur]) {
                    visited[cur] = true;
                    dist ++;
                    int next = -1; 
                    for (int option : graph.get(cur)) {
                        if(option != prev) {
                            next = option;
                        }
                    }
                    prev = cur; 
                    cur = next;
                }
                max_value = Math.max(max_value, dist);
                
            }
        }
        System.out.println(max_value);

        
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: