Branching Processes and Their Applications