revised fac()