n = gets.strip.to_i level = gets.strip.split(' ').map(&:to_i) t = gets.strip.to_i memo = Hash.new() ac = Hash.new(0) scores = Hash.new(0) ranking = Hash.new([]) t.times do name, problem = gets.strip.split(' ') ac[problem] += 1 score = (50 * level[problem[0].ord - 'A'.ord] + 50 * level[problem[0].ord - 'A'.ord] / (0.8 + 0.2 * ac[problem])).floor # p score ranking[scores[name]].delete(name) scores[name] += score ranking[scores[name]] += [name] unless memo.key?(name) memo[name] = Hash.new(0) end memo[name][problem] = score end ranking = ranking.sort{|a, b| b[0] <=> a[0]} i = 1 ranking.each do |arr| arr[1].each do |name| print "#{i} #{name} " (0...n).each do |j| if memo[name].key?(('A'.ord + j).chr) print "#{memo[name][('A'.ord + j).chr]} " else print "0 " end end print "#{scores[name]}\n" i += 1 end end