#include "code.h"
#include <bits/stdc++.h>
#define MAXN 1007
using namespace std;
int a[MAXN][MAXN];
int mk[MAXN],mr[MAXN],n;
bool sk[MAXN],sr[MAXN];
int dk,dr;
void levo(int x,int y);
void gore(int x,int y)
{
    if(x==n+1) {dr=y; return;}
    if(Pitaj(x,y)==1) {levo(x,y+1); return;}
    gore(x+1,y);
}
void levo(int x,int y)
{
    if(y==n+1) {dk=x; return;}
    if(Pitaj(x,y)==3) {gore(x+1,y); return;}
    levo(x,y+1);
}
int chkkln(int j)
{
    bool fk=true;
    int mn=Pitaj(1,j),mnd=1;
    for(int i=2;i<=n;i++)
    {
        int x=Pitaj(i,j);
        if(x==mn) fk=false;
        if(x<mn) {mn=x; mnd=i; fk=true;}
    }
    if(!fk) return -1;
    return mnd;
}
int chkrd(int i)
{
    bool fk=true;
    int mn=Pitaj(i,1),mnd=1;
    for(int j=2;j<=n;j++)
    {
        int x=Pitaj(i,j);
        if(x==mn) fk=false;
        if(x>mn) {mn=x; mnd=j; fk=true;}
    }
    if(!fk) return -1;
    return mnd;
}
std::vector<int> Nadji(int N, int K)
{
    n=N;
    vector<int> fail;
    fail.push_back(0);
    fail.push_back(0);
    if(N*N!=K)
    {
        gore(1,1);
        if(dk==0)
        {
            int z=chkkln(dr);
            if(z==-1) return fail;
            int y=chkrd(z);
            if(y!=dr) return fail;
            vector<int> odg;
            odg.push_back(z);
            odg.push_back(y);
            return odg;
        }
        else
        {
            int z=chkrd(dk);
            if(z==-1) return fail;
            int y=chkkln(z);
            if(y!=dk) return fail;
            vector<int> odg;
            odg.push_back(y);
            odg.push_back(z);
            return odg;
        }
    }
	for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) a[i][j]=Pitaj(i,j);
	for(int i=1;i<=N;i++)
    {
        sk[i]=true;
        mk[i]=a[i][1];
        for(int j=2;j<=N;j++)
        {
            if(a[i][j]==mk[i]) sk[i]=false;
            if(a[i][j]>mk[i]) {mk[i]=a[i][j]; sk[i]=true;}
        }
    }
    for(int j=1;j<=N;j++)
    {
        sr[j]=true;
        mr[j]=a[1][j];
        for(int i=2;i<=N;i++)
        {
            if(a[i][j]==mr[j]) sr[j]=false;
            if(a[i][j]<mr[j]) {mr[j]=a[i][j]; sr[j]=true;}
        }
    }
    for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) if(mk[i]==a[i][j] && mr[j]==a[i][j] && sk[i] && sr[j])
    {
        vector<int> odg;
        odg.push_back(i);
        odg.push_back(j);
        return odg;
    }
    return fail;
}