Modified Boggle Checker, with Modified Boggle-able Code Background

Boggle is a board game where the players have to find English words on a 4-by-4 board of random alphabets. Words can be constructed by selecting sequentially adjacent cells on the board. ("adjacent" means horizontally, vertically or diagonally adjacent.) Also, same cell can't be used more than once in a word.

The following is an example board:

I L A W
B N G E
I U A O
A S R L


On this board, BINGO, ORANGE and WEARS are valid words, but SURGE and RUSSIA are not:


SURGE : There's no adjacent pair on the board having RG.
RUSSIA : S cannot be used twice.


Modified Boggle is a modified version of Boggle, with the following rules:


The board size is n-by-n, where n can be any positive integer.
Each cell can contain any one byte between 0 and 255 inclusive.
A cell can be used more than once, but not twice in a row.


Using the example board above, in addition to BINGO, ORANGE and WEARS, LANGUAGE becomes a valid string (since G is used twice, but not twice in a row) but RUSSIA is still not (due to SS pair).

Here is another example using a code fragment. The string from itertools import*\n can be found on the following board, but not from itertoosl import* or from itertools import *:

f   i   ' ' s
r   t   m   l
e   o   o   p
\n  *   t   r


Note that you need two o's in order to match the oo sequence.

Challenge

Write a function or program that, given a Modified Boggle board B (of any size) and a string s, determines if s can be found on B.

Restrictions

Your code itself should also fit on a Modified Boggle board b. That is, you must show the board b in your submission along with your code, so that your function/program outputs true if it is given b and your code as input.

Scoring

The score of your submission is the side length of the smallest board b where you can fit your code. Ties are broken by the usual code-golf rules, i.e. the length of your code in bytes. The submission with the lowest score (for both criteria) wins.

For example, from itertools import*\n has the score of 4 (using the board above) and code length of 23 bytes.

Input and Output

For input, you can take any convenient method for both B and s. This includes list of chars and list of charcodes, 2D or flattened or whatever makes sense. Also, you can optionally take the board size as a part of the input.

For output, you can choose one of the following:


Truthy and falsy values following your language's convention, or
One predefined value for true and false respectively.


Please specify your input/output method in your submission.
Python 2, score 3, 20972 bytes

exec'cecxc%c'%(1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1)+…


Full code is the output of: Try it online!

Fits on the Boggle board:

e x (
c % 1
' + )


Decodes and executes this program:

cecxc=any
c,cec=input()
cxec=len(c)
cexec=lambda    cxc,cexc,c,cec:cexc&lt;=''or   cxc[cec][c]==cexc[0]&gt;0&lt;cecxc(cexec(cxc,cexc[1:],cxcxc,cxcec)for cxcxc   in(c-(c&gt;0),c,c+(+1+c&lt;cxec))for  cxcec   in(cec-(cec&gt;0),cec,cec+(+1+cec&lt;cxec))if(cxcxc,cxcec)!=(c,cec))
cxc=range(cxec)
print   cecxc(cexec(c,cec,cexc,cxec)for cexc    in  cxc for cxec    in  cxc)


Which takes input like: ['ILAW','BNGE','IUAO','ASRL'], 'LANGUAGE'