using System.Collections.Generic;
public string Email { get; private set; }
public ICollection<Friend> Friends { get; private set; }
public Friend(string email)
this.Friends = new List<Friend>();
public void AddFriendship(Friend friend)
this.Friends.Add(friend);
friend.Friends.Add(this);
HashSet<string> friends = new HashSet<string>();
private bool CanBeConnected(Friend f, Friend s)
if (friends.Contains(f.Email)) return false;
return f.Email == s.Email
|| f.Friends.Any(x => CanBeConnected(x, s));
public bool CanBeConnected(Friend friend)
friends = new HashSet<string>();
return CanBeConnected(this, friend);
public static void Main()
Friend a = new Friend("A");
Friend b = new Friend("B");
Friend c = new Friend("C");
Console.WriteLine(a.CanBeConnected(c));