2336 {
2337 long m;
2338 long n;
2339 long tol;
2340 cin >> m >> n >> tol;
2341 vector grid(n, vector<long>(m));
2342 unordered_map<long, unsigned long> um_cnt;
2343 unordered_map<long, long> um_x;
2344 unordered_map<long, long> um_y;
2345 for(int i = 0; i < n; i++) {
2346 for(int j = 0; j < m; j++) {
2347 cin >> grid[i][j];
2348 um_cnt[grid[i][j]]++;
2349 um_x[grid[i][j]] = i;
2350 um_y[grid[i][j]] = j;
2351 }
2352 }
2353 long ans_x;
2354 long ans_y;
2355 long ans_v;
2356 bool has_ans = false;
2357 for(auto [v, cnt]: um_cnt) {
2358 if(cnt == 1) {
2359 long x = um_x[v];
2360 long y = um_y[v];
2361 pair<long, long> surroundings[8] = {make_pair(x - 1, y - 1), make_pair(x - 1, y), make_pair(x - 1, y + 1),
2362 make_pair(x, y - 1), make_pair(x, y + 1),
2363 make_pair(x + 1, y - 1), make_pair(x + 1, y), make_pair(x + 1, y + 1)};
2364 bool flag = true;
2365 for(auto [s_x, s_y]: surroundings) {
2366 if(s_x >= 0 && s_x < n && s_y >= 0 && s_y < m) {
2367 const long dist = abs(v - grid[s_x][s_y]);
2368 if(dist <= tol) {
2369 flag = false;
2370 break;
2371 }
2372 }
2373 }
2374 if(flag) {
2375 if(!has_ans) {
2376 ans_x = x + 1;
2377 ans_y = y + 1;
2378 ans_v = v;
2379 has_ans = true;
2380 } else {
2381 cout << "Not Unique";
2382 return 0;
2383 }
2384 }
2385 }
2386 }
2387 if(has_ans) {
2388 cout << '(' << ans_y << ", " << ans_x << "): " << ans_v;
2389 } else {
2390 cout << "Not Exist";
2391 }
2392 return 0;
2393 }