code: public static String encode(int mutation, Alphabet alphabet) {
          switch (mutation & MUTATION_TYPE_MASK) {
              case RAW_MUTATION_TYPE_SUBSTITUTION:
                  return "S" + alphabet.codeToSymbol((byte) getFrom(mutation)) + Integer.toString(getPosition(mutation)) + alphabet.codeToSymbol((byte) getTo(mutation));
              case RAW_MUTATION_TYPE_DELETION:
                  return "D" + alphabet.codeToSymbol((byte) getFrom(mutation)) + Integer.toString(getPosition(mutation));
              case RAW_MUTATION_TYPE_INSERTION:
                  return "I" + Integer.toString(getPosition(mutation)) + alphabet.codeToSymbol((byte) getTo(mutation));
          }
          throw new IllegalArgumentException("Illegal mutation code.");
      }
docs: Encodes single mutation in compact human-readable string, that can be decoded by method {@link
  MutationsUtil#decode(String, com.milaboratory.core.sequence.Alphabet)}.
  
  <p>The format is following:
  
  <ul> <li><b>Substitution</b>: starts with {@code S} then nucleotide in initial sequence encoded in one letter
  (<b>from</b>) then <b>position</b> then resulting nucleotide (<b>to</b>) encoded in one letter. (Example: {@code
  SA12T} = substitution from A to T at position 12).</li>
  
  <li><b>Deletion</b>: starts with {@code D} then nucleotide that was deleted encoded in one letter (<b>from</b>)
  then <b>position</b>. (Example: {@code DG43} = G deleted at position 43).</li>
  
  <li><b>Insertion</b>: starts with {@code I} then <b>position</b> then inserted letter <b>to</b>. (Example:
  {@code
  I54C} = C inserted before letter at position 54).</li>
  
  </ul>
  
  @param mutation mutation to encode
  @return mutation in a human-readable format