package main import ( "fmt" "math" "sort" ) type ints [][2]int func (is ints) Len() int { return len(is) } func (is ints) Less(i, j int) bool { return is[i][0] < is[j][0] } func (is ints) Swap(i, j int) { is[i], is[j] = is[j], is[i] } func main() { var N int _, err := fmt.Scan(&N) for err != nil { m := make(map[int]int) for i, v := 0, 0; i < N; i++ { fmt.Scan(&v) m[v]++ } nums := make([][2]int, 0) for k, v := range m { nums = append(nums, [2]int{k, v}) } sort.Sort(ints(nums)) min, minCnt := math.MaxInt32, 0 for i := range nums { if 1 < nums[i][1] { if 0 < min { min = 0 minCnt = nums[i][1] * (nums[i][1] - 1) / 2 } else { minCnt += nums[i][1] * (nums[i][1] - 1) / 2 } } else if 0 < i { if det := nums[i][0] - nums[i-1][0]; det < min { min = det minCnt = nums[i][1] * nums[i-1][1] } else if det == min { minCnt += nums[i][1] * nums[i-1][1] } } } var maxCnt int l := len(nums) if l == 1 { maxCnt = nums[0][1] * (nums[0][1] - 1) / 2 } else { maxCnt = nums[0][1] * nums[l-1][1] } fmt.Printf("%d %d\n", minCnt, maxCnt) _, err = fmt.Scan(&N) } }