Please, try EDU on Codeforces! New educational section with videos, subtitles, texts, and problems. ×

pikmike's blog

By pikmike, history, 4 weeks ago, translation, In English,

1366A - Shovels and Swords

Idea: Roms

Tutorial
Solution (Roms)

1366B - Shuffle

Idea: Roms

Tutorial
Solution (Roms)

1366C - Palindromic Paths

Idea: BledDest

Tutorial
Solution (BledDest)

1366D - Two Divisors

Idea: adedalic

Tutorial
Solution (adedalic)

1366E - Two Arrays

Idea: Roms

Tutorial
Solution (Roms)

1366F - Jog Around The Graph

Idea: Ne0n25

Tutorial
Solution (pikmike)

1366G - Construct the String

Idea: Ne0n25

Tutorial
Solution (Ne0n25)
 
 
 
 
  • Vote: I like it
  • +113
  • Vote: I do not like it

»
4 weeks ago, # |
Rev. 2   Vote: I like it +2 Vote: I do not like it

I realized in hacking phase that for E I accidentally read in $$$a$$$ and $$$b$$$ both with lengths $$$n$$$ (see my 83457987).

I thought I would segfault in system testing but I was still accepted. Can someone explain from first principles why this is? I guess it's ok to cin out of bounds as long as you don't use the memory afterwards?

»
4 weeks ago, # |
  Vote: I like it +12 Vote: I do not like it

Hey pikmike there is some problem with font of code of f because of comma in mod

»
4 weeks ago, # |
  Vote: I like it +5 Vote: I do not like it

Can some one please explain me how to do the Linear Integer programming, here in Problem A, they are checking just the corner points of the graph drawn & deciding on the answer,and yes it is quite true when x1,x2 are real numbers, but here the constraint is x1,x2 are integers>=0, so how to approach this problem. please help me with the proof.

»
4 weeks ago, # |
  Vote: I like it +2 Vote: I do not like it

why it cannot be greater than (a+b)/3 in problem A.

  • »
    »
    4 weeks ago, # ^ |
    Rev. 2   Vote: I like it -19 Vote: I do not like it

    this comment is deleted because of negative feed back

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +14 Vote: I do not like it

    Just for simple realisation :

    We need three objects in total to make anything(2 of first and 1 of second kind and vice versa). Now if each object need 3 material then you can create at max (a+b)/3 objects

  • »
    »
    4 weeks ago, # ^ |
    Rev. 4   Vote: I like it +8 Vote: I do not like it
    number of 1-2 is x, 2-1 is y then
    x + 2y <= a
    2x + y <= b
    -> x <= a, y <= b, x + y <= (a + b) / 3
    
    
    • »
      »
      »
      2 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      In Problem A, With 8 diamonds and 7 sticks, I can only earn four emeralds. Why is the expected answer 5?

      8 diamonds + 4 sticks = 4 emeralds (zero diamonds left, 3 sticks left) OR

      6 sticks + 3 diamonds and 2 diamonds + 1 stick = 4 emeralds (3 diamonds left, 0 sticks left)

      I asked this as a separate comment but moving it here for visibility.

  • »
    »
    4 weeks ago, # ^ |
    Rev. 3   Vote: I like it +9 Vote: I do not like it

    Notice that we the answer actually asks how many times we can subtract 3 from (a+b). Obviously the answer is (a+b)/3. But for some restriction on the type of objects we had to go for min(a,b,(a+b)/3). There is another way. Suppose we take X diamonds and 2X sticks to build X shovel. And we take Y sticks and 2Y diamonds to build Y sword.

    Total number of used items = 2X + X + 2Y +Y = 3X +3Y. So,(a+b) - (3X+3Y) = 0, why right hand side = 0 ? Because if we want to maximize the answer, number of items left will be zero. Solving for X+Y gives (a+b)/3.

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    lets assume we will be able to make x shovels and y swords. 1. 2*x+y<=a 2. x+2*y<=b

    adding above equations we will get 3x+3y<=(a+b)

    hence (x+y)<=(a+b)/3

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Ah, finally the editorial is out now.

»
4 weeks ago, # |
Rev. 2   Vote: I like it 0 Vote: I do not like it

We can do D in this way too -

1 ) Make prime sieve (sieve of Eratosthenes) to check a no. is prime or not

2 ) Convert given array to set

3 ) Now if a value in set is prime then store (-1,-1) else do brute force to check each valid pair of the divisor.

It passes better than SPF algo (in my case)

