#include<bits/stdc++.h>
using namespace std;

//======================
//
// Template OleschY
//
// Die M�glichkeiten der deutschen Grammatik k�nnen
// einen, wenn man sich darauf, was man ruhig, wenn
// man m�chte, sollte, einl�sst, �berraschen.
// - @Gedankenbalsam
//
//======================


//======================
//      Output/Debug
//======================

template <typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    os << "[";
    for (int i = 0; i < v.size(); ++i)
    {
        os << v[i];
        if (i != v.size() - 1)
            os << ", ";
    }
    os << "]\n";
    return os;
}

template <typename T, typename U>
ostream& operator<<(ostream& os, const pair<T, U>& p)
{
    os << "[";
    os << p.first;
    os << ", ";
    os << p.second;
    os << "]";
    return os;
}

#ifndef ONLINE_JUDGE
#define debug(x) cout << (#x) << " is " << (x) << endl
#else
#define debug(...) 42
#endif

//======================
// Solution Single testcase
//======================

vector<vector<int>> num;
vector<long long> sum;
long long vsum;
int m, k;

vector<vector<int>> neigh;



void check(int pos)
{
    neigh.resize(m);

    for(int i = 0; i < m; i++)
    {
        for(int j = 0; j < m; j++)
        {
            int dif = num[pos + 1][j] - num[pos][i];
            if(dif <= 0) continue;
            int val3 = num[pos][i] + 2 * dif;
            auto it = lower_bound(num[pos + 2].begin(), num[pos + 2].end(), val3);
            if(it != num[pos + 2].end() && *it == val3)
            {
                neigh[i].push_back(j);
            }
        }
    }
    debug(pos);
    debug(neigh);
}

int solve()
{
    cin >> m >> k;
    num.resize(k, vector<int>(m));
    sum.resize(k);
    for(int i = 0; i < k; ++i)
    {
        long long psum = 0;
        for(int j = 0; j < m; ++j)
        {
            cin >> num[i][j];
            psum += num[i][j];
        }
        sum[i] = psum;
        sort(num[i].begin(), num[i].end());
    }
    debug(sum);
    for(int i = 2; i < k; i++)
    {
        if(sum[i] - sum[i - 1] == sum[i - 1] - sum[i - 2])
        {
            vsum = sum[i] - sum[i - 1];
            break;
        }
    }
    int faker = -5;
    for(int i = 1; i < k - 1; i++)
    {
        if(sum[i] - sum[i - 1] != vsum && sum[i + 1] - sum[i] != vsum)
        {
            faker = i;
            break;
        }
    }
    if(faker == -5)
    {
        if(sum[1] - sum[0] != vsum)
            faker = 0;
        if(sum[k - 1] - sum[k - 2] != vsum)
            faker = k - 1;
    }
    vector<long long> a(3, 0);
    for(int i = 0; i < k - 2; i++)
    {
        if(faker != i && faker != i + 1 && faker != i + 2)
        {
            long long v[3] = {0, 0, 0};
            for(int c = 0; c < 3; c++)
            {
                for(int j = 0; j < m; j++)
                {
                    v[c] += num[i + c][j] * num[i + c][j];
                }
            }
            a[2] = (v[0] - 2 * v[1] + v[2]) / 2;
            a[1] = (v[2] - v[0] - 4 * (i + 1) * a[2]) / 2;
            a[0] = v[1] - a[1] * (i + 1) - a[2] * (i + 1) * (i + 1);
            break;
        }
    }
    long long hassum2=0, hassum1=0;
    long long needsum2=0, needsum1=0;
    for(int j = 0; j < m; j++)
    {
        hassum2 += num[faker][j] * num[faker][j];
    }
    hassum1 = sum[faker];
    needsum2=a[0]+a[1]*faker+a[2]*faker*faker;
    if(faker==0){
        needsum1=sum[1]-vsum;
    }
    else{
        needsum1=sum[faker-1]+vsum;
    }
    long long dif1=needsum1-hassum1;
    long long dif2=needsum2-hassum2;
    int rightnumber=(dif2-dif1*dif1)/2/dif1;
    int wrongnumber=rightnumber+dif1;

    debug(hassum1);
    debug(hassum2);
    debug(needsum1);
    debug(needsum2);
    debug(a);
    debug(num);
    debug(vsum);
    debug(faker);
    debug(rightnumber);
    debug(wrongnumber);
    cout << faker << " "<< wrongnumber <<  endl;
    return 0;
}

//======================
// Technical stuff
//======================

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    //freopen("a.out","w",stdout); // console output is better (in most cases)
#else
    // add i/o method of specific testing system
#endif
    int ntest = 1;
    //cin >> ntest;
    for(int test = 0; test < ntest; ++test)
    {
        solve();
    }
    return 0;
}
