fact.vs 380 Bytes
fact = map (i) [
	? [ i<0 -> ^ 0
	  | i=0 -> ^ 1
	  |  *  -> ^ i * @ (i-1) ]
];

ifact = map (i) [
	res := 1;
	k := i;
	* [ k > 0 -> res := res*k;
		     k := k-1 ];
	return (res)
];

program = map () -> () [
	* [ read_bool() ->
	      i := read_int (); write_int (i); write_char(10);
	      write_int (ifact (i)); write_char(32);
	      write_int (fact (i));  write_char(10) ] ]