4. done, still some bug in (c)