docs: protected static int[] assignClusterDesignations(int[] designations, int clusters, int[] merges)
      {
          int curCluster = 0;
          Arrays.fill(designations, -1);
          for(int i = 0; i < merges.length; i++)
          {
              if(designations[merges[i]] == -1)//it has not been assigned
              {
                  if(curCluster < clusters)//It will be a top level cluster
                      designations[merges[i]] = curCluster++;
                  else
                      designations[merges[i]] = designations[merges[i-1]];//The new cluster is always in an odd index, so its parrent is the even index to the left 
              }
          }
          return designations;
      }