A Guide To The Theory Of Np Completeness