Buggy python submission (verdict: Runtime Error):
import io
import sys
from functools import lru_cache

sys.setrecursionlimit(10 ** 7)
HOGE = 10 ** 9 + 7


def IN_S():
  return input()


def IN_I():
  return int(input())


def IN_L_I():
  return list(map(int, input().split()))


def IN_L_S():
  return list(map(str, input().split()))


def STR_SPLIT(s, n):
  for l in range(0, len(s), n):
    yield s[0 + l:n + l]


def T_IN():
  global test_str
  sys.stdin = io.StringIO(test_str[1:-1])


test_str = '''
2000 3
'''


def MAIN():
  # T_IN()
  A()


def A():
  x = IN_L_I()
  n = x[0]
  k = x[1]

  for i in range(1, k + 1):
    blue = f(k, i)

    # red = 0
    # red += f(n - k, i - 1)
    # red += f(n - k, i)
    # red += f(n - k, i)
    # red += f(n - k, i + 1)
    red = f2(n - k - (i - 1), i + 1)

    res = int((blue * red) % HOGE)
    print(res)
  return None


def f(x: int, y: int):
  if x < y:
    return 0
  if x == y == 0:
    return 1
  if y < 1:
    return 0
  return f2(x - y, y)


def f2(x: int, y: int):
  return c(x + y - 1, y - 1)


def c(a: int, b: int):
  return pascal(a, b)


@lru_cache(maxsize=None)
def pascal(x, y):
  if x < 0 or y < 0:
    return 0
  if x < y:
    return 0

  if x == 0 or y == 0 or x == y:
    return 1
  else:
    return (pascal(x - 1, y - 1) + pascal(x - 1, y)) % HOGE


MAIN()


Fixed submission:
import io
import sys


def IN_S():
  return input()


def IN_I():
  return int(input())


def IN_L_I():
  return list(map(int, input().split()))


def IN_L_S():
  return list(map(str, input().split()))


def STR_SPLIT(s, n):
  for l in range(0, len(s), n):
    yield s[0 + l:n + l]


def T_IN():
  global test_str
  sys.stdin = io.StringIO(test_str[1:-1])


test_str = '''
ABBA
'''

def MAIN():
  # T_IN()
  if A():
    print("Yes")
  else:
    print("No")
  quit()

def A():
  s = IN_S()
  l = list(STR_SPLIT(s, 1))
  l.sort()
  if len(l) == 4 and l[0] == l[1] and l[2] == l[3] and l[1] != l[2]:
    return True
  return False


MAIN()

Buggy python submission (verdict: Runtime Error):
import io
import sys


def IN_S():
  return input()


def IN_I():
  return int(input())


def IN_L_I():
  return list(map(int, input().split()))


def IN_L_S():
  return list(map(str, input().split()))


def STR_SPLIT(s, n):
  for l in range(0, len(s), n):
    yield s[0 + l:n + l]


def T_IN():
  global test_str
  sys.stdin = io.StringIO(test_str[1:-1])


test_str = '''
2000 3
'''


def MAIN():
  # T_IN()
  init()
  A()


def A():
  n, k = IN_L_I()

  for i in range(1, k + 1):
    blue = f(k, i)

    red = 0
    red += f(n - k, i - 1)
    red += f(n - k, i)
    red += f(n - k, i)
    red += f(n - k, i + 1)

    res = int((blue * red) % (10 ** 9 + 7))
    print(res)
  return None


def f(x: int, y: int):
  if x < y:
    return 0
  if x == y == 0:
    return 1
  if y < 1:
    return 0
  return f2(x - y, y)


def f2(x: int, y: int):
  return c(x + y - 1, y - 1)


def c(a: int, b: int):
  global hoge
  return hoge[a][b]


hoge = [[0 for i in range(4004)] for j in range(4004)]


def init():
  global hoge
  hoge[0][0] = 1
  for i in range(0, 4000):
    for j in range(0, i + 1):
      hoge[i + 1][j] += (hoge[i + 1][j] + hoge[i][j]) % (10 ** 9 + 7)
      hoge[i + 1][j + 1] += (hoge[i + 1][j + 1] + hoge[i][j]) % (10 ** 9 + 7)


MAIN()


Fixed submission:
import io
import sys


def IN_S():
  return input()


def IN_I():
  return int(input())


def IN_L_I():
  return list(map(int, input().split()))


def IN_L_S():
  return list(map(str, input().split()))


def STR_SPLIT(s, n):
  for l in range(0, len(s), n):
    yield s[0 + l:n + l]


def T_IN():
  global test_str
  sys.stdin = io.StringIO(test_str[1:-1])


test_str = '''
ABBA
'''

def MAIN():
  # T_IN()
  if A():
    print("Yes")
  else:
    print("No")
  quit()

def A():
  s = IN_S()
  l = list(STR_SPLIT(s, 1))
  l.sort()
  if len(l) == 4 and l[0] == l[1] and l[2] == l[3] and l[1] != l[2]:
    return True
  return False


MAIN()