





"""simple docstring"""






from __future__ import annotations

def     __A      (			a_						:str   ,       a_						:list[str] | None = None)		->		list[list[str]]:
				__a :						Optional[Any]			       =  word_bank or []
				# create a table
				__a :						int			       =  len(a_) + 1

				__a :						list[list[list[str]]]			       =  []
				for _ in range(a_):
								table.append([])
				# seed value
				__a :						Union[str, Any]			       =  [[]]  # because empty string has empty combination

				# iterate through the indices
				for i in range(a_):
								# condition
								if table[i] != []:
												for word in word_bank:
																# slice condition
																if target[i : i + len(a_)] == word:
																				__a :						list[list[str]]			       =  [
																				    [word, *way] for way in table[i]
																				]
																				# adds the word to every combination the current position holds
																				# now,push that combination to the table[i+len(word)]
																				table[i + len(a_)] += new_combinations

    # combinations are in reverse order so reverse for better output
				for combination in table[len(a_)]:
								combination.reverse()

				return table[len(a_)]


if __name__ == "__main__":
		print(all_construct('''jwajalapa''', ['''jwa''', '''j''', '''w''', '''a''', '''la''', '''lapa''']))
		print(all_construct('''rajamati''', ['''s''', '''raj''', '''amat''', '''raja''', '''ma''', '''i''', '''t''']))
		print(
		    all_construct(
		        '''hexagonosaurus''',
		        ['''h''', '''ex''', '''hex''', '''ag''', '''ago''', '''ru''', '''auru''', '''rus''', '''go''', '''no''', '''o''', '''s'''],
		    )
		)






"""simple docstring"""






def     __A      (			a_						:int = 2_00)		->		int:
				__a :						int			       =  [1, 2, 5, 10, 20, 50, 1_00, 2_00]
				__a :						List[Any]			       =  [0] * (pence + 1)
				__a :						Tuple			       =  1  # base case: 1 way to make 0 pence

				for coin in coins:
								for i in range(a_   ,       pence + 1   ,       1):
												number_of_ways[i] += number_of_ways[i - coin]
				return number_of_ways[pence]


if __name__ == "__main__":
		assert solution(200) == 73_682