状态转移方程: dp[i][j] = dp[i - 1][j] || dp[i][j] = dp[i][j - 1];
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int dp[1100][1100];
int a[1100];
int b[1100];
int c[2200];
int main()
{
int n, m;
while(cin >> n >> m && (n != 0 || m != 0))
{
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= n; i++)
{
cin >> a[i];
}
for(int i = 1; i <= m; i++)
{
cin >> b[i];
}
for(int i = 1; i <= n + m; i++)
{
cin >> c[i];
}
dp[0][0] = 1;
for(int i = 0; i <= n; i++)
{
for(int j = 0; j <= m; j++)
{
if(i > 0 && a[i] == c[i + j] && dp[i - 1][j])dp[i][j] = 1;
if(j > 0 && b[j] == c[i + j] && dp[i][j - 1])dp[i][j] = 1;
}
}
if(dp[n][m])cout << "possible" << endl;
else cout << "not possible" << endl;
}
return 0;
}