Here is link : My_Solution

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    btw the algo is good ..btt your submission is completely messyy !

  • »
    »
    3 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Nice approach to avoid duplicate numbers. For most numbers brute force works fast enough. Or may be test cases are weak. But I am not sure because some sophisticate time complexity analysis is needed.

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

can i get solution for problem D in c++??

»
4 weeks ago, # |
  Vote: I like it +6 Vote: I do not like it

This could be A-hard version :) 478-C Table decorations

»
4 weeks ago, # |
  Vote: I like it +3 Vote: I do not like it

Hey pikmike, I enjoyed the contest, interesting questions! I was wondering why you chose to put F and G in this contest: aren't they better suited for a div 1?

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +4 Vote: I do not like it

    Bro, this round is called an "Educational Round" right? So it seems reasonable that there will be some problems with advanced techniques at the high end of the problemset.

    • »
      »
      »
      4 weeks ago, # ^ |
        Vote: I like it -6 Vote: I do not like it

      getting tle on case 46 for E on this......Can anyone tell why?

      • »
        »
        »
        »
        4 weeks ago, # ^ |
        Rev. 3   Vote: I like it +11 Vote: I do not like it

        AbhishekAg your solution uses an unordered map, change it to an ordered map (normal map) and it will pass. Check this : https://codeforces.com/blog/entry/62393

        One more thing I must say is that I have observed you have commented the same thing you commented here atleast 3 times as an sudden, out of nowhere reply to various comment threads here, such spamming is really inappropriate and irritating! Create a new comment if you need to.

        Please don't do this.

        • »
          »
          »
          »
          »
          4 weeks ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          Sorry for spamming, I thought I could delete all comments once I get a reply......but it seems that cannot be done.....I keep it in mind from next time... Also.....can you please explain why changing to map got accepted?

          • »
            »
            »
            »
            »
            »
            4 weeks ago, # ^ |
              Vote: I like it +8 Vote: I do not like it

            Check the link I shared, its basic idea is that on average unordered map has O(1) operations, which is OK if inputs are random, but it turns out, if someone wants, they can generate an adversarial test case to cause an O(n^2) blowup on it.

»
4 weeks ago, # |
Rev. 2   Vote: I like it +5 Vote: I do not like it

Alternative for D, My solution for D is little bit different https://codeforces.com/contest/1366/submission/83482692 It uses the observation that if (d1 and d2) solution exist for a number A such that gcd(d1+d2,A) =1.Then it will definitely exist in the form of d1 = x, d2 = A/x where x is some divisor of number A.

  • »
    »
    3 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    bt how is it happening?? cant ovserb this.can u help me observing this?? thanks in advance.

»
4 weeks ago, # |
  Vote: I like it +38 Vote: I do not like it

Construction for A: let $$$K = \min(A, B, \frac{A + B}{3})$$$. Each of the $$$K$$$ items crafted needs at least one stick and at least one diamond. Set those sticks and diamonds aside; it's possible since $$$K \leq A$$$ and $$$K \leq B$$$. Each item then needs one additional resource of either type. We have $$$A + B - 2K$$$ resources remaining. It follows from $$$K \leq \frac{A+B}{3}$$$ that $$$A + B - 2K \geq K$$$.

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Can someone explain the time complexity of Problem D?

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    Let A be max Number which is 107 and n is size of array -

    To precompute SPF (smallest prime factor ) Time complexity is O(AloglogA)

    Now for each value we can answer in O(logA)

    As there are n values => O(nlogA)

    Total = AloglogA + nlogA

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +7 Vote: I do not like it

    You can solve Problem D in O(n+A).

    int n;
    
    int p[10000005], ptop;
    int pk[10000005];
    
    void sieve() {
        int n = 10000000;
        for(int i = 2; i <= n; ++i) {
            if(!pk[i]) {
                p[++ptop] = i;
                pk[i] = i;
            }
            for(int j = 1; j <= ptop; ++j) {
                int t = i * p[j];
                if(t > n)
                    break;
                if(i % p[j]) {
                    pk[t] = pk[p[j]];
                } else {
                    pk[t] = pk[i] * p[j];
                    break;
                }
            }
        }
    }
    
    int ans1[500005];
    int ans2[500005];
    
    void solve() {
        sieve();
        scanf("%d", &n);
        for(int i = 1, x; i <= n; ++i) {
            scanf("%d", &x);
            if(x == pk[x]) {
                ans1[i] = -1;
                ans2[i] = -1;
            } else {
                ans1[i] = pk[x];
                ans2[i] = x / pk[x];
            }
        }
        for(int i = 1; i <= n; ++i)
            printf("%d%c", ans1[i], " \n"[i == n]);
        for(int i = 1; i <= n; ++i)
            printf("%d%c", ans2[i], " \n"[i == n]);
        return;
    }
    

    This code spend 389ms to solve Problem D without any fast I/O.

    To precompute some number's smallest prime factor, using The sieve of Euler, time complexity is O(A).

    But it is not necessary to divided by smallest prime factor one by one, which using O(log(A)).

    You can precompute number x has how many smallest prime factor at the same time.

