Program that outputs a program that outputs a program ... that outputs "Hello!" Challenge

Write the shortest program P such that 


P takes any positive integer n as input, and outputs a program string P1 
executing P1 (with no input) outputs a program string P2,
executing P2 (with no input) outputs a program string P3,
...
executing Pn (with no input) outputs exactly "Hello!" (without the quotes).


Schematically:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P(n) → P1 → P2 → ... → Pn → Hello!

Criteria


I/O is via stdin/stdout.
Program length is measured in bytes.
Programs consist only of ASCII printable characters.
There must be no duplicates among the programs P, P1,...,Pn.


EDIT: Programs P, P1,...,Pn are meant to be source code, and "executing the program" refers to whatever processing produces the output (i.e., interpretation, compilation &amp; execution, etc.).
Golfscript 39 14

~'Hello!'{`}@*


Example:

Assuming that n=4 and our program is P, these are the steps:


Run P with parameter 4. The output is "\"\\\"\\\\\\\"Hello!\\\\\\\"\\\"\"" (P1)
Running P1 outputs "\"\\\"Hello!\\\"\"" (P2)
Running P2 outputs "\"Hello!\"" (P3)
Running P3 outputs "Hello!"(P4)
Running P4 outputs Hello!. If you don't trust me, follow this link ☺.