#include <bits/stdc++.h>
using namespace std;
int dp[5][5][230][230];
vector<pair<int, int> > p[5][5][230][230];
int m;
int a, b;
void init() {
  memset(dp, 0, sizeof(dp));
  dp[0][0][0][0] = 1;
  for (int num = 0; num <= 4; ++num) {
    for (int l = 0; l <= num; ++l) {
      for (int i = 0; i <= 200; ++i) {
        for (int j = 0; j <= 200; ++j) {
          int r = num - l;
          if (max(l, r) >= 3) continue;
          if (!dp[l][r][i][j]) continue;
          int limit = (num == 4) ? 15 : 25;
          for (int atmp = limit; atmp <= 200; ++atmp) {
            if (i + atmp > 200 || j + atmp - 2 > 200 ||
                dp[l + 1][r][i + atmp][j + atmp - 2])
              continue;
            dp[l + 1][r][i + atmp][j + atmp - 2] = 1;
            p[l + 1][r][i + atmp][j + atmp - 2] = p[l][r][i][j];
            p[l + 1][r][i + atmp][j + atmp - 2].push_back(
                make_pair(atmp, atmp - 2));
          }
          for (int atmp = limit; atmp <= 200; ++atmp) {
            if (i + atmp - 2 > 200 || j + atmp > 200 ||
                dp[l][r + 1][i + atmp - 2][j + atmp])
              continue;
            dp[l][r + 1][i + atmp - 2][j + atmp] = 1;
            p[l][r + 1][i + atmp - 2][j + atmp] = p[l][r][i][j];
            p[l][r + 1][i + atmp - 2][j + atmp].push_back(
                make_pair(atmp - 2, atmp));
          }
          for (int tmp = 0; tmp <= limit - 2; ++tmp) {
            if (i + limit > 200 || j + tmp > 200 ||
                dp[l + 1][r][i + limit][j + tmp])
              continue;
            dp[l + 1][r][i + limit][j + tmp] = 1;
            p[l + 1][r][i + limit][j + tmp] = p[l][r][i][j];
            p[l + 1][r][i + limit][j + tmp].push_back(make_pair(limit, tmp));
          }
          for (int tmp = 0; tmp <= limit - 2; ++tmp) {
            if (j + limit > 200 || i + tmp > 200 ||
                dp[l][r + 1][i + tmp][j + limit])
              continue;
            dp[l][r + 1][i + tmp][j + limit] = 1;
            p[l][r + 1][i + tmp][j + limit] = p[l][r][i][j];
            p[l][r + 1][i + tmp][j + limit].push_back(make_pair(tmp, limit));
          }
        }
      }
    }
  }
  return;
}
int l, r;
int main() {
  init();
  scanf("%d", &m);
  while (m--) {
    l = 0;
    r = 0;
    scanf("%d%d", &a, &b);
    if (dp[3][0][a][b]) {
      l = 3, r = 0;
    } else if (dp[3][1][a][b]) {
      l = 3;
      r = 1;
    } else if (dp[3][2][a][b]) {
      l = 3;
      r = 2;
    } else if (dp[2][3][a][b]) {
      l = 2;
      r = 3;
    } else if (dp[1][3][a][b]) {
      l = 1;
      r = 3;
    } else if (dp[0][3][a][b]) {
      l = 0;
      r = 3;
    } else {
      printf("Impossible\n");
      continue;
    }
    printf("%d:%d\n", l, r);
    for (int i = 0; i < p[l][r][a][b].size(); ++i) {
      printf("%d:%d ", p[l][r][a][b][i].first, p[l][r][a][b][i].second);
    }
    printf("\n");
  }
  return 0;
}