»
4 weeks ago, # |
  Vote: I like it +3 Vote: I do not like it

Can anybody explain a little on why are we traversing the arrays in reverse order helps?

»
4 weeks ago, # |
Rev. 2   Vote: I like it +4 Vote: I do not like it

Proof for A:

It is evident, as the tutorial mentions, that it cannot be greater than min(A,B,(A+B)/3), as you said. This does not imply that we can always achieve one of these optimal cases! For the first two, it's easy to see that if A>2*B, then it is optimal to pair each B with 2 A's and we have A's to spare. WLOG for B>2*A.

For the other case, we can take 2 of the one with greater quantity and pair it with 1 of lesser quantity. It is easily observed that this will reduce max(A,B) by 1 more than it reduces min(A,B), so we will always be bringing the values A and B closer together, except when they are equal, in that case we create a difference of one. By the above two observations, this process ends either when one of the piles are 0, in which case the other must be 1, or when both piles are 1. This corresponds to cases (A+B)%3=1 and (A+B)%3=2 respectively.

Hence we complete the proof that not only is the optimal less than the 3 constraints, but there exists a way to achieve these 3 constraints.

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

liked the problems a lot, thank u!

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Please help! In C, why do we check if i <= j?

  • »
    »
    4 weeks ago, # ^ |
    Rev. 3   Vote: I like it -10 Vote: I do not like it

    For Problem D U can refer This :

    As we have to find the smallest prime factor (for each number a[i]) first & then we need to check is there another prime factor is present or not So how we will do that ??

    U just keep dividing by the spf !

    You can refer this solution 83571466

    Happy To help !

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Let's say the count array is of length 7, odd length
    Now what we equate b/w is:

    • (cnt[0],cnt[6])
    • (cnt[1],cnt[5])
    • (cnt[2],cnt[4])
    • (cnt[3],cnt[3])

    Notice that, equating between cnt[3] and cnt[3] case (i == j) i.e, when both pointers meet at mid is unnecessary and so is, any index > 3 case (i > j) as we will be repeating the process(think).

    Case (i == j) won't happen for even length count array.

    • »
      »
      »
      4 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Thanks for your explanation! I got it now :)

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Can anyone help me find the complexity of my solution https://codeforces.com/contest/1366/submission/83570373

  • »
    »
    4 weeks ago, # ^ |
    Rev. 2   Vote: I like it 0 Vote: I do not like it

    it's Nlog(log(N)) where N = mx (in your code).

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Please someone explain problem B.

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Can anyone explain the proof of how to choose d1 and d2 effectively in Problem D? The editorial version is not that clear to me.

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +6 Vote: I do not like it

    Simple Approach

    For an $$$even$$$ number, answer will be $$$($$$ $$$2$$$, Product of remaining odd prime factors $$$)$$$

    For an $$$odd$$$ number, answer will be $$$($$$ $$$1st$$$ Smallest prime factor, $$$2nd$$$ Smallest Prime factor $$$)$$$

    And obviously, first, you need to check whether alteast $$$2$$$ distinct prime factors for a number exists or not. if not answer will be $$$($$$ $$$-1$$$, $$$-1$$$ $$$)$$$

    Proof

    For an $$$odd$$$ number,

    Consider an example $$$ai$$$ = $$$105$$$ $$$( 3 * 5 * 7 )$$$. Ans is $$$(3, 5)$$$.

    $$$3$$$ is $$$1st$$$ smallest prime factor and $$$5$$$ is $$$2nd$$$ smallest prime factor of $$$105$$$.

    Let $$$x = d1 + d2 = 3 + 5 = 8$$$.

    $$$g = gcd(x, 105)$$$ and obviously $$$g$$$ can't be $$$3$$$ or $$$5$$$. So $$$g$$$ should be greater than $$$5$$$, which is not possible. (why? Let $$$x' = g * e$$$ , $$$e$$$ is even number, $$$e$$$ must be aleast $$$2$$$. You can see $$$x' > x$$$ if $$$g > 5$$$, which is not possible.So $$$g$$$ has to be $$$1$$$.

    For an $$$even$$$ number,

    Consider an example $$$ai$$$ = $$$210$$$ $$$( 2 * 3 * 5 * 7 )$$$. Ans is $$$(2, 105)$$$.

    $$$105 = 3 * 5 * 7$$$ (Product of remaining odd prime factors).

    You can see $$$d1 = 2$$$ and $$$d2 = 105$$$, now forget about $$$d1$$$ and ask a question from yourself. What is the minimum $$$y$$$, I should add to $$$d2$$$ such that $$$g = gcd(d2 + y, ai) > 1$$$. And you will find you need to add smallest prime odd factor, for this case it is $$$3$$$ but we are adding just $$$2$$$ ($$$d1 = 2$$$, hence the answer).

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

