mutually recursive with multi arguments