implement node and edge