Revision dd3d23a9-5970-4ef0-a26d-2b3cc7b08b43 - Code Golf Stack Exchange
# [Haskell], <s>127</s> 120 bytes
<!-- language-all: lang-hs -->
e=[]:e
i#[x]=[]
i#s|t<-foldl(flip$zipWith(:))e$init s,j<-i++last s=(map((j>>" ")++)(init t)++[j++last t]):j#t
f s=s:""#s
[Try it online!][TIO-j6mrswdy]
[Haskell]: https://www.haskell.org/
[TIO-j6mrswdy]: https://tio.run/##LYzLCsJADEX38xWh7WKGWj@gtILv9wNcuChdFDrV1HFanAgi/nsN6iJw7s1JLoW7amO6TqdZHmuBfvbMGRncm5KoakxpZGWwDV7YnpAuMlZKB2iRwPXqJMIwNIXjkMpb0UpZDwYeeCoMlfxKxJjVf4lyFdc@iYp1F3ue77pbgRZSKBsBgLZ9ECQRnDWNG0vakuOa/25B8upI942FPjysQaudYqx4vgGC33m3Wi7mYn3Yz8Rmu5uK4Wg8@QA "Haskell – Try It Online"
Input is a list of lines, e.g. `["DC","AB"]` for the second test case, output is a list of lists of lines: `[["DC","AB"],[" D","ABC"],["ABCD"]]`. Use `mapM (putStrLn . unlines)` to pretty-print the result.
**Edit:** Saved 7 bytes by noticing that the [shorter `transpose`](https://codegolf.stackexchange.com/a/111362/56433) I found some while a go comes in handy because it can be modified to reverse each transposed directly.
[Haskell]: https://www.haskell.org/