For the code for problem G proiveded in the editorial, can anyone please explain why the following transition is skipped:-

dp[i+1][j-1]=max(dp[i+1][j-1],dp[i][j]), where the ith character of the first string is a '.'.

I am not able to convince myself why this transition is redundant.

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Once again problem A took more than 30 minutes to solve. Lol... but the solution was of one line

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Anyone please help me to figure out why I am getting TLE on test case 47 , in problem E.Please help me. https://codeforces.com/contest/1366/submission/83590296

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +1 Vote: I do not like it

    Try map instead of unordered_map.

    • »
      »
      »
      4 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      But unordered_map is faster than map?

      • »
        »
        »
        »
        4 weeks ago, # ^ |
          Vote: I like it +11 Vote: I do not like it

        No , unordered_map will take linear time in worst case.

        for more details refer this

        • »
          »
          »
          »
          »
          4 weeks ago, # ^ |
            Vote: I like it 0 Vote: I do not like it

          Ohk, I got that , can you tell me when unordered_map gives us answer in O(1) with surety , and when it can take linear time?

          • »
            »
            »
            »
            »
            »
            4 weeks ago, # ^ |
              Vote: I like it +1 Vote: I do not like it

            Sorry but I don't know that much deep.

            • »
              »
              »
              »
              »
              »
              »
              4 weeks ago, # ^ |
                Vote: I like it 0 Vote: I do not like it

              How, would i know where to use map or where to use unordered_map?

              • »
                »
                »
                »
                »
                »
                »
                »
                4 weeks ago, # ^ |
                  Vote: I like it 0 Vote: I do not like it

                Times you need to pay to insert or read in map is O(logn),while on unorederd_map maybe O(1) in average but in O(n) in some test data. So if you are sure that time for you is enough to use map, just use it.

          • »
            »
            »
            »
            »
            »
            4 weeks ago, # ^ |
              Vote: I like it +1 Vote: I do not like it

            The principle of unordered_map is hash. Maybe you need to learn about this, for the random test data it cost O(1) to insert, but sometimes it will cost O(n) to insert.

            • »
              »
              »
              »
              »
              »
              »
              4 weeks ago, # ^ |
                Vote: I like it 0 Vote: I do not like it

              Yes,I know about hashing and collisions but it was also taught that inbuilt hash function is very good and chances of getting O(n) complexity in unordered_map is very less , how would I identify by looking the constraints in the question that unordered_map will give linear time in this case?Plz help

              • »
                »
                »
                »
                »
                »
                »
                »
                4 weeks ago, # ^ |
                Rev. 3   Vote: I like it 0 Vote: I do not like it

                You can write hash by yourself and get the module randlomly because the moudle in unordered_map is a const number (I guess), and in C++ you may write "int mod=rand()" or in any other ways. In this way you may make sure that the cost is O(1) because the test data don't know what you moudle is because it's created randomly. But if it is possible I think you'd better use map because it is more convenient.

                • »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  »
                  4 weeks ago, # ^ |
                    Vote: I like it 0 Vote: I do not like it

                  Ohk,thanks for your help:)

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

In problem F, it is given that there are no loops in graph but in custom input i am getting loops in my graph. Anyone please explain?

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Why i am getting TLE for D.

i think it's complexity is same as described in editorial?

https://codeforces.com/contest/1366/submission/83593262

  • »
    »
    4 weeks ago, # ^ |
    Rev. 2   Vote: I like it +3 Vote: I do not like it

    you are applying factorization every time you are taking an input,the whole point of storing the minimum prime using seive is to not do the thing which you are doing and get it done in less time so your code takes O(sqrt(n)/log(sqrt(n))*log(n))) every time and we once applied seive we can get it's prime factorization in O(log(n)) time

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

