How do you write a program which produces its own source code as its output?