func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 5;   inline int read() {     int x = 0, w = 1;     char ch = 0;     while (ch <  0  || ch >  9 ) {       ch = getchar();       if (ch ==  - ) w = -1;     }     while (ch <=  9  && ch >=  0 ) {       x = (x << 1) + (x << 3) + ch -  0 ;       ch = getchar();     }     return x * w;   }   int p[10];   int k1[10], k2[10], ans1[10], ans2[10];   int a, b, p1, p2, flag;   inline void chk(int n, int c1, int c2) {     int cnt1 = 0, cnt2 = 0;     memset(k1, 0, sizeof(k1));     memset(k2, 0, sizeof(k2));     if ((c1 - c2 <= p1 - p2)) return;     for (int i = 1; i <= n; ++i) {       if (p[i] == 1)         cnt1 += (k1[i] = (i == 5) ? 15 : 25);       else         cnt2 += (k2[i] = (i == 5) ? 15 : 25);     }     if (cnt1 > a || cnt2 > b) return;     if (n == 5) {       if (p[5]) {         if (cnt2 + 13 <= b) {           cnt2 += 13;           k2[5] = 13;           int now = min(a - cnt1, b - cnt2);           cnt1 += now, cnt2 += now;           k1[5] += now, k2[5] += now;         }       } else {         if (cnt1 + 13 <= a) {           cnt1 += 13;           k1[5] = 13;           int now = min(a - cnt1, b - cnt2);           cnt1 += now, cnt2 += now;           k1[5] += now, k2[5] += now;         }       }       for (int i = 1; i <= n; ++i) {         int k = (i == 5) ? 13 : 23;         if (!p[i]) {           if (k1[i]) continue;           if (cnt1 + k > a)             k1[i] = a - cnt1;           else             k1[i] = k;           cnt1 += k1[i];         } else {           if (k2[i]) continue;           if (cnt2 + k > b)             k2[i] = b - cnt2;           else             k2[i] = k;           cnt2 += k2[i];         }       }       if (cnt1 == a && cnt2 == b && c1 - c2 > p1 - p2) {         p1 = c1, p2 = c2;         flag = 1;         for (int i = 1; i <= n; ++i) ans1[i] = k1[i], ans2[i] = k2[i];         return;       }     }     cnt1 = 0, cnt2 = 0;     memset(k1, 0, sizeof(k1));     memset(k2, 0, sizeof(k2));     for (int i = 1; i <= n; ++i) {       if (p[i] == 1)         cnt1 += (k1[i] = (i == 5) ? 15 : 25);       else         cnt2 += (k2[i] = (i == 5) ? 15 : 25);     }     if (p[1]) {       if (cnt2 + 23 <= b) {         cnt2 += 23;         k2[1] = 23;         int now = min(a - cnt1, b - cnt2);         cnt1 += now, cnt2 += now;         k1[1] += now, k2[1] += now;       }     } else {       if (cnt1 + 23 <= a) {         cnt1 += 23;         k1[1] = 23;         int now = min(a - cnt1, b - cnt2);         cnt1 += now, cnt2 += now;         k1[1] += now, k2[1] += now;       }     }     for (int i = 1; i <= n; ++i) {       int k = (i == 5) ? 13 : 23;       if (!p[i]) {         if (k1[i]) continue;         if (cnt1 + k > a)           k1[i] = a - cnt1;         else           k1[i] = k;         cnt1 += k1[i];       } else {         if (k2[i]) continue;         if (cnt2 + k > b)           k2[i] = b - cnt2;         else           k2[i] = k;         cnt2 += k2[i];       }     }     if (cnt1 != a || cnt2 != b) return;     if (c1 - c2 > p1 - p2) {       p1 = c1, p2 = c2;       flag = 1;       for (int i = 1; i <= n; ++i) ans1[i] = k1[i], ans2[i] = k2[i];     }   }   void dfs(int x, int c1, int c2) {     if (c1 >= 3 || c2 >= 3) {       chk(x - 1, c1, c2);       return;     }     p[x] = 1;     dfs(x + 1, c1 + 1, c2);     p[x] = 0;     dfs(x + 1, c1, c2 + 1);   }   int main() {     int T = read();     while (T--) {       a = read();       b = read();       flag = 0;       p1 = 0, p2 = 5;       dfs(1, 0, 0);       if (!flag) {         printf( Impossible n );         continue;       }       printf( %d:%d n , p1, p2);       for (int i = 1; i <= p1 + p2; ++i) printf( %d:%d  , ans1[i], ans2[i]);       printf(  n );     }     return 0;   }   