#include using namespace std; #ifdef _RUTHEN #include #else #define show(...) true #endif using ll = long long; #define rep(i, n) for (int i = 0; i < (n); i++) template using V = vector; #include using mint1 = atcoder::modint1000000007; using mint2 = atcoder::modint998244353; ostream &operator<<(ostream &os, const mint1 &p) { return os << p.val(); } ostream &operator<<(ostream &os, const mint2 &p) { return os << p.val(); } int main() { ios::sync_with_stdio(false); cin.tie(0); int N; cin >> N; set> st; mint1 B1 = 100007; mint2 B2 = 100007; rep(i, N) { string S; cin >> S; int M = (int)S.size(); for (auto &c : S) c -= 'a'; V h1(M + 1), p1(M + 1, 1); V h2(M + 1), p2(M + 1, 1); rep(i, M) { h1[i + 1] = h1[i] * B1 + S[i]; h2[i + 1] = h2[i] * B2 + S[i]; p1[i + 1] = p1[i] * B1; p2[i + 1] = p2[i] * B2; } int seen = 0; if (st.find({h1[M].val(), h2[M].val()}) != st.end()) seen = 1; rep(i, M - 1) { mint1 ch1 = h1[M]; ch1 -= h1[i + 2] * p1[M - 2 - i]; ch1 += h1[i] * p1[M - i]; ch1 += S[i + 1] * p1[M - i - 1] + S[i] * p1[M - 2 - i]; mint2 ch2 = h2[M]; ch2 -= h2[i + 2] * p2[M - 2 - i]; ch2 += h2[i] * p2[M - i]; ch2 += S[i + 1] * p2[M - i - 1] + S[i] * p2[M - 2 - i]; if (st.find({ch1.val(), ch2.val()}) != st.end()) seen = 1; } cout << (seen ? "Yes" : "No") << '\n'; st.insert({h1[M].val(), h2[M].val()}); } return 0; }