docs: public String solutionToString(int fractionDigits) {
      if(!isSolvable()) {
        throw new IllegalStateException("System is not solvable!");
      }
  
      DecimalFormat nf = new DecimalFormat();
      nf.setMinimumFractionDigits(fractionDigits);
      nf.setMaximumFractionDigits(fractionDigits);
      nf.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
      nf.setNegativePrefix("");
      nf.setPositivePrefix("");
  
      int row = coeff[0].length >> 1;
      int params = u.length;
      int paramsDigits = integerDigits(params);
  
      int x0Digits = maxIntegerDigits(x_0);
      int[] uDigits = maxIntegerDigits(u);
      StringBuilder buffer = new StringBuilder();
      for(int i = 0; i < x_0.length; i++) {
        double value = x_0[i];
        format(nf, buffer, value, x0Digits);
        for(int j = 0; j < u[0].length; j++) {
          if(i == row) {
            buffer.append("  +  a_").append(j).append(" * ");
          }
          else {
            buffer.append("          ");
            for(int d = 0; d < paramsDigits; d++) {
              buffer.append(' ');
            }
          }
          format(nf, buffer, u[i][j], uDigits[j]);
        }
        buffer.append('\n');
      }
      return buffer.toString();
    }