#include using namespace std; char str[1000]; char mx[20]; char ans[20]; int n, m; bool done; bool fun() { int i, s = 0, f = 0; for (i = 0; i < n; i++) { if (str[i] < '4') { return false; } if (str[i] < '7' && s < m) { return false; } else if (str[i] > '4' && s >= m) { return true; } else if (str[i] == '7') { if (s < m) { s++; } else { return true; } } else if (str[i] > '7') { return true; } } return false; } void dfs(int lay, bool flag, int s, int f) { if (done || lay == n) { ans[lay] = 0; done = true; return; } if (flag) { int i; for (i = lay; i < n; i++) { if (f < m) { ans[i] = '4'; f++; } else { ans[i] = '7'; } } ans[n] = 0; done = true; return; } char ch = str[lay]; if (str[lay] < '4') { if (f < m) { ans[lay] = '4'; dfs(lay + 1, true, s, f + 1); } if (!done && s < m) { ans[lay] = '7'; dfs(lay + 1, true, s + 1, f); } } else if (str[lay] == '4') { if (f < m) { ans[lay] = '4'; dfs(lay + 1, false, s, f + 1); } if (!done && s < m) { ans[lay] = '7'; dfs(lay + 1, true, s + 1, f); } } else if (str[lay] < '7') { if (s < m) { ans[lay] = '7'; dfs(lay + 1, true, s + 1, f); } } else if (str[lay] == '7') { if (s < m) { ans[lay] = '7'; dfs(lay + 1, false, s + 1, f); } } } void solve() { n = strlen(str); m = n / 2; int i; if (n % 2 == 1) { for (i = 0; i <= n / 2; i++) { printf("4"); } for (i = 0; i <= n / 2; i++) { printf("7"); } printf("\n"); return; } if (fun()) { n += 2; for (i = 0; i < n / 2; i++) { printf("4"); } for (i = 0; i < n / 2; i++) { printf("7"); } printf("\n"); return; } done = false; dfs(0, false, 0, 0); printf("%s\n", ans); } int main() { int tc; scanf("%d", &tc); while (tc--) { scanf("%s", &str); solve(); } return 0; }