code: private int[] ordering(final int[][] graph) {
  
          final int n = graph.length;
  
          int[] order = new int[n];
          int[] count = new int[DEFAULT_DEGREE + 1];
  
          // count the occurrences of each key (degree)
          for (int v = 0; v < n; v++) {
              int key = graph[v].length + 1;
              if (key >= count.length) count = copyOf(count, key * 2);
              count[key]++;
          }
          // cumulated degree counts
          for (int i = 1; i < count.length; i++) {
              count[i] += count[i - 1];
          }
          // store the location each vertex would occur
          for (int v = 0; v < n; v++) {
              order[v] = count[graph[v].length]++;
          }
          nDeg2Vertices = count[2];
          return order;
      }
docs: Compute the vertex ordering (π). The ordering is based on the vertex
  degree and {@literal π(x) < π(y) => deg(x) ≤ deg(y)}. The ordering
  guarantees the number of elements in <i>C<sub>I</sub></i> is <
  <i>2m<sup>2</sup> + vn</i>. See Lemma 3 of {@cdk.cite Vismara97}.
  
  @return the order of each vertex