#include <bits/stdc++.h>
using namespace std;
int vis[220][220][2];
vector<pair<int, int> > ans[220][220][2];
void init() {
  for (int i = 0; i <= 23; i++)
    for (int j = 0; j <= 23; j++)
      for (int k = 0; k <= 23; k++) {
        if (i == 23 || j == 23 || k == 23) {
          if (6 > vis[75][i + j + k][1]) {
            vis[75][i + j + k][1] = 6;
            ans[75][i + j + k][1].clear();
            ans[75][i + j + k][1].push_back(pair<int, int>(25, i));
            ans[75][i + j + k][1].push_back(pair<int, int>(25, j));
            ans[75][i + j + k][1].push_back(pair<int, int>(25, k));
          }
          if (1 > vis[i + j + k][75][1]) {
            vis[i + j + k][75][1] = 1;
            ans[i + j + k][75][1].clear();
            ans[i + j + k][75][1].push_back(pair<int, int>(i, 25));
            ans[i + j + k][75][1].push_back(pair<int, int>(j, 25));
            ans[i + j + k][75][1].push_back(pair<int, int>(k, 25));
          }
        }
        if (6 > vis[75][i + j + k][0]) {
          vis[75][i + j + k][0] = 6;
          ans[75][i + j + k][0].clear();
          ans[75][i + j + k][0].push_back(pair<int, int>(25, i));
          ans[75][i + j + k][0].push_back(pair<int, int>(25, j));
          ans[75][i + j + k][0].push_back(pair<int, int>(25, k));
        }
        if (1 > vis[i + j + k][75][0]) {
          vis[i + j + k][75][0] = 1;
          ans[i + j + k][75][0].clear();
          ans[i + j + k][75][0].push_back(pair<int, int>(i, 25));
          ans[i + j + k][75][0].push_back(pair<int, int>(j, 25));
          ans[i + j + k][75][0].push_back(pair<int, int>(k, 25));
        }
      }
  for (int i = 0; i <= 23; i++)
    for (int j = 0; j <= 23; j++)
      for (int k = 0; k <= 23; k++)
        for (int l = 0; l <= 23; l++) {
          if (i == 23 || j == 23 || k == 23 || l == 23) {
            if (5 > vis[75 + l][i + j + k + 25][1]) {
              vis[75 + l][i + j + k + 25][1] = 5;
              ans[75 + l][i + j + k + 25][1].clear();
              ans[75 + l][i + j + k + 25][1].push_back(pair<int, int>(l, 25));
              ans[75 + l][i + j + k + 25][1].push_back(pair<int, int>(25, i));
              ans[75 + l][i + j + k + 25][1].push_back(pair<int, int>(25, j));
              ans[75 + l][i + j + k + 25][1].push_back(pair<int, int>(25, k));
            }
            if (2 > vis[i + j + k + 25][75 + l][1]) {
              vis[i + j + k + 25][75 + l][1] = 2;
              ans[i + j + k + 25][75 + l][1].clear();
              ans[i + j + k + 25][75 + l][1].push_back(pair<int, int>(25, l));
              ans[i + j + k + 25][75 + l][1].push_back(pair<int, int>(i, 25));
              ans[i + j + k + 25][75 + l][1].push_back(pair<int, int>(j, 25));
              ans[i + j + k + 25][75 + l][1].push_back(pair<int, int>(k, 25));
            }
          }
          if (5 > vis[75 + l][i + j + k + 25][0]) {
            vis[75 + l][i + j + k + 25][0] = 5;
            ans[75 + l][i + j + k + 25][0].clear();
            ans[75 + l][i + j + k + 25][0].push_back(pair<int, int>(l, 25));
            ans[75 + l][i + j + k + 25][0].push_back(pair<int, int>(25, i));
            ans[75 + l][i + j + k + 25][0].push_back(pair<int, int>(25, j));
            ans[75 + l][i + j + k + 25][0].push_back(pair<int, int>(25, k));
          }
          if (2 > vis[i + j + k + 25][75 + l][0]) {
            vis[i + j + k + 25][75 + l][0] = 2;
            ans[i + j + k + 25][75 + l][0].clear();
            ans[i + j + k + 25][75 + l][0].push_back(pair<int, int>(25, l));
            ans[i + j + k + 25][75 + l][0].push_back(pair<int, int>(i, 25));
            ans[i + j + k + 25][75 + l][0].push_back(pair<int, int>(j, 25));
            ans[i + j + k + 25][75 + l][0].push_back(pair<int, int>(k, 25));
          }
        }
  for (int i = 0; i <= 23; i++)
    for (int j = 0; j <= 23; j++)
      for (int k = 0; k <= 23; k++)
        for (int l = 0; l <= 23; l++)
          for (int m = 0; m <= 13; m++) {
            if (i == 23 || j == 23 || k == 23 || l == 23 || m == 13) {
              if (4 > vis[65 + l + k][i + j + m + 50][1]) {
                vis[65 + l + k][i + j + m + 50][1] = 4;
                ans[65 + l + k][i + j + m + 50][1].clear();
                ans[65 + l + k][i + j + m + 50][1].push_back(
                    pair<int, int>(l, 25));
                ans[65 + l + k][i + j + m + 50][1].push_back(
                    pair<int, int>(25, i));
                ans[65 + l + k][i + j + m + 50][1].push_back(
                    pair<int, int>(25, j));
                ans[65 + l + k][i + j + m + 50][1].push_back(
                    pair<int, int>(k, 25));
                ans[65 + l + k][i + j + m + 50][1].push_back(
                    pair<int, int>(15, m));
              }
              if (3 > vis[i + j + m + 50][65 + l + k][1]) {
                vis[i + j + m + 50][65 + l + k][1] = 3;
                ans[i + j + m + 50][65 + l + k][1].clear();
                ans[i + j + m + 50][65 + l + k][1].push_back(
                    pair<int, int>(25, l));
                ans[i + j + m + 50][65 + l + k][1].push_back(
                    pair<int, int>(i, 25));
                ans[i + j + m + 50][65 + l + k][1].push_back(
                    pair<int, int>(j, 25));
                ans[i + j + m + 50][65 + l + k][1].push_back(
                    pair<int, int>(25, k));
                ans[i + j + m + 50][65 + l + k][1].push_back(
                    pair<int, int>(m, 15));
              }
            }
            if (4 > vis[65 + l + k][i + j + m + 50][0]) {
              vis[65 + l + k][i + j + m + 50][0] = 4;
              ans[65 + l + k][i + j + m + 50][0].clear();
              ans[65 + l + k][i + j + m + 50][0].push_back(
                  pair<int, int>(l, 25));
              ans[65 + l + k][i + j + m + 50][0].push_back(
                  pair<int, int>(25, i));
              ans[65 + l + k][i + j + m + 50][0].push_back(
                  pair<int, int>(25, j));
              ans[65 + l + k][i + j + m + 50][0].push_back(
                  pair<int, int>(k, 25));
              ans[65 + l + k][i + j + m + 50][0].push_back(
                  pair<int, int>(15, m));
            }
            if (3 > vis[i + j + m + 50][65 + l + k][0]) {
              vis[i + j + m + 50][65 + l + k][0] = 3;
              ans[i + j + m + 50][65 + l + k][0].clear();
              ans[i + j + m + 50][65 + l + k][0].push_back(
                  pair<int, int>(25, l));
              ans[i + j + m + 50][65 + l + k][0].push_back(
                  pair<int, int>(i, 25));
              ans[i + j + m + 50][65 + l + k][0].push_back(
                  pair<int, int>(j, 25));
              ans[i + j + m + 50][65 + l + k][0].push_back(
                  pair<int, int>(25, k));
              ans[i + j + m + 50][65 + l + k][0].push_back(
                  pair<int, int>(m, 15));
            }
          }
}
int main() {
  int T;
  scanf("%d", &T);
  init();
  while (T--) {
    int a, b;
    scanf("%d%d", &a, &b);
    vector<pair<int, int> > tmp;
    int Ans = 0, cnt = 0, add = 0;
    if (vis[a][b][0] > Ans) {
      Ans = vis[a][b][0];
      tmp = ans[a][b][0];
    }
    while (a && b) {
      a--, b--;
      cnt++;
      if (vis[a][b][1] > Ans) {
        Ans = vis[a][b][1];
        tmp = ans[a][b][1];
        add = cnt;
      }
    }
    if (Ans == 0) {
      printf("Impossible\n");
      continue;
    }
    if (Ans >= 4)
      printf("%d:%d\n", 3, 6 - Ans);
    else
      printf("%d:%d\n", Ans - 1, 3);
    for (int i = 0; i < tmp.size(); i++) {
      if (add && abs(tmp[i].first - tmp[i].second) == 2) {
        printf("%d:%d%c", tmp[i].first + add, tmp[i].second + add,
               tmp.size() == i + 1 ? '\n' : ' ');
        add = 0;
      } else
        printf("%d:%d%c", tmp[i].first, tmp[i].second,
               tmp.size() == i + 1 ? '\n' : ' ');
    }
  }
  return 0;
}
