#include <bits/stdc++.h>
using namespace std;
int T, n, m;
vector<pair<int, int> > ans;
bool ok0(int n, int m, bool mk) {
  int sum = mk ? 65 : 75;
  if (n < sum || n <= m) return 0;
  int A, B, C, a, b, c;
  A = 25;
  B = 25;
  C = mk ? 15 : 25;
  n -= sum;
  if (n > 0) {
    A += n;
    a = A - 2;
  } else {
    a = min(m, 23);
  }
  m -= a;
  if (m < 0) return 0;
  b = min(m, 23);
  m -= b;
  c = min(m, mk ? 13 : 23);
  m -= c;
  if (m > 0) return 0;
  ans.clear();
  ans.push_back(make_pair(C, c));
  ans.push_back(make_pair(A, a));
  ans.push_back(make_pair(B, b));
  return 1;
}
bool ok1(int n, int m, bool mk) {
  int A, a;
  for (int i = 0; i <= n; i++) {
    A = i;
    a = A >= 24 ? (A + 2) : 25;
    if (m < a) continue;
    if (ok0(n - A, m - a, mk)) {
      ans.push_back(make_pair(A, a));
      return 1;
    }
  }
  return 0;
}
bool ok2(int n, int m) {
  int A, a;
  for (int i = 0; i <= n; i++) {
    A = i;
    a = A >= 24 ? (A + 2) : 25;
    if (m < a) continue;
    if (ok1(n - A, m - a, 1)) {
      ans.push_back(make_pair(A, a));
      return 1;
    }
  }
  return 0;
}
bool ok(int x, int n, int m) {
  if (x == 0) return ok0(n, m, 0);
  if (x == 1) return ok1(n, m, 0);
  return ok2(n, m);
}
int main() {
  scanf("%d", &T);
  while (T--) {
    scanf("%d %d", &n, &m);
    bool flag;
    if (ok(0, n, m)) {
      puts("3:0");
      flag = 1;
    } else if (ok(1, n, m)) {
      puts("3:1");
      flag = 1;
    } else if (ok(2, n, m)) {
      puts("3:2");
      flag = 1;
    } else if (ok(2, m, n)) {
      puts("2:3");
      flag = 0;
    } else if (ok(1, m, n)) {
      puts("1:3");
      flag = 0;
    } else if (ok(0, m, n)) {
      puts("0:3");
      flag = 0;
    } else {
      puts("Impossible");
      continue;
    }
    int g = ans.size();
    for (int i = g - 1; i >= 0; i--) {
      if (flag) {
        printf("%d:%d", ans[i].first, ans[i].second);
      } else {
        printf("%d:%d", ans[i].second, ans[i].first);
      }
      if (i) {
        putchar(' ');
      }
    }
    puts("");
  }
  return 0;
}
