Problem:
パティシエ

ケーキ屋さんが、まちまちな大きさのロールケーキをたくさん作りました。あなたは、このケーキを箱に並べる仕事を任されました。

ロールケーキはとてもやわらかいので、他のロールケーキが上に乗るとつぶれてしまいます。ですから、図(a) のように全てのロールケーキは必ず箱の底面に接しているように並べなければなりません。並べ替えると必要な幅も変わります。

図(a)

図(b)

n 個のロールケーキの半径 r1, r2, ..., rn と箱の長さを読み込み、それぞれについて、箱の中にうまく収まるかどうか判定し、並べる順番を工夫すると箱に入る場合は "OK"、どう並べても入らない場合には "NA"を出力するプログラムを作成してください。

ロールケーキの断面は円であり、箱の壁の高さは十分に高いものとします。 ただし、ロールケーキの半径は 3 以上 10 以下の整数とします。つまり、ケーキの半径に極端な差はなく、図(b) のように大きなケーキの間に小さなケーキがはまり込んでしまうことはありません。

Input

入力は複数のデータセットからなります。各データセットは以下の形式で与えられます。

W r1 r2 ... rn

最初に箱の長さを表す整数 W (1 ≤ W ≤ 1,000) が与えられます。 続いて、空白区切りで各ロールケーキの半径を表す整数 ri (3 ≤ ri ≤ 10) が与えられます。ケーキの個数 n は 12 以下です。

データセットの数は 50 を超えません。

Output

データセットごとに OK または NA を１行に出力してください。

Sample Input

30 4 5 6
30 5 5 5
50 3 3 3 10 10
49 3 3 3 10 10

Output for the Sample Input

OK
OK
OK
NA

Solution in Ruby (judge verdict: Accepted)

class Solver
  def initialize
    while data = gets
      @data = data.chomp.split(' ').map(&:to_i)
      @length = @data.shift
      @data.unshift(0)
      @graph = Array.new(@data.size).map{Array.new(@data.size, 0)}
      @dp = Array.new(1 << @data.size).map{Array.new(@data.size, -1)}
      create_graph
      answer = 9999

      answer = solver( 0, 0 )

      @graph.each do |graph|
        #p graph
      end
      puts (answer <= @length)? "OK" : "NA"
    end
  end

  def create_graph
    0.upto(@data.size-1) do |id|
      0.upto(@data.size-1) do |id2|
        if id == 0
          @graph[id][id2] = @data[id2]
        elsif id != id2
          if id2 == 0
            @graph[id][0] = @data[id]
          else
            @graph[id][id2] = calc_dist(id, id2)
          end
        end
      end
    end
  end

  def calc_dist(id1, id2)
    r1 = @data[id1]
    r2 = @data[id2]
    a = r1 + r2
    b = r1 - r2
    dist = Math.sqrt(a**2 - b**2)
  end

  def solver( s, v )
    return @dp[s][v] if @dp[s][v] >= 0

    return 0 if s == (1 << @data.size) - 1 && v == 0

    res = 9999
    0.upto(@data.size-1) do |id|
      if !((s >> id) & 1 == 1)
        res = [ res, solver( s | (1 << id), id) + @graph[v][id]].min
      end
    end
    @dp[s][v] = res
  end
end

s = Solver.new