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 java.util.function.*;
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 java.awt.geom.*;
import javax.imageio.*;
import java.math.*;
import java.time.Duration;
class main {
static Class typeToClass(Type type) {
if (type == null) return null;
if (type instanceof Class) return ((Class) type);
if (type instanceof ParameterizedType) return optCast(Class.class, ((ParameterizedType) type).getRawType());
if (type instanceof GenericArrayType)
return typeToClass(((GenericArrayType) type).getGenericComponentType()).arrayType();
return null;
}
static A optCast(Class c, Object o) {
return isInstance(c, o) ? (A) o : null;
}
static boolean isInstance(Class type, Object arg) {
return type.isInstance(arg);
}
}