Problem: Igor the analyst has adopted n little bunnies. As we all know, bunnies love carrots. Thus, Igor has bought a carrot to be shared between his bunnies. Igor wants to treat all the bunnies equally, and thus he wants to cut the carrot into n pieces of equal area. 

Formally, the carrot can be viewed as an isosceles triangle with base length equal to 1 and height equal to h. Igor wants to make n - 1 cuts parallel to the base to cut the carrot into n pieces. He wants to make sure that all n pieces have the same area. Can you help Igor determine where to cut the carrot so that each piece have equal area?

<image> Illustration to the first example.

Input

The first and only line of input contains two space-separated integers, n and h (2 ≤ n ≤ 1000, 1 ≤ h ≤ 105).

Output

The output should contain n - 1 real numbers x1, x2, ..., xn - 1. The number xi denotes that the i-th cut must be made xi units away from the apex of the carrot. In addition, 0 < x1 < x2 < ... < xn - 1 < h must hold. 

Your output will be considered correct if absolute or relative error of every number in your output doesn't exceed 10 - 6.

Formally, let your answer be a, and the jury's answer be b. Your answer is considered correct if <image>.

Examples

Input

3 2


Output

1.154700538379 1.632993161855


Input

2 100000


Output

70710.678118654752

Note

Definition of isosceles triangle: <https://en.wikipedia.org/wiki/Isosceles_triangle>.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
class input {
 private:
  bool fail;
  istream* stream;

 public:
  input(istream& stream_ = cin) { stream = &stream_; }
  istream& getStream() { return *stream; }
  template <typename T = int>
  T read() {
    T value;
    if (*stream >> value) {
      fail = false;
    } else {
      fail = true;
    }
    return value;
  }
  template <typename T = int>
  vector<T> readArray() {
    size_t size = read<size_t>();
    return readArray<T>(size);
  }
  template <typename T = int>
  vector<T> readArray(size_t size) {
    vector<T> v(size);
    for (size_t i = 0; i < size; i++) {
      if (*stream >> v[i]) {
        fail = false;
      } else {
        fail = true;
      }
    }
    return v;
  }
  bool isFailed() { return fail; }
  static input& getStdin() {
    static input in(cin);
    return in;
  }
};
class output {
 private:
  ostream* stream;

 public:
  output(ostream& stream_ = cout) { stream = &stream_; }
  ostream& getStream() { return *stream; }
  template <typename T>
  output& put(T& value) {
    *stream << value;
    return *this;
  }
  template <typename T>
  output& put(T& value, int precision) {
    *stream << setprecision(precision) << value;
    return *this;
  }
  template <typename T>
  output& write(const T& value) {
    *stream << value << endl;
    return *this;
  }
  template <typename T>
  output& write(T& value, int precision) {
    *stream << setprecision(precision) << value << endl;
    return *this;
  }
  template <typename T>
  output& writeArray(const vector<T>& v, bool appendSize = true) {
    if (appendSize) {
      write(v.size());
    }
    for (auto& x : v) {
      *stream << x << " ";
    }
    *stream << endl;
    return *this;
  }
  output& getStdout() {
    output out(cout);
    return out;
  }
  output getStderr() {
    output err(cerr);
    return err;
  }
};
input in(cin);
output out(cout);
output err(cerr);
void solve() {
  auto n = in.read();
  auto h = in.read<double>();
  auto s = h / 2;
  auto p = s / n;
  for (auto i = 1; i < n; i++) {
    auto v = sqrt(2 * h * i * p);
    out.put(v, 10).put(" ");
  }
}
int main() {
  while (true) {
    auto startT = clock();
    solve();
    auto endT = clock();
    cerr << "Working time: " << (endT - startT) << " ms" << endl;
    cerr << "-------------------------" << endl;
    bool ok = false;
    while (!in.isFailed() && !ok) {
      ok = in.read<char>() == '$';
    }
    if (!ok) {
      break;
    }
  }
}