#include <bits/stdc++.h>
using namespace std;
int d[6][6][210][210];
pair<int, int> pre[6][6][210][210];
int main() {
  d[0][0][0][0] = 1;
  for (int i = 1; i <= 5; i++) {
    int X = (i < 5 ? 25 : 15);
    vector<pair<int, int> > L[2];
    for (int a = 0; a <= X - 2; a++) L[1].push_back(pair<int, int>(X, a));
    for (int a = X + 1; a <= 200; a++) L[1].push_back(pair<int, int>(a, a - 2));
    for (int a = 0; a <= X - 2; a++) L[0].push_back(pair<int, int>(a, X));
    for (int a = X + 1; a <= 200; a++) L[0].push_back(pair<int, int>(a - 2, a));
    for (int a = 0; a < 3; a++)
      for (int j = 0; j < 201; j++)
        for (int k = 0; k < 201; k++)
          if (d[i - 1][a][j][k] && i - 1 - a < 3) {
            for (int v = 0; v < 2; v++)
              for (pair<int, int> e : L[v]) {
                if (j + e.first <= 200 && k + e.second <= 200) {
                  d[i][a + v][j + e.first][k + e.second] = 1;
                  pre[i][a + v][j + e.first][k + e.second] = e;
                }
              }
          }
  }
  int tc;
  scanf("%d", &tc);
  for (int tt = 0; tt < tc; tt++) {
    int a, b;
    scanf("%d%d", &a, &b);
    int ax = -1, bx = -1, c = -11234;
    for (int i = 3; i <= 5; i++) {
      for (int j : {3, i - 3}) {
        if (d[i][j][a][b]) {
          int t = j - (i - j);
          if (c < t) c = t, ax = i, bx = j;
        }
      }
    }
    if (ax == -1)
      puts("Impossible");
    else {
      printf("%d:%d\n", bx, ax - bx);
      vector<pair<int, int> > ans;
      while (ax > 0) {
        pair<int, int> p = pre[ax][bx][a][b];
        if (p.first > p.second) --bx;
        --ax;
        ans.push_back(p);
        a -= p.first;
        b -= p.second;
      }
      reverse(ans.begin(), ans.end());
      for (pair<int, int> e : ans) printf("%d:%d ", e.first, e.second);
      puts("");
    }
  }
  return 0;
}
