#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define REP(i,s,n) for(int i=(int)(s);i<(int)(n);i++) using namespace std; typedef long long int ll; typedef vector VI; typedef vector VL; typedef pair PI; const ll mod = 1e9 + 7; const int N = 30; int l[N]; int n; map memo; vector inv; vector score; vector lastmod; int get(const string &s) { if (memo.count(s)) { return memo[s]; } int idx = inv.size(); memo[s] = idx; inv.push_back(s); score.push_back(VI(n, 0)); lastmod.push_back(0); return idx; } int main(void){ cin >> n; REP(i, 0, n) { cin >> l[i]; } int t; cin >> t; VI already(n, 0); REP(i, 0, t) { string name, p; cin >> name >> p; int v = get(name); int id = p[0] - 'A'; int diff = l[id]; already[id]++; int sc = 50 * diff + (500 * diff) / (8 + 2 * already[id]); score[v][id] = sc; lastmod[v] = i; } vector > pool; REP(i, 0, inv.size()) { int sum = 0; REP(j, 0, n) { sum += score[i][j]; } pool.push_back(make_pair(PI(sum, -lastmod[i]), i)); } sort(pool.rbegin(), pool.rend()); REP(i, 0, inv.size()) { int idx = pool[i].second; cout << i + 1 << " " << inv[idx] << " "; REP(j, 0, n) { cout << score[idx][j] << " "; } cout << pool[i].first.first << endl; } }