#include <bits/stdc++.h>
using namespace std;
const int N = 10;
int n,a[N],book[N];
void dfs(int x){
//现在想放第x个数
if(x>n){
for(int i=1;i<=n;i++){
printf("%5d",a[i]);
}
printf("\n");
return;
}
for(int i=1;i<=n;i++){
if(book[i]==0){
a[x] = i;
book[i] = 1;
dfs(x+1);
book[i] = 0;
}
}
}
int main(){
cin>>n;
dfs(1);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int n,a[N],book[N],k;
void dfs(int x,int id){
if(x>k){
for(int i=1;i<=k;i++){
cout<<setw(3)<<a[i];
}
cout<<endl;
return;
}
for(int i=id+1;i<=n;i++){
if(book[i]==0){
a[x] = i;
book[i] = 1;
dfs(x+1,i);
book[i] = 0;
}
}
}
int main(){
cin>>n>>k;
dfs(1,0);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 25;
int n,k,a[N],step[N];
int book[N],res;
int isprime(int x){
if(x==0 || x==1)return 0;
for(int i=2;i*i<=x;i++){
if(x%i==0)return 0;
}
return 1;
}
void dfs(int x,int id){
if(x>k){
int sum = 0;
for(int i=1;i<=k;i++){
sum+=step[i];
}
if(isprime(sum))res++;
return;
}
for(int i=id+1;i<=n;i++){
if(book[i]==0){
step[x] = a[i];
book[i] = 1;
dfs(x+1,i);
book[i] = 0;
}
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
dfs(1,0);
cout<<res<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n,a[10];
void dfs(int x,int sum,int id){
if(sum==n){
for(int i=1;i<x;i++){
if(i==1)cout<<a[i];
else cout<<"+"<<a[i];
}
cout<<endl;
return;
}
//if(x>n)return;
for(int i=id;i<n;i++){
if(sum+i<=n){
a[x] = i;
dfs(x+1,sum+i,i);
}
}
}
int main(){
cin>>n;
dfs(1,0,1);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int n,m,book[N][N],cnt;
char mat[N][N];
int nxt[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
if(mat[nx][ny]!='0' && book[nx][ny]==0){
book[nx][ny] = 1;
dfs(nx,ny);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mat[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mat[i][j]!='0' && book[i][j]==0){
cnt++;
book[i][j] = 1;
dfs(i,j);
}
}
}
cout<<cnt<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N = 1505;
int n,m,book[N][N],cnt[100005],tot;//cnt[i]星星数量为i的星座的个数
char mat[N][N];
int nxt[8][2]={0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};
void dfs(int x,int y){
for(int i=0;i<8;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
if(mat[nx][ny]=='*' && book[nx][ny]==0){
book[nx][ny] = 1;
tot++;
dfs(nx,ny);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mat[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mat[i][j]=='*' && book[i][j]==0){
book[i][j] = 1;
tot = 1;
dfs(i,j);
cnt[tot]++;
}
}
}
int res1=0,res2=0;
for(int i=1;i<=100000;i++){
if(cnt[i]>0){
res1++;
res2 = max(res2,i*cnt[i]);
}
}
cout<<res1<<" "<<res2<<endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int T,n,m;
int mat[10][10];
int book[10][10];
int nxt[8][2]={0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1},res;
void dfs(int x,int y,int sum){
res = max(res,sum);
if(x>n)return;
if(y>m){
dfs(x+1,1,sum);
return;
}
//1.取
if(book[x][y]==0){
for(int i=0;i<8;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
book[nx][ny]++;
}
}
dfs(x,y+1,sum+mat[x][y]);
for(int i=0;i<8;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
book[nx][ny]--;
}
}
}
//不取
dfs(x,y+1,sum);
}
int main(){
cin>>T;
while(T--){
res = 0;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
book[i][j] = 0;
cin>>mat[i][j];
}
}
dfs(1,1,0);
cout<<res<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n,m;
char mat[N][N];
int nxt[4][2]={0,1,0,-1,1,0,-1,0};
int book[N][N],cnt;
int ans[N][N];//记录i,j所在的连通块的大小
int step[N*N][2];
void dfs(int x,int y){
cnt++;
step[cnt][0] = x;
step[cnt][1] = y;
book[x][y] = 1;
for(int i=0;i<4;i++){
int nx = x+nxt[i][0];
int ny = y+nxt[i][1];
if(nx>=1 && nx<=n && ny>=1 && ny<=n){
if(book[nx][ny]==0 && mat[nx][ny]!=mat[x][y]){
dfs(nx,ny);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>mat[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(book[i][j]==0){
cnt = 0;
dfs(i,j);
//cout<<i<<" "<<j<<" "<<cnt<<endl;
for(int k=1;k<=cnt;k++){
ans[step[k][0]][step[k][1]] = cnt;
//ans[x][y] = cnt
}
}
}
}
while(m--){
int x,y;
cin>>x>>y;
cout<<ans[x][y]<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N =15;
int mat[N][N],n,cnt;
int check(int x,int y){
//判断xy放旗子是否合法
//1.判断上面
for(int i=1;i<x;i++){
if(mat[i][y]==1)return 0;
}
//2.判断左上角
int i=x-1,j=y-1;
while(i>=1 && j>=1){
if(mat[i][j]==1)return 0;
i--;j--;
}
//3.判断右上角
i=x-1,j=y+1;
while(i>=1 && j<=n){
if(mat[i][j])return 0;
i--;j++;
}
return 1;
}
void dfs(int x){
if(x>n){
cnt++;
if(cnt<=3){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(mat[i][j]){
cout<<j<<" ";
}
}
}
cout<<endl;
}
return;
}
for(int i=1;i<=n;i++){
if(check(x,i)==1){
mat[x][i] = 1;
dfs(x+1);
mat[x][i] = 0;
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<cnt<<endl;
return 0;
}