#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define rep(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i<=koniec; ++i) #define repr(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i>=koniec; --i) #define pb push_back #define pob pop_back #define eb emplace_back #define pf push_front #define pof pop_front #define st first #define nd second #define bend(X) X.begin(),X.end() #define sz(X) (int(X.size())) #define graph vector<node> #define print cout<< #ifdef LOCAL #define nl endl #define dbg(x) cout << #x << " = " << x << ' '; #define say(x) cout << x #else #define nl '\n' #define dbg(x) #define say(x) #endif using namespace std; using namespace __gnu_pbds; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int,int>; using pll = pair<ll,ll>; using pli = pair<ll,int>; using vb = vector<bool>; using vc = vector<char>; using vi = vector<int>; using vl = vector<ll>; using vpi = vector<pii>; using vpl = vector<pll>; using vvi = vector<vi>; using vvl = vector<vl>; using vvb = vector<vb>; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; template<typename T1, typename T2> istream& operator>>(istream& is, pair<T1,T2>& x){ is >> x.st >> x.nd; return is; } template<typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1,T2>& x){ os << '(' << x.st << ',' << x.nd << ')'; return os; } template<typename T> istream& operator>>(istream& is, vector<T>& x){ for(T& i : x)is >> i; return is; } template<typename T> ostream& operator<<(ostream& os, vector<T> x){ for(T& i : x)os << i << ' '; return os; } template<typename T1, typename T2> pair<T1,T2> operator+(const pair<T1,T2>& A, const pair<T1,T2>& B){ return {A.st + B.st, A.nd + B.nd}; } template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A, const pair<T1,T2>& B){ return {A.st - B.st, A.nd - B.nd}; } template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A){ return {-A.st, -A.nd}; } template<typename T1, typename T2> void mine(T1& A, const T2& B){if(B < A) A = B;} template<typename T1, typename T2> void maxe(T1& A, const T2& B){if(B > A) A = B;} const int INF = (int)2e9; const ll INFll = (ll)9e18; const int MOD = (int)1e9+7; int R(int pocz, int kon){ return (rand()%(kon-pocz+1) + pocz); } ll RR(ll pocz, ll kon){ return ((ll((rand()) << 30) + rand())/(kon-pocz+1) + pocz); } void fastDataTransfer(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int n, m, a, b, c, d, q, k; vi V[4]; string A,B; void read(){ cin>>n>>A>>B; } void solve(){ rep(i,0,3) V[i].resize(30); for(int i=0;i<n;i+=2){ V[0][A[i]-'a']++; V[1][B[i]-'a']++; } for(int i=1;i<n;i+=2){ V[2][A[i]-'a']++; V[3][B[i]-'a']++; } if(V[0]==V[1] && V[2]==V[3]) print "TAK" << nl; else print "NIE" << nl; } int main(){ fastDataTransfer(); int testCases = 1; // cin >> testCases; rep(testNumber, 1, testCases){ read(); solve(); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define rep(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i<=koniec; ++i) #define repr(i,poczatek,koniec) for(__typeof(koniec) i = poczatek; i>=koniec; --i) #define pb push_back #define pob pop_back #define eb emplace_back #define pf push_front #define pof pop_front #define st first #define nd second #define bend(X) X.begin(),X.end() #define sz(X) (int(X.size())) #define graph vector<node> #define print cout<< #ifdef LOCAL #define nl endl #define dbg(x) cout << #x << " = " << x << ' '; #define say(x) cout << x #else #define nl '\n' #define dbg(x) #define say(x) #endif using namespace std; using namespace __gnu_pbds; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int,int>; using pll = pair<ll,ll>; using pli = pair<ll,int>; using vb = vector<bool>; using vc = vector<char>; using vi = vector<int>; using vl = vector<ll>; using vpi = vector<pii>; using vpl = vector<pll>; using vvi = vector<vi>; using vvl = vector<vl>; using vvb = vector<vb>; template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; template<typename T1, typename T2> istream& operator>>(istream& is, pair<T1,T2>& x){ is >> x.st >> x.nd; return is; } template<typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1,T2>& x){ os << '(' << x.st << ',' << x.nd << ')'; return os; } template<typename T> istream& operator>>(istream& is, vector<T>& x){ for(T& i : x)is >> i; return is; } template<typename T> ostream& operator<<(ostream& os, vector<T> x){ for(T& i : x)os << i << ' '; return os; } template<typename T1, typename T2> pair<T1,T2> operator+(const pair<T1,T2>& A, const pair<T1,T2>& B){ return {A.st + B.st, A.nd + B.nd}; } template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A, const pair<T1,T2>& B){ return {A.st - B.st, A.nd - B.nd}; } template<typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A){ return {-A.st, -A.nd}; } template<typename T1, typename T2> void mine(T1& A, const T2& B){if(B < A) A = B;} template<typename T1, typename T2> void maxe(T1& A, const T2& B){if(B > A) A = B;} const int INF = (int)2e9; const ll INFll = (ll)9e18; const int MOD = (int)1e9+7; int R(int pocz, int kon){ return (rand()%(kon-pocz+1) + pocz); } ll RR(ll pocz, ll kon){ return ((ll((rand()) << 30) + rand())/(kon-pocz+1) + pocz); } void fastDataTransfer(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int n, m, a, b, c, d, q, k; vi V[4]; string A,B; void read(){ cin>>n>>A>>B; } void solve(){ rep(i,0,3) V[i].resize(30); for(int i=0;i<n;i+=2){ V[0][A[i]-'a']++; V[1][B[i]-'a']++; } for(int i=1;i<n;i+=2){ V[2][A[i]-'a']++; V[3][B[i]-'a']++; } if(V[0]==V[1] && V[2]==V[3]) print "TAK" << nl; else print "NIE" << nl; } int main(){ fastDataTransfer(); int testCases = 1; // cin >> testCases; rep(testNumber, 1, testCases){ read(); solve(); } } |