A draft version

see full code, refer to Yixian