#include <bits/stdc++.h>
using namespace std;
int dp[220][220][17];
pair<int, int> p[220][220][17];
int ds(int a, int b, int st) {
  if ((a == 0) && (b == 0)) {
    return ((st % 4 > 2) || (st / 4 > 2)) ? 50 : -100000;
  }
  if ((st % 4 > 2) || (st / 4 > 2)) {
    return -100000;
  }
  if ((a < 0) || (b < 0)) {
    return -100000;
  }
  if (dp[a][b][st] != -1) {
    return dp[a][b][st];
  }
  int mv = -100000;
  pair<int, int> mi = {-1, -1};
  for (int i = 0; i <= min(b + 2, a); i++) {
    int av = max(i + 2, (st == 10) ? 15 : 25);
    if (100 + ds(a - av, b - i, st + 4) > mv) {
      mv = 100 + ds(a - av, b - i, st + 4);
      mi = {a - av, b - i};
    }
  }
  for (int i = 0; i <= min(b, a + 2); i++) {
    int bv = max(i + 2, (st == 10) ? 15 : 25);
    if (ds(a - i, b - bv, st + 1) - 1 > mv) {
      mv = ds(a - i, b - bv, st + 1) - 1;
      mi = {a - i, b - bv};
    }
  }
  p[a][b][st] = mi;
  return dp[a][b][st] = mv;
}
int main() {
  memset(dp, -1, sizeof(dp));
  int m;
  scanf("%d ", &m);
  while (m--) {
    int a, b;
    scanf("%d %d ", &a, &b);
    int val = ds(a, b, 0);
    if (val < 0) {
      printf("Impossible\n");
      continue;
    }
    pair<int, int> id = {a, b}, z = {0, 0};
    int wa = val / 100, wb = 50 - (val % 100);
    printf("%d:%d\n", wa, wb);
    int fi = wa * 4 + wb, ns = 0;
    vector<pair<int, int> > res;
    while (ns != fi) {
      res.push_back(id);
      pair<int, int> tp = p[id.first][id.second][ns];
      if ((id.first - tp.first) > (id.second - tp.second)) {
        ns += 4;
      } else {
        ns += 1;
      }
      id = tp;
    }
    res.push_back({0, 0});
    for (int i = 0; i < res.size() - 1; i++) {
      pair<int, int> f = res[i], s = res[i + 1];
      if (i > 0) {
        printf(" ");
      }
      printf("%d:%d", f.first - s.first, f.second - s.second);
    }
    printf("\n");
  }
}
