아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

짝수 회문 분할

시간 제한1초메모리 제한128 MB

요약
문자열을 길이가 짝수인 회문들로만 분할할 수 있는지 판단하고, 가능하면 분할 조각 수의 최솟값과 최댓값을 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열, 문자열 매칭, 구현
정답자
아직 제출이 없습니다

문제

어떤 단어를 거꾸로 읽어도 원래와 같으면 그 단어를 회문이라고 한다. 회문의 글자 수가 양의 짝수이면 그 회문을 짝수 회문이라고 한다.

예를 들어 abaaba는 짝수 회문이다.

단어의 짝수 회문 분할이란, 그 단어를 앞에서부터 연속된 여러 조각으로 나누되 각 조각이 모두 짝수 회문이 되도록 하는 분할을 말한다.

예를 들어 단어 bbaabbaabbbaaaaaaaaaaaabbbaa는 bbaabb + aabbbaaaaaaaaaaaabbbaa처럼 2개의 조각으로 나눌 수 있고, bb + aa + bb + aa + bb + baaaaaaaaaaaab + bb + aa처럼 8개의 조각으로도 나눌 수 있다. 첫 번째 분할은 짝수 회문의 개수가 가능한 한 가장 적고, 두 번째 분할은 가장 많다. 따라서 이 단어의 최소 분할 개수는 2, 최대 분할 개수는 8이다.

한 단어는 서로 다른 짝수 회문 분할을 여러 개 가질 수도 있고, 하나도 가지지 못할 수도 있다.

단어가 주어졌을 때, 그 단어를 짝수 회문들로 분할할 수 있는지 판정하여라. 분할할 수 없으면 불가능함을 알리고, 분할할 수 있으면 모든 분할 방법 중 짝수 회문 개수의 최솟값과 최댓값을 구하여라.

입력

입력은 1글자 이상 200글자 이하의 영어 소문자로만 이루어진 단어 하나로 주어진다. 단어는 글자 사이에 공백 없이 한 줄에 쓰여 있다.

출력

단어를 짝수 회문들로 분할할 수 없으면 NIE("아니오"라는 뜻) 한 단어만 출력한다.

분할할 수 있으면 두 줄을 출력한다.

  • 첫째 줄에는 그 단어를 짝수 회문으로 분할했을 때 짝수 회문 개수의 최솟값을 출력한다.
  • 둘째 줄에는 짝수 회문 개수의 최댓값을 출력한다.

예제3

  1. 예제 1

    입력
    bbaabbaabbbaaaaaaaaaaaabbbaa
    
    예상 출력
    2
    8
    
  2. 예제 2

    입력
    abcd
    
    예상 출력
    NIE
    
  3. 예제 3

    입력
    abaaba
    
    예상 출력
    1
    1