#include using namespace std; #define ll long long string s; int dist[26][26]; int best_cost = 2000000000; string best_result = "abcdefghijklmnopqrstuvwxyz"; int best_l = 1; int best_r = 1; string current_result = best_result; int current_l = 1; int current_r = 1; int current_cost = best_cost; int pos_row[26] = {85,123,161,199,237,275,313,351,389,427,95,133,171,209,247,285,324,362,400,122,160,198,236,275,313,351}; int pos_col[26] = {140,140,140,140,140,140,140,140,140,140,179,179,179,179,179,179,179,179,179,219,219,219,219,219,219,219}; int mapping[26]; inline int cost(int l, int r){ int curr_cost = 0; for(int i=0; i> n; cin >> s; char secnd_different = '-'; for(int i=1; i pos_row[second]){ new_l = second; new_r = first; } else { new_l = first; new_r = second; } int new_cost = cost(new_l, new_r); if(new_cost < best_cost){ best_result = current_result; best_r = new_r; best_l = new_l; best_cost = new_cost; current_cost = new_cost; // cout << best_cost << endl; } else if(new_cost <= current_cost){ current_cost = new_cost; } else { double rand_d =((double)rand()/(double)RAND_MAX); double deltaDistance = new_cost - current_cost; double val = exp(-deltaDistance / temperature); //if(val > 0.2) // cout << "DELTA: " << deltaDistance << " PROB: " << val << endl; if(val < rand_d){ // cout << "DO SWAPPING " << val << " " << rand_d << endl; tmp = current_result[a]; current_result[a] = current_result[b]; current_result[b] = tmp; mapping[ current_result[a]-'a' ] = a; mapping[ current_result[b]-'a' ] = b; } else { skipped++; //cout << "SKIP SWAPPING " << val << " " << rand_d << endl; //cout << new_cost << " " << current_cost << endl; current_cost = new_cost; } } // if(temperature > 20) temperature *= coolingRate; temperature = max((double)20, temperature); } //cout << "ITER: " << iter << endl; //cout << "SKIPPED " << skipped << endl; //cout << "TEMP: " << temperature << endl; //cout << best_cost << endl; cout << best_result << endl; if(pos_row[best_l] == pos_row[best_r]){ if(best_r == 25 || best_r == 18 || best_r == 9){ best_l--; } else { best_r++; } } cout << best_l+1 << " " << best_r+1 << endl; return 0; }