#include <bits/stdc++.h>
using namespace std;
pair<int, int> res[6];
bool go30(int a, int b) {
  a -= 75;
  if (a < 0) return 0;
  if (a) {
    b -= a;
    b -= 23;
    res[1] = {25 + a, 23 + a};
    if (b < 0) return 0;
    if (b <= 23 * 2) {
      for (int i = (2); i <= (3); i++) {
        res[i].first = 25;
        res[i].second = (b > 23) ? 23 : b;
        b -= res[i].second;
      }
      return 1;
    }
  } else {
    if (b <= 23 * 3) {
      for (int i = (1); i <= (3); i++) {
        res[i].first = 25;
        res[i].second = (b > 23) ? 23 : b;
        b -= res[i].second;
      }
      return 1;
    }
  }
  return 0;
}
bool go31(int a, int b) {
  a -= 75;
  b -= 25;
  if (a < 0 || b < 0) return 0;
  if (a <= 23 && b <= 23 * 3) {
    res[1] = {a, 25};
    for (int i = (2); i <= (4); i++) {
      res[i].first = 25;
      res[i].second = (b > 23) ? 23 : b;
      b -= res[i].second;
    }
    return 1;
  }
  for (int i = (1); i <= (a); i++) {
    int aa = a, bb = b;
    aa -= i;
    bb -= i;
    if (aa > 23 || bb > 23 * 3) continue;
    if (bb < 0) break;
    if (aa == 23) {
      res[1] = {23 + i, 25 + i};
      for (int j = (2); j <= (4); j++) {
        res[j].first = 25;
        res[j].second = (bb > 23) ? 23 : bb;
        bb -= res[j].second;
      }
      return 1;
    } else {
      if (bb < 23) continue;
      res[1] = {aa, 25};
      res[2] = {25 + i, 23 + i};
      bb -= 23;
      for (int j = (3); j <= (4); j++) {
        res[j].first = 25;
        res[j].second = (bb > 23) ? 23 : bb;
        bb -= res[j].second;
      }
      return 1;
    }
  }
  return 0;
}
bool go32(int a, int b) {
  a -= 65;
  b -= 50;
  if (a < 0 || b < 0) return 0;
  if (a <= 23 * 2 && b <= 23 * 2 + 13) {
    for (int i = (1); i <= (2); i++) {
      res[i].second = 25;
      res[i].first = (a > 23) ? 23 : a;
      a -= res[i].first;
    }
    for (int i = (3); i <= (5); i++) {
      res[i].first = i == 5 ? 15 : 25;
      res[i].second = (b > 23) ? 23 : b;
      b -= res[i].second;
    }
    return 1;
  }
  int aa = a, bb = b;
  for (int t = (1); t <= (aa); t++) {
    a = aa - t;
    b = bb - t;
    if (a > 23 * 2 || b > 23 * 2 + 13) continue;
    if (b < 0) break;
    if (a >= 23) {
      res[1] = {23 + t, 25 + t};
      res[2] = {a - 23, 25};
      for (int i = (3); i <= (5); i++) {
        res[i].first = i == 5 ? 15 : 25;
        res[i].second = (b > 23) ? 23 : b;
        b -= res[i].second;
      }
      return 1;
    } else {
      if (b < 13) continue;
      b -= 13;
      res[5] = {15 + t, 13 + t};
      for (int i = (1); i <= (2); i++) {
        res[i].second = 25;
        res[i].first = (a > 23) ? 23 : a;
        a -= res[i].first;
      }
      for (int i = (3); i <= (4); i++) {
        res[i].first = i == 5 ? 15 : 25;
        res[i].second = (b > 23) ? 23 : b;
        b -= res[i].second;
      }
      return 1;
    }
  }
  return 0;
}
int main() {
  int n, a, b;
  scanf("%d", &n);
  for (int i = (1); i <= (n); i++) {
    scanf("%d%d", &a, &b);
    if (go30(a, b)) {
      printf("3:0\n");
      for (int i = (1); i <= (3); i++)
        printf("%d:%d%c", res[i].first, res[i].second, i == 3 ? '\n' : ' ');
    } else if (go31(a, b)) {
      printf("3:1\n");
      for (int i = (1); i <= (4); i++)
        printf("%d:%d%c", res[i].first, res[i].second, i == 4 ? '\n' : ' ');
    } else if (go32(a, b)) {
      printf("3:2\n");
      for (int i = (1); i <= (5); i++)
        printf("%d:%d%c", res[i].first, res[i].second, i == 5 ? '\n' : ' ');
    } else if (go32(b, a)) {
      printf("2:3\n");
      for (int i = (1); i <= (5); i++)
        printf("%d:%d%c", res[i].second, res[i].first, i == 5 ? '\n' : ' ');
    } else if (go31(b, a)) {
      printf("1:3\n");
      for (int i = (1); i <= (4); i++)
        printf("%d:%d%c", res[i].second, res[i].first, i == 4 ? '\n' : ' ');
    } else if (go30(b, a)) {
      printf("0:3\n");
      for (int i = (1); i <= (3); i++)
        printf("%d:%d%c", res[i].second, res[i].first, i == 3 ? '\n' : ' ');
    } else
      printf("Impossible\n");
  }
  return 0;
}
