#include <bits/stdc++.h>
using namespace std;
struct idk {
  int s1, s2, a, b;
} dp[4][4][210][210];
int n = 200;
int t, x, y, a, b, i, j;
vector<pair<int, int> > sol;
int verif(int a, int b, int ok) {
  int val;
  if (ok)
    val = 15;
  else
    val = 25;
  if (a > b) swap(a, b);
  if (a + 1 >= val) {
    if (b - a == 2) return 1;
    return 0;
  }
  if (b == val) return 1;
  return 0;
}
int main() {
  memset(dp, -1, sizeof dp);
  dp[0][0][0][0] = {0, 0, 0, 0};
  for (x = 0; x <= 2; x++) {
    for (y = 0; y <= 2; y++) {
      int ok = 0;
      if (x + y == 4) ok = 1;
      for (i = 0; i <= n; i++) {
        for (j = 0; j <= n; j++) {
          if (!verif(i, j, ok)) continue;
          for (a = 0; a + i <= n; a++) {
            for (b = 0; b + j <= n; b++) {
              if (dp[x][y][a][b].s1 == -1) continue;
              if (i > j)
                dp[x + 1][y][a + i][b + j] = {x, y, a, b};
              else
                dp[x][y + 1][a + i][b + j] = {x, y, a, b};
            }
          }
        }
      }
    }
  }
  cin >> t;
  for (; t--;) {
    cin >> a >> b;
    int ok = 0, s1 = 0, s2 = 0;
    for (i = 0; i <= 2; i++)
      if (dp[3][i][a][b].s1 != -1) {
        s1 = 3, s2 = i;
        ok = 1;
        break;
      }
    if (!ok) {
      for (i = 2; i >= 0; i--) {
        if (dp[i][3][a][b].s1 != -1) {
          s1 = i, s2 = 3;
          ok = 1;
          break;
        }
      }
    }
    if (!ok) {
      cout << "Impossible\n";
      continue;
    }
    cout << s1 << ":" << s2 << "\n";
    sol.clear();
    while (!(s1 == 0 && s2 == 0)) {
      int nr1 = dp[s1][s2][a][b].s1;
      int nr2 = dp[s1][s2][a][b].s2;
      int val1 = dp[s1][s2][a][b].a;
      int val2 = dp[s1][s2][a][b].b;
      sol.push_back(make_pair(a - val1, b - val2));
      s1 = nr1, s2 = nr2;
      a = val1, b = val2;
    }
    sol.pop_back();
    for (i = sol.size(); i >= 0; i--)
      cout << sol[i].first << ":" << sol[i].second << " ";
    cout << "\n";
  }
  return 0;
}
