Problem:
 Score : 200 points    Problem Statement You are given an image A composed of N rows and N columns of pixels, and a template image B composed of M rows and M columns of pixels. A pixel is the smallest element of an image, and in this problem it is a square of size 1×1 . Also, the given images are binary images, and the color of each pixel is either white or black.  In the input, every pixel is represented by a character: . corresponds to a white pixel, and # corresponds to a black pixel. The image A is given as N strings A_1,...,A_N . The j -th character in the string A_i corresponds to the pixel at the i -th row and j -th column of the image A  (1≦i,j≦N) . Similarly, the template image B is given as M strings B_1,...,B_M . The j -th character in the string B_i corresponds to the pixel at the i -th row and j -th column of the template image B  (1≦i,j≦M) .  Determine whether the template image B is contained in the image A when only parallel shifts can be applied to the images.      Constraints  1≦M≦N≦50   A_i is a string of length N consisting of # and . .  B_i is a string of length M consisting of # and . .         Input The input is given from Standard Input in the following format:  N  M  A_1  A_2  :  A_N  B_1  B_2  :  B_M       Output Print Yes if the template image B is contained in the image A . Print No otherwise.        Sample Input 1 3 2
#.#
.#.
#.#
#.
.#      Sample Output 1 Yes  The template image B is identical to the upper-left 2 × 2 subimage and the lower-right 2 × 2 subimage of A . Thus, the output should be Yes .       Sample Input 2 4 1
....
....
....
....
#      Sample Output 2 No  The template image B , composed of a black pixel, is not contained in the image A composed of white pixels.

Solution (Python):

import sys,copy,math,heapq,itertools as it,fractions,re,bisect,collections as coll

N, M = map(int,raw_input().split())
A = [raw_input() for i in xrange(N)]
B = [raw_input() for i in xrange(M)]

for i in xrange(N - M + 1):
    for j in xrange(N - M + 1):
        same = True
        for y in xrange(M):
            for x in xrange(M):
                if A[i + y][j + x] != B[y][x]: same = False
            if not same: break
        if same:
            print "Yes"
            exit()
print "No"

Solution (Python):


N, M = [int(_) for _ in input().split()]
A = [list(input()) for i in range(N)]
B = [list(input()) for i in range(M)]

for i in range(N-M+1):
    for j in range(N-M+1):
        flag = True
        for k in range(M):
            for l in range(M):
                if A[i+k][j+l] != B[k][l]:
                    flag = False
                    break
            if not flag:
                break
        if flag:
            print('Yes')
            exit()

print('No')

Solution (Python):
n,m = map(int, input().split())
a = [input() for i in range(n)]
b = [input() for i in range(m)]

for i in range(n-m+1):
    for j in range(n-m+1):
        flag = True
        for k in range(m):
            for l in range(m):
                if a[i+k][j+l] != b[k][l]:
                    flag = False
                    break
            if not flag:
                break
        if flag:
            print("Yes")
            exit()
print('No')

Solution (Python):
from collections import defaultdict


def main():
    N, M = map(int, input().split())
    A, B = [], []
    for _ in range(N):
        a = input()
        A.append(a)
    for _ in range(M):
        b = input()
        B.append(b)

    for y in range(N):
        for x in range(N):

            ok = True
            for ys in range(M):
                for xs in range(M):
                    if y + ys < N and x + xs < N:
                        if A[y + ys][x + xs] == B[ys][xs]:
                            pass
                        else:
                            ok = False
                    else:
                        ok = False

            if ok:
                print("Yes")
                return
    print("No")


if __name__ == '__main__':
    main()

Solution (Python):
n, m = map(int, raw_input().split())

A = [raw_input() for _ in xrange(n)]
B = [raw_input() for _ in xrange(m)]

for r in xrange(n-m+1):
    for c in xrange(n-m+1):
        f = True
        for x in xrange(m):
            for y in xrange(m):
                if A[r+x][c+y] != B[x][y]:
                    f = False
                    break
            if not f:
                break
        if f:
            print "Yes"
            exit()
print "No"

Solution (Python):
N,M = map(int, raw_input().split())
A = [raw_input() for _ in range(N)]
B = [raw_input() for _ in range(M)]
for y in range(N-M+1):
  for x in range(N-M+1):
    ok = True
    for yy in range(M):
      for xx in range(M):
        if A[y+yy][x+xx] != B[yy][xx]:
          ok = False
    if ok:
      print "Yes"
      exit(0)
print "No"

Solution (Python):
N, M = map(int, input().split())

A = []
for _ in range(N):
  A.append(input().strip())
B = []
for _ in range(M):
  B.append(input().strip())

def f():
  for i in range(N - M + 1):
    for j in range(N - M + 1):
      same = True
      for ii in range(M):
        for jj in range(M):
          if B[ii][jj] != A[i + ii][j + jj]:
            same = False
      if same:
        print("Yes")
        return 
  print("No")

f()

Solution (Python):
import sys

stdin = sys.stdin
def na(): return map(int, stdin.readline().split())
def ns(): return stdin.readline().strip()

n,m = na()
ba = []
for i in range(n):
    ba.append(ns())
bb = []
for i in range(m):
    bb.append(ns())

for i in range(n-m+1):
    for j in range(n-m+1):
        ok = True
        for k in range(m):
            if ba[i+k][j:j+m] != bb[k]:
                ok = False
                break
        if ok:
            print("Yes")
            sys.exit(0)
print("No")