package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	inp := StdinToStringSlice()
	fmt.Println(HotChocolatePortal(inp))
}

func HotChocolatePortal(input []string) int {
	var constellations []Constellation

	for _, line := range input {
		var c Coordinate

		if _, err := fmt.Sscanf(line, "%d,%d,%d,%d", &c[0], &c[1], &c[2], &c[3]); err != nil {
			panic(err)
		}

		var found bool
		for _, constellation := range constellations {
			if constellation.Distance(c) <= 3 {
				constellation.Add(c)
				found = true
				break
			}
		}
		if !found {
			constellations = append(constellations, NewConstellation(c))
		}
	}

	var nc []Constellation
	for i, a := range constellations {
		merged := false

		for j, b := range constellations {
			if i == j {
				continue
			}

			if b.CelestialDistance(a) <= 3 {
				b.Merge(a)
				merged = true
				break
			}
		}

		if !merged {
			nc = append(nc, a)
		}
	}

	return len(nc)
}

func abs(num int) int {
	if num < 0 {
		return num * -1
	}
	return num
}

func StdinToStringSlice() []string {
	var input []string
	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		input = append(input, scanner.Text())
	}
	return input
}
