Start to reimplement graph product