package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strconv"
	"strings"
)

type PasanganKlub struct {
	Klub string
	Poin int
}

type Klasemen struct {
	poin   map[string]int
	urutan []string // menyimpan urutan klub saat didaftarkan (untuk urutan tampil awal)
}

func NewKlasemen(klub []string) *Klasemen {
	poin := make(map[string]int)
	urutan := make([]string, 0, len(klub))
	for _, k := range klub {
		poin[k] = 0
		urutan = append(urutan, k)
	}
	return &Klasemen{poin: poin, urutan: urutan}
}

func (k *Klasemen) tambahKlubJikaBelumAda(klub string) {
	if _, ada := k.poin[klub]; !ada {
		k.poin[klub] = 0
		k.urutan = append(k.urutan, klub)
	}
}

func (k *Klasemen) CatatPermainan(klubKandang, klubTandang, skor string) {
	k.tambahKlubJikaBelumAda(klubKandang)
	k.tambahKlubJikaBelumAda(klubTandang)

	bagian := strings.Split(skor, ":")
	if len(bagian) != 2 {
		panic(fmt.Sprintf("format skor tidak valid: %q", skor))
	}

	skorKandang, err1 := strconv.Atoi(strings.TrimSpace(bagian[0]))
	skorTandang, err2 := strconv.Atoi(strings.TrimSpace(bagian[1]))
	if err1 != nil || err2 != nil {
		panic(fmt.Sprintf("format skor tidak valid: %q", skor))
	}

	switch {
	case skorKandang > skorTandang:
		k.poin[klubKandang] += 3
	case skorKandang < skorTandang:
		k.poin[klubTandang] += 3
	default:
		k.poin[klubKandang] += 1
		k.poin[klubTandang] += 1
	}
}

func (k *Klasemen) CetakKlasemen() []PasanganKlub {
	hasil := make([]PasanganKlub, 0, len(k.poin))
	for _, klub := range k.urutan {
		hasil = append(hasil, PasanganKlub{Klub: klub, Poin: k.poin[klub]})
	}

	sort.SliceStable(hasil, func(i, j int) bool {
		return hasil[i].Poin > hasil[j].Poin
	})

	return hasil
}

func (k *Klasemen) AmbilPeringkat(nomorPeringkat int) string {
	klasemen := k.CetakKlasemen()
	if nomorPeringkat < 1 || nomorPeringkat > len(klasemen) {
		return ""
	}
	return klasemen[nomorPeringkat-1].Klub
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	baca := func() string {
		s, _ := reader.ReadString('\n')
		return strings.TrimSpace(s)
	}

	n, _ := strconv.Atoi(baca())
	var namaKlub []string
	for len(namaKlub) < n {
		baris := baca()
		namaKlub = append(namaKlub, strings.Fields(baris)...)
	}

	klasemen := NewKlasemen(namaKlub)

	m, _ := strconv.Atoi(baca())
	for i := 0; i < m; i++ {
		baris := strings.Fields(baca())
		klasemen.CatatPermainan(baris[0], baris[1], baris[2])
	}

	fmt.Println("Klasemen:")
	for i, pasangan := range klasemen.CetakKlasemen() {
		fmt.Printf("%d. %s => %d poin\n", i+1, pasangan.Klub, pasangan.Poin)
	}

	q, _ := strconv.Atoi(baca())
	for i := 0; i < q; i++ {
		nomor, _ := strconv.Atoi(baca())
		fmt.Printf("Peringkat ke-%d: %s\n", nomor, klasemen.AmbilPeringkat(nomor))
	}
}