not pass factorial
add freevars and freevar renaming