#include <bits/stdc++.h>
using namespace std;
struct fastIO {
  inline fastIO operator>>(int& num) {
    num = 0;
    char c = getchar();
    while (c != '-' && (c < '0' || c > '9')) c = getchar();
    bool foo = 0;
    if (c == '-') {
      foo = 1;
      c = getchar();
    }
    while (c >= '0' && c <= '9') {
      num = (num << 3) + (num << 1) + c - '0';
      c = getchar();
    }
    if (foo) num = -num;
    return *this;
  }
  inline fastIO operator>>(long long& num) {
    num = 0;
    char c = getchar();
    while (c != '-' && (c < '0' || c > '9')) c = getchar();
    bool foo = 0;
    if (c == '-') {
      foo = 1;
      c = getchar();
    }
    while (c >= '0' && c <= '9') {
      num = (num << 3) + (num << 1) + c - '0';
      c = getchar();
    }
    if (foo) num = -num;
    return *this;
  }
  inline fastIO operator>>(float& num) {
    scanf("%f", &num);
    return *this;
  }
  inline fastIO operator>>(double& num) {
    scanf("%lf", &num);
    return *this;
  }
  inline fastIO operator>>(long double& num) {
    scanf("%Lf", &num);
    return *this;
  }
  inline fastIO operator>>(char& num) {
    num = getchar();
    while (num == ' ' || num == '\n') num = getchar();
    return *this;
  }
  inline fastIO operator>>(char* num) {
    int cnt = 0;
    char c = getchar();
    while (c == ' ' || c == '\n') c = getchar();
    while (c != ' ' && c != '\n') {
      num[cnt++] = c;
      c = getchar();
    }
    num[cnt] = 0;
    return *this;
  }
  inline fastIO operator>>(string& num) {
    cin >> num;
    return *this;
  }
  inline void printInt(const int& num) {
    if (num < 10) {
      putchar(num + '0');
      return;
    }
    printInt(num / 10);
    putchar((num % 10) + '0');
  }
  inline void printINT(const long long& num) {
    if (num < 10) {
      putchar(num + '0');
      return;
    }
    printINT(num / 10);
    putchar((num % 10) + '0');
  }
  inline fastIO operator<<(const int& num) {
    if (num < 0)
      putchar('-'), printInt(-num);
    else
      printInt(num);
    return *this;
  }
  inline fastIO operator<<(const long long& num) {
    if (num < 0)
      putchar('-'), printINT(-num);
    else
      printINT(num);
    return *this;
  }
  inline fastIO operator<<(const float& num) {
    printf("%.10f", num);
    return *this;
  }
  inline fastIO operator<<(const double& num) {
    printf("%.16lf", num);
    return *this;
  }
  inline fastIO operator<<(const long double& num) {
    printf("%.20Lf", num);
    return *this;
  }
  inline fastIO operator<<(const char& num) {
    putchar(num);
    return *this;
  }
  inline fastIO operator<<(const char* num) {
    for (int i = 0; num[i]; i++) putchar(num[i]);
    return *this;
  }
  inline fastIO operator<<(const string& num) {
    cout << num;
    return *this;
  }
} fio;
int n, m, k;
int x, y;
set<int> ss[2005];
int ansx, ansy;
int Go;
bool lgl[2005][2005];
int dist[2005][2005];
bool find(int x, int y, int fff) {
  int ansnum = ((int)0x3f3f3f3f);
  for (int i = max(1, x - fff); i <= min(n, x + fff); i++) {
    int togo = fff - abs(i - x);
    int j = y - togo;
    if (j >= 1 && !lgl[i][j]) {
      if (abs(j - y) + abs(i - x) < ansnum) {
        ansnum = abs(j - y) + abs(i - x);
        ansx = i;
        ansy = j;
      }
    }
    j = y + togo;
    if (j <= m && !lgl[i][j]) {
      if (abs(j - y) + abs(i - x) < ansnum) {
        ansnum = abs(j - y) + abs(i - x);
        ansx = i;
        ansy = j;
      }
    }
  }
  return ansnum != ((int)0x3f3f3f3f);
}
int main() {
  fio >> n >> m >> k;
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      ss[i].insert(j);
    }
  }
  Go = sqrt(k) + 1;
  for (int i = 0; i < k; i++) {
    fio >> x >> y;
    for (int i = -1; i <= 1; i++) {
      for (int j = -1; j <= 1; j++) {
        if (x + i >= 1 && x + i <= n && y + j >= 1 && y + j <= m) {
          dist[x][y] = max(dist[x][y], dist[x + i][y + j] - abs(i) - abs(j));
        }
      }
    }
    while (!find(x, y, dist[x][y])) {
      dist[x][y]++;
    }
    lgl[ansx][ansy] = 1;
    fio << ansx << ' ' << ansy << '\n';
  }
  return 0;
}
