제출 #1142169

#제출 시각아이디문제언어결과실행 시간메모리
1142169MuhammetDEL13 (info1cup18_del13)C++20
30 / 100
1097 ms61716 KiB
#include "bits/stdc++.h"

using namespace std;

#define SZ(s) (int)s.size()

vector <int> v;

int n, m;

bool tr = 0;

map <vector <int>, bool> vis;

void f(vector <int> a, vector <int> ans){
	if(vis.find(a) != vis.end() or tr) return;
	if(SZ(a) == n+2){
		v = ans;
		tr = true;
		return;
	}
	vis[a] = true;
	for(int i = 1; i < SZ(a)-1; i++){
		if(a[i-1] != a[i]-1 and a[i+1] != a[i]+1){
			for(int x = a[i-1]+1; x < a[i]; x++){
				for(int y = a[i]+1; y < a[i+1]; y++){
					vector <int> a1;
					for(auto j : a){
						// cout << j << ' ';
						if(j == a[i]) a1.push_back(x);
						if(j == a[i+1]) a1.push_back(y);
						a1.push_back(j);
					}
					// cout << '\n';
					// for(auto j : a1){
					// 	cout << j << ' ';
					// }
					// cout << '\n';
					vector <int> ans1 = ans;
					ans1.push_back(a[i]);
					f(a1,ans1);
				}
			}
		}
	}
}

void solve(){
	cin >> n >> m;
	vector <int> a(m+1,0);
	for(int i = 1; i <= m; i++){
		cin >> a[i];
	}
	a.push_back(n+1);
	tr = 0;
	v.clear();
	vis.clear();
	f(a,{});
	if(!tr) cout << "-1\n";
	else {
		reverse(v.begin(), v.end());
		cout << SZ(v) << '\n';
		for(auto i : v){
			cout << i << ' ';
		}
		cout <<'\n';
	}
}

int main(){
	ios::sync_with_stdio(false); cin.tie(nullptr);

	int T;
	cin >> T;
	while(T--) solve();

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...