func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   void _R(T &x) {     cin >> x;   }   void _R(int &x) { scanf( %d , &x); }   void _R(long long &x) { scanf( %lld , &x); }   void _R(double &x) { scanf( %lf , &x); }   void _R(char &x) { scanf(  %c , &x); }   void _R(char *x) { scanf( %s , x); }   void R() {}   template <class T, class... U>   void R(T &head, U &...tail) {     _R(head);     R(tail...);   }   template <class T>   void _W(const T &x) {     cout << x;   }   void _W(const int &x) { printf( %d , x); }   void _W(const long long &x) { printf( %lld , x); }   void _W(const double &x) { printf( %.16f , x); }   void _W(const char &x) { putchar(x); }   void _W(const char *x) { printf( %s , x); }   template <class T, class U>   void _W(const pair<T, U> &x) {     _W(x.first);     putchar(   );     _W(x.second);   }   template <class T>   void _W(const vector<T> &x) {     for (auto i = x.begin(); i != x.end(); _W(*i++))       if (i != x.cbegin()) putchar(   );   }   void W() {}   template <class T, class... U>   void W(const T &head, const U &...tail) {     _W(head);     putchar(sizeof...(tail) ?     :   n );     W(tail...);   }   int MOD = 1e9 + 7;   void ADD(long long &x, long long v) {     x = (x + v) % MOD;     if (x < 0) x += MOD;   }   const int SIZE = 1e6 + 10;   int max_score[5] = {25, 25, 25, 25, 15};   pair<int, int> dp[6][4][201][201];   void pre() {     for (int i = 0; i < (6); ++i)       for (int win = 0; win < (4); ++win)         for (int j = 0; j < (201); ++j)           for (int k = 0; k < (201); ++k) dp[i][win][j][k].first = -1;     dp[0][0][0][0] = {0, 0};     for (int i = 0; i < (5); ++i)       for (int win = 0; win < (4); ++win)         for (int j = 0; j < (201); ++j)           for (int k = 0; k < (201); ++k) {             if (dp[i][win][j][k].first == -1) continue;             if (win == 3 || i - win == 3) continue;             if (i - win < 3 && k + max_score[i] <= 200) {               for (int score = (0); score <= (max_score[i] - 2); ++score) {                 if (j + score <= 200) {                   dp[i + 1][win][j + score][k + max_score[i]] = {score,                                                                  max_score[i]};                 }               }             }             if (win < 3 && j + max_score[i] <= 200) {               for (int score = (0); score <= (max_score[i] - 2); ++score) {                 if (k + score <= 200) {                   dp[i + 1][win + 1][j + max_score[i]][k + score] = {max_score[i],                                                                      score};                 }               }             }             for (int score = (max_score[i] + 1); score <= (200); ++score) {               int good = 0;               if (i - win < 3 && j + score - 2 <= 200 && k + score <= 200) {                 good = 1;                 dp[i + 1][win][j + score - 2][k + score] = {score - 2, score};               }               if (win < 3 && j + score <= 200 && k + score - 2 <= 200) {                 good = 1;                 dp[i + 1][win + 1][j + score][k + score - 2] = {score, score - 2};               }               if (!good) break;             }           }   }   void print(int i, int win, int j, int k) {     printf( %d:%d n , win, i - win);     vector<pair<int, int> > AA;     while (i) {       AA.push_back(dp[i][win][j][k]);       i--;       if (AA.back().first > AA.back().second) win--;       j -= AA.back().first;       k -= AA.back().second;     }     reverse((AA).begin(), (AA).end());     for (int i = 0; i < (((int)(AA).size())); ++i) {       if (i) printf(   );       printf( %d:%d , AA[i].first, AA[i].second);     }     W(  );   }   void solve(int a, int b) {     for (int lose = (0); lose <= (2); ++lose) {       if (dp[lose + 3][3][a][b].first != -1) {         print(lose + 3, 3, a, b);         return;       }     }     for (int win = 2; win >= 0; win--) {       if (dp[win + 3][win][a][b].first != -1) {         print(win + 3, win, a, b);         return;       }     }     W( Impossible );   }   int main() {     pre();     int ___T;     scanf( %d , &___T);     for (int cs = 1; cs <= ___T; cs++) {       int a, b;       R(a, b);       solve(a, b);     }     return 0;   }   