docs: public void remove(T element) {
        lock.writeLock().lock();
        try {
           if (outgoingEdges.remove(element) != null) {
              for (Set<T> values : outgoingEdges.values()) {
                 values.remove(element);
              }
           }
           if (incomingEdges.remove(element) != null) {
              for (Set<T> values : incomingEdges.values()) {
                 values.remove(element);
              }
           }
        } finally {
           lock.writeLock().unlock();
        }
     }