#include<bits/stdc++.h>
//#include<iostream>
//#include<vector>
#include <tuple>
using namespace std;
#define _ << ' ' <<
#define pb push_back
#define all(x) begin(x), end(x)
#define mp make_pair
#define f first
#define s second
#define sz(x) int((x).size())
#define each(x,A) for(auto &x: A)
#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
 
using ll = long long;
using db = long double;
using pl = pair<ll,ll>;
using pi = pair<int,int>;
using cd = complex<db>;
using vi = vector<int>;
using vd = vector<db>;
using vl = vector <ll>;
 
 
 
template<typename T> ostream& operator<<(ostream &os, const vector<T> &v) { os << '{'; string sep; for (const auto &x : v) os << sep << x, sep = ", "; return os << '}'; }
template<typename T, size_t size> ostream& operator<<(ostream &os, const array<T, size> &arr) { os << '{'; string sep; for (const auto &x : arr) os << sep << x, sep = ", "; return os << '}'; }
template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
 
void dbg_out() { cerr << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
 
#ifdef NEAL_DEBUG
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif
 
//mt19937_64 mt_rand(chrono::high_resolution_clock::now().time_since_epoch().count());
//uniform_int_distribution<long long> rg(1,1e6);

int main(){
  ios::sync_with_stdio(false);
#ifndef NEAL_DEBUG
  cin.tie(nullptr);
#endif
  int m,k;
  cin >> m >> k;
  vector < ll > sum(k,0), sum2(k,0);
  vector < vl > a(k);
  for(int i=0; i<k; i++){
    a[i].resize(m);
    each(x,a[i]){
      cin >> x;
      sum[i]+=x;
      sum2[i]+=x*x;
    }
  }
  ll v;
  map < ll, int > mp;
  for(int i=1; i<k; i++){
    mp[sum[i]-sum[i-1]]++;
    if(mp[sum[i]-sum[i-1]]>3){
      v=sum[i]-sum[i-1];
      break;
    }
  }
  ll wrong=-1;
  for(int i=1; i<k-1; i++){
    if((sum[i]-sum[i-1])!=v and (sum[i+1]-sum[i])!=v){
      wrong=i;
      break;
    }
  }
  if(wrong==-1){
    if(sum[1]-sum[0]!=v) wrong=0;
    else wrong=k-1;
  }

  ll v2;
  if(wrong+3<k) v2 = 2*sum2[wrong+2]-sum2[wrong+1]-sum2[wrong+3];
  else v2 = 2*sum2[wrong-2]-sum2[wrong-1]-sum2[wrong-3];
  
  ll shoulds, shoulds2;
  if(wrong) shoulds = sum[wrong-1]+v;
  else shoulds = sum[wrong+1]-v;
  if(wrong+2<k) shoulds2 = 2*sum2[wrong+1] - v2 - sum2[wrong+2];
  else shoulds2 = 2*sum2[wrong-1] - v2 - sum2[wrong-2];

  //cout << "S" _ shoulds _ "S2" _ shoulds2 << endl;
  each(x,a[wrong]){
    ll y = x+shoulds-sum[wrong];
    if(sum2[wrong]-x*x+y*y == shoulds2){
      cout << wrong _ y << endl;
      cout.flush();
      return 0;
    }
  }
}