 //
 //===----------------------------------------------------------------------===//
 
-/// A sequence that represents the product of two sequence's elements.
+/// A sequence that represents the product of two sequences' elements.
 public struct Product2<Base1: Sequence, Base2: Collection> {
   /// The outer sequence in the product.
   public let base1: Base1

        + left
    }
  }

  @inlinable
  public subscript(position: Index) -> (Base1.Element, Base2.Element) {
    return (base1[position.i1], base2[position.i2])
  }
}


  }
  
  @inlinable
  public subscript(position: Index) -> (Base1.Element, Base2.Element) {
    (base1[position.i1], base2[position.i2])
  }
  
  /// Forms an index from a pair of base indices, normalizing
  /// `(i, base2.endIndex)` to `(base1.index(after: i), base2.startIndex)` if
  /// necessary.
  @usableFromInline
  internal func normalizeIndex(_ i1: Base1.Index, _ i2: Base2.Index) -> Index {
    i2 == base2.endIndex
      ? Index(i1: base1.index(after: i1), i2: base2.startIndex)
      : Index(i1: i1, i2: i2)
  }
  
  @inlinable
  public func index(after i: Index) -> Index {
    precondition(i.i1 != base1.endIndex, "Can't advance past endIndex")
    return normalizeIndex(i.i1, base2.index(after: i.i2))
  }
  
  @inlinable
  public func distance(from start: Index, to end: Index) -> Int {
