#include <bits/stdc++.h>
void Solve();
int main() { Solve(); }
using namespace std;
const int N = 205;
vector<int> normal5[N][N];
vector<int> normal4[N][N];
vector<int> normal3[N][N];
vector<int> normal2[N][N];
vector<int> normal1[N][N];
vector<int> normal0[N][N];
void prepare() {
  {
    for (int b = 0; b < (23 + 23 + 23 + 1); b++) {
      vector<int> x;
      x.push_back(25);
      x.push_back(0);
      x.push_back(25);
      x.push_back(0);
      x.push_back(25);
      x.push_back(0);
      x[1] = min(b, 23);
      if (b >= 23) {
        x[3] = min(b - 23, 23);
      }
      if (b >= 23 + 23) {
        x[5] = b - 23 - 23;
      }
      normal5[25 + 25 + 25][b] = x;
      swap(x[0], x[1]);
      swap(x[2], x[3]);
      swap(x[4], x[5]);
      normal0[b][25 + 25 + 25] = x;
    }
  }
  {
    for (int a = 0; a < (23 + 1); a++) {
      for (int b = 0; b < (23 + 23 + 23 + 1); b++) {
        vector<int> x;
        x.push_back(25);
        x.push_back(0);
        x.push_back(25);
        x.push_back(0);
        x.push_back(0);
        x.push_back(25);
        x.push_back(25);
        x.push_back(0);
        x[4] = a;
        x[1] = min(b, 23);
        if (b >= 23) {
          x[3] = min(b - 23, 23);
        }
        if (b >= 23 + 23) {
          x[7] = b - 23 - 23;
        }
        normal4[25 + 25 + 25 + a][25 + b] = x;
        swap(x[0], x[1]);
        swap(x[2], x[3]);
        swap(x[4], x[5]);
        swap(x[6], x[7]);
        normal1[25 + b][25 + 25 + 25 + a] = x;
      }
    }
  }
  {
    for (int a = 0; a < (23 + 23 + 1); a++) {
      for (int b = 0; b < (23 + 23 + 13 + 1); b++) {
        vector<int> x;
        x.push_back(25);
        x.push_back(0);
        x.push_back(25);
        x.push_back(0);
        x.push_back(0);
        x.push_back(25);
        x.push_back(0);
        x.push_back(25);
        x.push_back(15);
        x.push_back(0);
        x[4] = min(a, 23);
        if (a >= 23) x[6] = a - 23;
        x[1] = min(b, 23);
        if (b >= 23) {
          x[3] = min(b - 23, 23);
        }
        if (b >= 23 + 23) {
          x[9] = b - 23 - 23;
        }
        normal3[25 + 25 + 15 + a][25 + 25 + b] = x;
        swap(x[0], x[1]);
        swap(x[2], x[3]);
        swap(x[4], x[5]);
        swap(x[6], x[7]);
        swap(x[8], x[9]);
        normal2[25 + 25 + b][25 + 25 + 15 + a] = x;
      }
    }
  }
}
int good(vector<int> a) {
  int res = -1;
  for (int i = 0; i < (a.size() / 2); i++) {
    if (abs(a[i * 2] - a[i * 2 + 1]) == 2) res = i;
  }
  return res;
}
bool ok = false;
vector<int> check5(int a, int b) {
  ok = false;
  int initiala = a, initialb = b;
  vector<int> res;
  while (true) {
    vector<int> p = normal5[a][b];
    if (p.size() > 0) {
      if (a == initiala) {
        ok = true;
        res = p;
        break;
      } else {
        int add = good(p);
        if (add != -1) {
          ok = true;
          res = p;
          res[add * 2] += initiala - a;
          res[add * 2 + 1] += initialb - b;
          break;
        }
      }
    }
    a--;
    b--;
    if (a == -1 || b == -1) {
      ok = false;
      return res;
    }
  }
  return res;
}
vector<int> check4(int a, int b) {
  ok = false;
  int initiala = a, initialb = b;
  vector<int> res;
  while (true) {
    vector<int> p = normal4[a][b];
    if (p.size() > 0) {
      if (a == initiala) {
        ok = true;
        res = p;
        break;
      } else {
        int add = good(p);
        if (add != -1) {
          ok = true;
          res = p;
          res[add * 2] += initiala - a;
          res[add * 2 + 1] += initialb - b;
          break;
        }
      }
    }
    a--;
    b--;
    if (a == -1 || b == -1) {
      ok = false;
      return res;
    }
  }
  return res;
}
vector<int> check3(int a, int b) {
  ok = false;
  int initiala = a, initialb = b;
  vector<int> res;
  while (true) {
    vector<int> p = normal3[a][b];
    if (p.size() > 0) {
      if (a == initiala) {
        ok = true;
        res = p;
        break;
      } else {
        int add = good(p);
        if (add != -1) {
          ok = true;
          res = p;
          res[add * 2] += initiala - a;
          res[add * 2 + 1] += initialb - b;
          break;
        }
      }
    }
    a--;
    b--;
    if (a == -1 || b == -1) {
      ok = false;
      return res;
    }
  }
  return res;
}
vector<int> check2(int a, int b) {
  ok = false;
  int initiala = a, initialb = b;
  vector<int> res;
  while (true) {
    vector<int> p = normal2[a][b];
    if (p.size() > 0) {
      if (a == initiala) {
        ok = true;
        res = p;
        break;
      } else {
        int add = good(p);
        if (add != -1) {
          ok = true;
          res = p;
          res[add * 2] += initiala - a;
          res[add * 2 + 1] += initialb - b;
          break;
        }
      }
    }
    a--;
    b--;
    if (a == -1 || b == -1) {
      ok = false;
      return res;
    }
  }
  return res;
}
vector<int> check1(int a, int b) {
  ok = false;
  int initiala = a, initialb = b;
  vector<int> res;
  while (true) {
    vector<int> p = normal1[a][b];
    if (p.size() > 0) {
      if (a == initiala) {
        ok = true;
        res = p;
        break;
      } else {
        int add = good(p);
        if (add != -1) {
          ok = true;
          res = p;
          res[add * 2] += initiala - a;
          res[add * 2 + 1] += initialb - b;
          break;
        }
      }
    }
    a--;
    b--;
    if (a == -1 || b == -1) {
      ok = false;
      return res;
    }
  }
  return res;
}
vector<int> check0(int a, int b) {
  ok = false;
  int initiala = a, initialb = b;
  vector<int> res;
  while (true) {
    vector<int> p = normal0[a][b];
    if (p.size() > 0) {
      if (a == initiala) {
        ok = true;
        res = p;
        break;
      } else {
        int add = good(p);
        if (add != -1) {
          ok = true;
          res = p;
          res[add * 2] += initiala - a;
          res[add * 2 + 1] += initialb - b;
          break;
        }
      }
    }
    a--;
    b--;
    if (a == -1 || b == -1) {
      ok = false;
      return res;
    }
  }
  return res;
}
void Solve() {
  prepare();
  int tt;
  cin >> tt;
  for (int ttt = 0; ttt < (tt); ttt++) {
    int a, b;
    cin >> a >> b;
    vector<int> res;
    res = check5(a, b);
    if (ok) {
      cout << "3:0" << endl;
      for (int i = 0; i < (3); i++) {
        cout << res[i * 2] << ":" << res[i * 2 + 1] << " ";
      }
      cout << endl;
      continue;
    }
    res = check4(a, b);
    if (ok) {
      cout << "3:1" << endl;
      for (int i = 0; i < (4); i++) {
        cout << res[i * 2] << ":" << res[i * 2 + 1] << " ";
      }
      cout << endl;
      continue;
    }
    res = check3(a, b);
    if (ok) {
      cout << "3:2" << endl;
      for (int i = 0; i < (5); i++) {
        cout << res[i * 2] << ":" << res[i * 2 + 1] << " ";
      }
      cout << endl;
      continue;
    }
    res = check2(a, b);
    if (ok) {
      cout << "2:3" << endl;
      for (int i = 0; i < (5); i++) {
        cout << res[i * 2] << ":" << res[i * 2 + 1] << " ";
      }
      cout << endl;
      continue;
    }
    res = check1(a, b);
    if (ok) {
      cout << "1:3" << endl;
      for (int i = 0; i < (4); i++) {
        cout << res[i * 2] << ":" << res[i * 2 + 1] << " ";
      }
      cout << endl;
      continue;
    }
    res = check0(a, b);
    if (ok) {
      cout << "0:3" << endl;
      for (int i = 0; i < (3); i++) {
        cout << res[i * 2] << ":" << res[i * 2 + 1] << " ";
      }
      cout << endl;
      continue;
    }
    cout << "Impossible" << endl;
  }
}
