code: private int[] getContingencyTable(TokenStats leftTokenStats, 
                                        TokenStats rightTokenStats,
                                        int bigramCount) {
          int leftTokenOnLeftInAnyBigram = leftTokenStats.leftCount;
          int rightTokenOnRightInAnyBigram = rightTokenStats.rightCount;
          // The nubmer of bigrams in which both tokens appeared
          int a = bigramCount;
          // The number of times the left token appeared as the left token in some
          // other bigram without the current right token
          int b = rightTokenOnRightInAnyBigram - a;
          // The number of times the left token appeared as the left token in some
          // other bigram without the current right token
          int c = leftTokenOnLeftInAnyBigram - a;
          // The total number of bigrams in which neither the current left or
          // right token appeared
          int d = (numBigramsInCorpus - (b + c + a));
          return new int[] { a, b, c, d };
      }
docs: Generates a contingency table from the occurrence statistics of the two
  tokens.  The table is formatted as an array where the array values {@code
  [a, b, c, d]} correspond to
  <table><tr><td>a</td><td>b</td></tr><tr><td>c</td><td>d</td></tr></table>
  in the table
  
  @param bigramCount the number of times the two tokens appeared together
  as a bigram
  
  @return the contingency table as an array