exact diagonalization