求赞!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=100010;
vector<string> ans;
vector<ll> p1[10],p3[10],p15[10][10],p124[10][10][10];
ll n,m,cnt,a[10][10],prm[N];
bool st[N];
ll get(ll x,ll k) {
ll num=pow(10,5-k);
return x/num%10;
}
void init() {
for(ll i=2; i<N; i++) {
if(!st[i]) prm[++cnt]=i;
for(ll j=1; j<=cnt && i*prm[j]<N; j++) {
st[i*prm[j]]=1;
if(i%prm[j]==0) break;
}
}
for(ll i=1; i<=cnt; i++) {
ll p=prm[i];
if(p<10000 || p>99999) continue;
ll n1=get(p,1),n2=get(p,2),n3=get(p,3),n4=get(p,4),n5=get(p,5);
if(n1+n2+n3+n4+n5!=n) continue;
p1[n1].push_back(p);
p3[n3].push_back(p);
if(n2 && n3 && n4) p15[n1][n5].push_back(p);
p124[n1][n2][n4].push_back(p);
}
}
bool ok(ll ax,ll ay,ll bx,ll by) {
ll num=0;
for(ll i=ax; i<=bx; i++)
for(ll j=ay; j<=by; j++) {
if(a[i][j]<0 || a[i][j]>9) return 0;
num=num*10+a[i][j];
}
return !st[num];
}
void dfs(ll stp) {
if(stp>7) {
a[3][5]=n-a[3][1]-a[3][2]-a[3][3]-a[3][4];
a[4][5]=n-a[1][5]-a[2][5]-a[3][5]-a[5][5];
a[4][3]=n-a[4][1]-a[4][2]-a[4][4]-a[4][5];
a[5][3]=n-a[5][1]-a[5][2]-a[5][4]-a[5][5];
if(ok(1,3,5,3) && ok(1,5,5,5) && ok(3,1,3,5) && ok(4,1,4,5) && ok(5,1,5,5)) {
string s="";
for(ll i=1; i<=5; i++)
for(ll j=1; j<=5; j++) s+=a[i][j]+'0';
ans.push_back(s);
}
return;
}
if(stp==1)
for(ll x:p1[a[1][1]]) {
a[2][2]=get(x,2),a[3][3]=get(x,3),a[4][4]=get(x,4),a[5][5]=get(x,5);
dfs(stp+1);
}
else if(stp==2)
for(ll x:p3[a[3][3]]) {
a[5][1]=get(x,1),a[4][2]=get(x,2),a[2][4]=get(x,4),a[1][5]=get(x,5);
dfs(stp+1);
}
else if(stp==3)
for(ll x:p15[a[1][1]][a[1][5]]) {
a[1][2]=get(x,2),a[1][3]=get(x,3),a[1][4]=get(x,4);
dfs(stp+1);
}
else if(stp==4)
for(ll x:p124[a[1][2]][a[2][2]][a[4][2]]) {
a[3][2]=get(x,3),a[5][2]=get(x,5);
dfs(stp+1);
}
else if(stp==5)
for(ll x:p124[a[1][4]][a[2][4]][a[4][4]]) {
a[3][4]=get(x,3),a[5][4]=get(x,5);
dfs(stp+1);
}
else if(stp==6)
for(ll x:p15[a[1][1]][a[5][1]]) {
a[2][1]=get(x,2),a[3][1]=get(x,3),a[4][1]=get(x,4);
dfs(stp+1);
}
else
for(ll x:p124[a[2][1]][a[2][2]][a[2][4]]) {
a[2][3]=get(x,3),a[2][5]=get(x,5);
dfs(stp+1);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
init();
a[1][1]=m;
dfs(1);
if(!ans.empty()) {
sort(ans.begin(),ans.end());
for(ll i=0; i<ans.size(); i++) {
for(ll j=0; j<25; j++) {
cout<<ans[i][j];
if(j%5==4) cout<<"\n";
}
if(i<ans.size()-1) cout<<"\n";
}
} else cout<<"NONE";
return 0;
}