import java.util.ArrayList;
import java.util.HashMap;

public class Network {
	
	public static void main(String[] args) {
		
		Person al = new Person("Al", "Albertson");
		Person bob = new Person("Bob", "Boberson");
		Person carol = new Person("Carol", "Carolson");
		Person dave = new Person("Dave", "Davidson");
		
		al.add_link(bob);
		bob.add_link(carol);
		dave.add_link(carol);
		al.add_link(carol);
		
		ArrayList<Node> mutual_friends = Node.mutual_links(al, bob);
		for(Node n : mutual_friends) {
			Person f = (Person) n;
			System.out.println(f.full_name());
		}
	}
}

class Node {
	
	protected static HashMap<Node, ArrayList<Node>> links_map = new HashMap<Node, ArrayList<Node>>();
	private static int id_count;
	private int id;
	private ArrayList<Node> links = new ArrayList<Node>();
	
	public Node() {
		id = ++id_count;
	}
	
	public int id() {
		return id;
	}
	
	public void add_link(Node p) {
		if(links.contains(p)) return;
		links.add(p);
		p.add_link(this);
		links_map.put(this, links);
	}
	
	public static ArrayList<Node> mutual_links(Node n1, Node n2) {
		ArrayList<Node> l1 = links_map.get(n1);
		ArrayList<Node> l2 = links_map.get(n2);
		ArrayList<Node> mutual = new ArrayList<Node>();
		for(Node n : l1) {
			if(l2.contains(n))
				mutual.add(n);
		}
		return mutual;
	}
}

class Person extends Node {
	
	private String first_name;
	private String last_name;
	
	public Person(String Afirst_name, String Alast_name) {
		this.first_name = Afirst_name;
		this.last_name = Alast_name;
	}
	
	public String full_name() {
		return this.first_name + " " + this.last_name;
	}
}