#include <stdio.h>#include <string.h>#include <iostream>using namespace std; char pre[110][110];char num[30];int p;void getpoint(int &x, int &y){ for( int i = 0 ; i < 100 ; i++ ) for ( int j = 0 ; j < 100 ; j++ ) if ( '?' == pre[i][j] ) { x= i; y= j; return; }}int find(int x, int y, int div, int flag){ switch(pre[x][y]) { case 'o': return !find(x, y-1, -1, 2); case '-': return find(x, y+div, div, flag); case '|': return find(x+div, y, div, flag); case ')': return find(x-1, y-3, -1, 2) & find(x+1, y-3, -1, 2); case '>': return find(x-1, y-3, -1, 2) | find(x+1, y-3, -1, 2); case '+': if ('-' == pre[x][y-1] && flag != 4 ) return find(x, y-1, -1, 2); else if ( '-' == pre[x][y+1] && flag != 2 ) return find(x, y+1, 1, 4); else if ( '|' == pre[x-1][y] && flag != 1 ) return find(x-1, y, -1, 3); else return find(x+1, y, 1, 1); default: return num[ pre[x][y]-'A' ]-'0'; }}int main(){ memset(pre, 0, sizeof(pre)); while ( EOF != scanf("%[^n]%*c", pre[0]) ) { int i, x, y, ans; for ( i = 1; '*' != pre[i-1][0]; i++ ) gets(pre[i]); getpoint(x, y); while(gets(num), '*' != num[0]) { if ('-' == pre[x][y-1]) ans= find(x, y-1, -1, 2); else if ( '-' == pre[x][y+1]) ans= find(x, y+1, 1, 4); else if ( '|' == pre[x-1][y]) ans= find(x-1, y, -1, 3); else ans= find(x+1, y, 1, 1); printf("%dn", ans); } putchar(10); memset(pre, 0, sizeof(pre)); } return 0;}