import java.util.*;
import java.util.zip.*;
import java.util.List;
import java.util.regex.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
import java.util.concurrent.locks.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.table.*;
import java.io.*;
import java.net.*;
import java.lang.reflect.*;
import java.lang.ref.*;
import java.lang.management.*;
import java.security.*;
import java.security.spec.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.math.*;
public class main {
public static void main(final String[] args) throws Exception {
  for (Node n : values(allNodes()))
    print(nodeToString(n));
}
static String nodeToString(Node n) {
  if (n == null) return "-";
  if (n instanceof AIConcept) return aiConceptToString2(((AIConcept) n));
  if (n instanceof Statement) return statementToString(((Statement) n));
  return "?? " + n.globalID;
}
static volatile StringBuffer local_log = new StringBuffer(); // not redirected
static volatile StringBuffer print_log = local_log; // might be redirected, e.g. to main bot
// in bytes - will cut to half that
static volatile int print_log_max = 1024*1024;
static volatile int local_log_max = 100*1024;
//static int print_maxLineLength = 0; // 0 = unset
static boolean print_silent; // total mute if set
static volatile ThreadLocal print_byThread; // special handling by thread
static void print() {
  print("");
}
// slightly overblown signature to return original object...
static  A print(A o) {
  ping();
  if (print_silent) return o;
  String s = String.valueOf(o) + "\n";
  print_noNewLine(s);
  return o;
}
static void print_noNewLine(String s) {
  if (print_byThread != null) {
    Object f = print_byThread.get();
    if (f != null)
      if (isFalse(callF(f, s))) return;
  }
  
  print_raw(s);
}
static void print_raw(String s) {
  s = fixNewLines(s);
  // TODO if (print_maxLineLength != 0)
  StringBuffer loc = local_log;
  StringBuffer buf = print_log;
  int loc_max = print_log_max;
  if (buf != loc && buf != null) {
    print_append(buf, s, print_log_max);
    loc_max = local_log_max;
  }
  if (loc != null) 
    print_append(loc, s, loc_max);
  System.out.print(s);
}
static void print(long l) {
  print(String.valueOf(l));
}
static void print(char c) {
  print(String.valueOf(c));
}
static void print_append(StringBuffer buf, String s, int max) {
  synchronized(buf) {
    buf.append(s);
    max /= 2;
    if (buf.length() > max) try {
      int newLength = max/2;
      int ofs = buf.length()-newLength;
      String newString = buf.substring(ofs);
      buf.setLength(0);
      buf.append("[...] ").append(newString);
    } catch (Exception e) {
      buf.setLength(0);
    }
  }
}
static  Collection values(Map map) {
  return map == null ? emptyList() : map.values();
}
static Map allNodes() {
  return mergeMaps(
    aiConceptsMap_cached(),
    indexByField(loadTruth_cached(), "globalID"));
}
static String statementToString(Statement s) {
  if (s == null) return "-";
  return dynamize(or2(s.possibleEnglishTranslation, "?") + " - " + s.text + " [" + s.globalID + "]");
}
static String fixNewLines(String s) {
  return s.replace("\r\n", "\n").replace("\r", "\n");
}
static Cache> loadTruth_cached_cache = new Cache("loadTruth");
static List loadTruth_cached() {
  return loadTruth_cached_cache.get();
}
static void loadTruth_clearCache() {
  loadTruth_cached_cache.clear();
}
static void loadTruth_clearCache(double seconds) {
  loadTruth_cached_cache.clear(seconds);
}
static volatile boolean ping_pauseAll;
static int ping_sleep = 100; // poll pauseAll flag every 100
static volatile boolean ping_anyActions;
static Map ping_actions = synchroMap(new WeakHashMap());
// returns true if it did anything
static boolean ping() { try {
  if (ping_pauseAll && !isAWTThread()) {
    do
      Thread.sleep(ping_sleep);
    while (ping_pauseAll);
    return true;
  }
  
  if (ping_anyActions) {
    Object action;
    synchronized(mc()) {
      action = ping_actions.get(currentThread());
      if (action instanceof Runnable)
        ping_actions.remove(currentThread());
      if (ping_actions.isEmpty()) ping_anyActions = false;
    }
    
    if (action instanceof Runnable)
      ((Runnable) action).run();
    else if (eq(action, "cancelled"))
      throw fail("Thread cancelled.");
  }
  
  return false;
} catch (Exception __e) { throw rethrow(__e); } }
static Object callF(Object f, Object... args) {
  return callFunction(f, args);
}
static String aiConceptToString2(AIConcept c) {
  if (c == null) return "-";
  return c.name + (nempty(c.comment) ? " [" + c.comment + "]" : "");
}
static boolean isFalse(Object o) {
  return eq(false, o);
}
// does not store null values
static Map indexByField(Collection c, String field) {
  HashMap map = new HashMap();
  for (Object a : c) {
    Object val = getOpt(a, field);
    if (val != null)
      map.put(val, a);
  }
  return map;
}
static List emptyList() {
  return new ArrayList();
  //ret Collections.emptyList();
}
static Cache