#include <bits/stdc++.h>   using namespace std;   const long long mod = 1000000007;   long long powmod(long long a, long long b) {     long long res = 1;     a %= mod;     assert(b >= 0);     for (; b; b >>= 1) {       if (b & 1) res = res * a % mod;       a = a * a % mod;     }     return res;   }   int getid(string s) {     int len = ((int)(s).size()), id = 0;     if (len > 19) return -1;     for (int j = 0; j < len; j++) id = id * 2 + s[j] -  0 ;     return id + (1 << len) - 2;   }   int n, m, u, v;   char s[110];   string t;   struct blk {     string bg, ed;     bitset<1048576> S;     bool full;     void add(string s) {       int m = ((int)(s).size());       for (int j = 0; j < m; j++)         for (int k = j; k < m; k++) {           string f = s.substr(j, k - j + 1);           int id = getid(f);           if (id == -1) continue;           S[id] = 1;         }     }     void simply() {       if (((int)(bg).size()) > 20) {         bg = bg.substr(0, 20);         full = 0;       }       if (((int)(ed).size()) > 20) {         ed = ed.substr(((int)(ed).size()) - 20, 20);         full = 0;       }     }     int query() {       for (int i = 20 - 1; i >= 1; i--) {         int d = (1 << i) - 2, val = 1;         for (int j = 0; j < (1 << i); j++) {           if (!S[d + j]) {             val = 0;             break;           }         }         if (val) return i;       }       return 0;     }   } b[210];   void gao(int p, int u, int v) {     b[p].S = b[u].S | b[v].S;     if (b[u].full)       b[p].bg = b[u].bg + b[v].bg, b[p].full = 1;     else       b[p].bg = b[u].bg;     if (b[v].full)       b[p].ed = b[u].ed + b[v].ed, b[p].full = 1;     else       b[p].ed = b[v].ed;     b[p].add(b[u].ed + b[v].bg);     b[p].simply();   }   int main() {     scanf( %d , &n);     for (int i = 0; i < n; i++) {       scanf( %s , s);       t = s;       b[i].add(t);       b[i].bg = t;       b[i].ed = t;       b[i].full = 1;       b[i].simply();     }     scanf( %d , &m);     for (int i = 0; i < m; i++) {       scanf( %d%d , &u, &v);       gao(n + i, u - 1, v - 1);       printf( %d n , b[n + i].query());     }   }   