← Home
```go
package main

import (
	"fmt"
)

var parent []int

func find(i int) int {
	if parent[i] == i {
		return i
	}
	parent[i] = find(parent[i])
	return parent[i]
}

func union(i, j int) {
	rootI := find(i)
	rootJ := find(j)
	if rootI != rootJ {
		parent[rootI] = rootJ
	}
}

func main() {
	var n, m int
	if _, err := fmt.Scan(&n, &m); err != nil {
		return
	}

	parent = make([]int, n)
	for i := 0; i < n; i++ {
		parent[i] = i
	}

	lang := make([]int, m+1)
	for i := 1; i <= m; i++ {
		lang[i] = -1
	}

	anyLang := false

	for i := 0; i < n; i++ {
		var k int
		fmt.Scan(&k)
		if k > 0 {
			anyLang = true
		}
		for j := 0; j < k; j++ {
			var l int
			fmt.Scan(&l)
			if lang[l] != -1 {
				union(i, lang[l])
			}
			lang[l] = i
		}
	}

	roots := 0
	for i := 0; i < n; i++ {
		if parent[i] == i {
			roots++
		}
	}

	if !anyLang {
		fmt.Println(n)
	} else {
		fmt.Println(roots - 1)
	}
}
```