THIS IS NOT MEANT AS REFERENCE.

PLEASE LOOK AT CODE ONLY IF YOU ARE BADLY STUCK AND DESPERATE.