We now present the MAX-ANAGRAM problem, which is defined as follows: Suppose we are given a sequence of letters S = (s1, s2, ..., sn), where each si ∈ {a, b, c, ..., y, z}, and so the sequence may have repeated letters. Now suppose you are given a function f that maps a sequence of letters to an integer value that represents the total number of anagrams possible with that sequence. For example, f((t, c, a)) = 2 since those three letters can spell "act" and "cat". Suppose further you are given an integer L indicating the longest allowable length of a subsequence solution. Our task is to find a subsequence of S of length at most L that maximizes f. Of course, we stipulate L < n, otherwise the solution that maximizes f will trivially be the full sequence. For convenience, for a sequence S and an element e, denote S + e as the sequence resulting from appending e to the end of S. Further, let |S| be the number of elements in a sequence S. Your task is divided into three distinct parts: Define a subproblem OPT(i, L) to be the largest number of possible anagrams for a subsequence S, of elements s1, ..., si of length at most L. Give a dynamic programming framework in the form of a recurrence relation that describes OPT(i, L). You do not need to justify your response. [HINT: At each recursive stage i, we decide whether to add element si to the subsequence Si generated so far.] For the recurrence relation above, give a pseudo-code description of a top-down dynamic programming algorithm that implements memoization. You do not need to justify your response. Give the asymptotic runtime of your algorithm in terms of n and L, and justify. Is this polynomial in the size of the inputs? Explain.