P18 & P19
improve p19; solve p20