code 3.c; todo:test it