#include <bits/stdc++.h>
using namespace std;
struct node {
  int i, j, a, b, k, h;
} g[210][210][4][4][2][2];
int m, a, b, aa, bb, f[210][210][4][4][2][2];
void update(node p, node q) {
  if (f[q.i][q.j][q.a][q.b][q.k][q.h]) {
    f[p.i][p.j][p.a][p.b][p.k][p.h] = 1;
    g[p.i][p.j][p.a][p.b][p.k][p.h] = q;
  }
}
void output(int i, int j, int a, int b, int k, int h) {
  if (i + j == 0) return;
  node t = g[i][j][a][b][k][h];
  printf("%d:%d", i - t.i, j - t.j);
  if (t.a + t.b > 0) printf(" ");
  output(t.i, t.j, t.a, t.b, t.k, t.h);
}
int main() {
  f[0][0][0][0][0][0] = f[0][0][0][0][0][1] = 1;
  f[0][0][0][0][1][0] = f[0][0][0][0][1][1] = 1;
  for (int i = 0; i <= 200; i++)
    for (int j = 0; j <= 200; j++) {
      if (i + j == 0) continue;
      for (int a = 0; a <= 3; a++)
        for (int b = 0; b <= 3; b++) {
          if (a + b == 6 || a + b == 0) continue;
          for (int h = 0; h <= 1; h++) {
            if (a + b == 5 && h == 0) continue;
            int o = 25;
            if (a + b == 1 && h == 1) o = 15;
            for (int k = 0; k <= 1; k++) {
              if ((a == 3 || b == 0) && k == 1) continue;
              if ((b == 3 || a == 0) && k == 0) continue;
              if (a > 0)
                for (int t = 0; t <= j; t++) {
                  if (t <= o - 2)
                    aa = o;
                  else
                    aa = t + 2;
                  if (aa > i) break;
                  update((node){i, j, a, b, k, h},
                         (node){i - aa, j - t, a - 1, b, k, h});
                }
              if (b > 0)
                for (int t = 0; t <= i; t++) {
                  if (t <= o - 2)
                    bb = o;
                  else
                    bb = t + 2;
                  if (bb > j) break;
                  update((node){i, j, a, b, k, h},
                         (node){i - t, j - bb, a, b - 1, k, h});
                }
            }
          }
        }
    }
  scanf("%d", &m);
  while (m--) {
    scanf("%d%d", &a, &b);
    int flag = 0;
    for (int i = 3; i >= 0; i--) {
      for (int j = 0; j <= 3; j++) {
        if (i != 3 && j != 3) continue;
        if (i == 3 && j == 3) continue;
        int o;
        if (i + j == 5)
          o = 1;
        else
          o = 0;
        if (i == 3) {
          if (f[a][b][i][j][0][o]) {
            printf("%d:%d\n", i, j);
            output(a, b, i, j, 0, o);
            flag = 1;
            break;
          }
        } else if (f[a][b][i][j][1][o]) {
          printf("%d:%d\n", i, j);
          output(a, b, i, j, 1, o);
          flag = 1;
          break;
        }
      }
      if (flag) break;
    }
    if (!flag)
      printf("Impossible\n");
    else
      printf("\n");
  }
  return 0;
}
