#include using namespace std; typedef long long ll; typedef pair pii; #define fi first #define se second #define mp make_pair #define fastIO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int gen(int m){ return ((int)rng() % m + m) % m; } const int N = 24; char s[N][N]; struct DSU{ int par[N]; int sz[N]; void init(){ for(int i = 0 ; i < N; i ++ ){ par[i] = i; sz[i] = 1; } } int fin(int u){ if(par[u] == u) return u; return par[u]=fin(par[u]); } void join(int u, int v){ u=fin(u); v=fin(v); if(u==v) return; par[u]=v; sz[v]+=sz[u]; } }; DSU A, B; DSU aa, bb; void shuffle(vector &ee){ for(int i = 1; i < ee.size(); i ++ ){ swap(ee[i], ee[gen(i + 1)]); } } char temp[N][N]; void make(int i, int j, char w){ s[i][j]=s[j][i]=w; } int main(){ fastIO; int n; cin >> n; A.init(); B.init(); vector E; for(int i = 0 ; i < n; i ++ ){ for(int j = 0 ; j < n; j ++ ){ cin >> s[i][j]; } for(int j = i + 1; j < n; j ++ ){ if(s[i][j] == 'F'){ A.join(i,j); } else if(s[i][j] == 'S'){ B.join(i,j); } else{ E.push_back(mp(i,j)); } } } shuffle(E); int sa, sb; for(auto f : E){ if(A.fin(f.fi) == A.fin(f.se)){ make(f.fi, f.se, 'F'); continue; } if(B.fin(f.fi) == B.fin(f.se)){ make(f.fi, f.se, 'S'); continue; } sa = A.sz[A.fin(f.fi)] + A.sz[A.fin(f.se)]; sb = B.sz[B.fin(f.fi)] + B.sz[B.fin(f.se)]; if(sa < sb){ A.join(f.fi, f.se); make(f.fi, f.se, 'F'); continue; } else{ B.join(f.fi, f.se); make(f.fi, f.se, 'S'); continue; } } for(int i = 0 ; i < n; i ++ ){ for(int j = 0 ; j < n; j ++ ){ cout << s[i][j]; } cout << "\n"; } return 0; }