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 JAVA):

Solution:
	import java.io.BufferedReader;
	import java.io.IOException;
	import java.io.InputStreamReader;
	import java.util.ArrayList;
	import java.util.Arrays;
	import java.util.Comparator;
	import java.util.StringTokenizer;
	
	public class Solution1{
		public static void main(String[] args) throws IOException{
			//FastReader sc = new FastReader();
			FastReader sc = new FastReader();
			int a = sc.nextInt();
			int b = sc.nextInt();
			double area = 1.0/2 * b;
			double tan = 1.0/(2 * b);
			//System.out.println(tan);
			double value = Math.sqrt(4.0 * tan * area/(a));
			//System.out.println(value);
			double ex = 1;
			for(int i = 0;i < a - 1;i++){
					System.out.printf("%.10f ",ex * value/(2 * tan));
					ex = Math.sqrt(i + 2);
			}
		}
		static class Pair{
			int price;
			int f;
			int b;
			Pair(int price,int f,int b){
				this.price = price;
				this.f = f;
				this.b = b;
			}
		}
		public static StringBuilder stringMaker(int n){
			StringBuilder st = new StringBuilder("");
			String s = "aabb";
			int t = n;
			while(t > 3){
				st.append(s);
				t = t - 4;
			}
			s = s.substring(0,t);
			st.append(s);
			return st;
		}
		public static boolean[] sieveAlgo(int n){
			boolean isPrime[] = new boolean[n + 1];
			for (int i = 2; i <= n; i++) {
	            isPrime[i] = true;
	        }
	
	        // mark non-primes <= n using Sieve of Eratosthenes
	        for (int factor = 2; factor*factor <= n; factor++) {
	
	            // if factor is prime, then mark multiples of factor as nonprime
	            // suffices to consider mutiples factor, factor+1, ...,  n/factor
	            if (isPrime[factor]) {
	                for (int j = factor; factor*j <= n; j++) {
	                    isPrime[factor*j] = false;
	                }
	            }
	        }
	        return isPrime;
		}
		public static int binarySearch(int[] arr,int low,int high,int key){
			while(low <= high){
				int mid = (low + high)/2;
				if(arr[mid] == key){
					return mid;
				}else if(arr[mid] < key){
					low = mid + 1;
				}else{
					high = mid - 1;
				}
			}
			return -1;
		}
		public static int ternarySearch(int[] arr,int l,int r,int key){
			if(r >= l){
				int mid1 = l + (r-1)/3;
				int mid2 = r - (r-1)/3;
				if(arr[mid1] == key){
					return mid1;
				}else if(arr[mid2] == key){
					return mid2;
				}
				if(key < arr[mid1]){
					return ternarySearch(arr,l,mid1-1,key);
				}else if(key > arr[mid2]){
					return ternarySearch(arr,mid2 + 1,r,key);
				}else{
					return ternarySearch(arr,mid1 + 1,mid2 - 1,key);
				}
			}
			return -1;
		}
		public static double fun(double x){
			return 2 * x * x - 12 * x + 7;
		}
		
		public static double tsModified(double start,double end){
			double l = start;
			double r = end;
			for(int i = 0;i < 200;i++){
				double mid1 = (l * 2 + r)/3;
				double mid2 = (l + 2 * r)/3;
				if(fun(mid1) < fun(mid2)){
					r = mid2;
				}else{
					l = mid1;
				}
			}
			double x = l;
			return fun(x);
		}
		public static String fmt(double d)
		{
		    if(d == (long) d)
		        return String.format("%d",(long)d);
		    else
		        return String.format("%s",d);
		}
		public static long[][] comparator(long[][] arr){
			Arrays.sort(arr, new Comparator<long[]>() {
	            @Override
	            public int compare(long[] a,long[] b) {
	                Long a1 = a[1];
	                Long b1 = b[1];
	            	return a1.compareTo(b1);
	            }
	        });
			return arr;
		}
		static class FastReader
	    {
	        BufferedReader br;
	        StringTokenizer st;
	 
	        public FastReader()
	        {
	            br = new BufferedReader(new
	                     InputStreamReader(System.in));
	        }
	 
	        String next()
	        {
	            while (st == null || !st.hasMoreElements())
	            {
	                try
	                {
	                    st = new StringTokenizer(br.readLine());
	                }
	                catch (IOException  e)
	                {
	                    e.printStackTrace();
	                }
	            }
	            return st.nextToken();
	        }
	 
	        int nextInt()
	        {
	            return Integer.parseInt(next());
	        }
	 
	        long nextLong()
	        {
	            return Long.parseLong(next());
	        }
	 
	        double nextDouble()
	        {
	            return Double.parseDouble(next());
	        }
	 
	        String nextLine()
	        {
	            String str = "";
	            try
	            {
	                str = br.readLine();
	            }
	            catch (IOException e)
	            {
	                e.printStackTrace();
	            }
	            return str;
	        }
	    }
		public static String min(int m,int n){
			int[] arr = new int[m];
			arr[0] = 1;
			int sum = 1;
			int j = m - 1;
			for(int i = 1;i <= 18* m + 10;i++){
				if(sum != n){
					if(arr[j] == 9){
						j--;
					}else{
						arr[j]++;
						sum++;
					}
				}
				else{
					break;
				}
			}
			StringBuilder min = new StringBuilder("");
			for(int i = 0;i < arr.length;i++){
				min.append(arr[i]);
			}
			return min.toString();
		}
		public static String max(int m,int n){
			int[] arr = new int[m];
			arr[0] = 1;
			int sum = 1;
			int j = 0;
			for(int i = 1;i <= 9 * m + 10;i++){
				if(sum != n){
					if(arr[j] == 9){
						j++;
					}else{
						arr[j]++;
						sum++;
					}
				}
				else{
					break;
				}
			}
			StringBuilder min = new StringBuilder("");
			for(int i = 0;i < arr.length;i++){
				min.append(arr[i]);
			}
			return min.toString();
		}
	    public static int KMPSearch(String txt,String pat){
			int m = pat.length();
			int n = txt.length();
			int lps[] = new int[m];
			int j = 0;
			int count = 0;
			PrefixTable(pat,m,lps);
			int i = 0;
			while (i < n)
		        {
		            if (pat.charAt(j) == txt.charAt(i))
		            {
		                j++;
		                i++;
		            }
		            if (j == m)
		            {
		            	count++;
		                j = lps[j-1];
		            }
		            else if (i < n && pat.charAt(j) != txt.charAt(i))
		            {
		                if (j != 0)
		                    j = lps[j-1];
		                else
		                    i = i+1;
		            }
		        }
			return count;
		}
		public static void PrefixTable(String pat,int m,int[] lps){
			int len = 0;
			int i = 1;
			lps[0] = 0;
			while(i < m){
				if(pat.charAt(i) == pat.charAt(len)){
					lps[i] = len + 1;
					i++;
					len++;
				}else if(len > 0){
					len = lps[len - 1];
				}else{
					lps[i] = 0;
					i++;
				}
			}
		}
	    public int digit(int x){
	    	int temp = x;
	    	int count = 0;
	    	while(temp != 0){
	    		count++;
	    		temp = temp/10;
	    	}
	    	return count;
	    }
	    public int sum(int x){
	    	int temp = x;
	    	int count = 0;
	    	while(temp != 0){
	    		count += temp % 10;
	    		temp = temp/10;
	    	}
	    	return count;
	    }
	    public int product(int x){
	    	int temp = x;
	    	int count = 1;
	    	while(temp != 0){
	    		count*=temp % 10;
	    		temp = temp/10;
	    	}
	    	return count;
	    }
	    public boolean isValid2(int x){
	    	int temp = x;
	    	while(temp != 0){
	    		if(temp % 10 == 0){
	    			return false;
	    		}
	    		temp = temp/10;
	    	}
	    	return true;
	    }
	    public boolean isValid(int x){
	    	if(!isValid2(x)){
	    		return false;
	    	}else{
	    		if(product(x) <= sum(x)){
	    			return true;
	    		}
	    		return false;
	    	}
	    }
	}