-- This program requires further preprocessing -- to get effective "put" function. -- -- However, "shap"ication makes the preprocess easier. -- -- After the shapificatoin, -- we can easily observe that the first parameter -- of initHalfWork is useless. initHalf [] = [] initHalf (a:x) = a:initHalfWork x x initHalfWork xs [] = [] initHalfWork xs [x] = [] initHalfWork (a:x) (b:c:y) = a:initHalfWork x y