Refer to Nidonocu on Wikipedia for details.