Whats wrong i am doing in this code

import java.util.*;
public class Main {
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();

		Graph graph = new Graph();
		for(int i=1 ; i<=m ; i++){
			int x=sc.nextInt();
			int y=sc.nextInt();
			
			if(graph.vertices.get(x+"")==null)
			{
				graph.addVertex(x+"");
			}
			
			if(graph.vertices.get(y+"")==null)
			{
				graph.addVertex(y+"");
			}

			graph.addEdge(x+"" , y+"" , 0);
		}

		ArrayList<ArrayList<String>> al = new ArrayList<>();
		al = graph.getConnectedComponents();
		int ans=0 , size=0;
		for(int i=0 ; i<al.size() ; i++) {
			ans += size*al.get(i).size();
			size += al.get(i).size();
		}
		System.out.println(ans);
}


public static class Graph{
	private class Vertex{
		HashMap<String , Integer> neighbour = new HashMap<>();
	}
	
	HashMap<String , Vertex> vertices ;	
	
	public Graph(){
		vertices = new HashMap<>();
	}

	public void addVertex(String add) {
		Vertex vtx = new Vertex();
		vertices.put(add , vtx);
	}

	public void addEdge(String vname1 , String vname2 , int length) {
		Vertex vtx1 = vertices.get(vname1);
		Vertex vtx2 = vertices.get(vname2);
		
		if(vtx1==null || vtx2==null || vtx1.neighbour.containsKey(vname2))
			return;
		
		vtx1.neighbour.put(vname2 , length);
		vtx2.neighbour.put(vname1 , length);
	}
	
	public ArrayList< ArrayList<String> >  getConnectedComponents() {
	
		ArrayList< ArrayList<String> > finalans = new ArrayList<>();
		
		HashMap<String , Boolean> processed = new HashMap<>();
		LinkedList<pair> queue = new LinkedList<>();
		
		ArrayList<String> keys = new ArrayList<>(vertices.keySet());
		
		// for every node repeat the process
		for(String key:keys) 
		{
			// this is used when graph is broken or not linked directly
			if(processed.containsKey(key))
				continue;
			
			// for new cycle , create a new arraylist
			ArrayList<String> subans = new ArrayList<>();
			
			pair sourcepair = new pair(key , key);
			queue.addLast(sourcepair);
			
			while(!queue.isEmpty())
			{
				pair remove = queue.removeFirst();
				
				if(processed.containsKey(remove.vertexname))
					continue;
			
				processed.put(remove.vertexname , true);
				
				// put it in subans list
				subans.add(remove.vertexname);
				
				Vertex removedvtx = vertices.get(remove.vertexname);
				ArrayList<String> neighbours = new ArrayList<>(removedvtx.neighbour.keySet());

				for(String neighbour : neighbours) 
				{
					if(!processed.containsKey(neighbour))
					{
						pair add = new pair(neighbour , remove.pathsofar+neighbour);
						queue.addLast(add);
					}
				}
				
			}
		
			// put subans in final ans
			finalans.add(subans);
			
		}
		
		return finalans;
			
	}

	private class pair{
		String vertexname;
		String pathsofar;
		
		pair(){
			
		}
		
		pair(String vertexname , String pathsofar){
			this.vertexname=vertexname;
			this.pathsofar=pathsofar;
		}
	}
	

}

}

hey @Himanshu-Jhawar-2273952536067590
Try for this input :
5 1
3 4