code: def patience_sort(xs):
      '''Patience sort an iterable, xs.
      This function generates a series of pairs (x, pile), where "pile"
      is the 0-based index of the pile "x" should be placed on top of.
      Elements of "xs" must be less-than comparable.
      '''
      pile_tops = list()
      for x in xs:
          pile = bisect.bisect_left(pile_tops, x)
          if pile == len(pile_tops):
              pile_tops.append(x)
          else:
              pile_tops[pile] = x
          yield x, pile