private boolean buildAugPath(int[][] mask, int[][] c, int Astart, EdgeSet path){
        print2DArray(mask);
        for(int j = 0; j < mask[0].length; j++){
            if(c[Astart][j] == 0 && mask[Astart][j] == 2){
                c[Astart][j] = 1; // can't visit this twice.
                if(!BisInMatching(j, mask)){
                    path.add(new Edge(Astart, j, Edge.Direction.fromBuyer));
                    switchEdges(mask, path);
                    return true;
                }
                else{
                    for(int i = 0; i < mask.length; i++){
                        if(c[i][j] == 0 && mask[i][j] == 1){
                            c[i][j] = 1;
                            path.add(new Edge(Astart, j, Edge.Direction.fromBuyer));
                            path.add(new Edge(i, j, Edge.Direction.fromSeller));
                            System.out.println(path.toString());
                            return buildAugPath(mask, c, i, path);
                        }
                    }
                }
            }
        }
        return false;
    }