← Home
package main

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

func nextPermutation(a []int) bool {
	i := len(a) - 2
	for i >= 0 && a[i] >= a[i+1] {
		i--
	}
	if i < 0 {
		return false
	}
	j := len(a) - 1
	for a[j] <= a[i] {
		j--
	}
	a[i], a[j] = a[j], a[i]
	for l, r := i+1, len(a)-1; l < r; l, r = l+1, r-1 {
		a[l], a[r] = a[r], a[l]
	}
	return true
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n, k int
	if _, err := fmt.Fscan(in, &n, &k); err != nil {
		return
	}
	nums := make([]string, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &nums[i])
		if len(nums[i]) < k {
			nums[i] = strings.Repeat("0", k-len(nums[i])) + nums[i]
		} else if len(nums[i]) > k {
			nums[i] = nums[i][len(nums[i])-k:]
		}
	}

	digits := make([][]int, n)
	for i := 0; i < n; i++ {
		digits[i] = make([]int, k)
		for j := 0; j < k; j++ {
			digits[i][j] = int(nums[i][j] - '0')
		}
	}

	p := make([]int, k)
	for i := 0; i < k; i++ {
		p[i] = i
	}

	best := int(1e9)
	for {
		minv := int(1e9)
		maxv := -1
		for i := 0; i < n; i++ {
			val := 0
			for j := 0; j < k; j++ {
				val = val*10 + digits[i][p[j]]
			}
			if val < minv {
				minv = val
			}
			if val > maxv {
				maxv = val
			}
		}
		diff := maxv - minv
		if diff < best {
			best = diff
		}
		if !nextPermutation(p) {
			break
		}
	}

	fmt.Fprintln(out, best)
}