panic/recover 1

What does the following program print?
package main

import "fmt"

func main() {
	defer func() {
		fmt.Print(recover())
	}()
	defer func() {
		defer fmt.Print(recover())
		defer panic(1)
		recover()
	}()
	defer recover()
	panic(2)
}

Choices:

Answer: 21

Run it on Go play.

Key points:

Please read Explain Panic/Recover Mechanism in Detail for details.