#include using namespace atcoder; #include template inline bool chmin(T&a, T b){if(a > b){a = b; return true;}else{return false;}} template inline bool chmax(T&a, T b){if(a < b){a = b; return true;}else{return false;}} #define ll long long #define double long double #define rep(i,n) for(int i=0;i<(n);i++) #define REP(i,n) for(int i=1;i<=(n);i++) #define mod (ll)(1e9+7) #define inf (ll)(3e18+7) #define eps (double)(1e-9) #define pi (double) acos(-1) #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() using namespace std; int main() { int n; cin >> n; vector s(n); rep(i, n)cin >> s[i]; vector> vec(n); rep(i, n)for(auto c : s[i])vec[i].push_back(c-'a'); vector, int>> fin; rep(i, n){ vector vec_ = vec[i]; sort(all(vec_)); int sw = -1; rep(j, vec[i].size()){ if(vec[i][j] == vec_[j])continue; sw = j; break; } if(sw == -1){ int m = vec[i].size(); vector cnt(26); rep(j, vec[i].size())cnt[vec[i][j]]++; bool f = false; rep(j, 26)if(cnt[j] >= 2)f = true; if(!f)swap(vec[i][m-1], vec[i][m-2]); fin.push_back({vec[i], i}); continue; } int mn = mod, idx = -1; for(int j = sw+1; j < vec[i].size(); j++){ if(mn >= vec[i][j]){ mn = vec[i][j]; idx = j; } } swap(vec[i][sw], vec[i][idx]); fin.push_back({vec[i], i}); } sort(all(fin)); vector ans(n); int win = 0; while(win < n-1){ if(fin[win].first == fin[win+1].first)win++; else break; } rep(i, win+1){ ans[fin[i].second] = n - win; } rep(i, n)cout << ans[i] << endl; }