#include <bits/stdc++.h>
using namespace std;
const int maxn = 210;
int m;
pair<int, int> dp[maxn][maxn][6][6];
bool rem(pair<int, int> x) { return abs(x.first - x.second) == 2; }
pair<int, int> inc(pair<int, int> x) {
  ++x.first;
  ++x.second;
  return x;
}
void remisy() {
  for (int i = 1; i < 201; ++i)
    for (int j = 1; j < 201; ++j)
      for (int k = 0; k <= 3; ++k)
        for (int l = 0; l <= 3; ++l) {
          if (max(k, l) > 0)
            if (rem(dp[i - 1][j - 1][k][l])) {
              dp[i][j][k][l] = inc(dp[i - 1][j - 1][k][l]);
            }
        }
}
void init() {
  for (int i = 0; i < 201; ++i)
    for (int j = 0; j < 201; ++j)
      for (int k = 0; k < 4; ++k)
        for (int l = 0; l < 4; ++l) dp[i][j][k][l] = {-1, -1};
  dp[0][0][0][0] = {0, 0};
  for (int sc = 0; sc <= 23; ++sc) {
    for (int i = sc; i < 201; ++i)
      for (int j = 25; j < 201; ++j)
        for (int k = 0; k <= 2; ++k)
          for (int l = 1; l <= 3 && k + l <= 4; ++l)
            if (dp[i - sc][j - 25][k][l - 1].first >= 0)
              dp[i][j][k][l] = {sc, 25};
  }
  remisy();
  for (int sc = 0; sc <= 23; ++sc) {
    for (int i = 25; i < 201; ++i)
      for (int j = sc; j < 201; ++j)
        for (int k = 1; k <= 3; ++k)
          for (int l = 0; l <= 2 && k + l <= 4; ++l)
            if (dp[i - 25][j - sc][k - 1][l].first >= 0)
              dp[i][j][k][l] = {25, sc};
  }
  remisy();
  for (int sc = 0; sc <= 23; ++sc) {
    for (int i = sc; i < 201; ++i)
      for (int j = 25; j < 201; ++j)
        for (int k = 0; k <= 2; ++k)
          for (int l = 1; l <= 3 && k + l <= 4; ++l)
            if (dp[i - sc][j - 25][k][l - 1].first >= 0)
              dp[i][j][k][l] = {sc, 25};
  }
  remisy();
  for (int sc = 0; sc <= 13; ++sc) {
    for (int i = sc; i < 201; ++i)
      for (int j = 15; j < 201; ++j)
        if (dp[i - sc][j - 15][2][2].first >= 0) dp[i][j][2][3] = {sc, 15};
  }
  remisy();
  for (int sc = 0; sc <= 13; ++sc) {
    for (int i = 15; i < 201; ++i)
      for (int j = sc; j < 201; ++j)
        if (dp[i - 15][j - sc][2][2].first >= 0) dp[i][j][3][2] = {15, sc};
  }
  remisy();
}
void solve() {
  int a, b;
  scanf("%d%d", &a, &b);
  pair<int, int> best = {-100, -10};
  for (int i = 0; i < 4; ++i)
    for (int j = 0; j < 4; ++j) {
      if (dp[a][b][i][j].first >= 0) {
        if (max(i, j) == 3 && i + j < 6 && best.first - best.second < i - j)
          best = {i, j};
      }
    }
  if (best.first == -100)
    puts("Impossible");
  else {
    printf("%d:%d\n", best.first, best.second);
    int i = best.first;
    int j = best.second;
    vector<pair<int, int> > dup;
    while (max(a, b) > 0) {
      pair<int, int> res = dp[a][b][i][j];
      dup.push_back(res);
      if (res.first > res.second)
        --i;
      else
        --j;
      a -= res.first;
      b -= res.second;
    }
    dup = vector<pair<int, int> >(dup.rbegin(), dup.rend());
    for (pair<int, int> p : dup) printf("%d:%d ", p.first, p.second);
    puts("");
  }
}
int main() {
  init();
  scanf("%d", &m);
  while (m--) solve();
}
