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.util.*;
import java.io.*;
import java.math.BigInteger;

public class Tester
{
	public static long mod=(long)(1e9+7);
	public static long xx,yy,d;
	static int minPrime[];
	static boolean isPrime[];
	
	public static void main(String[] args) throws IOException 
	{
		InputReader s=new InputReader(System.in);
        OutputStream outputStream = System.out;
        PrintWriter out=new PrintWriter(outputStream);
        
        int n = s.nextInt();
        int h = s.nextInt();
        
        double h1 = (double)h/Math.sqrt(n);
        out.print(h1+" ");
        
        for(int i=2; i<=n-1; i++)
        {
        	double hh = h1*Math.sqrt(i);
        	out.print(hh+" ");
        }
        
        
        out.close();
	}  
	
	static void modifiedSieve(int n)
	{
		minPrime = new int[n+1];
		
		for(int i=2; i<=Math.sqrt(n); i++)
		{
			if(minPrime[i] == 0)
			{
				for(int j=i*i; j<=n; j=j+i)
				{
					if(minPrime[j] == 0)
						minPrime[j] = i;
				}
			}
		}
		
		for(int i=2; i<=n; i++)
		{
			if(minPrime[i] == 0)
				minPrime[i] = i;
		}
		
	}
	
	static void Sieve(int n)
	{
		isPrime = new boolean[n+1];
		Arrays.fill(isPrime, true);
		
		isPrime[0]=false;
		isPrime[1]=false;
		
		for(int i=2; i<=Math.sqrt(n); i++)
		{
			if(isPrime[i])
			{
				for(int j=i*i; j<=n; j=j+i)
					isPrime[j]=false;
			}
		}
		
	}
	
	static void extendedEuclid(long A, long B)
	{
		if(B == 0) {
	        d = A;
	        xx = 1;
	        yy = 0;
	    }
	    else {
	        extendedEuclid(B, A%B);
	        long temp = xx;
	        xx = yy;
	        yy = temp - (A/B)*yy;
	    }
	}
	
	static long gcd(long a,long b)
	{
		if(b==0)
			return a;
		
		return gcd(b,a%b);
	}
	
	static long modulo(long x,long y,long p)	
	{
		 long res = 1;
		 x = x % p;  
		 
	    while (y > 0)
	    {
	        if (y%2==1)
	            res = (res*x) % p;
	 
	        y = y>>1;
	        x = (x*x) % p;  
	    }
	    return res;
	}
	
	public static int firstOccurence(int a[], int key)
	{
		int low = 0;
		int high = a.length-1;
		
		while(low <= high)
		{
			int mid = low + (high - low)/2;
			
			if(key <= a[mid])
			{
				high = mid - 1;
			}
			else if(key > mid)
			{
				low = mid + 1;
			}
		}
		
		return low;
	}
	
	public static int lastOccurence(int a[], int key)
	{
		int low = 0;
		int high = a.length-1;
		
		while(low <= high)
		{
			int mid = low + (high - low)/2;
			
			if(key >= a[mid])
			{
				low = mid + 1;
			}
			else if(key < a[mid])
			{
				high = mid - 1;
			}
		}
		
		return high;
	}
	
	public static void debug(Object... o)
	{
		System.out.println(Arrays.deepToString(o));
	}
	
	static long exp(long a, long b)
	{
		if(b==0)
			return 1;
		if(b==1)
			return a;
		if(b==2)
			return a*a;

		if(b%2==0)
			return exp(exp(a,b/2),2);
		else
			return a*exp(exp(a,(b-1)/2),2);
	}

	static class Pair implements Comparable<Pair>
	{
		long x,y;
		Pair(long ii, long cc)
		{
			x=ii;
			y=cc;
		}
		
		public int compareTo(Pair o) 
		{
			if(Long.compare(this.x, o.x) != 0)
				return Long.compare(this.x, o.x);
			else
				return Long.compare(this.y, o.y);
		}
		
		public int hashCode() {
			int hu = (int) (x ^ (x >>> 32));
			int hv = (int) (y ^ (y >>> 32));
			return 31 * hu + hv;
		}
 
		public boolean equals(Object o) {
			Pair other = (Pair) o;
			return x == other.x && y == other.y;
		}
		
		public String toString() {
			return "[x=" + x + ", y=" + y + "]";
		}
		
	}

    static final class InputReader{
        private final InputStream stream;
        private final byte[] buf=new byte[1024];
        private int curChar;
        private int Chars;
        public InputReader(InputStream stream){this.stream=stream;}
        private int read()throws IOException{
            if(curChar>=Chars){
                curChar=0;
                Chars=stream.read(buf);
                if(Chars<=0)
                    return -1;
            }
            return buf[curChar++];
        }
        public final int nextInt()throws IOException{return (int)nextLong();}
        public final long nextLong()throws IOException{
            int c=read();
            while(isSpaceChar(c)){
                c=read();
                if(c==-1) throw new IOException();
            }
            boolean negative=false;
            if(c=='-'){
                negative=true;
                c=read();
            }
            long res=0;
            do{
                if(c<'0'||c>'9')throw new InputMismatchException();
                res*=10;
                res+=(c-'0');
                c=read();
            }while(!isSpaceChar(c));
            return negative?(-res):(res);
        }
        public final int[] nextIntBrray(int size)throws IOException{
            int[] arr=new int[size];
            for(int i=0;i<size;i++)arr[i]=nextInt();
            return arr;
        }
        public final String nextString()throws IOException{
            int c=read();
            while(isSpaceChar(c))c=read();
            StringBuilder res=new StringBuilder();
            do{
                res.append((char)c);
                c=read();
            }while(!isSpaceChar(c));
            return res.toString();
        }
        public final String nextLine()throws IOException{
            int c=read();
            while(isSpaceChar(c))c=read();
            StringBuilder res=new StringBuilder();
            do{
                res.append((char)c);
                c=read();
            }while(c!='\n' && c!=-1);
            return res.toString();
        }
        private boolean isSpaceChar(int c)
        {
            return c==' '||c=='\n'||c=='\r'||c=='\t'||c==-1;
        }
    }
 
}