#include <bits/stdc++.h>
int dp[205][205][4][4], g[205][205], ax[10], ay[10];
int main() {
  memset(dp, 0x3f, sizeof(dp));
  dp[0][0][0][0] = 0;
  for (int i = 0; i <= 200; ++i)
    for (int j = 0; j <= 200; ++j)
      for (int x = 0; x <= 2; ++x)
        for (int y = 0; y <= 2; ++y) {
          if (dp[i][j][x][y] == 0x3f3f3f3f) continue;
          if (x + y == 4) {
            if (i + 15 <= 200)
              for (int jj = 0; jj <= 13 && j + jj <= 200; ++jj) {
                if (dp[i + 15][j + jj][x + 1][y] ^ 0x3f3f3f3f) continue;
                dp[i + 15][j + jj][x + 1][y] = 15 * 10000 + jj;
              }
            if (j + 15 <= 200)
              for (int ii = 0; ii <= 13 && i + ii <= 200; ++ii) {
                if (dp[i + ii][j + 15][x][y + 1] ^ 0x3f3f3f3f) continue;
                dp[i + ii][j + 15][x][y + 1] = ii * 10000 + 15;
              }
            for (int ii = 16; i + ii <= 200 && j + ii - 2 <= 200; ++ii) {
              if (dp[i + ii][j + ii - 2][x + 1][y] ^ 0x3f3f3f3f) continue;
              dp[i + ii][j + ii - 2][x + 1][y] = ii * 10000 + (ii - 2);
            }
            for (int jj = 16; i + jj - 2 <= 200 && j + jj <= 200; ++jj) {
              if (dp[i + jj - 2][j + jj][x][y + 1] ^ 0x3f3f3f3f) continue;
              dp[i + jj - 2][j + jj][x][y + 1] = (jj - 2) * 10000 + jj;
            }
            continue;
          }
          if (i + 25 <= 200)
            for (int jj = 0; jj <= 23 && j + jj <= 200; ++jj) {
              if (dp[i + 25][j + jj][x + 1][y] ^ 0x3f3f3f3f) continue;
              dp[i + 25][j + jj][x + 1][y] = 25 * 10000 + jj;
            }
          if (j + 25 <= 200)
            for (int ii = 0; ii <= 23 && i + ii <= 200; ++ii) {
              if (dp[i + ii][j + 25][x][y + 1] ^ 0x3f3f3f3f) continue;
              dp[i + ii][j + 25][x][y + 1] = ii * 10000 + 25;
            }
          for (int ii = 26; i + ii <= 200 && j + ii - 2 <= 200; ++ii) {
            if (dp[i + ii][j + ii - 2][x + 1][y] ^ 0x3f3f3f3f) continue;
            dp[i + ii][j + ii - 2][x + 1][y] = ii * 10000 + ii - 2;
          }
          for (int jj = 26; j + jj <= 200 && i + jj - 2 <= 200; ++jj) {
            if (dp[i + jj - 2][j + jj][x][y + 1] ^ 0x3f3f3f3f) continue;
            dp[i + jj - 2][j + jj][x][y + 1] = (jj - 2) * 10000 + jj;
          }
        }
  int T, X, Y, tx, ty, tm, tot = 0;
  scanf("%d", &T);
  while (T--) {
    scanf("%d%d", &X, &Y);
    for (int x = 3, y = 0; y <= 2; ++y) {
      if (dp[X][Y][x][y] == 0x3f3f3f3f) continue;
      printf("3:%d\n", y);
      tm = x + y;
      tot = 0;
      while (tm--) {
        tx = dp[X][Y][x][y] / 10000;
        ty = dp[X][Y][x][y] % 10000;
        ax[++tot] = tx;
        ay[tot] = ty;
        X -= tx;
        Y -= ty;
        if (tx > ty)
          --x;
        else
          --y;
      }
      while (tot--) printf("%d:%d ", ax[tot + 1], ay[tot + 1]);
      putchar('\n');
      goto Y;
    }
    for (int x = 2, y = 3; ~x; --x) {
      if (dp[X][Y][x][y] == 0x3f3f3f3f) continue;
      printf("%d:3\n", x);
      tm = x + y;
      tot = 0;
      while (tm--) {
        tx = dp[X][Y][x][y] / 10000;
        ty = dp[X][Y][x][y] % 10000;
        ax[++tot] = tx;
        ay[tot] = ty;
        X -= tx;
        Y -= ty;
        if (tx > ty)
          --x;
        else
          --y;
      }
      while (tot--) printf("%d:%d ", ax[tot + 1], ay[tot + 1]);
      putchar('\n');
      goto Y;
    }
    printf("Impossible\n");
    continue;
  Y:;
  }
  return 0;
}
