static <A, B> MultiMap<B, A> reverseMultiMap(MultiMap<A, B> map) {
  new MultiMap<B, A> mm;
  for (A key : keys(map))
    for (B value : map.get(key))
      mm.put(value, key);
  ret mm;
}