#include <bits/stdc++.h>
using namespace std;
int query(char type, int a) {
  int res;
  cout << type << ' ' << a << endl;
  cin >> res;
  return res;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(nullptr);
  int n;
  cin >> n;
  vector<int> cnt(n + 1, -1);
  for (int i = 2; i <= n; i++) {
    if (cnt[i] == -1) {
      cnt[i] = 1;
      for (int64_t j = 1LL * i * i; j <= n; j += i) {
        if (cnt[j] == -1) {
          cnt[j] = -2;
          cnt[i]++;
        }
      }
    }
  }
  vector<pair<int, int>> a;
  for (int i = 2; i <= n; i++) {
    if (cnt[i] > 0) {
      a.emplace_back(i, cnt[i]);
    }
  }
  bool found_first = false;
  int n_primes = a.size();
  int should_have = n;
  int batch = max(3, (int)sqrt(a.size()));
  int rep = (n_primes + batch - 1) / batch;
  int answer = 1;
  auto test_pow = [&](int target) -> int {
    if (1LL * target * target > n) return target;
    int x = target;
    while (x * target <= n) x *= target;
    while (query('A', x) == 0) {
      x /= target;
    }
    return x;
  };
  for (int i = 0; i < rep; i++) {
    int start = i * batch;
    int stop = min(n_primes, (i + 1) * batch);
    for (int j = start; j < stop; j++) {
      int res = query('B', a[j].first);
      if (res != a[j].second) {
        answer *= test_pow(a[j].first);
      }
      should_have -= a[j].second;
    }
    if (!found_first) {
      int now_remaining = query('A', 1);
      if (now_remaining != should_have) {
        for (int j = start; j < stop; j++) {
          int res = query('A', a[j].first);
          if (res != 0) {
            found_first = true;
            answer *= test_pow(a[j].first);
            break;
          }
        }
      }
    }
  }
  cout << "C " << answer << endl;
  return 0;
}
