#include <bits/stdc++.h>
using namespace std;
vector<bool> is_prime(10000007, true);
vector<vector<long long int>> factors;
void seive() {
  for (int i = 2; i <= 10000007; i++) {
    {
      if (is_prime[i])
        for (int num = 2 * i; num <= 10000007; num += i) {
          is_prime[num] = false;
        }
    }
  }
}
long long int GCD(long long int x, long long int y) {
  long long int mx = max(x, y), mn = min(x, y);
  while (mn != 0) {
    long long int temp = mn;
    mn = mx % mn;
    mx = temp;
  }
  return mx;
}
long long int mod(long long int x, long long int y) {
  return max(x - y, y - x);
}
vector<vector<long long int>> adj, dis_grid, vis_grid, avail, LCA;
vector<vector<int>> adj_grid;
vector<long long int> vis, in, dis;
vector<vector<pair<long long int, long long int>>> adj_djik;
long long int TIMER;
void djiks(int node) {
  dis[node] = 0;
  priority_queue<pair<long long int, long long int>,
                 vector<pair<long long int, long long int>>>
      pq;
  pq.push({0, 1});
  while (!pq.empty()) {
    long long int curr_dis = pq.top().first, curr = pq.top().second;
    pq.pop();
    cout << curr << endl;
    if (curr_dis < dis[curr]) continue;
    for (pair<long long int, long long int> child : adj_djik[curr]) {
      if (curr_dis + child.second > dis[child.first]) {
        dis[child.first] = curr_dis + child.second,
        pq.push({dis[child.first], child.first});
      }
    }
  }
}
long long int dx[8] = {2, 2, 1, 1, -1, -1, -2, -2};
long long int dy[8] = {1, -1, 2, -2, 2, -2, 1, -1};
char dir[4] = {'D', 'U', 'R', 'L'};
long long int n, m;
bool is_valid(int x, int y) {
  if (x < 1 || x > n || y < 1 || y > m) return false;
  if (vis_grid[x][y] == 1) return false;
  return true;
}
vector<vector<char>> Path;
pair<long long int, long long int> BP;
void bfs(int x, int y) {
  vis_grid[x][y] = 1;
  queue<pair<int, int>> q;
  q.push({x, y});
  while (!q.empty()) {
    int curX = q.front().first, curY = q.front().second;
    q.pop();
    for (int i = 0; i < 8; i++) {
      int newX = curX + dx[i], newY = curY + dy[i];
      if (is_valid(newX, newY)) {
        vis_grid[newX][newY] = 1;
        ;
        adj_grid[newX][newY] = 1 - adj_grid[curX][curY];
        q.push({newX, newY});
      }
    }
  }
}
vector<vector<long long int>> bin;
long long int binary_conv(long long int x) {
  long long int ans = 0;
  vector<long long int> a(31, 0);
  int k = -1;
  long long int xs = x, val = 1;
  for (int i = 1; i <= x; i *= 2) {
    k++;
    val = i;
  }
  for (long long int i = val; i >= 1; i /= 2) {
    if (i <= x) {
      x -= i;
      a[30 - k] = 1;
      ans++;
    }
    k--;
  }
  return ans;
}
long long int binpow(long long int a, long long int b) {
  if (b == 0) return 1;
  long long int res = binpow(a, b / 2);
  if (b % 2 == 0) {
    return (res * res) % 1000000007;
  } else
    return (a * res * res) % 1000000007;
}
long long int lb(vector<int> a, int x, int l, int r) {
  int temp = -1;
  while (l <= r) {
    int mid = l + (r - l) / 2;
    if (a[mid] <= x) {
      temp = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  return temp;
}
vector<int> no_of_primes(10000007, 0);
vector<vector<vector<int>>> dp;
int r[100007], par[100007];
int fin(int x) {
  if (par[x] < 0)
    return x;
  else
    return par[x] = fin(par[x]);
}
void merg(int a, int b) { par[a] = b; }
int main() {
  long long int t = 1;
  while (t--) {
    cin >> n;
    m = n;
    adj_grid.resize(n + 1, vector<int>(n + 1)),
        vis_grid.resize(n + 1, vector<long long int>(n + 1, 0));
    bfs(1, 1);
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
        if (adj_grid[i][j] == 0)
          cout << "B";
        else
          cout << "W";
      }
      cout << endl;
    }
  }
  return 0;
}
