#include <bits/stdc++.h>
using namespace std;
int a, b, tot[5], now[5], sb[5], ss[15][5];
bool work2(int w, int x) {
  int sss[15][5], nnow[5], l = 1 - w;
  nnow[0] = now[0];
  nnow[1] = now[1];
  for (int i = 1; i <= sb[0] + sb[1]; i++) {
    sss[i][0] = ss[i][0];
    sss[i][1] = ss[i][1];
  }
  bool flag = false;
  for (int i = x; i <= sb[l] + sb[w]; i++) {
    if (flag) break;
    if (i <= sb[l] && nnow[w] >= sss[i][l] - 2) {
      sss[i][w] += sss[i][l] - 2;
      nnow[w] -= sss[i][l] - 2;
    }
    if (i > sb[l] && nnow[l] >= sss[i][w] - 2) {
      sss[i][l] += sss[i][w] - 2;
      nnow[l] -= sss[i][w] - 2;
    }
    if (sss[i][l] == sss[i][w] + 2 || sss[i][w] == sss[i][l] + 2) {
      int tmp = min(nnow[w], nnow[l]);
      sss[i][w] += tmp;
      sss[i][l] += tmp;
      nnow[w] -= tmp;
      nnow[l] -= tmp;
      flag = true;
    }
  }
  for (int i = 1; i < x; i++) {
    if (flag) break;
    if (i <= sb[l] && nnow[w] >= sss[i][l] - 2) {
      sss[i][w] += sss[i][l] - 2;
      nnow[w] -= sss[i][l] - 2;
    }
    if (i > sb[l] && nnow[l] >= sss[i][w] - 2) {
      sss[i][l] += sss[i][w] - 2;
      nnow[l] -= sss[i][w] - 2;
    }
    if (sss[i][l] == sss[i][w] + 2 || sss[i][w] == sss[i][l] + 2) {
      int tmp = min(nnow[w], nnow[l]);
      sss[i][w] += tmp;
      sss[i][l] += tmp;
      nnow[w] -= tmp;
      nnow[l] -= tmp;
      flag = true;
    }
  }
  for (int i = 1; i <= sb[l]; i++) {
    int tmp = min(sss[i][l] - 2 - sss[i][w], nnow[w]);
    sss[i][w] += tmp;
    nnow[w] -= tmp;
  }
  for (int i = sb[l] + 1; i <= sb[l] + 3; i++) {
    int tmp = min(sss[i][w] - 2 - sss[i][l], nnow[l]);
    sss[i][l] += tmp;
    nnow[l] -= tmp;
  }
  if (nnow[0] > 0 || nnow[1] > 0) return false;
  printf("%d:%d\n", sb[0], sb[1]);
  for (int i = 1; i < sb[0] + sb[1]; i++)
    printf("%d:%d ", sss[i][0], sss[i][1]);
  printf("%d:%d\n", sss[sb[0] + sb[1]][0], sss[sb[0] + sb[1]][1]);
  return true;
}
bool work(int w) {
  int l = 1 - w;
  now[0] = tot[0];
  now[1] = tot[1];
  for (int i = 1; i <= sb[l]; i++) {
    if (now[l] < 25) return false;
    ss[i][l] = 25;
    now[l] -= ss[i][l];
    ss[i][w] = 0;
  }
  for (int i = sb[l] + 1; i <= sb[l] + 3; i++) {
    if (i < 5 && now[w] < 25) return false;
    if (i == 5 && now[w] < 15) return false;
    if (i < 5)
      ss[i][w] = 25;
    else
      ss[i][w] = 15;
    now[w] -= ss[i][w];
    ss[i][l] = 0;
  }
  for (int i = 1; i <= sb[0] + sb[1]; i++) {
    if (work2(w, i)) {
      return true;
    }
  }
  return false;
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    scanf("%d%d", &a, &b);
    tot[0] = a;
    tot[1] = b;
    bool flag = false;
    for (int i = 0; i < 3; i++) {
      if (flag) break;
      sb[0] = 3;
      sb[1] = i;
      flag = work(0);
    }
    for (int i = 2; i >= 0; i--) {
      if (flag) break;
      sb[0] = i;
      sb[1] = 3;
      flag = work(1);
    }
    if (!flag) printf("Impossible\n");
  }
  return 0;
}
