a graph datastructure