product function