#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define ordered_set <int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset <int, null_type, less_equal <int>, rb_tree_tag, tree_order_statistics_node_update>
#define int long long
#define double long double
#define pii pair <int, int>
#define tiii tuple <int, int, int>
#define tiiii tuple <int, int, int, int>
#define emb emplace_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define iShowSpeed cin.tie(NULL)->sync_with_stdio(false)
#define matrix vector <vector <int>>
#define mat(n, m) vector <vector <int>> (n, vector <int> (m));
const int mod = 1e9 + 7;
const int inf = 1e18;
const matrix II = {{1, 0}, {0, 1}};
const int N = 2e5 + 5;
bool ok(string &s){
return s[0] == 't';
}
bool query(int x, int y){
cout << "examine " << x << " " << y << endl;
string s; cin >> s;
return ok(s);
}
void solve(){
int n, x, y; cin >> n >> x >> y;
int dist = 0, mn = inf;
int l = 0, r = n;
// lefttttttttttttttttttttttttttttttttttttttttttttttttttttttt
dist = x - 1, mn = inf;
while (dist > 0) {
if (!query(x - dist, y)) mn = min(mn, dist);
dist /= 2;
}
l = x - mn, r = x;
while (l < r) {
int mid = (l + r) / 2;
if (query(mid, y)) r = mid;
else l = mid + 1;
}
int left = l;
// rightttttttttttttttttttttttttttttttttttttttttttttttttttttt
dist = n - x, mn = inf;
while (dist > 0) {
if (!query(x + dist, y)) mn = min(mn, dist);
dist /= 2;
}
l = x, r = x + mn;
while (l < r) {
int mid = (l + r + 1) / 2;
if (query(mid, y)) l = mid;
else r = mid - 1;
}
int right = l;
int len = right - left + 1;
// cout << "LR : " << left << ", " << right << "\n";
// find y axis
l = 0, r = min(len - 1, y - 1);
while (l < r) {
int mid = (l + r + 1) / 2;
if (query(x, y - mid)) l = mid;
else r = mid - 1;
}
int up = y - l;
l = 0, r = min(len - 1, n - y);
while (l < r) {
int mid = (l + r + 1) / 2;
if (query(x, y + mid)) l = mid;
else r = mid - 1;
}
int down = y + l;
// cout << "UD : " << up << ", " << down << "\n";
// idk some other shi
int cx = (left + right) / 2;
int cy = (up + down) / 2;
len = min(right - left + 1, cx - 1);
while (1) {
if (query(cx - len, cy)) cx -= len;
else break;
}
len = min(right - left + 1, cy - 1);
while (1) {
if (query(cx, cy - len)) cy -= len;
else break;
}
cout << "solution " << cx + 2 * len << " " << cy + 2 * len << endl;
}
int32_t main(){
// iShowSpeed;
// int q; cin >> q; while (q--)
solve();
}