code: private int[] blossomSupports(int v, int w, int base) {
  
          int n = 0;
          path[n++] = dsf.getRoot(v);
          Tuple b = new Tuple(v, w);
          while (path[n - 1] != base) {
              int u = even[path[n - 1]];
              path[n++] = u;
              this.bridges.put(u, b);
              // contracting the blossom allows us to continue searching from odd
              // vertices (any odd vertices are now even - part of the blossom set)
              queue.add(u);
              path[n++] = dsf.getRoot(odd[u]);
          }
  
          return Arrays.copyOf(path, n);
      }
docs: Creates the blossom 'supports' for the specified blossom 'bridge' edge
  (v, w). We travel down each side to the base of the blossom ('base')
  collapsing vertices and point any 'odd' vertices to the correct 'bridge'
  edge. We do this by indexing the birdie to each vertex in the 'bridges'
  map.
  
  @param v    an endpoint of the blossom bridge
  @param w    another endpoint of the blossom bridge
  @param base the base of the blossom