Elements of Quantum Computation and Quantum Communication