|  | @@ -0,0 +1,57 @@
 | 
	
		
			
				|  |  | +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)
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 |