several typos have been corrected