#include <bits/stdc++.h>
int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
using namespace ::std;
const int maxn = 255;
const int maxm = 201;
pair<int, int> dp[maxn][maxn][4][4];
bool val[maxn][maxn][4][4];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  val[0][0][0][0] = 1;
  for (int jam = 0; jam <= 5; jam++) {
    for (int a = 0; a <= jam && a <= 2; a++) {
      int b = jam - a;
      if (b <= 2) {
        if (a == 2 && b == 2) {
          for (int i = 0; i < maxm; i++) {
            for (int j = 0; j < maxm; j++) {
              if (val[i][j][a][b]) {
                for (int u = 0; u < 14; u++) {
                  val[i + u][j + 15][a][b + 1] = 1;
                  dp[i + u][j + 15][a][b + 1] = make_pair(u, 15);
                }
                for (int u = 0; u < 14; u++) {
                  val[i + 15][j + u][a + 1][b] = 1;
                  dp[i + 15][j + u][a + 1][b] = make_pair(15, u);
                }
                for (int u = 16; u + i < maxn && j + u - 2 < maxn; u++) {
                  int y = u - 2;
                  val[i + u][j + y][a + 1][b] = 1;
                  dp[i + u][j + y][a + 1][b] = make_pair(u, y);
                }
                for (int u = 16; u + j < maxn && i + u - 2 < maxn; u++) {
                  int y = u - 2;
                  val[i + y][j + u][a][b + 1] = 1;
                  dp[i + y][j + u][a][b + 1] = make_pair(y, u);
                }
              }
            }
          }
        } else {
          for (int i = 0; i < maxm; i++) {
            for (int j = 0; j < maxm; j++) {
              if (val[i][j][a][b]) {
                for (int u = 0; u < 24; u++) {
                  val[i + u][j + 25][a][b + 1] = 1;
                  dp[i + u][j + 25][a][b + 1] = make_pair(u, 25);
                }
                for (int u = 0; u < 24; u++) {
                  val[i + 25][j + u][a + 1][b] = 1;
                  dp[i + 25][j + u][a + 1][b] = make_pair(25, u);
                }
                for (int u = 26; u + i < maxn && j + u - 2 < maxn; u++) {
                  int y = u - 2;
                  val[i + u][j + y][a + 1][b] = 1;
                  dp[i + u][j + y][a + 1][b] = make_pair(u, y);
                }
                for (int u = 26; u + j < maxn && i + u - 2 < maxn; u++) {
                  int y = u - 2;
                  val[i + y][j + u][a][b + 1] = 1;
                  dp[i + y][j + u][a][b + 1] = make_pair(y, u);
                }
              }
            }
          }
        }
      }
    }
  }
  int n;
  cin >> n;
  while (n--) {
    int a, b;
    cin >> a >> b;
    pair<int, int> ans = make_pair(-1, -1);
    if (val[a][b][3][0]) {
      ans = make_pair(3, 0);
    } else if (val[a][b][3][1]) {
      ans = make_pair(3, 1);
    } else if (val[a][b][3][2]) {
      ans = make_pair(3, 2);
    } else if (val[a][b][2][3]) {
      ans = make_pair(2, 3);
    } else if (val[a][b][1][3]) {
      ans = make_pair(1, 3);
    } else if (val[a][b][0][3]) {
      ans = make_pair(0, 3);
    }
    if (ans == make_pair(-1, -1)) {
      cout << "Impossible\n";
      continue;
    }
    cout << ans.first << ":" << ans.second << endl;
    vector<pair<int, int> > vec;
    while (a != 0 || b != 0) {
      vec.push_back(dp[a][b][ans.first][ans.second]);
      a -= vec.back().first;
      b -= vec.back().second;
      if (vec.back().first < vec.back().second) {
        ans.second--;
      } else {
        ans.first--;
      }
    }
    reverse(vec.begin(), vec.end());
    for (auto v : vec) {
      cout << v.first << ':' << v.second << ' ';
    }
    cout << endl;
  }
}
