#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
inline int read() {
  int x = 0, w = 1;
  char ch = 0;
  while (ch < '0' || ch > '9') {
    ch = getchar();
    if (ch == '-') w = -1;
  }
  while (ch <= '9' && ch >= '0') {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * w;
}
int p[10];
int k1[10], k2[10], ans1[10], ans2[10];
int a, b, p1, p2, flag;
inline void chk(int n, int c1, int c2) {
  int cnt1 = 0, cnt2 = 0;
  memset(k1, 0, sizeof(k1));
  memset(k2, 0, sizeof(k2));
  if ((c1 - c2 <= p1 - p2)) return;
  for (int i = 1; i <= n; ++i) {
    if (p[i] == 1)
      cnt1 += (k1[i] = (i == 5) ? 15 : 25);
    else
      cnt2 += (k2[i] = (i == 5) ? 15 : 25);
  }
  if (cnt1 > a || cnt2 > b) return;
  if (n == 5) {
    if (p[5]) {
      if (cnt2 + 13 <= b) {
        cnt2 += 13;
        k2[5] = 13;
        int now = min(a - cnt1, b - cnt2);
        cnt1 += now, cnt2 += now;
        k1[5] += now, k2[5] += now;
      }
    } else {
      if (cnt1 + 13 <= a) {
        cnt1 += 13;
        k1[5] = 13;
        int now = min(a - cnt1, b - cnt2);
        cnt1 += now, cnt2 += now;
        k1[5] += now, k2[5] += now;
      }
    }
    for (int i = 1; i <= n; ++i) {
      int k = (i == 5) ? 13 : 23;
      if (!p[i]) {
        if (k1[i]) continue;
        if (cnt1 + k > a)
          k1[i] = a - cnt1;
        else
          k1[i] = k;
        cnt1 += k1[i];
      } else {
        if (k2[i]) continue;
        if (cnt2 + k > b)
          k2[i] = b - cnt2;
        else
          k2[i] = k;
        cnt2 += k2[i];
      }
    }
    if (cnt1 == a && cnt2 == b && c1 - c2 > p1 - p2) {
      p1 = c1, p2 = c2;
      flag = 1;
      for (int i = 1; i <= n; ++i) ans1[i] = k1[i], ans2[i] = k2[i];
      return;
    }
  }
  cnt1 = 0, cnt2 = 0;
  memset(k1, 0, sizeof(k1));
  memset(k2, 0, sizeof(k2));
  for (int i = 1; i <= n; ++i) {
    if (p[i] == 1)
      cnt1 += (k1[i] = (i == 5) ? 15 : 25);
    else
      cnt2 += (k2[i] = (i == 5) ? 15 : 25);
  }
  if (p[1]) {
    if (cnt2 + 23 <= b) {
      cnt2 += 23;
      k2[1] = 23;
      int now = min(a - cnt1, b - cnt2);
      cnt1 += now, cnt2 += now;
      k1[1] += now, k2[1] += now;
    }
  } else {
    if (cnt1 + 23 <= a) {
      cnt1 += 23;
      k1[1] = 23;
      int now = min(a - cnt1, b - cnt2);
      cnt1 += now, cnt2 += now;
      k1[1] += now, k2[1] += now;
    }
  }
  for (int i = 1; i <= n; ++i) {
    int k = (i == 5) ? 13 : 23;
    if (!p[i]) {
      if (k1[i]) continue;
      if (cnt1 + k > a)
        k1[i] = a - cnt1;
      else
        k1[i] = k;
      cnt1 += k1[i];
    } else {
      if (k2[i]) continue;
      if (cnt2 + k > b)
        k2[i] = b - cnt2;
      else
        k2[i] = k;
      cnt2 += k2[i];
    }
  }
  if (cnt1 != a || cnt2 != b) return;
  if (c1 - c2 > p1 - p2) {
    p1 = c1, p2 = c2;
    flag = 1;
    for (int i = 1; i <= n; ++i) ans1[i] = k1[i], ans2[i] = k2[i];
  }
}
void dfs(int x, int c1, int c2) {
  if (c1 >= 3 || c2 >= 3) {
    chk(x - 1, c1, c2);
    return;
  }
  p[x] = 1;
  dfs(x + 1, c1 + 1, c2);
  p[x] = 0;
  dfs(x + 1, c1, c2 + 1);
}
int main() {
  int T = read();
  while (T--) {
    a = read();
    b = read();
    flag = 0;
    p1 = 0, p2 = 5;
    dfs(1, 0, 0);
    if (!flag) {
      printf("Impossible\n");
      continue;
    }
    printf("%d:%d\n", p1, p2);
    for (int i = 1; i <= p1 + p2; ++i) printf("%d:%d ", ans1[i], ans2[i]);
    printf("\n");
  }
  return 0;
}
