//#define __USE_MINGW_ANSI_STDIO 0
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<ll> VL;
typedef vector<VL> VVL;
typedef pair<int, int> PII;

#define FOR(i, a, n) for (ll i = (ll)a; i < (ll)n; ++i)
#define REP(i, n) FOR(i, 0, n)
#define ALL(x) x.begin(), x.end()
#define IN(a, b, x) (a<=x&&x<b)
#define MP make_pair
#define PB push_back
#define MOD 1000000007
#define INF (1LL<<30)
#define LLINF (1LL<<60)
#define PI 3.14159265359
#define EPS 1e-12
//#define int ll

int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};

typedef string::const_iterator State;
class ParseError {};
int number(State&);
int expression(State&);

int len[60];
map<pair<char, int>, int> memo;
//??£?¨???¨?????????????????????
pair<char, int> declara(State &begin) {
	int n = -1;
	char c = '-';
	while(1) {
		//cout << *begin << endl;
		if(islower(*begin) || isupper(*begin)) {
			c = *begin;
			begin++;
		} else if(*begin == '[') {
			begin++;
			n = number(begin);
			begin++;
		} else {
			break;
		}
	}
	//cout << "de:" << c << " " << n << endl;
	return {c, n};
}

pair<char, int> assign(State &begin) {
	char c = '-';
	int n = -1;
	while(1) {
		//cout << "assign:" << *begin << endl;
		if(islower(*begin) || isupper(*begin)) {
			c = *begin;
			begin++;
		} else if(*begin == '[') {
			begin++;
			n = expression(begin);
			begin++;
		} else {
			break;
		}
	}

	//c[n]???????????????
	if(islower(c)) {
		if(len[c-'a'] <= n) return {'-', -1};
		return {c, n};
	} else {
		if(len[c-'A'+26] <= n) return {'-', -1};
		return {c, n};
	}
}

int expression(State &begin) {
	char c = '-';
	int n = -1;
	while(1) {
		if(isdigit(*begin)) {
			n = number(begin);
		} else if(islower(*begin) || isupper(*begin)) {
			c = *begin;
			begin++;
		} else if(*begin == '[') {
			begin++;
			n = expression(begin);
			begin++;
		} else {
			break;
		}
	}

	//c[n]???????????????
	if(islower(c)) {
		auto itr = memo.find(MP(c, n));
		if(len[c-'a'] <= n || itr == memo.end()) return -1;
		return memo[MP(c, n)];
	} else if(isupper(c)){
		auto itr = memo.find(MP(c, n));
		if(len[c-'A'+26] <= n || itr == memo.end()) return -1;
		return memo[MP(c, n)];
	} else {
		return n;
	}
}

int number(State &begin) {
	int ret = 0;
	while(isdigit(*begin)) {
		ret *= 10;
		ret += *begin - '0';
		begin++;
	}
	return ret;
}

string s[1010];
signed main(void)
{
	int cc = 0;
	while(true) {
		cin >> s[cc];
		//cout << "cc" << cc << endl;
		// s???"."???????????????????§?
		if(s[cc] == ".") {
			//????????°????????????
			if(cc == 0) break;
			memset(len, 0, sizeof(len));
			memo.erase(ALL(memo));
			int bug = 0;
			REP(i, cc+1) {
				//cout << "i:" << i << " " << s[i] << endl;
				//??£?¨??????£??\????????????
				size_t idx = s[i].find('=');
				if(idx == string::npos) {
					State begin = s[i].begin();
					pair<char, int> ans = declara(begin);
					//cout << ans.first << " " << ans.second << endl;
					if(islower(ans.first)) {
						len[ans.first-'a'] = ans.second;
					} else {
						len[ans.first-'A'+26] = ans.second;
					}
				} else {
					string left = s[i].substr(0, idx), right = s[i].substr(idx+1);
					State beginl = left.begin(), beginr = right.begin();
					pair<char, int> ansleft = assign(beginl);
					int ansright = expression(beginr);
					//cout << ansleft.first << " " << ansleft.second << " " << ansright << endl;
					if(ansleft.second < 0 || ansright < 0) {
						if(bug == 0) {bug = i+1; break;}
					} else {
						memo[MP(ansleft.first, ansleft.second)] = ansright;
					}
				}
			}
			cout << bug << endl;
			cc = 0;
			continue;
		}
		cc++;
	}

		/*int cnt = 1, ans = 0;
		REP(i, 60) len[i] = 0;
		memo.erase(ALL(memo));
		while(true) {
			//cout << "cnt" << cnt << endl;
			// s??????????????????
			State begin = s.begin();
			// ??£?¨??????£??\????????????
			int idx = -1;
			REP(i, s.size()) {
				// = ????????¨?????????
				if(s[i] == '=') {
					idx = i;
				}
			}
			// ??£?¨?
			if(idx == -1) {
				pair<char, int> ans1 = declara(begin);
				cout << ans1.first << " " << ans1.second << endl;
				//?????°??£?????????????¢?????????£?¨???????????????????
				if(islower(ans1.first)) {
					len[ans1.first-'a'] = ans1.second;
				} else {
					len[ans1.first-'A'+26] = ans1.second;
				}
			} else {
				// ??£??\
				// = ???????????§?????????????????????????????????
				string tmp2 = s.substr(0, idx), tmp3 = s.substr(idx+1);
				//cout << tmp2 << " " << tmp3 << endl;
				State begin2 = tmp2.begin(), begin3 = tmp3.begin();
				pair<char, int> ans2 = assign(begin2);
				int ans3 = expression(begin3);
				cout << ans2.first << " " << ans2.second << " " << ans3 << endl;
				if(ans2.second < 0 || ans3 < 0) {
					if(ans == 0) ans = cnt;
				} else {
					memo[MP(ans2.first, ans2.second)] = ans3;
				}
			}
			cnt++;
			cin >> s;
			if(s == ".") break;
		}
		cout << ans << "\n";
	}*/

	return 0;
}

Measured memory_bytes: 3284