#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define pb emplace_back
#define mp make_pair
#define fi first
#define se second
#define all(v) v.begin(), v.end()
#define ms(a, x) memset(a, x, sizeof(a));
int n;
string s[100009];
int a[100009];
map<pair<int, string>, int> dp;
int solve(int i, string prev)
{
if (i >= n)
return 0;
if (dp.find({i, prev}) != dp.end())
{
return dp[{i, prev}];
}
int x1 = 1e16, x2 = 1e16;
if (s[i] >= prev)
x1 = solve(i + 1, s[i]);
string s1 = s[i];
reverse(all(s1));
if (s1 >= prev)
x2 = a[i] + solve(i + 1, s1);
return dp[{i, prev}] = min(x1, x2);
}
signed main()
{
int i, x;
ms(a, 0);
cin >> n;
for (i = 0; i < n; i++)
cin >> a[i];
for (i = 0; i < n; i++)
cin >> s[i];
string ss = "A";
x = solve(0, ss);
if (x >= 1e16)
x = -1;
cout << x;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZyBpbnQKI2RlZmluZSBwYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSBtcyhhLCB4KSBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKTsKCmludCBuOwpzdHJpbmcgc1sxMDAwMDldOwppbnQgYVsxMDAwMDldOwptYXA8cGFpcjxpbnQsIHN0cmluZz4sIGludD4gZHA7CgppbnQgc29sdmUoaW50IGksIHN0cmluZyBwcmV2KQp7CiAgICBpZiAoaSA+PSBuKQogICAgICAgIHJldHVybiAwOwoKICAgIGlmIChkcC5maW5kKHtpLCBwcmV2fSkgIT0gZHAuZW5kKCkpCiAgICB7CiAgICAgICAgcmV0dXJuIGRwW3tpLCBwcmV2fV07CiAgICB9CgogICAgaW50IHgxID0gMWUxNiwgeDIgPSAxZTE2OwogICAgaWYgKHNbaV0gPj0gcHJldikKICAgICAgICB4MSA9IHNvbHZlKGkgKyAxLCBzW2ldKTsKICAgIHN0cmluZyBzMSA9IHNbaV07CiAgICByZXZlcnNlKGFsbChzMSkpOwogICAgaWYgKHMxID49IHByZXYpCiAgICAgICAgeDIgPSBhW2ldICsgc29sdmUoaSArIDEsIHMxKTsKCiAgICByZXR1cm4gZHBbe2ksIHByZXZ9XSA9IG1pbih4MSwgeDIpOwp9CgpzaWduZWQgbWFpbigpCnsKCiAgICBpbnQgaSwgeDsKICAgIG1zKGEsIDApOwogICAgY2luID4+IG47CiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIGNpbiA+PiBhW2ldOwoKICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgY2luID4+IHNbaV07CiAgICBzdHJpbmcgc3MgPSAiQSI7CgogICAgeCA9IHNvbHZlKDAsIHNzKTsKICAgIGlmICh4ID49IDFlMTYpCiAgICAgICAgeCA9IC0xOwoKICAgIGNvdXQgPDwgeDsKfQ==