I have a conceptual doubt in problem D.

Let's say our number N has its prime factors p1,p2,p3,p4.

if we choose d1=p1 and d2=p2.p3.p4 ,then IS it NOT possible that x=p1.p3(let) can produce (d1+d2)modx=0 ?

since d1modx!=0 and also d2modx!=0.

  • »
    »
    4 weeks ago, # ^ |
      Vote: I like it +3 Vote: I do not like it

    d1 = p1 and d2 = p2 p3 p4

    d2 makes it so d1 can never be p1 mod x = 0

    but also d1 makes it so d2 can never be p2 mod x = 0. think about it this way, think about d2 as a multiple of p2. a multiple of p2 + p1 can never be mod x = 0. repeat for all prime factors and yeah

    • »
      »
      »
      4 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      your comment encouraged me to pick up pen and paper and disprove myself wrong by writing just 2-3 lines using basic arithmetic modulo.

      so thanks a lot :)

»
4 weeks ago, # |
Rev. 3   Vote: I like it 0 Vote: I do not like it

Problem E is very interesting. Can someone please help me figure out the best possible solution for problem E if condition b[i] < b[i+1] was not in place.

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Getting wrong answer in the 2nd testcase of C. Can someone please help me find the mistake? Here's the link to my solution: 83472337

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

https://codeforces.com/contest/1366/submission/83607595

can anyone help me ??what's wrong in my implementation of problem D?

»
4 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

How can A be done with binary search? The problem is tagged binary search, so i was wondering if anyone had any alternative approach using it?

»
3 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Can Someone explain the problem statement of B.I am not able to get what we have to find.Also Please explain the solution too.(Not able to understand the editorial). Thanks in advance.

  • »
    »
    3 weeks ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    We have been provided with an array all elements are equal to zero except 1, and we need to find the number of elements which can end up equal to 1 after swapping . Now for the queries if the given interval is overlapping with even one element equal to 1 the all the elements in that interval in can end up as 1. So till the last query we can calculate all the elements which can be turned 1. Here is my solution B

    • »
      »
      »
      3 weeks ago, # ^ |
        Vote: I like it 0 Vote: I do not like it

      Genuine Explaination Bro.Thanks for it.I Just did some paperwork then i got AC.

»
3 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

how can the concept of binary search be applied in the first question? Can anyone help me with that.

»
3 weeks ago, # |
Rev. 3   Vote: I like it 0 Vote: I do not like it
»
3 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

How to solve C ? Can somebody explain the intuition in simpler terms ?

»
2 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

In Problem A, With 8 diamonds and 7 sticks, I can only earn four emeralds. Why is the expected answer 5?

4 pairs of diamonds + 4 sticks = 4 emeralds (zero diamonds left, 3 sticks left) OR

3 pairs of sticks + 3 diamonds and 1 pair of diamonds+stick = 4 emeralds (3 diamonds left, 0 sticks left)

»
2 weeks ago, # |
  Vote: I like it 0 Vote: I do not like it

Can any one tell me why am i getting tle in my soln for D [https://codeforces.com/contest/1366/submission/84870746] I am trying everything but nothing is working .

»
11 days ago, # |
  Vote: I like it -8 Vote: I do not like it

Hi BledDest I am getting TLE for problem D. Below is code snippet :

#include <bits/stdc++.h>
using namespace std;

const long int MX = 1e7+5;
vector <int> spf(MX, -1);
int n;

inline void pre() {
    spf[0] = spf[1] = 1;
    for (int i = 2; i*i < MX; i++) {
        if (spf[i] == -1) {
            spf[i] = i;
            for (int j = i*i; j < MX; j += i) {
                if (spf[j] == -1) spf[j] = i;
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    pre();
    cin >> n;
    int x;
    vector <int> d1(n+5, -1);
    vector <int> d2(n+5, -1);
    for (int i = 0; i < n; i++) {
        cin >> x;
        int d = spf[x];
        while ((x % d) == 0) {
            x = x / d;
        }
        if (x != 1) {
            d1[i] = d;
            d2[i] = x;
        }
    }
    for (int i = 0; i < n; i++) {
        cout << d1[i];
        (i == n - 1) ? cout << endl : cout << " ";

    }
    for (int i = 0; i < n; i++) {
        cout << d2[i];
        (i == n - 1) ? cout << endl : cout << " ";
    }
    return 0;
}