#include <bits/stdc++.h>
using namespace std;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
template <class T>
T gcd(T a, T b) {
  return a ? gcd(b % a, a) : b;
}
template <class T>
T sqr(T a) {
  return a * a;
}
template <class T>
T sgn(T a) {
  return a > 0 ? 1 : (a < 0 ? -1 : 0);
}
const double pi = acos(-1.0);
int n;
int m;
const int N = 1e4 + 10;
struct point {
  long double x, y;
};
point p[N];
point mult(const array<array<long double, 2>, 2>& a, const point& pt) {
  return {a[0][0] * pt.x + a[0][1] * pt.y, a[1][0] * pt.x + a[1][1] * pt.y};
}
point add(const point& a, const point& b) { return {a.x + b.x, a.y + b.y}; }
array<array<long double, 2>, 2> mult(const array<array<long double, 2>, 2>& a,
                                     const array<array<long double, 2>, 2>& b) {
  array<array<long double, 2>, 2> c = {array<long double, 2>{0, 0},
                                       array<long double, 2>{0, 0}};
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++)
      for (int k = 0; k < 2; k++) {
        c[i][j] += a[i][k] * b[k][j];
      }
  return c;
}
point curp = {0, 0};
array<array<long double, 2>, 2> cura = {1, 0, 0, 1};
long double cural = 0;
point get_point(int id) {
  point pt = mult(cura, p[id]);
  return add(pt, curp);
}
array<array<long double, 2>, 2> get_al(long double al) {
  return {array<long double, 2>{cos(al), sin(al)},
          array<long double, 2>{-sin(al), cos(al)}};
}
long double get_square(const point& a, const point& b, const point& c) {
  return abs((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)) / 2;
}
point get_center() {
  point ac = {0, 0};
  long double ss = 0;
  for (int i = 0; i + 2 < n; i++) {
    long double s = get_square(p[0], p[i + 1], p[i + 2]);
    point c = p[0];
    c = add(c, p[i + 1]);
    c = add(c, p[i + 2]);
    c.x = c.x / 3.0 * s;
    c.y = c.y / 3.0 * s;
    ac = add(ac, c);
    ss += s;
  }
  ac.x /= ss;
  ac.y /= ss;
  return ac;
}
point curc;
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> p[i].x >> p[i].y;
  }
  int i1 = 0, i2 = 1;
  curc = get_center();
  for (int i = 0; i < m; i++) {
    cura = get_al(cural);
    int t, x, y;
    cin >> t;
    if (t == 1) {
      cin >> x >> y;
      x--;
      y--;
      int curi = i1;
      if (i1 == x) curi = i2;
      auto pt = get_point(curi);
      long double al = atan2(curc.x - pt.x, -(curc.y - pt.y));
      array<array<long double, 2>, 2> a = get_al(al);
      cural += al;
      curp.x = (curp.x - pt.x);
      curp.y = (curp.y - pt.y);
      curp = add(mult(a, curp), pt);
      if (i1 == x)
        i1 = y;
      else
        i2 = y;
      curc.x -= pt.x;
      curc.y -= pt.y;
      curc = add(mult(a, curc), pt);
    } else if (t == 2) {
      cin >> x;
      x--;
      auto pt = get_point(x);
      printf("%0.15lf %0.15lf\n", (double)pt.x, (double)pt.y);
    }
  }
  return 0;
}
