m_ = lambda n: np.mat(1./(np.arange(n)+1)).T
X_ = lambda x, n: np.mat(x**np.arange(n).reshape((n,1)))
def w(x,n):
    X = X_(x,n)
    l = np.linalg.solve(X*X.T, m_(n))
    return X.T*l
def Q(x):
    for n in xrange(1, len(x)+1):
        if min(w(x,n)) < 0:
            n = n-1
            break
    U,d,Vt = np.linalg.svd(X_(x, n+2))
    return np.max(abs(np.mat(U[:,n:]).T*m_(2*n)))