Subsequences
시간 제한5초메모리 제한512 MB
길이가 짧은 문자열 20개 이하가 주어질 때, 이들을 이어 붙인 문자열의 서로 다른 부분수열 개수가 짝수인 순열의 수를 센다.
문제
Datastring Research Corporation에서는 문자열 의 서로 다른 부분수열의 개수가 짝수일 때 를 good하다고 부른다.
문자열 가 문자열 의 부분수열이라는 것은, 에서 몇 개의 문자를 지워서 를 얻을 수 있다는 뜻이다. 자신과 빈 문자열도 의 부분수열로 본다. 길이가 인 문자열에는 모두 개의 부분수열이 있지만, 그중에는 서로 같은 것도 있다. 예를 들어 세 글자 문자열 의 서로 다른 부분수열은 빈 문자열, , , , , 로 모두 6개뿐이다.
String Researcher의 책상 위에는 문자열 가 놓여 있었고, 그는 이것이 good인지 알아내려 했다. 서로 다른 부분수열의 개수를 세는 일이 지루하다는 것을 깨달은 그는 곧바로 일을 시작하는 대신 도넛과 함께 커피 타임을 가지러 갔다.
돌아와 보니 누군가가 문자열 를 번 잘라 개의 비어 있지 않은 부분문자열 으로 만들어 책상 위에 흩어 놓았다. 그리고 그는 처음 문자열 를 전혀 기억하지 못한다. 다만 그는 복원한 문자열 이 good이 되도록 하는 순열 의 개수가 궁금하다. 순열은 모두 개 있고, 부분문자열 가 서로 같더라도 이 순열들은 모두 다른 것으로 센다.
입력
첫째 줄에 부분문자열의 개수 이 주어진다 (). 다음 개의 줄 중 번째 줄에 부분문자열 가 주어진다.
모든 는 비어 있지 않으며 알파벳 소문자로만 이루어져 있다. 모든 의 길이의 합은 을 넘지 않는다.
출력
첫째 줄에, 순열의 순서대로 문자열 를 이어 붙였을 때 good이 되는 순열의 개수를 출력한다.
힌트
문자열 에는 부분수열이 14개, 문자열 에는 13개, 문자열 에는 10개 있다. 부분문자열 가 두 번 나타나므로, 이 각각의 문자열은 두 가지 순열로만 얻을 수 있다.