#include <bits/stdc++.h>
using namespace std;
int N, K;
long long A, B, C, D, temp;
long long in[100005];
bool CAN = false;
int main() {
  long long i;
  int j;
  scanf("%d %d", &N, &K);
  for (i = 0; i < N; i++) {
    scanf("%I64d.%I64d.%I64d.%I64d", &A, &B, &C, &D);
    in[i] = (A * 256 * 256 * 256) + (B * 256 * 256) + (C * 256) + D;
  }
  for (i = 2147483648l; i > 0; i /= 2) {
    temp += i;
    set<long long> s;
    for (j = 0; j < N; j++) {
      s.insert((temp & in[j]));
    }
    if (s.size() == K) {
      CAN = true;
      D = temp % 256;
      temp /= 256;
      C = temp % 256;
      temp /= 256;
      B = temp % 256;
      temp /= 256;
      A = temp;
      break;
    } else if (s.size() > K)
      break;
  }
  if (CAN)
    printf("%I64d.%I64d.%I64d.%I64d\n", A, B, C, D);
  else
    printf("-1\n");
}
