#include using namespace std; #define int long long #define double long double #define f first #define s second const int N = 2e1 + 10; char c[N][N]; int f[N], s[N]; void find() { int n; cin >> n; fill (f, f + n, 0); fill (s, s + n, 0); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { cin >> c[i][j]; if (c[i][j] == 'F') { f[i] = 1; f[j] = 1; } if (c[i][j] == 'S') { s[i] = 1; s[j] = 1; } } } set < int > ff, ss, ban; for (int i = 0; i < n; ++i) { if (f[i] && s[i]) { ban.insert (i); } else if (f[i]) { ff.insert (i); } else if (s[i]) { ss.insert (i); } } set < int > chosen; char chr; if (ff.size () > ss.size ()) { chr = 'F'; for (int i : ff) chosen.insert(i); } else { chr = 'S'; for (int i : ss) chosen.insert(i); } int tt = (n + 3) / 4; while (chosen.size () > tt) chosen.erase (chosen.begin ()); for (int i = 0; i < n && chosen.size () < tt; ++i) { if (ban.count (i) || ss.count (i) || ff.count(i)) continue; chosen.insert(i); } for (int i : chosen) { for (int j = 0; j < n; ++j) { if (i == j) continue; c[i][j] = chr; c[j][i] = chr; } } for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (c[i][j] == '?') c[i][j] = chr ^ 'F' ^ 'S'; cout << c[i][j]; } cout << "\n"; } } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; while (t--) { find(); } return 0; }