import java.util.*;
/** 2. Hozzuk létre a Graph leszármazottját, a suru gráfok ábrázolásában hatékony DenseGraph osztályt.
Az élek jelenlétét tároljuk egy logikai értékeket tartalmazó mátrixban. Ha az i,j koordinátákon true érték van tárolva, akkor az i-bol van j-be él.
Implementáljuk le a hasEdge, edgesFrom és addEdge függvényeket ennek megfeleloen. */
class DenseGraph extends Graph{
	boolean[][] edges;

	public DenseGraph(int size){
		edges = new boolean[size][size];
	}

	public boolean hasEdge(int i, int j){
		return edges[i][j];
	}

	Set<Integer> edgesFrom(int i){
		TreeSet<Integer> ret=new TreeSet<>();
		//3ICE: Initial solution two too many lines
		//int x=0;
		//for(boolean b : edges[i]){
		//	if(b){
		//		ret.add(x);
		//	}
		//	x++;
		//}
		//3ICE: Same as above, but with fewer lines of code:
		for(int x=0;x<edges.length;x++){
			if(edges[i][x]){
				ret.add(x);
			}
		}
		return ret;
	}

	void addEdge(int i, int j){
		edges[i][j]=true;
	}
}