#include <bits/stdc++.h>
using namespace std;
bool vis[4][4][256][256];
pair<pair<int, int>, pair<int, int> > f[4][4][256][256];
void dfs(int k0, int k1, int p0, int p1);
bool asd(int k0, int k1, int p0, int p1, int kk0, int kk1, int pp0, int pp1) {
  if (pp0 > 205 || pp1 > 205) return false;
  if (vis[kk0][kk1][pp0][pp1]) return true;
  f[kk0][kk1][pp0][pp1] = make_pair(make_pair(k0, k1), make_pair(p0, p1));
  dfs(kk0, kk1, pp0, pp1);
  return true;
}
void dfs(int k0, int k1, int p0, int p1) {
  vis[k0][k1][p0][p1] = true;
  if (k0 == 3 || k1 == 3) return;
  int g = 25;
  if (k0 + k1 == 4) g = 15;
  for (int i = 0;; ++i) {
    int gg = max(i + 2, g);
    bool a = asd(k0, k1, p0, p1, k0 + 1, k1, p0 + gg, p1 + i);
    bool b = asd(k0, k1, p0, p1, k0, k1 + 1, p0 + i, p1 + gg);
    if (!a && !b) break;
  }
}
int main() {
  dfs(0, 0, 0, 0);
  int tn;
  scanf("%d", &tn);
  while (tn--) {
    int a, b;
    scanf("%d%d", &a, &b);
    int k0 = -1, k1 = -1;
    for (int i = 0, ThxDem = 3; i < ThxDem; ++i)
      if (vis[3][i][a][b]) {
        k0 = 3;
        k1 = i;
        break;
      }
    if (k0 < 0) {
      for (int i = 2; i >= 0; --i)
        if (vis[i][3][a][b]) {
          k0 = i;
          k1 = 3;
          break;
        }
    }
    if (k0 < 0)
      puts("Impossible");
    else {
      printf("%d:%d\n", k0, k1);
      vector<pair<int, int> > r;
      while (k0 || k1) {
        auto p = f[k0][k1][a][b];
        r.push_back(make_pair(a - p.second.first, b - p.second.second));
        k0 = p.first.first;
        k1 = p.first.second;
        a = p.second.first;
        b = p.second.second;
      }
      reverse(r.begin(), r.end());
      for (int i = 0, ThxDem = ((int)(r).size()); i < ThxDem; ++i)
        printf("%d:%d%c", r[i].first, r[i].second,
               " \n"[i == ((int)(r).size()) - 1]);
    }
  }
  return 0;
}
