#include <bits/stdc++.h>

using namespace std;

#define LOG(...) fprintf(stderr, __VA_ARGS__)
//#define LOG(...)
#define FOR(i, a, b) for (int i = (int)(a); i < (int)(b); ++i)
#define RFOR(i, a, b) for (int i = (int)(b - 1); i >= (int)(a); --i)
#define REP(i, n) for (int i = 0; i < (int)(n); ++i)
#define RREP(i, n) for (int i = (int)(n - 1); i >= 0; --i)
#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define EXIST(s, e) ((s).find(e) != (s).end())
#define SORT(c) sort(ALL(c))
#define RSORT(c) sort(RALL(c))
#define SZ(a) ((int)(a).size())
#define BIT(x, i) (((x) >> (i)) & 1)
#define SQ(x) ((x) * (x))

typedef long long ll;
typedef unsigned long long ull;
typedef vector<bool> vb;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vb> vvb;
typedef vector<vi> vvi;
typedef vector<vll> vvll;
typedef vector<char> vc;
typedef vector<vc> vvc;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

class ProgramError {};

struct ArrayType {
    int size;
    map<int, int> value;
};

map<char, ArrayType> Array;

void declare_array(char name, int size) {
    ArrayType ary;
    ary.size = size;
    Array[name] = ary;
}

void set_array(char name, int idx, int value) {
    if (EXIST(Array, name)) {
        if (idx < Array[name].size) {
            Array[name].value[idx] = value;
            return;
        }
    }
    throw ProgramError();
}

int get_array(char name, int idx) {
    if (EXIST(Array, name)) {
        if (idx < Array[name].size) {
            if (EXIST(Array[name].value, idx)) {
                return Array[name].value[idx];
            }
        }
    }
    throw ProgramError();
}

int number(string& s, int& idx) {
    int n = 0;
    while (isdigit(s[idx])) {
        n *= 10;
        n += s[idx] - '0';
        idx++;
    }
    return n;
}

int expression(string& s, int& idx) {
    if (isdigit(s[idx])) {
        return number(s, idx);
    } else {
        char name = s[idx];
        idx++;
        idx++; // [
        int n = expression(s, idx);
        idx++; // ]
        return get_array(name, n);
    }
}

void assignment(string& s, int& idx) {
    char name = s[idx];
    idx++;
    idx++; // [
    int n = expression(s, idx);
    idx++; // ]
    idx++; // =
    int value = expression(s, idx);
    set_array(name, n, value);
}

void declaration(string& s, int& idx) {
    char name = s[idx];
    idx++;
    idx++; // [
    int n = number(s, idx);
    idx++; // ]
    declare_array(name, n);
}

void program(string& s, int& idx) {
    if (s.find('=') != string::npos) {
        assignment(s, idx);
    } else {
        declaration(s, idx);
    }
}

int main() {
    string s;
    while (cin >> s, s != ".") {
        Array.clear();
        int line = 1;
        do {
            try {
                int idx = 0;
                program(s, idx);
            } catch (ProgramError e) {
                while (cin >> s, s != ".");
                goto OUT;
            }
            line++;
        } while (cin >> s, s != ".");
        line = 0;
    OUT:
        cout << line << endl;
    }
}