44 lines
1012 B
Python
44 lines
1012 B
Python
import sys
|
|
|
|
input = sys.stdin.readline
|
|
|
|
INF_MAX = 1000000 * 50
|
|
|
|
|
|
def transpose(word: str):
|
|
dictionary = [0] * 26
|
|
for c in word:
|
|
dictionary[ord(c) - 65] += 1
|
|
return dictionary
|
|
|
|
|
|
def check(T: list, word: list):
|
|
return all([word[i] >= T[i] for i in range(26)])
|
|
|
|
|
|
def merge(a: list, b: list):
|
|
return [a[i] + b[i] for i in range(26)]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
T = transpose(input().rstrip())
|
|
N = int(input())
|
|
P = [
|
|
(int(c), transpose(w)) for c, w in (input().rstrip().split() for _ in range(N))
|
|
]
|
|
D = []
|
|
min_price = INF_MAX
|
|
|
|
D.append((0, 0, [0] * 26))
|
|
while D:
|
|
index, cost, word = D.pop()
|
|
word: list
|
|
if index >= N:
|
|
if check(T, word):
|
|
min_price = min(min_price, cost)
|
|
continue
|
|
else:
|
|
D.append((index + 1, cost + P[index][0], merge(word, P[index][1])))
|
|
D.append((index + 1, cost, word.copy()))
|
|
print(min_price) if min_price < INF_MAX else print(-1)
|