E= enumerate
def f( p, s) :
b= [ *map ( list , p.split ( '\n ' ) ) ] ; x, y= [ ( x, y) for x, a in E( b) for y, c in E( a) if '?' == c] [ 0 ] ; v= ( 0 , 1 ) ; z= ( -1 , 0 ) ; u= ( 1 , 0 ) ; w= ( 0 , -1 ) ; q, C, s, D= [ ( x, y, 0 , 1 , a, [ ( x, y) ] , i) for i, a in E( s) ] , [ ] , [ ] , { v:[ z, u] , w:[ u, z] , z:[ w, v] , u:[ v, w] }
while q:
x, y, X, Y, B, p, I= q.pop ( 0 )
if ~ -( ( p, I) in s) *( len ( b) > ( x:= x+X) > -1 < ( y:= y+Y) < len ( b[ 0 ] ) ) :
s+= ( p, I) ,
if ( O:= b[ x] [ y] ) in ( L:= { '>' :v, '<' :w, 'v' :u, '^' :z} ) :q+= ( x, y, *L[ O] , B, p+[ ( x, y) ] , I) ,
if '+' == O:q+= ( x, y, *D[ ( X, Y) ] [ B] , B, p+[ ( x, y) ] , I) ,
if O in '\\ /' :q+= ( x, y, Y*( X< 1 ) , [ 1 , -1 ] [ X== 1 ] *( X> 0 ) , B, p+[ ( x, y) ] , I) ,; b[ x] [ y] = ' '
if '~' == O:
for t in [ 0 , 1 ] :q+= ( x, y, *D[ ( X, Y) ] [ t] , [ 1 > B, B] [ t] , [ ( x, y) ] , I) ,
if '!' == O:C+= int ( B) ,
if '@' == O:q= [ ]
if ' ' == O:q+= ( x, y, X, Y, B, p+[ ( x, y) ] , I) ,
return C
print ( f( """?!""" , [ 1 , 1 , 0 , 0 , 1 , 1 , 0 ] ) )
print ( f( """v ~
!+~
?^<""" , [ 1 , 1 , 0 , 0 , 1 , 1 , 0 ] ) )
print ( f( """? v
~ /
>! <""" , [ 1 , 1 , 0 , 0 , 1 , 1 , 0 ] ) )
print ( f( """? v
~ /
>! <""" , [ 0 , 1 , 1 ] ) )
print ( f( """?~
@+!""" , [ 1 ] ) )
print ( f( """?~
@+!""" , [ 0 , 1 , 1 ] ) )
print ( f( """?~
@+!""" , [ 0 , 0 , 1 , 1 ] ) )
print ( f( """?~
@+!""" , [ 0 , 0 , 0 , 1 , 1 ] ) )
RT1lbnVtZXJhdGUKZGVmIGYocCxzKToKIGI9WyptYXAobGlzdCxwLnNwbGl0KCdcbicpKV07eCx5PVsoeCx5KWZvciB4LGEgaW4gRShiKWZvciB5LGMgaW4gRShhKWlmJz8nPT1jXVswXTt2PSgwLDEpO3o9KC0xLDApO3U9KDEsMCk7dz0oMCwtMSk7cSxDLHMsRD1bKHgseSwwLDEsYSxbKHgseSldLGkpZm9yIGksYSBpbiBFKHMpXSxbXSxbXSx7djpbeix1XSx3Olt1LHpdLHo6W3csdl0sdTpbdix3XX0KIHdoaWxlIHE6CiAgeCx5LFgsWSxCLHAsST1xLnBvcCgwKQogIGlmfi0oKHAsSSlpbiBzKSoobGVuKGIpPih4Oj14K1gpPi0xPCh5Oj15K1kpPGxlbihiWzBdKSk6CiAgIHMrPShwLEkpLAogICBpZihPOj1iW3hdW3ldKWluKEw6PXsnPic6diwnPCc6dywndic6dSwnXic6en0pOnErPSh4LHksKkxbT10sQixwK1soeCx5KV0sSSksCiAgIGlmJysnPT1POnErPSh4LHksKkRbKFgsWSldW0JdLEIscCtbKHgseSldLEkpLAogICBpZiBPIGluJ1xcLyc6cSs9KHgseSxZKihYPDEpLFsxLC0xXVtYPT0xXSooWD4wKSxCLHArWyh4LHkpXSxJKSw7Ylt4XVt5XT0nICcKICAgaWYnfic9PU86CiAgICBmb3IgdCBpblswLDFdOnErPSh4LHksKkRbKFgsWSldW3RdLFsxPkIsQl1bdF0sWyh4LHkpXSxJKSwKICAgaWYnISc9PU86Qys9aW50KEIpLAogICBpZidAJz09TzpxPVtdCiAgIGlmJyAnPT1POnErPSh4LHksWCxZLEIscCtbKHgseSldLEkpLAogcmV0dXJuIEMKIApwcmludChmKCIiIj8hIiIiLFsxLDEsMCwwLDEsMSwwXSkpCnByaW50KGYoIiIidiB+CiErfgo/XjwiIiIsWzEsMSwwLDAsMSwxLDBdKSkKcHJpbnQoZigiIiI/ICB2CiB+IC8KPiEgPCIiIixbMSwxLDAsMCwxLDEsMF0pKQpwcmludChmKCIiIj8gIHYKIH4gLwo+ISA8IiIiLFswLDEsMV0pKQpwcmludChmKCIiIj9+IApAKyEiIiIsWzFdKSkKcHJpbnQoZigiIiI/fiAKQCshIiIiLFswLDEsMV0pKQpwcmludChmKCIiIj9+IApAKyEiIiIsWzAsMCwxLDFdKSkKcHJpbnQoZigiIiI/fiAKQCshIiIiLFswLDAsMCwxLDFdKSk=