#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > ans[255][255];
long long boost[255][255];
vector<pair<long long, long long> > sets;
pair<long long, long long> AB() {
  long long a = 0, b = 0;
  for (long long i = 1; i < sets.size(); i++)
    a += sets[i].first, b += sets[i].second;
  return {a, b};
}
void flood() {
  for (long long i = 0; i < 205; i++)
    for (long long j = 0; j < 205; j++)
      if (boost[i][j] > 0) {
        long long k = 1;
        while (1) {
          if (i + k > 200 || j + k > 200) break;
          if (boost[i + k][j + k] > 0) {
            k++;
            continue;
          }
          ans[i + k][j + k] = ans[i][j];
          ans[i + k][j + k][boost[i][j]].first += k;
          ans[i + k][j + k][boost[i][j]].second += k;
          k++;
        }
      }
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  sets.assign(4, {0, 0});
  sets[0] = {0, 3};
  for (long long i = 23; i > -1; i--)
    for (long long j = 23; j > -1; j--)
      for (long long k = 23; k > -1; k--) {
        sets[1] = {i, 25}, sets[2] = {j, 25}, sets[3] = {k, 25};
        pair<long long, long long> c = AB();
        if (boost[c.first][c.second] > 0) continue;
        ans[c.first][c.second] = sets;
        if (i == 23)
          boost[c.first][c.second] = 1;
        else if (j == 23)
          boost[c.first][c.second] = 2;
        else if (k == 23)
          boost[c.first][c.second] = 3;
      }
  flood();
  for (long long i = 0; i < 205; i++)
    for (long long j = 0; j < 205; j++) boost[i][j] = 0;
  sets.assign(5, {0, 0});
  sets[0] = {1, 3};
  for (long long i1 = 23; i1 > -1; i1--)
    for (long long i2 = 23; i2 > -1; i2--)
      for (long long i3 = 23; i3 > -1; i3--)
        for (long long i4 = 23; i4 > -1; i4--) {
          sets[1] = {25, i1}, sets[2] = {i2, 25}, sets[3] = {i3, 25};
          sets[4] = {i4, 25};
          pair<long long, long long> c = AB();
          if (boost[c.first][c.second] > 0) continue;
          ans[c.first][c.second] = sets;
          if (i1 == 23)
            boost[c.first][c.second] = 1;
          else if (i2 == 23)
            boost[c.first][c.second] = 2;
          else if (i3 == 23)
            boost[c.first][c.second] = 3;
          else if (i4 == 23)
            boost[c.first][c.second] = 4;
        }
  flood();
  for (long long i = 0; i < 205; i++)
    for (long long j = 0; j < 205; j++) boost[i][j] = 0;
  sets.assign(6, {0, 0});
  sets[0] = {2, 3};
  for (long long i1 = 23; i1 > -1; i1--)
    for (long long i2 = 23; i2 > -1; i2--)
      for (long long i3 = 23; i3 > -1; i3--)
        for (long long i4 = 23; i4 > -1; i4--)
          for (long long i5 = 13; i5 > -1; i5--) {
            sets[1] = {25, i1}, sets[2] = {25, i2}, sets[3] = {i3, 25};
            sets[4] = {i4, 25}, sets[5] = {i5, 15};
            pair<long long, long long> c = AB();
            if (boost[c.first][c.second] > 0) continue;
            ans[c.first][c.second] = sets;
            if (i1 == 23)
              boost[c.first][c.second] = 1;
            else if (i2 == 23)
              boost[c.first][c.second] = 2;
            else if (i3 == 23)
              boost[c.first][c.second] = 3;
            else if (i4 == 23)
              boost[c.first][c.second] = 4;
            else if (i5 == 13)
              boost[c.first][c.second] = 5;
          }
  flood();
  for (long long i = 0; i < 205; i++)
    for (long long j = 0; j < 205; j++) boost[i][j] = 0;
  sets.assign(6, {0, 0});
  sets[0] = {3, 2};
  for (long long i1 = 23; i1 > -1; i1--)
    for (long long i2 = 23; i2 > -1; i2--)
      for (long long i3 = 23; i3 > -1; i3--)
        for (long long i4 = 23; i4 > -1; i4--)
          for (long long i5 = 13; i5 > -1; i5--) {
            sets[1] = {25, i1}, sets[2] = {25, i2}, sets[3] = {i3, 25};
            sets[4] = {i4, 25}, sets[5] = {15, i5};
            pair<long long, long long> c = AB();
            if (boost[c.first][c.second] > 0) continue;
            ans[c.first][c.second] = sets;
            if (i1 == 23)
              boost[c.first][c.second] = 1;
            else if (i2 == 23)
              boost[c.first][c.second] = 2;
            else if (i3 == 23)
              boost[c.first][c.second] = 3;
            else if (i4 == 23)
              boost[c.first][c.second] = 4;
            else if (i5 == 13)
              boost[c.first][c.second] = 5;
          }
  flood();
  for (long long i = 0; i < 205; i++)
    for (long long j = 0; j < 205; j++) boost[i][j] = 0;
  sets.assign(5, {0, 0});
  sets[0] = {3, 1};
  for (long long i1 = 23; i1 > -1; i1--)
    for (long long i2 = 23; i2 > -1; i2--)
      for (long long i3 = 23; i3 > -1; i3--)
        for (long long i4 = 23; i4 > -1; i4--) {
          sets[1] = {25, i1}, sets[2] = {25, i2}, sets[3] = {i3, 25};
          sets[4] = {25, i4};
          pair<long long, long long> c = AB();
          if (boost[c.first][c.second] > 0) continue;
          ans[c.first][c.second] = sets;
          if (i1 == 23)
            boost[c.first][c.second] = 1;
          else if (i2 == 23)
            boost[c.first][c.second] = 2;
          else if (i3 == 23)
            boost[c.first][c.second] = 3;
          else if (i4 == 23)
            boost[c.first][c.second] = 4;
        }
  flood();
  for (long long i = 0; i < 205; i++)
    for (long long j = 0; j < 205; j++) boost[i][j] = 0;
  sets.assign(4, {0, 0});
  sets[0] = {3, 0};
  for (long long i1 = 23; i1 > -1; i1--)
    for (long long i2 = 23; i2 > -1; i2--)
      for (long long i3 = 23; i3 > -1; i3--) {
        sets[1] = {25, i1}, sets[2] = {25, i2}, sets[3] = {25, i3};
        pair<long long, long long> c = AB();
        if (boost[c.first][c.second] > 0) continue;
        ans[c.first][c.second] = sets;
        if (i1 == 23)
          boost[c.first][c.second] = 1;
        else if (i2 == 23)
          boost[c.first][c.second] = 2;
        else if (i3 == 23)
          boost[c.first][c.second] = 3;
      }
  flood();
  long long m, a, b;
  cin >> m;
  while (m--) {
    cin >> a >> b;
    if (ans[a][b].empty())
      cout << "Impossible\n";
    else {
      cout << ans[a][b][0].first << ":" << ans[a][b][0].second << endl;
      for (long long i = 1; i < ans[a][b].size(); i++)
        cout << ans[a][b][i].first << ":" << ans[a][b][i].second << " ";
      cout << "\n";
    }
  }
}
