docs: public Iterator<Pair<F, S>> getIterator() {
          return new Iterator<Pair<F, S>>() {
  
              Iterator<F> outerIt;
              Iterator<S> innerIt;
              F curKey;
  
              {
                  outerIt = keySet().iterator();
              }
  
              private boolean hasInside() {
                  if (innerIt == null || !innerIt.hasNext()) {
                      if (!outerIt.hasNext()) {
                          return false;
                      }
                      curKey = outerIt.next();
                      innerIt = getCounter(curKey).keySet().iterator();
                  }
                  return true;
              }
  
              public boolean hasNext() {
                  return hasInside();
              }
  
              public Pair<F, S> next() {
                  hasInside();
                  if (curKey == null)
                      throw new RuntimeException("Outer element can't be null");
  
                  return Pair.makePair(curKey, innerIt.next());
              }
  
              public void remove() {
                  //
              }
          };
      }