finished duanzi func