#include <bits/stdc++.h>
using namespace std;
set<int> v2s(vector<int> v, int l, int r) {
  set<int> s;
  for (int i = l; i <= r; i++) s.insert(v[i]);
  return s;
}
vector<int> s2v(set<int> s) {
  vector<int> v;
  for (set<int>::iterator it = s.begin(); it != s.end(); it++) v.push_back(*it);
  return v;
}
int question(set<int> s) {
  if (int(s.size()) <= 1) return 0;
  cout << "? " << int(s.size()) << endl;
  cout.flush();
  bool first = true;
  for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
    if (not first) cout << " ";
    first = false;
    cout << *it;
  }
  cout << endl;
  cout.flush();
  int x;
  cin >> x;
  if (x == -1) exit(0);
  return x;
}
void add(set<int> &s0, set<int> s1) {
  for (set<int>::iterator it = s1.begin(); it != s1.end(); it++) s0.insert(*it);
}
set<int> sum(set<int> s0, set<int> s1) {
  add(s0, s1);
  return s0;
}
set<int> sum(int u, set<int> s) {
  s.insert(u);
  return s;
}
void remove(set<int> &s0, set<int> s1) {
  for (set<int>::iterator it = s1.begin(); it != s1.end(); it++) s0.erase(*it);
}
set<int> sol;
set<int> getcon(set<int> &s, vector<int> &v, int l, int r) {
  if (r < l) return set<int>();
  if (question(sum(s, v2s(v, l, r))) - question(v2s(v, l, r)) == 0)
    return set<int>();
  if (l == r) return v2s(v, l, l);
  int med = (l + r) / 2;
  return sum(getcon(s, v, l, med), getcon(s, v, med + 1, r));
}
set<int> getcon(set<int> s0, set<int> s1) {
  if (int(s1.size()) == 0) return set<int>();
  vector<int> v = s2v(s1);
  return getcon(s0, v, 0, int(v.size()) - 1);
}
pair<int, int> getpair(vector<int> &v, int l0, int r0, int l1, int r1) {
  if (l0 == r0) {
    if (l1 == r1) return pair<int, int>(v[l0], v[l1]);
    int med1 = (l1 + r1) / 2;
    if (question(sum(v[l0], v2s(v, l1, med1))))
      return getpair(v, l0, r0, l1, med1);
    return getpair(v, l0, r0, med1 + 1, r1);
  }
  int med0 = (l0 + r0) / 2;
  if (question(sum(v2s(v, l0, med0), v2s(v, l1, r1))))
    return getpair(v, l0, med0, l1, r1);
  return getpair(v, med0 + 1, r0, l1, r1);
}
pair<int, int> getpair(vector<int> &v, int l, int r) {
  int med = (l + r) / 2;
  if (question(v2s(v, l, med))) return getpair(v, l, med);
  if (question(v2s(v, med + 1, r))) return getpair(v, med + 1, r);
  return getpair(v, l, med, med + 1, r);
}
pair<int, int> getpair(set<int> s) {
  vector<int> v = s2v(s);
  return getpair(v, 0, int(s.size()) - 1);
}
int getone(int u, vector<int> &v, int l, int r) {
  if (l == r) return v[l];
  int med = (l + r) / 2;
  if (question(sum(u, v2s(v, l, med)))) return getone(u, v, l, med);
  return getone(u, v, med + 1, r);
}
int getone(int u, set<int> s) {
  vector<int> v = s2v(s);
  return getone(u, v, 0, int(v.size()) - 1);
}
void write(set<int> s) {
  cout << "{ ";
  for (set<int>::iterator it = s.begin(); it != s.end(); it++)
    cout << *it << ",";
  cout << " }" << endl;
}
void compute(set<int> &s) {
  vector<set<int> > lista;
  lista.push_back(sum(*s.begin(), set<int>()));
  for (int i = 0; int(s.size()); i++) {
    set<int> back = lista.back();
    if (question(back)) {
      pair<int, int> p = getpair(back);
      vector<int> su, sv;
      su.push_back(p.first);
      sv.push_back(p.second);
      for (int j = i - 1; su.back() != sv.back(); j--) {
        su.push_back(getone(su.back(), lista[j]));
        sv.push_back(getone(sv.back(), lista[j]));
      }
      reverse(su.begin(), su.end());
      for (int j = 0; j < int(sv.size()) - 1; j++) su.push_back(sv[j]);
      cout << "N " << int(su.size()) << endl;
      cout.flush();
      for (int j = 0; j < int(su.size()); j++) {
        if (j > 0) cout << " ";
        cout << su[j];
      }
      cout << endl;
      cout.flush();
      exit(0);
    }
    if (i % 2 == 0) add(sol, back);
    remove(s, back);
    set<int> nextelem = getcon(back, s);
    if (int(nextelem.size()) == 0) return;
    lista.push_back(nextelem);
  }
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  set<int> s;
  for (int i = 1; i <= n; i++) s.insert(i);
  while (int(s.size())) compute(s);
  cout << "Y " << int(sol.size()) << endl;
  cout.flush();
  bool first = true;
  for (set<int>::iterator it = sol.begin(); it != sol.end(); it++) {
    if (not first) cout << " ";
    first = false;
    cout << *it;
  }
  cout << endl;
  cout.flush();
}
