package main

import "fmt"

func produce(out chan<- int) {
	defer close(out)
	for number := 1; number <= 3; number++ {
		out <- number
	}
}

func square(in <-chan int, out chan<- int) {
	defer close(out)
	for number := range in {
		out <- number * number
	}
}

func main() {
	numbers := make(chan int)
	squares := make(chan int)

	go produce(numbers)
	go square(numbers, squares)

	for result := range squares {
		fmt.Println(result)
	}
}
