#include <bits/stdc++.h>
using namespace std;
const int maxn = 202;
using namespace std;
bool F[4][4][maxn][maxn];
pair<int, int> from[4][4][maxn][maxn];
void init() {
  F[0][0][0][0] = true;
  static bool tmp[maxn][maxn];
  static pair<int, int> frm[maxn][maxn];
  for (int i = (0); i < (3); ++i)
    for (int j = (0); j < (3); ++j) {
      int a, b = (i + j == 4) ? 15 : 25;
      for (a = 0; a + 2 < b; ++a) {
        for (int x = (0); x < (maxn - a); ++x)
          for (int y = (0); y < (maxn - b); ++y)
            if (F[i][j][x][y]) {
              F[i][j + 1][x + a][y + b] = true;
              from[i][j + 1][x + a][y + b] = make_pair(x, y);
            }
      }
      memset(tmp, 0, sizeof(tmp));
      {
        for (int x = (a); x < (maxn); ++x)
          for (int y = (b); y < (maxn); ++y) {
            if (F[i][j][x - a][y - b]) {
              tmp[x][y] = true;
              frm[x][y] = make_pair(x - a, y - b);
            }
          }
        for (int x = (1); x < (maxn); ++x)
          for (int y = (1); y < (maxn); ++y)
            if (tmp[x - 1][y - 1]) {
              tmp[x][y] = true;
              frm[x][y] = frm[x - 1][y - 1];
            }
        for (int x = (0); x < (maxn); ++x)
          for (int y = (0); y < (maxn); ++y)
            if (tmp[x][y]) {
              F[i][j + 1][x][y] = true;
              from[i][j + 1][x][y] = frm[x][y];
            }
      }
      a = (i + j == 4) ? 15 : 25;
      for (b = 0; b + 2 < a; ++b) {
        for (int x = (0); x < (maxn - a); ++x)
          for (int y = (0); y < (maxn - b); ++y)
            if (F[i][j][x][y]) {
              F[i + 1][j][x + a][y + b] = true;
              from[i + 1][j][x + a][y + b] = make_pair(x, y);
            }
      }
      memset(tmp, 0, sizeof(tmp));
      {
        for (int x = (a); x < (maxn); ++x)
          for (int y = (b); y < (maxn); ++y) {
            if (F[i][j][x - a][y - b]) {
              tmp[x][y] = true;
              frm[x][y] = make_pair(x - a, y - b);
            }
          }
        for (int x = (1); x < (maxn); ++x)
          for (int y = (1); y < (maxn); ++y)
            if (tmp[x - 1][y - 1]) {
              tmp[x][y] = true;
              frm[x][y] = frm[x - 1][y - 1];
            }
        for (int x = (0); x < (maxn); ++x)
          for (int y = (0); y < (maxn); ++y)
            if (tmp[x][y]) {
              F[i + 1][j][x][y] = true;
              from[i + 1][j][x][y] = frm[x][y];
            }
      }
    }
}
pair<int, int> Ans[10];
int Anscnt;
bool Find(int a, int b, int x, int y) {
  if (!F[a][b][x][y]) return false;
  int nx = from[a][b][x][y].first, ny = from[a][b][x][y].second;
  if (!a && !b) return true;
  int dx = x - nx, dy = y - ny;
  if (dx > dy)
    Find(a - 1, b, nx, ny);
  else
    Find(a, b - 1, nx, ny);
  Ans[Anscnt++] = make_pair(dx, dy);
  return true;
}
void Print(int a, int b) {
  printf("%d:%d\n", a, b);
  for (int i = (0); i < (Anscnt); ++i)
    printf("%d:%d%c", Ans[i].first, Ans[i].second, " \n"[i + 1 == Anscnt]);
}
void work() {
  int a, b;
  scanf("%d%d", &a, &b);
  Anscnt = 0;
  if (Find(3, 0, a, b))
    Print(3, 0);
  else if (Find(3, 1, a, b))
    Print(3, 1);
  else if (Find(3, 2, a, b))
    Print(3, 2);
  else if (Find(2, 3, a, b))
    Print(2, 3);
  else if (Find(1, 3, a, b))
    Print(1, 3);
  else if (Find(0, 3, a, b))
    Print(0, 3);
  else
    puts("Impossible");
}
int main() {
  init();
  int T;
  scanf("%d", &T);
  while (T--) {
    work();
  }
  return 0;
}
