CSES - Shared codeLink to this code:
https://cses.fi/paste/cc989c0ccbfe2f2a10c465/
//package coding;
import java.io.*;
//import java.util.PriorityQueue;
import java.util.*;
public class Code {
static class FastReader
{
BufferedReader br;
StringTokenizer st;
public FastReader()
{
br = new BufferedReader(new
InputStreamReader(System.in));
}
String next()
{
while (st == null || !st.hasMoreElements())
{
try
{
st = new StringTokenizer(br.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str = "";
try
{
str = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return str;
}
}
static int n;
static int m;
static boolean visited[];
static ArrayList<ArrayList<Integer>> arr;
public static void main(String[]args)
{
FastReader sc=new FastReader();
n=sc.nextInt();
m=sc.nextInt();
ArrayList<ArrayList<Integer>> arr=new ArrayList<ArrayList<Integer>>();
for(int i=0;i<n;i++)
{ ArrayList<Integer> a=new ArrayList<Integer>() ;
arr.add(a);
}
// System.out.println(arr.get(0).size());
visited=new boolean[n];
for(int i=0;i<m;i++)
{
int f=sc.nextInt();
int s=sc.nextInt();
arr.get(f-1).add(s-1);
arr.get(s-1).add(f-1);
}
//System.out.println(arr.get(0).get(0));
int count=-1;
ArrayList<Integer> ans=new ArrayList<Integer>();
for(int i=0;i<n;i++)
{
if(!visited[i])
{
// System.out.println(i+1);
count++;
dfs(i,arr);
ans.add(i+1);
}
}
System.out.println(ans.size()-1);
if(ans.size()>1)
for(int i=0;i<ans.size()-1;i++)
{
System.out.println(ans.get(i)+" "+ans.get(i+1));
}
}
private static void dfs(int si, ArrayList<ArrayList<Integer>> arr) {
// TODO Auto-generated method stub
visited[si]=true;
Stack<Integer> st=new Stack<Integer>();
st.add(si);
while(!st.isEmpty())
{
si=st.pop();
for(int i=0;i<arr.get(si).size();i++)
{
int e=arr.get(si).get(i);
if(!visited[e])
{
st.add(e);
visited[e]=true;
}
}
}
// //System.out.println(arr.get(si).size());
// for(int i=0;i<arr.get(si).size();i++)
// {
// int e=arr.get(si).get(i);
// if(!visited[e])
// {
// dfs(e,arr);
// }
// }
}
}