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: import os,sys;from io import BytesIO, IOBase
  BUFSIZE = 8192
  class FastIO(IOBase):
      newlines = 0
      def __init__(self, file):
          self._fd = file.fileno();self.buffer = BytesIO();self.writable = "x" in file.mode or "r" not in file.mode;self.write = self.buffer.write if self.writable else None
      def read(self):
          while True:
              b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
              if not b:break
              ptr = self.buffer.tell();self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
          self.newlines = 0
          return self.buffer.read()
      def readline(self):
          while self.newlines == 0:b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE));self.newlines = b.count(b"\n") + (not b);ptr = self.buffer.tell();self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
          self.newlines -= 1
          return self.buffer.readline()
      def flush(self):
          if self.writable:os.write(self._fd, self.buffer.getvalue());self.buffer.truncate(0), self.buffer.seek(0)
  class IOWrapper(IOBase):
      def __init__(self, file):
          self.buffer = FastIO(file);self.flush = self.buffer.flush;self.writable = self.buffer.writable;self.write = lambda s: self.buffer.write(s.encode("ascii"));self.read = lambda: self.buffer.read().decode("ascii");self.readline = lambda: self.buffer.readline().decode("ascii")
  sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
  try:sys.stdin,sys.stdout=open('in.txt','r'),open('out.txt','w')
  except:pass
  ii1=lambda:int(sys.stdin.readline().strip()) # for interger
  is1=lambda:sys.stdin.readline().strip() # for str
  iia=lambda:list(map(int,sys.stdin.readline().strip().split())) # for List[int]
  isa=lambda:sys.stdin.readline().strip().split() # for List[str]
  mod=int(1e9 + 7);
  # from math import *
  # from math import inf 
  # from collections import *;
  # from collections import defaultdict as dd
  # from collections import deque as dq 
  # from string import ascii_lowercase,ascii_uppercase
  # from functools import lru_cache
  # sys.setrecursionlimit(500000)
  # from bisect import bisect_left as bl,bisect_right as br
  # from heapq import heapify,heappop,heappush
  # def google(p):print('Case #'+str(p)+': ',end='')
  ###################### Start Here ######################
  from math import ceil
  for _ in range(ii1()):
      s = is1()
      z = s.count('0')
      o = s.count('1')
      if z == 0 :
          print(0)
      elif o == 0:
          print(1)
      else:
          # 000....1111... ho to iska 1 ho sakta hai 
          i = 0 
          n = len(s)
          o1 = 0 
          while i < n and s[i]=='1':
              o1 += 1
              i += 1
          z1 = 0 
          while i < n  and s[i]=='0':
              z1 += 1
              i += 1
          o2 = 0
          while i < n and s[i]=='1':
              o2+=1
              i+=1
          if z1 + o1 + o2 == n:
              print(1)
          else:
              print(2)
  
          