using System.Collections.Generic;
public static void Main()
var related = new List<string>
Console.WriteLine(CountGroups(related));
public static int CountGroups(List<string> related) {
var size = related.Count;
var relations = new Dictionary<int, HashSet<int>>();
for (var i = 0; i < size; i++) {
for (var j = 0; j < size; j++) {
if (related[i][j] == '1') {
if (!relations.ContainsKey(i)) {
relations[i] = new HashSet<int>();
if (!relations.ContainsKey(j)) {
relations[j] = new HashSet<int>();
foreach (var currentUser in relations.Keys) {
var plain = PlainGroups(relations, currentUser);
result += plain.Count > 0 ? 1 : 0;
public static HashSet<int> PlainGroups(Dictionary<int, HashSet<int>> relations, int currentUser) {
HashSet<int> users = relations[currentUser];
var nextUsers = users.ToList();
var allUsers = new HashSet<int>(nextUsers);
foreach (var nextUser in nextUsers) {
var plain = PlainGroups(relations, nextUser);
foreach (var p in plain) {