malteklaes/cpp-code-code_search_net-style huggingface dataset:
#include <bits/stdc++.h>   using namespace std;   const int N = 200001;   long long int sz[N], dist[N], every[N];   vector<int> adj[N];   int n, k;   void dfs(int start, int p = -1) {     for (auto child : adj[start]) {       if (child != p) {         dfs(child, start);         sz[start] += sz[child];         dist[start] += dist[child] + sz[child];       }     }   }   void dfs1(int start, int p = -1) {     for (auto child : adj[start]) {       if (child != p) {         every[child] = every[start] + (2 * k - 2 * sz[child]);         dfs1(child, start);       }     }   }   int main() {     scanf( %d%d , &n, &k);     for (int i = 0; i < 2 * k; i++) {       int x;       scanf( %d , &x);       sz[x]++;     }     for (int i = 0; i < n - 1; i++) {       int u, v;       scanf( %d%d , &u, &v);       adj[u].push_back(v);       adj[v].push_back(u);     }     dfs(1);     every[1] = dist[1];     dfs1(1);     long long int ans = dist[1];     for (int i = 1; i <= n; i++) {       ans = min(ans, every[i]);     }     printf( %lld n , ans);     return 0;   }
#include <bits/stdc++.h>   using namespace std;   const long long int N = 1e6 + 3;   signed main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long int t;     cin >> t;     while (t--) {       long long int n, m;       cin >> n;       long long int a[n + 1];       long long int i = 0;       for (i = 0; i < n; i++) {         cin >> a[i];       }       sort(a, a + n);       long long int flag = 0;       for (i = 1; i < n; i++) {         if (abs(a[i] - a[i - 1]) > 1) {           flag = 1;           break;         }       }       if (flag == 1)         cout <<  NO  << endl;       else         cout <<  YES  << endl;     }   }
#include <bits/stdc++.h>   int main() {     int i, j, n, r = 0, c = 0, ans = 0;     char str[107][107];     scanf( %d , &n);     for (i = 0; i < n; ++i) {       scanf( %s , str[i]);       r = 0;       for (j = 0; j < n; ++j) {         if (str[i][j] ==  C ) {           ++r;         }       }       ans += (r * (r - 1)) / 2;     }     for (j = 0; j < n; ++j) {       c = 0;       for (i = 0; i < n; ++i) {         if (str[i][j] ==  C ) {           ++c;         }       }       ans += (c * (c - 1)) / 2;     }     printf( %d n , ans);     return 0;   }
#include <bits/stdc++.h>   using namespace std;   int mn[200010 * 4], lazy_value[4 * 200010];   bool lazy[4 * 200010];   void update_node(int idx, int st, int ed, int val) {     lazy[idx] = 1;     lazy_value[idx] += val;     mn[idx] += val;   }   void update_lazy(int idx, int st, int ed) {     if (st == ed) return;     int mid = (st + ed) / 2;     update_node(2 * idx, st, mid, lazy_value[idx]);     update_node(2 * idx + 1, mid + 1, ed, lazy_value[idx]);     lazy[idx] = lazy_value[idx] = 0;   }   void insert(int idx, int st, int ed, int s, int e, int val) {     if (st == s && ed == e) {       update_node(idx, st, ed, val);       return;     }     if (lazy[idx]) update_lazy(idx, st, ed);     int mid = (st + ed) / 2;     if (e <= mid)       insert(idx * 2, st, mid, s, e, val);     else if (s > mid)       insert(idx * 2 + 1, mid + 1, ed, s, e, val);     else {       insert(idx * 2, st, mid, s, mid, val);       insert(idx * 2 + 1, mid + 1, ed, mid + 1, e, val);     }     mn[idx] = min(mn[idx * 2], mn[idx * 2 + 1]);   }   int query(int idx, int st, int ed, int s, int e) {     if (st == s && ed == e) return mn[idx];     if (lazy[idx]) update_lazy(idx, st, ed);     int mid = (st + ed) / 2;     if (mid >= e)       return query(2 * idx, st, mid, s, e);     else if (s > mid)       return query(2 * idx + 1, mid + 1, ed, s, e);     else       return min(query(idx * 2, st, mid, s, mid),                  query(idx * 2 + 1, mid + 1, ed, mid + 1, e));   }   int main() {     int n, val, i, q, cnt, st, ed;     string s_line;     cin >> n;     for (i = 0; i < n; i++) {       cin >> val;       insert(1, 0, n - 1, i, i, val);     }     cin >> q;     getchar();     while (q--) {       getline(cin, s_line);       stringstream ss1;       ss1 << s_line;       ss1 >> st;       ss1 >> ed;       cnt = 0;       while (ss1 >> val) cnt++;       if (cnt) {         if (st > ed) {           insert(1, 0, n - 1, st, n - 1, val);           insert(1, 0, n - 1, 0, ed, val);         } else           insert(1, 0, n - 1, st, ed, val);       } else {         if (st > ed)           cout << min(query(1, 0, n - 1, st, n - 1), query(1, 0, n - 1, 0, ed));         else           cout << query(1, 0, n - 1, st, ed);         cout << endl;       }     }     return 0;   }
#include <bits/stdc++.h>   using namespace std;   int mp[1010000], ans;   int main() {     int n, m, x;     cin >> n;     for (int i = 1; i <= n; i++) {       scanf( %d , &x);       mp[x]++;     }     for (int i = 0; i <= 1e6 + 21; i++) {       int num = i;       int numcnt = mp[i];       if (numcnt % 2 == 1) ans++;       mp[num + 1] += numcnt / 2;     }     cout << ans;   }
#include <bits/stdc++.h>   using namespace std;   long long n, k;   string s;   int32_t main() {     ios_base::sync_with_stdio(false);     cin >> n >> k;     long long left = 1;     long long right = n;     while (right - left > 1) {       long long m1 = (right + left) / 2;       long long m2 = m1 + 1;       cout << 1 <<     << m1 <<     << m2 << endl;       cout.flush();       cin >> s;       if (s ==  TAK ) {         right = m1;       } else         left = m2;     }     long long f;     long long s1 = -1;     long long s2 = -1;     if (left == right)       f = left;     else {       cout << 1 <<     << left <<     << right << endl;       cout.flush();       cin >> s;       if (s ==  TAK ) {         f = left;       } else         f = right;     }     left = 1;     right = f - 1;     if (right >= left) {       while (right - left > 1) {         long long m1 = (right + left) / 2;         long long m2 = m1 + 1;         cout << 1 <<     << m1 <<     << m2 << endl;         cout.flush();         cin >> s;         if (s ==  TAK ) {           right = m1;         } else           left = m2;       }       if (left == right)         s1 = left;       else {         cout << 1 <<     << left <<     << right << endl;         cout.flush();         cin >> s;         if (s ==  TAK ) {           s1 = left;         } else           s1 = right;       }     }     left = f + 1;     right = n;     if (right >= left) {       while (right - left > 1) {         long long m1 = (right + left) / 2;         long long m2 = m1 + 1;         cout << 1 <<     << m1 <<     << m2 << endl;         cout.flush();         cin >> s;         if (s ==  TAK ) {           right = m1;         } else           left = m2;       }       if (left == right)         s2 = left;       else {         cout << 1 <<     << left <<     << right << endl;         cout.flush();         cin >> s;         if (s ==  TAK ) {           s2 = left;         } else           s2 = right;       }     }     if (s1 != -1) {       cout <<  1   << s1 <<     << f << endl;       cout.flush();       cin >> s;       if (s ==  TAK ) {         cout << 2 <<     << f <<     << s1 << endl;         cout.flush();         return 0;       }     }     cout << 2 <<     << f <<     << s2 << endl;     cout.flush();     return 0;   }
#include <bits/stdc++.h>   using namespace std;   long long int max(long long int a, long long int b) {     if (a > b) {       return a;     }     return b;   }   long long int gcd(long long int a, long long int b) {     if (a == 0) {       return b;     }     return gcd(b % a, a);   }   long long int min(long long int a, long long int b) {     if (a < b) {       return a;     }     return b;   }   long long int power(long long int x, long long int n) {     long long int res = 1;     while (n > 0) {       if (n % 2 == 1) {         res = (res * x);       }       x = (x * x);       n = n / 2;     }     return res;   }   long long int factorialNumInverse[1000001];   long long int naturalNumInverse[1000001];   long long int fact[1000001];   void InverseofNumber(long long int n, long long int p) {     naturalNumInverse[0] = naturalNumInverse[1] = 1;     for (long long int i = 2; i <= n; i++)       naturalNumInverse[i] = naturalNumInverse[p % i] * (p - p / i) % p;   }   void InverseofFactorial(long long int n, long long int p) {     factorialNumInverse[0] = factorialNumInverse[1] = 1;     for (long long int i = 2; i <= n; i++)       factorialNumInverse[i] =           (naturalNumInverse[i] * factorialNumInverse[i - 1]) % p;   }   void factorial(long long int n, long long int p) {     fact[0] = 1;     for (long long int i = 1; i <= n; i++) {       fact[i] = (fact[i - 1] * i) % p;     }   }   long long int nCrModp(long long int n, long long int r, long long int p) {     long long int ans =         ((fact[n] * factorialNumInverse[r]) % p * factorialNumInverse[n - r]) % p;     return ans;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(0);     cout.tie(0);     long long int tc;     cin >> tc;     factorial(200005, 1000000007);     InverseofNumber(200005, 1000000007);     InverseofFactorial(200005, 1000000007);     while (tc--) {       long long int n;       cin >> n;       string s;       cin >> s;       long long int ans = 0;       long long int i = 1;       long long int len = 1;       while (i < n) {         if (s[i] == s[0]) {           len++;         }         i++;       }       if (len == n) {         cout << ceil((long double)n / (long double)3) <<   n ;         continue;       }       len = 0;       i = 0;       int j = s.length() - 1;       while (j >= 0 && s[j] == s[0]) {         len++;         j--;       }       while (i <= j && s[i] == s[0]) {         len++;         i++;       }       ans += (len) / 3;       len = 1;       i++;       while (i <= j) {         if (s[i] == s[i - 1]) {           len++;         } else {           ans += (len) / 3;           len = 1;         }         i++;       }       ans += (len) / 3;       cout << ans <<   n ;     }     return 0;   }
#include <bits/stdc++.h>   using namespace std;   int n, q, si = 1, leaf;   long long ans[500010];   struct Q {     int s, e, ind;   };   vector<Q> query[500010];   vector<pair<int, int>> tree[500010];   int rs[500010];   struct seg {     long long seg[2000010], lazy[2000010];     void prop(int x) {       seg[x] += lazy[x];       if (x < si) {         lazy[x * 2] += lazy[x];         lazy[x * 2 + 1] += lazy[x];       }       lazy[x] = 0;       return;     }     void add(int s, int e, long long v) {       if (s > e) return;       add(1, 1, si, s, e, v);     }     void add(int x, int l, int r, int s, int e, long long v) {       prop(x);       if (r < s || e < l) return;       if (s <= l && r <= e) {         lazy[x] += v;         prop(x);         return;       }       add(x * 2, l, (l + r) / 2, s, e, v);       add(x * 2 + 1, (l + r) / 2 + 1, r, s, e, v);       seg[x] = min(seg[x * 2], seg[x * 2 + 1]);     }     long long get(int s, int e) { return get(1, 1, si, s, e); }     long long get(int x, int l, int r, int s, int e) {       prop(x);       if (r < s || e < l) return 1000000000000000LL;       if (s <= l && r <= e) return seg[x];       return min(get(x * 2, l, (l + r) / 2, s, e),                  get(x * 2 + 1, (l + r) / 2 + 1, r, s, e));     }   } S;   void makeup(int x, long long dis) {     rs[x] = x;     if (tree[x].size() == 0) {       S.add(x, x, dis);       return;     } else       S.add(x, x, 1000000000000000LL);     for (auto i : tree[x]) {       makeup(i.first, dis + i.second);       rs[x] = max(rs[x], rs[i.first]);     }   }   void dfs(int x) {     for (auto i : query[x]) ans[i.ind] = S.get(i.s, i.e);     for (auto i : tree[x]) {       S.add(i.first, rs[i.first], -i.second);       S.add(1, i.first - 1, i.second);       S.add(rs[i.first] + 1, n, i.second);       dfs(i.first);       S.add(i.first, rs[i.first], i.second);       S.add(1, i.first - 1, -i.second);       S.add(rs[i.first] + 1, n, -i.second);     }   }   int main() {     int i, a, b, c;     scanf( %d %d , &n, &q);     while (si < n) si <<= 1;     for (i = 2; i <= n; i++) {       scanf( %d %d , &a, &b);       tree[a].push_back({i, b});     }     for (i = 1; i <= q; i++) {       scanf( %d %d %d , &a, &b, &c);       query[a].push_back({b, c, i});     }     makeup(1, 0);     dfs(1);     for (i = 1; i <= q; i++) printf( %lld n , ans[i]);   }
#include <bits/stdc++.h>   using namespace std;      typedef vector <int> vi;   typedef pair <int, int> pii;      const int MAXN = 2e5 + 5;      int N;   int perm[MAXN];   bool bio[MAXN];   deque <pii> ans;      void load() {     scanf( %d , &N);     for (int i = 1; i <= N; i++) {       int coin;       scanf( %d , &coin);       perm[coin] = i;     }   }      void add_front(int x, int y) {     ans.push_front({x, y});   }      void add_back(int x, int y) {     ans.push_back({x, y});   }      void one_cycle(const vi &cyc) {     int len = cyc.size();     auto add_local = [&](int x, int y) {       add_front(cyc[x % len], cyc[y % len]);     };     add_local(1, 2);     add_local(1, 3);     for (int i = 3; i < len; i++)       add_local(i, i + 1);     add_local(1, 2);     add_local(0, 1);   }      void two_cycles(vi cyc1, vi cyc2) {     cyc2.insert(cyc2.begin(), cyc1.back());     cyc1.pop_back();     cyc1.insert(cyc1.begin(), cyc2.back());     cyc2.pop_back();     int len1 = cyc1.size();     for (int i = 0; i < len1 - 1; i++)       add_front(cyc1[i], cyc1[i + 1]);     int len2 = cyc2.size();     for (int i = 0; i < len2 - 1; i++)       add_front(cyc2[i], cyc2[i + 1]);     add_front(cyc1[0], cyc2[0]);     add_front(cyc1.back(), cyc2.back());   }      void fixed_and_transposition(int x, const vi &tau) {     add_back(x, tau[0]);     add_back(tau[0], tau[1]);     add_back(x, tau[1]);   }      void solve() {     int fixed = 0;     vector <vi> other;     for (int i = 1; i <= N; i++)        if (!bio[i]) {         vi tmp;         for (int x = i; !bio[x]; x = perm[x]) {           tmp.push_back(x);           bio[x] = true;         }         if (tmp.size() > 1)           other.push_back(tmp);         else           fixed = tmp[0];       }     if (!other.empty()) {       int largest = max_element(other.begin(), other.end(), [&](const vi &u, const vi &v) { return u.size() < v.size(); }) - other.begin();       swap(other[0], other[largest]);       int parity = other.size() % 2;       for (int i = parity; i < other.size(); i += 2)         two_cycles(other[i], other[i + 1]);       if (parity) {         if (other[0].size() >= 3)            one_cycle(other[0]);         else            fixed_and_transposition(fixed ? fixed : other[1][0], other[0]);       }     }     printf( %d n , ans.size());     for (auto it : ans) {       printf( %d %d n , perm[it.first], perm[it.second]);       swap(perm[it.first], perm[it.second]);     }   }      int main() {     load();     solve();     return 0;   }
#include <bits/stdc++.h>   using namespace std;   struct node {     int u, v, w;   } arr[300010];   bool cmp(node a, node b) { return (a.w < b.w); }   int n, m;   int f[300010], f2[300010];   int main() {     scanf( %d , &n);     ;     scanf( %d , &m);     ;     for (int i = 0; i < m; i++) {       scanf( %d , &arr[i].u);       ;       scanf( %d , &arr[i].v);       ;       scanf( %d , &arr[i].w);       ;     }     sort(arr, arr + m, cmp);     int ans = 0;     for (int i = 0, j = 0; i < m; i = j) {       while (j < m && arr[i].w == arr[j].w) j++;       for (int k = i; k < j; k++) f2[arr[k].v] = f[arr[k].v];       for (int k = i; k < j; k++)         f2[arr[k].v] = max(f2[arr[k].v], 1 + f[arr[k].u]);       for (int k = i; k < j; k++) f[arr[k].v] = f2[arr[k].v];       for (int k = i; k < j; k++) ans = max(ans, f[arr[k].v]);     }     cout << ans;   }
#include <bits/stdc++.h>   using namespace std;   template <typename T>   void chkmin(T &x, T y) {     x = x < y ? x : y;   }   template <typename T>   void chkmax(T &x, T y) {     x = x > y ? x : y;   }   template <typename T>   void read(T &x) {     x = 0;     int f = 1;     char c = getchar();     while (!isdigit(c)) {       if (c ==  - ) f = -1;       c = getchar();     }     while (isdigit(c)) x = x * 10 + c -  0 , c = getchar();     x *= f;   }   int a[100010], s[100010], f[100010][105], b[100010][105];   void add(int &x, int y) {     x += y;     if (x >= 998244353) x -= 998244353;   }   int main() {     int n, k, len;     read(n), read(k), read(len);     if (len == 1) return cout <<  0 n , 0;     s[0] = 1;     for (int i = 1; i <= n; i++) read(a[i]);     for (int i = 1; i <= n; i++)       for (int j = 1; j <= k; j++)         if (a[i] == j || a[i] == -1) b[i][j] = 1;     for (int j = 1; j <= k; j++)       for (int i = 1; i <= n; i++) b[i][j] += b[i - 1][j];     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= k; j++) {         if (~a[i] && a[i] != j) continue;         f[i][j] = s[i - 1];         if (i >= len && b[i][j] - b[i - len][j] == len)           add(f[i][j], (f[i - len][j] - s[i - len] + 998244353) % 998244353);         add(s[i], f[i][j]);       }     }     cout << s[n] <<   n ;     return 0;   }
#include <bits/stdc++.h>   using namespace std;   int main() {     double x, y;     while (cin >> x >> y) {       double l;       l = sqrt(x * x + y * y);       if (l == (int)l) {         cout <<  black  << endl;         continue;       }       int z = (int)l;       if (z != l) z++;       if (x * y >= 0) {         if (z % 2)           cout <<  black  << endl;         else           cout <<  white  << endl;       } else {         if (z % 2 == 0)           cout <<  black  << endl;         else           cout <<  white  << endl;       }     }   }
#include <bits/stdc++.h>   using namespace std;   long long gcd(long long a, long long b) {     if (a == 0) {       return b;     }     if (b == 0) {       return a;     }     return gcd(b % a, a);   }   int main() {     long long ra, la, ta, rb, lb, tb;     cin >> la >> ra >> ta;     cin >> lb >> rb >> tb;     long long g = gcd(ta, tb);     if (ta > tb) {       long long j = la, k = ra, l = ta;       la = lb;       ra = rb;       ta = tb;       lb = j;       rb = k;       tb = l;     }     lb -= la;     rb -= la;     long long buff = ((lb + tb) % tb) - lb;     lb += buff;     rb += buff;     ra -= la;     la -= la;     long long bdif = 0;     long long nf = (lb % g) - lb;     lb += nf;     rb += nf;     bdif = max(bdif, 1 + min(rb, ra) - max(lb, la));     long long nl = ((lb + g - 1) % g) - g + 1;     long long df = nl - lb;     lb += df;     rb += df;     bdif = max(bdif, 1 + min(rb, ra) - max(lb, la));     cout << bdif << endl;   }
#include <bits/stdc++.h>   using namespace std;   auto start = std::chrono::high_resolution_clock::now();   long double crrtime() {     auto stop = std::chrono::high_resolution_clock::now();     auto duration =         std::chrono::duration_cast<std::chrono::nanoseconds>(stop - start);     return ((long double)duration.count()) / ((long double)1e9);   }   mt19937 rng(2);   int inline randn(int L, int R) {     uniform_int_distribution<int> uid(L, R);     return uid(rng);   }   int inline randn(int N) {     uniform_int_distribution<int> uid(0, N - 1);     return uid(rng);   }   const long long mod = 998244353;   long long n;   long long p[30];   long long a[30][26];   long long g[10000001];   long long h[10000001];   long long F[10000001];   void solve() {     cin >> n;     p[0] = 1;     for (long long i = 1; i < 30; i++) p[i] = 2 * p[i - 1];     for (long long i = 0; i < n; i++) {       string s;       cin >> s;       for (long long j = 0; j < 26; j++) a[i][j] = 0;       for (char c : s) a[i][c -  a ]++;     }     g[0] = 0;     for (long long x = 1; x < p[n]; x++) {       vector<long long> tmp(26, 100000);       long long k = 0;       h[x] = 0;       for (long long i = 0; i < n; i++) {         if (p[i] & x) {           for (long long j = 0; j < 26; j++) tmp[j] = min(tmp[j], a[i][j]);           k++;           h[x]++;           h[x] += i;         }       }       long long cnt = 1;       for (long long i = 0; i < 26; i++) cnt = (cnt * (tmp[i] + 1)) % mod;       h[x] *= k;       g[x] = cnt;       if ((k & 1) == 0) g[x] = -cnt;     }     for (long long i = 0; i < (1 << n); ++i) F[i] = g[i];     for (long long i = 0; i < n; ++i)       for (long long mask = 0; mask < (1 << n); ++mask) {         if (mask & (1 << i)) F[mask] += F[mask ^ (1 << i)];       }     long long ans = 0;     for (long long i = 0; i < p[n]; i++) {       F[i] %= mod;       if (F[i] < 0) F[i] += mod;       ans ^= (F[i] * h[i]);     }     cout << (ans) <<   n ;   }   signed main() {     start = std::chrono::high_resolution_clock::now();     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     long long tt = 1;     for (long long tc = 1; tc <= tt; ++tc) {       solve();     }   }
#include <bits/stdc++.h>   using namespace std;   int long long freq[100005], a[100005], final[100005];   int long long pow1(int long long a, int long long b) {     if (a == 0) return 0;     int long long x = 1, y = a;     while (b > 0) {       if (b % 2 == 1) {         x = (x * y);         if (x > 1000000007) x %= 1000000007;       }       y = (y * y);       if (y > 1000000007) y %= 1000000007;       b /= 2;     }     return x % 1000000007;   }   int main() {     ios::sync_with_stdio(0), cin.tie(0);     int long long n;     cin >> n;     for (int long long i = 0; i < n; i++) {       cin >> a[i];       freq[a[i]]++;     }     for (int long long i = 100000; i >= 1; i--) {       int long long c1 = 0;       for (int long long j = i; j <= 100000; j = j + i) {         c1 = (c1 + freq[j]) % 1000000007;       }       final[i] = (final[i] + pow1(2, c1) - 1) % 1000000007;       for (int long long j = 2 * i; j <= 100000; j = j + i) {         final[i] = (final[i] + 1000000007 - final[j]) % 1000000007;       }     }     cout << final[1] << endl;   }
#include <bits/stdc++.h>   using namespace std;   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     int xa, ya, xb, yb, n;     cin >> xa >> ya >> xb >> yb >> n;     vector<int> X(n), Y(n), R(n);     for (int i = 0; i < n; ++i) cin >> X[i] >> Y[i] >> R[i];     if (xa > xb) swap(xa, xb);     if (ya > yb) swap(ya, yb);     int ans = 0;     for (int i = xa; i <= xb; i++) {       bool flag = false;       for (int j = 0; j < n; ++j) {         int d = (X[j] - i) * (X[j] - i) + (Y[j] - ya) * (Y[j] - ya);         if (d <= R[j] * R[j]) flag = true;       }       ans += !flag;       flag = false;       for (int j = 0; j < n; ++j) {         int d = (X[j] - i) * (X[j] - i) + (Y[j] - yb) * (Y[j] - yb);         if (d <= R[j] * R[j]) flag = true;       }       ans += !flag;     }     for (int i = ya + 1; i < yb; ++i) {       bool flag = false;       for (int j = 0; j < n; ++j) {         int d = (X[j] - xa) * (X[j] - xa) + (Y[j] - i) * (Y[j] - i);         if (d <= R[j] * R[j]) flag = true;       }       ans += !flag;       flag = false;       for (int j = 0; j < n; ++j) {         int d = (X[j] - xb) * (X[j] - xb) + (Y[j] - i) * (Y[j] - i);         if (d <= R[j] * R[j]) flag = true;       }       ans += !flag;     }     cout << ans <<   n ;     return 0;   }