Cho một đoạn mã ba địa chỉ (TAC) tuyến tính (không có nhãn, không có lệnh rẽ nhánh), gồm các câu lệnh gán theo một trong hai dạng:
x = y op z với op∈{+,−,∗}: gán cho biến x giá trị y op z;x = y: gán cho biến x giá trị của y (phép sao chép/copy).Trong đó y,z mỗi cái có thể là tên một biến hoặc một hằng số nguyên (có thể âm). Một số biến được cho giá trị khởi tạo ban đầu; các biến không được khởi tạo và cũng chưa từng xuất hiện ở vế trái có giá trị mặc định là 0 khi được đọc.
Hãy mô phỏng thực thi tuần tự (theo đúng thứ tự xuất hiện) toàn bộ các câu lệnh, sau đó in ra giá trị cuối cùng của tất cả các biến từng xuất hiện ở vế trái ít nhất một lần (dù được gán lại nhiều lần thì chỉ tính giá trị sau cùng), sắp xếp theo thứ tự bảng chữ cái (alphabet, so sánh chuỗi thông thường) của tên biến.
Dòng 1: số nguyên k - số biến được khởi tạo giá trị ban đầu.
k dòng tiếp theo: mỗi dòng có dạng name value (tên biến và giá trị nguyên khởi tạo, cách nhau 1 khoảng trắng).
Dòng tiếp theo: số nguyên m - số câu lệnh TAC.
m dòng tiếp theo: mỗi dòng là một câu lệnh TAC theo đúng cú pháp x = y op z hoặc x = y như mô tả (các token cách nhau đúng 1 khoảng trắng, dấu = là một token riêng).
In ra đúng số dòng bằng số biến khác nhau từng xuất hiện ở vế trái, mỗi dòng theo định dạng name value, sắp xếp theo thứ tự bảng chữ cái của name.
Ví dụ input:
2
a 3
b 4
2
t1 = a + b
c = t1 * 2
Output:
c 14
t1 7
Ví dụ:
Đầu vào:
0
2
x = 5
y = x
Đầu ra:
x 5
y 5
Đầu vào:
2
a 3
b 4
2
t1 = a + b
c = t1 * 2
Đầu ra:
c 14
t1 7
Đang tải editor...