input: Write a python function to train a DecisionTreeClassifier using given features and label, and return the accuracy score and confusion matrix.
  assert train_decision_tree(pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30], 'Pet': ['Cat', 'Dog'], 'Label': [1, 0]})) == (1.0, [[1, 0], [0, 1]])
  assert train_decision_tree(pd.DataFrame({'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'Pet': ['Cat', 'Dog', 'Fish'], 'Label': [1, 0, 1]})) == (1.0, [[1, 0], [0, 2]])
output: def train_decision_tree(df):
      from sklearn.tree import DecisionTreeClassifier
      from sklearn.metrics import accuracy_score, confusion_matrix
      from sklearn.model_selection import train_test_split
      from sklearn.preprocessing import LabelEncoder
      
      # Extract features and label
      X = df.drop('Label', axis=1)
      y = df['Label']
      
      # Convert categorical features to numeric
      X = X.apply(lambda col: LabelEncoder().fit_transform(col) if col.dtype == 'object' else col)
      
      # Split the data into training and testing sets
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=42)
      
      # Initialize the DecisionTreeClassifier
      clf = DecisionTreeClassifier(random_state=42)
      
      # Train the classifier
      clf.fit(X_train, y_train)
      
      # Predict the labels for the test set
      y_pred = clf.predict(X_test)
      
      # Calculate accuracy score
      accuracy = accuracy_score(y_test, y_pred)
      
      # Calculate confusion matrix
      conf_matrix = confusion_matrix(y_test, y_pred)
      
      return accuracy, conf_matrix.tolist()