Output a program that outputs a program ... that outputs PPCG Challenge:

Write a code that, when executed will output the source code of a second program that can be executed in another language. The second program should output the source code of a third program that can be executed in a third language and so on. The last program should output PPCG with an optional single trailing newline.

The winner will be the submission with the most languages. Code length of the first program will be the tie breaker. 

Important rules:


No programs can be identical
Each language must only work on one of the source codes. It should be impossible to use the same language two places in the chain without breaking it(see examples). 


A shortened chain is not a broken chain. If you can use a language in a different place than intended and the end result is still PPCG then it's invalid

All versions of a language count as unique languages (but keep in mind rule number 2)




Examples:

An invalid submission:

print("""print'disp("PPCG")'""")



Python 3: print("""print'disp("PPCG")'""") prints print'disp("PPCG")'
Python 2: print'disp("PPCG")' prints disp("PPCG")
Octave  : disp("PPCG") prints PPCG


This works properly, but: you can run both the first and the second code in Python 2 without breaking the chain, so this violates rule number 2.

A valid submission with score 3:

print("""print'disp("PPCG")'""")



Python 3: print("""print'disp("PPCG")'""") prints print'disp("PPCG")' 
Perl    : print'disp("PPCG")' prints disp("PPCG")
Octave  : disp("PPCG") prints PPCG


This is the exact same code as the invalid example. The difference is, we have chosen languages that adhere to rule number 2: You can't run the first code in Perl/Octave, the second code in Python 3/Octave nor the last code in Python 3/Perl. This is valid even though Python 2 can run the two first programs, because we haven't used Python 2 as one of the languages.
12 languages, 64 bytes
Charcoal -&gt; tinylisp -&gt; Python 3 -&gt; /// -&gt; Python 2 -&gt; Perl -&gt; QBasic -&gt; Pip -&gt; V -&gt; Retina -&gt; Pyth -&gt; GolfScript
Charcoal
Ｐ(q(print('/x/print/x&quot;&quot;&quot;x q&lt;?&quot;`i.*&quot;:?CHR$(34)+&quot;\'PPCG\'`&quot;&gt;&quot;&quot;&quot;'*1

Any run of printable ASCII is a string literal in Charcoal. Ｐ can be used for multidirectional printing, but in this case it simply prints the string going rightward.
tinylisp
(q(print('/x/print/x&quot;&quot;&quot;x q&lt;?&quot;`i.*&quot;:?CHR$(34)+&quot;\'PPCG\'`&quot;&gt;&quot;&quot;&quot;'*1

The only reserved characters in tinylisp (as of this writing) are parentheses and whitespace. Any other run of characters is a token, even something like +&quot;\'PPCG\'`&quot;&gt;&quot;&quot;&quot;'*1. Parentheses define lists. The q (quote) builtin returns its argument unevaluated--in this case, the nested list (print ('/x/print/x&quot;&quot;&quot;x q&lt;?&quot;`i.*&quot;:?CHR$ (34) +&quot;\'PPCG\'`&quot;&gt;&quot;&quot;&quot;'*1)). (Missing parentheses at the end are autocompleted.)
Python 3
(print ('/x/print/x&quot;&quot;&quot;x q&lt;?&quot;`i.*&quot;:?CHR$ (34) +&quot;\'PPCG\'`&quot;&gt;&quot;&quot;&quot;'*1))

Since print is a function in Python 3, we can wrap it in parentheses with no problem. In Python 2, where it's a statement, this is a syntax error. Unfortunately, Perl is fine with the parentheses, so we also do *1 (string repetition in Python, cast to int and multiply in Perl).
///
/x/print/x&quot;&quot;&quot;x q&lt;?&quot;`i.*&quot;:?CHR$ (34) +&quot;'PPCG'`&quot;&gt;&quot;&quot;&quot;

/x/print/ changes x to print in the rest of the program, which has no slashes and therefore is output with no further changes.
Python 2
print&quot;&quot;&quot;print q&lt;?&quot;`i.*&quot;:?CHR$ (34) +&quot;'PPCG'`&quot;&gt;&quot;&quot;&quot;

No parentheses after print, doesn't work in Python 3. Perl doesn't like the triple quotes.
Perl
print q&lt;?&quot;`i.*&quot;:?CHR$ (34) +&quot;'PPCG'`&quot;&gt;

Perl's various ways of quoting a string are helpful, and distinct from other languages. Here we use q&lt;...&gt;.
QBasic
?&quot;`i.*&quot;:?CHR$ (34) +&quot;'PPCG'`&quot;

A couple of print statements (abbreviated as ?), using CHR$(34) to get a double quote.
Pip
`i.*
&quot;'PPCG'`

A single Pattern (regex) literal in backticks.
V
i.*
&quot;'PPCG'

Switch to insert mode, add some text.
Retina
.*
&quot;'PPCG'

Match anything and replace it with the second line.
Pyth
&quot;'PPCG'

Pyth quotes don't need to be matched (which makes this not a valid program in Pip).
GolfScript
'PPCG'