Untitled

 avatar
unknown
plain_text
a year ago
932 B
5
Indexable
#include <bits/stdc++.h>

using namespace std;

void init()
{
	cin.tie(0);
	cin.sync_with_stdio(0);
}

#pragma GCC optimize("03")
#pragma GCC target("tune=native")
#pragma GCC optimize("unroll-loops")

string s;
map<string, int> fre;
vector<int> sizes;
const int max_ = 1e5 + 5, mod = 1e9 + 7;
int dp[max_];

int main()
{
	init();
	// freopen("t.text", "r", stdin);
	// freopen("o.text", "w", stdout);
	set<int> si;
	int n;
	cin >> n;

	while (n--)
	{
		cin >> s;
		fre[s]++;

		si.emplace(s.size());
	}

	for(auto &it : si)
		sizes.push_back(it);

	cin >> s;

	dp[s.size()] = 1;
	

	for (int i = s.size() - 1; i > -1; i--)
	{
		string t = "";
		t += s[i];
		int k = i + 1;
		for (int j = 0; j < sizes.size(); j++)
		{
			auto &ret = dp[i];
			if (i + sizes[j] > s.size())
				break;

			while (t.size() < sizes[j])
				t += s[k], k++;

			ret += fre.count(t) * dp[i + sizes[j]];
			ret %= mod;
		}
	}

	cout << dp[0];

	return 0;
}
Editor is loading...
Leave a Comment