Accelerated Railgun

時間制限 : 1 sec, メモリ制限 : 131072 KB
英語版はこちら

Problem C: Accelerated Railgun

宙に舞うコインは放物線を描き、彼女はそれを紫電を纏った彼女の指先で受け止めた。彼女は超能力者である。それも、その都市にいる100万人を越える超能力者たちの中でも三本の指に入る電撃使いだ。親指に弾かれたコインは電磁力によって加速され、フレミングの左手の法則に従い射出される。その初速は、彼女が手加減した上でさえ音速の三倍を越える。そのような高速で射出されると、コインは空気摩擦と断熱圧縮によって加熱され、溶けてオレンジ色に輝くのだ。これが彼女の得意技、超電磁砲 (レールガン) である。その威力はコンクリートの壁に直径2メートルの穴を開けるほどである。

彼女はその能力を使って、しばしばこの都市にはびこる悪、郵便局強盗や銀行強盗などを退治してきていた。そして今日は、非人道的な人体実験を行う研究所があると聞き付けたので、彼女はそれを破壊することにした。彼女の超電磁砲だけがそれを撃ち抜くことができるのである。

コインを使った超電磁砲では威力が足りず、その研究所の建物を破壊することができない。彼女は近くに手頃な鎧が落ちているのを見つけたので、それをプロジェクタイルとして使うことにした。しかしながら、鎧はコインに比べてずっと大きく重いので、簡単に狙いを定めて打つことができない。彼女にできるのは、鎧を今ある場所から決められた速度ベクトルで射出することのみである。研究所の位置によっては、超電磁砲は直撃せずにただの花火になってしまう。

そこで彼女は、その都市の最も強力な超能力者に協力してもらうことにした。彼はその超能力の数限りない応用の一つとして、運動する物体の向きを変えることができる。ここで、研究所を原点(0, 0)とした2次元平面を考えよう。彼女はプロジェクタイルを P = (px, py) から速度ベクトル V = (vx, vy) で発射する。彼の超能力は、原点を中心とする半径 R(= 1.0) の円周状の仮想的な壁を作る。その壁に触れたプロジェクタイルは (入射角) = (反射角) となるように跳ね返るのである。

空気抵抗によって速度が落ちたり、熱によってプロジェクタイルが完全に溶けたりするために、超電磁砲の射程距離は D に限られている。この条件のもとで、超電磁砲が命中するかどうかを判定するプログラムを書いてほしい。研究所と鎧の大きさは無視できるほど小さく、発射された超電磁砲が再度 P を通過しても構わないものとする。

Input

入力は複数のデータセットから構成される。

各データセットは、1つの実数 D を含む行から始まる。続く行に4つの実数が1行に与えられる。これらはそれぞれ、px, py, vx, vyを表す。

D が 0 のとき入力の終わりを示す。

Output

各データセットごとに、超電磁砲が命中するならば、命中するまでに進んだ距離を出力せよ。そうでなければ、'impossible' と出力せよ。 小数点以下何桁でも出力してよく、1.0e-6未満の誤差を含んでいてもよい。

Constraints

  • ジャッジデータには、答えが (D - 1.0e-3) 以上となるような入力は無いことが保証されている。
  • 0.0001 ≤ |V| ≤ 0.9999
  • 0.0001 ≤ |P| ≤ 0.9999
  • D ≤ 50

Sample Input

10.0
0.5 0.0 -0.2 0.0
1.0
0.1 0.0 0.2 0.2
0

Output for the Sample Input

0.50000000
impossible

Source: University of Aizu Programming Contest , Aizu-Wakamatsu, Japan, 2010-05-29
Problem Setter:  Takashi Tayama