Currently Tiny is learning Computational Geometry. When trying to solve a problem called "The Closest Pair Of Points In The Plane", he found that a code which gave a wrong time complexity got Accepted instead of Time Limit Exceeded.

The problem is the follows. Given n points in the plane, find a pair of points between which the distance is minimized. Distance between (x1, y1) and (x2, y2) is <image>.

The pseudo code of the unexpected code is as follows:
    
    
      
    input n  
    for i from 1 to n  
        input the i-th point's coordinates into p[i]  
    sort array p[] by increasing of x coordinate first and increasing of y coordinate second  
    d=INF        //here INF is a number big enough  
    tot=0  
    for i from 1 to n  
        for j from (i+1) to n  
            ++tot  
            if (p[j].x-p[i].x>=d) then break    //notice that "break" is only to be  
                                                //out of the loop "for j"  
            d=min(d,distance(p[i],p[j]))  
    output d  
    

Here, tot can be regarded as the running time of the code. Due to the fact that a computer can only run a limited number of operations per second, tot should not be more than k in order not to get Time Limit Exceeded.

You are a great hacker. Would you please help Tiny generate a test data and let the code get Time Limit Exceeded?

Input

A single line which contains two space-separated integers n and k (2 ≤ n ≤ 2000, 1 ≤ k ≤ 109).

Output

If there doesn't exist such a data which let the given code get TLE, print "no solution" (without quotes); else print n lines, and the i-th line contains two integers xi, yi (|xi|, |yi| ≤ 109) representing the coordinates of the i-th point.

The conditions below must be held:

  * All the points must be distinct. 
  * |xi|, |yi| ≤ 109. 
  * After running the given code, the value of tot should be larger than k. 

Examples

Input

4 3


Output

0 0
0 1
1 0
1 1


Input

2 100


Output

no solution
[n,k]=[int(i) for i in raw_input().split()]
if (n*(n-1)/2)<=k:
    print "no solution"
else:
    x=0
    y=0
    j=0
    for i in range(n):
        print 0,i
##        print x,y
##        j+=1
##        if j==n:
##            break
##        print x+1,y
##        j+=1
##        if j==n:
##            break
##        print x+1,y+1
##        j+=1
##        if j==n:
##            break
##        print x,y+1
##        j+=1
##        if j==n:
##            break
##        x+=1
##        y+=1
##epsilon=0.000000001
##[a,b,c,d]=[float(i) for i in raw_input().split()]
##j=0
##p=(a/b)
##q=((b-a)/b)*((d-c)/d)
##p1=p
##p2=p1+q*p
##i=2
##while p2-p1>epsilon:
##    p1=p2
##    p2=p2+(q**i)*p
##    i+=1
##print p2
####n=int(raw_input())
####for i in range(n):
####    j=raw_input()
####    ##print j[-1:-5:-1]
####    if (j[-1:-6:-1]==".alal" and j[0:5]!="miao."):
####        print "Freda's"
####    elif (j[0:5]=="miao." and j[-1:-6:-1]!=".alal" ):
####        print "Rainbow's"
####    else:
####        print "OMG>.< I don't know!"
####
####    
