RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R01450

주문 분해 경우의 수

Gold II 골드 II
난이도
3s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

마법사가 긴 주문 문자열 \(S\)를 사전에 있는 단어들로 분해하려 한다. 사전에는 \(N\)개의 단어가 있으며, 같은 단어를 여러 번 사용해도 된다. 분해 순서는 왼쪽에서 오른쪽으로 고정된다.

예를 들어 사전에 'apple', 'pen', 'applepen'이 있을 때 'applepenapple'은 (apple+pen+apple), (applepen+apple)로 분해할 수 있어 경우의 수는 \(2\)이다.

문자열 \(S\)를 사전의 단어로 빠짐없이 분해하는 경우의 수를 \(10^9 + 7\)로 나눈 나머지를 출력하여라. 분해가 불가능하면 \(0\)을 출력한다.

제약
  • \(1 \le N \le 1\,000\)
  • \(1 \le |S| \le 5\,000\)
  • 각 사전 단어의 길이는 \(1\) 이상 \(15\) 이하이다.
  • 모든 문자열은 알파벳 소문자로만 이루어진다.
입력 형식

첫째 줄에 사전의 단어 수 \(N\)과 문자열 \(S\)의 길이 \(|S|\)가 공백으로 구분되어 주어진다.

다음 \(N\)개의 줄에 사전의 단어가 한 줄에 하나씩 주어진다. 사전에 같은 단어가 중복되어 등장하지 않는다.

마지막 줄에 문자열 \(S\)가 주어진다.

출력 형식

\(S\)를 사전의 단어로 분해하는 경우의 수를 \(10^9 + 7\)로 나눈 나머지를 출력한다. 분해가 불가능하면 \(0\)을 출력한다.

예제 1
입력
5 13
apple
pen
applepen
pine
pineapple
applepenapple
출력
2
설명

'applepenapple'를 분해하는 방법: (1) apple + pen + apple, (2) applepen + apple — 총 \(2\)가지.

예제 2
입력
2 4
a
aa
aaaa
출력
5
설명

'aaaa'를 'a', 'aa'로 분해하는 방법은 (a+a+a+a), (aa+a+a), (a+aa+a), (a+a+aa), (aa+aa) — 총 \(5\)가지.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

주문 분해 경우의 수

개요
출제자 난이도 Gold II 골드 II 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

주문 분해 경우의 수

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8