#include <bits/stdc++.h>
using namespace std;
const int NUM_ROW = 15;
const int NUM_COL = 15;
int mod(int a) {
  if (a < 0) {
    return -a;
  }
  return a;
}
int cmp(const void *a, const void *b) { return -(*(int *)a - *(int *)b); }
void FV(int grid[NUM_ROW][NUM_COL], int length) {
  for (int k = 0; k < length; k++) {
    for (int i = 0; i < length; i++) {
      for (int j = 0; j < length; j++) {
        if (grid[k][j] != 0 && grid[i][k] != 0)
          grid[i][j] = min(grid[i][j], grid[i][k] + grid[k][j]);
      }
    }
  }
}
void printGrid(int grid[NUM_ROW][NUM_COL], int row_length, int col_length) {
  for (int i = 0; i < row_length; i++) {
    for (int j = 0; j < col_length; j++) {
      cout << grid[i][j] << " ";
    }
    cout << endl;
  }
}
void printArr(int *arr, int length) {
  for (int i = 0; i < length; i++) {
    cout << arr[i] << " ";
  }
  cout << endl;
}
void copyGrid(int grid1[NUM_ROW][NUM_COL], int grid[NUM_ROW][NUM_COL],
              int row_length, int col_length) {
  for (int i = 0; i < row_length; i++) {
    for (int j = 0; j < col_length; j++) {
      grid1[i][j] = grid[i][j];
    }
  }
}
int main() {
  int n, k;
  cin >> n >> k;
  int tot = 0;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      tot++;
    }
  }
  if (tot <= k) {
    cout << "no solution";
    return 0;
  }
  for (int i = 0; i < n; i++) {
    int x = i;
    int y = n - i - 1;
    cout << x << " " << y * n << endl;
  }
}
