Interquine - Two programs that output each other in a loop Program A outputs program B's code when run, and B outputs A's source.

Requirements:


Only one language across both programs
Programs are different. One program that outputs itself does not qualify.  
Both programs are non-empty, or at least 1 byte in length. Trailing newlines in both source and output are ignored  
stdin is closed. Do not read anything (so you can't read the source and manipulate it). Output goes to stdout.
Edit: stdin is connected to /dev/null. You can order it be closed if clarified.
Do not use random functions.


Additional:


Give explanations if possible


Score is total length. Trailing newline does not count if it doesn't affect the program.
CJam, 13 + 13 = 26 bytes

{sYZe\"_~"}_~


Try it online!

Outputs

{sZYe\"_~"}_~


Explanation

{       e# Standard quine framework, leaves a copy of the block on the stack
        e# for the block itself to process.
  s     e# Stringify the block.
  YZe\  e# Swap the characters at indices 2 and 3, which are Y and Z themselves.
  "_~"  e# Push the "_~" to complete the quine.
}_~


Since e\ is commutative in its second and third operand, the other program does exactly the same, swapping Z and Y back into their original order.