first/rest => head/tail