#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
  point() { x = y = 0.0; }
  point(double _x, double _y) : x(_x), y(_y) {}
  double norm() { return hypot(x, y); }
  point normalized() { return point(x, y) * (1.0 / norm()); }
  double angle() { return atan2(y, x); }
  bool operator<(point other) const {
    if (fabs(x - other.x) > 1e-9)
      return x < other.x;
    else
      return y < other.y;
  }
  bool operator==(point other) const {
    return (fabs(x - other.x) < 1e-9 && (fabs(y - other.y) < 1e-9));
  }
  point operator+(point other) const { return point(x + other.x, y + other.y); }
  point operator-(point other) const { return point(x - other.x, y - other.y); }
  point operator*(double k) const { return point(x * k, y * k); }
};
double inner(point p1, point p2) { return p1.x * p2.x + p1.y * p2.y; }
double cross(point p1, point p2) { return p1.x * p2.y - p1.y * p2.x; }
point proj(point u, point v) { return v * (inner(u, v) / inner(v, v)); }
point rotate(point p, double rad) {
  return point(p.x * cos(rad) - p.y * sin(rad),
               p.x * sin(rad) + p.y * cos(rad));
}
point p[200009];
point o = point(0, 0);
double theta = 0.0;
int N, Q;
int main() {
  scanf("%d %d", &N, &Q);
  point df;
  for (int i = 0; (i) < (N); (i)++) {
    scanf("%lf %lf", &p[i].x, &p[i].y);
    if (i == 0) df = p[0];
    p[i] = p[i] - df;
  }
  double A, cx, cy;
  A = 0;
  for (int i = 0; (i) < (N); (i)++) {
    A += cross(p[i], p[(i + 1) % N]);
  }
  A /= 2.0;
  cx = cy = 0.0;
  for (int i = 0; (i) < (N); (i)++) {
    cx += (p[i].x + p[(i + 1) % N].x) * cross(p[i], p[(i + 1) % N]);
    cy += (p[i].y + p[(i + 1) % N].y) * cross(p[i], p[(i + 1) % N]);
  }
  cx /= 6.0 * A;
  cy /= 6.0 * A;
  point c = point(cx, cy);
  for (int i = 0; (i) < (N); (i)++) p[i] = p[i] - c;
  int pins[2];
  pins[0] = 0;
  pins[1] = 1;
  df = df + c;
  for (int q = 1; (q) <= (Q); (q)++) {
    int op;
    scanf("%d", &op);
    if (op == 1) {
      int f, t;
      scanf("%d %d", &f, &t);
      f--;
      t--;
      point ref;
      if (pins[0] == f) {
        pins[0] = t;
        ref = p[pins[1]];
      } else {
        pins[1] = t;
        ref = p[pins[0]];
      }
      double t1 = ref.angle();
      double t2 = theta + acos(0);
      double dt = t1 - t2;
      theta += dt;
      point dor = o - ref;
      dor = rotate(dor, dt);
      o = ref + dor;
      point dx = point(cos(theta), sin(theta));
      point dy = point(-sin(theta), cos(theta));
      df.x -= inner(o, dx);
      df.y -= inner(o, dy);
      o = point(0, 0);
    } else {
      int v;
      scanf("%d", &v);
      v--;
      point dx = point(cos(theta), sin(theta));
      point dy = point(-sin(theta), cos(theta));
      double x = inner(p[v] - o, dx) + df.x;
      double y = inner(p[v] - o, dy) + df.y;
      printf("%.10f %.10f\n", x, y);
    }
  }
  return 0;
}
