비트 문자열 뒤집기

길이 N인 0과 1 문자열과 N의 약수 M이 주어질 때, 한 문자 뒤집기, M의 배수 길이 접두부 뒤집기, M의 배수 길이 접미부 뒤집기를 사용해 모든 문자를 1로 만드는 최소 연산 횟수를 구한다.

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

문제

길이가 NN이고 0과 1로만 이루어진 문자열 SS와 정수 MM이 주어진다. MMNN의 약수이다.

SS에 적용할 수 있는 연산은 다음 세 가지이다.

  • 문자 하나를 뒤집는다. 0은 1이 되고, 1은 0이 된다.
  • 양의 정수 kk를 골라 처음 k×Mk \times M개의 문자를 뒤집는다. 이때 k×MNk \times M \le N이어야 한다.
  • 양의 정수 kk를 골라 마지막 k×Mk \times M개의 문자를 뒤집는다. 이때 k×MNk \times M \le N이어야 한다.

처음 NN개를 뒤집는 연산과 마지막 NN개를 뒤집는 연산은 결과가 같으므로 한 가지로 센다.

예를 들어 SS가 "110100001001"이고 M=4M = 4이면 SS에 적용할 수 있는 연산은 모두 17가지이다. 두 번째 문자를 뒤집으면 "100100001001"이 되고, 처음 2×M2 \times M개를 뒤집으면 "001011111001"이 되며, 마지막 MM개를 뒤집으면 "110100000110"이 된다.

SS의 모든 문자를 1로 만들기 위해 적용해야 하는 연산의 최소 횟수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문자열 SS가 주어진다. SS는 0과 1로만 이루어져 있고, 길이 NN은 1 이상 2500 이하이다.

둘째 줄에 정수 MM이 주어진다. MMNN의 약수이다.

출력

첫째 줄에 SS의 모든 문자를 1로 만들기 위해 적용해야 하는 연산의 최소 횟수를 출력한다.