#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,a[N];
void bubblesort(){
for(int i=1;i<n;i++){
for(int j=1;j<=n-i;j++){
if(a[j]>a[j+1])swap(a[j],a[j+1]);
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void selectsort(){
for(int i=1;i<=n;i++){
int maxx = 1e9,id=0;
for(int j=i;j<=n;j++){
if(a[j]<maxx)maxx=a[j],id=j;
}
swap(a[id],a[i]);
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void insertsort(){
//5 3 2 4 6 1
//2 3 4 5
//第i个数,一直和前面比较,如果前面一个数比他大,前面的数向后移动一位,否则将这个数插入到这个位置
for(int i=2;i<=n;i++){
//插入的是a[i]
int t = a[i];
int j = i-1;
while(j>=1 && t<a[j]){
a[j+1] = a[j];
j--;
}
a[j+1] = t;
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
insertsort();
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,a[N];
void bubblesort(){
for(int i=1;i<n;i++){
for(int j=1;j<=n-i;j++){
if(a[j]>a[j+1])swap(a[j],a[j+1]);
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void selectsort(){
for(int i=1;i<=n;i++){
int maxx = 1e9,id=0;
for(int j=i;j<=n;j++){
if(a[j]<maxx)maxx=a[j],id=j;
}
swap(a[id],a[i]);
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void insertsort(){
//5 3 2 4 6 1
//2 3 4 5
//第i个数,一直和前面比较,如果前面一个数比他大,前面的数向后移动一位,否则将这个数插入到这个位置
for(int i=2;i<=n;i++){
//插入的是a[i]
int t = a[i];
int j = i-1;
while(j>=1 && t<a[j]){
a[j+1] = a[j];
j--;
}
a[j+1] = t;
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void QuickSort(int l,int r){
if(l>=r)return;
int tmp = a[l],i=l,j=r;
while(i<j){
while(i<j && a[j]>=tmp)j--;
while(i<j && a[i]<=tmp)i++;
swap(a[i],a[j]);
}
swap(a[i],a[l]);
QuickSort(l,i-1);
QuickSort(i+1,r);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
QuickSort(1,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,a[N],b[N];
void bubblesort(){
for(int i=1;i<n;i++){
for(int j=1;j<=n-i;j++){
if(a[j]>a[j+1])swap(a[j],a[j+1]);
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void selectsort(){
for(int i=1;i<=n;i++){
int maxx = 1e9,id=0;
for(int j=i;j<=n;j++){
if(a[j]<maxx)maxx=a[j],id=j;
}
swap(a[id],a[i]);
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void insertsort(){
//5 3 2 4 6 1
//2 3 4 5
//第i个数,一直和前面比较,如果前面一个数比他大,前面的数向后移动一位,否则将这个数插入到这个位置
for(int i=2;i<=n;i++){
//插入的是a[i]
int t = a[i];
int j = i-1;
while(j>=1 && t<a[j]){
a[j+1] = a[j];
j--;
}
a[j+1] = t;
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void QuickSort(int l,int r){
if(l>=r)return;
int tmp = a[l],i=l,j=r;
while(i<j){
while(i<j && a[j]>=tmp)j--;
while(i<j && a[i]<=tmp)i++;
swap(a[i],a[j]);
}
swap(a[i],a[l]);
QuickSort(l,i-1);
QuickSort(i+1,r);
}
void mergesort(int l,int r){
if(l>=r)return;
int mid = (l+r)/2;
mergesort(l,mid);
mergesort(mid+1,r);
//合并左右部分
int i=l,j=mid+1,cnt=l;
while(i<=mid && j<=r){
if(a[i]<a[j]){
b[cnt] = a[i];
cnt++;
i++;
}
else{
b[cnt] = a[j];
cnt++;
j++;
}
}
while(i<=mid){
b[cnt] = a[i];cnt++;i++;
}
while(j<=r){
b[cnt] = a[j];cnt++;j++;
}
for(int i=l;i<=r;i++)a[i] = b[i];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
mergesort(1,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n,a[15],book[15];
void print(){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
void dfs(int x){
//给第x个格子放数
if(x>n){
print();
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;
int n,a[15][15],cnt;
void print(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==1){
cout<<j<<" ";
}
}
}
cout<<endl;
}
int check(int x,int y){
//判断放到第x行第y列能否成功
//上
for(int i=1;i<x;i++){
if(a[i][y]==1)return 0;
}
//左上
int i=x-1,j=y-1;
while(i>=1 && j>=1){
if(a[i][j]==1)return 0;
i--;j--;
}
//右上
i=x-1;j=y+1;
while(i>=1 && j<=n){
if(a[i][j]==1)return 0;
i--;
j++;
}
return 1;
}
void dfs(int x){
if(x>n){
cnt++;
if(cnt<=3)
print();
return;
}
for(int i=1;i<=n;i++){
if(check(x,i)==1){
a[x][i] = 1;
dfs(x+1);
a[x][i] = 0;
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<cnt<<endl;
return 0;
}