cs546 final project