// $G $F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

type T chan uint64;

func M(f uint64) (in, out *T) {
	in = new(T, 100);
	out = new(T, 100);
	go func(in, out *T, f uint64) {
		for {
			out <- f * <-in;
		}
	}(in, out, f);
	return in, out;
}


func min(xs *[]uint64) uint64 {
	m := xs[0];
	for i := 1; i < len(xs); i++ {
		if xs[i] < m {
			m = xs[i];
		}
	}
	return m;
}


func main() {
	F := []uint64{2, 3, 5};
	const n = len(F);
	OUT := []uint64{
		2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36,
		40, 45, 48, 50, 54, 60, 64, 72, 75, 80, 81, 90, 96, 100, 108, 120, 125,
		128, 135, 144, 150, 160, 162, 180, 192, 200, 216, 225, 240, 243, 250,
		256, 270, 288, 300, 320, 324, 360, 375, 384, 400, 405, 432, 450, 480,
		486, 500, 512, 540, 576, 600, 625, 640, 648, 675, 720, 729, 750, 768,
		800, 810, 864, 900, 960, 972, 1000, 1024, 1080, 1125, 1152, 1200, 1215,
		1250, 1280, 1296, 1350, 1440, 1458, 1500, 1536, 1600 };

	x := uint64(1);
	ins := new([]*T, n);
	outs := new([]*T, n);
	xs := new([]uint64, n);
	for i := 0; i < n; i++ {
		ins[i], outs[i] = M(F[i]);
		xs[i] = x;
	}

	for i := 0; i < len(OUT); i++ {
		t := min(xs);
		for i := 0; i < n; i++ {
			ins[i] <- x;
		}

		for i := 0; i < n; i++ {
			if xs[i] == x { xs[i] = <- outs[i]; }
		}
		
		x = min(xs);
		if x != OUT[i] { panic("bad: ", x, " should be ", OUT[i]); }
	}
	sys.exit(0);
}
