前回のケースからたぶん辞書と辞書を組み合わせればいいんだとは思ったけど
なかなか理解に骨が折れたのでコメントもつけつつ
p,q,r = map(int, input().split())
#A->B, B->Cの辞書を作成する
A_B = {}
for _ in range(p):
i, j = map(int,input().split())
A_B[i] = j
B_C = {}
for _ in range(q):
j, k = map(int,input().split())
B_C[j] = k
#上の2つを利用してA_Cの辞書を作成
#この場合iは1〜pまででOK
#A_B[i]の値がそのままB_C[j]の値になり、それがそのままA_C[i]に代入
#上のロジックをどう数式にすればいいかわからんかった
A_C = {}
for i in range(1, p + 1):
A_C[i] = B_C[A_B[i]]
#小さい方から順番なので、iの順番通りでOK
#ここは前回コメントから学んだ通り
for i, k in A_C.items():
print(i, k)