if (length() == 0) return LongValue.create(incr);
  public Value postincr(int incr)  {    if (incr > 0) {      StringBuilder tail = new StringBuilder();      for (int i = length() - 1; i >= 0; i--) {        char ch = charAt(i);        if (ch == 'z') {          if (i == 0)            return new StringBuilderValue().append("aa").append(tail);          else            tail.insert(0, 'a');        }        else if ('a' <= ch && ch < 'z') {          return (new StringBuilderValue()		  .append(this, 0, i)		  .append((char) (ch + 1))		  .append(tail));        }        else if (ch == 'Z') {          if (i == 0)            return new StringBuilderValue().append("AA").append(tail);          else            tail.insert(0, 'A');        }        else if ('A' <= ch && ch < 'Z') {          return (new StringBuilderValue()		  .append(this, 0, i)		  .append((char) (ch + 1))		  .append(tail));        }        else if ('0' <= ch && ch <= '9' && i == length() - 1) {          return LongValue.create(toLong() + 1);        }      }      return new StringBuilderValue(tail.toString());    }    else if (isLongConvertible()) {      return LongValue.create(toLong() - 1);    }    else {      return this;    }  }