정렬 모자

길이가 m인 n개의 숫자 문자열에서 각 자릿수를 바꿀 수 있을 때, 수열이 감소하지 않도록 만드는 최소 자릿수 변경 횟수를 구한다.

어려움8동적 계획법그리디문자열구현아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

정렬 모자의 자리는 편하다. 하는 일은 영향력이 크고, 결정권은 모자에게 있고, 1년에 364일을 쉰다. 그래도 모자는 만족하지 못해서 정년을 보장받는 교수 자리를 노리고 있다.

모자는 남는 시간에 전산학 논문을 읽는다. 정렬 모자이니 관심사는 정렬 알고리즘이다. 요즘 모자가 읽는 것은 손실 정렬이다. 손실 정렬은 보통 입력의 일부를 버려서 남은 값만 정렬된 상태로 만든다. Dropsort가 그런 방식이다.

모자는 한 발 더 나가려 한다. 모자의 알고리즘은 수를 버리지도 않고 자리를 옮기지도 않는다. 모든 값은 처음에 있던 줄에 그대로 남는다. 대신 자릿수를 하나씩 고쳐서 목록이 정렬된 상태, 즉 첫 줄부터 마지막 줄까지 값이 줄어들지 않는 상태로 만든다. 한 번 고치는 것은 어떤 수의 한 자리를 다른 숫자로 바꾸는 것이고, 고친 뒤에도 각 수는 정확히 mm자리를 유지한다. 맨 앞의 0도 한 자리로 센다.

이 정렬이 잃는 양은 모자가 고친 자리의 개수다. 목록을 정렬된 상태로 만들려면 숫자를 최소 몇 자리 고쳐야 하는지 구하라.

입력

첫째 줄에 수의 개수 nn과 각 수의 자릿수 mm이 주어진다. (1n401 \le n \le 40, 1m4001 \le m \le 400)

다음 nn개의 줄에 정수 vv가 한 줄에 하나씩 주어진다. (0v<10m0 \le v < 10^m) 각 수는 앞을 0으로 채워 정확히 mm자리로 적혀 있다.

출력

목록을 정렬된 상태로 만들기 위해 고쳐야 하는 자리의 최소 개수를 한 줄에 출력한다.