Một máy ảo dựa trên ngăn xếp (stack-based virtual machine) thực thi chương trình bằng cách đọc lần lượt từng lệnh và thao tác trên một ngăn xếp (stack) chứa các số nguyên. Tập lệnh gồm:
PUSH x: đẩy số nguyên x vào đỉnh ngăn xếp.ADD: lấy ra 2 phần tử trên cùng a,b (với b ở đỉnh, a ngay dưới b), đẩy lại a+b.SUB: lấy ra a,b như trên, đẩy lại a−b.MUL: lấy ra a,b như trên, đẩy lại a×b.DUP: nhân đôi phần tử ở đỉnh ngăn xếp (đẩy thêm một bản sao của giá trị đang ở đỉnh).POP: bỏ (loại) phần tử ở đỉnh ngăn xếp.Cho một chương trình gồm n lệnh, đảm bảo mọi lệnh đều hợp lệ (không xảy ra tình huống lấy phần tử từ ngăn xếp rỗng). Hãy cho biết trạng thái ngăn xếp cuối cùng sau khi thực thi hết chương trình.
Ví dụ: với chương trình
PUSH 3
PUSH 4
ADD
PUSH 2
MUL
ta có: [3]→[3,4]→[7]→[7,2]→[14]. Ngăn xếp cuối cùng là 14.
Dòng đầu tiên chứa số nguyên n (0≤n≤1000) là số lệnh. n dòng tiếp theo, mỗi dòng là một lệnh theo đúng cú pháp nêu trên (riêng PUSH có thêm một số nguyên, các số nguyên trong chương trình và trong quá trình tính toán có trị tuyệt đối không vượt quá 109).
In ra một dòng duy nhất là các phần tử của ngăn xếp cuối cùng, liệt kê từ đáy đến đỉnh, cách nhau bởi đúng một dấu cách. Nếu ngăn xếp rỗng, in ra một dòng trống.
Ví dụ:
Đầu vào:
0
Đầu ra:
Đầu vào:
5
PUSH 3
PUSH 4
ADD
PUSH 2
MUL
Đầu ra:
14
Đang tải editor...