← Home
package main

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

func feasible(a, b int, cntN, cntS []int) bool {
	return a == b || (cntN[a] > cntS[a] && cntS[b] > cntN[b])
}

func main() {
	in := bufio.NewReader(os.Stdin)

	var n int
	fmt.Fscan(in, &n)

	names := make([]string, n)
	surnames := make([]string, n)

	for i := 0; i < n; i++ {
		fmt.Fscan(in, &names[i])
	}
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &surnames[i])
	}

	sort.Strings(names)
	sort.Strings(surnames)

	cntN := make([]int, 26)
	cntS := make([]int, 26)
	nameInit := make([]int, n)
	surInit := make([]int, n)

	for i, s := range names {
		nameInit[i] = int(s[0] - 'A')
		cntN[nameInit[i]]++
	}
	for i, s := range surnames {
		surInit[i] = int(s[0] - 'A')
		cntS[surInit[i]]++
	}

	used := make([]bool, n)
	ans := make([]string, n)

	for i := 0; i < n; i++ {
		a := nameInit[i]
		pick := -1
		for j := 0; j < n; j++ {
			if !used[j] && feasible(a, surInit[j], cntN, cntS) {
				pick = j
				break
			}
		}
		ans[i] = surnames[pick]
		used[pick] = true
		cntN[a]--
		cntS[surInit[pick]]--
	}

	out := bufio.NewWriter(os.Stdout)
	for i := 0; i < n; i++ {
		if i > 0 {
			fmt.Fprint(out, ", ")
		}
		fmt.Fprint(out, names[i], " ", ans[i])
	}
	out.Flush()
}