J, 2626 23 bytes
(,1}.|.)(f=:,1}.|.)\u f]f\u:65+i.26
Try it here.Try it here.
Explanation
(,1}.|.)(,1}.|.)\u:65+i.26 Monad f: Input: A |. Reverse the items in A 1}. Drop the i.26first item Createin the range [0,reversed 1A , ..., 25] Join A and the previous f]f\u:65+i.26 i.26 65+ Create the range [0, 1, Add..., 6525] to each 65+ Add 65 to each u: Convert to characters to get 'A..Z' ( f\ )\ Execute f Foron each non-empty prefix of 'A..Z' from shortest to longest |. Reverse 1}. Drop the first char in the reversed prefix , Join the prefix with the previous |. ] Reverse the entire list ofIdentity prefixesfunction 1}. f Drop the firstExecute rowf fromon that reversed list , Join the list of prefixes with the previous