#include <bits/stdc++.h>
inline int in() {
  int k = 0;
  char ch = getchar();
  bool p = 1;
  while (ch < '-') ch = getchar();
  if (ch == '-') ch = getchar(), p = 0;
  while (ch > '-') k = k * 10 + ch - '0', ch = getchar();
  return p ? k : -k;
}
const int N = 200006, inf = 1e9;
struct node {
  long long x, y, id;
  node(long long x = 0, long long y = 0, int id = 0) : x(x), y(y), id(id) {}
  inline void read(int i) {
    x = in(), y = in(), id = i;
    return;
  }
  inline node operator-(const node &a) const { return node(x - a.x, y - a.y); }
  inline long long operator*(const node &a) { return x * a.y - y * a.x; }
  inline long long norm() { return x * x + y * y; }
} p[N], S[N], q[N];
inline bool cmp(node a, node b) {
  long long det = (a - p[1]) * (b - p[1]);
  if (det != 0) return det > 0;
  return (a - p[1]).norm() < (b - p[1]).norm();
}
int top;
long long Cross(node a, node b, node c) {
  return 1ll * (b.x - a.x) * (c.y - a.y) - 1ll * (b.y - a.y) * (c.x - a.x);
}
void Get(int n) {
  p[0].x = inf, p[0].y = inf;
  int k;
  for (int i = 1; i <= n; ++i)
    if (p[0].y > p[i].y || (p[0].y == p[i].y && p[0].x > p[i].x))
      p[0] = p[i], k = i;
  std::swap(p[k], p[1]);
  std::sort(p + 2, p + n + 1, cmp);
  S[1] = p[1], S[2] = p[2];
  top = 2;
  for (int i = 3; i <= n;) {
    if (top > 1 && Cross(S[top - 1], p[i], S[top]) >= 0)
      --top;
    else
      S[++top] = p[i++];
  }
  for (int i = 1; i <= top; ++i)
    if (S[i].x & 1 || S[i].y & 1) {
      puts("Ani");
      exit(0);
    }
}
int o[N];
int main() {
  int n = in() + 1;
  q[1].id = 1;
  for (int i = 2; i <= n; ++i) q[i].read(i);
  memcpy(p, q, sizeof p);
  Get(n);
  for (int i = 2; i <= top; i += 2) o[S[i].id] = 1, o[S[i + 1].id] = 2;
  top = 0;
  for (int i = 1; i <= n; ++i)
    if (o[i] != 2) p[++top] = q[i];
  Get(top);
  top = 0;
  for (int i = 1; i <= n; ++i)
    if (o[i] != 1) p[++top] = q[i];
  Get(top);
  puts("Borna");
  return 0;
}
