#include using namespace std; #define FOR(i, a, b) for(int i = (a); i < (b); i++) #define RFOR(i, a, b) for(int i = (a) - 1; i >= (b); i--) #define SZ(a) int(a.size()) #define ALL(a) a.begin(), a.end() #define PB push_back #define MP make_pair #define F first #define S second typedef long long LL; typedef vector VI; typedef pair PII; typedef double db; #warning const int N = 25; int ans[N][N]; /* int dp[1 << N][N][N + 1][2]; void upd(int& a, int b) { a = max(a, b); } void calcDP(int n) { FOR(mask, 0, 1 << n) FOR(last, 0, n) FOR(cnt, 0, n + 1) FOR(t, 0, 2) dp[mask][last][cnt][t] = -1; FOR(last, 0, n) { dp[1 << last][last][0][0] = 0; dp[1 << last][last][0][1] = 0; } int mx = -1; FOR(mask, 0, 1 << n) { FOR(last, 0, n) { FOR(cnt, 0, n + 1) { FOR(t, 0, 2) { if(dp[mask][last][cnt][t] == -1) continue; FOR(bit, 0, n) { if(mask & (1 << bit)) continue; if(ans[last][bit] != t) { upd(dp[mask ^ (1 << bit)][bit][0][t], dp[mask][last][cnt][t]); } else { upd(dp[mask ^ (1 << bit)][bit][cnt + 1][t], max(dp[mask][last][cnt][t], cnt + 1)); mx = max(mx, cnt + 1); } } } } } } cout << mx << "\n"; } */ bool hasBit(int mask, int bit) { return (mask >> bit) & 1; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector changed[2]; FOR(i, 0, n) { string s; cin >> s; FOR(j, 0, n) { if(s[j] == 'S' || s[j] == 'F') { ans[i][j] = (s[j] == 'F'); if(i < j) changed[ans[i][j]].PB({i, j}); } else ans[i][j] = -1; } } int exp = (3 * n + 3) / 4; int mask = -1; FOR(ms, 0, 1 << n) { int k = __builtin_popcount(ms); if(max(min(n - 1, 2 * k), n - k - 1) > exp) continue; int cntS = n - k - 1; for(auto [i, j] : changed[0]) { if(hasBit(ms, i) || hasBit(ms, j)) cntS++; } int cntF = 2 * k; for(auto [i, j] : changed[1]) { if(!(hasBit(ms, i) || hasBit(ms, j))) cntF++; } cntF = min(cntF, n - 1); cntS = min(cntS, n - 1); if(max(cntF, cntS) <= exp) { mask = ms; } } assert(mask != -1); FOR(i, 0, n) { FOR(j, 0, n) { if(i == j) { cout << '.'; continue; } if(ans[i][j] == -1) ans[i][j] = (hasBit(mask, i) || hasBit(mask, j)); cout << (ans[i][j] == 0 ? 'S' : 'F'); } cout << "\n"; } //calcDP(n); return 0; }