fact.s 381 Bytes
fact = map (i) [
	? [ i<0 -> return 0
	  | i=0 -> return 1
	  |  *  -> return i * fact (i-1) ]
];

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

program = map () -> () [
	* [ readBool() -> i := readInt (); writeInt (i); writeChar(10);
			   writeInt (ifact (i)); writeChar(32);
			   writeInt (fact (i));  writeChar(10) ] ]