description: A binary string is a string that consists of characters 0 and 1.
  
  Let \operatorname{MEX} of a binary string be the smallest digit among 0, 1, or 2 that does not occur in the string. For example, \operatorname{MEX} of 001011 is 2, because 0 and 1 occur in the string at least once, \operatorname{MEX} of 1111 is 0, because 0 and 2 do not occur in the string and 0 < 2.
  
  A binary string s is given. You should cut it into any number of substrings such that each character is in exactly one substring. It is possible to cut the string into a single substring — the whole string.
  
  A string a is a substring of a string b if a can be obtained from b by deletion of several (possibly, zero or all) characters from the beginning and several (possibly, zero or all) characters from the end.
  
  What is the minimal sum of \operatorname{MEX} of all substrings pieces can be?
  
  Input
  
  The input consists of multiple test cases. The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of test cases. Description of the test cases follows.
  
  Each test case contains a single binary string s (1 ≤ |s| ≤ 10^5).
  
  It's guaranteed that the sum of lengths of s over all test cases does not exceed 10^5.
  
  Output
  
  For each test case print a single integer — the minimal sum of \operatorname{MEX} of all substrings that it is possible to get by cutting s optimally.
  
  Example
  
  Input
  
  
  6
  01
  1111
  01100
  101
  0000
  01010
  
  
  Output
  
  
  1
  0
  2
  1
  1
  2
  
  Note
  
  In the first test case the minimal sum is \operatorname{MEX}(0) + \operatorname{MEX}(1) = 1 + 0 = 1.
  
  In the second test case the minimal sum is \operatorname{MEX}(1111) = 0.
  
  In the third test case the minimal sum is \operatorname{MEX}(01100) = 2.
solution: #include <bits/stdc++.h>
  #pragma GCC optimize(2)
  using namespace std;
  const double eps = 1e-6;
  struct inout {
    static const int ibufl = 1 << 25;
    char in_buf[ibufl + 5], out_buf[ibufl + 5], *inf, *ouf;
    void init() {
      fread(in_buf, 1, ibufl, stdin);
      inf = in_buf;
      ouf = out_buf;
    }
    inout& operator>>(int& a) {
      int fh = 1;
      while (!(isdigit(*inf) || *inf == '-')) ++inf;
      if (*inf == '-') fh = -1, ++inf;
      a = 0;
      while (isdigit(*inf)) {
        a = a * 10 + *inf - '0';
        ++inf;
      }
      a *= fh;
      return *this;
    }
    inout& operator>>(char& a) {
      while (*inf == ' ' || *inf == '\n') ++inf;
      a = *inf;
      ++inf;
      return *this;
    }
    inout& operator>>(char* a) {
      while (*inf == ' ' || *inf == '\n') ++inf;
      while (!(*inf == ' ' || *inf == '\n')) {
        *a = *inf;
        ++inf;
        ++a;
      }
      *a = '\0';
      return *this;
    }
    inout& operator>>(double& a) {
      int fh = 1;
      double s;
      while (!(isdigit(*inf) || *inf == '-')) ++inf;
      if (*inf == '-') fh = -1, ++inf;
      a = 0;
      while (isdigit(*inf)) {
        a = a * 10 + *inf - '0';
        ++inf;
      }
      if (*inf == '.') {
        s = 0.1;
        ++inf;
        while (isdigit(*inf)) {
          a += s * (*inf - '0');
          ++inf;
          s *= 0.1;
        }
      }
      a *= fh;
      return *this;
    }
    void writeint(int x) {
      if (x / 10) writeint(x / 10);
      *ouf = x % 10 + '0';
      ++ouf;
    }
    inout& operator<<(int a) {
      if (a < 0) {
        *ouf = '-';
        ++ouf;
        a = -a;
      }
      writeint(a);
      return *this;
    }
    static const int sz = 2;
    inout& operator<<(char a) {
      *ouf = a;
      ++ouf;
      return *this;
    }
    inout& operator<<(char* a) {
      while (*a) {
        *ouf = *a;
        ++ouf;
        ++a;
      }
      return *this;
    }
    inout& operator<<(double a) {
      if (a < -eps) {
        *ouf = '-';
        ++ouf;
        a = -a;
      }
      writeint((int)a);
      a -= (int)a;
      *ouf = '.';
      ++ouf;
      for (int i = 1; i <= sz; i++) {
        a = a * 10;
        *ouf = (int)a + '0';
        ++ouf;
        a -= (int)a;
      }
      return *this;
    }
    void out() { fwrite(out_buf, 1, ouf - out_buf, stdout); }
  };
  inout io;
  string s;
  void solve() {
    cin >> s;
    int cnt = 0;
    int lst = 1;
    for (int i = 0; i < s.size(); i++) {
      if (s[i] == '0' && lst) cnt++;
      lst = s[i] - '0';
    }
    cout << min(cnt, 2) << '\n';
  }
  signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t;
    cin >> t;
    while (t--) solve();
    return 0;
  }
  