Finial project of CS546A